From f12eed755dde714b6ca6f35769f9ad553ebf0b1d Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sun, 26 Nov 2023 12:54:45 -0800 Subject: [PATCH] Config cleanup --- Meshtastic/Enums/DisplayEnums.swift | 26 +++++++++++++++++++ .../contents | 1 + Meshtastic/Persistence/UpdateCoreData.swift | 2 ++ .../Views/Settings/Config/DisplayConfig.swift | 17 ++++++++++++ .../Views/Settings/Config/LoRaConfig.swift | 12 +++++++++ 5 files changed, 58 insertions(+) diff --git a/Meshtastic/Enums/DisplayEnums.swift b/Meshtastic/Enums/DisplayEnums.swift index 42eb6339..e227fdc2 100644 --- a/Meshtastic/Enums/DisplayEnums.swift +++ b/Meshtastic/Enums/DisplayEnums.swift @@ -168,3 +168,29 @@ enum DisplayModes: Int, CaseIterable, Identifiable { } } } + +// Default of 0 is metric +enum Units: Int, CaseIterable, Identifiable { + + case metric = 0 + case imperial = 1 + + var id: Int { self.rawValue } + var description: String { + switch self { + case .metric: + return "Metric" + case .imperial: + return "Imperial" + } + } + func protoEnumValue() -> Config.DisplayConfig.DisplayUnits { + + switch self { + case .metric: + return Config.DisplayConfig.DisplayUnits.metric + case .imperial: + return Config.DisplayConfig.DisplayUnits.imperial + } + } +} diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV20.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV20.xcdatamodel/contents index b042f51f..fc942300 100644 --- a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV20.xcdatamodel/contents +++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV20.xcdatamodel/contents @@ -92,6 +92,7 @@ + diff --git a/Meshtastic/Persistence/UpdateCoreData.swift b/Meshtastic/Persistence/UpdateCoreData.swift index 8588483c..d210cb0d 100644 --- a/Meshtastic/Persistence/UpdateCoreData.swift +++ b/Meshtastic/Persistence/UpdateCoreData.swift @@ -413,6 +413,7 @@ func upsertDisplayConfigPacket(config: Meshtastic.Config.DisplayConfig, nodeNum: newDisplayConfig.flipScreen = config.flipScreen newDisplayConfig.oledType = Int32(config.oled.rawValue) newDisplayConfig.displayMode = Int32(config.displaymode.rawValue) + newDisplayConfig.units = Int32(config.units.rawValue) newDisplayConfig.headingBold = config.headingBold fetchedNode[0].displayConfig = newDisplayConfig @@ -425,6 +426,7 @@ func upsertDisplayConfigPacket(config: Meshtastic.Config.DisplayConfig, nodeNum: fetchedNode[0].displayConfig?.flipScreen = config.flipScreen fetchedNode[0].displayConfig?.oledType = Int32(config.oled.rawValue) fetchedNode[0].displayConfig?.displayMode = Int32(config.displaymode.rawValue) + fetchedNode[0].displayConfig?.units = Int32(config.units.rawValue) fetchedNode[0].displayConfig?.headingBold = config.headingBold } diff --git a/Meshtastic/Views/Settings/Config/DisplayConfig.swift b/Meshtastic/Views/Settings/Config/DisplayConfig.swift index d3d95b7d..f600dda3 100644 --- a/Meshtastic/Views/Settings/Config/DisplayConfig.swift +++ b/Meshtastic/Views/Settings/Config/DisplayConfig.swift @@ -26,6 +26,7 @@ struct DisplayConfig: View { @State var flipScreen = false @State var oledType = 0 @State var displayMode = 0 + @State var units = 0 var body: some View { @@ -125,6 +126,15 @@ struct DisplayConfig: View { Text("The format used to display GPS coordinates on the device screen.") .font(.caption) .listRowSeparator(.visible) + + Picker("Display Units", selection: $units ) { + ForEach(Units.allCases) { un in + Text(un.description) + } + } + .pickerStyle(DefaultPickerStyle()) + Text("Units displayed on the device screen") + .font(.caption) } } .disabled(self.bleManager.connectedPeripheral == nil || node?.displayConfig == nil) @@ -160,6 +170,7 @@ struct DisplayConfig: View { dc.flipScreen = flipScreen dc.oled = OledTypes(rawValue: oledType)!.protoEnumValue() dc.displaymode = DisplayModes(rawValue: displayMode)!.protoEnumValue() + dc.units = Units(rawValue: units)!.protoEnumValue() let adminMessageId = bleManager.saveDisplayConfig(config: dc, fromUser: connectedNode!.user!, toUser: node!.user!, adminIndex: connectedNode?.myInfo?.adminIndex ?? 0) if adminMessageId > 0 { @@ -233,6 +244,11 @@ struct DisplayConfig: View { if newDisplayMode != node!.displayConfig!.displayMode { hasChanges = true } } } + .onChange(of: units) { newUnits in + if node != nil && node!.displayConfig != nil { + if newUnits != node!.displayConfig!.units { hasChanges = true } + } + } } func setDisplayValues() { self.gpsFormat = Int(node?.displayConfig?.gpsFormat ?? 0) @@ -243,6 +259,7 @@ struct DisplayConfig: View { self.flipScreen = node?.displayConfig?.flipScreen ?? false self.oledType = Int(node?.displayConfig?.oledType ?? 0) self.displayMode = Int(node?.displayConfig?.displayMode ?? 0) + self.units = Int(node?.displayConfig?.units ?? 0) self.hasChanges = false } } diff --git a/Meshtastic/Views/Settings/Config/LoRaConfig.swift b/Meshtastic/Views/Settings/Config/LoRaConfig.swift index db176fb5..dccef435 100644 --- a/Meshtastic/Views/Settings/Config/LoRaConfig.swift +++ b/Meshtastic/Views/Settings/Config/LoRaConfig.swift @@ -184,6 +184,12 @@ struct LoRaConfig: View { .scrollDismissesKeyboard(.immediately) .focused($focusedField, equals: .frequencyOverride) } + HStack { + Image(systemName: "antenna.radiowaves.left.and.right") + .foregroundColor(.accentColor) + Stepper("\(txPower)db Transmit Power", value: $txPower, in: 1...30, step: 1) + .padding(5) + } } } .disabled(self.bleManager.connectedPeripheral == nil || node?.loRaConfig == nil) @@ -214,6 +220,7 @@ struct LoRaConfig: View { lc.modemPreset = ModemPresets(rawValue: modemPreset)!.protoEnumValue() lc.usePreset = usePreset lc.txEnabled = txEnabled + lc.txPower = Int32(txPower) lc.channelNum = UInt32(channelNum) lc.bandwidth = UInt32(bandwidth) lc.codingRate = UInt32(codingRate) @@ -302,6 +309,11 @@ struct LoRaConfig: View { if newOverrideFrequency != node!.loRaConfig!.overrideFrequency { hasChanges = true } } } + .onChange(of: txPower) { newTxPower in + if node != nil && node!.loRaConfig != nil { + if newTxPower != node!.loRaConfig!.txPower { hasChanges = true } + } + } } func setLoRaValues() { self.hopLimit = Int(node?.loRaConfig?.hopLimit ?? 3)