diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 1b641181..75a1b77c 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -152,6 +152,7 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo newChannel.name = channel.settings.name newChannel.role = Int32(channel.role.rawValue) newChannel.psk = channel.settings.psk + //newChannel.precisionBits = channel.settings.precisionBits guard let mutableChannels = fetchedMyInfo[0].channels!.mutableCopy() as? NSMutableOrderedSet else { return } diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 28.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 28.xcdatamodel/contents index cb1c1d4e..5c178f33 100644 --- a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 28.xcdatamodel/contents +++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV 28.xcdatamodel/contents @@ -34,7 +34,7 @@ - + @@ -282,6 +282,7 @@ + diff --git a/Meshtastic/Views/Settings/Channels.swift b/Meshtastic/Views/Settings/Channels.swift index 5c8aa7e3..6209fee4 100644 --- a/Meshtastic/Views/Settings/Channels.swift +++ b/Meshtastic/Views/Settings/Channels.swift @@ -44,8 +44,14 @@ struct Channels: View { @State private var positionPrecision = 32.0 @State private var preciseLocation = true @State private var positionsEnabled = true + + /// Minimum Version for granular position configuration + @State var minimumVersion = "2.2.20" + var body: some View { + + let supportedVersion = bleManager.connectedVersion == "0.0.0" || self.minimumVersion.compare(bleManager.connectedVersion, options: .numeric) == .orderedAscending || minimumVersion.compare(bleManager.connectedVersion, options: .numeric) == .orderedSame VStack { List { @@ -73,6 +79,16 @@ struct Channels: View { uplink = channel.uplinkEnabled downlink = channel.downlinkEnabled hasChanges = false + if !supportedVersion && channelRole == 1 { + positionPrecision = 0 + preciseLocation = true + positionsEnabled = true + + } else if !supportedVersion && channelRole == 2 { + positionPrecision = 32 + preciseLocation = false + positionsEnabled = false + } isPresentingEditView = true }) { VStack(alignment: .leading) { @@ -217,25 +233,27 @@ struct Channels: View { Label("Positions Enabled", systemImage: positionsEnabled ? "mappin" : "mappin.slash") } .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + .disabled(!supportedVersion) } if positionsEnabled { VStack(alignment: .leading) { Toggle(isOn: $preciseLocation) { - Label("Precise Location", systemImage: "location.circle") + Label("Precise Location", systemImage: "scope") } .toggleStyle(SwitchToggleStyle(tint: .accentColor)) + .disabled(!supportedVersion) .listRowSeparator(.visible) .onChange(of: preciseLocation) { pl in if pl == false { - positionPrecision = 16 + positionPrecision = 13 } } } if !preciseLocation { VStack(alignment: .leading) { - Label("Position Precision", systemImage: "scope") + Label("Reduce Precision", systemImage: "location.viewfinder") Slider( value: $positionPrecision, in: 11...16, @@ -321,6 +339,7 @@ struct Channels: View { newChannel.name = channel.settings.name newChannel.role = Int32(channel.role.rawValue) newChannel.psk = channel.settings.psk + guard let mutableChannels = node?.myInfo?.channels?.mutableCopy() as? NSMutableOrderedSet else { return }