mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Update protobufs, add power config view
This commit is contained in:
parent
bab2251f7e
commit
594ebfd552
4 changed files with 151 additions and 18 deletions
|
|
@ -18,6 +18,7 @@
|
|||
DD23A50F26FD1B4400D9B90C /* PeripheralModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD23A50E26FD1B4400D9B90C /* PeripheralModel.swift */; };
|
||||
DD2553572855B02500E55709 /* LoRaConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2553562855B02500E55709 /* LoRaConfig.swift */; };
|
||||
DD2553592855B52700E55709 /* PositionConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2553582855B52700E55709 /* PositionConfig.swift */; };
|
||||
DD25535D285666C700E55709 /* PowerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD25535C285666C700E55709 /* PowerConfig.swift */; };
|
||||
DD2E65262767A01F00E45FC5 /* NodeDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2E65252767A01F00E45FC5 /* NodeDetail.swift */; };
|
||||
DD3501892852FC3B000FC853 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3501882852FC3B000FC853 /* Settings.swift */; };
|
||||
DD35018B2852FC79000FC853 /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD35018A2852FC79000FC853 /* UserSettings.swift */; };
|
||||
|
|
@ -98,6 +99,7 @@
|
|||
DD23A50E26FD1B4400D9B90C /* PeripheralModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralModel.swift; sourceTree = "<group>"; };
|
||||
DD2553562855B02500E55709 /* LoRaConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoRaConfig.swift; sourceTree = "<group>"; };
|
||||
DD2553582855B52700E55709 /* PositionConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PositionConfig.swift; sourceTree = "<group>"; };
|
||||
DD25535C285666C700E55709 /* PowerConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerConfig.swift; sourceTree = "<group>"; };
|
||||
DD2E65252767A01F00E45FC5 /* NodeDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeDetail.swift; sourceTree = "<group>"; };
|
||||
DD3501882852FC3B000FC853 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = "<group>"; };
|
||||
DD35018A2852FC79000FC853 /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = "<group>"; };
|
||||
|
|
@ -233,6 +235,7 @@
|
|||
DD2553582855B52700E55709 /* PositionConfig.swift */,
|
||||
DD8169FA271F1F3A00F4AB02 /* MeshLog.swift */,
|
||||
DD8169FE272476C700F4AB02 /* LogDocument.swift */,
|
||||
DD25535C285666C700E55709 /* PowerConfig.swift */,
|
||||
);
|
||||
path = Settings;
|
||||
sourceTree = "<group>";
|
||||
|
|
@ -592,6 +595,7 @@
|
|||
DDF924CA26FBB953009FE055 /* ConnectedDevice.swift in Sources */,
|
||||
DDAF8C5D26ED09490058C060 /* portnums.pb.swift in Sources */,
|
||||
DD9D8F2F2764403B00080993 /* Meshtastic.xcdatamodeld in Sources */,
|
||||
DD25535D285666C700E55709 /* PowerConfig.swift in Sources */,
|
||||
DD1BF2F92776FE2E008C8D2F /* UserMessageList.swift in Sources */,
|
||||
DDB2CC6E27F3EB47009C5FCC /* telemetry.pb.swift in Sources */,
|
||||
DD23A50F26FD1B4400D9B90C /* PeripheralModel.swift in Sources */,
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ struct Config {
|
|||
/// If set, we are powered from a low-current source (i.e. solar), so even if it looks like we have power flowing in
|
||||
/// we should try to minimize power consumption as much as possible.
|
||||
/// YOU DO NOT NEED TO SET THIS IF YOU'VE set is_router (it is implied in that case).
|
||||
var isLowPower: Bool = false
|
||||
var isPowerSaving: Bool = false
|
||||
|
||||
///
|
||||
/// Circumvents the logic block for determining whether the device is powered or not.
|
||||
|
|
@ -401,10 +401,6 @@ struct Config {
|
|||
/// If non-zero, the device will fully power off this many seconds after external power is removed.
|
||||
var onBatteryShutdownAfterSecs: UInt32 = 0
|
||||
|
||||
///
|
||||
/// If set to true, enable power saving features of the esp32
|
||||
var isPowerSaving: Bool = false
|
||||
|
||||
///
|
||||
/// Ratio of voltage divider for battery pin eg. 3.20 (R1=100k, R2=220k)
|
||||
/// Overrides the ADC_MULTIPLIER defined in variant for battery voltage calculation.
|
||||
|
|
@ -1350,10 +1346,9 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
static let protoMessageName: String = Config.protoMessageName + ".PowerConfig"
|
||||
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
|
||||
1: .standard(proto: "charge_current"),
|
||||
2: .standard(proto: "is_low_power"),
|
||||
2: .standard(proto: "is_power_saving"),
|
||||
3: .standard(proto: "is_always_powered"),
|
||||
4: .standard(proto: "on_battery_shutdown_after_secs"),
|
||||
5: .standard(proto: "is_power_saving"),
|
||||
6: .standard(proto: "adc_multiplier_override"),
|
||||
7: .standard(proto: "wait_bluetooth_secs"),
|
||||
9: .standard(proto: "mesh_sds_timeout_secs"),
|
||||
|
|
@ -1369,10 +1364,9 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
// enabled. https://github.com/apple/swift-protobuf/issues/1034
|
||||
switch fieldNumber {
|
||||
case 1: try { try decoder.decodeSingularEnumField(value: &self.chargeCurrent) }()
|
||||
case 2: try { try decoder.decodeSingularBoolField(value: &self.isLowPower) }()
|
||||
case 2: try { try decoder.decodeSingularBoolField(value: &self.isPowerSaving) }()
|
||||
case 3: try { try decoder.decodeSingularBoolField(value: &self.isAlwaysPowered) }()
|
||||
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.onBatteryShutdownAfterSecs) }()
|
||||
case 5: try { try decoder.decodeSingularBoolField(value: &self.isPowerSaving) }()
|
||||
case 6: try { try decoder.decodeSingularFloatField(value: &self.adcMultiplierOverride) }()
|
||||
case 7: try { try decoder.decodeSingularUInt32Field(value: &self.waitBluetoothSecs) }()
|
||||
case 9: try { try decoder.decodeSingularUInt32Field(value: &self.meshSdsTimeoutSecs) }()
|
||||
|
|
@ -1388,8 +1382,8 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
if self.chargeCurrent != .maunset {
|
||||
try visitor.visitSingularEnumField(value: self.chargeCurrent, fieldNumber: 1)
|
||||
}
|
||||
if self.isLowPower != false {
|
||||
try visitor.visitSingularBoolField(value: self.isLowPower, fieldNumber: 2)
|
||||
if self.isPowerSaving != false {
|
||||
try visitor.visitSingularBoolField(value: self.isPowerSaving, fieldNumber: 2)
|
||||
}
|
||||
if self.isAlwaysPowered != false {
|
||||
try visitor.visitSingularBoolField(value: self.isAlwaysPowered, fieldNumber: 3)
|
||||
|
|
@ -1397,9 +1391,6 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
if self.onBatteryShutdownAfterSecs != 0 {
|
||||
try visitor.visitSingularUInt32Field(value: self.onBatteryShutdownAfterSecs, fieldNumber: 4)
|
||||
}
|
||||
if self.isPowerSaving != false {
|
||||
try visitor.visitSingularBoolField(value: self.isPowerSaving, fieldNumber: 5)
|
||||
}
|
||||
if self.adcMultiplierOverride != 0 {
|
||||
try visitor.visitSingularFloatField(value: self.adcMultiplierOverride, fieldNumber: 6)
|
||||
}
|
||||
|
|
@ -1423,10 +1414,9 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
|
|||
|
||||
static func ==(lhs: Config.PowerConfig, rhs: Config.PowerConfig) -> Bool {
|
||||
if lhs.chargeCurrent != rhs.chargeCurrent {return false}
|
||||
if lhs.isLowPower != rhs.isLowPower {return false}
|
||||
if lhs.isPowerSaving != rhs.isPowerSaving {return false}
|
||||
if lhs.isAlwaysPowered != rhs.isAlwaysPowered {return false}
|
||||
if lhs.onBatteryShutdownAfterSecs != rhs.onBatteryShutdownAfterSecs {return false}
|
||||
if lhs.isPowerSaving != rhs.isPowerSaving {return false}
|
||||
if lhs.adcMultiplierOverride != rhs.adcMultiplierOverride {return false}
|
||||
if lhs.waitBluetoothSecs != rhs.waitBluetoothSecs {return false}
|
||||
if lhs.meshSdsTimeoutSecs != rhs.meshSdsTimeoutSecs {return false}
|
||||
|
|
|
|||
140
MeshtasticApple/Views/Settings/PowerConfig.swift
Normal file
140
MeshtasticApple/Views/Settings/PowerConfig.swift
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
//
|
||||
// PowerConfig.swift
|
||||
// Meshtastic Apple
|
||||
//
|
||||
// Copyright (c) Garth Vander Houwen 6/12/22.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
enum ChargeCurrents: Int, CaseIterable, Identifiable {
|
||||
|
||||
case maunset = 0
|
||||
case ma100 = 1
|
||||
case ma190 = 2
|
||||
case ma280 = 3
|
||||
case ma360 = 4
|
||||
case ma450 = 5
|
||||
case ma550 = 6
|
||||
case ma630 = 7
|
||||
case ma700 = 8
|
||||
case ma780 = 9
|
||||
case ma880 = 10
|
||||
case ma960 = 11
|
||||
case ma1000 = 12
|
||||
case ma1080 = 13
|
||||
case ma1160 = 14
|
||||
case ma1240 = 15
|
||||
case ma1320 = 16
|
||||
|
||||
var id: Int { self.rawValue }
|
||||
var description: String {
|
||||
get {
|
||||
switch self {
|
||||
|
||||
case .maunset:
|
||||
return "UNSET (default)"
|
||||
case .ma100:
|
||||
return "100 mA"
|
||||
case .ma190:
|
||||
return "190 mA"
|
||||
case .ma280:
|
||||
return "280 mA"
|
||||
case .ma360:
|
||||
return "360 mA"
|
||||
case .ma450:
|
||||
return "450 mA"
|
||||
case .ma550:
|
||||
return "550 mA"
|
||||
case .ma630:
|
||||
return "630 mA"
|
||||
case .ma700:
|
||||
return "700 mA"
|
||||
case .ma780:
|
||||
return "780 mA"
|
||||
case .ma880:
|
||||
return "880 mA"
|
||||
case .ma960:
|
||||
return "960 mA"
|
||||
case .ma1000:
|
||||
return "1000 mA"
|
||||
case .ma1080:
|
||||
return "1080 mA"
|
||||
case .ma1160:
|
||||
return "1160 mA"
|
||||
case .ma1240:
|
||||
return "1240 mA"
|
||||
case .ma1320:
|
||||
return "1320 mA"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct PowerConfig: View {
|
||||
|
||||
@Environment(\.managedObjectContext) var context
|
||||
@EnvironmentObject var bleManager: BLEManager
|
||||
|
||||
@State var chargeCurrent = 0
|
||||
@State var deviceGpsEnabled = true
|
||||
@State var fixedPosition = false
|
||||
@State var gpsUpdateInterval: Int32 = 0
|
||||
@State var gpsAttemptTime: Int32 = 0
|
||||
@State var positionBroadcastSeconds: Int32 = 0
|
||||
|
||||
var body: some View {
|
||||
|
||||
VStack {
|
||||
|
||||
Form {
|
||||
|
||||
Section(header: Text("Charging Options")) {
|
||||
|
||||
Picker("Charge Current", selection: $chargeCurrent) {
|
||||
ForEach(ChargeCurrents.allCases) { cc in
|
||||
Text(cc.description)
|
||||
}
|
||||
}
|
||||
.pickerStyle(DefaultPickerStyle())
|
||||
|
||||
Text("Sets the charge control current of devices with a battery charger that can be configured. This is passed into the axp power management chip like on the tbeam.")
|
||||
.font(.caption)
|
||||
.listRowSeparator(.visible)
|
||||
|
||||
|
||||
Toggle(isOn: $fixedPosition) {
|
||||
|
||||
Label("Fixed Position", systemImage: "location.square.fill")
|
||||
}
|
||||
.toggleStyle(SwitchToggleStyle(tint: .accentColor))
|
||||
if fixedPosition {
|
||||
|
||||
Text("Set to current location here")
|
||||
.font(.caption)
|
||||
.listRowSeparator(.visible)
|
||||
}
|
||||
}
|
||||
Section(header: Text("Position Flags")) {
|
||||
Text("TODO")
|
||||
.font(.caption)
|
||||
.listRowSeparator(.visible)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Power Config")
|
||||
.navigationBarItems(trailing:
|
||||
|
||||
ZStack {
|
||||
|
||||
ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.lastFourCode : "????")
|
||||
})
|
||||
.onAppear {
|
||||
|
||||
self.bleManager.context = context
|
||||
}
|
||||
.navigationViewStyle(StackNavigationViewStyle())
|
||||
}
|
||||
}
|
||||
|
|
@ -64,7 +64,7 @@ struct Settings: View {
|
|||
Text("Position")
|
||||
}
|
||||
NavigationLink {
|
||||
PositionConfig()
|
||||
PowerConfig()
|
||||
} label: {
|
||||
|
||||
Image(systemName: "bolt")
|
||||
|
|
@ -72,7 +72,6 @@ struct Settings: View {
|
|||
|
||||
Text("Power")
|
||||
}
|
||||
.disabled(true)
|
||||
|
||||
}
|
||||
Section("Module Configuration") {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue