Update protobufs

Don't allow leading zero for BLE fixed pin
Comment out ethMode
This commit is contained in:
Garth Vander Houwen 2023-01-09 18:01:27 -08:00
parent 871a5f30ab
commit 8b8108c5a3
8 changed files with 420 additions and 15 deletions

View file

@ -24,14 +24,14 @@ enum EthernetMode: Int, CaseIterable, Identifiable {
}
}
}
func protoEnumValue() -> Config.NetworkConfig.EthMode {
func protoEnumValue() -> Config.NetworkConfig.AddressMode {
switch self {
case .dhcp:
return Config.NetworkConfig.EthMode.dhcp
return Config.NetworkConfig.AddressMode.dhcp
case .staticip:
return Config.NetworkConfig.EthMode.static
return Config.NetworkConfig.AddressMode.static
}
}
}

View file

@ -154,6 +154,26 @@ struct AdminMessage {
set {payloadVariant = .getDeviceMetadataResponse(newValue)}
}
///
/// Get the Ringtone in the response to this message.
var getRingtoneRequest: Bool {
get {
if case .getRingtoneRequest(let v)? = payloadVariant {return v}
return false
}
set {payloadVariant = .getRingtoneRequest(newValue)}
}
///
/// Get the Ringtone in the response to this message.
var getRingtoneResponse: String {
get {
if case .getRingtoneResponse(let v)? = payloadVariant {return v}
return String()
}
set {payloadVariant = .getRingtoneResponse(newValue)}
}
///
/// Set the owner for this node
var setOwner: User {
@ -208,6 +228,16 @@ struct AdminMessage {
set {payloadVariant = .setCannedMessageModuleMessages(newValue)}
}
///
/// Set the ringtone for ExternalNotification.
var setRingtoneMessage: String {
get {
if case .setRingtoneMessage(let v)? = payloadVariant {return v}
return String()
}
set {payloadVariant = .setRingtoneMessage(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)
@ -357,6 +387,12 @@ struct AdminMessage {
/// Device metadata response
case getDeviceMetadataResponse(DeviceMetadata)
///
/// Get the Ringtone in the response to this message.
case getRingtoneRequest(Bool)
///
/// Get the Ringtone in the response to this message.
case getRingtoneResponse(String)
///
/// Set the owner for this node
case setOwner(User)
///
@ -376,6 +412,9 @@ struct AdminMessage {
/// Set the Canned Message Module messages text.
case setCannedMessageModuleMessages(String)
///
/// Set the ringtone for ExternalNotification.
case setRingtoneMessage(String)
///
/// 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)
@ -466,6 +505,14 @@ struct AdminMessage {
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 (.setOwner, .setOwner): return {
guard case .setOwner(let l) = lhs, case .setOwner(let r) = rhs else { preconditionFailure() }
return l == r
@ -486,6 +533,10 @@ struct AdminMessage {
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 (.beginEditSettings, .beginEditSettings): return {
guard case .beginEditSettings(let l) = lhs, case .beginEditSettings(let r) = rhs else { preconditionFailure() }
return l == r
@ -634,6 +685,10 @@ struct AdminMessage {
///
/// TODO: REPLACE
case audioConfig // = 7
///
/// TODO: REPLACE
case remotehardwareConfig // = 8
case UNRECOGNIZED(Int)
init() {
@ -650,6 +705,7 @@ struct AdminMessage {
case 5: self = .telemetryConfig
case 6: self = .cannedmsgConfig
case 7: self = .audioConfig
case 8: self = .remotehardwareConfig
default: self = .UNRECOGNIZED(rawValue)
}
}
@ -664,6 +720,7 @@ struct AdminMessage {
case .telemetryConfig: return 5
case .cannedmsgConfig: return 6
case .audioConfig: return 7
case .remotehardwareConfig: return 8
case .UNRECOGNIZED(let i): return i
}
}
@ -699,6 +756,7 @@ extension AdminMessage.ModuleConfigType: CaseIterable {
.telemetryConfig,
.cannedmsgConfig,
.audioConfig,
.remotehardwareConfig,
]
}
@ -728,11 +786,14 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
11: .standard(proto: "get_canned_message_module_messages_response"),
12: .standard(proto: "get_device_metadata_request"),
13: .standard(proto: "get_device_metadata_response"),
14: .standard(proto: "get_ringtone_request"),
15: .standard(proto: "get_ringtone_response"),
32: .standard(proto: "set_owner"),
33: .standard(proto: "set_channel"),
34: .standard(proto: "set_config"),
35: .standard(proto: "set_module_config"),
36: .standard(proto: "set_canned_message_module_messages"),
37: .standard(proto: "set_ringtone_message"),
64: .standard(proto: "begin_edit_settings"),
65: .standard(proto: "commit_edit_settings"),
66: .standard(proto: "confirm_set_channel"),
@ -872,6 +933,22 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .getDeviceMetadataResponse(v)
}
}()
case 14: try {
var v: Bool?
try decoder.decodeSingularBoolField(value: &v)
if let v = v {
if self.payloadVariant != nil {try decoder.handleConflictingOneOf()}
self.payloadVariant = .getRingtoneRequest(v)
}
}()
case 15: try {
var v: String?
try decoder.decodeSingularStringField(value: &v)
if let v = v {
if self.payloadVariant != nil {try decoder.handleConflictingOneOf()}
self.payloadVariant = .getRingtoneResponse(v)
}
}()
case 32: try {
var v: User?
var hadOneofValue = false
@ -932,6 +1009,14 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .setCannedMessageModuleMessages(v)
}
}()
case 37: try {
var v: String?
try decoder.decodeSingularStringField(value: &v)
if let v = v {
if self.payloadVariant != nil {try decoder.handleConflictingOneOf()}
self.payloadVariant = .setRingtoneMessage(v)
}
}()
case 64: try {
var v: Bool?
try decoder.decodeSingularBoolField(value: &v)
@ -1071,6 +1156,14 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .getDeviceMetadataResponse(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 13)
}()
case .getRingtoneRequest?: try {
guard case .getRingtoneRequest(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularBoolField(value: v, fieldNumber: 14)
}()
case .getRingtoneResponse?: try {
guard case .getRingtoneResponse(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularStringField(value: v, fieldNumber: 15)
}()
case .setOwner?: try {
guard case .setOwner(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 32)
@ -1091,6 +1184,10 @@ extension AdminMessage: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .setCannedMessageModuleMessages(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularStringField(value: v, fieldNumber: 36)
}()
case .setRingtoneMessage?: try {
guard case .setRingtoneMessage(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularStringField(value: v, fieldNumber: 37)
}()
case .beginEditSettings?: try {
guard case .beginEditSettings(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularBoolField(value: v, fieldNumber: 64)
@ -1165,5 +1262,6 @@ extension AdminMessage.ModuleConfigType: SwiftProtobuf._ProtoNameProviding {
5: .same(proto: "TELEMETRY_CONFIG"),
6: .same(proto: "CANNEDMSG_CONFIG"),
7: .same(proto: "AUDIO_CONFIG"),
8: .same(proto: "REMOTEHARDWARE_CONFIG"),
]
}

View file

@ -474,7 +474,7 @@ struct Config {
///
/// acquire an address via DHCP or assign static
var ethMode: Config.NetworkConfig.EthMode = .dhcp
var addressMode: Config.NetworkConfig.AddressMode = .dhcp
///
/// struct to keep static address
@ -489,7 +489,7 @@ struct Config {
var unknownFields = SwiftProtobuf.UnknownStorage()
enum EthMode: SwiftProtobuf.Enum {
enum AddressMode: SwiftProtobuf.Enum {
typealias RawValue = Int
///
@ -592,6 +592,14 @@ struct Config {
/// Override auto-detect in screen
var oled: Config.DisplayConfig.OledType = .oledAuto
///
/// Display Mode
var displaymode: Config.DisplayConfig.DisplayMode = .default
///
/// Print first line in pseudo-bold? FALSE is original style, TRUE is bold
var headingBold: Bool = false
var unknownFields = SwiftProtobuf.UnknownStorage()
///
@ -739,6 +747,52 @@ struct Config {
}
enum DisplayMode: SwiftProtobuf.Enum {
typealias RawValue = Int
///
/// Default. The old style for the 128x64 OLED screen
case `default` // = 0
///
/// Rearrange display elements to cater for bicolor OLED displays
case twocolor // = 1
///
/// Same as TwoColor, but with inverted top bar. Not so good for Epaper displays
case inverted // = 2
///
/// TFT Full Color Displays (not implemented yet)
case color // = 3
case UNRECOGNIZED(Int)
init() {
self = .default
}
init?(rawValue: Int) {
switch rawValue {
case 0: self = .default
case 1: self = .twocolor
case 2: self = .inverted
case 3: self = .color
default: self = .UNRECOGNIZED(rawValue)
}
}
var rawValue: Int {
switch self {
case .default: return 0
case .twocolor: return 1
case .inverted: return 2
case .color: return 3
case .UNRECOGNIZED(let i): return i
}
}
}
init() {}
}
@ -1099,9 +1153,9 @@ extension Config.PositionConfig.PositionFlags: CaseIterable {
]
}
extension Config.NetworkConfig.EthMode: CaseIterable {
extension Config.NetworkConfig.AddressMode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.NetworkConfig.EthMode] = [
static var allCases: [Config.NetworkConfig.AddressMode] = [
.dhcp,
.static,
]
@ -1136,6 +1190,16 @@ extension Config.DisplayConfig.OledType: CaseIterable {
]
}
extension Config.DisplayConfig.DisplayMode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.DisplayConfig.DisplayMode] = [
.default,
.twocolor,
.inverted,
.color,
]
}
extension Config.LoRaConfig.RegionCode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.LoRaConfig.RegionCode] = [
@ -1189,12 +1253,13 @@ extension Config.PositionConfig: @unchecked Sendable {}
extension Config.PositionConfig.PositionFlags: @unchecked Sendable {}
extension Config.PowerConfig: @unchecked Sendable {}
extension Config.NetworkConfig: @unchecked Sendable {}
extension Config.NetworkConfig.EthMode: @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.LoRaConfig: @unchecked Sendable {}
extension Config.LoRaConfig.RegionCode: @unchecked Sendable {}
extension Config.LoRaConfig.ModemPreset: @unchecked Sendable {}
@ -1607,7 +1672,7 @@ extension Config.NetworkConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
4: .standard(proto: "wifi_psk"),
5: .standard(proto: "ntp_server"),
6: .standard(proto: "eth_enabled"),
7: .standard(proto: "eth_mode"),
7: .standard(proto: "address_mode"),
8: .standard(proto: "ipv4_config"),
]
@ -1622,7 +1687,7 @@ extension Config.NetworkConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
case 4: try { try decoder.decodeSingularStringField(value: &self.wifiPsk) }()
case 5: try { try decoder.decodeSingularStringField(value: &self.ntpServer) }()
case 6: try { try decoder.decodeSingularBoolField(value: &self.ethEnabled) }()
case 7: try { try decoder.decodeSingularEnumField(value: &self.ethMode) }()
case 7: try { try decoder.decodeSingularEnumField(value: &self.addressMode) }()
case 8: try { try decoder.decodeSingularMessageField(value: &self._ipv4Config) }()
default: break
}
@ -1649,8 +1714,8 @@ extension Config.NetworkConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
if self.ethEnabled != false {
try visitor.visitSingularBoolField(value: self.ethEnabled, fieldNumber: 6)
}
if self.ethMode != .dhcp {
try visitor.visitSingularEnumField(value: self.ethMode, fieldNumber: 7)
if self.addressMode != .dhcp {
try visitor.visitSingularEnumField(value: self.addressMode, fieldNumber: 7)
}
try { if let v = self._ipv4Config {
try visitor.visitSingularMessageField(value: v, fieldNumber: 8)
@ -1664,14 +1729,14 @@ extension Config.NetworkConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
if lhs.wifiPsk != rhs.wifiPsk {return false}
if lhs.ntpServer != rhs.ntpServer {return false}
if lhs.ethEnabled != rhs.ethEnabled {return false}
if lhs.ethMode != rhs.ethMode {return false}
if lhs.addressMode != rhs.addressMode {return false}
if lhs._ipv4Config != rhs._ipv4Config {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
}
extension Config.NetworkConfig.EthMode: SwiftProtobuf._ProtoNameProviding {
extension Config.NetworkConfig.AddressMode: SwiftProtobuf._ProtoNameProviding {
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
0: .same(proto: "DHCP"),
1: .same(proto: "STATIC"),
@ -1738,6 +1803,8 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
5: .standard(proto: "flip_screen"),
6: .same(proto: "units"),
7: .same(proto: "oled"),
8: .same(proto: "displaymode"),
9: .standard(proto: "heading_bold"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@ -1753,6 +1820,8 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
case 5: try { try decoder.decodeSingularBoolField(value: &self.flipScreen) }()
case 6: try { try decoder.decodeSingularEnumField(value: &self.units) }()
case 7: try { try decoder.decodeSingularEnumField(value: &self.oled) }()
case 8: try { try decoder.decodeSingularEnumField(value: &self.displaymode) }()
case 9: try { try decoder.decodeSingularBoolField(value: &self.headingBold) }()
default: break
}
}
@ -1780,6 +1849,12 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
if self.oled != .oledAuto {
try visitor.visitSingularEnumField(value: self.oled, fieldNumber: 7)
}
if self.displaymode != .default {
try visitor.visitSingularEnumField(value: self.displaymode, fieldNumber: 8)
}
if self.headingBold != false {
try visitor.visitSingularBoolField(value: self.headingBold, fieldNumber: 9)
}
try unknownFields.traverse(visitor: &visitor)
}
@ -1791,6 +1866,8 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
if lhs.flipScreen != rhs.flipScreen {return false}
if lhs.units != rhs.units {return false}
if lhs.oled != rhs.oled {return false}
if lhs.displaymode != rhs.displaymode {return false}
if lhs.headingBold != rhs.headingBold {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -1822,6 +1899,15 @@ extension Config.DisplayConfig.OledType: SwiftProtobuf._ProtoNameProviding {
]
}
extension Config.DisplayConfig.DisplayMode: SwiftProtobuf._ProtoNameProviding {
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
0: .same(proto: "DEFAULT"),
1: .same(proto: "TWOCOLOR"),
2: .same(proto: "INVERTED"),
3: .same(proto: "COLOR"),
]
}
extension Config.LoRaConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = Config.protoMessageName + ".LoRaConfig"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [

View file

@ -211,6 +211,17 @@ struct LocalModuleConfig {
/// Clears the value of `audio`. Subsequent reads from it will return its default value.
mutating func clearAudio() {_uniqueStorage()._audio = nil}
///
/// The part of the config that is specific to the Remote Hardware module
var remoteHardware: ModuleConfig.RemoteHardwareConfig {
get {return _storage._remoteHardware ?? ModuleConfig.RemoteHardwareConfig()}
set {_uniqueStorage()._remoteHardware = newValue}
}
/// Returns true if `remoteHardware` has been explicitly set.
var hasRemoteHardware: Bool {return _storage._remoteHardware != nil}
/// Clears the value of `remoteHardware`. Subsequent reads from it will return its default value.
mutating func clearRemoteHardware() {_uniqueStorage()._remoteHardware = nil}
///
/// A version integer used to invalidate old save files when we make
/// incompatible changes This integer is set at build time and is private to
@ -369,6 +380,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
6: .same(proto: "telemetry"),
7: .standard(proto: "canned_message"),
9: .same(proto: "audio"),
10: .standard(proto: "remote_hardware"),
8: .same(proto: "version"),
]
@ -381,6 +393,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
var _telemetry: ModuleConfig.TelemetryConfig? = nil
var _cannedMessage: ModuleConfig.CannedMessageConfig? = nil
var _audio: ModuleConfig.AudioConfig? = nil
var _remoteHardware: ModuleConfig.RemoteHardwareConfig? = nil
var _version: UInt32 = 0
static let defaultInstance = _StorageClass()
@ -396,6 +409,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
_telemetry = source._telemetry
_cannedMessage = source._cannedMessage
_audio = source._audio
_remoteHardware = source._remoteHardware
_version = source._version
}
}
@ -424,6 +438,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
case 7: try { try decoder.decodeSingularMessageField(value: &_storage._cannedMessage) }()
case 8: try { try decoder.decodeSingularUInt32Field(value: &_storage._version) }()
case 9: try { try decoder.decodeSingularMessageField(value: &_storage._audio) }()
case 10: try { try decoder.decodeSingularMessageField(value: &_storage._remoteHardware) }()
default: break
}
}
@ -463,6 +478,9 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
try { if let v = _storage._audio {
try visitor.visitSingularMessageField(value: v, fieldNumber: 9)
} }()
try { if let v = _storage._remoteHardware {
try visitor.visitSingularMessageField(value: v, fieldNumber: 10)
} }()
}
try unknownFields.traverse(visitor: &visitor)
}
@ -480,6 +498,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
if _storage._telemetry != rhs_storage._telemetry {return false}
if _storage._cannedMessage != rhs_storage._cannedMessage {return false}
if _storage._audio != rhs_storage._audio {return false}
if _storage._remoteHardware != rhs_storage._remoteHardware {return false}
if _storage._version != rhs_storage._version {return false}
return true
}

View file

@ -154,6 +154,10 @@ enum HardwareModel: SwiftProtobuf.Enum {
/// New Heltec Wireless Stick Lite with ESP32-S3 CPU
case heltecWslV3 // = 44
///
/// New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU
case betafpv2400Tx // = 45
///
/// 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.
case privateHw // = 255
@ -196,6 +200,7 @@ enum HardwareModel: SwiftProtobuf.Enum {
case 42: self = .m5Stack
case 43: self = .heltecV3
case 44: self = .heltecWslV3
case 45: self = .betafpv2400Tx
case 255: self = .privateHw
default: self = .UNRECOGNIZED(rawValue)
}
@ -234,6 +239,7 @@ enum HardwareModel: SwiftProtobuf.Enum {
case .m5Stack: return 42
case .heltecV3: return 43
case .heltecWslV3: return 44
case .betafpv2400Tx: return 45
case .privateHw: return 255
case .UNRECOGNIZED(let i): return i
}
@ -277,6 +283,7 @@ extension HardwareModel: CaseIterable {
.m5Stack,
.heltecV3,
.heltecWslV3,
.betafpv2400Tx,
.privateHw,
]
}
@ -1772,6 +1779,28 @@ extension LogRecord.Level: CaseIterable {
#endif // swift(>=4.2)
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.
/// Last attempt to queue status, ErrorCode
var res: Int32 = 0
/// Free entries in the outgoing queue
var free: UInt32 = 0
/// Maximum entries in the outgoing queue
var maxlen: UInt32 = 0
/// What was mesh packet id that generated this response?
var meshPacketID: UInt32 = 0
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
}
///
/// Packets from the radio to the phone will appear on the fromRadio characteristic.
/// It will support READ and NOTIFY. When a new packet arrives the device will BLE notify?
@ -1895,6 +1924,15 @@ struct FromRadio {
set {_uniqueStorage()._payloadVariant = .channel(newValue)}
}
/// Queue status info
var queueStatus: QueueStatus {
get {
if case .queueStatus(let v)? = _storage._payloadVariant {return v}
return QueueStatus()
}
set {_uniqueStorage()._payloadVariant = .queueStatus(newValue)}
}
var unknownFields = SwiftProtobuf.UnknownStorage()
///
@ -1935,6 +1973,8 @@ struct FromRadio {
///
/// One packet is sent for each channel
case channel(Channel)
/// Queue status info
case queueStatus(QueueStatus)
#if !swift(>=4.1)
static func ==(lhs: FromRadio.OneOf_PayloadVariant, rhs: FromRadio.OneOf_PayloadVariant) -> Bool {
@ -1978,6 +2018,10 @@ struct FromRadio {
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
}()
default: return false
}
}
@ -2133,6 +2177,7 @@ 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 ToRadio: @unchecked Sendable {}
@ -2175,6 +2220,7 @@ extension HardwareModel: SwiftProtobuf._ProtoNameProviding {
42: .same(proto: "M5STACK"),
43: .same(proto: "HELTEC_V3"),
44: .same(proto: "HELTEC_WSL_V3"),
45: .same(proto: "BETAFPV_2400_TX"),
255: .same(proto: "PRIVATE_HW"),
]
}
@ -3245,6 +3291,56 @@ extension LogRecord.Level: SwiftProtobuf._ProtoNameProviding {
]
}
extension QueueStatus: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = "QueueStatus"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1: .same(proto: "res"),
2: .same(proto: "free"),
3: .same(proto: "maxlen"),
4: .standard(proto: "mesh_packet_id"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(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.decodeSingularInt32Field(value: &self.res) }()
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.free) }()
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.maxlen) }()
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.meshPacketID) }()
default: break
}
}
}
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
if self.res != 0 {
try visitor.visitSingularInt32Field(value: self.res, fieldNumber: 1)
}
if self.free != 0 {
try visitor.visitSingularUInt32Field(value: self.free, fieldNumber: 2)
}
if self.maxlen != 0 {
try visitor.visitSingularUInt32Field(value: self.maxlen, fieldNumber: 3)
}
if self.meshPacketID != 0 {
try visitor.visitSingularUInt32Field(value: self.meshPacketID, fieldNumber: 4)
}
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: QueueStatus, rhs: QueueStatus) -> Bool {
if lhs.res != rhs.res {return false}
if lhs.free != rhs.free {return false}
if lhs.maxlen != rhs.maxlen {return false}
if lhs.meshPacketID != rhs.meshPacketID {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
}
extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = "FromRadio"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
@ -3258,6 +3354,7 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
8: .same(proto: "rebooted"),
9: .same(proto: "moduleConfig"),
10: .same(proto: "channel"),
11: .same(proto: "queueStatus"),
]
fileprivate class _StorageClass {
@ -3397,6 +3494,19 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
_storage._payloadVariant = .channel(v)
}
}()
case 11: try {
var v: QueueStatus?
var hadOneofValue = false
if let current = _storage._payloadVariant {
hadOneofValue = true
if case .queueStatus(let m) = current {v = m}
}
try decoder.decodeSingularMessageField(value: &v)
if let v = v {
if hadOneofValue {try decoder.handleConflictingOneOf()}
_storage._payloadVariant = .queueStatus(v)
}
}()
default: break
}
}
@ -3449,6 +3559,10 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
guard case .channel(let v)? = _storage._payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 10)
}()
case .queueStatus?: try {
guard case .queueStatus(let v)? = _storage._payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 11)
}()
case nil: break
}
}

