Add descriptive text for LoRa Config depending on state

Fix rx boosted gain toggle
Make a big hardware model enum
This commit is contained in:
Garth Vander Houwen 2023-03-11 09:26:52 -08:00
parent 7d478f71fd
commit 65dde905f7
6 changed files with 234 additions and 28 deletions

View file

@ -18,6 +18,7 @@
DD2553572855B02500E55709 /* LoRaConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2553562855B02500E55709 /* LoRaConfig.swift */; };
DD2553592855B52700E55709 /* PositionConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2553582855B52700E55709 /* PositionConfig.swift */; };
DD2AD8A8296D2DF9001FF0E7 /* MapViewSwiftUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2AD8A7296D2DF9001FF0E7 /* MapViewSwiftUI.swift */; };
DD2DC2C029BCD8AB003B383C /* HardwareModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD2DC2BF29BCD8AB003B383C /* HardwareModels.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 */; };
@ -178,6 +179,7 @@
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>"; };
DD2AD8A7296D2DF9001FF0E7 /* MapViewSwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapViewSwiftUI.swift; sourceTree = "<group>"; };
DD2DC2BF29BCD8AB003B383C /* HardwareModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HardwareModels.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>"; };
@ -486,6 +488,7 @@
DD1925B828CDA93900720036 /* SerialConfigEnums.swift */,
DD994B68295F88B60013760A /* IntervalEnums.swift */,
DD5E5239298EFA5300D21B61 /* TelemetryWeather.swift */,
DD2DC2BF29BCD8AB003B383C /* HardwareModels.swift */,
);
path = Enums;
sourceTree = "<group>";
@ -930,6 +933,7 @@
DD47E3D626F17ED900029299 /* CircleText.swift in Sources */,
DDC2E18F26CE25FE0042C5E4 /* ContentView.swift in Sources */,
DD2553572855B02500E55709 /* LoRaConfig.swift in Sources */,
DD2DC2C029BCD8AB003B383C /* HardwareModels.swift in Sources */,
DDB6ABD928B0A4BA00384BA1 /* BluetoothModes.swift in Sources */,
DDD9E4E4284B208E003777C5 /* UserEntityExtension.swift in Sources */,
DD2553592855B52700E55709 /* PositionConfig.swift in Sources */,

View file

