diff --git a/MeshtasticProtobufs/Sources/meshtastic/admin.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/admin.pb.swift
index 37528079..0f1c3586 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/admin.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/admin.pb.swift
@@ -24,11 +24,17 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// This message is handled by the Admin module and is responsible for all settings/channel read/write operations.
/// This message is used to do settings operations to both remote AND local nodes.
/// (Prior to 1.2 these operations were done via special ToRadio operations)
-public struct AdminMessage: Sendable {
+public struct AdminMessage {
// 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.
+ ///
+ /// The node generates this key and sends it with any get_x_response packets.
+ /// The client MUST include the same key with any set_x commands. Key expires after 300 seconds.
+ /// Prevents replay attacks for admin messages.
+ public var sessionPasskey: Data = Data()
+
///
/// TODO: REPLACE
public var payloadVariant: AdminMessage.OneOf_PayloadVariant? = nil
@@ -369,6 +375,17 @@ public struct AdminMessage: Sendable {
set {payloadVariant = .removeFixedPosition(newValue)}
}
+ ///
+ /// Set time only on the node
+ /// Convenience method to set the time on the node (as Net quality) without any other position data
+ public var setTimeOnly: UInt32 {
+ get {
+ if case .setTimeOnly(let v)? = payloadVariant {return v}
+ return 0
+ }
+ set {payloadVariant = .setTimeOnly(newValue)}
+ }
+
///
/// Begins an edit transaction for config, module config, owner, and channel settings changes
/// This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings)
@@ -390,6 +407,16 @@ public struct AdminMessage: Sendable {
set {payloadVariant = .commitEditSettings(newValue)}
}
+ ///
+ /// Tell the node to factory reset config everything; all device state and configuration will be returned to factory defaults and BLE bonds will be cleared.
+ public var factoryResetDevice: Int32 {
+ get {
+ if case .factoryResetDevice(let v)? = payloadVariant {return v}
+ return 0
+ }
+ set {payloadVariant = .factoryResetDevice(newValue)}
+ }
+
///
/// Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
/// Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth.
@@ -433,13 +460,13 @@ public struct AdminMessage: Sendable {
}
///
- /// Tell the node to factory reset, all device settings will be returned to factory defaults.
- public var factoryReset: Int32 {
+ /// Tell the node to factory reset config; all device state and configuration will be returned to factory defaults; BLE bonds will be preserved.
+ public var factoryResetConfig: Int32 {
get {
- if case .factoryReset(let v)? = payloadVariant {return v}
+ if case .factoryResetConfig(let v)? = payloadVariant {return v}
return 0
}
- set {payloadVariant = .factoryReset(newValue)}
+ set {payloadVariant = .factoryResetConfig(newValue)}
}
///
@@ -456,7 +483,7 @@ public struct AdminMessage: Sendable {
///
/// TODO: REPLACE
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// Send the specified channel in the response to this message
/// NOTE: This field is sent with the channel index + 1 (to ensure we never try to send 'zero' - which protobufs treats as not present)
@@ -563,6 +590,10 @@ public struct AdminMessage: Sendable {
/// Clear fixed position coordinates and then set position.fixed_position = false
case removeFixedPosition(Bool)
///
+ /// Set time only on the node
+ /// Convenience method to set the time on the node (as Net quality) without any other position data
+ case setTimeOnly(UInt32)
+ ///
/// Begins an edit transaction for config, module config, owner, and channel settings changes
/// This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings)
case beginEditSettings(Bool)
@@ -570,6 +601,9 @@ public struct AdminMessage: Sendable {
/// Commits an open transaction for any edits made to config, module config, owner, and channel settings
case commitEditSettings(Bool)
///
+ /// Tell the node to factory reset config everything; all device state and configuration will be returned to factory defaults and BLE bonds will be cleared.
+ case factoryResetDevice(Int32)
+ ///
/// Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
/// Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth.
case rebootOtaSeconds(Int32)
@@ -584,17 +618,199 @@ public struct AdminMessage: Sendable {
/// Tell the node to shutdown in this many seconds (or <0 to cancel shutdown)
case shutdownSeconds(Int32)
///
- /// Tell the node to factory reset, all device settings will be returned to factory defaults.
- case factoryReset(Int32)
+ /// Tell the node to factory reset config; all device state and configuration will be returned to factory defaults; BLE bonds will be preserved.
+ case factoryResetConfig(Int32)
///
/// Tell the node to reset the nodedb.
case nodedbReset(Int32)
+ #if !swift(>=4.1)
+ public static func ==(lhs: AdminMessage.OneOf_PayloadVariant, rhs: AdminMessage.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.getChannelRequest, .getChannelRequest): return {
+ guard case .getChannelRequest(let l) = lhs, case .getChannelRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getChannelResponse, .getChannelResponse): return {
+ guard case .getChannelResponse(let l) = lhs, case .getChannelResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getOwnerRequest, .getOwnerRequest): return {
+ guard case .getOwnerRequest(let l) = lhs, case .getOwnerRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getOwnerResponse, .getOwnerResponse): return {
+ guard case .getOwnerResponse(let l) = lhs, case .getOwnerResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getConfigRequest, .getConfigRequest): return {
+ guard case .getConfigRequest(let l) = lhs, case .getConfigRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getConfigResponse, .getConfigResponse): return {
+ guard case .getConfigResponse(let l) = lhs, case .getConfigResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getModuleConfigRequest, .getModuleConfigRequest): return {
+ guard case .getModuleConfigRequest(let l) = lhs, case .getModuleConfigRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getModuleConfigResponse, .getModuleConfigResponse): return {
+ guard case .getModuleConfigResponse(let l) = lhs, case .getModuleConfigResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getCannedMessageModuleMessagesRequest, .getCannedMessageModuleMessagesRequest): return {
+ guard case .getCannedMessageModuleMessagesRequest(let l) = lhs, case .getCannedMessageModuleMessagesRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getCannedMessageModuleMessagesResponse, .getCannedMessageModuleMessagesResponse): return {
+ guard case .getCannedMessageModuleMessagesResponse(let l) = lhs, case .getCannedMessageModuleMessagesResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getDeviceMetadataRequest, .getDeviceMetadataRequest): return {
+ guard case .getDeviceMetadataRequest(let l) = lhs, case .getDeviceMetadataRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getDeviceMetadataResponse, .getDeviceMetadataResponse): return {
+ guard case .getDeviceMetadataResponse(let l) = lhs, case .getDeviceMetadataResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getRingtoneRequest, .getRingtoneRequest): return {
+ guard case .getRingtoneRequest(let l) = lhs, case .getRingtoneRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getRingtoneResponse, .getRingtoneResponse): return {
+ guard case .getRingtoneResponse(let l) = lhs, case .getRingtoneResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getDeviceConnectionStatusRequest, .getDeviceConnectionStatusRequest): return {
+ guard case .getDeviceConnectionStatusRequest(let l) = lhs, case .getDeviceConnectionStatusRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getDeviceConnectionStatusResponse, .getDeviceConnectionStatusResponse): return {
+ guard case .getDeviceConnectionStatusResponse(let l) = lhs, case .getDeviceConnectionStatusResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setHamMode, .setHamMode): return {
+ guard case .setHamMode(let l) = lhs, case .setHamMode(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getNodeRemoteHardwarePinsRequest, .getNodeRemoteHardwarePinsRequest): return {
+ guard case .getNodeRemoteHardwarePinsRequest(let l) = lhs, case .getNodeRemoteHardwarePinsRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.getNodeRemoteHardwarePinsResponse, .getNodeRemoteHardwarePinsResponse): return {
+ guard case .getNodeRemoteHardwarePinsResponse(let l) = lhs, case .getNodeRemoteHardwarePinsResponse(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.enterDfuModeRequest, .enterDfuModeRequest): return {
+ guard case .enterDfuModeRequest(let l) = lhs, case .enterDfuModeRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.deleteFileRequest, .deleteFileRequest): return {
+ guard case .deleteFileRequest(let l) = lhs, case .deleteFileRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setScale, .setScale): return {
+ guard case .setScale(let l) = lhs, case .setScale(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setOwner, .setOwner): return {
+ guard case .setOwner(let l) = lhs, case .setOwner(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setChannel, .setChannel): return {
+ guard case .setChannel(let l) = lhs, case .setChannel(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setConfig, .setConfig): return {
+ guard case .setConfig(let l) = lhs, case .setConfig(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setModuleConfig, .setModuleConfig): return {
+ guard case .setModuleConfig(let l) = lhs, case .setModuleConfig(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setCannedMessageModuleMessages, .setCannedMessageModuleMessages): return {
+ guard case .setCannedMessageModuleMessages(let l) = lhs, case .setCannedMessageModuleMessages(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setRingtoneMessage, .setRingtoneMessage): return {
+ guard case .setRingtoneMessage(let l) = lhs, case .setRingtoneMessage(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.removeByNodenum, .removeByNodenum): return {
+ guard case .removeByNodenum(let l) = lhs, case .removeByNodenum(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setFavoriteNode, .setFavoriteNode): return {
+ guard case .setFavoriteNode(let l) = lhs, case .setFavoriteNode(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.removeFavoriteNode, .removeFavoriteNode): return {
+ guard case .removeFavoriteNode(let l) = lhs, case .removeFavoriteNode(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setFixedPosition, .setFixedPosition): return {
+ guard case .setFixedPosition(let l) = lhs, case .setFixedPosition(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.removeFixedPosition, .removeFixedPosition): return {
+ guard case .removeFixedPosition(let l) = lhs, case .removeFixedPosition(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.setTimeOnly, .setTimeOnly): return {
+ guard case .setTimeOnly(let l) = lhs, case .setTimeOnly(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.beginEditSettings, .beginEditSettings): return {
+ guard case .beginEditSettings(let l) = lhs, case .beginEditSettings(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.commitEditSettings, .commitEditSettings): return {
+ guard case .commitEditSettings(let l) = lhs, case .commitEditSettings(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.factoryResetDevice, .factoryResetDevice): return {
+ guard case .factoryResetDevice(let l) = lhs, case .factoryResetDevice(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.rebootOtaSeconds, .rebootOtaSeconds): return {
+ guard case .rebootOtaSeconds(let l) = lhs, case .rebootOtaSeconds(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.exitSimulator, .exitSimulator): return {
+ guard case .exitSimulator(let l) = lhs, case .exitSimulator(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.rebootSeconds, .rebootSeconds): return {
+ guard case .rebootSeconds(let l) = lhs, case .rebootSeconds(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.shutdownSeconds, .shutdownSeconds): return {
+ guard case .shutdownSeconds(let l) = lhs, case .shutdownSeconds(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.factoryResetConfig, .factoryResetConfig): return {
+ guard case .factoryResetConfig(let l) = lhs, case .factoryResetConfig(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.nodedbReset, .nodedbReset): return {
+ guard case .nodedbReset(let l) = lhs, case .nodedbReset(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
///
/// TODO: REPLACE
- public enum ConfigType: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum ConfigType: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -624,6 +840,10 @@ public struct AdminMessage: Sendable {
///
/// TODO: REPLACE
case bluetoothConfig // = 6
+
+ ///
+ /// TODO: REPLACE
+ case securityConfig // = 7
case UNRECOGNIZED(Int)
public init() {
@@ -639,6 +859,7 @@ public struct AdminMessage: Sendable {
case 4: self = .displayConfig
case 5: self = .loraConfig
case 6: self = .bluetoothConfig
+ case 7: self = .securityConfig
default: self = .UNRECOGNIZED(rawValue)
}
}
@@ -652,26 +873,16 @@ public struct AdminMessage: Sendable {
case .displayConfig: return 4
case .loraConfig: return 5
case .bluetoothConfig: return 6
+ case .securityConfig: return 7
case .UNRECOGNIZED(let i): return i
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [AdminMessage.ConfigType] = [
- .deviceConfig,
- .positionConfig,
- .powerConfig,
- .networkConfig,
- .displayConfig,
- .loraConfig,
- .bluetoothConfig,
- ]
-
}
///
/// TODO: REPLACE
- public enum ModuleConfigType: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum ModuleConfigType: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -769,31 +980,51 @@ public struct AdminMessage: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [AdminMessage.ModuleConfigType] = [
- .mqttConfig,
- .serialConfig,
- .extnotifConfig,
- .storeforwardConfig,
- .rangetestConfig,
- .telemetryConfig,
- .cannedmsgConfig,
- .audioConfig,
- .remotehardwareConfig,
- .neighborinfoConfig,
- .ambientlightingConfig,
- .detectionsensorConfig,
- .paxcounterConfig,
- ]
-
}
public init() {}
}
+#if swift(>=4.2)
+
+extension AdminMessage.ConfigType: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [AdminMessage.ConfigType] = [
+ .deviceConfig,
+ .positionConfig,
+ .powerConfig,
+ .networkConfig,
+ .displayConfig,
+ .loraConfig,
+ .bluetoothConfig,
+ .securityConfig,
+ ]
+}
+
+extension AdminMessage.ModuleConfigType: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [AdminMessage.ModuleConfigType] = [
+ .mqttConfig,
+ .serialConfig,
+ .extnotifConfig,
+ .storeforwardConfig,
+ .rangetestConfig,
+ .telemetryConfig,
+ .cannedmsgConfig,
+ .audioConfig,
+ .remotehardwareConfig,
+ .neighborinfoConfig,
+ .ambientlightingConfig,
+ .detectionsensorConfig,
+ .paxcounterConfig,
+ ]
+}
+
+#endif // swift(>=4.2)
+
///
/// Parameters for setting up Meshtastic for ameteur radio usage
-public struct HamParameters: Sendable {
+public struct HamParameters {
// 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.
@@ -823,7 +1054,7 @@ public struct HamParameters: Sendable {
///
/// Response envelope for node_remote_hardware_pins
-public struct NodeRemoteHardwarePinsResponse: Sendable {
+public struct NodeRemoteHardwarePinsResponse {
// 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.
@@ -837,6 +1068,15 @@ public struct NodeRemoteHardwarePinsResponse: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension AdminMessage: @unchecked Sendable {}
+extension AdminMessage.OneOf_PayloadVariant: @unchecked Sendable {}
+extension AdminMessage.ConfigType: @unchecked Sendable {}
+extension AdminMessage.ModuleConfigType: @unchecked Sendable {}
+extension HamParameters: @unchecked Sendable {}
+extension NodeRemoteHardwarePinsResponse: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -844,6 +1084,7 @@ fileprivate let _protobuf_package = "meshtastic"
extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
public static let protoMessageName: String = _protobuf_package + ".AdminMessage"
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+ 101: .standard(proto: "session_passkey"),
1: .standard(proto: "get_channel_request"),
2: .standard(proto: "get_channel_response"),
3: .standard(proto: "get_owner_request"),
@@ -877,13 +1118,15 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
40: .standard(proto: "remove_favorite_node"),
41: .standard(proto: "set_fixed_position"),
42: .standard(proto: "remove_fixed_position"),
+ 43: .standard(proto: "set_time_only"),
64: .standard(proto: "begin_edit_settings"),
65: .standard(proto: "commit_edit_settings"),
+ 94: .standard(proto: "factory_reset_device"),
95: .standard(proto: "reboot_ota_seconds"),
96: .standard(proto: "exit_simulator"),
97: .standard(proto: "reboot_seconds"),
98: .standard(proto: "shutdown_seconds"),
- 99: .standard(proto: "factory_reset"),
+ 99: .standard(proto: "factory_reset_config"),
100: .standard(proto: "nodedb_reset"),
]
@@ -1222,6 +1465,14 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .removeFixedPosition(v)
}
}()
+ case 43: try {
+ var v: UInt32?
+ try decoder.decodeSingularFixed32Field(value: &v)
+ if let v = v {
+ if self.payloadVariant != nil {try decoder.handleConflictingOneOf()}
+ self.payloadVariant = .setTimeOnly(v)
+ }
+ }()
case 64: try {
var v: Bool?
try decoder.decodeSingularBoolField(value: &v)
@@ -1238,6 +1489,14 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .commitEditSettings(v)
}
}()
+ case 94: try {
+ var v: Int32?
+ try decoder.decodeSingularInt32Field(value: &v)
+ if let v = v {
+ if self.payloadVariant != nil {try decoder.handleConflictingOneOf()}
+ self.payloadVariant = .factoryResetDevice(v)
+ }
+ }()
case 95: try {
var v: Int32?
try decoder.decodeSingularInt32Field(value: &v)
@@ -1275,7 +1534,7 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
try decoder.decodeSingularInt32Field(value: &v)
if let v = v {
if self.payloadVariant != nil {try decoder.handleConflictingOneOf()}
- self.payloadVariant = .factoryReset(v)
+ self.payloadVariant = .factoryResetConfig(v)
}
}()
case 100: try {
@@ -1286,6 +1545,7 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .nodedbReset(v)
}
}()
+ case 101: try { try decoder.decodeSingularBytesField(value: &self.sessionPasskey) }()
default: break
}
}
@@ -1429,6 +1689,10 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .removeFixedPosition(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularBoolField(value: v, fieldNumber: 42)
}()
+ case .setTimeOnly?: try {
+ guard case .setTimeOnly(let v)? = self.payloadVariant else { preconditionFailure() }
+ try visitor.visitSingularFixed32Field(value: v, fieldNumber: 43)
+ }()
case .beginEditSettings?: try {
guard case .beginEditSettings(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularBoolField(value: v, fieldNumber: 64)
@@ -1437,6 +1701,10 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .commitEditSettings(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularBoolField(value: v, fieldNumber: 65)
}()
+ case .factoryResetDevice?: try {
+ guard case .factoryResetDevice(let v)? = self.payloadVariant else { preconditionFailure() }
+ try visitor.visitSingularInt32Field(value: v, fieldNumber: 94)
+ }()
case .rebootOtaSeconds?: try {
guard case .rebootOtaSeconds(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularInt32Field(value: v, fieldNumber: 95)
@@ -1453,8 +1721,8 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .shutdownSeconds(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularInt32Field(value: v, fieldNumber: 98)
}()
- case .factoryReset?: try {
- guard case .factoryReset(let v)? = self.payloadVariant else { preconditionFailure() }
+ case .factoryResetConfig?: try {
+ guard case .factoryResetConfig(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularInt32Field(value: v, fieldNumber: 99)
}()
case .nodedbReset?: try {
@@ -1463,10 +1731,14 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
}()
case nil: break
}
+ if !self.sessionPasskey.isEmpty {
+ try visitor.visitSingularBytesField(value: self.sessionPasskey, fieldNumber: 101)
+ }
try unknownFields.traverse(visitor: &visitor)
}
public static func ==(lhs: AdminMessage, rhs: AdminMessage) -> Bool {
+ if lhs.sessionPasskey != rhs.sessionPasskey {return false}
if lhs.payloadVariant != rhs.payloadVariant {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
@@ -1482,6 +1754,7 @@ extension AdminMessage.ConfigType: SwiftProtobuf._ProtoNameProviding {
4: .same(proto: "DISPLAY_CONFIG"),
5: .same(proto: "LORA_CONFIG"),
6: .same(proto: "BLUETOOTH_CONFIG"),
+ 7: .same(proto: "SECURITY_CONFIG"),
]
}
@@ -1534,7 +1807,7 @@ extension HamParameters: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa
if self.txPower != 0 {
try visitor.visitSingularInt32Field(value: self.txPower, fieldNumber: 2)
}
- if self.frequency.bitPattern != 0 {
+ if self.frequency != 0 {
try visitor.visitSingularFloatField(value: self.frequency, fieldNumber: 3)
}
if !self.shortName.isEmpty {
diff --git a/MeshtasticProtobufs/Sources/meshtastic/apponly.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/apponly.pb.swift
index 18e66d8e..0457077c 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/apponly.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/apponly.pb.swift
@@ -26,7 +26,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// any SECONDARY channels.
/// No DISABLED channels are included.
/// This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL
-public struct ChannelSet: Sendable {
+public struct ChannelSet {
// 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.
@@ -53,6 +53,10 @@ public struct ChannelSet: Sendable {
fileprivate var _loraConfig: Config.LoRaConfig? = nil
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension ChannelSet: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/atak.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/atak.pb.swift
index 1dd12469..4406deb3 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/atak.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/atak.pb.swift
@@ -20,7 +20,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
typealias Version = _2
}
-public enum Team: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum Team: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -130,6 +130,11 @@ public enum Team: SwiftProtobuf.Enum, Swift.CaseIterable {
}
}
+}
+
+#if swift(>=4.2)
+
+extension Team: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [Team] = [
.unspecifedColor,
@@ -148,12 +153,13 @@ public enum Team: SwiftProtobuf.Enum, Swift.CaseIterable {
.darkGreen,
.brown,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Role of the group member
-public enum MemberRole: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum MemberRole: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -227,6 +233,11 @@ public enum MemberRole: SwiftProtobuf.Enum, Swift.CaseIterable {
}
}
+}
+
+#if swift(>=4.2)
+
+extension MemberRole: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [MemberRole] = [
.unspecifed,
@@ -239,12 +250,13 @@ public enum MemberRole: SwiftProtobuf.Enum, Swift.CaseIterable {
.rto,
.k9,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Packets for the official ATAK Plugin
-public struct TAKPacket: Sendable {
+public struct TAKPacket {
// 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.
@@ -314,7 +326,7 @@ public struct TAKPacket: Sendable {
///
/// The payload of the packet
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// TAK position report
case pli(PLI)
@@ -322,6 +334,24 @@ public struct TAKPacket: Sendable {
/// ATAK GeoChat message
case chat(GeoChat)
+ #if !swift(>=4.1)
+ public static func ==(lhs: TAKPacket.OneOf_PayloadVariant, rhs: TAKPacket.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.pli, .pli): return {
+ guard case .pli(let l) = lhs, case .pli(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.chat, .chat): return {
+ guard case .chat(let l) = lhs, case .chat(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
public init() {}
@@ -333,7 +363,7 @@ public struct TAKPacket: Sendable {
///
/// ATAK GeoChat message
-public struct GeoChat: Sendable {
+public struct GeoChat {
// 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.
@@ -375,7 +405,7 @@ public struct GeoChat: Sendable {
///
/// ATAK Group
/// <__group role='Team Member' name='Cyan'/>
-public struct Group: Sendable {
+public struct Group {
// 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.
@@ -397,7 +427,7 @@ public struct Group: Sendable {
///
/// ATAK EUD Status
///
-public struct Status: Sendable {
+public struct Status {
// 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.
@@ -414,7 +444,7 @@ public struct Status: Sendable {
///
/// ATAK Contact
///
-public struct Contact: Sendable {
+public struct Contact {
// 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.
@@ -434,7 +464,7 @@ public struct Contact: Sendable {
///
/// Position Location Information from ATAK
-public struct PLI: Sendable {
+public struct PLI {
// 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.
@@ -466,6 +496,18 @@ public struct PLI: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension Team: @unchecked Sendable {}
+extension MemberRole: @unchecked Sendable {}
+extension TAKPacket: @unchecked Sendable {}
+extension TAKPacket.OneOf_PayloadVariant: @unchecked Sendable {}
+extension GeoChat: @unchecked Sendable {}
+extension Group: @unchecked Sendable {}
+extension Status: @unchecked Sendable {}
+extension Contact: @unchecked Sendable {}
+extension PLI: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/cannedmessages.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/cannedmessages.pb.swift
index a43393e1..1b8c84de 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/cannedmessages.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/cannedmessages.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// Canned message module configuration.
-public struct CannedMessageModuleConfig: Sendable {
+public struct CannedMessageModuleConfig {
// 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.
@@ -36,6 +36,10 @@ public struct CannedMessageModuleConfig: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension CannedMessageModuleConfig: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/channel.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/channel.pb.swift
index a8c96595..5b9c7e49 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/channel.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/channel.pb.swift
@@ -36,15 +36,13 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// FIXME: Add description of multi-channel support and how primary vs secondary channels are used.
/// FIXME: explain how apps use channels for security.
/// explain how remote settings and remote gpio are managed as an example
-public struct ChannelSettings: @unchecked Sendable {
+public struct ChannelSettings {
// 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.
///
/// Deprecated in favor of LoraConfig.channel_num
- ///
- /// NOTE: This field was marked as deprecated in the .proto file.
public var channelNum: UInt32 = 0
///
@@ -113,7 +111,7 @@ public struct ChannelSettings: @unchecked Sendable {
///
/// This message is specifically for modules to store per-channel configuration data.
-public struct ModuleSettings: Sendable {
+public struct ModuleSettings {
// 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.
@@ -134,7 +132,7 @@ public struct ModuleSettings: Sendable {
///
/// A pair of a channel number, mode and the (sharable) settings for that channel
-public struct Channel: Sendable {
+public struct Channel {
// 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.
@@ -172,7 +170,7 @@ public struct Channel: Sendable {
/// cross band routing as needed.
/// If a device has only a single radio (the common case) only one channel can be PRIMARY at a time
/// (but any number of SECONDARY channels can't be sent received on that common frequency)
- public enum Role: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Role: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -211,13 +209,6 @@ public struct Channel: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Channel.Role] = [
- .disabled,
- .primary,
- .secondary,
- ]
-
}
public init() {}
@@ -225,6 +216,26 @@ public struct Channel: Sendable {
fileprivate var _settings: ChannelSettings? = nil
}
+#if swift(>=4.2)
+
+extension Channel.Role: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Channel.Role] = [
+ .disabled,
+ .primary,
+ .secondary,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension ChannelSettings: @unchecked Sendable {}
+extension ModuleSettings: @unchecked Sendable {}
+extension Channel: @unchecked Sendable {}
+extension Channel.Role: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/clientonly.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/clientonly.pb.swift
index 89370cc5..c3d93bf7 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/clientonly.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/clientonly.pb.swift
@@ -23,7 +23,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// This abstraction is used to contain any configuration for provisioning a node on any client.
/// It is useful for importing and exporting configurations.
-public struct DeviceProfile: Sendable {
+public struct DeviceProfile {
// 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.
@@ -94,6 +94,10 @@ public struct DeviceProfile: Sendable {
fileprivate var _moduleConfig: LocalModuleConfig? = nil
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension DeviceProfile: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/config.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/config.pb.swift
index aeaf9054..4b953470 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/config.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/config.pb.swift
@@ -20,7 +20,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
typealias Version = _2
}
-public struct Config: Sendable {
+public struct Config {
// 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.
@@ -85,11 +85,19 @@ public struct Config: Sendable {
set {payloadVariant = .bluetooth(newValue)}
}
+ public var security: Config.SecurityConfig {
+ get {
+ if case .security(let v)? = payloadVariant {return v}
+ return Config.SecurityConfig()
+ }
+ set {payloadVariant = .security(newValue)}
+ }
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
///
/// Payload Variant
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
case device(Config.DeviceConfig)
case position(Config.PositionConfig)
case power(Config.PowerConfig)
@@ -97,12 +105,55 @@ public struct Config: Sendable {
case display(Config.DisplayConfig)
case lora(Config.LoRaConfig)
case bluetooth(Config.BluetoothConfig)
+ case security(Config.SecurityConfig)
+ #if !swift(>=4.1)
+ public static func ==(lhs: Config.OneOf_PayloadVariant, rhs: Config.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.device, .device): return {
+ guard case .device(let l) = lhs, case .device(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.position, .position): return {
+ guard case .position(let l) = lhs, case .position(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.power, .power): return {
+ guard case .power(let l) = lhs, case .power(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.network, .network): return {
+ guard case .network(let l) = lhs, case .network(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.display, .display): return {
+ guard case .display(let l) = lhs, case .display(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.lora, .lora): return {
+ guard case .lora(let l) = lhs, case .lora(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.bluetooth, .bluetooth): return {
+ guard case .bluetooth(let l) = lhs, case .bluetooth(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.security, .security): return {
+ guard case .security(let l) = lhs, case .security(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
///
/// Configuration
- public struct DeviceConfig: Sendable {
+ public struct DeviceConfig {
// 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.
@@ -113,11 +164,13 @@ public struct Config: Sendable {
///
/// Disabling this will disable the SerialConsole by not initilizing the StreamAPI
+ /// Moved to SecurityConfig
public var serialEnabled: Bool = false
///
/// By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
/// Set this to true to leave the debug log outputting even when API is active.
+ /// Moved to SecurityConfig
public var debugLogEnabled: Bool = false
///
@@ -146,6 +199,7 @@ public struct Config: Sendable {
///
/// If true, device is considered to be "managed" by a mesh administrator
/// Clients should then limit available configuration and administrative options inside the user interface
+ /// Moved to SecurityConfig
public var isManaged: Bool = false
///
@@ -164,7 +218,7 @@ public struct Config: Sendable {
///
/// Defines the device's role on the Mesh network
- public enum Role: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Role: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -182,8 +236,6 @@ public struct Config: Sendable {
/// The wifi radio and the oled screen will be put to sleep.
/// This mode may still potentially have higher power usage due to it's preference in message rebroadcasting on the mesh.
case router // = 2
-
- /// NOTE: This enum value was marked as deprecated in the .proto file
case routerClient // = 3
///
@@ -274,26 +326,11 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DeviceConfig.Role] = [
- .client,
- .clientMute,
- .router,
- .routerClient,
- .repeater,
- .tracker,
- .sensor,
- .tak,
- .clientHidden,
- .lostAndFound,
- .takTracker,
- ]
-
}
///
/// Defines the device's behavior for how messages are rebroadcast
- public enum RebroadcastMode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum RebroadcastMode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -341,14 +378,6 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DeviceConfig.RebroadcastMode] = [
- .all,
- .allSkipDecoding,
- .localOnly,
- .knownOnly,
- ]
-
}
public init() {}
@@ -356,7 +385,7 @@ public struct Config: Sendable {
///
/// Position Config
- public struct PositionConfig: Sendable {
+ public struct PositionConfig {
// 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.
@@ -378,8 +407,6 @@ public struct Config: Sendable {
///
/// Is GPS enabled for this node?
- ///
- /// NOTE: This field was marked as deprecated in the .proto file.
public var gpsEnabled: Bool = false
///
@@ -390,8 +417,6 @@ public struct Config: Sendable {
///
/// Deprecated in favor of using smart / regular broadcast intervals as implicit attempt time
- ///
- /// NOTE: This field was marked as deprecated in the .proto file.
public var gpsAttemptTime: UInt32 = 0
///
@@ -432,7 +457,7 @@ public struct Config: Sendable {
/// are always included (also time if GPS-synced)
/// NOTE: the more fields are included, the larger the message will be -
/// leading to longer airtime and a higher risk of packet loss
- public enum PositionFlags: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum PositionFlags: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -522,24 +547,9 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.PositionConfig.PositionFlags] = [
- .unset,
- .altitude,
- .altitudeMsl,
- .geoidalSeparation,
- .dop,
- .hvdop,
- .satinview,
- .seqNo,
- .timestamp,
- .heading,
- .speed,
- ]
-
}
- public enum GpsMode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum GpsMode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -577,13 +587,6 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.PositionConfig.GpsMode] = [
- .disabled,
- .enabled,
- .notPresent,
- ]
-
}
public init() {}
@@ -592,7 +595,7 @@ public struct Config: Sendable {
///
/// Power Config\
/// See [Power Config](/docs/settings/config/power) for additional power config details.
- public struct PowerConfig: Sendable {
+ public struct PowerConfig {
// 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.
@@ -652,7 +655,7 @@ public struct Config: Sendable {
///
/// Network Config
- public struct NetworkConfig: Sendable {
+ public struct NetworkConfig {
// 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.
@@ -699,7 +702,7 @@ public struct Config: Sendable {
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum AddressMode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum AddressMode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -731,15 +734,9 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.NetworkConfig.AddressMode] = [
- .dhcp,
- .static,
- ]
-
}
- public struct IpV4Config: Sendable {
+ public struct IpV4Config {
// 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.
@@ -772,7 +769,7 @@ public struct Config: Sendable {
///
/// Display Config
- public struct DisplayConfig: Sendable {
+ public struct DisplayConfig {
// 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.
@@ -828,7 +825,7 @@ public struct Config: Sendable {
///
/// How the GPS coordinates are displayed on the OLED screen.
- public enum GpsCoordinateFormat: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum GpsCoordinateFormat: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -891,21 +888,11 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DisplayConfig.GpsCoordinateFormat] = [
- .dec,
- .dms,
- .utm,
- .mgrs,
- .olc,
- .osgr,
- ]
-
}
///
/// Unit display preference
- public enum DisplayUnits: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum DisplayUnits: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -937,17 +924,11 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DisplayConfig.DisplayUnits] = [
- .metric,
- .imperial,
- ]
-
}
///
/// Override OLED outo detect with this if it fails.
- public enum OledType: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum OledType: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -991,17 +972,9 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DisplayConfig.OledType] = [
- .oledAuto,
- .oledSsd1306,
- .oledSh1106,
- .oledSh1107,
- ]
-
}
- public enum DisplayMode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum DisplayMode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1045,17 +1018,9 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DisplayConfig.DisplayMode] = [
- .default,
- .twocolor,
- .inverted,
- .color,
- ]
-
}
- public enum CompassOrientation: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum CompassOrientation: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1123,18 +1088,6 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.DisplayConfig.CompassOrientation] = [
- .degrees0,
- .degrees90,
- .degrees180,
- .degrees270,
- .degrees0Inverted,
- .degrees90Inverted,
- .degrees180Inverted,
- .degrees270Inverted,
- ]
-
}
public init() {}
@@ -1142,7 +1095,7 @@ public struct Config: Sendable {
///
/// Lora Config
- public struct LoRaConfig: @unchecked Sendable {
+ public struct LoRaConfig {
// 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.
@@ -1299,7 +1252,7 @@ public struct Config: Sendable {
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum RegionCode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum RegionCode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1433,35 +1386,12 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.LoRaConfig.RegionCode] = [
- .unset,
- .us,
- .eu433,
- .eu868,
- .cn,
- .jp,
- .anz,
- .kr,
- .tw,
- .ru,
- .in,
- .nz865,
- .th,
- .lora24,
- .ua433,
- .ua868,
- .my433,
- .my919,
- .sg923,
- ]
-
}
///
/// Standard predefined channel settings
/// Note: these mappings must match ModemPreset Choice in the device code.
- public enum ModemPreset: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum ModemPreset: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1474,6 +1404,7 @@ public struct Config: Sendable {
///
/// Very Long Range - Slow
+ /// Deprecated in 2.5: Works only with txco and is unusably slow
case veryLongSlow // = 2
///
@@ -1495,6 +1426,12 @@ public struct Config: Sendable {
///
/// Long Range - Moderately Fast
case longModerate // = 7
+
+ ///
+ /// Short Range - Turbo
+ /// This is the fastest preset and the only one with 500kHz bandwidth.
+ /// It is not legal to use in all regions due to this wider bandwidth.
+ case shortTurbo // = 8
case UNRECOGNIZED(Int)
public init() {
@@ -1511,6 +1448,7 @@ public struct Config: Sendable {
case 5: self = .shortSlow
case 6: self = .shortFast
case 7: self = .longModerate
+ case 8: self = .shortTurbo
default: self = .UNRECOGNIZED(rawValue)
}
}
@@ -1525,22 +1463,11 @@ public struct Config: Sendable {
case .shortSlow: return 5
case .shortFast: return 6
case .longModerate: return 7
+ case .shortTurbo: return 8
case .UNRECOGNIZED(let i): return i
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.LoRaConfig.ModemPreset] = [
- .longFast,
- .longSlow,
- .veryLongSlow,
- .mediumSlow,
- .mediumFast,
- .shortSlow,
- .shortFast,
- .longModerate,
- ]
-
}
public init() {}
@@ -1548,7 +1475,7 @@ public struct Config: Sendable {
fileprivate var _storage = _StorageClass.defaultInstance
}
- public struct BluetoothConfig: Sendable {
+ public struct BluetoothConfig {
// 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.
@@ -1567,11 +1494,12 @@ public struct Config: Sendable {
///
/// Enables device (serial style logs) over Bluetooth
+ /// Moved to SecurityConfig
public var deviceLoggingEnabled: Bool = false
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum PairingMode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum PairingMode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1609,21 +1537,255 @@ public struct Config: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Config.BluetoothConfig.PairingMode] = [
- .randomPin,
- .fixedPin,
- .noPin,
- ]
-
}
public init() {}
}
+ public struct SecurityConfig {
+ // 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.
+
+ ///
+ /// The public key of the user's device.
+ /// Sent out to other nodes on the mesh to allow them to compute a shared secret key.
+ public var publicKey: Data = Data()
+
+ ///
+ /// The private key of the device.
+ /// Used to create a shared key with a remote device.
+ public var privateKey: Data = Data()
+
+ ///
+ /// The public key authorized to send admin messages to this node.
+ public var adminKey: Data = Data()
+
+ ///
+ /// If true, device is considered to be "managed" by a mesh administrator via admin messages
+ /// Device is managed by a mesh administrator.
+ public var isManaged: Bool = false
+
+ ///
+ /// Serial Console over the Stream API."
+ public var serialEnabled: Bool = false
+
+ ///
+ /// By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
+ /// Output live debug logging over serial.
+ public var debugLogApiEnabled: Bool = false
+
+ ///
+ /// Enables device (serial style logs) over Bluetooth
+ public var bluetoothLoggingEnabled: Bool = false
+
+ ///
+ /// Allow incoming device control over the insecure legacy admin channel.
+ public var adminChannelEnabled: Bool = false
+
+ public var unknownFields = SwiftProtobuf.UnknownStorage()
+
+ public init() {}
+ }
+
public init() {}
}
+#if swift(>=4.2)
+
+extension Config.DeviceConfig.Role: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DeviceConfig.Role] = [
+ .client,
+ .clientMute,
+ .router,
+ .routerClient,
+ .repeater,
+ .tracker,
+ .sensor,
+ .tak,
+ .clientHidden,
+ .lostAndFound,
+ .takTracker,
+ ]
+}
+
+extension Config.DeviceConfig.RebroadcastMode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DeviceConfig.RebroadcastMode] = [
+ .all,
+ .allSkipDecoding,
+ .localOnly,
+ .knownOnly,
+ ]
+}
+
+extension Config.PositionConfig.PositionFlags: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.PositionConfig.PositionFlags] = [
+ .unset,
+ .altitude,
+ .altitudeMsl,
+ .geoidalSeparation,
+ .dop,
+ .hvdop,
+ .satinview,
+ .seqNo,
+ .timestamp,
+ .heading,
+ .speed,
+ ]
+}
+
+extension Config.PositionConfig.GpsMode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.PositionConfig.GpsMode] = [
+ .disabled,
+ .enabled,
+ .notPresent,
+ ]
+}
+
+extension Config.NetworkConfig.AddressMode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.NetworkConfig.AddressMode] = [
+ .dhcp,
+ .static,
+ ]
+}
+
+extension Config.DisplayConfig.GpsCoordinateFormat: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DisplayConfig.GpsCoordinateFormat] = [
+ .dec,
+ .dms,
+ .utm,
+ .mgrs,
+ .olc,
+ .osgr,
+ ]
+}
+
+extension Config.DisplayConfig.DisplayUnits: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DisplayConfig.DisplayUnits] = [
+ .metric,
+ .imperial,
+ ]
+}
+
+extension Config.DisplayConfig.OledType: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DisplayConfig.OledType] = [
+ .oledAuto,
+ .oledSsd1306,
+ .oledSh1106,
+ .oledSh1107,
+ ]
+}
+
+extension Config.DisplayConfig.DisplayMode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DisplayConfig.DisplayMode] = [
+ .default,
+ .twocolor,
+ .inverted,
+ .color,
+ ]
+}
+
+extension Config.DisplayConfig.CompassOrientation: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.DisplayConfig.CompassOrientation] = [
+ .degrees0,
+ .degrees90,
+ .degrees180,
+ .degrees270,
+ .degrees0Inverted,
+ .degrees90Inverted,
+ .degrees180Inverted,
+ .degrees270Inverted,
+ ]
+}
+
+extension Config.LoRaConfig.RegionCode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.LoRaConfig.RegionCode] = [
+ .unset,
+ .us,
+ .eu433,
+ .eu868,
+ .cn,
+ .jp,
+ .anz,
+ .kr,
+ .tw,
+ .ru,
+ .in,
+ .nz865,
+ .th,
+ .lora24,
+ .ua433,
+ .ua868,
+ .my433,
+ .my919,
+ .sg923,
+ ]
+}
+
+extension Config.LoRaConfig.ModemPreset: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.LoRaConfig.ModemPreset] = [
+ .longFast,
+ .longSlow,
+ .veryLongSlow,
+ .mediumSlow,
+ .mediumFast,
+ .shortSlow,
+ .shortFast,
+ .longModerate,
+ .shortTurbo,
+ ]
+}
+
+extension Config.BluetoothConfig.PairingMode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Config.BluetoothConfig.PairingMode] = [
+ .randomPin,
+ .fixedPin,
+ .noPin,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension Config: @unchecked Sendable {}
+extension Config.OneOf_PayloadVariant: @unchecked Sendable {}
+extension Config.DeviceConfig: @unchecked Sendable {}
+extension Config.DeviceConfig.Role: @unchecked Sendable {}
+extension Config.DeviceConfig.RebroadcastMode: @unchecked Sendable {}
+extension Config.PositionConfig: @unchecked Sendable {}
+extension Config.PositionConfig.PositionFlags: @unchecked Sendable {}
+extension Config.PositionConfig.GpsMode: @unchecked Sendable {}
+extension Config.PowerConfig: @unchecked Sendable {}
+extension Config.NetworkConfig: @unchecked Sendable {}
+extension Config.NetworkConfig.AddressMode: @unchecked Sendable {}
+extension Config.NetworkConfig.IpV4Config: @unchecked Sendable {}
+extension Config.DisplayConfig: @unchecked Sendable {}
+extension Config.DisplayConfig.GpsCoordinateFormat: @unchecked Sendable {}
+extension Config.DisplayConfig.DisplayUnits: @unchecked Sendable {}
+extension Config.DisplayConfig.OledType: @unchecked Sendable {}
+extension Config.DisplayConfig.DisplayMode: @unchecked Sendable {}
+extension Config.DisplayConfig.CompassOrientation: @unchecked Sendable {}
+extension Config.LoRaConfig: @unchecked Sendable {}
+extension Config.LoRaConfig.RegionCode: @unchecked Sendable {}
+extension Config.LoRaConfig.ModemPreset: @unchecked Sendable {}
+extension Config.BluetoothConfig: @unchecked Sendable {}
+extension Config.BluetoothConfig.PairingMode: @unchecked Sendable {}
+extension Config.SecurityConfig: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -1638,6 +1800,7 @@ extension Config: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBas
5: .same(proto: "display"),
6: .same(proto: "lora"),
7: .same(proto: "bluetooth"),
+ 8: .same(proto: "security"),
]
public mutating func decodeMessage(decoder: inout D) throws {
@@ -1737,6 +1900,19 @@ extension Config: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBas
self.payloadVariant = .bluetooth(v)
}
}()
+ case 8: try {
+ var v: Config.SecurityConfig?
+ var hadOneofValue = false
+ if let current = self.payloadVariant {
+ hadOneofValue = true
+ if case .security(let m) = current {v = m}
+ }
+ try decoder.decodeSingularMessageField(value: &v)
+ if let v = v {
+ if hadOneofValue {try decoder.handleConflictingOneOf()}
+ self.payloadVariant = .security(v)
+ }
+ }()
default: break
}
}
@@ -1776,6 +1952,10 @@ extension Config: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBas
guard case .bluetooth(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
}()
+ case .security?: try {
+ guard case .security(let v)? = self.payloadVariant else { preconditionFailure() }
+ try visitor.visitSingularMessageField(value: v, fieldNumber: 8)
+ }()
case nil: break
}
try unknownFields.traverse(visitor: &visitor)
@@ -2080,7 +2260,7 @@ extension Config.PowerConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
if self.onBatteryShutdownAfterSecs != 0 {
try visitor.visitSingularUInt32Field(value: self.onBatteryShutdownAfterSecs, fieldNumber: 2)
}
- if self.adcMultiplierOverride.bitPattern != 0 {
+ if self.adcMultiplierOverride != 0 {
try visitor.visitSingularFloatField(value: self.adcMultiplierOverride, fieldNumber: 3)
}
if self.waitBluetoothSecs != 0 {
@@ -2524,7 +2704,7 @@ extension Config.LoRaConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
if _storage._codingRate != 0 {
try visitor.visitSingularUInt32Field(value: _storage._codingRate, fieldNumber: 5)
}
- if _storage._frequencyOffset.bitPattern != 0 {
+ if _storage._frequencyOffset != 0 {
try visitor.visitSingularFloatField(value: _storage._frequencyOffset, fieldNumber: 6)
}
if _storage._region != .unset {
@@ -2548,7 +2728,7 @@ extension Config.LoRaConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
if _storage._sx126XRxBoostedGain != false {
try visitor.visitSingularBoolField(value: _storage._sx126XRxBoostedGain, fieldNumber: 13)
}
- if _storage._overrideFrequency.bitPattern != 0 {
+ if _storage._overrideFrequency != 0 {
try visitor.visitSingularFloatField(value: _storage._overrideFrequency, fieldNumber: 14)
}
if _storage._paFanDisabled != false {
@@ -2629,6 +2809,7 @@ extension Config.LoRaConfig.ModemPreset: SwiftProtobuf._ProtoNameProviding {
5: .same(proto: "SHORT_SLOW"),
6: .same(proto: "SHORT_FAST"),
7: .same(proto: "LONG_MODERATE"),
+ 8: .same(proto: "SHORT_TURBO"),
]
}
@@ -2689,3 +2870,77 @@ extension Config.BluetoothConfig.PairingMode: SwiftProtobuf._ProtoNameProviding
2: .same(proto: "NO_PIN"),
]
}
+
+extension Config.SecurityConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+ public static let protoMessageName: String = Config.protoMessageName + ".SecurityConfig"
+ public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+ 1: .standard(proto: "public_key"),
+ 2: .standard(proto: "private_key"),
+ 3: .standard(proto: "admin_key"),
+ 4: .standard(proto: "is_managed"),
+ 5: .standard(proto: "serial_enabled"),
+ 6: .standard(proto: "debug_log_api_enabled"),
+ 7: .standard(proto: "bluetooth_logging_enabled"),
+ 8: .standard(proto: "admin_channel_enabled"),
+ ]
+
+ public mutating func decodeMessage(decoder: inout D) throws {
+ while let fieldNumber = try decoder.nextFieldNumber() {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch fieldNumber {
+ case 1: try { try decoder.decodeSingularBytesField(value: &self.publicKey) }()
+ case 2: try { try decoder.decodeSingularBytesField(value: &self.privateKey) }()
+ case 3: try { try decoder.decodeSingularBytesField(value: &self.adminKey) }()
+ case 4: try { try decoder.decodeSingularBoolField(value: &self.isManaged) }()
+ case 5: try { try decoder.decodeSingularBoolField(value: &self.serialEnabled) }()
+ case 6: try { try decoder.decodeSingularBoolField(value: &self.debugLogApiEnabled) }()
+ case 7: try { try decoder.decodeSingularBoolField(value: &self.bluetoothLoggingEnabled) }()
+ case 8: try { try decoder.decodeSingularBoolField(value: &self.adminChannelEnabled) }()
+ default: break
+ }
+ }
+ }
+
+ public func traverse(visitor: inout V) throws {
+ if !self.publicKey.isEmpty {
+ try visitor.visitSingularBytesField(value: self.publicKey, fieldNumber: 1)
+ }
+ if !self.privateKey.isEmpty {
+ try visitor.visitSingularBytesField(value: self.privateKey, fieldNumber: 2)
+ }
+ if !self.adminKey.isEmpty {
+ try visitor.visitSingularBytesField(value: self.adminKey, fieldNumber: 3)
+ }
+ if self.isManaged != false {
+ try visitor.visitSingularBoolField(value: self.isManaged, fieldNumber: 4)
+ }
+ if self.serialEnabled != false {
+ try visitor.visitSingularBoolField(value: self.serialEnabled, fieldNumber: 5)
+ }
+ if self.debugLogApiEnabled != false {
+ try visitor.visitSingularBoolField(value: self.debugLogApiEnabled, fieldNumber: 6)
+ }
+ if self.bluetoothLoggingEnabled != false {
+ try visitor.visitSingularBoolField(value: self.bluetoothLoggingEnabled, fieldNumber: 7)
+ }
+ if self.adminChannelEnabled != false {
+ try visitor.visitSingularBoolField(value: self.adminChannelEnabled, fieldNumber: 8)
+ }
+ try unknownFields.traverse(visitor: &visitor)
+ }
+
+ public static func ==(lhs: Config.SecurityConfig, rhs: Config.SecurityConfig) -> Bool {
+ if lhs.publicKey != rhs.publicKey {return false}
+ if lhs.privateKey != rhs.privateKey {return false}
+ if lhs.adminKey != rhs.adminKey {return false}
+ if lhs.isManaged != rhs.isManaged {return false}
+ if lhs.serialEnabled != rhs.serialEnabled {return false}
+ if lhs.debugLogApiEnabled != rhs.debugLogApiEnabled {return false}
+ if lhs.bluetoothLoggingEnabled != rhs.bluetoothLoggingEnabled {return false}
+ if lhs.adminChannelEnabled != rhs.adminChannelEnabled {return false}
+ if lhs.unknownFields != rhs.unknownFields {return false}
+ return true
+ }
+}
diff --git a/MeshtasticProtobufs/Sources/meshtastic/connection_status.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/connection_status.pb.swift
index a4569714..a2ec180e 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/connection_status.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/connection_status.pb.swift
@@ -20,7 +20,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
typealias Version = _2
}
-public struct DeviceConnectionStatus: Sendable {
+public struct DeviceConnectionStatus {
// 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.
@@ -81,7 +81,7 @@ public struct DeviceConnectionStatus: Sendable {
///
/// WiFi connection status
-public struct WifiConnectionStatus: Sendable {
+public struct WifiConnectionStatus {
// 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.
@@ -114,7 +114,7 @@ public struct WifiConnectionStatus: Sendable {
///
/// Ethernet connection status
-public struct EthernetConnectionStatus: Sendable {
+public struct EthernetConnectionStatus {
// 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.
@@ -139,7 +139,7 @@ public struct EthernetConnectionStatus: Sendable {
///
/// Ethernet or WiFi connection status
-public struct NetworkConnectionStatus: Sendable {
+public struct NetworkConnectionStatus {
// 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.
@@ -167,7 +167,7 @@ public struct NetworkConnectionStatus: Sendable {
///
/// Bluetooth connection status
-public struct BluetoothConnectionStatus: Sendable {
+public struct BluetoothConnectionStatus {
// 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.
@@ -191,7 +191,7 @@ public struct BluetoothConnectionStatus: Sendable {
///
/// Serial connection status
-public struct SerialConnectionStatus: Sendable {
+public struct SerialConnectionStatus {
// 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.
@@ -209,6 +209,15 @@ public struct SerialConnectionStatus: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension DeviceConnectionStatus: @unchecked Sendable {}
+extension WifiConnectionStatus: @unchecked Sendable {}
+extension EthernetConnectionStatus: @unchecked Sendable {}
+extension NetworkConnectionStatus: @unchecked Sendable {}
+extension BluetoothConnectionStatus: @unchecked Sendable {}
+extension SerialConnectionStatus: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/deviceonly.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/deviceonly.pb.swift
index 834f9636..43506399 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/deviceonly.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/deviceonly.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// Font sizes for the device screen
-public enum ScreenFonts: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum ScreenFonts: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -60,18 +60,24 @@ public enum ScreenFonts: SwiftProtobuf.Enum, Swift.CaseIterable {
}
}
+}
+
+#if swift(>=4.2)
+
+extension ScreenFonts: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [ScreenFonts] = [
.fontSmall,
.fontMedium,
.fontLarge,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Position with static location information only for NodeDBLite
-public struct PositionLite: Sendable {
+public struct PositionLite {
// 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.
@@ -106,7 +112,52 @@ public struct PositionLite: Sendable {
public init() {}
}
-public struct NodeInfoLite: @unchecked Sendable {
+public struct UserLite {
+ // 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.
+
+ ///
+ /// This is the addr of the radio.
+ public var macaddr: Data = Data()
+
+ ///
+ /// A full name for this user, i.e. "Kevin Hester"
+ public var longName: String = String()
+
+ ///
+ /// A VERY short name, ideally two characters.
+ /// Suitable for a tiny OLED screen
+ public var shortName: String = String()
+
+ ///
+ /// TBEAM, HELTEC, etc...
+ /// Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
+ /// Apps will still need the string here for older builds
+ /// (so OTA update can find the right image), but if the enum is available it will be used instead.
+ public var hwModel: HardwareModel = .unset
+
+ ///
+ /// In some regions Ham radio operators have different bandwidth limitations than others.
+ /// If this user is a licensed operator, set this flag.
+ /// Also, "long_name" should be their licence number.
+ public var isLicensed: Bool = false
+
+ ///
+ /// Indicates that the user's role in the mesh
+ public var role: Config.DeviceConfig.Role = .client
+
+ ///
+ /// The public key of the user's device.
+ /// This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
+ public var publicKey: Data = Data()
+
+ public var unknownFields = SwiftProtobuf.UnknownStorage()
+
+ public init() {}
+}
+
+public struct NodeInfoLite {
// 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.
@@ -120,8 +171,8 @@ public struct NodeInfoLite: @unchecked Sendable {
///
/// The user info for this node
- public var user: User {
- get {return _storage._user ?? User()}
+ public var user: UserLite {
+ get {return _storage._user ?? UserLite()}
set {_uniqueStorage()._user = newValue}
}
/// Returns true if `user` has been explicitly set.
@@ -209,7 +260,7 @@ public struct NodeInfoLite: @unchecked Sendable {
/// FIXME, since we write this each time we enter deep sleep (and have infinite
/// flash) it would be better to use some sort of append only data structure for
/// the receive queue and use the preferences store for the other stuff
-public struct DeviceState: @unchecked Sendable {
+public struct DeviceState {
// 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.
@@ -269,8 +320,6 @@ public struct DeviceState: @unchecked Sendable {
/// Used only during development.
/// Indicates developer is testing and changes should never be saved to flash.
/// Deprecated in 2.3.1
- ///
- /// NOTE: This field was marked as deprecated in the .proto file.
public var noSave: Bool {
get {return _storage._noSave}
set {_uniqueStorage()._noSave = newValue}
@@ -319,7 +368,7 @@ public struct DeviceState: @unchecked Sendable {
///
/// The on-disk saved channels
-public struct ChannelFile: Sendable {
+public struct ChannelFile {
// 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.
@@ -342,7 +391,7 @@ public struct ChannelFile: Sendable {
///
/// This can be used for customizing the firmware distribution. If populated,
/// show a secondary bootup screen with custom logo and text for 2.5 seconds.
-public struct OEMStore: @unchecked Sendable {
+public struct OEMStore {
// 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.
@@ -401,6 +450,16 @@ public struct OEMStore: @unchecked Sendable {
fileprivate var _oemLocalModuleConfig: LocalModuleConfig? = nil
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension ScreenFonts: @unchecked Sendable {}
+extension PositionLite: @unchecked Sendable {}
+extension UserLite: @unchecked Sendable {}
+extension NodeInfoLite: @unchecked Sendable {}
+extension DeviceState: @unchecked Sendable {}
+extension ChannelFile: @unchecked Sendable {}
+extension OEMStore: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -469,6 +528,74 @@ extension PositionLite: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
}
}
+extension UserLite: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+ public static let protoMessageName: String = _protobuf_package + ".UserLite"
+ public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+ 1: .same(proto: "macaddr"),
+ 2: .standard(proto: "long_name"),
+ 3: .standard(proto: "short_name"),
+ 4: .standard(proto: "hw_model"),
+ 5: .standard(proto: "is_licensed"),
+ 6: .same(proto: "role"),
+ 7: .standard(proto: "public_key"),
+ ]
+
+ public mutating func decodeMessage(decoder: inout D) throws {
+ while let fieldNumber = try decoder.nextFieldNumber() {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch fieldNumber {
+ case 1: try { try decoder.decodeSingularBytesField(value: &self.macaddr) }()
+ case 2: try { try decoder.decodeSingularStringField(value: &self.longName) }()
+ case 3: try { try decoder.decodeSingularStringField(value: &self.shortName) }()
+ case 4: try { try decoder.decodeSingularEnumField(value: &self.hwModel) }()
+ case 5: try { try decoder.decodeSingularBoolField(value: &self.isLicensed) }()
+ case 6: try { try decoder.decodeSingularEnumField(value: &self.role) }()
+ case 7: try { try decoder.decodeSingularBytesField(value: &self.publicKey) }()
+ default: break
+ }
+ }
+ }
+
+ public func traverse(visitor: inout V) throws {
+ if !self.macaddr.isEmpty {
+ try visitor.visitSingularBytesField(value: self.macaddr, fieldNumber: 1)
+ }
+ if !self.longName.isEmpty {
+ try visitor.visitSingularStringField(value: self.longName, fieldNumber: 2)
+ }
+ if !self.shortName.isEmpty {
+ try visitor.visitSingularStringField(value: self.shortName, fieldNumber: 3)
+ }
+ if self.hwModel != .unset {
+ try visitor.visitSingularEnumField(value: self.hwModel, fieldNumber: 4)
+ }
+ if self.isLicensed != false {
+ try visitor.visitSingularBoolField(value: self.isLicensed, fieldNumber: 5)
+ }
+ if self.role != .client {
+ try visitor.visitSingularEnumField(value: self.role, fieldNumber: 6)
+ }
+ if !self.publicKey.isEmpty {
+ try visitor.visitSingularBytesField(value: self.publicKey, fieldNumber: 7)
+ }
+ try unknownFields.traverse(visitor: &visitor)
+ }
+
+ public static func ==(lhs: UserLite, rhs: UserLite) -> Bool {
+ if lhs.macaddr != rhs.macaddr {return false}
+ if lhs.longName != rhs.longName {return false}
+ if lhs.shortName != rhs.shortName {return false}
+ if lhs.hwModel != rhs.hwModel {return false}
+ if lhs.isLicensed != rhs.isLicensed {return false}
+ if lhs.role != rhs.role {return false}
+ if lhs.publicKey != rhs.publicKey {return false}
+ if lhs.unknownFields != rhs.unknownFields {return false}
+ return true
+ }
+}
+
extension NodeInfoLite: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
public static let protoMessageName: String = _protobuf_package + ".NodeInfoLite"
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
@@ -486,7 +613,7 @@ extension NodeInfoLite: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
fileprivate class _StorageClass {
var _num: UInt32 = 0
- var _user: User? = nil
+ var _user: UserLite? = nil
var _position: PositionLite? = nil
var _snr: Float = 0
var _lastHeard: UInt32 = 0
@@ -568,7 +695,7 @@ extension NodeInfoLite: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
try { if let v = _storage._position {
try visitor.visitSingularMessageField(value: v, fieldNumber: 3)
} }()
- if _storage._snr.bitPattern != 0 {
+ if _storage._snr != 0 {
try visitor.visitSingularFloatField(value: _storage._snr, fieldNumber: 4)
}
if _storage._lastHeard != 0 {
diff --git a/MeshtasticProtobufs/Sources/meshtastic/localonly.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/localonly.pb.swift
index 17dd5baa..0af27466 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/localonly.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/localonly.pb.swift
@@ -20,7 +20,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
typealias Version = _2
}
-public struct LocalConfig: @unchecked Sendable {
+public struct LocalConfig {
// 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.
@@ -111,6 +111,17 @@ public struct LocalConfig: @unchecked Sendable {
set {_uniqueStorage()._version = newValue}
}
+ ///
+ /// The part of the config that is specific to Security settings
+ public var security: Config.SecurityConfig {
+ get {return _storage._security ?? Config.SecurityConfig()}
+ set {_uniqueStorage()._security = newValue}
+ }
+ /// Returns true if `security` has been explicitly set.
+ public var hasSecurity: Bool {return _storage._security != nil}
+ /// Clears the value of `security`. Subsequent reads from it will return its default value.
+ public mutating func clearSecurity() {_uniqueStorage()._security = nil}
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
public init() {}
@@ -118,7 +129,7 @@ public struct LocalConfig: @unchecked Sendable {
fileprivate var _storage = _StorageClass.defaultInstance
}
-public struct LocalModuleConfig: @unchecked Sendable {
+public struct LocalModuleConfig {
// 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.
@@ -282,6 +293,11 @@ public struct LocalModuleConfig: @unchecked Sendable {
fileprivate var _storage = _StorageClass.defaultInstance
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension LocalConfig: @unchecked Sendable {}
+extension LocalModuleConfig: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -297,6 +313,7 @@ extension LocalConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
6: .same(proto: "lora"),
7: .same(proto: "bluetooth"),
8: .same(proto: "version"),
+ 9: .same(proto: "security"),
]
fileprivate class _StorageClass {
@@ -308,6 +325,7 @@ extension LocalConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
var _lora: Config.LoRaConfig? = nil
var _bluetooth: Config.BluetoothConfig? = nil
var _version: UInt32 = 0
+ var _security: Config.SecurityConfig? = nil
#if swift(>=5.10)
// This property is used as the initial default value for new instances of the type.
@@ -330,6 +348,7 @@ extension LocalConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
_lora = source._lora
_bluetooth = source._bluetooth
_version = source._version
+ _security = source._security
}
}
@@ -356,6 +375,7 @@ extension LocalConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
case 6: try { try decoder.decodeSingularMessageField(value: &_storage._lora) }()
case 7: try { try decoder.decodeSingularMessageField(value: &_storage._bluetooth) }()
case 8: try { try decoder.decodeSingularUInt32Field(value: &_storage._version) }()
+ case 9: try { try decoder.decodeSingularMessageField(value: &_storage._security) }()
default: break
}
}
@@ -392,6 +412,9 @@ extension LocalConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
if _storage._version != 0 {
try visitor.visitSingularUInt32Field(value: _storage._version, fieldNumber: 8)
}
+ try { if let v = _storage._security {
+ try visitor.visitSingularMessageField(value: v, fieldNumber: 9)
+ } }()
}
try unknownFields.traverse(visitor: &visitor)
}
@@ -409,6 +432,7 @@ extension LocalConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementati
if _storage._lora != rhs_storage._lora {return false}
if _storage._bluetooth != rhs_storage._bluetooth {return false}
if _storage._version != rhs_storage._version {return false}
+ if _storage._security != rhs_storage._security {return false}
return true
}
if !storagesAreEqual {return false}
diff --git a/MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift
index 996e8268..ba12908d 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift
@@ -25,7 +25,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// bin/build-all.sh script.
/// Because they will be used to find firmware filenames in the android app for OTA updates.
/// To match the old style filenames, _ is converted to -, p is converted to .
-public enum HardwareModel: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum HardwareModel: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -329,6 +329,23 @@ public enum HardwareModel: SwiftProtobuf.Enum, Swift.CaseIterable {
/// Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors.
case trackerT1000E // = 71
+ ///
+ /// RAK3172 STM32WLE5 Module (https://store.rakwireless.com/products/wisduo-lpwan-module-rak3172)
+ case rak3172 // = 72
+
+ ///
+ /// Seeed Studio Wio-E5 (either mini or Dev kit) using STM32WL chip.
+ case wioE5 // = 73
+
+ ///
+ /// RadioMaster 900 Bandit, https://www.radiomasterrc.com/products/bandit-expresslrs-rf-module
+ /// SSD1306 OLED and No GPS
+ case radiomaster900Bandit // = 74
+
+ ///
+ /// Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins.
+ case me25Ls014Y10Td // = 75
+
///
/// ------------------------------------------------------------------------------------------------------------------------------------------
/// Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
@@ -413,6 +430,10 @@ public enum HardwareModel: SwiftProtobuf.Enum, Swift.CaseIterable {
case 69: self = .heltecMeshNodeT114
case 70: self = .sensecapIndicator
case 71: self = .trackerT1000E
+ case 72: self = .rak3172
+ case 73: self = .wioE5
+ case 74: self = .radiomaster900Bandit
+ case 75: self = .me25Ls014Y10Td
case 255: self = .privateHw
default: self = .UNRECOGNIZED(rawValue)
}
@@ -491,11 +512,20 @@ public enum HardwareModel: SwiftProtobuf.Enum, Swift.CaseIterable {
case .heltecMeshNodeT114: return 69
case .sensecapIndicator: return 70
case .trackerT1000E: return 71
+ case .rak3172: return 72
+ case .wioE5: return 73
+ case .radiomaster900Bandit: return 74
+ case .me25Ls014Y10Td: return 75
case .privateHw: return 255
case .UNRECOGNIZED(let i): return i
}
}
+}
+
+#if swift(>=4.2)
+
+extension HardwareModel: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [HardwareModel] = [
.unset,
@@ -569,14 +599,19 @@ public enum HardwareModel: SwiftProtobuf.Enum, Swift.CaseIterable {
.heltecMeshNodeT114,
.sensecapIndicator,
.trackerT1000E,
+ .rak3172,
+ .wioE5,
+ .radiomaster900Bandit,
+ .me25Ls014Y10Td,
.privateHw,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Shared constants between device and phone
-public enum Constants: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum Constants: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -611,20 +646,26 @@ public enum Constants: SwiftProtobuf.Enum, Swift.CaseIterable {
}
}
+}
+
+#if swift(>=4.2)
+
+extension Constants: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [Constants] = [
.zero,
.dataPayloadLen,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Error codes for critical errors
/// The device might report these fault codes on the screen.
/// If you encounter a fault code, please post on the meshtastic.discourse.group
/// and we'll try to help.
-public enum CriticalErrorCode: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum CriticalErrorCode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -676,6 +717,17 @@ public enum CriticalErrorCode: SwiftProtobuf.Enum, Swift.CaseIterable {
/// A (likely software but possibly hardware) failure was detected while trying to send packets.
/// If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this bug
case radioSpiBug // = 11
+
+ ///
+ /// Corruption was detected on the flash filesystem but we were able to repair things.
+ /// If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
+ case flashCorruptionRecoverable // = 12
+
+ ///
+ /// Corruption was detected on the flash filesystem but we were unable to repair things.
+ /// NOTE: Your node will probably need to be reconfigured the next time it reboots (it will lose the region code etc...)
+ /// If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
+ case flashCorruptionUnrecoverable // = 13
case UNRECOGNIZED(Int)
public init() {
@@ -696,6 +748,8 @@ public enum CriticalErrorCode: SwiftProtobuf.Enum, Swift.CaseIterable {
case 9: self = .brownout
case 10: self = .sx1262Failure
case 11: self = .radioSpiBug
+ case 12: self = .flashCorruptionRecoverable
+ case 13: self = .flashCorruptionUnrecoverable
default: self = .UNRECOGNIZED(rawValue)
}
}
@@ -714,10 +768,17 @@ public enum CriticalErrorCode: SwiftProtobuf.Enum, Swift.CaseIterable {
case .brownout: return 9
case .sx1262Failure: return 10
case .radioSpiBug: return 11
+ case .flashCorruptionRecoverable: return 12
+ case .flashCorruptionUnrecoverable: return 13
case .UNRECOGNIZED(let i): return i
}
}
+}
+
+#if swift(>=4.2)
+
+extension CriticalErrorCode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [CriticalErrorCode] = [
.none,
@@ -732,13 +793,16 @@ public enum CriticalErrorCode: SwiftProtobuf.Enum, Swift.CaseIterable {
.brownout,
.sx1262Failure,
.radioSpiBug,
+ .flashCorruptionRecoverable,
+ .flashCorruptionUnrecoverable,
]
-
}
+#endif // swift(>=4.2)
+
///
/// a gps position
-public struct Position: @unchecked Sendable {
+public struct Position {
// 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.
@@ -747,23 +811,35 @@ public struct Position: @unchecked Sendable {
/// The new preferred location encoding, multiply by 1e-7 to get degrees
/// in floating point
public var latitudeI: Int32 {
- get {return _storage._latitudeI}
+ get {return _storage._latitudeI ?? 0}
set {_uniqueStorage()._latitudeI = newValue}
}
+ /// Returns true if `latitudeI` has been explicitly set.
+ public var hasLatitudeI: Bool {return _storage._latitudeI != nil}
+ /// Clears the value of `latitudeI`. Subsequent reads from it will return its default value.
+ public mutating func clearLatitudeI() {_uniqueStorage()._latitudeI = nil}
///
/// TODO: REPLACE
public var longitudeI: Int32 {
- get {return _storage._longitudeI}
+ get {return _storage._longitudeI ?? 0}
set {_uniqueStorage()._longitudeI = newValue}
}
+ /// Returns true if `longitudeI` has been explicitly set.
+ public var hasLongitudeI: Bool {return _storage._longitudeI != nil}
+ /// Clears the value of `longitudeI`. Subsequent reads from it will return its default value.
+ public mutating func clearLongitudeI() {_uniqueStorage()._longitudeI = nil}
///
/// In meters above MSL (but see issue #359)
public var altitude: Int32 {
- get {return _storage._altitude}
+ get {return _storage._altitude ?? 0}
set {_uniqueStorage()._altitude = newValue}
}
+ /// Returns true if `altitude` has been explicitly set.
+ public var hasAltitude: Bool {return _storage._altitude != nil}
+ /// Clears the value of `altitude`. Subsequent reads from it will return its default value.
+ public mutating func clearAltitude() {_uniqueStorage()._altitude = nil}
///
/// This is usually not sent over the mesh (to save space), but it is sent
@@ -806,16 +882,24 @@ public struct Position: @unchecked Sendable {
///
/// HAE altitude in meters - can be used instead of MSL altitude
public var altitudeHae: Int32 {
- get {return _storage._altitudeHae}
+ get {return _storage._altitudeHae ?? 0}
set {_uniqueStorage()._altitudeHae = newValue}
}
+ /// Returns true if `altitudeHae` has been explicitly set.
+ public var hasAltitudeHae: Bool {return _storage._altitudeHae != nil}
+ /// Clears the value of `altitudeHae`. Subsequent reads from it will return its default value.
+ public mutating func clearAltitudeHae() {_uniqueStorage()._altitudeHae = nil}
///
/// Geoidal separation in meters
public var altitudeGeoidalSeparation: Int32 {
- get {return _storage._altitudeGeoidalSeparation}
+ get {return _storage._altitudeGeoidalSeparation ?? 0}
set {_uniqueStorage()._altitudeGeoidalSeparation = newValue}
}
+ /// Returns true if `altitudeGeoidalSeparation` has been explicitly set.
+ public var hasAltitudeGeoidalSeparation: Bool {return _storage._altitudeGeoidalSeparation != nil}
+ /// Clears the value of `altitudeGeoidalSeparation`. Subsequent reads from it will return its default value.
+ public mutating func clearAltitudeGeoidalSeparation() {_uniqueStorage()._altitudeGeoidalSeparation = nil}
///
/// Horizontal, Vertical and Position Dilution of Precision, in 1/100 units
@@ -859,16 +943,24 @@ public struct Position: @unchecked Sendable {
/// - "yaw" indicates a relative rotation about the vertical axis
/// TODO: REMOVE/INTEGRATE
public var groundSpeed: UInt32 {
- get {return _storage._groundSpeed}
+ get {return _storage._groundSpeed ?? 0}
set {_uniqueStorage()._groundSpeed = newValue}
}
+ /// Returns true if `groundSpeed` has been explicitly set.
+ public var hasGroundSpeed: Bool {return _storage._groundSpeed != nil}
+ /// Clears the value of `groundSpeed`. Subsequent reads from it will return its default value.
+ public mutating func clearGroundSpeed() {_uniqueStorage()._groundSpeed = nil}
///
/// TODO: REPLACE
public var groundTrack: UInt32 {
- get {return _storage._groundTrack}
+ get {return _storage._groundTrack ?? 0}
set {_uniqueStorage()._groundTrack = newValue}
}
+ /// Returns true if `groundTrack` has been explicitly set.
+ public var hasGroundTrack: Bool {return _storage._groundTrack != nil}
+ /// Clears the value of `groundTrack`. Subsequent reads from it will return its default value.
+ public mutating func clearGroundTrack() {_uniqueStorage()._groundTrack = nil}
///
/// GPS fix quality (from NMEA GxGGA statement or similar)
@@ -927,7 +1019,7 @@ public struct Position: @unchecked Sendable {
///
/// How the location was acquired: manual, onboard GPS, external (EUD) GPS
- public enum LocSource: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum LocSource: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -971,20 +1063,12 @@ public struct Position: @unchecked Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Position.LocSource] = [
- .locUnset,
- .locManual,
- .locInternal,
- .locExternal,
- ]
-
}
///
/// How the altitude was acquired: manual, GPS int/ext, etc
/// Default: same as location_source if present
- public enum AltSource: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum AltSource: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1034,15 +1118,6 @@ public struct Position: @unchecked Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Position.AltSource] = [
- .altUnset,
- .altManual,
- .altInternal,
- .altExternal,
- .altBarometric,
- ]
-
}
public init() {}
@@ -1050,6 +1125,31 @@ public struct Position: @unchecked Sendable {
fileprivate var _storage = _StorageClass.defaultInstance
}
+#if swift(>=4.2)
+
+extension Position.LocSource: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Position.LocSource] = [
+ .locUnset,
+ .locManual,
+ .locInternal,
+ .locExternal,
+ ]
+}
+
+extension Position.AltSource: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Position.AltSource] = [
+ .altUnset,
+ .altManual,
+ .altInternal,
+ .altExternal,
+ .altBarometric,
+ ]
+}
+
+#endif // swift(>=4.2)
+
///
/// Broadcast when a newly powered mesh node wants to find a node num it can use
/// Sent from the phone over bluetooth to set the user id for the owner of this node.
@@ -1071,7 +1171,7 @@ public struct Position: @unchecked Sendable {
/// A few nodenums are reserved and will never be requested:
/// 0xff - broadcast
/// 0 through 3 - for future use
-public struct User: @unchecked Sendable {
+public struct User {
// 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.
@@ -1096,8 +1196,6 @@ public struct User: @unchecked Sendable {
/// Deprecated in Meshtastic 2.1.x
/// This is the addr of the radio.
/// Not populated by the phone, but added by the esp32 when broadcasting
- ///
- /// NOTE: This field was marked as deprecated in the .proto file.
public var macaddr: Data = Data()
///
@@ -1117,22 +1215,39 @@ public struct User: @unchecked Sendable {
/// Indicates that the user's role in the mesh
public var role: Config.DeviceConfig.Role = .client
+ ///
+ /// The public key of the user's device.
+ /// This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
+ public var publicKey: Data = Data()
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
public init() {}
}
///
-/// A message used in our Dynamic Source Routing protocol (RFC 4728 based)
-public struct RouteDiscovery: Sendable {
+/// A message used in a traceroute
+public struct RouteDiscovery {
// 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.
///
- /// The list of nodenums this packet has visited so far
+ /// The list of nodenums this packet has visited so far to the destination.
public var route: [UInt32] = []
+ ///
+ /// The list of SNRs (in dB, scaled by 4) in the route towards the destination.
+ public var snrTowards: [Int32] = []
+
+ ///
+ /// The list of nodenums the packet has visited on the way back from the destination.
+ public var routeBack: [UInt32] = []
+
+ ///
+ /// The list of SNRs (in dB, scaled by 4) in the route back from the destination.
+ public var snrBack: [Int32] = []
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
public init() {}
@@ -1140,7 +1255,7 @@ public struct RouteDiscovery: Sendable {
///
/// A Routing control Data packet handled by the routing module
-public struct Routing: Sendable {
+public struct Routing {
// 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.
@@ -1180,7 +1295,7 @@ public struct Routing: Sendable {
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum OneOf_Variant: Equatable, Sendable {
+ public enum OneOf_Variant: Equatable {
///
/// A route request going from the requester
case routeRequest(RouteDiscovery)
@@ -1192,12 +1307,34 @@ public struct Routing: Sendable {
/// in addition to ack.fail_id to provide details on the type of failure).
case errorReason(Routing.Error)
+ #if !swift(>=4.1)
+ public static func ==(lhs: Routing.OneOf_Variant, rhs: Routing.OneOf_Variant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.routeRequest, .routeRequest): return {
+ guard case .routeRequest(let l) = lhs, case .routeRequest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.routeReply, .routeReply): return {
+ guard case .routeReply(let l) = lhs, case .routeReply(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.errorReason, .errorReason): return {
+ guard case .errorReason(let l) = lhs, case .errorReason(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
///
/// A failure in delivering a message (usually used for routing control messages, but might be provided in addition to ack.fail_id to provide
/// details on the type of failure).
- public enum Error: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Error: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1249,6 +1386,14 @@ public struct Routing: Sendable {
/// The application layer service on the remote node received your request, but considered your request not authorized
/// (i.e you did not send the request on the required bound channel)
case notAuthorized // = 33
+
+ ///
+ /// The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at all)
+ case pkiFailed // = 34
+
+ ///
+ /// The receiving node does not have a Public Key to decode with
+ case pkiUnknownPubkey // = 35
case UNRECOGNIZED(Int)
public init() {
@@ -1269,6 +1414,8 @@ public struct Routing: Sendable {
case 9: self = .dutyCycleLimit
case 32: self = .badRequest
case 33: self = .notAuthorized
+ case 34: self = .pkiFailed
+ case 35: self = .pkiUnknownPubkey
default: self = .UNRECOGNIZED(rawValue)
}
}
@@ -1287,36 +1434,46 @@ public struct Routing: Sendable {
case .dutyCycleLimit: return 9
case .badRequest: return 32
case .notAuthorized: return 33
+ case .pkiFailed: return 34
+ case .pkiUnknownPubkey: return 35
case .UNRECOGNIZED(let i): return i
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [Routing.Error] = [
- .none,
- .noRoute,
- .gotNak,
- .timeout,
- .noInterface,
- .maxRetransmit,
- .noChannel,
- .tooLarge,
- .noResponse,
- .dutyCycleLimit,
- .badRequest,
- .notAuthorized,
- ]
-
}
public init() {}
}
+#if swift(>=4.2)
+
+extension Routing.Error: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [Routing.Error] = [
+ .none,
+ .noRoute,
+ .gotNak,
+ .timeout,
+ .noInterface,
+ .maxRetransmit,
+ .noChannel,
+ .tooLarge,
+ .noResponse,
+ .dutyCycleLimit,
+ .badRequest,
+ .notAuthorized,
+ .pkiFailed,
+ .pkiUnknownPubkey,
+ ]
+}
+
+#endif // swift(>=4.2)
+
///
/// (Formerly called SubPacket)
/// The payload portion fo a packet, this is the actual bytes that are sent
/// inside a radio packet (because from/to are broken out by the comms library)
-public struct DataMessage: @unchecked Sendable {
+public struct DataMessage {
// 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.
@@ -1370,7 +1527,7 @@ public struct DataMessage: @unchecked Sendable {
///
/// Waypoint message, used to share arbitrary locations across the mesh
-public struct Waypoint: Sendable {
+public struct Waypoint {
// 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.
@@ -1381,11 +1538,25 @@ public struct Waypoint: Sendable {
///
/// latitude_i
- public var latitudeI: Int32 = 0
+ public var latitudeI: Int32 {
+ get {return _latitudeI ?? 0}
+ set {_latitudeI = newValue}
+ }
+ /// Returns true if `latitudeI` has been explicitly set.
+ public var hasLatitudeI: Bool {return self._latitudeI != nil}
+ /// Clears the value of `latitudeI`. Subsequent reads from it will return its default value.
+ public mutating func clearLatitudeI() {self._latitudeI = nil}
///
/// longitude_i
- public var longitudeI: Int32 = 0
+ public var longitudeI: Int32 {
+ get {return _longitudeI ?? 0}
+ set {_longitudeI = newValue}
+ }
+ /// Returns true if `longitudeI` has been explicitly set.
+ public var hasLongitudeI: Bool {return self._longitudeI != nil}
+ /// Clears the value of `longitudeI`. Subsequent reads from it will return its default value.
+ public mutating func clearLongitudeI() {self._longitudeI = nil}
///
/// Time the waypoint is to expire (epoch)
@@ -1411,11 +1582,14 @@ public struct Waypoint: Sendable {
public var unknownFields = SwiftProtobuf.UnknownStorage()
public init() {}
+
+ fileprivate var _latitudeI: Int32? = nil
+ fileprivate var _longitudeI: Int32? = nil
}
///
/// This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server
-public struct MqttClientProxyMessage: @unchecked Sendable {
+public struct MqttClientProxyMessage {
// 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.
@@ -1456,7 +1630,7 @@ public struct MqttClientProxyMessage: @unchecked Sendable {
///
/// The actual service envelope payload or text for mqtt pub / sub
- public enum OneOf_PayloadVariant: Equatable, @unchecked Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// Bytes
case data(Data)
@@ -1464,6 +1638,24 @@ public struct MqttClientProxyMessage: @unchecked Sendable {
/// Text
case text(String)
+ #if !swift(>=4.1)
+ public static func ==(lhs: MqttClientProxyMessage.OneOf_PayloadVariant, rhs: MqttClientProxyMessage.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.data, .data): return {
+ guard case .data(let l) = lhs, case .data(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.text, .text): return {
+ guard case .text(let l) = lhs, case .text(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
public init() {}
@@ -1473,7 +1665,7 @@ public struct MqttClientProxyMessage: @unchecked Sendable {
/// A packet envelope sent/received over the mesh
/// only payload_variant is sent in the payload portion of the LORA packet.
/// The other fields are either not sent at all, or sent in the special 16 byte LORA header.
-public struct MeshPacket: @unchecked Sendable {
+public struct MeshPacket {
// 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.
@@ -1607,8 +1799,6 @@ public struct MeshPacket: @unchecked Sendable {
///
/// Describe if this message is delayed
- ///
- /// NOTE: This field was marked as deprecated in the .proto file.
public var delayed: MeshPacket.Delayed {
get {return _storage._delayed}
set {_uniqueStorage()._delayed = newValue}
@@ -1629,9 +1819,23 @@ public struct MeshPacket: @unchecked Sendable {
set {_uniqueStorage()._hopStart = newValue}
}
+ ///
+ /// Records the public key the packet was encrypted with, if applicable.
+ public var publicKey: Data {
+ get {return _storage._publicKey}
+ set {_uniqueStorage()._publicKey = newValue}
+ }
+
+ ///
+ /// Indicates whether the packet was en/decrypted using PKI
+ public var pkiEncrypted: Bool {
+ get {return _storage._pkiEncrypted}
+ set {_uniqueStorage()._pkiEncrypted = newValue}
+ }
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum OneOf_PayloadVariant: Equatable, @unchecked Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// TODO: REPLACE
case decoded(DataMessage)
@@ -1639,6 +1843,24 @@ public struct MeshPacket: @unchecked Sendable {
/// TODO: REPLACE
case encrypted(Data)
+ #if !swift(>=4.1)
+ public static func ==(lhs: MeshPacket.OneOf_PayloadVariant, rhs: MeshPacket.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.decoded, .decoded): return {
+ guard case .decoded(let l) = lhs, case .decoded(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.encrypted, .encrypted): return {
+ guard case .encrypted(let l) = lhs, case .encrypted(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
///
@@ -1660,7 +1882,7 @@ public struct MeshPacket: @unchecked Sendable {
/// So I bit the bullet and implemented a new (internal - not sent over the air)
/// field in MeshPacket called 'priority'.
/// And the transmission queue in the router object is now a priority queue.
- public enum Priority: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Priority: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1725,22 +1947,11 @@ public struct MeshPacket: @unchecked Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [MeshPacket.Priority] = [
- .unset,
- .min,
- .background,
- .default,
- .reliable,
- .ack,
- .max,
- ]
-
}
///
/// Identify if this is a delayed packet
- public enum Delayed: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Delayed: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1778,13 +1989,6 @@ public struct MeshPacket: @unchecked Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [MeshPacket.Delayed] = [
- .noDelay,
- .broadcast,
- .direct,
- ]
-
}
public init() {}
@@ -1792,6 +1996,32 @@ public struct MeshPacket: @unchecked Sendable {
fileprivate var _storage = _StorageClass.defaultInstance
}
+#if swift(>=4.2)
+
+extension MeshPacket.Priority: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [MeshPacket.Priority] = [
+ .unset,
+ .min,
+ .background,
+ .default,
+ .reliable,
+ .ack,
+ .max,
+ ]
+}
+
+extension MeshPacket.Delayed: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [MeshPacket.Delayed] = [
+ .noDelay,
+ .broadcast,
+ .direct,
+ ]
+}
+
+#endif // swift(>=4.2)
+
///
/// The bluetooth to device link:
/// Old BTLE protocol docs from TODO, merge in above and make real docs...
@@ -1809,7 +2039,7 @@ public struct MeshPacket: @unchecked Sendable {
/// level etc) SET_CONFIG (switches device to a new set of radio params and
/// preshared key, drops all existing nodes, force our node to rejoin this new group)
/// Full information about a node on the mesh
-public struct NodeInfo: @unchecked Sendable {
+public struct NodeInfo {
// 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.
@@ -1910,7 +2140,7 @@ public struct NodeInfo: @unchecked Sendable {
/// Unique local debugging info for this node
/// Note: we don't include position or the user info, because that will come in the
/// Sent to the phone in response to WantNodes.
-public struct MyNodeInfo: Sendable {
+public struct MyNodeInfo {
// 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.
@@ -1941,7 +2171,7 @@ public struct MyNodeInfo: Sendable {
/// on the message it is assumed to be a continuation of the previously sent message.
/// This allows the device code to use fixed maxlen 64 byte strings for messages,
/// and then extend as needed by emitting multiple records.
-public struct LogRecord: Sendable {
+public struct LogRecord {
// 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.
@@ -1966,7 +2196,7 @@ public struct LogRecord: Sendable {
///
/// Log levels, chosen to match python logging conventions.
- public enum Level: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Level: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -2028,23 +2258,29 @@ public struct LogRecord: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [LogRecord.Level] = [
- .unset,
- .critical,
- .error,
- .warning,
- .info,
- .debug,
- .trace,
- ]
-
}
public init() {}
}
-public struct QueueStatus: Sendable {
+#if swift(>=4.2)
+
+extension LogRecord.Level: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [LogRecord.Level] = [
+ .unset,
+ .critical,
+ .error,
+ .warning,
+ .info,
+ .debug,
+ .trace,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+public struct QueueStatus {
// 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.
@@ -2071,7 +2307,7 @@ public struct QueueStatus: Sendable {
/// It will support READ and NOTIFY. When a new packet arrives the device will BLE notify?
/// It will sit in that descriptor until consumed by the phone,
/// at which point the next item in the FIFO will be populated.
-public struct FromRadio: Sendable {
+public struct FromRadio {
// 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.
@@ -2233,11 +2469,21 @@ public struct FromRadio: Sendable {
set {payloadVariant = .fileInfo(newValue)}
}
+ ///
+ /// Notification message to the client
+ public var clientNotification: ClientNotification {
+ get {
+ if case .clientNotification(let v)? = payloadVariant {return v}
+ return ClientNotification()
+ }
+ set {payloadVariant = .clientNotification(newValue)}
+ }
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
///
/// Log levels, chosen to match python logging conventions.
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// Log levels, chosen to match python logging conventions.
case packet(MeshPacket)
@@ -2288,15 +2534,128 @@ public struct FromRadio: Sendable {
///
/// File system manifest messages
case fileInfo(FileInfo)
+ ///
+ /// Notification message to the client
+ case clientNotification(ClientNotification)
+ #if !swift(>=4.1)
+ public static func ==(lhs: FromRadio.OneOf_PayloadVariant, rhs: FromRadio.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.packet, .packet): return {
+ guard case .packet(let l) = lhs, case .packet(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.myInfo, .myInfo): return {
+ guard case .myInfo(let l) = lhs, case .myInfo(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.nodeInfo, .nodeInfo): return {
+ guard case .nodeInfo(let l) = lhs, case .nodeInfo(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.config, .config): return {
+ guard case .config(let l) = lhs, case .config(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.logRecord, .logRecord): return {
+ guard case .logRecord(let l) = lhs, case .logRecord(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.configCompleteID, .configCompleteID): return {
+ guard case .configCompleteID(let l) = lhs, case .configCompleteID(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.rebooted, .rebooted): return {
+ guard case .rebooted(let l) = lhs, case .rebooted(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.moduleConfig, .moduleConfig): return {
+ guard case .moduleConfig(let l) = lhs, case .moduleConfig(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.channel, .channel): return {
+ guard case .channel(let l) = lhs, case .channel(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.queueStatus, .queueStatus): return {
+ guard case .queueStatus(let l) = lhs, case .queueStatus(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.xmodemPacket, .xmodemPacket): return {
+ guard case .xmodemPacket(let l) = lhs, case .xmodemPacket(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.metadata, .metadata): return {
+ guard case .metadata(let l) = lhs, case .metadata(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.mqttClientProxyMessage, .mqttClientProxyMessage): return {
+ guard case .mqttClientProxyMessage(let l) = lhs, case .mqttClientProxyMessage(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.fileInfo, .fileInfo): return {
+ guard case .fileInfo(let l) = lhs, case .fileInfo(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.clientNotification, .clientNotification): return {
+ guard case .clientNotification(let l) = lhs, case .clientNotification(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
public init() {}
}
+///
+/// A notification message from the device to the client
+/// To be used for important messages that should to be displayed to the user
+/// in the form of push notifications or validation messages when saving
+/// invalid configuration.
+public struct ClientNotification {
+ // 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.
+
+ ///
+ /// The id of the packet we're notifying in response to
+ public var replyID: UInt32 {
+ get {return _replyID ?? 0}
+ set {_replyID = newValue}
+ }
+ /// Returns true if `replyID` has been explicitly set.
+ public var hasReplyID: Bool {return self._replyID != nil}
+ /// Clears the value of `replyID`. Subsequent reads from it will return its default value.
+ public mutating func clearReplyID() {self._replyID = nil}
+
+ ///
+ /// Seconds since 1970 - or 0 for unknown/unset
+ public var time: UInt32 = 0
+
+ ///
+ /// The level type of notification
+ public var level: LogRecord.Level = .unset
+
+ ///
+ /// The message body of the notification
+ public var message: String = String()
+
+ public var unknownFields = SwiftProtobuf.UnknownStorage()
+
+ public init() {}
+
+ fileprivate var _replyID: UInt32? = nil
+}
+
///
/// Individual File info for the device
-public struct FileInfo: Sendable {
+public struct FileInfo {
// 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.
@@ -2317,7 +2676,7 @@ public struct FileInfo: Sendable {
///
/// Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
/// Once the write completes the phone can assume it is handled.
-public struct ToRadio: Sendable {
+public struct ToRadio {
// 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.
@@ -2397,7 +2756,7 @@ public struct ToRadio: Sendable {
///
/// Log levels, chosen to match python logging conventions.
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// Send this packet on the mesh
case packet(MeshPacket)
@@ -2424,6 +2783,40 @@ public struct ToRadio: Sendable {
/// Heartbeat message (used to keep the device connection awake on serial)
case heartbeat(Heartbeat)
+ #if !swift(>=4.1)
+ public static func ==(lhs: ToRadio.OneOf_PayloadVariant, rhs: ToRadio.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.packet, .packet): return {
+ guard case .packet(let l) = lhs, case .packet(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.wantConfigID, .wantConfigID): return {
+ guard case .wantConfigID(let l) = lhs, case .wantConfigID(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.disconnect, .disconnect): return {
+ guard case .disconnect(let l) = lhs, case .disconnect(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.xmodemPacket, .xmodemPacket): return {
+ guard case .xmodemPacket(let l) = lhs, case .xmodemPacket(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.mqttClientProxyMessage, .mqttClientProxyMessage): return {
+ guard case .mqttClientProxyMessage(let l) = lhs, case .mqttClientProxyMessage(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.heartbeat, .heartbeat): return {
+ guard case .heartbeat(let l) = lhs, case .heartbeat(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
public init() {}
@@ -2431,7 +2824,7 @@ public struct ToRadio: Sendable {
///
/// Compressed message payload
-public struct Compressed: @unchecked Sendable {
+public struct Compressed {
// 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.
@@ -2451,7 +2844,7 @@ public struct Compressed: @unchecked Sendable {
///
/// Full info on edges for a single node
-public struct NeighborInfo: Sendable {
+public struct NeighborInfo {
// 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.
@@ -2479,7 +2872,7 @@ public struct NeighborInfo: Sendable {
///
/// A single edge in the mesh
-public struct Neighbor: Sendable {
+public struct Neighbor {
// 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.
@@ -2509,7 +2902,7 @@ public struct Neighbor: Sendable {
///
/// Device metadata response
-public struct DeviceMetadata: Sendable {
+public struct DeviceMetadata {
// 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.
@@ -2562,7 +2955,7 @@ public struct DeviceMetadata: Sendable {
///
/// A heartbeat message is sent to the node from the client to keep the connection alive.
/// This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI.
-public struct Heartbeat: Sendable {
+public struct Heartbeat {
// 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.
@@ -2574,7 +2967,7 @@ public struct Heartbeat: Sendable {
///
/// RemoteHardwarePins associated with a node
-public struct NodeRemoteHardwarePin: Sendable {
+public struct NodeRemoteHardwarePin {
// 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.
@@ -2601,7 +2994,7 @@ public struct NodeRemoteHardwarePin: Sendable {
fileprivate var _pin: RemoteHardwarePin? = nil
}
-public struct ChunkedPayload: @unchecked Sendable {
+public struct ChunkedPayload {
// 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.
@@ -2629,7 +3022,7 @@ public struct ChunkedPayload: @unchecked Sendable {
///
/// Wrapper message for broken repeated oneof support
-public struct resend_chunks: Sendable {
+public struct resend_chunks {
// 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.
@@ -2643,7 +3036,7 @@ public struct resend_chunks: Sendable {
///
/// Responses to a ChunkedPayload request
-public struct ChunkedPayloadResponse: Sendable {
+public struct ChunkedPayloadResponse {
// 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.
@@ -2686,7 +3079,7 @@ public struct ChunkedPayloadResponse: Sendable {
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// Request to transfer chunked payload
case requestTransfer(Bool)
@@ -2697,11 +3090,76 @@ public struct ChunkedPayloadResponse: Sendable {
/// Request missing indexes in the chunked payload
case resendChunks(resend_chunks)
+ #if !swift(>=4.1)
+ public static func ==(lhs: ChunkedPayloadResponse.OneOf_PayloadVariant, rhs: ChunkedPayloadResponse.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.requestTransfer, .requestTransfer): return {
+ guard case .requestTransfer(let l) = lhs, case .requestTransfer(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.acceptTransfer, .acceptTransfer): return {
+ guard case .acceptTransfer(let l) = lhs, case .acceptTransfer(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.resendChunks, .resendChunks): return {
+ guard case .resendChunks(let l) = lhs, case .resendChunks(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension HardwareModel: @unchecked Sendable {}
+extension Constants: @unchecked Sendable {}
+extension CriticalErrorCode: @unchecked Sendable {}
+extension Position: @unchecked Sendable {}
+extension Position.LocSource: @unchecked Sendable {}
+extension Position.AltSource: @unchecked Sendable {}
+extension User: @unchecked Sendable {}
+extension RouteDiscovery: @unchecked Sendable {}
+extension Routing: @unchecked Sendable {}
+extension Routing.OneOf_Variant: @unchecked Sendable {}
+extension Routing.Error: @unchecked Sendable {}
+extension DataMessage: @unchecked Sendable {}
+extension Waypoint: @unchecked Sendable {}
+extension MqttClientProxyMessage: @unchecked Sendable {}
+extension MqttClientProxyMessage.OneOf_PayloadVariant: @unchecked Sendable {}
+extension MeshPacket: @unchecked Sendable {}
+extension MeshPacket.OneOf_PayloadVariant: @unchecked Sendable {}
+extension MeshPacket.Priority: @unchecked Sendable {}
+extension MeshPacket.Delayed: @unchecked Sendable {}
+extension NodeInfo: @unchecked Sendable {}
+extension MyNodeInfo: @unchecked Sendable {}
+extension LogRecord: @unchecked Sendable {}
+extension LogRecord.Level: @unchecked Sendable {}
+extension QueueStatus: @unchecked Sendable {}
+extension FromRadio: @unchecked Sendable {}
+extension FromRadio.OneOf_PayloadVariant: @unchecked Sendable {}
+extension ClientNotification: @unchecked Sendable {}
+extension FileInfo: @unchecked Sendable {}
+extension ToRadio: @unchecked Sendable {}
+extension ToRadio.OneOf_PayloadVariant: @unchecked Sendable {}
+extension Compressed: @unchecked Sendable {}
+extension NeighborInfo: @unchecked Sendable {}
+extension Neighbor: @unchecked Sendable {}
+extension DeviceMetadata: @unchecked Sendable {}
+extension Heartbeat: @unchecked Sendable {}
+extension NodeRemoteHardwarePin: @unchecked Sendable {}
+extension ChunkedPayload: @unchecked Sendable {}
+extension resend_chunks: @unchecked Sendable {}
+extension ChunkedPayloadResponse: @unchecked Sendable {}
+extension ChunkedPayloadResponse.OneOf_PayloadVariant: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -2779,6 +3237,10 @@ extension HardwareModel: SwiftProtobuf._ProtoNameProviding {
69: .same(proto: "HELTEC_MESH_NODE_T114"),
70: .same(proto: "SENSECAP_INDICATOR"),
71: .same(proto: "TRACKER_T1000_E"),
+ 72: .same(proto: "RAK3172"),
+ 73: .same(proto: "WIO_E5"),
+ 74: .same(proto: "RADIOMASTER_900_BANDIT"),
+ 75: .same(proto: "ME25LS01_4Y10TD"),
255: .same(proto: "PRIVATE_HW"),
]
}
@@ -2804,6 +3266,8 @@ extension CriticalErrorCode: SwiftProtobuf._ProtoNameProviding {
9: .same(proto: "BROWNOUT"),
10: .same(proto: "SX1262_FAILURE"),
11: .same(proto: "RADIO_SPI_BUG"),
+ 12: .same(proto: "FLASH_CORRUPTION_RECOVERABLE"),
+ 13: .same(proto: "FLASH_CORRUPTION_UNRECOVERABLE"),
]
}
@@ -2836,22 +3300,22 @@ extension Position: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
]
fileprivate class _StorageClass {
- var _latitudeI: Int32 = 0
- var _longitudeI: Int32 = 0
- var _altitude: Int32 = 0
+ var _latitudeI: Int32? = nil
+ var _longitudeI: Int32? = nil
+ var _altitude: Int32? = nil
var _time: UInt32 = 0
var _locationSource: Position.LocSource = .locUnset
var _altitudeSource: Position.AltSource = .altUnset
var _timestamp: UInt32 = 0
var _timestampMillisAdjust: Int32 = 0
- var _altitudeHae: Int32 = 0
- var _altitudeGeoidalSeparation: Int32 = 0
+ var _altitudeHae: Int32? = nil
+ var _altitudeGeoidalSeparation: Int32? = nil
var _pdop: UInt32 = 0
var _hdop: UInt32 = 0
var _vdop: UInt32 = 0
var _gpsAccuracy: UInt32 = 0
- var _groundSpeed: UInt32 = 0
- var _groundTrack: UInt32 = 0
+ var _groundSpeed: UInt32? = nil
+ var _groundTrack: UInt32? = nil
var _fixQuality: UInt32 = 0
var _fixType: UInt32 = 0
var _satsInView: UInt32 = 0
@@ -2945,15 +3409,19 @@ extension Position: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
public func traverse(visitor: inout V) throws {
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
- if _storage._latitudeI != 0 {
- try visitor.visitSingularSFixed32Field(value: _storage._latitudeI, fieldNumber: 1)
- }
- if _storage._longitudeI != 0 {
- try visitor.visitSingularSFixed32Field(value: _storage._longitudeI, fieldNumber: 2)
- }
- if _storage._altitude != 0 {
- try visitor.visitSingularInt32Field(value: _storage._altitude, fieldNumber: 3)
- }
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
+ try { if let v = _storage._latitudeI {
+ try visitor.visitSingularSFixed32Field(value: v, fieldNumber: 1)
+ } }()
+ try { if let v = _storage._longitudeI {
+ try visitor.visitSingularSFixed32Field(value: v, fieldNumber: 2)
+ } }()
+ try { if let v = _storage._altitude {
+ try visitor.visitSingularInt32Field(value: v, fieldNumber: 3)
+ } }()
if _storage._time != 0 {
try visitor.visitSingularFixed32Field(value: _storage._time, fieldNumber: 4)
}
@@ -2969,12 +3437,12 @@ extension Position: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
if _storage._timestampMillisAdjust != 0 {
try visitor.visitSingularInt32Field(value: _storage._timestampMillisAdjust, fieldNumber: 8)
}
- if _storage._altitudeHae != 0 {
- try visitor.visitSingularSInt32Field(value: _storage._altitudeHae, fieldNumber: 9)
- }
- if _storage._altitudeGeoidalSeparation != 0 {
- try visitor.visitSingularSInt32Field(value: _storage._altitudeGeoidalSeparation, fieldNumber: 10)
- }
+ try { if let v = _storage._altitudeHae {
+ try visitor.visitSingularSInt32Field(value: v, fieldNumber: 9)
+ } }()
+ try { if let v = _storage._altitudeGeoidalSeparation {
+ try visitor.visitSingularSInt32Field(value: v, fieldNumber: 10)
+ } }()
if _storage._pdop != 0 {
try visitor.visitSingularUInt32Field(value: _storage._pdop, fieldNumber: 11)
}
@@ -2987,12 +3455,12 @@ extension Position: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
if _storage._gpsAccuracy != 0 {
try visitor.visitSingularUInt32Field(value: _storage._gpsAccuracy, fieldNumber: 14)
}
- if _storage._groundSpeed != 0 {
- try visitor.visitSingularUInt32Field(value: _storage._groundSpeed, fieldNumber: 15)
- }
- if _storage._groundTrack != 0 {
- try visitor.visitSingularUInt32Field(value: _storage._groundTrack, fieldNumber: 16)
- }
+ try { if let v = _storage._groundSpeed {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 15)
+ } }()
+ try { if let v = _storage._groundTrack {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 16)
+ } }()
if _storage._fixQuality != 0 {
try visitor.visitSingularUInt32Field(value: _storage._fixQuality, fieldNumber: 17)
}
@@ -3084,6 +3552,7 @@ extension User: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase,
5: .standard(proto: "hw_model"),
6: .standard(proto: "is_licensed"),
7: .same(proto: "role"),
+ 8: .standard(proto: "public_key"),
]
public mutating func decodeMessage(decoder: inout D) throws {
@@ -3099,6 +3568,7 @@ extension User: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase,
case 5: try { try decoder.decodeSingularEnumField(value: &self.hwModel) }()
case 6: try { try decoder.decodeSingularBoolField(value: &self.isLicensed) }()
case 7: try { try decoder.decodeSingularEnumField(value: &self.role) }()
+ case 8: try { try decoder.decodeSingularBytesField(value: &self.publicKey) }()
default: break
}
}
@@ -3126,6 +3596,9 @@ extension User: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase,
if self.role != .client {
try visitor.visitSingularEnumField(value: self.role, fieldNumber: 7)
}
+ if !self.publicKey.isEmpty {
+ try visitor.visitSingularBytesField(value: self.publicKey, fieldNumber: 8)
+ }
try unknownFields.traverse(visitor: &visitor)
}
@@ -3137,6 +3610,7 @@ extension User: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase,
if lhs.hwModel != rhs.hwModel {return false}
if lhs.isLicensed != rhs.isLicensed {return false}
if lhs.role != rhs.role {return false}
+ if lhs.publicKey != rhs.publicKey {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@@ -3146,6 +3620,9 @@ extension RouteDiscovery: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
public static let protoMessageName: String = _protobuf_package + ".RouteDiscovery"
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1: .same(proto: "route"),
+ 2: .standard(proto: "snr_towards"),
+ 3: .standard(proto: "route_back"),
+ 4: .standard(proto: "snr_back"),
]
public mutating func decodeMessage(decoder: inout D) throws {
@@ -3155,6 +3632,9 @@ extension RouteDiscovery: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
case 1: try { try decoder.decodeRepeatedFixed32Field(value: &self.route) }()
+ case 2: try { try decoder.decodeRepeatedInt32Field(value: &self.snrTowards) }()
+ case 3: try { try decoder.decodeRepeatedFixed32Field(value: &self.routeBack) }()
+ case 4: try { try decoder.decodeRepeatedInt32Field(value: &self.snrBack) }()
default: break
}
}
@@ -3164,11 +3644,23 @@ extension RouteDiscovery: SwiftProtobuf.Message, SwiftProtobuf._MessageImplement
if !self.route.isEmpty {
try visitor.visitPackedFixed32Field(value: self.route, fieldNumber: 1)
}
+ if !self.snrTowards.isEmpty {
+ try visitor.visitPackedInt32Field(value: self.snrTowards, fieldNumber: 2)
+ }
+ if !self.routeBack.isEmpty {
+ try visitor.visitPackedFixed32Field(value: self.routeBack, fieldNumber: 3)
+ }
+ if !self.snrBack.isEmpty {
+ try visitor.visitPackedInt32Field(value: self.snrBack, fieldNumber: 4)
+ }
try unknownFields.traverse(visitor: &visitor)
}
public static func ==(lhs: RouteDiscovery, rhs: RouteDiscovery) -> Bool {
if lhs.route != rhs.route {return false}
+ if lhs.snrTowards != rhs.snrTowards {return false}
+ if lhs.routeBack != rhs.routeBack {return false}
+ if lhs.snrBack != rhs.snrBack {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@@ -3271,6 +3763,8 @@ extension Routing.Error: SwiftProtobuf._ProtoNameProviding {
9: .same(proto: "DUTY_CYCLE_LIMIT"),
32: .same(proto: "BAD_REQUEST"),
33: .same(proto: "NOT_AUTHORIZED"),
+ 34: .same(proto: "PKI_FAILED"),
+ 35: .same(proto: "PKI_UNKNOWN_PUBKEY"),
]
}
@@ -3368,8 +3862,8 @@ extension Waypoint: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
case 1: try { try decoder.decodeSingularUInt32Field(value: &self.id) }()
- case 2: try { try decoder.decodeSingularSFixed32Field(value: &self.latitudeI) }()
- case 3: try { try decoder.decodeSingularSFixed32Field(value: &self.longitudeI) }()
+ case 2: try { try decoder.decodeSingularSFixed32Field(value: &self._latitudeI) }()
+ case 3: try { try decoder.decodeSingularSFixed32Field(value: &self._longitudeI) }()
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.expire) }()
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.lockedTo) }()
case 6: try { try decoder.decodeSingularStringField(value: &self.name) }()
@@ -3381,15 +3875,19 @@ extension Waypoint: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
}
public func traverse(visitor: inout V) throws {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
if self.id != 0 {
try visitor.visitSingularUInt32Field(value: self.id, fieldNumber: 1)
}
- if self.latitudeI != 0 {
- try visitor.visitSingularSFixed32Field(value: self.latitudeI, fieldNumber: 2)
- }
- if self.longitudeI != 0 {
- try visitor.visitSingularSFixed32Field(value: self.longitudeI, fieldNumber: 3)
- }
+ try { if let v = self._latitudeI {
+ try visitor.visitSingularSFixed32Field(value: v, fieldNumber: 2)
+ } }()
+ try { if let v = self._longitudeI {
+ try visitor.visitSingularSFixed32Field(value: v, fieldNumber: 3)
+ } }()
if self.expire != 0 {
try visitor.visitSingularUInt32Field(value: self.expire, fieldNumber: 4)
}
@@ -3410,8 +3908,8 @@ extension Waypoint: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
public static func ==(lhs: Waypoint, rhs: Waypoint) -> Bool {
if lhs.id != rhs.id {return false}
- if lhs.latitudeI != rhs.latitudeI {return false}
- if lhs.longitudeI != rhs.longitudeI {return false}
+ if lhs._latitudeI != rhs._latitudeI {return false}
+ if lhs._longitudeI != rhs._longitudeI {return false}
if lhs.expire != rhs.expire {return false}
if lhs.lockedTo != rhs.lockedTo {return false}
if lhs.name != rhs.name {return false}
@@ -3512,6 +4010,8 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
13: .same(proto: "delayed"),
14: .standard(proto: "via_mqtt"),
15: .standard(proto: "hop_start"),
+ 16: .standard(proto: "public_key"),
+ 17: .standard(proto: "pki_encrypted"),
]
fileprivate class _StorageClass {
@@ -3529,6 +4029,8 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
var _delayed: MeshPacket.Delayed = .noDelay
var _viaMqtt: Bool = false
var _hopStart: UInt32 = 0
+ var _publicKey: Data = Data()
+ var _pkiEncrypted: Bool = false
#if swift(>=5.10)
// This property is used as the initial default value for new instances of the type.
@@ -3557,6 +4059,8 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
_delayed = source._delayed
_viaMqtt = source._viaMqtt
_hopStart = source._hopStart
+ _publicKey = source._publicKey
+ _pkiEncrypted = source._pkiEncrypted
}
}
@@ -3609,6 +4113,8 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
case 13: try { try decoder.decodeSingularEnumField(value: &_storage._delayed) }()
case 14: try { try decoder.decodeSingularBoolField(value: &_storage._viaMqtt) }()
case 15: try { try decoder.decodeSingularUInt32Field(value: &_storage._hopStart) }()
+ case 16: try { try decoder.decodeSingularBytesField(value: &_storage._publicKey) }()
+ case 17: try { try decoder.decodeSingularBoolField(value: &_storage._pkiEncrypted) }()
default: break
}
}
@@ -3647,7 +4153,7 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
if _storage._rxTime != 0 {
try visitor.visitSingularFixed32Field(value: _storage._rxTime, fieldNumber: 7)
}
- if _storage._rxSnr.bitPattern != 0 {
+ if _storage._rxSnr != 0 {
try visitor.visitSingularFloatField(value: _storage._rxSnr, fieldNumber: 8)
}
if _storage._hopLimit != 0 {
@@ -3671,6 +4177,12 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
if _storage._hopStart != 0 {
try visitor.visitSingularUInt32Field(value: _storage._hopStart, fieldNumber: 15)
}
+ if !_storage._publicKey.isEmpty {
+ try visitor.visitSingularBytesField(value: _storage._publicKey, fieldNumber: 16)
+ }
+ if _storage._pkiEncrypted != false {
+ try visitor.visitSingularBoolField(value: _storage._pkiEncrypted, fieldNumber: 17)
+ }
}
try unknownFields.traverse(visitor: &visitor)
}
@@ -3694,6 +4206,8 @@ extension MeshPacket: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementatio
if _storage._delayed != rhs_storage._delayed {return false}
if _storage._viaMqtt != rhs_storage._viaMqtt {return false}
if _storage._hopStart != rhs_storage._hopStart {return false}
+ if _storage._publicKey != rhs_storage._publicKey {return false}
+ if _storage._pkiEncrypted != rhs_storage._pkiEncrypted {return false}
return true
}
if !storagesAreEqual {return false}
@@ -3822,7 +4336,7 @@ extension NodeInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
try { if let v = _storage._position {
try visitor.visitSingularMessageField(value: v, fieldNumber: 3)
} }()
- if _storage._snr.bitPattern != 0 {
+ if _storage._snr != 0 {
try visitor.visitSingularFloatField(value: _storage._snr, fieldNumber: 4)
}
if _storage._lastHeard != 0 {
@@ -4045,6 +4559,7 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
13: .same(proto: "metadata"),
14: .same(proto: "mqttClientProxyMessage"),
15: .same(proto: "fileInfo"),
+ 16: .same(proto: "clientNotification"),
]
public mutating func decodeMessage(decoder: inout D) throws {
@@ -4226,6 +4741,19 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
self.payloadVariant = .fileInfo(v)
}
}()
+ case 16: try {
+ var v: ClientNotification?
+ var hadOneofValue = false
+ if let current = self.payloadVariant {
+ hadOneofValue = true
+ if case .clientNotification(let m) = current {v = m}
+ }
+ try decoder.decodeSingularMessageField(value: &v)
+ if let v = v {
+ if hadOneofValue {try decoder.handleConflictingOneOf()}
+ self.payloadVariant = .clientNotification(v)
+ }
+ }()
default: break
}
}
@@ -4296,6 +4824,10 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
guard case .fileInfo(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 15)
}()
+ case .clientNotification?: try {
+ guard case .clientNotification(let v)? = self.payloadVariant else { preconditionFailure() }
+ try visitor.visitSingularMessageField(value: v, fieldNumber: 16)
+ }()
case nil: break
}
try unknownFields.traverse(visitor: &visitor)
@@ -4309,6 +4841,60 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
}
}
+extension ClientNotification: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+ public static let protoMessageName: String = _protobuf_package + ".ClientNotification"
+ public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+ 1: .standard(proto: "reply_id"),
+ 2: .same(proto: "time"),
+ 3: .same(proto: "level"),
+ 4: .same(proto: "message"),
+ ]
+
+ public mutating func decodeMessage(decoder: inout D) throws {
+ while let fieldNumber = try decoder.nextFieldNumber() {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch fieldNumber {
+ case 1: try { try decoder.decodeSingularUInt32Field(value: &self._replyID) }()
+ case 2: try { try decoder.decodeSingularFixed32Field(value: &self.time) }()
+ case 3: try { try decoder.decodeSingularEnumField(value: &self.level) }()
+ case 4: try { try decoder.decodeSingularStringField(value: &self.message) }()
+ default: break
+ }
+ }
+ }
+
+ public func traverse(visitor: inout V) throws {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
+ try { if let v = self._replyID {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 1)
+ } }()
+ if self.time != 0 {
+ try visitor.visitSingularFixed32Field(value: self.time, fieldNumber: 2)
+ }
+ if self.level != .unset {
+ try visitor.visitSingularEnumField(value: self.level, fieldNumber: 3)
+ }
+ if !self.message.isEmpty {
+ try visitor.visitSingularStringField(value: self.message, fieldNumber: 4)
+ }
+ try unknownFields.traverse(visitor: &visitor)
+ }
+
+ public static func ==(lhs: ClientNotification, rhs: ClientNotification) -> Bool {
+ if lhs._replyID != rhs._replyID {return false}
+ if lhs.time != rhs.time {return false}
+ if lhs.level != rhs.level {return false}
+ if lhs.message != rhs.message {return false}
+ if lhs.unknownFields != rhs.unknownFields {return false}
+ return true
+ }
+}
+
extension FileInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
public static let protoMessageName: String = _protobuf_package + ".FileInfo"
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
@@ -4595,7 +5181,7 @@ extension Neighbor: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
if self.nodeID != 0 {
try visitor.visitSingularUInt32Field(value: self.nodeID, fieldNumber: 1)
}
- if self.snr.bitPattern != 0 {
+ if self.snr != 0 {
try visitor.visitSingularFloatField(value: self.snr, fieldNumber: 2)
}
if self.lastRxTime != 0 {
@@ -4708,8 +5294,8 @@ extension Heartbeat: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
public static let _protobuf_nameMap = SwiftProtobuf._NameMap()
public mutating func decodeMessage(decoder: inout D) throws {
- // Load everything into unknown fields
- while try decoder.nextFieldNumber() != nil {}
+ while let _ = try decoder.nextFieldNumber() {
+ }
}
public func traverse(visitor: inout V) throws {
diff --git a/MeshtasticProtobufs/Sources/meshtastic/module_config.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/module_config.pb.swift
index 6f3b2d76..3186c349 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/module_config.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/module_config.pb.swift
@@ -20,7 +20,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
typealias Version = _2
}
-public enum RemoteHardwarePinType: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum RemoteHardwarePinType: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -58,18 +58,24 @@ public enum RemoteHardwarePinType: SwiftProtobuf.Enum, Swift.CaseIterable {
}
}
+}
+
+#if swift(>=4.2)
+
+extension RemoteHardwarePinType: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [RemoteHardwarePinType] = [
.unknown,
.digitalRead,
.digitalWrite,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Module Config
-public struct ModuleConfig: Sendable {
+public struct ModuleConfig {
// 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.
@@ -212,7 +218,7 @@ public struct ModuleConfig: Sendable {
///
/// TODO: REPLACE
- public enum OneOf_PayloadVariant: Equatable, Sendable {
+ public enum OneOf_PayloadVariant: Equatable {
///
/// TODO: REPLACE
case mqtt(ModuleConfig.MQTTConfig)
@@ -253,11 +259,73 @@ public struct ModuleConfig: Sendable {
/// TODO: REPLACE
case paxcounter(ModuleConfig.PaxcounterConfig)
+ #if !swift(>=4.1)
+ public static func ==(lhs: ModuleConfig.OneOf_PayloadVariant, rhs: ModuleConfig.OneOf_PayloadVariant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.mqtt, .mqtt): return {
+ guard case .mqtt(let l) = lhs, case .mqtt(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.serial, .serial): return {
+ guard case .serial(let l) = lhs, case .serial(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.externalNotification, .externalNotification): return {
+ guard case .externalNotification(let l) = lhs, case .externalNotification(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.storeForward, .storeForward): return {
+ guard case .storeForward(let l) = lhs, case .storeForward(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.rangeTest, .rangeTest): return {
+ guard case .rangeTest(let l) = lhs, case .rangeTest(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.telemetry, .telemetry): return {
+ guard case .telemetry(let l) = lhs, case .telemetry(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.cannedMessage, .cannedMessage): return {
+ guard case .cannedMessage(let l) = lhs, case .cannedMessage(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.audio, .audio): return {
+ guard case .audio(let l) = lhs, case .audio(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.remoteHardware, .remoteHardware): return {
+ guard case .remoteHardware(let l) = lhs, case .remoteHardware(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.neighborInfo, .neighborInfo): return {
+ guard case .neighborInfo(let l) = lhs, case .neighborInfo(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.ambientLighting, .ambientLighting): return {
+ guard case .ambientLighting(let l) = lhs, case .ambientLighting(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.detectionSensor, .detectionSensor): return {
+ guard case .detectionSensor(let l) = lhs, case .detectionSensor(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.paxcounter, .paxcounter): return {
+ guard case .paxcounter(let l) = lhs, case .paxcounter(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
///
/// MQTT Client Config
- public struct MQTTConfig: Sendable {
+ public struct MQTTConfig {
// 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.
@@ -332,7 +400,7 @@ public struct ModuleConfig: Sendable {
///
/// Settings for reporting unencrypted information about our node to a map via MQTT
- public struct MapReportSettings: Sendable {
+ public struct MapReportSettings {
// 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.
@@ -352,7 +420,7 @@ public struct ModuleConfig: Sendable {
///
/// RemoteHardwareModule Config
- public struct RemoteHardwareConfig: Sendable {
+ public struct RemoteHardwareConfig {
// 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.
@@ -376,7 +444,7 @@ public struct ModuleConfig: Sendable {
///
/// NeighborInfoModule Config
- public struct NeighborInfoConfig: Sendable {
+ public struct NeighborInfoConfig {
// 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.
@@ -397,7 +465,7 @@ public struct ModuleConfig: Sendable {
///
/// Detection Sensor Module Config
- public struct DetectionSensorConfig: Sendable {
+ public struct DetectionSensorConfig {
// 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.
@@ -448,7 +516,7 @@ public struct ModuleConfig: Sendable {
///
/// Audio Config for codec2 voice
- public struct AudioConfig: Sendable {
+ public struct AudioConfig {
// 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.
@@ -485,7 +553,7 @@ public struct ModuleConfig: Sendable {
///
/// Baudrate for codec2 voice
- public enum Audio_Baud: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Audio_Baud: SwiftProtobuf.Enum {
public typealias RawValue = Int
case codec2Default // = 0
case codec23200 // = 1
@@ -532,19 +600,6 @@ public struct ModuleConfig: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [ModuleConfig.AudioConfig.Audio_Baud] = [
- .codec2Default,
- .codec23200,
- .codec22400,
- .codec21600,
- .codec21400,
- .codec21300,
- .codec21200,
- .codec2700,
- .codec2700B,
- ]
-
}
public init() {}
@@ -552,7 +607,7 @@ public struct ModuleConfig: Sendable {
///
/// Config for the Paxcounter Module
- public struct PaxcounterConfig: Sendable {
+ public struct PaxcounterConfig {
// 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.
@@ -578,7 +633,7 @@ public struct ModuleConfig: Sendable {
///
/// Serial Config
- public struct SerialConfig: Sendable {
+ public struct SerialConfig {
// 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.
@@ -621,7 +676,7 @@ public struct ModuleConfig: Sendable {
///
/// TODO: REPLACE
- public enum Serial_Baud: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Serial_Baud: SwiftProtobuf.Enum {
public typealias RawValue = Int
case baudDefault // = 0
case baud110 // = 1
@@ -689,31 +744,11 @@ public struct ModuleConfig: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [ModuleConfig.SerialConfig.Serial_Baud] = [
- .baudDefault,
- .baud110,
- .baud300,
- .baud600,
- .baud1200,
- .baud2400,
- .baud4800,
- .baud9600,
- .baud19200,
- .baud38400,
- .baud57600,
- .baud115200,
- .baud230400,
- .baud460800,
- .baud576000,
- .baud921600,
- ]
-
}
///
/// TODO: REPLACE
- public enum Serial_Mode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Serial_Mode: SwiftProtobuf.Enum {
public typealias RawValue = Int
case `default` // = 0
case simple // = 1
@@ -758,17 +793,6 @@ public struct ModuleConfig: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [ModuleConfig.SerialConfig.Serial_Mode] = [
- .default,
- .simple,
- .proto,
- .textmsg,
- .nmea,
- .caltopo,
- .ws85,
- ]
-
}
public init() {}
@@ -776,7 +800,7 @@ public struct ModuleConfig: Sendable {
///
/// External Notifications Config
- public struct ExternalNotificationConfig: Sendable {
+ public struct ExternalNotificationConfig {
// 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.
@@ -859,7 +883,7 @@ public struct ModuleConfig: Sendable {
///
/// Store and Forward Module Config
- public struct StoreForwardConfig: Sendable {
+ public 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.
@@ -895,7 +919,7 @@ public struct ModuleConfig: Sendable {
///
/// Preferences for the RangeTestModule
- public struct RangeTestConfig: Sendable {
+ public 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.
@@ -920,7 +944,7 @@ public struct ModuleConfig: Sendable {
///
/// Configuration for both device and environment metrics
- public struct TelemetryConfig: Sendable {
+ public struct TelemetryConfig {
// 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.
@@ -977,7 +1001,7 @@ public struct ModuleConfig: Sendable {
///
/// TODO: REPLACE
- public struct CannedMessageConfig: Sendable {
+ public struct CannedMessageConfig {
// 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.
@@ -1020,7 +1044,7 @@ public struct ModuleConfig: Sendable {
///
/// Input event origin accepted by the canned message module.
- /// Can be e.g. "rotEnc1", "upDownEnc1" or keyword "_any"
+ /// Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any"
public var allowInputSource: String = String()
///
@@ -1032,7 +1056,7 @@ public struct ModuleConfig: Sendable {
///
/// TODO: REPLACE
- public enum InputEventChar: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum InputEventChar: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -1100,18 +1124,6 @@ public struct ModuleConfig: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [ModuleConfig.CannedMessageConfig.InputEventChar] = [
- .none,
- .up,
- .down,
- .left,
- .right,
- .select,
- .back,
- .cancel,
- ]
-
}
public init() {}
@@ -1120,7 +1132,7 @@ public struct ModuleConfig: Sendable {
///
///Ambient Lighting Module - Settings for control of onboard LEDs to allow users to adjust the brightness levels and respective color levels.
///Initially created for the RAK14001 RGB LED module.
- public struct AmbientLightingConfig: Sendable {
+ public struct AmbientLightingConfig {
// 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.
@@ -1153,9 +1165,77 @@ public struct ModuleConfig: Sendable {
public init() {}
}
+#if swift(>=4.2)
+
+extension ModuleConfig.AudioConfig.Audio_Baud: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [ModuleConfig.AudioConfig.Audio_Baud] = [
+ .codec2Default,
+ .codec23200,
+ .codec22400,
+ .codec21600,
+ .codec21400,
+ .codec21300,
+ .codec21200,
+ .codec2700,
+ .codec2700B,
+ ]
+}
+
+extension ModuleConfig.SerialConfig.Serial_Baud: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [ModuleConfig.SerialConfig.Serial_Baud] = [
+ .baudDefault,
+ .baud110,
+ .baud300,
+ .baud600,
+ .baud1200,
+ .baud2400,
+ .baud4800,
+ .baud9600,
+ .baud19200,
+ .baud38400,
+ .baud57600,
+ .baud115200,
+ .baud230400,
+ .baud460800,
+ .baud576000,
+ .baud921600,
+ ]
+}
+
+extension ModuleConfig.SerialConfig.Serial_Mode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [ModuleConfig.SerialConfig.Serial_Mode] = [
+ .default,
+ .simple,
+ .proto,
+ .textmsg,
+ .nmea,
+ .caltopo,
+ .ws85,
+ ]
+}
+
+extension ModuleConfig.CannedMessageConfig.InputEventChar: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [ModuleConfig.CannedMessageConfig.InputEventChar] = [
+ .none,
+ .up,
+ .down,
+ .left,
+ .right,
+ .select,
+ .back,
+ .cancel,
+ ]
+}
+
+#endif // swift(>=4.2)
+
///
/// A GPIO pin definition for remote hardware module
-public struct RemoteHardwarePin: Sendable {
+public struct RemoteHardwarePin {
// 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.
@@ -1177,6 +1257,31 @@ public struct RemoteHardwarePin: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension RemoteHardwarePinType: @unchecked Sendable {}
+extension ModuleConfig: @unchecked Sendable {}
+extension ModuleConfig.OneOf_PayloadVariant: @unchecked Sendable {}
+extension ModuleConfig.MQTTConfig: @unchecked Sendable {}
+extension ModuleConfig.MapReportSettings: @unchecked Sendable {}
+extension ModuleConfig.RemoteHardwareConfig: @unchecked Sendable {}
+extension ModuleConfig.NeighborInfoConfig: @unchecked Sendable {}
+extension ModuleConfig.DetectionSensorConfig: @unchecked Sendable {}
+extension ModuleConfig.AudioConfig: @unchecked Sendable {}
+extension ModuleConfig.AudioConfig.Audio_Baud: @unchecked Sendable {}
+extension ModuleConfig.PaxcounterConfig: @unchecked Sendable {}
+extension ModuleConfig.SerialConfig: @unchecked Sendable {}
+extension ModuleConfig.SerialConfig.Serial_Baud: @unchecked Sendable {}
+extension ModuleConfig.SerialConfig.Serial_Mode: @unchecked Sendable {}
+extension ModuleConfig.ExternalNotificationConfig: @unchecked Sendable {}
+extension ModuleConfig.StoreForwardConfig: @unchecked Sendable {}
+extension ModuleConfig.RangeTestConfig: @unchecked Sendable {}
+extension ModuleConfig.TelemetryConfig: @unchecked Sendable {}
+extension ModuleConfig.CannedMessageConfig: @unchecked Sendable {}
+extension ModuleConfig.CannedMessageConfig.InputEventChar: @unchecked Sendable {}
+extension ModuleConfig.AmbientLightingConfig: @unchecked Sendable {}
+extension RemoteHardwarePin: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/mqtt.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/mqtt.pb.swift
index fc5e37a1..efe6cdd5 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/mqtt.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/mqtt.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// This message wraps a MeshPacket with extra metadata about the sender and how it arrived.
-public struct ServiceEnvelope: Sendable {
+public struct ServiceEnvelope {
// 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.
@@ -57,7 +57,7 @@ public struct ServiceEnvelope: Sendable {
///
/// Information about a node intended to be reported unencrypted to a map using MQTT.
-public struct MapReport: Sendable {
+public struct MapReport {
// 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.
@@ -121,6 +121,11 @@ public struct MapReport: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension ServiceEnvelope: @unchecked Sendable {}
+extension MapReport: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/paxcount.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/paxcount.pb.swift
index f82b3c51..cf8aa463 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/paxcount.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/paxcount.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// TODO: REPLACE
-public struct Paxcount: Sendable {
+public struct Paxcount {
// 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.
@@ -44,6 +44,10 @@ public struct Paxcount: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension Paxcount: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/portnums.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/portnums.pb.swift
index c5348a8a..dd7e036f 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/portnums.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/portnums.pb.swift
@@ -33,7 +33,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// Note: This was formerly a Type enum named 'typ' with the same id #
/// We have change to this 'portnum' based scheme for specifying app handlers for particular payloads.
/// This change is backwards compatible by treating the legacy OPAQUE/CLEAR_TEXT values identically.
-public enum PortNum: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum PortNum: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -167,7 +167,7 @@ public enum PortNum: SwiftProtobuf.Enum, Swift.CaseIterable {
///
/// Provides a traceroute functionality to show the route a packet towards
- /// a certain destination would take on the mesh.
+ /// a certain destination would take on the mesh. Contains a RouteDiscovery message as payload.
/// ENCODING: Protobuf
case tracerouteApp // = 70
@@ -277,6 +277,11 @@ public enum PortNum: SwiftProtobuf.Enum, Swift.CaseIterable {
}
}
+}
+
+#if swift(>=4.2)
+
+extension PortNum: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [PortNum] = [
.unknownApp,
@@ -308,9 +313,14 @@ public enum PortNum: SwiftProtobuf.Enum, Swift.CaseIterable {
.atakForwarder,
.max,
]
-
}
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension PortNum: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
extension PortNum: SwiftProtobuf._ProtoNameProviding {
diff --git a/MeshtasticProtobufs/Sources/meshtastic/powermon.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/powermon.pb.swift
index 9c61e6d0..5f51e948 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/powermon.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/powermon.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
///But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us)
-public struct PowerMon: Sendable {
+public struct PowerMon {
// 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.
@@ -31,7 +31,7 @@ public struct PowerMon: Sendable {
/// Any significant power changing event in meshtastic should be tagged with a powermon state transition.
///If you are making new meshtastic features feel free to add new entries at the end of this definition.
- public enum State: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum State: SwiftProtobuf.Enum {
public typealias RawValue = Int
case none // = 0
case cpuDeepSleep // = 1
@@ -104,31 +104,37 @@ public struct PowerMon: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [PowerMon.State] = [
- .none,
- .cpuDeepSleep,
- .cpuLightSleep,
- .vext1On,
- .loraRxon,
- .loraTxon,
- .loraRxactive,
- .btOn,
- .ledOn,
- .screenOn,
- .screenDrawing,
- .wifiOn,
- .gpsActive,
- ]
-
}
public init() {}
}
+#if swift(>=4.2)
+
+extension PowerMon.State: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [PowerMon.State] = [
+ .none,
+ .cpuDeepSleep,
+ .cpuLightSleep,
+ .vext1On,
+ .loraRxon,
+ .loraTxon,
+ .loraRxactive,
+ .btOn,
+ .ledOn,
+ .screenOn,
+ .screenDrawing,
+ .wifiOn,
+ .gpsActive,
+ ]
+}
+
+#endif // swift(>=4.2)
+
///
/// PowerStress testing support via the C++ PowerStress module
-public struct PowerStressMessage: Sendable {
+public struct PowerStressMessage {
// 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.
@@ -145,7 +151,7 @@ public struct PowerStressMessage: Sendable {
/// What operation would we like the UUT to perform.
///note: senders should probably set want_response in their request packets, so that they can know when the state
///machine has started processing their request
- public enum Opcode: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Opcode: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -266,35 +272,48 @@ public struct PowerStressMessage: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [PowerStressMessage.Opcode] = [
- .unset,
- .printInfo,
- .forceQuiet,
- .endQuiet,
- .screenOn,
- .screenOff,
- .cpuIdle,
- .cpuDeepsleep,
- .cpuFullon,
- .ledOn,
- .ledOff,
- .loraOff,
- .loraTx,
- .loraRx,
- .btOff,
- .btOn,
- .wifiOff,
- .wifiOn,
- .gpsOff,
- .gpsOn,
- ]
-
}
public init() {}
}
+#if swift(>=4.2)
+
+extension PowerStressMessage.Opcode: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [PowerStressMessage.Opcode] = [
+ .unset,
+ .printInfo,
+ .forceQuiet,
+ .endQuiet,
+ .screenOn,
+ .screenOff,
+ .cpuIdle,
+ .cpuDeepsleep,
+ .cpuFullon,
+ .ledOn,
+ .ledOff,
+ .loraOff,
+ .loraTx,
+ .loraRx,
+ .btOff,
+ .btOn,
+ .wifiOff,
+ .wifiOn,
+ .gpsOff,
+ .gpsOn,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension PowerMon: @unchecked Sendable {}
+extension PowerMon.State: @unchecked Sendable {}
+extension PowerStressMessage: @unchecked Sendable {}
+extension PowerStressMessage.Opcode: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -304,8 +323,8 @@ extension PowerMon: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationB
public static let _protobuf_nameMap = SwiftProtobuf._NameMap()
public mutating func decodeMessage(decoder: inout D) throws {
- // Load everything into unknown fields
- while try decoder.nextFieldNumber() != nil {}
+ while let _ = try decoder.nextFieldNumber() {
+ }
}
public func traverse(visitor: inout V) throws {
@@ -360,7 +379,7 @@ extension PowerStressMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
if self.cmd != .unset {
try visitor.visitSingularEnumField(value: self.cmd, fieldNumber: 1)
}
- if self.numSeconds.bitPattern != 0 {
+ if self.numSeconds != 0 {
try visitor.visitSingularFloatField(value: self.numSeconds, fieldNumber: 2)
}
try unknownFields.traverse(visitor: &visitor)
diff --git a/MeshtasticProtobufs/Sources/meshtastic/remote_hardware.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/remote_hardware.pb.swift
index 60f64504..ac6eeb26 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/remote_hardware.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/remote_hardware.pb.swift
@@ -30,7 +30,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
/// because no security yet (beyond the channel mechanism).
/// It should be off by default and then protected based on some TBD mechanism
/// (a special channel once multichannel support is included?)
-public struct HardwareMessage: Sendable {
+public struct HardwareMessage {
// 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.
@@ -52,7 +52,7 @@ public struct HardwareMessage: Sendable {
///
/// TODO: REPLACE
- public enum TypeEnum: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum TypeEnum: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -110,21 +110,32 @@ public struct HardwareMessage: Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [HardwareMessage.TypeEnum] = [
- .unset,
- .writeGpios,
- .watchGpios,
- .gpiosChanged,
- .readGpios,
- .readGpiosReply,
- ]
-
}
public init() {}
}
+#if swift(>=4.2)
+
+extension HardwareMessage.TypeEnum: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [HardwareMessage.TypeEnum] = [
+ .unset,
+ .writeGpios,
+ .watchGpios,
+ .gpiosChanged,
+ .readGpios,
+ .readGpiosReply,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension HardwareMessage: @unchecked Sendable {}
+extension HardwareMessage.TypeEnum: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/rtttl.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/rtttl.pb.swift
index c1f3f678..6fdf3208 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/rtttl.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/rtttl.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// Canned message module configuration.
-public struct RTTTLConfig: Sendable {
+public struct RTTTLConfig {
// 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.
@@ -36,6 +36,10 @@ public struct RTTTLConfig: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension RTTTLConfig: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/storeforward.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/storeforward.pb.swift
index 0b67eaf6..54efa77b 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/storeforward.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/storeforward.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// TODO: REPLACE
-public struct StoreAndForward: @unchecked Sendable {
+public struct StoreAndForward {
// 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.
@@ -79,7 +79,7 @@ public struct StoreAndForward: @unchecked Sendable {
///
/// TODO: REPLACE
- public enum OneOf_Variant: Equatable, @unchecked Sendable {
+ public enum OneOf_Variant: Equatable {
///
/// TODO: REPLACE
case stats(StoreAndForward.Statistics)
@@ -93,12 +93,38 @@ public struct StoreAndForward: @unchecked Sendable {
/// Text from history message.
case text(Data)
+ #if !swift(>=4.1)
+ public static func ==(lhs: StoreAndForward.OneOf_Variant, rhs: StoreAndForward.OneOf_Variant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.stats, .stats): return {
+ guard case .stats(let l) = lhs, case .stats(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.history, .history): return {
+ guard case .history(let l) = lhs, case .history(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.heartbeat, .heartbeat): return {
+ guard case .heartbeat(let l) = lhs, case .heartbeat(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.text, .text): return {
+ guard case .text(let l) = lhs, case .text(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
///
/// 001 - 063 = From Router
/// 064 - 127 = From Client
- public enum RequestResponse: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum RequestResponse: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -216,31 +242,11 @@ public struct StoreAndForward: @unchecked Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [StoreAndForward.RequestResponse] = [
- .unset,
- .routerError,
- .routerHeartbeat,
- .routerPing,
- .routerPong,
- .routerBusy,
- .routerHistory,
- .routerStats,
- .routerTextDirect,
- .routerTextBroadcast,
- .clientError,
- .clientHistory,
- .clientStats,
- .clientPing,
- .clientPong,
- .clientAbort,
- ]
-
}
///
/// TODO: REPLACE
- public struct Statistics: Sendable {
+ public struct Statistics {
// 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.
@@ -288,7 +294,7 @@ public struct StoreAndForward: @unchecked Sendable {
///
/// TODO: REPLACE
- public struct History: Sendable {
+ public struct History {
// 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.
@@ -313,7 +319,7 @@ public struct StoreAndForward: @unchecked Sendable {
///
/// TODO: REPLACE
- public struct Heartbeat: Sendable {
+ public struct Heartbeat {
// 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.
@@ -334,6 +340,41 @@ public struct StoreAndForward: @unchecked Sendable {
public init() {}
}
+#if swift(>=4.2)
+
+extension StoreAndForward.RequestResponse: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [StoreAndForward.RequestResponse] = [
+ .unset,
+ .routerError,
+ .routerHeartbeat,
+ .routerPing,
+ .routerPong,
+ .routerBusy,
+ .routerHistory,
+ .routerStats,
+ .routerTextDirect,
+ .routerTextBroadcast,
+ .clientError,
+ .clientHistory,
+ .clientStats,
+ .clientPing,
+ .clientPong,
+ .clientAbort,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension StoreAndForward: @unchecked Sendable {}
+extension StoreAndForward.OneOf_Variant: @unchecked Sendable {}
+extension StoreAndForward.RequestResponse: @unchecked Sendable {}
+extension StoreAndForward.Statistics: @unchecked Sendable {}
+extension StoreAndForward.History: @unchecked Sendable {}
+extension StoreAndForward.Heartbeat: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift
index 7a9b81de..e4b9ee08 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/telemetry.pb.swift
@@ -22,7 +22,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
///
/// Supported I2C Sensors for telemetry in Meshtastic
-public enum TelemetrySensorType: SwiftProtobuf.Enum, Swift.CaseIterable {
+public enum TelemetrySensorType: SwiftProtobuf.Enum {
public typealias RawValue = Int
///
@@ -128,6 +128,18 @@ public enum TelemetrySensorType: SwiftProtobuf.Enum, Swift.CaseIterable {
///
/// NAU7802 Scale Chip or compatible
case nau7802 // = 25
+
+ ///
+ /// BMP3XX High accuracy temperature and pressure
+ case bmp3Xx // = 26
+
+ ///
+ /// ICM-20948 9-Axis digital motion processor
+ case icm20948 // = 27
+
+ ///
+ /// MAX17048 1S lipo battery sensor (voltage, state of charge, time to go)
+ case max17048 // = 28
case UNRECOGNIZED(Int)
public init() {
@@ -162,6 +174,9 @@ public enum TelemetrySensorType: SwiftProtobuf.Enum, Swift.CaseIterable {
case 23: self = .aht10
case 24: self = .dfrobotLark
case 25: self = .nau7802
+ case 26: self = .bmp3Xx
+ case 27: self = .icm20948
+ case 28: self = .max17048
default: self = .UNRECOGNIZED(rawValue)
}
}
@@ -194,10 +209,18 @@ public enum TelemetrySensorType: SwiftProtobuf.Enum, Swift.CaseIterable {
case .aht10: return 23
case .dfrobotLark: return 24
case .nau7802: return 25
+ case .bmp3Xx: return 26
+ case .icm20948: return 27
+ case .max17048: return 28
case .UNRECOGNIZED(let i): return i
}
}
+}
+
+#if swift(>=4.2)
+
+extension TelemetrySensorType: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
public static let allCases: [TelemetrySensorType] = [
.sensorUnset,
@@ -226,45 +249,90 @@ public enum TelemetrySensorType: SwiftProtobuf.Enum, Swift.CaseIterable {
.aht10,
.dfrobotLark,
.nau7802,
+ .bmp3Xx,
+ .icm20948,
+ .max17048,
]
-
}
+#endif // swift(>=4.2)
+
///
/// Key native device metrics such as battery level
-public struct DeviceMetrics: Sendable {
+public struct DeviceMetrics {
// 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.
///
/// 0-100 (>100 means powered)
- public var batteryLevel: UInt32 = 0
+ public var batteryLevel: UInt32 {
+ get {return _batteryLevel ?? 0}
+ set {_batteryLevel = newValue}
+ }
+ /// Returns true if `batteryLevel` has been explicitly set.
+ public var hasBatteryLevel: Bool {return self._batteryLevel != nil}
+ /// Clears the value of `batteryLevel`. Subsequent reads from it will return its default value.
+ public mutating func clearBatteryLevel() {self._batteryLevel = nil}
///
/// Voltage measured
- public var voltage: Float = 0
+ public var voltage: Float {
+ get {return _voltage ?? 0}
+ set {_voltage = newValue}
+ }
+ /// Returns true if `voltage` has been explicitly set.
+ public var hasVoltage: Bool {return self._voltage != nil}
+ /// Clears the value of `voltage`. Subsequent reads from it will return its default value.
+ public mutating func clearVoltage() {self._voltage = nil}
///
/// Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
- public var channelUtilization: Float = 0
+ public var channelUtilization: Float {
+ get {return _channelUtilization ?? 0}
+ set {_channelUtilization = newValue}
+ }
+ /// Returns true if `channelUtilization` has been explicitly set.
+ public var hasChannelUtilization: Bool {return self._channelUtilization != nil}
+ /// Clears the value of `channelUtilization`. Subsequent reads from it will return its default value.
+ public mutating func clearChannelUtilization() {self._channelUtilization = nil}
///
/// Percent of airtime for transmission used within the last hour.
- public var airUtilTx: Float = 0
+ public var airUtilTx: Float {
+ get {return _airUtilTx ?? 0}
+ set {_airUtilTx = newValue}
+ }
+ /// Returns true if `airUtilTx` has been explicitly set.
+ public var hasAirUtilTx: Bool {return self._airUtilTx != nil}
+ /// Clears the value of `airUtilTx`. Subsequent reads from it will return its default value.
+ public mutating func clearAirUtilTx() {self._airUtilTx = nil}
///
/// How long the device has been running since the last reboot (in seconds)
- public var uptimeSeconds: UInt32 = 0
+ public var uptimeSeconds: UInt32 {
+ get {return _uptimeSeconds ?? 0}
+ set {_uptimeSeconds = newValue}
+ }
+ /// Returns true if `uptimeSeconds` has been explicitly set.
+ public var hasUptimeSeconds: Bool {return self._uptimeSeconds != nil}
+ /// Clears the value of `uptimeSeconds`. Subsequent reads from it will return its default value.
+ public mutating func clearUptimeSeconds() {self._uptimeSeconds = nil}
public var unknownFields = SwiftProtobuf.UnknownStorage()
public init() {}
+
+ fileprivate var _batteryLevel: UInt32? = nil
+ fileprivate var _voltage: Float? = nil
+ fileprivate var _channelUtilization: Float? = nil
+ fileprivate var _airUtilTx: Float? = nil
+ fileprivate var _uptimeSeconds: UInt32? = nil
}
///
/// Weather station or other environmental metrics
-public struct EnvironmentMetrics: @unchecked Sendable {
+public struct EnvironmentMetrics {
// 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.
@@ -272,123 +340,191 @@ public struct EnvironmentMetrics: @unchecked Sendable {
///
/// Temperature measured
public var temperature: Float {
- get {return _storage._temperature}
+ get {return _storage._temperature ?? 0}
set {_uniqueStorage()._temperature = newValue}
}
+ /// Returns true if `temperature` has been explicitly set.
+ public var hasTemperature: Bool {return _storage._temperature != nil}
+ /// Clears the value of `temperature`. Subsequent reads from it will return its default value.
+ public mutating func clearTemperature() {_uniqueStorage()._temperature = nil}
///
/// Relative humidity percent measured
public var relativeHumidity: Float {
- get {return _storage._relativeHumidity}
+ get {return _storage._relativeHumidity ?? 0}
set {_uniqueStorage()._relativeHumidity = newValue}
}
+ /// Returns true if `relativeHumidity` has been explicitly set.
+ public var hasRelativeHumidity: Bool {return _storage._relativeHumidity != nil}
+ /// Clears the value of `relativeHumidity`. Subsequent reads from it will return its default value.
+ public mutating func clearRelativeHumidity() {_uniqueStorage()._relativeHumidity = nil}
///
/// Barometric pressure in hPA measured
public var barometricPressure: Float {
- get {return _storage._barometricPressure}
+ get {return _storage._barometricPressure ?? 0}
set {_uniqueStorage()._barometricPressure = newValue}
}
+ /// Returns true if `barometricPressure` has been explicitly set.
+ public var hasBarometricPressure: Bool {return _storage._barometricPressure != nil}
+ /// Clears the value of `barometricPressure`. Subsequent reads from it will return its default value.
+ public mutating func clearBarometricPressure() {_uniqueStorage()._barometricPressure = nil}
///
/// Gas resistance in MOhm measured
public var gasResistance: Float {
- get {return _storage._gasResistance}
+ get {return _storage._gasResistance ?? 0}
set {_uniqueStorage()._gasResistance = newValue}
}
+ /// Returns true if `gasResistance` has been explicitly set.
+ public var hasGasResistance: Bool {return _storage._gasResistance != nil}
+ /// Clears the value of `gasResistance`. Subsequent reads from it will return its default value.
+ public mutating func clearGasResistance() {_uniqueStorage()._gasResistance = nil}
///
/// Voltage measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
public var voltage: Float {
- get {return _storage._voltage}
+ get {return _storage._voltage ?? 0}
set {_uniqueStorage()._voltage = newValue}
}
+ /// Returns true if `voltage` has been explicitly set.
+ public var hasVoltage: Bool {return _storage._voltage != nil}
+ /// Clears the value of `voltage`. Subsequent reads from it will return its default value.
+ public mutating func clearVoltage() {_uniqueStorage()._voltage = nil}
///
/// Current measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
public var current: Float {
- get {return _storage._current}
+ get {return _storage._current ?? 0}
set {_uniqueStorage()._current = newValue}
}
+ /// Returns true if `current` has been explicitly set.
+ public var hasCurrent: Bool {return _storage._current != nil}
+ /// Clears the value of `current`. Subsequent reads from it will return its default value.
+ public mutating func clearCurrent() {_uniqueStorage()._current = nil}
///
/// relative scale IAQ value as measured by Bosch BME680 . value 0-500.
/// Belongs to Air Quality but is not particle but VOC measurement. Other VOC values can also be put in here.
public var iaq: UInt32 {
- get {return _storage._iaq}
+ get {return _storage._iaq ?? 0}
set {_uniqueStorage()._iaq = newValue}
}
+ /// Returns true if `iaq` has been explicitly set.
+ public var hasIaq: Bool {return _storage._iaq != nil}
+ /// Clears the value of `iaq`. Subsequent reads from it will return its default value.
+ public mutating func clearIaq() {_uniqueStorage()._iaq = nil}
///
/// RCWL9620 Doppler Radar Distance Sensor, used for water level detection. Float value in mm.
public var distance: Float {
- get {return _storage._distance}
+ get {return _storage._distance ?? 0}
set {_uniqueStorage()._distance = newValue}
}
+ /// Returns true if `distance` has been explicitly set.
+ public var hasDistance: Bool {return _storage._distance != nil}
+ /// Clears the value of `distance`. Subsequent reads from it will return its default value.
+ public mutating func clearDistance() {_uniqueStorage()._distance = nil}
///
/// VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
public var lux: Float {
- get {return _storage._lux}
+ get {return _storage._lux ?? 0}
set {_uniqueStorage()._lux = newValue}
}
+ /// Returns true if `lux` has been explicitly set.
+ public var hasLux: Bool {return _storage._lux != nil}
+ /// Clears the value of `lux`. Subsequent reads from it will return its default value.
+ public mutating func clearLux() {_uniqueStorage()._lux = nil}
///
/// VEML7700 high accuracy white light(irradiance) not calibrated digital 16-bit resolution sensor.
public var whiteLux: Float {
- get {return _storage._whiteLux}
+ get {return _storage._whiteLux ?? 0}
set {_uniqueStorage()._whiteLux = newValue}
}
+ /// Returns true if `whiteLux` has been explicitly set.
+ public var hasWhiteLux: Bool {return _storage._whiteLux != nil}
+ /// Clears the value of `whiteLux`. Subsequent reads from it will return its default value.
+ public mutating func clearWhiteLux() {_uniqueStorage()._whiteLux = nil}
///
/// Infrared lux
public var irLux: Float {
- get {return _storage._irLux}
+ get {return _storage._irLux ?? 0}
set {_uniqueStorage()._irLux = newValue}
}
+ /// Returns true if `irLux` has been explicitly set.
+ public var hasIrLux: Bool {return _storage._irLux != nil}
+ /// Clears the value of `irLux`. Subsequent reads from it will return its default value.
+ public mutating func clearIrLux() {_uniqueStorage()._irLux = nil}
///
/// Ultraviolet lux
public var uvLux: Float {
- get {return _storage._uvLux}
+ get {return _storage._uvLux ?? 0}
set {_uniqueStorage()._uvLux = newValue}
}
+ /// Returns true if `uvLux` has been explicitly set.
+ public var hasUvLux: Bool {return _storage._uvLux != nil}
+ /// Clears the value of `uvLux`. Subsequent reads from it will return its default value.
+ public mutating func clearUvLux() {_uniqueStorage()._uvLux = nil}
///
/// Wind direction in degrees
/// 0 degrees = North, 90 = East, etc...
public var windDirection: UInt32 {
- get {return _storage._windDirection}
+ get {return _storage._windDirection ?? 0}
set {_uniqueStorage()._windDirection = newValue}
}
+ /// Returns true if `windDirection` has been explicitly set.
+ public var hasWindDirection: Bool {return _storage._windDirection != nil}
+ /// Clears the value of `windDirection`. Subsequent reads from it will return its default value.
+ public mutating func clearWindDirection() {_uniqueStorage()._windDirection = nil}
///
/// Wind speed in m/s
public var windSpeed: Float {
- get {return _storage._windSpeed}
+ get {return _storage._windSpeed ?? 0}
set {_uniqueStorage()._windSpeed = newValue}
}
+ /// Returns true if `windSpeed` has been explicitly set.
+ public var hasWindSpeed: Bool {return _storage._windSpeed != nil}
+ /// Clears the value of `windSpeed`. Subsequent reads from it will return its default value.
+ public mutating func clearWindSpeed() {_uniqueStorage()._windSpeed = nil}
///
/// Weight in KG
public var weight: Float {
- get {return _storage._weight}
+ get {return _storage._weight ?? 0}
set {_uniqueStorage()._weight = newValue}
}
+ /// Returns true if `weight` has been explicitly set.
+ public var hasWeight: Bool {return _storage._weight != nil}
+ /// Clears the value of `weight`. Subsequent reads from it will return its default value.
+ public mutating func clearWeight() {_uniqueStorage()._weight = nil}
///
/// Wind gust in m/s
public var windGust: Float {
- get {return _storage._windGust}
+ get {return _storage._windGust ?? 0}
set {_uniqueStorage()._windGust = newValue}
}
+ /// Returns true if `windGust` has been explicitly set.
+ public var hasWindGust: Bool {return _storage._windGust != nil}
+ /// Clears the value of `windGust`. Subsequent reads from it will return its default value.
+ public mutating func clearWindGust() {_uniqueStorage()._windGust = nil}
///
/// Wind lull in m/s
public var windLull: Float {
- get {return _storage._windLull}
+ get {return _storage._windLull ?? 0}
set {_uniqueStorage()._windLull = newValue}
}
+ /// Returns true if `windLull` has been explicitly set.
+ public var hasWindLull: Bool {return _storage._windLull != nil}
+ /// Clears the value of `windLull`. Subsequent reads from it will return its default value.
+ public mutating func clearWindLull() {_uniqueStorage()._windLull = nil}
public var unknownFields = SwiftProtobuf.UnknownStorage()
@@ -399,94 +535,284 @@ public struct EnvironmentMetrics: @unchecked Sendable {
///
/// Power Metrics (voltage / current / etc)
-public struct PowerMetrics: Sendable {
+public struct PowerMetrics {
// 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.
///
/// Voltage (Ch1)
- public var ch1Voltage: Float = 0
+ public var ch1Voltage: Float {
+ get {return _ch1Voltage ?? 0}
+ set {_ch1Voltage = newValue}
+ }
+ /// Returns true if `ch1Voltage` has been explicitly set.
+ public var hasCh1Voltage: Bool {return self._ch1Voltage != nil}
+ /// Clears the value of `ch1Voltage`. Subsequent reads from it will return its default value.
+ public mutating func clearCh1Voltage() {self._ch1Voltage = nil}
///
/// Current (Ch1)
- public var ch1Current: Float = 0
+ public var ch1Current: Float {
+ get {return _ch1Current ?? 0}
+ set {_ch1Current = newValue}
+ }
+ /// Returns true if `ch1Current` has been explicitly set.
+ public var hasCh1Current: Bool {return self._ch1Current != nil}
+ /// Clears the value of `ch1Current`. Subsequent reads from it will return its default value.
+ public mutating func clearCh1Current() {self._ch1Current = nil}
///
/// Voltage (Ch2)
- public var ch2Voltage: Float = 0
+ public var ch2Voltage: Float {
+ get {return _ch2Voltage ?? 0}
+ set {_ch2Voltage = newValue}
+ }
+ /// Returns true if `ch2Voltage` has been explicitly set.
+ public var hasCh2Voltage: Bool {return self._ch2Voltage != nil}
+ /// Clears the value of `ch2Voltage`. Subsequent reads from it will return its default value.
+ public mutating func clearCh2Voltage() {self._ch2Voltage = nil}
///
/// Current (Ch2)
- public var ch2Current: Float = 0
+ public var ch2Current: Float {
+ get {return _ch2Current ?? 0}
+ set {_ch2Current = newValue}
+ }
+ /// Returns true if `ch2Current` has been explicitly set.
+ public var hasCh2Current: Bool {return self._ch2Current != nil}
+ /// Clears the value of `ch2Current`. Subsequent reads from it will return its default value.
+ public mutating func clearCh2Current() {self._ch2Current = nil}
///
/// Voltage (Ch3)
- public var ch3Voltage: Float = 0
+ public var ch3Voltage: Float {
+ get {return _ch3Voltage ?? 0}
+ set {_ch3Voltage = newValue}
+ }
+ /// Returns true if `ch3Voltage` has been explicitly set.
+ public var hasCh3Voltage: Bool {return self._ch3Voltage != nil}
+ /// Clears the value of `ch3Voltage`. Subsequent reads from it will return its default value.
+ public mutating func clearCh3Voltage() {self._ch3Voltage = nil}
///
/// Current (Ch3)
- public var ch3Current: Float = 0
+ public var ch3Current: Float {
+ get {return _ch3Current ?? 0}
+ set {_ch3Current = newValue}
+ }
+ /// Returns true if `ch3Current` has been explicitly set.
+ public var hasCh3Current: Bool {return self._ch3Current != nil}
+ /// Clears the value of `ch3Current`. Subsequent reads from it will return its default value.
+ public mutating func clearCh3Current() {self._ch3Current = nil}
public var unknownFields = SwiftProtobuf.UnknownStorage()
public init() {}
+
+ fileprivate var _ch1Voltage: Float? = nil
+ fileprivate var _ch1Current: Float? = nil
+ fileprivate var _ch2Voltage: Float? = nil
+ fileprivate var _ch2Current: Float? = nil
+ fileprivate var _ch3Voltage: Float? = nil
+ fileprivate var _ch3Current: Float? = nil
}
///
/// Air quality metrics
-public struct AirQualityMetrics: Sendable {
+public struct AirQualityMetrics {
// 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.
///
/// Concentration Units Standard PM1.0
- public var pm10Standard: UInt32 = 0
+ public var pm10Standard: UInt32 {
+ get {return _pm10Standard ?? 0}
+ set {_pm10Standard = newValue}
+ }
+ /// Returns true if `pm10Standard` has been explicitly set.
+ public var hasPm10Standard: Bool {return self._pm10Standard != nil}
+ /// Clears the value of `pm10Standard`. Subsequent reads from it will return its default value.
+ public mutating func clearPm10Standard() {self._pm10Standard = nil}
///
/// Concentration Units Standard PM2.5
- public var pm25Standard: UInt32 = 0
+ public var pm25Standard: UInt32 {
+ get {return _pm25Standard ?? 0}
+ set {_pm25Standard = newValue}
+ }
+ /// Returns true if `pm25Standard` has been explicitly set.
+ public var hasPm25Standard: Bool {return self._pm25Standard != nil}
+ /// Clears the value of `pm25Standard`. Subsequent reads from it will return its default value.
+ public mutating func clearPm25Standard() {self._pm25Standard = nil}
///
/// Concentration Units Standard PM10.0
- public var pm100Standard: UInt32 = 0
+ public var pm100Standard: UInt32 {
+ get {return _pm100Standard ?? 0}
+ set {_pm100Standard = newValue}
+ }
+ /// Returns true if `pm100Standard` has been explicitly set.
+ public var hasPm100Standard: Bool {return self._pm100Standard != nil}
+ /// Clears the value of `pm100Standard`. Subsequent reads from it will return its default value.
+ public mutating func clearPm100Standard() {self._pm100Standard = nil}
///
/// Concentration Units Environmental PM1.0
- public var pm10Environmental: UInt32 = 0
+ public var pm10Environmental: UInt32 {
+ get {return _pm10Environmental ?? 0}
+ set {_pm10Environmental = newValue}
+ }
+ /// Returns true if `pm10Environmental` has been explicitly set.
+ public var hasPm10Environmental: Bool {return self._pm10Environmental != nil}
+ /// Clears the value of `pm10Environmental`. Subsequent reads from it will return its default value.
+ public mutating func clearPm10Environmental() {self._pm10Environmental = nil}
///
/// Concentration Units Environmental PM2.5
- public var pm25Environmental: UInt32 = 0
+ public var pm25Environmental: UInt32 {
+ get {return _pm25Environmental ?? 0}
+ set {_pm25Environmental = newValue}
+ }
+ /// Returns true if `pm25Environmental` has been explicitly set.
+ public var hasPm25Environmental: Bool {return self._pm25Environmental != nil}
+ /// Clears the value of `pm25Environmental`. Subsequent reads from it will return its default value.
+ public mutating func clearPm25Environmental() {self._pm25Environmental = nil}
///
/// Concentration Units Environmental PM10.0
- public var pm100Environmental: UInt32 = 0
+ public var pm100Environmental: UInt32 {
+ get {return _pm100Environmental ?? 0}
+ set {_pm100Environmental = newValue}
+ }
+ /// Returns true if `pm100Environmental` has been explicitly set.
+ public var hasPm100Environmental: Bool {return self._pm100Environmental != nil}
+ /// Clears the value of `pm100Environmental`. Subsequent reads from it will return its default value.
+ public mutating func clearPm100Environmental() {self._pm100Environmental = nil}
///
/// 0.3um Particle Count
- public var particles03Um: UInt32 = 0
+ public var particles03Um: UInt32 {
+ get {return _particles03Um ?? 0}
+ set {_particles03Um = newValue}
+ }
+ /// Returns true if `particles03Um` has been explicitly set.
+ public var hasParticles03Um: Bool {return self._particles03Um != nil}
+ /// Clears the value of `particles03Um`. Subsequent reads from it will return its default value.
+ public mutating func clearParticles03Um() {self._particles03Um = nil}
///
/// 0.5um Particle Count
- public var particles05Um: UInt32 = 0
+ public var particles05Um: UInt32 {
+ get {return _particles05Um ?? 0}
+ set {_particles05Um = newValue}
+ }
+ /// Returns true if `particles05Um` has been explicitly set.
+ public var hasParticles05Um: Bool {return self._particles05Um != nil}
+ /// Clears the value of `particles05Um`. Subsequent reads from it will return its default value.
+ public mutating func clearParticles05Um() {self._particles05Um = nil}
///
/// 1.0um Particle Count
- public var particles10Um: UInt32 = 0
+ public var particles10Um: UInt32 {
+ get {return _particles10Um ?? 0}
+ set {_particles10Um = newValue}
+ }
+ /// Returns true if `particles10Um` has been explicitly set.
+ public var hasParticles10Um: Bool {return self._particles10Um != nil}
+ /// Clears the value of `particles10Um`. Subsequent reads from it will return its default value.
+ public mutating func clearParticles10Um() {self._particles10Um = nil}
///
/// 2.5um Particle Count
- public var particles25Um: UInt32 = 0
+ public var particles25Um: UInt32 {
+ get {return _particles25Um ?? 0}
+ set {_particles25Um = newValue}
+ }
+ /// Returns true if `particles25Um` has been explicitly set.
+ public var hasParticles25Um: Bool {return self._particles25Um != nil}
+ /// Clears the value of `particles25Um`. Subsequent reads from it will return its default value.
+ public mutating func clearParticles25Um() {self._particles25Um = nil}
///
/// 5.0um Particle Count
- public var particles50Um: UInt32 = 0
+ public var particles50Um: UInt32 {
+ get {return _particles50Um ?? 0}
+ set {_particles50Um = newValue}
+ }
+ /// Returns true if `particles50Um` has been explicitly set.
+ public var hasParticles50Um: Bool {return self._particles50Um != nil}
+ /// Clears the value of `particles50Um`. Subsequent reads from it will return its default value.
+ public mutating func clearParticles50Um() {self._particles50Um = nil}
///
/// 10.0um Particle Count
- public var particles100Um: UInt32 = 0
+ public var particles100Um: UInt32 {
+ get {return _particles100Um ?? 0}
+ set {_particles100Um = newValue}
+ }
+ /// Returns true if `particles100Um` has been explicitly set.
+ public var hasParticles100Um: Bool {return self._particles100Um != nil}
+ /// Clears the value of `particles100Um`. Subsequent reads from it will return its default value.
+ public mutating func clearParticles100Um() {self._particles100Um = nil}
+
+ public var unknownFields = SwiftProtobuf.UnknownStorage()
+
+ public init() {}
+
+ fileprivate var _pm10Standard: UInt32? = nil
+ fileprivate var _pm25Standard: UInt32? = nil
+ fileprivate var _pm100Standard: UInt32? = nil
+ fileprivate var _pm10Environmental: UInt32? = nil
+ fileprivate var _pm25Environmental: UInt32? = nil
+ fileprivate var _pm100Environmental: UInt32? = nil
+ fileprivate var _particles03Um: UInt32? = nil
+ fileprivate var _particles05Um: UInt32? = nil
+ fileprivate var _particles10Um: UInt32? = nil
+ fileprivate var _particles25Um: UInt32? = nil
+ fileprivate var _particles50Um: UInt32? = nil
+ fileprivate var _particles100Um: UInt32? = nil
+}
+
+///
+/// Local device mesh statistics
+public struct LocalStats {
+ // 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.
+
+ ///
+ /// How long the device has been running since the last reboot (in seconds)
+ public var uptimeSeconds: UInt32 = 0
+
+ ///
+ /// Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
+ public var channelUtilization: Float = 0
+
+ ///
+ /// Percent of airtime for transmission used within the last hour.
+ public var airUtilTx: Float = 0
+
+ ///
+ /// Number of packets sent
+ public var numPacketsTx: UInt32 = 0
+
+ ///
+ /// Number of packets received good
+ public var numPacketsRx: UInt32 = 0
+
+ ///
+ /// Number of packets received that are malformed or violate the protocol
+ public var numPacketsRxBad: UInt32 = 0
+
+ ///
+ /// Number of nodes online (in the past 2 hours)
+ public var numOnlineNodes: UInt32 = 0
+
+ ///
+ /// Number of nodes total
+ public var numTotalNodes: UInt32 = 0
public var unknownFields = SwiftProtobuf.UnknownStorage()
@@ -495,7 +821,7 @@ public struct AirQualityMetrics: Sendable {
///
/// Types of Measurements the telemetry module is equipped to handle
-public struct Telemetry: Sendable {
+public struct Telemetry {
// 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.
@@ -546,9 +872,19 @@ public struct Telemetry: Sendable {
set {variant = .powerMetrics(newValue)}
}
+ ///
+ /// Local device mesh statistics
+ public var localStats: LocalStats {
+ get {
+ if case .localStats(let v)? = variant {return v}
+ return LocalStats()
+ }
+ set {variant = .localStats(newValue)}
+ }
+
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum OneOf_Variant: Equatable, Sendable {
+ public enum OneOf_Variant: Equatable {
///
/// Key native device metrics such as battery level
case deviceMetrics(DeviceMetrics)
@@ -561,7 +897,40 @@ public struct Telemetry: Sendable {
///
/// Power Metrics
case powerMetrics(PowerMetrics)
+ ///
+ /// Local device mesh statistics
+ case localStats(LocalStats)
+ #if !swift(>=4.1)
+ public static func ==(lhs: Telemetry.OneOf_Variant, rhs: Telemetry.OneOf_Variant) -> Bool {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch (lhs, rhs) {
+ case (.deviceMetrics, .deviceMetrics): return {
+ guard case .deviceMetrics(let l) = lhs, case .deviceMetrics(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.environmentMetrics, .environmentMetrics): return {
+ guard case .environmentMetrics(let l) = lhs, case .environmentMetrics(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.airQualityMetrics, .airQualityMetrics): return {
+ guard case .airQualityMetrics(let l) = lhs, case .airQualityMetrics(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.powerMetrics, .powerMetrics): return {
+ guard case .powerMetrics(let l) = lhs, case .powerMetrics(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ case (.localStats, .localStats): return {
+ guard case .localStats(let l) = lhs, case .localStats(let r) = rhs else { preconditionFailure() }
+ return l == r
+ }()
+ default: return false
+ }
+ }
+ #endif
}
public init() {}
@@ -569,7 +938,7 @@ public struct Telemetry: Sendable {
///
/// NAU7802 Telemetry configuration, for saving to flash
-public struct Nau7802Config: Sendable {
+public struct Nau7802Config {
// 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.
@@ -587,6 +956,18 @@ public struct Nau7802Config: Sendable {
public init() {}
}
+#if swift(>=5.5) && canImport(_Concurrency)
+extension TelemetrySensorType: @unchecked Sendable {}
+extension DeviceMetrics: @unchecked Sendable {}
+extension EnvironmentMetrics: @unchecked Sendable {}
+extension PowerMetrics: @unchecked Sendable {}
+extension AirQualityMetrics: @unchecked Sendable {}
+extension LocalStats: @unchecked Sendable {}
+extension Telemetry: @unchecked Sendable {}
+extension Telemetry.OneOf_Variant: @unchecked Sendable {}
+extension Nau7802Config: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
@@ -619,6 +1000,9 @@ extension TelemetrySensorType: SwiftProtobuf._ProtoNameProviding {
23: .same(proto: "AHT10"),
24: .same(proto: "DFROBOT_LARK"),
25: .same(proto: "NAU7802"),
+ 26: .same(proto: "BMP3XX"),
+ 27: .same(proto: "ICM20948"),
+ 28: .same(proto: "MAX17048"),
]
}
@@ -638,41 +1022,45 @@ extension DeviceMetrics: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa
// allocates stack space for every case branch when no optimizations are
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
- case 1: try { try decoder.decodeSingularUInt32Field(value: &self.batteryLevel) }()
- case 2: try { try decoder.decodeSingularFloatField(value: &self.voltage) }()
- case 3: try { try decoder.decodeSingularFloatField(value: &self.channelUtilization) }()
- case 4: try { try decoder.decodeSingularFloatField(value: &self.airUtilTx) }()
- case 5: try { try decoder.decodeSingularUInt32Field(value: &self.uptimeSeconds) }()
+ case 1: try { try decoder.decodeSingularUInt32Field(value: &self._batteryLevel) }()
+ case 2: try { try decoder.decodeSingularFloatField(value: &self._voltage) }()
+ case 3: try { try decoder.decodeSingularFloatField(value: &self._channelUtilization) }()
+ case 4: try { try decoder.decodeSingularFloatField(value: &self._airUtilTx) }()
+ case 5: try { try decoder.decodeSingularUInt32Field(value: &self._uptimeSeconds) }()
default: break
}
}
}
public func traverse(visitor: inout V) throws {
- if self.batteryLevel != 0 {
- try visitor.visitSingularUInt32Field(value: self.batteryLevel, fieldNumber: 1)
- }
- if self.voltage.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.voltage, fieldNumber: 2)
- }
- if self.channelUtilization.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.channelUtilization, fieldNumber: 3)
- }
- if self.airUtilTx.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.airUtilTx, fieldNumber: 4)
- }
- if self.uptimeSeconds != 0 {
- try visitor.visitSingularUInt32Field(value: self.uptimeSeconds, fieldNumber: 5)
- }
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
+ try { if let v = self._batteryLevel {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 1)
+ } }()
+ try { if let v = self._voltage {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 2)
+ } }()
+ try { if let v = self._channelUtilization {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 3)
+ } }()
+ try { if let v = self._airUtilTx {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 4)
+ } }()
+ try { if let v = self._uptimeSeconds {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 5)
+ } }()
try unknownFields.traverse(visitor: &visitor)
}
public static func ==(lhs: DeviceMetrics, rhs: DeviceMetrics) -> Bool {
- if lhs.batteryLevel != rhs.batteryLevel {return false}
- if lhs.voltage != rhs.voltage {return false}
- if lhs.channelUtilization != rhs.channelUtilization {return false}
- if lhs.airUtilTx != rhs.airUtilTx {return false}
- if lhs.uptimeSeconds != rhs.uptimeSeconds {return false}
+ if lhs._batteryLevel != rhs._batteryLevel {return false}
+ if lhs._voltage != rhs._voltage {return false}
+ if lhs._channelUtilization != rhs._channelUtilization {return false}
+ if lhs._airUtilTx != rhs._airUtilTx {return false}
+ if lhs._uptimeSeconds != rhs._uptimeSeconds {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@@ -701,23 +1089,23 @@ extension EnvironmentMetrics: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
]
fileprivate class _StorageClass {
- var _temperature: Float = 0
- var _relativeHumidity: Float = 0
- var _barometricPressure: Float = 0
- var _gasResistance: Float = 0
- var _voltage: Float = 0
- var _current: Float = 0
- var _iaq: UInt32 = 0
- var _distance: Float = 0
- var _lux: Float = 0
- var _whiteLux: Float = 0
- var _irLux: Float = 0
- var _uvLux: Float = 0
- var _windDirection: UInt32 = 0
- var _windSpeed: Float = 0
- var _weight: Float = 0
- var _windGust: Float = 0
- var _windLull: Float = 0
+ var _temperature: Float? = nil
+ var _relativeHumidity: Float? = nil
+ var _barometricPressure: Float? = nil
+ var _gasResistance: Float? = nil
+ var _voltage: Float? = nil
+ var _current: Float? = nil
+ var _iaq: UInt32? = nil
+ var _distance: Float? = nil
+ var _lux: Float? = nil
+ var _whiteLux: Float? = nil
+ var _irLux: Float? = nil
+ var _uvLux: Float? = nil
+ var _windDirection: UInt32? = nil
+ var _windSpeed: Float? = nil
+ var _weight: Float? = nil
+ var _windGust: Float? = nil
+ var _windLull: Float? = nil
#if swift(>=5.10)
// This property is used as the initial default value for new instances of the type.
@@ -792,57 +1180,61 @@ extension EnvironmentMetrics: SwiftProtobuf.Message, SwiftProtobuf._MessageImple
public func traverse(visitor: inout V) throws {
try withExtendedLifetime(_storage) { (_storage: _StorageClass) in
- if _storage._temperature.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._temperature, fieldNumber: 1)
- }
- if _storage._relativeHumidity.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._relativeHumidity, fieldNumber: 2)
- }
- if _storage._barometricPressure.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._barometricPressure, fieldNumber: 3)
- }
- if _storage._gasResistance.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._gasResistance, fieldNumber: 4)
- }
- if _storage._voltage.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._voltage, fieldNumber: 5)
- }
- if _storage._current.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._current, fieldNumber: 6)
- }
- if _storage._iaq != 0 {
- try visitor.visitSingularUInt32Field(value: _storage._iaq, fieldNumber: 7)
- }
- if _storage._distance.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._distance, fieldNumber: 8)
- }
- if _storage._lux.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._lux, fieldNumber: 9)
- }
- if _storage._whiteLux.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._whiteLux, fieldNumber: 10)
- }
- if _storage._irLux.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._irLux, fieldNumber: 11)
- }
- if _storage._uvLux.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._uvLux, fieldNumber: 12)
- }
- if _storage._windDirection != 0 {
- try visitor.visitSingularUInt32Field(value: _storage._windDirection, fieldNumber: 13)
- }
- if _storage._windSpeed.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._windSpeed, fieldNumber: 14)
- }
- if _storage._weight.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._weight, fieldNumber: 15)
- }
- if _storage._windGust.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._windGust, fieldNumber: 16)
- }
- if _storage._windLull.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: _storage._windLull, fieldNumber: 17)
- }
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
+ try { if let v = _storage._temperature {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 1)
+ } }()
+ try { if let v = _storage._relativeHumidity {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 2)
+ } }()
+ try { if let v = _storage._barometricPressure {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 3)
+ } }()
+ try { if let v = _storage._gasResistance {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 4)
+ } }()
+ try { if let v = _storage._voltage {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 5)
+ } }()
+ try { if let v = _storage._current {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 6)
+ } }()
+ try { if let v = _storage._iaq {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 7)
+ } }()
+ try { if let v = _storage._distance {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 8)
+ } }()
+ try { if let v = _storage._lux {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 9)
+ } }()
+ try { if let v = _storage._whiteLux {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 10)
+ } }()
+ try { if let v = _storage._irLux {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 11)
+ } }()
+ try { if let v = _storage._uvLux {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 12)
+ } }()
+ try { if let v = _storage._windDirection {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 13)
+ } }()
+ try { if let v = _storage._windSpeed {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 14)
+ } }()
+ try { if let v = _storage._weight {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 15)
+ } }()
+ try { if let v = _storage._windGust {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 16)
+ } }()
+ try { if let v = _storage._windLull {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 17)
+ } }()
}
try unknownFields.traverse(visitor: &visitor)
}
@@ -895,46 +1287,50 @@ extension PowerMetrics: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
// allocates stack space for every case branch when no optimizations are
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
- case 1: try { try decoder.decodeSingularFloatField(value: &self.ch1Voltage) }()
- case 2: try { try decoder.decodeSingularFloatField(value: &self.ch1Current) }()
- case 3: try { try decoder.decodeSingularFloatField(value: &self.ch2Voltage) }()
- case 4: try { try decoder.decodeSingularFloatField(value: &self.ch2Current) }()
- case 5: try { try decoder.decodeSingularFloatField(value: &self.ch3Voltage) }()
- case 6: try { try decoder.decodeSingularFloatField(value: &self.ch3Current) }()
+ case 1: try { try decoder.decodeSingularFloatField(value: &self._ch1Voltage) }()
+ case 2: try { try decoder.decodeSingularFloatField(value: &self._ch1Current) }()
+ case 3: try { try decoder.decodeSingularFloatField(value: &self._ch2Voltage) }()
+ case 4: try { try decoder.decodeSingularFloatField(value: &self._ch2Current) }()
+ case 5: try { try decoder.decodeSingularFloatField(value: &self._ch3Voltage) }()
+ case 6: try { try decoder.decodeSingularFloatField(value: &self._ch3Current) }()
default: break
}
}
}
public func traverse(visitor: inout V) throws {
- if self.ch1Voltage.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.ch1Voltage, fieldNumber: 1)
- }
- if self.ch1Current.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.ch1Current, fieldNumber: 2)
- }
- if self.ch2Voltage.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.ch2Voltage, fieldNumber: 3)
- }
- if self.ch2Current.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.ch2Current, fieldNumber: 4)
- }
- if self.ch3Voltage.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.ch3Voltage, fieldNumber: 5)
- }
- if self.ch3Current.bitPattern != 0 {
- try visitor.visitSingularFloatField(value: self.ch3Current, fieldNumber: 6)
- }
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
+ try { if let v = self._ch1Voltage {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 1)
+ } }()
+ try { if let v = self._ch1Current {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 2)
+ } }()
+ try { if let v = self._ch2Voltage {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 3)
+ } }()
+ try { if let v = self._ch2Current {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 4)
+ } }()
+ try { if let v = self._ch3Voltage {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 5)
+ } }()
+ try { if let v = self._ch3Current {
+ try visitor.visitSingularFloatField(value: v, fieldNumber: 6)
+ } }()
try unknownFields.traverse(visitor: &visitor)
}
public static func ==(lhs: PowerMetrics, rhs: PowerMetrics) -> Bool {
- if lhs.ch1Voltage != rhs.ch1Voltage {return false}
- if lhs.ch1Current != rhs.ch1Current {return false}
- if lhs.ch2Voltage != rhs.ch2Voltage {return false}
- if lhs.ch2Current != rhs.ch2Current {return false}
- if lhs.ch3Voltage != rhs.ch3Voltage {return false}
- if lhs.ch3Current != rhs.ch3Current {return false}
+ if lhs._ch1Voltage != rhs._ch1Voltage {return false}
+ if lhs._ch1Current != rhs._ch1Current {return false}
+ if lhs._ch2Voltage != rhs._ch2Voltage {return false}
+ if lhs._ch2Current != rhs._ch2Current {return false}
+ if lhs._ch3Voltage != rhs._ch3Voltage {return false}
+ if lhs._ch3Current != rhs._ch3Current {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@@ -963,76 +1359,154 @@ extension AirQualityMetrics: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
// allocates stack space for every case branch when no optimizations are
// enabled. https://github.com/apple/swift-protobuf/issues/1034
switch fieldNumber {
- case 1: try { try decoder.decodeSingularUInt32Field(value: &self.pm10Standard) }()
- case 2: try { try decoder.decodeSingularUInt32Field(value: &self.pm25Standard) }()
- case 3: try { try decoder.decodeSingularUInt32Field(value: &self.pm100Standard) }()
- case 4: try { try decoder.decodeSingularUInt32Field(value: &self.pm10Environmental) }()
- case 5: try { try decoder.decodeSingularUInt32Field(value: &self.pm25Environmental) }()
- case 6: try { try decoder.decodeSingularUInt32Field(value: &self.pm100Environmental) }()
- case 7: try { try decoder.decodeSingularUInt32Field(value: &self.particles03Um) }()
- case 8: try { try decoder.decodeSingularUInt32Field(value: &self.particles05Um) }()
- case 9: try { try decoder.decodeSingularUInt32Field(value: &self.particles10Um) }()
- case 10: try { try decoder.decodeSingularUInt32Field(value: &self.particles25Um) }()
- case 11: try { try decoder.decodeSingularUInt32Field(value: &self.particles50Um) }()
- case 12: try { try decoder.decodeSingularUInt32Field(value: &self.particles100Um) }()
+ case 1: try { try decoder.decodeSingularUInt32Field(value: &self._pm10Standard) }()
+ case 2: try { try decoder.decodeSingularUInt32Field(value: &self._pm25Standard) }()
+ case 3: try { try decoder.decodeSingularUInt32Field(value: &self._pm100Standard) }()
+ case 4: try { try decoder.decodeSingularUInt32Field(value: &self._pm10Environmental) }()
+ case 5: try { try decoder.decodeSingularUInt32Field(value: &self._pm25Environmental) }()
+ case 6: try { try decoder.decodeSingularUInt32Field(value: &self._pm100Environmental) }()
+ case 7: try { try decoder.decodeSingularUInt32Field(value: &self._particles03Um) }()
+ case 8: try { try decoder.decodeSingularUInt32Field(value: &self._particles05Um) }()
+ case 9: try { try decoder.decodeSingularUInt32Field(value: &self._particles10Um) }()
+ case 10: try { try decoder.decodeSingularUInt32Field(value: &self._particles25Um) }()
+ case 11: try { try decoder.decodeSingularUInt32Field(value: &self._particles50Um) }()
+ case 12: try { try decoder.decodeSingularUInt32Field(value: &self._particles100Um) }()
default: break
}
}
}
public func traverse(visitor: inout V) throws {
- if self.pm10Standard != 0 {
- try visitor.visitSingularUInt32Field(value: self.pm10Standard, fieldNumber: 1)
- }
- if self.pm25Standard != 0 {
- try visitor.visitSingularUInt32Field(value: self.pm25Standard, fieldNumber: 2)
- }
- if self.pm100Standard != 0 {
- try visitor.visitSingularUInt32Field(value: self.pm100Standard, fieldNumber: 3)
- }
- if self.pm10Environmental != 0 {
- try visitor.visitSingularUInt32Field(value: self.pm10Environmental, fieldNumber: 4)
- }
- if self.pm25Environmental != 0 {
- try visitor.visitSingularUInt32Field(value: self.pm25Environmental, fieldNumber: 5)
- }
- if self.pm100Environmental != 0 {
- try visitor.visitSingularUInt32Field(value: self.pm100Environmental, fieldNumber: 6)
- }
- if self.particles03Um != 0 {
- try visitor.visitSingularUInt32Field(value: self.particles03Um, fieldNumber: 7)
- }
- if self.particles05Um != 0 {
- try visitor.visitSingularUInt32Field(value: self.particles05Um, fieldNumber: 8)
- }
- if self.particles10Um != 0 {
- try visitor.visitSingularUInt32Field(value: self.particles10Um, fieldNumber: 9)
- }
- if self.particles25Um != 0 {
- try visitor.visitSingularUInt32Field(value: self.particles25Um, fieldNumber: 10)
- }
- if self.particles50Um != 0 {
- try visitor.visitSingularUInt32Field(value: self.particles50Um, fieldNumber: 11)
- }
- if self.particles100Um != 0 {
- try visitor.visitSingularUInt32Field(value: self.particles100Um, fieldNumber: 12)
- }
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every if/case branch local when no optimizations
+ // are enabled. https://github.com/apple/swift-protobuf/issues/1034 and
+ // https://github.com/apple/swift-protobuf/issues/1182
+ try { if let v = self._pm10Standard {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 1)
+ } }()
+ try { if let v = self._pm25Standard {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 2)
+ } }()
+ try { if let v = self._pm100Standard {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 3)
+ } }()
+ try { if let v = self._pm10Environmental {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 4)
+ } }()
+ try { if let v = self._pm25Environmental {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 5)
+ } }()
+ try { if let v = self._pm100Environmental {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 6)
+ } }()
+ try { if let v = self._particles03Um {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 7)
+ } }()
+ try { if let v = self._particles05Um {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 8)
+ } }()
+ try { if let v = self._particles10Um {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 9)
+ } }()
+ try { if let v = self._particles25Um {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 10)
+ } }()
+ try { if let v = self._particles50Um {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 11)
+ } }()
+ try { if let v = self._particles100Um {
+ try visitor.visitSingularUInt32Field(value: v, fieldNumber: 12)
+ } }()
try unknownFields.traverse(visitor: &visitor)
}
public static func ==(lhs: AirQualityMetrics, rhs: AirQualityMetrics) -> Bool {
- if lhs.pm10Standard != rhs.pm10Standard {return false}
- if lhs.pm25Standard != rhs.pm25Standard {return false}
- if lhs.pm100Standard != rhs.pm100Standard {return false}
- if lhs.pm10Environmental != rhs.pm10Environmental {return false}
- if lhs.pm25Environmental != rhs.pm25Environmental {return false}
- if lhs.pm100Environmental != rhs.pm100Environmental {return false}
- if lhs.particles03Um != rhs.particles03Um {return false}
- if lhs.particles05Um != rhs.particles05Um {return false}
- if lhs.particles10Um != rhs.particles10Um {return false}
- if lhs.particles25Um != rhs.particles25Um {return false}
- if lhs.particles50Um != rhs.particles50Um {return false}
- if lhs.particles100Um != rhs.particles100Um {return false}
+ if lhs._pm10Standard != rhs._pm10Standard {return false}
+ if lhs._pm25Standard != rhs._pm25Standard {return false}
+ if lhs._pm100Standard != rhs._pm100Standard {return false}
+ if lhs._pm10Environmental != rhs._pm10Environmental {return false}
+ if lhs._pm25Environmental != rhs._pm25Environmental {return false}
+ if lhs._pm100Environmental != rhs._pm100Environmental {return false}
+ if lhs._particles03Um != rhs._particles03Um {return false}
+ if lhs._particles05Um != rhs._particles05Um {return false}
+ if lhs._particles10Um != rhs._particles10Um {return false}
+ if lhs._particles25Um != rhs._particles25Um {return false}
+ if lhs._particles50Um != rhs._particles50Um {return false}
+ if lhs._particles100Um != rhs._particles100Um {return false}
+ if lhs.unknownFields != rhs.unknownFields {return false}
+ return true
+ }
+}
+
+extension LocalStats: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
+ public static let protoMessageName: String = _protobuf_package + ".LocalStats"
+ public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
+ 1: .standard(proto: "uptime_seconds"),
+ 2: .standard(proto: "channel_utilization"),
+ 3: .standard(proto: "air_util_tx"),
+ 4: .standard(proto: "num_packets_tx"),
+ 5: .standard(proto: "num_packets_rx"),
+ 6: .standard(proto: "num_packets_rx_bad"),
+ 7: .standard(proto: "num_online_nodes"),
+ 8: .standard(proto: "num_total_nodes"),
+ ]
+
+ public mutating func decodeMessage(decoder: inout D) throws {
+ while let fieldNumber = try decoder.nextFieldNumber() {
+ // The use of inline closures is to circumvent an issue where the compiler
+ // allocates stack space for every case branch when no optimizations are
+ // enabled. https://github.com/apple/swift-protobuf/issues/1034
+ switch fieldNumber {
+ case 1: try { try decoder.decodeSingularUInt32Field(value: &self.uptimeSeconds) }()
+ case 2: try { try decoder.decodeSingularFloatField(value: &self.channelUtilization) }()
+ case 3: try { try decoder.decodeSingularFloatField(value: &self.airUtilTx) }()
+ case 4: try { try decoder.decodeSingularUInt32Field(value: &self.numPacketsTx) }()
+ case 5: try { try decoder.decodeSingularUInt32Field(value: &self.numPacketsRx) }()
+ case 6: try { try decoder.decodeSingularUInt32Field(value: &self.numPacketsRxBad) }()
+ case 7: try { try decoder.decodeSingularUInt32Field(value: &self.numOnlineNodes) }()
+ case 8: try { try decoder.decodeSingularUInt32Field(value: &self.numTotalNodes) }()
+ default: break
+ }
+ }
+ }
+
+ public func traverse(visitor: inout V) throws {
+ if self.uptimeSeconds != 0 {
+ try visitor.visitSingularUInt32Field(value: self.uptimeSeconds, fieldNumber: 1)
+ }
+ if self.channelUtilization != 0 {
+ try visitor.visitSingularFloatField(value: self.channelUtilization, fieldNumber: 2)
+ }
+ if self.airUtilTx != 0 {
+ try visitor.visitSingularFloatField(value: self.airUtilTx, fieldNumber: 3)
+ }
+ if self.numPacketsTx != 0 {
+ try visitor.visitSingularUInt32Field(value: self.numPacketsTx, fieldNumber: 4)
+ }
+ if self.numPacketsRx != 0 {
+ try visitor.visitSingularUInt32Field(value: self.numPacketsRx, fieldNumber: 5)
+ }
+ if self.numPacketsRxBad != 0 {
+ try visitor.visitSingularUInt32Field(value: self.numPacketsRxBad, fieldNumber: 6)
+ }
+ if self.numOnlineNodes != 0 {
+ try visitor.visitSingularUInt32Field(value: self.numOnlineNodes, fieldNumber: 7)
+ }
+ if self.numTotalNodes != 0 {
+ try visitor.visitSingularUInt32Field(value: self.numTotalNodes, fieldNumber: 8)
+ }
+ try unknownFields.traverse(visitor: &visitor)
+ }
+
+ public static func ==(lhs: LocalStats, rhs: LocalStats) -> Bool {
+ if lhs.uptimeSeconds != rhs.uptimeSeconds {return false}
+ if lhs.channelUtilization != rhs.channelUtilization {return false}
+ if lhs.airUtilTx != rhs.airUtilTx {return false}
+ if lhs.numPacketsTx != rhs.numPacketsTx {return false}
+ if lhs.numPacketsRx != rhs.numPacketsRx {return false}
+ if lhs.numPacketsRxBad != rhs.numPacketsRxBad {return false}
+ if lhs.numOnlineNodes != rhs.numOnlineNodes {return false}
+ if lhs.numTotalNodes != rhs.numTotalNodes {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@@ -1046,6 +1520,7 @@ extension Telemetry: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
3: .standard(proto: "environment_metrics"),
4: .standard(proto: "air_quality_metrics"),
5: .standard(proto: "power_metrics"),
+ 6: .standard(proto: "local_stats"),
]
public mutating func decodeMessage(decoder: inout D) throws {
@@ -1107,6 +1582,19 @@ extension Telemetry: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
self.variant = .powerMetrics(v)
}
}()
+ case 6: try {
+ var v: LocalStats?
+ var hadOneofValue = false
+ if let current = self.variant {
+ hadOneofValue = true
+ if case .localStats(let m) = current {v = m}
+ }
+ try decoder.decodeSingularMessageField(value: &v)
+ if let v = v {
+ if hadOneofValue {try decoder.handleConflictingOneOf()}
+ self.variant = .localStats(v)
+ }
+ }()
default: break
}
}
@@ -1137,6 +1625,10 @@ extension Telemetry: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
guard case .powerMetrics(let v)? = self.variant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 5)
}()
+ case .localStats?: try {
+ guard case .localStats(let v)? = self.variant else { preconditionFailure() }
+ try visitor.visitSingularMessageField(value: v, fieldNumber: 6)
+ }()
case nil: break
}
try unknownFields.traverse(visitor: &visitor)
@@ -1174,7 +1666,7 @@ extension Nau7802Config: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementa
if self.zeroOffset != 0 {
try visitor.visitSingularInt32Field(value: self.zeroOffset, fieldNumber: 1)
}
- if self.calibrationFactor.bitPattern != 0 {
+ if self.calibrationFactor != 0 {
try visitor.visitSingularFloatField(value: self.calibrationFactor, fieldNumber: 2)
}
try unknownFields.traverse(visitor: &visitor)
diff --git a/MeshtasticProtobufs/Sources/meshtastic/xmodem.pb.swift b/MeshtasticProtobufs/Sources/meshtastic/xmodem.pb.swift
index 89d0097c..1f41fe0b 100644
--- a/MeshtasticProtobufs/Sources/meshtastic/xmodem.pb.swift
+++ b/MeshtasticProtobufs/Sources/meshtastic/xmodem.pb.swift
@@ -20,7 +20,7 @@ fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAP
typealias Version = _2
}
-public struct XModem: @unchecked Sendable {
+public struct XModem {
// 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.
@@ -35,7 +35,7 @@ public struct XModem: @unchecked Sendable {
public var unknownFields = SwiftProtobuf.UnknownStorage()
- public enum Control: SwiftProtobuf.Enum, Swift.CaseIterable {
+ public enum Control: SwiftProtobuf.Enum {
public typealias RawValue = Int
case nul // = 0
case soh // = 1
@@ -79,23 +79,34 @@ public struct XModem: @unchecked Sendable {
}
}
- // The compiler won't synthesize support with the UNRECOGNIZED case.
- public static let allCases: [XModem.Control] = [
- .nul,
- .soh,
- .stx,
- .eot,
- .ack,
- .nak,
- .can,
- .ctrlz,
- ]
-
}
public init() {}
}
+#if swift(>=4.2)
+
+extension XModem.Control: CaseIterable {
+ // The compiler won't synthesize support with the UNRECOGNIZED case.
+ public static let allCases: [XModem.Control] = [
+ .nul,
+ .soh,
+ .stx,
+ .eot,
+ .ack,
+ .nak,
+ .can,
+ .ctrlz,
+ ]
+}
+
+#endif // swift(>=4.2)
+
+#if swift(>=5.5) && canImport(_Concurrency)
+extension XModem: @unchecked Sendable {}
+extension XModem.Control: @unchecked Sendable {}
+#endif // swift(>=5.5) && canImport(_Concurrency)
+
// MARK: - Code below here is support for the SwiftProtobuf runtime.
fileprivate let _protobuf_package = "meshtastic"
diff --git a/protobufs b/protobufs
index 2fa7d6a4..b6237629 160000
--- a/protobufs
+++ b/protobufs
@@ -1 +1 @@
-Subproject commit 2fa7d6a4b702fcd58b54b0d1d6e4b3b85164f649
+Subproject commit b623762940ebdb1887a3b31b86f4d9cdaa7e6ecf