From b0c3ff10ab911c74141b12734480f01c97cb0fdf Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Sat, 2 Jul 2022 10:06:50 -0700 Subject: [PATCH] Clean up the unknownApp portNum handling, hook up module config for range test --- Meshtastic/Helpers/BLEManager.swift | 206 ++++++++++-------- Meshtastic/Helpers/MeshPackets.swift | 6 +- .../contents | 9 +- .../Config/Module/RangeTestConfig.swift | 21 +- Meshtastic/Views/Settings/UserConfig.swift | 9 +- 5 files changed, 136 insertions(+), 115 deletions(-) diff --git a/Meshtastic/Helpers/BLEManager.swift b/Meshtastic/Helpers/BLEManager.swift index 98cf3de8..9c790035 100644 --- a/Meshtastic/Helpers/BLEManager.swift +++ b/Meshtastic/Helpers/BLEManager.swift @@ -456,60 +456,65 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph // Handle Any local only packets we get over BLE case .unknownApp: - if decodedInfo.myInfo.myNodeNum != 0 { + var nowKnown = false + + // MyInfo + if decodedInfo.myInfo.isInitialized && decodedInfo.myInfo.myNodeNum > 0 { - let myInfo = myInfoPacket(myInfo: decodedInfo.myInfo, meshLogging: meshLoggingEnabled, context: context!) + nowKnown = true + let myInfo = myInfoPacket(myInfo: decodedInfo.myInfo, meshLogging: meshLoggingEnabled, context: context!) + + if myInfo != nil { - if myInfo != nil { - - self.connectedPeripheral.bitrate = myInfo!.bitrate - self.connectedPeripheral.num = myInfo!.myNodeNum - lastConnnectionVersion = myInfo?.firmwareVersion ?? myInfo!.firmwareVersion ?? "Unknown" - self.connectedPeripheral.firmwareVersion = myInfo!.firmwareVersion ?? "Unknown" - self.connectedPeripheral.name = myInfo!.bleName ?? "Unknown" - self.connectedPeripheral.longName = myInfo!.bleName ?? "Unknown" - - } - - } else if decodedInfo.nodeInfo.num != 0 { + self.connectedPeripheral.bitrate = myInfo!.bitrate + self.connectedPeripheral.num = myInfo!.myNodeNum + lastConnnectionVersion = myInfo?.firmwareVersion ?? myInfo!.firmwareVersion ?? "Unknown" + self.connectedPeripheral.firmwareVersion = myInfo!.firmwareVersion ?? "Unknown" + self.connectedPeripheral.name = myInfo!.bleName ?? "Unknown" + self.connectedPeripheral.longName = myInfo!.bleName ?? "Unknown" - let nodeInfo = nodeInfoPacket(nodeInfo: decodedInfo.nodeInfo, meshLogging: meshLoggingEnabled, context: context!) + } + } + // NodeInfo + if decodedInfo.nodeInfo.num != 0 { + + nowKnown = true + let nodeInfo = nodeInfoPacket(nodeInfo: decodedInfo.nodeInfo, meshLogging: meshLoggingEnabled, context: context!) + + if nodeInfo != nil { - if nodeInfo != nil { - - self.connectedPeripheral.channelUtilization = decodedInfo.nodeInfo.deviceMetrics.channelUtilization - self.connectedPeripheral.airTime = decodedInfo.nodeInfo.deviceMetrics.airUtilTx + self.connectedPeripheral.channelUtilization = decodedInfo.nodeInfo.deviceMetrics.channelUtilization + self.connectedPeripheral.airTime = decodedInfo.nodeInfo.deviceMetrics.airUtilTx - if self.connectedPeripheral != nil && self.connectedPeripheral.num == nodeInfo!.num { + if self.connectedPeripheral != nil && self.connectedPeripheral.num == nodeInfo!.num { - if nodeInfo!.user != nil { - - connectedPeripheral.shortName = nodeInfo!.user!.shortName ?? "????" - connectedPeripheral.longName = nodeInfo!.user!.longName ?? "Unknown" - } + if nodeInfo!.user != nil { + + connectedPeripheral.shortName = nodeInfo!.user!.shortName ?? "????" + connectedPeripheral.longName = nodeInfo!.user!.longName ?? "Unknown" } } - - } else if decodedInfo.config.isInitialized { - - localConfig(config: decodedInfo.config, meshlogging: meshLoggingEnabled, context: context!, nodeNum: self.connectedPeripheral.num, nodeLongName: self.connectedPeripheral.longName) - - } else if decodedInfo.moduleConfig.isInitialized { - - moduleConfig(config: decodedInfo.moduleConfig, meshlogging: meshLoggingEnabled, context: context!, nodeNum: self.connectedPeripheral.num, nodeLongName: self.connectedPeripheral.longName) - - } else { - - if decodedInfo.configCompleteID == 0 { - - if meshLoggingEnabled { MeshLogger.log("ℹ️ MESH PACKET received for App UNHANDLED \(try! decodedInfo.packet.jsonString())") } - } else { - - if meshLoggingEnabled { MeshLogger.log("ℹ️ MESH PACKET received for Unknown App UNHANDLED \(try! decodedInfo.packet.jsonString())") } - } - - print(decodedInfo.moduleConfig.isInitialized) } + } + // Config + if decodedInfo.config.isInitialized { + + nowKnown = true + localConfig(config: decodedInfo.config, meshlogging: meshLoggingEnabled, context: context!, nodeNum: self.connectedPeripheral.num, nodeLongName: self.connectedPeripheral.longName) + + } + // Module Config + if decodedInfo.moduleConfig.isInitialized { + + nowKnown = true + moduleConfig(config: decodedInfo.moduleConfig, meshlogging: meshLoggingEnabled, context: context!, nodeNum: self.connectedPeripheral.num, nodeLongName: self.connectedPeripheral.longName) + } + // Log any other unknownApp calls + if !nowKnown { + + if meshLoggingEnabled { MeshLogger.log("ℹ️ MESH PACKET received for Unknown App UNHANDLED \(try! decodedInfo.packet.jsonString())") } + } + case .textMessageApp: textMessageAppPacket(packet: decodedInfo.packet, connectedNode: (self.connectedPeripheral != nil ? connectedPeripheral.num : 0), meshLogging: meshLoggingEnabled, context: context!) case .remoteHardwareApp: @@ -658,6 +663,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph newMessage.direction = "IN" newMessage.toUser = fetchedUsers.first(where: { $0.num == toUserNum }) newMessage.isEmoji = isEmoji + newMessage.admin = false if replyID > 0 { @@ -844,6 +850,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph connectedPeripheral.peripheral.writeValue(binaryData, for: TORADIO_characteristic, type: .withResponse) + return true } @@ -885,7 +892,9 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph return false } - public func saveUser(config: User, destNum: Int64, wantResponse: Bool) -> Bool { + public func saveUser(config: User, entity: UserEntity, wantResponse: Bool) -> Int64 { + + var newMessageId: Int64 = 0 var adminPacket = AdminMessage() adminPacket.setOwner = config @@ -911,13 +920,35 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph let binaryData: Data = try! toRadio.serializedData() if connectedPeripheral!.peripheral.state == CBPeripheralState.connected { + + let newMessage = MessageEntity(context: context!) + newMessage.messageId = Int64(UInt32.random(in: UInt32(UInt8.max).. Bool { @@ -1098,55 +1129,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph return false } - public func getChannelSet (destNum: Int64, wantResponse: Bool) -> Bool { + public func saveRangeTestModuleConfig(config: ModuleConfig.RangeTestConfig, fromUser: UserEntity, toUser: UserEntity, wantResponse: Bool) -> Int64 { - var adminPacket = AdminMessage() - adminPacket.getChannelRequest = 1 - - - - var meshPacket: MeshPacket = MeshPacket() - meshPacket.to = UInt32(connectedPeripheral.num) - meshPacket.from = 0 //UInt32(connectedPeripheral.num) - meshPacket.id = UInt32.random(in: UInt32(UInt8.max).. Bool { + var newMessageId: Int64 = 0 var adminPacket = AdminMessage() adminPacket.setModuleConfig.rangeTest = config var meshPacket: MeshPacket = MeshPacket() - meshPacket.to = UInt32(connectedPeripheral.num) - meshPacket.from = 0 //UInt32(connectedPeripheral.num) + meshPacket.to = UInt32(toUser.num) + meshPacket.from = 0 //UInt32(fromUser.num) meshPacket.id = UInt32.random(in: UInt32(UInt8.max).. Bool { diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 9310b265..39e08310 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -363,7 +363,7 @@ func moduleConfig (config: ModuleConfig, meshlogging: Bool, context:NSManagedObj } else { newRangeTestConfig.sender = Int32(config.rangeTest.sender) - newRangeTestConfig.enabled = !config.rangeTest.enabled + newRangeTestConfig.enabled = config.rangeTest.enabled newRangeTestConfig.save = config.rangeTest.save } @@ -378,9 +378,9 @@ func moduleConfig (config: ModuleConfig, meshlogging: Bool, context:NSManagedObj fetchedNode[0].rangeTestConfig?.save = false } else { - // Client default protobuf value of 0 + fetchedNode[0].rangeTestConfig?.sender = Int32(config.rangeTest.sender) - fetchedNode[0].rangeTestConfig?.enabled = !config.rangeTest.enabled + fetchedNode[0].rangeTestConfig?.enabled = config.rangeTest.enabled fetchedNode[0].rangeTestConfig?.save = config.rangeTest.save } } diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModel v 4.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModel v 4.xcdatamodel/contents index 8cb1191b..aef25e6d 100644 --- a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModel v 4.xcdatamodel/contents +++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModel v 4.xcdatamodel/contents @@ -1,5 +1,5 @@ - + @@ -35,6 +35,7 @@ + @@ -144,14 +145,15 @@ - + + - + @@ -159,6 +161,5 @@ - \ No newline at end of file diff --git a/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift b/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift index 8f5be962..8c7c672e 100644 --- a/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift +++ b/Meshtastic/Views/Settings/Config/Module/RangeTestConfig.swift @@ -113,15 +113,17 @@ struct RangeTestConfig: View { rtc.save = save rtc.sender = UInt32(sender) - //if bleManager.saveRangeTestModuleConfig(config: rtc, destNum: bleManager.connectedPeripheral.num, wantResponse: false) { + let adminMessageId = bleManager.saveRangeTestModuleConfig(config: rtc, fromUser: node.user!, toUser: node.user!, wantResponse: true) + + if adminMessageId > 0 { // Should show a saved successfully alert once I know that to be true // for now just disable the button after a successful save hasChanges = false - //} else { + } else { - //} + } } } @@ -146,21 +148,24 @@ struct RangeTestConfig: View { } .onChange(of: enabled) { newEnabled in - //if newEnabled != node.rangeTestConfig!.enabled { + if newEnabled != node.rangeTestConfig!.enabled { hasChanges = true - //} + } } .onChange(of: save) { newSave in - //if newSave != node.rangeTestConfig!.save { + if newSave != node.rangeTestConfig!.save { hasChanges = true - //} + } } .onChange(of: sender) { newSender in - hasChanges = true + if newSender != node.rangeTestConfig!.sender { + + hasChanges = true + } } .navigationViewStyle(StackNavigationViewStyle()) } diff --git a/Meshtastic/Views/Settings/UserConfig.swift b/Meshtastic/Views/Settings/UserConfig.swift index 07a18bcc..d791740c 100644 --- a/Meshtastic/Views/Settings/UserConfig.swift +++ b/Meshtastic/Views/Settings/UserConfig.swift @@ -112,14 +112,11 @@ struct UserConfig: View { u.shortName = shortName u.longName = longName - if bleManager.saveUser(config: u, destNum: bleManager.connectedPeripheral.num, wantResponse: false) { + let adminMessageId = bleManager.saveUser(config: u, entity: node.user!, wantResponse: true) + + if adminMessageId > 0 { - // Should show a saved successfully alert once I know that to be true - // for now just disable the button after a successful save hasChanges = false - - } else { - } } }