@ -0,0 +1,186 @@
//
// HardwareModels.swift
// Meshtastic
//
// Copyright(c) Garth Vander Houwen 3/11/23.
//
import Foundation
// Default of 0 is Client
enum HardwareModels: Int, CaseIterable, Identifiable {
case UNSET = 0
case TLORA_V2 = 1
case TLORA_V1 = 2
case TLORA_V2_1_1P6 = 3
case TBEAM = 4
case HELTEC_V2_0 = 5
case TBEAM_V0P7 = 6
case T_ECHO = 7
case TLORA_V1_1P3 = 8
case RAK4631 = 9
case HELTEC_V2_1 = 10
case HELTEC_V1 = 11
case LILYGO_TBEAM_S3_CORE = 12
case RAK11200 = 13
case NANO_G1 = 14
case TLORA_V2_1_1P8 = 15
case TLORA_T3_S3 = 16
case NANO_G1_EXPLORER = 17
case STATION_G1 = 25
case M5STACK = 42
case HELTEC_V3 = 43
case HELTEC_WSL_V3 = 45
var id: Int { self.rawValue }
var description: String {
switch self {
case .UNSET:
return NSLocalizedString("unset", comment: "UNSET")
case .TLORA_V2:
return "TLoRa V2"
case .TLORA_V1:
return "TLoRa V1"
case .TLORA_V2_1_1P6:
return "TLoRa V2.1.1.6"
case .TBEAM:
return "TBeam"
case .HELTEC_V2_0:
return "HELTEC V2.0"
case .TBEAM_V0P7:
return "TBeam 0.7"
case .T_ECHO:
return "TEcho"
case .TLORA_V1_1P3:
return "TLORA V1.1.3"
case .RAK4631:
return "RAK 4631 NRF"
case .HELTEC_V2_1:
return "HELTEC V2.1"
case .HELTEC_V1:
return "HELTEC V1"
case .LILYGO_TBEAM_S3_CORE:
return "TBEAM S3"
case .RAK11200:
return "RAK 11200 ESP32"
case .NANO_G1:
return "Nano G1"
case .TLORA_V2_1_1P8:
return "TLoRa V2.1.1.8"
case .TLORA_T3_S3:
return "TLoRa T3 S3"
case .NANO_G1_EXPLORER:
return "Nano G1 Explorer"
case .STATION_G1:
return "Station G1"
case .M5STACK:
return "M5 Stack"
case .HELTEC_V3:
return "Heltec V3"
case .HELTEC_WSL_V3:
return "Heltec wireless stick lite V3"
}
}
var firmwareStrings: [String] {
switch self {
case .UNSET:
return []
case .TLORA_V2:
return ["firmware-tlora-v2-"]
case .TLORA_V1:
return ["firmware-tlora-v1-"]
case .TLORA_V2_1_1P6:
return ["firmware-tlora-v2-1-1.6-"]
case .TBEAM:
return ["firmware-tbeam-"]
case .HELTEC_V2_0:
return ["firmware-heltec-v2.0-"]
case .TBEAM_V0P7:
return ["firmware-tbeam0.7-"]
case .T_ECHO:
return ["firmware-t-echo-"]
case .TLORA_V1_1P3:
return ["firmware-tlora_v1_3-"]
case .RAK4631:
return ["firmware-rak4631-", "firmware-rak4631_eink-"]
case .HELTEC_V2_1:
return ["firmware-heltec-v2.1-"]
case .HELTEC_V1:
return ["firmware-heltec-v1-"]
case .LILYGO_TBEAM_S3_CORE:
return ["firmware-tbeam-s3-core-"]
case .RAK11200:
return ["firmware-rak11200-"]
case .NANO_G1:
return ["firmware-nano-g1-"]
case .TLORA_V2_1_1P8:
return ["firmware-tlora-v2-1-1.8-"]
case .TLORA_T3_S3:
return ["firmware-tlora-t3s3-v1-"]
case .NANO_G1_EXPLORER:
return ["firmware-nano-g1-explorer-"]
case .STATION_G1:
return ["firmware-station-g1-"]
case .M5STACK:
return ["firmware-m5stack-core-", "firmware-m5stack-coreink-"]
case .HELTEC_V3:
return ["firmware-heltec-v3-"]
case .HELTEC_WSL_V3:
return ["firmware-heltec-wsl-v3-"]
}
}
func protoEnumValue() -> HardwareModel {
switch self {
case .UNSET:
return HardwareModel.unset
case .TLORA_V2:
return HardwareModel.tloraV2
case .TLORA_V1:
return HardwareModel.tloraV1
case .TLORA_V2_1_1P6:
return HardwareModel.tloraV211P6
case .TBEAM:
return HardwareModel.tbeam
case .HELTEC_V2_0:
return HardwareModel.heltecV20
case .TBEAM_V0P7:
return HardwareModel.tbeamV0P7
case .T_ECHO:
return HardwareModel.tEcho
case .TLORA_V1_1P3:
return HardwareModel.tloraV11P3
case .RAK4631:
return HardwareModel.rak4631
case .HELTEC_V2_1:
return HardwareModel.heltecV21
case .HELTEC_V1:
return HardwareModel.heltecV1
case .LILYGO_TBEAM_S3_CORE:
return HardwareModel.lilygoTbeamS3Core
case .RAK11200:
return HardwareModel.rak11200
case .NANO_G1:
return HardwareModel.nanoG1
case .TLORA_V2_1_1P8:
return HardwareModel.tloraV211P8
case .TLORA_T3_S3:
return HardwareModel.tloraT3S3
case .NANO_G1_EXPLORER:
return HardwareModel.nanoG1Explorer
case .STATION_G1:
return HardwareModel.stationG1
case .M5STACK:
return HardwareModel.m5Stack
case .HELTEC_V3:
return HardwareModel.heltecV3
case .HELTEC_WSL_V3:
return HardwareModel.heltecWslV3
}
}
}

View file

