From 9062dac9eba9f40eb7577b8a6cae147e7d574a07 Mon Sep 17 00:00:00 2001 From: Garth Vander Houwen Date: Tue, 14 Jun 2022 16:45:43 -0700 Subject: [PATCH] Updated Protobuf comments --- Meshtastic Apple.xcodeproj/project.pbxproj | 8 +++ MeshtasticApple/Protobufs/config.pb.swift | 43 ++++++------ .../Protobufs/module_config.pb.swift | 25 ++++--- .../Views/Settings/PositionConfig.swift | 37 +++++++++- .../Views/Settings/PowerConfig.swift | 16 +---- .../Views/Settings/RangeTestConfig.swift | 67 +++++++++++++++++++ MeshtasticApple/Views/Settings/Settings.swift | 8 +-- .../Views/Settings/ShareChannel.swift | 2 + .../Views/Settings/TelemetryConfig.swift | 38 +++++++++++ 9 files changed, 190 insertions(+), 54 deletions(-) create mode 100644 MeshtasticApple/Views/Settings/RangeTestConfig.swift create mode 100644 MeshtasticApple/Views/Settings/TelemetryConfig.swift diff --git a/Meshtastic Apple.xcodeproj/project.pbxproj b/Meshtastic Apple.xcodeproj/project.pbxproj index 9f4cc380..529ec09f 100644 --- a/Meshtastic Apple.xcodeproj/project.pbxproj +++ b/Meshtastic Apple.xcodeproj/project.pbxproj @@ -23,6 +23,8 @@ DD3501892852FC3B000FC853 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD3501882852FC3B000FC853 /* Settings.swift */; }; DD35018B2852FC79000FC853 /* UserSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD35018A2852FC79000FC853 /* UserSettings.swift */; }; DD41582628582E9B009B0E59 /* DeviceConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD41582528582E9B009B0E59 /* DeviceConfig.swift */; }; + DD415828285859C4009B0E59 /* TelemetryConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD415827285859C4009B0E59 /* TelemetryConfig.swift */; }; + DD41582A28585C32009B0E59 /* RangeTestConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD41582928585C32009B0E59 /* RangeTestConfig.swift */; }; DD47E3CE26F103C600029299 /* NodeList.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD47E3CD26F103C600029299 /* NodeList.swift */; }; DD47E3D626F17ED900029299 /* CircleText.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD47E3D526F17ED900029299 /* CircleText.swift */; }; DD47E3D926F3093800029299 /* MessageBubble.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD47E3D826F3093800029299 /* MessageBubble.swift */; }; @@ -105,6 +107,8 @@ DD3501882852FC3B000FC853 /* Settings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Settings.swift; sourceTree = ""; }; DD35018A2852FC79000FC853 /* UserSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSettings.swift; sourceTree = ""; }; DD41582528582E9B009B0E59 /* DeviceConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceConfig.swift; sourceTree = ""; }; + DD415827285859C4009B0E59 /* TelemetryConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelemetryConfig.swift; sourceTree = ""; }; + DD41582928585C32009B0E59 /* RangeTestConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RangeTestConfig.swift; sourceTree = ""; }; DD45C77427BD4EF80011784F /* MeshtasticDataModel v2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModel v2.xcdatamodel"; sourceTree = ""; }; DD47E3CD26F103C600029299 /* NodeList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeList.swift; sourceTree = ""; }; DD47E3D526F17ED900029299 /* CircleText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircleText.swift; sourceTree = ""; }; @@ -237,6 +241,8 @@ DD2553562855B02500E55709 /* LoRaConfig.swift */, DD2553582855B52700E55709 /* PositionConfig.swift */, DD25535C285666C700E55709 /* PowerConfig.swift */, + DD41582928585C32009B0E59 /* RangeTestConfig.swift */, + DD415827285859C4009B0E59 /* TelemetryConfig.swift */, DD8169FA271F1F3A00F4AB02 /* MeshLog.swift */, DD8169FE272476C700F4AB02 /* LogDocument.swift */, ); @@ -626,9 +632,11 @@ C9A88B57278B559900BD810A /* apponly.pb.swift in Sources */, DD4C158E2824AA7E0032668E /* config.pb.swift in Sources */, DD47E3D926F3093800029299 /* MessageBubble.swift in Sources */, + DD415828285859C4009B0E59 /* TelemetryConfig.swift in Sources */, C9697F9D279336B700250207 /* LocalMBTileOverlay.swift in Sources */, DD8169F9271F1A6100F4AB02 /* MeshLogger.swift in Sources */, DD539502276DAA6A00AD86B1 /* MapLocation.swift in Sources */, + DD41582A28585C32009B0E59 /* RangeTestConfig.swift in Sources */, DDAF8C6726ED0C8C0058C060 /* remote_hardware.pb.swift in Sources */, DDAF8C6526ED0A490058C060 /* channel.pb.swift in Sources */, DDC2E15826CE248E0042C5E4 /* MeshtasticAppleApp.swift in Sources */, diff --git a/MeshtasticApple/Protobufs/config.pb.swift b/MeshtasticApple/Protobufs/config.pb.swift index e0d8a2a0..f4ab0e9d 100644 --- a/MeshtasticApple/Protobufs/config.pb.swift +++ b/MeshtasticApple/Protobufs/config.pb.swift @@ -150,7 +150,7 @@ struct Config { } /// - /// TODO: REPLACE + /// Configuration struct DeviceConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -182,10 +182,7 @@ struct Config { /// /// Defines the device's role on the Mesh network - /// unset - /// Behave normally. - /// Router - /// Functions as a router + /// unset - 0 enum Role: SwiftProtobuf.Enum { typealias RawValue = Int @@ -202,7 +199,7 @@ struct Config { /// /// Router device role. /// Uses an agressive algirithem for the flood networking so packets will - /// prefer to be routed over this node. Also assume that this will be generally + /// prefer to be routed over this node. Also assume that this will be /// unattended and so will turn off the wifi/ble radio as well as the oled screen. case router // = 2 @@ -245,7 +242,7 @@ struct Config { } /// - /// TODO: REPLACE + /// Position Config struct PositionConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -376,7 +373,8 @@ struct Config { } /// - /// TODO: REPLACE + /// Power Config\ + /// See [power management](/docs/software/other/power) for additional power management state machine option details. struct PowerConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -384,12 +382,14 @@ struct Config { /// /// Sets the current of the battery charger + /// TBEAM 1.1 Only var chargeCurrent: Config.PowerConfig.ChargeCurrent = .maunset /// /// If set, we are powered from a low-current source (i.e. solar), so even if it looks like we have power flowing in /// we should try to minimize power consumption as much as possible. /// YOU DO NOT NEED TO SET THIS IF YOU'VE set is_router (it is implied in that case). + /// CLI Only Option var isPowerSaving: Bool = false /// @@ -407,40 +407,43 @@ struct Config { var adcMultiplierOverride: Float = 0 /// - /// Power management state machine option. - /// See [power management](/docs/software/other/power) for details. + /// Wait Bluetooth Seconds + /// The number of seconds for to wait before turning of BLE in No Bluetooth states\ /// 0 for default of 1 minute var waitBluetoothSecs: UInt32 = 0 /// - /// Power management state machine option. - /// See [power management](/docs/software/other/power) for details. + /// Mesh Super Deep Sleep Timeout Seconds + /// While in Light Sleep if this value is exceeded we will lower into super deep sleep + /// for sds_secs (default 1 year) or a button press /// 0 for default of two hours, MAXUINT for disabled var meshSdsTimeoutSecs: UInt32 = 0 /// - /// Power management state machine option. - /// See [power management](/docs/software/other/power) for details. + /// Super Deep Sleep Seconds + /// While in Light Sleep if mesh_sds_timeout_secs is exceeded we will lower into super deep sleep + /// for this value (default 1 year) or a button press /// 0 for default of one year var sdsSecs: UInt32 = 0 /// - /// Power management state machine option. - /// See [power management](/docs/software/other/power) for details. + /// Light Sleep Seconds + /// In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on + /// ESP32 Only /// 0 for default of 3600 var lsSecs: UInt32 = 0 /// - /// Power management state machine option. - /// See [power management](/docs/software/other/power) for details. + /// Minimum Wake Seconds + /// While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in no BLE mode for this value /// 0 for default of 10 seconds var minWakeSecs: UInt32 = 0 var unknownFields = SwiftProtobuf.UnknownStorage() /// - /// Sets the charge control current of devices with a battery charger that can be - /// configured. This is passed into the axp power management chip like on the tbeam. + /// Sets the charge control current of devices with a battery charger that can be configured + /// **TBEAM 1.1 Only** enum ChargeCurrent: SwiftProtobuf.Enum { typealias RawValue = Int diff --git a/MeshtasticApple/Protobufs/module_config.pb.swift b/MeshtasticApple/Protobufs/module_config.pb.swift index 66aea788..58459b06 100644 --- a/MeshtasticApple/Protobufs/module_config.pb.swift +++ b/MeshtasticApple/Protobufs/module_config.pb.swift @@ -21,7 +21,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP } /// -/// TODO: REPLACE +/// Module Config struct ModuleConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -169,7 +169,7 @@ struct ModuleConfig { } /// - /// TODO: REPLACE + /// MQTT Client Config struct MQTTConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -211,7 +211,7 @@ struct ModuleConfig { } /// - /// TODO: REPLACE + /// Serial Config struct SerialConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -357,7 +357,7 @@ struct ModuleConfig { } /// - /// TODO: REPLACE + /// External Notifications Config struct ExternalNotificationConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for @@ -394,15 +394,14 @@ struct ModuleConfig { } /// - /// TODO: REPLACE + /// Store and Forward Module Config struct StoreForwardConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. /// - /// Preferences for the StoreForwardModule - ///FIXME - Move this out of UserPreferences and into a section for module configuration. (was 136) + /// Enable the Store and Forward Module var enabled: Bool = false /// @@ -427,23 +426,23 @@ struct ModuleConfig { } /// - /// TODO: REPLACE + /// Preferences for the RangeTestModule struct RangeTestConfig { // SwiftProtobuf.Message conformance is added in an extension below. See the // `Message` and `Message+*Additions` files in the SwiftProtobuf library for // methods supported on all messages. /// - /// Preferences for the RangeTestModule - /// FIXME - Move this out of UserPreferences and into a section for module configuration. + /// Enable the Range Test Module var enabled: Bool = false /// - /// TODO: REPLACE + /// Send out range test messages from this node var sender: UInt32 = 0 /// - /// TODO: REPLACE + /// Bool value indicating that this node should save a RangeTest.csv file. + /// ESP32 Only var save: Bool = false var unknownFields = SwiftProtobuf.UnknownStorage() @@ -460,7 +459,7 @@ struct ModuleConfig { /// /// Interval in seconds of how often we should try to send our - /// device measurements to the mesh + /// device metrics to the mesh var deviceUpdateInterval: UInt32 = 0 var environmentUpdateInterval: UInt32 = 0 diff --git a/MeshtasticApple/Views/Settings/PositionConfig.swift b/MeshtasticApple/Views/Settings/PositionConfig.swift index c0144bef..43cf0af4 100644 --- a/MeshtasticApple/Views/Settings/PositionConfig.swift +++ b/MeshtasticApple/Views/Settings/PositionConfig.swift @@ -118,6 +118,9 @@ struct PositionConfig: View { @State var gpsAttemptTime = 0 @State var positionBroadcastSeconds = 0 + @State var includeAltitude = false + @State var includeSatInView = false + var body: some View { VStack { @@ -195,9 +198,39 @@ struct PositionConfig: View { } } Section(header: Text("Position Flags")) { - Text("TODO") - .font(.caption) + + Text("Optional fields to include when assembling position messages. the more fields are included, the larger the message will be - leading to longer airtime and a higher risk of packet loss") + .font(.caption) + .listRowSeparator(.visible) + + Toggle(isOn: $includeAltitude) { + + Label("Include Altitude", systemImage: "arrow.up") + } + .toggleStyle(DefaultToggleStyle()) .listRowSeparator(.visible) + + Toggle(isOn: $includeSatInView) { + + Label("Include number of satellites in view", systemImage: "skew") + } + .toggleStyle(DefaultToggleStyle()) + .listRowSeparator(.visible) + + Toggle(isOn: $includeSatInView) { //64 + + Label("Include a sequence number incremented per packet", systemImage: "number") + } + .toggleStyle(DefaultToggleStyle()) + .listRowSeparator(.visible) + + Toggle(isOn: $includeSatInView) { //128 + + Label("Include positional timestamp", systemImage: "clock") + } + .toggleStyle(DefaultToggleStyle()) + .listRowSeparator(.visible) + } } } diff --git a/MeshtasticApple/Views/Settings/PowerConfig.swift b/MeshtasticApple/Views/Settings/PowerConfig.swift index ea4d909a..89308053 100644 --- a/MeshtasticApple/Views/Settings/PowerConfig.swift +++ b/MeshtasticApple/Views/Settings/PowerConfig.swift @@ -22,23 +22,13 @@ struct PowerConfig: View { Form { - Section(header: Text("Warning")) { + Section(header: Text("Enhanced Power Management")) { - Text("These power settings are designed for and and are only useful mostly for solar use cases. Do not use these settings if you are planning on using your device for messaging paired with a phone.") + Text("Meshtastic devices have been improved with simplified role based power management.") .font(.callout) .listRowSeparator(.visible) } - Section(header: Text("States")) { - - Toggle(isOn: $isPowerSaving) { - - Label("Power Saving", systemImage: "powersleep") - } - .toggleStyle(SwitchToggleStyle(tint: .accentColor)) - .disabled(isAlwaysPowered) - Text("If set, we are powered from a low-current source (i.e. solar) and do not intend on using a client to connect via BLE, WiFi or Serial. This setting is assumed and unnessary if you have turned on Router mode.") - .font(.caption) - .listRowSeparator(.visible) + Section(header: Text("State")) { Toggle(isOn: $isAlwaysPowered) { diff --git a/MeshtasticApple/Views/Settings/RangeTestConfig.swift b/MeshtasticApple/Views/Settings/RangeTestConfig.swift new file mode 100644 index 00000000..0723954e --- /dev/null +++ b/MeshtasticApple/Views/Settings/RangeTestConfig.swift @@ -0,0 +1,67 @@ +// +// TelemetryConfig.swift +// Meshtastic Apple +// +// Copyright (c) Garth Vander Houwen 6/13/22. +// +import SwiftUI + +struct RangeTestConfig: View { + + @Environment(\.managedObjectContext) var context + @EnvironmentObject var bleManager: BLEManager + + @State var enabled = false + @State var sender = false + @State var save = false + + var body: some View { + + VStack { + + Form { + + Section(header: Text("Options")) { + + Toggle(isOn: $enabled) { + + Label("Enabled", systemImage: "figure.walk") + } + .toggleStyle(DefaultToggleStyle()) + .listRowSeparator(.visible) + + Toggle(isOn: $sender) { + + Label("Sender", systemImage: "paperplane") + } + .toggleStyle(DefaultToggleStyle()) + Text("This device will send out range test messages.") + .font(.caption) + .listRowSeparator(.visible) + + Toggle(isOn: $save) { + + Label("Save", systemImage: "square.and.arrow.down.fill") + } + .toggleStyle(DefaultToggleStyle()) + Text("Saves a CSV with the range test message details, only available on ESP32 devices with a web server.") + .font(.caption) + .listRowSeparator(.visible) + } + + } + .navigationTitle("Range Test Config") + .navigationBarItems(trailing: + + ZStack { + + ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.lastFourCode : "????") + }) + .onAppear { + + self.bleManager.context = context + } + .navigationViewStyle(StackNavigationViewStyle()) + } + } +} diff --git a/MeshtasticApple/Views/Settings/Settings.swift b/MeshtasticApple/Views/Settings/Settings.swift index 7d2d78cb..cda6e061 100644 --- a/MeshtasticApple/Views/Settings/Settings.swift +++ b/MeshtasticApple/Views/Settings/Settings.swift @@ -95,7 +95,7 @@ struct Settings: View { } .disabled(true) NavigationLink { - DisplayConfig() + RangeTestConfig() } label: { Image(systemName: "point.3.connected.trianglepath.dotted") @@ -103,9 +103,8 @@ struct Settings: View { Text("Range Test") } - .disabled(true) NavigationLink { - DisplayConfig() + TelemetryConfig() } label: { Image(systemName: "chart.xyaxis.line") @@ -113,11 +112,8 @@ struct Settings: View { Text("Telemetry (Sensors)") } - .disabled(true) } // Not Implemented: - // Device Config - No interesting settings for end users - // Power Config - All confusion, should delete most and have sensible defaults // External Notifications - Not Working // Serial Config - Not sure what the point is // Store Forward Config - Not Working diff --git a/MeshtasticApple/Views/Settings/ShareChannel.swift b/MeshtasticApple/Views/Settings/ShareChannel.swift index c42bd2fe..6f1d1ce5 100644 --- a/MeshtasticApple/Views/Settings/ShareChannel.swift +++ b/MeshtasticApple/Views/Settings/ShareChannel.swift @@ -26,6 +26,8 @@ struct QrCodeImage { qrImage = UIImage(cgImage: image) } } + let qrCode = filter.outputImage!.transformed(by: transform) + return qrImage } } diff --git a/MeshtasticApple/Views/Settings/TelemetryConfig.swift b/MeshtasticApple/Views/Settings/TelemetryConfig.swift new file mode 100644 index 00000000..aa22679f --- /dev/null +++ b/MeshtasticApple/Views/Settings/TelemetryConfig.swift @@ -0,0 +1,38 @@ +// +// TelemetryConfig.swift +// Meshtastic Apple +// +// Copyright (c) Garth Vander Houwen 6/13/22. +// +import SwiftUI + +struct TelemetryConfig: View { + + @Environment(\.managedObjectContext) var context + @EnvironmentObject var bleManager: BLEManager + + @State var isPowerSaving = false + @State var isAlwaysPowered = false + + var body: some View { + + VStack { + + Form { + + } + .navigationTitle("Telemetry Config") + .navigationBarItems(trailing: + + ZStack { + + ConnectedDevice(bluetoothOn: bleManager.isSwitchedOn, deviceConnected: bleManager.connectedPeripheral != nil, name: (bleManager.connectedPeripheral != nil) ? bleManager.connectedPeripheral.lastFourCode : "????") + }) + .onAppear { + + self.bleManager.context = context + } + .navigationViewStyle(StackNavigationViewStyle()) + } + } +}