View file

@ -111,6 +111,16 @@ struct ModuleConfig {
set {payloadVariant = .audio(newValue)}
}
///
/// TODO: REPLACE
var remoteHardware: ModuleConfig.RemoteHardwareConfig {
get {
if case .remoteHardware(let v)? = payloadVariant {return v}
return ModuleConfig.RemoteHardwareConfig()
}
set {payloadVariant = .remoteHardware(newValue)}
}
var unknownFields = SwiftProtobuf.UnknownStorage()
///
@ -140,6 +150,9 @@ struct ModuleConfig {
///
/// TODO: REPLACE
case audio(ModuleConfig.AudioConfig)
///
/// TODO: REPLACE
case remoteHardware(ModuleConfig.RemoteHardwareConfig)
#if !swift(>=4.1)
static func ==(lhs: ModuleConfig.OneOf_PayloadVariant, rhs: ModuleConfig.OneOf_PayloadVariant) -> Bool {
@ -179,6 +192,10 @@ struct ModuleConfig {
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
}()
default: return false
}
}
@ -230,6 +247,22 @@ struct ModuleConfig {
init() {}
}
///
/// RemoteHardwareModule Config
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.
///
/// Whether the Module is enabled
var enabled: Bool = false
var unknownFields = SwiftProtobuf.UnknownStorage()
init() {}
}
///
/// Audio Config for codec2 voice
struct AudioConfig {
@ -844,6 +877,7 @@ extension ModuleConfig.CannedMessageConfig.InputEventChar: CaseIterable {
extension ModuleConfig: @unchecked Sendable {}
extension ModuleConfig.OneOf_PayloadVariant: @unchecked Sendable {}
extension ModuleConfig.MQTTConfig: @unchecked Sendable {}
extension ModuleConfig.RemoteHardwareConfig: @unchecked Sendable {}
extension ModuleConfig.AudioConfig: @unchecked Sendable {}
extension ModuleConfig.AudioConfig.Audio_Baud: @unchecked Sendable {}
extension ModuleConfig.SerialConfig: @unchecked Sendable {}
@ -870,6 +904,7 @@ extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
6: .same(proto: "telemetry"),
7: .standard(proto: "canned_message"),
8: .same(proto: "audio"),
9: .standard(proto: "remote_hardware"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@ -982,6 +1017,19 @@ extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .audio(v)
}
}()
case 9: try {
var v: ModuleConfig.RemoteHardwareConfig?
var hadOneofValue = false
if let current = self.payloadVariant {
hadOneofValue = true
if case .remoteHardware(let m) = current {v = m}
}
try decoder.decodeSingularMessageField(value: &v)
if let v = v {
if hadOneofValue {try decoder.handleConflictingOneOf()}
self.payloadVariant = .remoteHardware(v)
}
}()
default: break
}
}
@ -1025,6 +1073,10 @@ extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .audio(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 8)
}()
case .remoteHardware?: try {
guard case .remoteHardware(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 9)
}()
case nil: break
}
try unknownFields.traverse(visitor: &visitor)
@ -1099,6 +1151,38 @@ extension ModuleConfig.MQTTConfig: SwiftProtobuf.Message, SwiftProtobuf._Message
}
}
extension ModuleConfig.RemoteHardwareConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = ModuleConfig.protoMessageName + ".RemoteHardwareConfig"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1: .same(proto: "enabled"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(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.decodeSingularBoolField(value: &self.enabled) }()
default: break
}
}
}
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
if self.enabled != false {
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
}
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: ModuleConfig.RemoteHardwareConfig, rhs: ModuleConfig.RemoteHardwareConfig) -> Bool {
if lhs.enabled != rhs.enabled {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
}
extension ModuleConfig.AudioConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = ModuleConfig.protoMessageName + ".AudioConfig"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [

View file

@ -54,6 +54,10 @@ struct BluetoothConfig: View {
TextField("bluetooth.mode.fixedpin", text: $fixedPin)
.foregroundColor(.gray)
.onChange(of: fixedPin, perform: { value in
// Don't let the first character be 0 because it will get stripped when saving a UInt32
if fixedPin.first == "0" {
fixedPin = fixedPin.replacing("0", with: "")
}
//Require that pin is no more than 6 numbers and no less than 6 numbers
if fixedPin.utf8.count == pinLength {
shortPin = false

View file

@ -114,7 +114,7 @@ struct NetworkConfig: View {
network.wifiSsid = self.wifiSsid
network.wifiPsk = self.wifiPsk
network.ethEnabled = self.ethEnabled
network.ethMode = Config.NetworkConfig.EthMode.dhcp
//network.addressMode = Config.NetworkConfig.AddressMode.dhcp
let adminMessageId = bleManager.saveWiFiConfig(config: network, fromUser: node!.user!, toUser: node!.user!)
if adminMessageId > 0 {