@ -428,6 +428,7 @@ func upsertLoRaConfigPacket(config: Meshtastic.Config.LoRaConfig, nodeNum: Int64
newLoRaConfig.txPower = Int32(config.txPower)
newLoRaConfig.txEnabled = config.txEnabled
newLoRaConfig.channelNum = Int32(config.channelNum)
newLoRaConfig.sx126xRxBoostedGain = config.sx126XRxBoostedGain
fetchedNode[0].loRaConfig = newLoRaConfig
} else {
fetchedNode[0].loRaConfig?.regionCode = Int32(config.region.rawValue)
@ -443,6 +444,7 @@ func upsertLoRaConfigPacket(config: Meshtastic.Config.LoRaConfig, nodeNum: Int64
fetchedNode[0].loRaConfig?.txPower = Int32(config.txPower)
fetchedNode[0].loRaConfig?.txEnabled = config.txEnabled
fetchedNode[0].loRaConfig?.channelNum = Int32(config.channelNum)
fetchedNode[0].loRaConfig?.sx126xRxBoostedGain = config.sx126XRxBoostedGain
}
do {
try context.save()

View file

@ -46,6 +46,24 @@ struct LoRaConfig: View {
VStack {
Form {
if node != nil && node?.num ?? 0 != bleManager.connectedPeripheral.num {
// Let users know what is going on if they are using remote admin and don't have the lora config yet
if node?.loRaConfig == nil {
Text("LoRa config data has been requested but has not yet returned from the remote node. You can check the status of admin message requests in the admin message log.")
.font(.callout)
.foregroundColor(.orange)
} else {
Text("Remote administration for: \(node?.user?.longName ?? "Unknown")")
.font(.title3)
}
} else if node != nil && node?.num ?? 0 == bleManager.connectedPeripheral.num {
Text("Configuration for: \(node?.user?.longName ?? "Unknown")")
.font(.title3)
} else {
Text("Please connect to a radio to configure settings.")
.font(.callout)
.foregroundColor(.orange)
}
Section(header: Text("Options")) {
Picker("Region", selection: $region ) {
@ -216,6 +234,7 @@ struct LoRaConfig: View {
self.codingRate = Int(node?.loRaConfig?.codingRate ?? 0)
self.spreadFactor = Int(node?.loRaConfig?.spreadFactor ?? 0)
self.rxBoostedGain = node?.loRaConfig?.sx126xRxBoostedGain ?? false
print(rxBoostedGain)
self.hasChanges = false
// Need to request a LoRaConfig from the remote node before allowing changes

View file

@ -66,7 +66,7 @@ struct Firmware: View {
Spacer()
}
}
.padding([.leading, .trailing])
.padding([.leading, .trailing, .bottom])
.padding(.bottom, 5)
VStack (alignment: .leading) {
Text("Firmware Releases")
@ -75,45 +75,39 @@ struct Firmware: View {
List {
Section(header: Text("Stable")) {
ForEach(firmwareReleaseData.releases?.stable ?? [], id: \.id) { fr in
HStack() {
Link(fr.title ?? "Unknown", destination: URL(string: fr.pageUrl ?? "")!)
.font(.caption)
Spacer()
Link(destination: URL(string: fr.zipUrl ?? "")!) {
VStack {
Image(systemName: "square.and.arrow.down")
.font(.title3)
}
Link(destination: URL(string: fr.zipUrl ?? "")!) {
HStack() {
Text(fr.title ?? "Unknown")
.font(.caption)
Spacer()
Image(systemName: "square.and.arrow.down")
.font(.title3)
}
}
}
}
Section("Alpha") {
ForEach(firmwareReleaseData.releases?.alpha ?? [], id: \.id) { fr in
HStack() {
Link(fr.title ?? "Unknown", destination: URL(string: fr.pageUrl ?? "")!)
.font(.caption)
Spacer()
Link(destination: URL(string: fr.zipUrl ?? "")!) {
VStack {
Image(systemName: "square.and.arrow.down")
.font(.title3)
}
Link(destination: URL(string: fr.zipUrl ?? "")!) {
HStack() {
Text(fr.title ?? "Unknown")
.font(.caption)
Spacer()
Image(systemName: "square.and.arrow.down")
.font(.title3)
}
}
}
}
Section("Pull Requests") {
ForEach(firmwareReleaseData.pullRequests ?? [], id: \.id) { fr in
HStack() {
Link(fr.title ?? "Unknown", destination: URL(string: fr.pageUrl ?? "")!)
.font(.caption)
Spacer()
Link(destination: URL(string: fr.zipUrl ?? "")!) {
VStack {
Image(systemName: "square.and.arrow.down")
.font(.title3)
}
Link(destination: URL(string: fr.zipUrl ?? "")!) {
HStack() {
Text(fr.title ?? "Unknown")
.font(.caption)
Spacer()
Image(systemName: "square.and.arrow.down")
.font(.title3)
}
}
}

View file

@ -287,6 +287,7 @@ struct ShareChannels: View {
loRaConfig.txPower = node?.loRaConfig?.txPower ?? 0
loRaConfig.usePreset = node?.loRaConfig?.usePreset ?? true
loRaConfig.channelNum = UInt32(node?.loRaConfig?.channelNum ?? 0)
loRaConfig.sx126XRxBoostedGain = node?.loRaConfig?.sx126xRxBoostedGain ?? false
channelSet.loraConfig = loRaConfig
if node?.myInfo?.channels != nil && node?.myInfo?.channels?.count ?? 0 > 0 {
for ch in node!.myInfo!.channels!.array as! [ChannelEntity] {