diff --git a/Meshtastic Client.xcodeproj/project.pbxproj b/Meshtastic Client.xcodeproj/project.pbxproj index da0285fc..9ec062ba 100644 --- a/Meshtastic Client.xcodeproj/project.pbxproj +++ b/Meshtastic Client.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ DD47E3DF26F39D9F00029299 /* MyInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD47E3DE26F39D9F00029299 /* MyInfoModel.swift */; }; DD7AA3F326F05C120077AF76 /* NodeInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD7AA3F226F05C120077AF76 /* NodeInfoModel.swift */; }; DD836AE726F6B38600ABCC23 /* Connect.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD836AE626F6B38600ABCC23 /* Connect.swift */; }; + DD836AEB26F7AF9000ABCC23 /* nodeinfomodel2.json in Resources */ = {isa = PBXBuildFile; fileRef = DD836AEA26F7AF9000ABCC23 /* nodeinfomodel2.json */; }; DD90860C26F684AF00DC5189 /* BatteryIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD90860B26F684AF00DC5189 /* BatteryIcon.swift */; }; DD90860E26F69BAE00DC5189 /* NodeMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD90860D26F69BAE00DC5189 /* NodeMap.swift */; }; DDAF8C5326EB1DF10058C060 /* BLEManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDAF8C5226EB1DF10058C060 /* BLEManager.swift */; }; @@ -72,8 +73,9 @@ DD47E3DC26F390A000029299 /* MessageDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageDetail.swift; sourceTree = ""; }; DD47E3DE26F39D9F00029299 /* MyInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyInfoModel.swift; sourceTree = ""; }; DD7AA3F226F05C120077AF76 /* NodeInfoModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeInfoModel.swift; sourceTree = ""; }; - DD7AA3F426F05D660077AF76 /* nodeInfoModel.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = nodeInfoModel.json; sourceTree = ""; }; + DD7AA3F426F05D660077AF76 /* nodeinfomodel.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = nodeinfomodel.json; sourceTree = ""; }; DD836AE626F6B38600ABCC23 /* Connect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Connect.swift; sourceTree = ""; }; + DD836AEA26F7AF9000ABCC23 /* nodeinfomodel2.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = nodeinfomodel2.json; sourceTree = ""; }; DD90860A26F645B700DC5189 /* MeshtasticClient.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = MeshtasticClient.entitlements; sourceTree = ""; }; DD90860B26F684AF00DC5189 /* BatteryIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BatteryIcon.swift; sourceTree = ""; }; DD90860D26F69BAE00DC5189 /* NodeMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeMap.swift; sourceTree = ""; }; @@ -88,7 +90,7 @@ DDAF8C6826ED0D070058C060 /* deviceonly.pb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = deviceonly.pb.swift; sourceTree = ""; }; DDAF8C6A26ED0DD80058C060 /* environmental_measurement.pb.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = environmental_measurement.pb.swift; sourceTree = ""; }; DDAF8C6D26ED19040058C060 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; - DDAF8C7126ED2AD80058C060 /* nodeInfo.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = nodeInfo.json; sourceTree = ""; }; + DDAF8C7126ED2AD80058C060 /* nodeinfo.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = nodeinfo.json; sourceTree = ""; }; DDC2E15426CE248E0042C5E4 /* MeshtasticClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeshtasticClient.app; sourceTree = BUILT_PRODUCTS_DIR; }; DDC2E15726CE248E0042C5E4 /* MeshtasticClientApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshtasticClientApp.swift; sourceTree = ""; }; DDC2E15B26CE248F0042C5E4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -256,9 +258,10 @@ DDC2E18926CE24F70042C5E4 /* Resources */ = { isa = PBXGroup; children = ( + DD836AEA26F7AF9000ABCC23 /* nodeinfomodel2.json */, DDC2E1AA26DD89EC0042C5E4 /* packets.json */, - DDAF8C7126ED2AD80058C060 /* nodeInfo.json */, - DD7AA3F426F05D660077AF76 /* nodeInfoModel.json */, + DDAF8C7126ED2AD80058C060 /* nodeinfo.json */, + DD7AA3F426F05D660077AF76 /* nodeinfomodel.json */, ); path = Resources; sourceTree = ""; @@ -403,6 +406,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + DD836AEB26F7AF9000ABCC23 /* nodeinfomodel2.json in Resources */, DDC2E15F26CE248F0042C5E4 /* Preview Assets.xcassets in Resources */, DDC2E15C26CE248F0042C5E4 /* Assets.xcassets in Resources */, DDC2E1AB26DD89EC0042C5E4 /* packets.json in Resources */, diff --git a/MeshtasticClient/Helpers/BLEManager.swift b/MeshtasticClient/Helpers/BLEManager.swift index 9f9ac5aa..8118bc1b 100644 --- a/MeshtasticClient/Helpers/BLEManager.swift +++ b/MeshtasticClient/Helpers/BLEManager.swift @@ -3,11 +3,18 @@ import CoreData import CoreBluetooth import SwiftUI -struct Peripheral: Identifiable { - let id: String - let index: Int - let name: String - let rssi: Int +final class Peripheral: Identifiable, ObservableObject { + @Published var id: String + @Published var index: Int + @Published var name: String + @Published var rssi: Int + + init(id: String, index: Int, name: String, rssi: Int) { + self.id = id + self.index = index + self.name = name + self.rssi = rssi + } } //--------------------------------------------------------------------------------------- @@ -19,7 +26,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph private var centralManager: CBCentralManager! @Published var connectedPeripheral: CBPeripheral! @Published var peripheralArray = [CBPeripheral]() - private var rssiArray = [NSNumber]() + //private var rssiArray = [NSNumber]() private var timer = Timer() @Published var isSwitchedOn = false @Published var peripherals = [Peripheral]() @@ -60,7 +67,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph // Remove Existing Data peripherals.removeAll() peripheralArray.removeAll() - rssiArray.removeAll() + //rssiArray.removeAll() // Start Scanning print("Start Scanning") centralManager.scanForPeripherals(withServices: [meshtasticServiceCBUUID]) @@ -102,7 +109,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph } else { print("Adding peripheral: " + ((peripheral.name != nil) ? peripheral.name! : "(null)")); peripheralArray.append(peripheral) - rssiArray.append(RSSI) + //rssiArray.append(RSSI) } var peripheralName: String! @@ -269,7 +276,7 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph if decodedInfo.configCompleteID != 0 { print(decodedInfo) } - + default: print("Unhandled Characteristic UUID: \(characteristic.uuid)") } diff --git a/MeshtasticClient/Resources/nodeInfoModel.json b/MeshtasticClient/Resources/nodeInfoModel.json index 7950c36b..d319a099 100644 --- a/MeshtasticClient/Resources/nodeInfoModel.json +++ b/MeshtasticClient/Resources/nodeInfoModel.json @@ -1,43 +1,152 @@ -[ - { - "num":2792101487, - "user":{ - "id":"!a66c166f", - "longName":"RAK Solar 2", - "shortName":"RS2", - "macaddr":"8eambBZv", - "hwModel":"RAK4631" - }, - "position":{ - "batteryLevel":68}, - "lastHeard":1631593661 - } - }, - { - "num":1000569662, - "user":{ - "id":"!3ba37b3e", - "longName":"RAK Solar 1", - "shortName":"RS1", - "macaddr":"1Kc7o3s+", - "hwModel":"RAK4631" - }, - "position":{ - "latitudeI":476021390, - "longitudeI":-1221532609, - "altitude":71, - "batteryLevel":70, - "time":1629314497 - }, - "lastHeard":1629392801, - "snr":5.25 - }, - {"num":1133445808,"user":{"id":"!438f02b0","longName":"RAK DEV NODE","shortName":"RDN","macaddr":"92VDjwKw","hwModel":"RAK4631"},"position":{"latitudeI":476022071,"longitudeI":-1221533607,"altitude":91,"batteryLevel":88,"time":1629391435},"lastHeard":1629393577,"snr":4.5}, - {"num":84682040,"user":{"id":"!050c2538","longName":"Yellow Beam","shortName":"YB","macaddr":"PGEFDCU4","hwModel":"TBEAM"},"position":{"latitudeI":476020703,"longitudeI":-1221531973,"altitude":79,"batteryLevel":1,"time":1631593233},"lastHeard":1631593034,"snr":5.0}, - {"num":2354994191,"user":{"id":"!8c5e5c0f","longName":"RAK Solar 3","shortName":"RS3","macaddr":"+GKMXlwP","hwModel":"RAK4631"},"position":{"batteryLevel":91,"time":1629263310},"lastHeard":1629393330,"snr":4.5}, - {"num":2718727166,"user":{"id":"!a20c7bfe","longName":"RAK Large Node","shortName":"RLN","macaddr":"zXSiDHv+","hwModel":"RAK4631"},"position":{"batteryLevel":32,"time":1629061939},"lastHeard":1629102457,"snr":-17.5}, - {"num":84681200,"user":{"id":"!050c21f0","longName":"Unknown 21f0","shortName":"?F0","macaddr":"PGEFDCHw","hwModel":"TBEAM"},"position":{"latitudeI":476022115,"longitudeI":-1221531952,"altitude":85,"batteryLevel":100,"time":1631593830},"lastHeard":1631593584,"snr":6.75}, - {"num":2930161432,"user":{"id":"!aea6b718","longName":"Unknown b718","shortName":"?18","macaddr":"TBGuprcY","hwModel":"TBEAM"},"position":{"latitudeI":476020757,"longitudeI":-1221533124,"altitude":56,"batteryLevel":100,"time":1631593558},"lastHeard":1631593554,"snr":6.75}, - {"num":4064637200,"user":{"id":"!f2457110","longName":"Unknown 7110","shortName":"?10","macaddr":"CDryRXEQ","hwModel":"TBEAM"},"position":{"latitudeI":476021534,"longitudeI":-1221533621,"altitude":49,"batteryLevel":100,"time":1631593778},"lastHeard":1631593533,"snr":7.0} - -] +[{ + "num": 2792101487, + "user": { + "id": "!a66c166f", + "longName": "RAK Solar 2", + "shortName": "RS2", + "macaddr": "8eambBZv", + "hwModel": "RAK4631" + }, + "position": { + "batteryLevel": 68 + }, + "lastHeard": 1631593661 +}, { + "num": 1000569662, + "user": { + "id": "!3ba37b3e", + "longName": "RAK Solar 1", + "shortName": "RS1", + "macaddr": "1Kc7o3s+", + "hwModel": "RAK4631" + }, + "position": { + "latitudeI": 476021390, + "longitudeI": -1221532609, + "altitude": 71, + "batteryLevel": 70, + "time": 1629314497 + }, + "lastHeard": 1629392801, + "snr": 5.25 +}, { + "num": 1133445808, + "user": { + "id": "!438f02b0", + "longName": "RAK DEV NODE", + "shortName": "RDN", + "macaddr": "92VDjwKw", + "hwModel": "RAK4631" + }, + "position": { + "latitudeI": 476022071, + "longitudeI": -1221533607, + "altitude": 91, + "batteryLevel": 88, + "time": 1629391435 + }, + "lastHeard": 1629393577, + "snr": 4.5 +}, { + "num": 84682040, + "user": { + "id": "!050c2538", + "longName": "Yellow Beam", + "shortName": "YB", + "macaddr": "PGEFDCU4", + "hwModel": "TBEAM" + }, + "position": { + "latitudeI": 476020703, + "longitudeI": -1221531973, + "altitude": 79, + "batteryLevel": 1, + "time": 1631593233 + }, + "lastHeard": 1631593034, + "snr": 5.0 +}, { + "num": 2354994191, + "user": { + "id": "!8c5e5c0f", + "longName": "RAK Solar 3", + "shortName": "RS3", + "macaddr": "+GKMXlwP", + "hwModel": "RAK4631" + }, + "position": { + "batteryLevel": 91, + "time": 1629263310 + }, + "lastHeard": 1629393330, + "snr": 4.5 +}, { + "num": 2718727166, + "user": { + "id": "!a20c7bfe", + "longName": "RAK Large Node", + "shortName": "RLN", + "macaddr": "zXSiDHv+", + "hwModel": "RAK4631" + }, + "position": { + "batteryLevel": 32, + "time": 1629061939 + }, + "lastHeard": 1629102457, + "snr": -17.5 +}, { + "num": 84681200, + "user": { + "id": "!050c21f0", + "longName": "Unknown 21f0", + "shortName": "?F0", + "macaddr": "PGEFDCHw", + "hwModel": "TBEAM" + }, + "position": { + "latitudeI": 476022115, + "longitudeI": -1221531952, + "altitude": 85, + "batteryLevel": 100, + "time": 1631593830 + }, + "lastHeard": 1631593584, + "snr": 6.75 +}, { + "num": 2930161432, + "user": { + "id": "!aea6b718", + "longName": "Unknown b718", + "shortName": "?18", + "macaddr": "TBGuprcY", + "hwModel": "TBEAM" + }, + "position": { + "latitudeI": 476020757, + "longitudeI": -1221533124, + "altitude": 56, + "batteryLevel": 100, + "time": 1631593558 + }, + "lastHeard": 1631593554, + "snr": 6.75 +}, { + "num": 4064637200, + "user": { + "id": "!f2457110", + "longName": "Unknown 7110", + "shortName": "?10", + "macaddr": "CDryRXEQ", + "hwModel": "TBEAM" + }, + "position": { + "latitudeI": 476021534, + "longitudeI": -1221533621, + "altitude": 49, + "batteryLevel": 100, + "time": 1631593778 + }, + "lastHeard": 1631593533, + "snr": 7.0 +}] diff --git a/MeshtasticClient/Resources/nodeinfo.json b/MeshtasticClient/Resources/nodeinfo.json new file mode 100644 index 00000000..7950c36b --- /dev/null +++ b/MeshtasticClient/Resources/nodeinfo.json @@ -0,0 +1,43 @@ +[ + { + "num":2792101487, + "user":{ + "id":"!a66c166f", + "longName":"RAK Solar 2", + "shortName":"RS2", + "macaddr":"8eambBZv", + "hwModel":"RAK4631" + }, + "position":{ + "batteryLevel":68}, + "lastHeard":1631593661 + } + }, + { + "num":1000569662, + "user":{ + "id":"!3ba37b3e", + "longName":"RAK Solar 1", + "shortName":"RS1", + "macaddr":"1Kc7o3s+", + "hwModel":"RAK4631" + }, + "position":{ + "latitudeI":476021390, + "longitudeI":-1221532609, + "altitude":71, + "batteryLevel":70, + "time":1629314497 + }, + "lastHeard":1629392801, + "snr":5.25 + }, + {"num":1133445808,"user":{"id":"!438f02b0","longName":"RAK DEV NODE","shortName":"RDN","macaddr":"92VDjwKw","hwModel":"RAK4631"},"position":{"latitudeI":476022071,"longitudeI":-1221533607,"altitude":91,"batteryLevel":88,"time":1629391435},"lastHeard":1629393577,"snr":4.5}, + {"num":84682040,"user":{"id":"!050c2538","longName":"Yellow Beam","shortName":"YB","macaddr":"PGEFDCU4","hwModel":"TBEAM"},"position":{"latitudeI":476020703,"longitudeI":-1221531973,"altitude":79,"batteryLevel":1,"time":1631593233},"lastHeard":1631593034,"snr":5.0}, + {"num":2354994191,"user":{"id":"!8c5e5c0f","longName":"RAK Solar 3","shortName":"RS3","macaddr":"+GKMXlwP","hwModel":"RAK4631"},"position":{"batteryLevel":91,"time":1629263310},"lastHeard":1629393330,"snr":4.5}, + {"num":2718727166,"user":{"id":"!a20c7bfe","longName":"RAK Large Node","shortName":"RLN","macaddr":"zXSiDHv+","hwModel":"RAK4631"},"position":{"batteryLevel":32,"time":1629061939},"lastHeard":1629102457,"snr":-17.5}, + {"num":84681200,"user":{"id":"!050c21f0","longName":"Unknown 21f0","shortName":"?F0","macaddr":"PGEFDCHw","hwModel":"TBEAM"},"position":{"latitudeI":476022115,"longitudeI":-1221531952,"altitude":85,"batteryLevel":100,"time":1631593830},"lastHeard":1631593584,"snr":6.75}, + {"num":2930161432,"user":{"id":"!aea6b718","longName":"Unknown b718","shortName":"?18","macaddr":"TBGuprcY","hwModel":"TBEAM"},"position":{"latitudeI":476020757,"longitudeI":-1221533124,"altitude":56,"batteryLevel":100,"time":1631593558},"lastHeard":1631593554,"snr":6.75}, + {"num":4064637200,"user":{"id":"!f2457110","longName":"Unknown 7110","shortName":"?10","macaddr":"CDryRXEQ","hwModel":"TBEAM"},"position":{"latitudeI":476021534,"longitudeI":-1221533621,"altitude":49,"batteryLevel":100,"time":1631593778},"lastHeard":1631593533,"snr":7.0} + +] diff --git a/MeshtasticClient/Resources/nodeinfomodel2.json b/MeshtasticClient/Resources/nodeinfomodel2.json new file mode 100644 index 00000000..7950c36b --- /dev/null +++ b/MeshtasticClient/Resources/nodeinfomodel2.json @@ -0,0 +1,43 @@ +[ + { + "num":2792101487, + "user":{ + "id":"!a66c166f", + "longName":"RAK Solar 2", + "shortName":"RS2", + "macaddr":"8eambBZv", + "hwModel":"RAK4631" + }, + "position":{ + "batteryLevel":68}, + "lastHeard":1631593661 + } + }, + { + "num":1000569662, + "user":{ + "id":"!3ba37b3e", + "longName":"RAK Solar 1", + "shortName":"RS1", + "macaddr":"1Kc7o3s+", + "hwModel":"RAK4631" + }, + "position":{ + "latitudeI":476021390, + "longitudeI":-1221532609, + "altitude":71, + "batteryLevel":70, + "time":1629314497 + }, + "lastHeard":1629392801, + "snr":5.25 + }, + {"num":1133445808,"user":{"id":"!438f02b0","longName":"RAK DEV NODE","shortName":"RDN","macaddr":"92VDjwKw","hwModel":"RAK4631"},"position":{"latitudeI":476022071,"longitudeI":-1221533607,"altitude":91,"batteryLevel":88,"time":1629391435},"lastHeard":1629393577,"snr":4.5}, + {"num":84682040,"user":{"id":"!050c2538","longName":"Yellow Beam","shortName":"YB","macaddr":"PGEFDCU4","hwModel":"TBEAM"},"position":{"latitudeI":476020703,"longitudeI":-1221531973,"altitude":79,"batteryLevel":1,"time":1631593233},"lastHeard":1631593034,"snr":5.0}, + {"num":2354994191,"user":{"id":"!8c5e5c0f","longName":"RAK Solar 3","shortName":"RS3","macaddr":"+GKMXlwP","hwModel":"RAK4631"},"position":{"batteryLevel":91,"time":1629263310},"lastHeard":1629393330,"snr":4.5}, + {"num":2718727166,"user":{"id":"!a20c7bfe","longName":"RAK Large Node","shortName":"RLN","macaddr":"zXSiDHv+","hwModel":"RAK4631"},"position":{"batteryLevel":32,"time":1629061939},"lastHeard":1629102457,"snr":-17.5}, + {"num":84681200,"user":{"id":"!050c21f0","longName":"Unknown 21f0","shortName":"?F0","macaddr":"PGEFDCHw","hwModel":"TBEAM"},"position":{"latitudeI":476022115,"longitudeI":-1221531952,"altitude":85,"batteryLevel":100,"time":1631593830},"lastHeard":1631593584,"snr":6.75}, + {"num":2930161432,"user":{"id":"!aea6b718","longName":"Unknown b718","shortName":"?18","macaddr":"TBGuprcY","hwModel":"TBEAM"},"position":{"latitudeI":476020757,"longitudeI":-1221533124,"altitude":56,"batteryLevel":100,"time":1631593558},"lastHeard":1631593554,"snr":6.75}, + {"num":4064637200,"user":{"id":"!f2457110","longName":"Unknown 7110","shortName":"?10","macaddr":"CDryRXEQ","hwModel":"TBEAM"},"position":{"latitudeI":476021534,"longitudeI":-1221533621,"altitude":49,"batteryLevel":100,"time":1631593778},"lastHeard":1631593533,"snr":7.0} + +] diff --git a/MeshtasticClient/Views/Bluetooth/Connect.swift b/MeshtasticClient/Views/Bluetooth/Connect.swift index 57d2fafe..63f0d9cd 100644 --- a/MeshtasticClient/Views/Bluetooth/Connect.swift +++ b/MeshtasticClient/Views/Bluetooth/Connect.swift @@ -99,14 +99,14 @@ struct Connect: View { Image(systemName: "antenna.radiowaves.left.and.right") .imageScale(.large) .foregroundColor(.green) - Text("CONNECTED").font(.caption2).foregroundColor(.gray) + Text("Connected").font(.caption2).foregroundColor(.gray) } else { Image(systemName: "antenna.radiowaves.left.and.right") .imageScale(.large) .foregroundColor(.red) - Text("DISCONNECTED").font(.caption).foregroundColor(.gray) + Text("Disconnected").font(.caption2).foregroundColor(.gray) } } diff --git a/MeshtasticClient/Views/Messages/MessageList.swift b/MeshtasticClient/Views/Messages/MessageList.swift index 5ff8e262..9a891741 100644 --- a/MeshtasticClient/Views/Messages/MessageList.swift +++ b/MeshtasticClient/Views/Messages/MessageList.swift @@ -1,5 +1,6 @@ import Foundation import SwiftUI +import CoreBluetooth struct MessageList: View { @@ -7,7 +8,7 @@ struct MessageList: View { @ObservedObject var bleManager = BLEManager() - @EnvironmentObject var modelData: ModelData + @State var connectedPeripheral: CBPeripheral! var body: some View { NavigationView { @@ -21,26 +22,6 @@ struct MessageList: View { } .navigationTitle("Channels") .navigationBarTitleDisplayMode(.inline) - .navigationBarItems(trailing: - HStack { - VStack { - if bleManager.isSwitchedOn { - Image(systemName: "antenna.radiowaves.left.and.right") - .imageScale(.large) - .foregroundColor(.green) - Text("CONNECTED").font(.caption2).foregroundColor(.gray) - } - else { - - Image(systemName: "antenna.radiowaves.left.and.right") - .imageScale(.large) - .foregroundColor(.red) - Text("DISCONNECTED").font(.caption).foregroundColor(.gray) - - } - } - }.offset(x: 10, y: -10) - ) } } }