mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
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:
parent
7d478f71fd
commit
65dde905f7
6 changed files with 234 additions and 28 deletions
|
|
@ -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 */,
|
||||
|
|
|
|||
186
Meshtastic/Enums/HardwareModels.swift
Normal file
186
Meshtastic/Enums/HardwareModels.swift
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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] {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue