Merge pull request #227 from meshtastic/2.0_Alpha_Launch

Device images, node list and info formatting cleanup, updated protobufs
This commit is contained in:
Garth Vander Houwen 2022-11-11 09:45:25 -08:00 committed by GitHub
commit 3eac729f0e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
93 changed files with 521 additions and 112 deletions

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Before After
Before After

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "play_store_icon_114px-2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "play_store_icon_114px-3.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "play_store_icon_114px-4.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "play_store_icon_114px-2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "play_store_icon_114px-3.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "play_store_icon_114px-4.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "2022-04-01T18-01-04.120Z-meshtastic_mesh_device_nano_edition_G1_P1 2.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "2022-04-01T18-01-04.120Z-meshtastic_mesh_device_nano_edition_G1_P1 1.jpg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "2022-04-01T18-01-04.120Z-meshtastic_mesh_device_nano_edition_G1_P1.jpg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "play_store_icon_114px-2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "play_store_icon_114px-3.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "play_store_icon_114px-4.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "play_store_icon_114px-2.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "play_store_icon_114px-3.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "play_store_icon_114px-4.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,17 +1,17 @@
{
"images" : [
{
"filename" : "techo-2.jpg",
"filename" : "RAK_DEV_KIT.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "techo-1.jpg",
"filename" : "RAK_DEV_KIT-1.jpg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "techo.jpg",
"filename" : "RAK_DEV_KIT-2.jpg",
"idiom" : "universal",
"scale" : "3x"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "meshtastic_mesh_device_station_edition_overview 2.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "meshtastic_mesh_device_station_edition_overview 1.jpg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "meshtastic_mesh_device_station_edition_overview.jpg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View file

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 244 KiB

After

Width:  |  Height:  |  Size: 244 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View file

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 2 MiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 MiB

After

Width:  |  Height:  |  Size: 2.1 MiB

Before After
Before After

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "LILYGO-TTGO-LoRa32-V2-1-1-6-Version-433-868-915Mhz-ESP32-LoRa-OLED-0-96.jpg_Q90.jpg_.webp.jpeg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "LILYGO-TTGO-LoRa32-V2-1-1-6-Version-433-868-915Mhz-ESP32-LoRa-OLED-0-96.jpg_Q90.jpg_.webp-1.jpeg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "LILYGO-TTGO-LoRa32-V2-1-1-6-Version-433-868-915Mhz-ESP32-LoRa-OLED-0-96.jpg_Q90.jpg_.webp-2.jpeg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "LILYGO-TTGO-SoftRF-T-Echo-NRF52840-LoRa-SX1262-433-868-915MHz-Wireless-Module-L76K-GPS-1.jpg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "LILYGO-TTGO-SoftRF-T-Echo-NRF52840-LoRa-SX1262-433-868-915MHz-Wireless-Module-L76K-GPS-1 1.jpg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "LILYGO-TTGO-SoftRF-T-Echo-NRF52840-LoRa-SX1262-433-868-915MHz-Wireless-Module-L76K-GPS-1 2.jpg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View file

@ -587,10 +587,13 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
MeshLogger.log(" MESH PACKET received for ATAK Forwarder App UNHANDLED \(try! decodedInfo.packet.jsonString())")
case .simulatorApp:
MeshLogger.log(" MESH PACKET received for Simulator App UNHANDLED \(try! decodedInfo.packet.jsonString())")
case .audioApp:
MeshLogger.log(" MESH PACKET received for Audio App UNHANDLED \(try! decodedInfo.packet.jsonString())")
case .UNRECOGNIZED(_):
MeshLogger.log(" MESH PACKET received for Other App UNHANDLED \(try! decodedInfo.packet.jsonString())")
case .max:
print("MAX PORT NUM OF 511")
}
// MARK: Check for an All / Broadcast User and delete it as a transition to multi channel

View file

@ -628,6 +628,10 @@ struct AdminMessage {
///
/// TODO: REPLACE
case cannedmsgConfig // = 6
///
/// TODO: REPLACE
case audioConfig // = 7
case UNRECOGNIZED(Int)
init() {
@ -643,6 +647,7 @@ struct AdminMessage {
case 4: self = .rangetestConfig
case 5: self = .telemetryConfig
case 6: self = .cannedmsgConfig
case 7: self = .audioConfig
default: self = .UNRECOGNIZED(rawValue)
}
}
@ -656,6 +661,7 @@ struct AdminMessage {
case .rangetestConfig: return 4
case .telemetryConfig: return 5
case .cannedmsgConfig: return 6
case .audioConfig: return 7
case .UNRECOGNIZED(let i): return i
}
}
@ -690,6 +696,7 @@ extension AdminMessage.ModuleConfigType: CaseIterable {
.rangetestConfig,
.telemetryConfig,
.cannedmsgConfig,
.audioConfig,
]
}
@ -1155,5 +1162,6 @@ extension AdminMessage.ModuleConfigType: SwiftProtobuf._ProtoNameProviding {
4: .same(proto: "RANGETEST_CONFIG"),
5: .same(proto: "TELEMETRY_CONFIG"),
6: .same(proto: "CANNEDMSG_CONFIG"),
7: .same(proto: "AUDIO_CONFIG"),
]
}

View file

@ -471,46 +471,6 @@ struct Config {
var unknownFields = SwiftProtobuf.UnknownStorage()
enum WiFiMode: SwiftProtobuf.Enum {
typealias RawValue = Int
///
/// This mode is used to connect to an external WiFi network
case client // = 0
///
/// In this mode the node will operate as an AP (and DHCP server)
case accessPoint // = 1
///
/// If set, the node AP will broadcast as a hidden SSID
case accessPointHidden // = 2
case UNRECOGNIZED(Int)
init() {
self = .client
}
init?(rawValue: Int) {
switch rawValue {
case 0: self = .client
case 1: self = .accessPoint
case 2: self = .accessPointHidden
default: self = .UNRECOGNIZED(rawValue)
}
}
var rawValue: Int {
switch self {
case .client: return 0
case .accessPoint: return 1
case .accessPointHidden: return 2
case .UNRECOGNIZED(let i): return i
}
}
}
enum EthMode: SwiftProtobuf.Enum {
typealias RawValue = Int
@ -610,6 +570,10 @@ struct Config {
/// Perferred display units
var units: Config.DisplayConfig.DisplayUnits = .metric
///
/// Override auto-detect in screen
var oled: Config.DisplayConfig.OledType = .oledAuto
var unknownFields = SwiftProtobuf.UnknownStorage()
///
@ -715,6 +679,48 @@ struct Config {
}
///
/// Override OLED outo detect with this if it fails.
enum OledType: SwiftProtobuf.Enum {
typealias RawValue = Int
///
/// Default / Auto
case oledAuto // = 0
///
/// Default / Auto
case oledSsd1306 // = 1
///
/// Default / Auto
case oledSh1106 // = 2
case UNRECOGNIZED(Int)
init() {
self = .oledAuto
}
init?(rawValue: Int) {
switch rawValue {
case 0: self = .oledAuto
case 1: self = .oledSsd1306
case 2: self = .oledSh1106
default: self = .UNRECOGNIZED(rawValue)
}
}
var rawValue: Int {
switch self {
case .oledAuto: return 0
case .oledSsd1306: return 1
case .oledSh1106: return 2
case .UNRECOGNIZED(let i): return i
}
}
}
init() {}
}
@ -1069,15 +1075,6 @@ extension Config.PositionConfig.PositionFlags: CaseIterable {
]
}
extension Config.NetworkConfig.WiFiMode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.NetworkConfig.WiFiMode] = [
.client,
.accessPoint,
.accessPointHidden,
]
}
extension Config.NetworkConfig.EthMode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.NetworkConfig.EthMode] = [
@ -1106,6 +1103,15 @@ extension Config.DisplayConfig.DisplayUnits: CaseIterable {
]
}
extension Config.DisplayConfig.OledType: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.DisplayConfig.OledType] = [
.oledAuto,
.oledSsd1306,
.oledSh1106,
]
}
extension Config.LoRaConfig.RegionCode: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var allCases: [Config.LoRaConfig.RegionCode] = [
@ -1159,12 +1165,12 @@ extension Config.PositionConfig: @unchecked Sendable {}
extension Config.PositionConfig.PositionFlags: @unchecked Sendable {}
extension Config.PowerConfig: @unchecked Sendable {}
extension Config.NetworkConfig: @unchecked Sendable {}
extension Config.NetworkConfig.WiFiMode: @unchecked Sendable {}
extension Config.NetworkConfig.EthMode: @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.LoRaConfig: @unchecked Sendable {}
extension Config.LoRaConfig.RegionCode: @unchecked Sendable {}
extension Config.LoRaConfig.ModemPreset: @unchecked Sendable {}
@ -1617,14 +1623,6 @@ extension Config.NetworkConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
}
}
extension Config.NetworkConfig.WiFiMode: SwiftProtobuf._ProtoNameProviding {
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
0: .same(proto: "CLIENT"),
1: .same(proto: "ACCESS_POINT"),
2: .same(proto: "ACCESS_POINT_HIDDEN"),
]
}
extension Config.NetworkConfig.EthMode: SwiftProtobuf._ProtoNameProviding {
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
0: .same(proto: "DHCP"),
@ -1691,6 +1689,7 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
4: .standard(proto: "compass_north_top"),
5: .standard(proto: "flip_screen"),
6: .same(proto: "units"),
7: .same(proto: "oled"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@ -1705,6 +1704,7 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
case 4: try { try decoder.decodeSingularBoolField(value: &self.compassNorthTop) }()
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) }()
default: break
}
}
@ -1729,6 +1729,9 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
if self.units != .metric {
try visitor.visitSingularEnumField(value: self.units, fieldNumber: 6)
}
if self.oled != .oledAuto {
try visitor.visitSingularEnumField(value: self.oled, fieldNumber: 7)
}
try unknownFields.traverse(visitor: &visitor)
}
@ -1739,6 +1742,7 @@ extension Config.DisplayConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImp
if lhs.compassNorthTop != rhs.compassNorthTop {return false}
if lhs.flipScreen != rhs.flipScreen {return false}
if lhs.units != rhs.units {return false}
if lhs.oled != rhs.oled {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
@ -1762,6 +1766,14 @@ extension Config.DisplayConfig.DisplayUnits: SwiftProtobuf._ProtoNameProviding {
]
}
extension Config.DisplayConfig.OledType: SwiftProtobuf._ProtoNameProviding {
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
0: .same(proto: "OLED_AUTO"),
1: .same(proto: "OLED_SSD1306"),
2: .same(proto: "OLED_SH1106"),
]
}
extension Config.LoRaConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = Config.protoMessageName + ".LoRaConfig"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [

View file

@ -200,6 +200,17 @@ struct LocalModuleConfig {
/// Clears the value of `cannedMessage`. Subsequent reads from it will return its default value.
mutating func clearCannedMessage() {_uniqueStorage()._cannedMessage = nil}
///
/// The part of the config that is specific to the Audio module
var audio: ModuleConfig.AudioConfig {
get {return _storage._audio ?? ModuleConfig.AudioConfig()}
set {_uniqueStorage()._audio = newValue}
}
/// Returns true if `audio` has been explicitly set.
var hasAudio: Bool {return _storage._audio != nil}
/// Clears the value of `audio`. Subsequent reads from it will return its default value.
mutating func clearAudio() {_uniqueStorage()._audio = 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
@ -357,6 +368,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
5: .standard(proto: "range_test"),
6: .same(proto: "telemetry"),
7: .standard(proto: "canned_message"),
9: .same(proto: "audio"),
8: .same(proto: "version"),
]
@ -368,6 +380,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
var _rangeTest: ModuleConfig.RangeTestConfig? = nil
var _telemetry: ModuleConfig.TelemetryConfig? = nil
var _cannedMessage: ModuleConfig.CannedMessageConfig? = nil
var _audio: ModuleConfig.AudioConfig? = nil
var _version: UInt32 = 0
static let defaultInstance = _StorageClass()
@ -382,6 +395,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
_rangeTest = source._rangeTest
_telemetry = source._telemetry
_cannedMessage = source._cannedMessage
_audio = source._audio
_version = source._version
}
}
@ -409,6 +423,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
case 6: try { try decoder.decodeSingularMessageField(value: &_storage._telemetry) }()
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) }()
default: break
}
}
@ -445,6 +460,9 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
if _storage._version != 0 {
try visitor.visitSingularUInt32Field(value: _storage._version, fieldNumber: 8)
}
try { if let v = _storage._audio {
try visitor.visitSingularMessageField(value: v, fieldNumber: 9)
} }()
}
try unknownFields.traverse(visitor: &visitor)
}
@ -461,6 +479,7 @@ extension LocalModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplem
if _storage._rangeTest != rhs_storage._rangeTest {return false}
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._version != rhs_storage._version {return false}
return true
}

View file

@ -90,6 +90,10 @@ enum HardwareModel: SwiftProtobuf.Enum {
/// B&Q Consulting Nano Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:nano
case nanoG1 // = 14
///
/// TODO: REPLACE
case tloraV211P8 // = 15
///
/// B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station
case stationG1 // = 25
@ -164,6 +168,7 @@ enum HardwareModel: SwiftProtobuf.Enum {
case 12: self = .lilygoTbeamS3Core
case 13: self = .rak11200
case 14: self = .nanoG1
case 15: self = .tloraV211P8
case 25: self = .stationG1
case 32: self = .loraRelayV1
case 33: self = .nrf52840Dk
@ -198,6 +203,7 @@ enum HardwareModel: SwiftProtobuf.Enum {
case .lilygoTbeamS3Core: return 12
case .rak11200: return 13
case .nanoG1: return 14
case .tloraV211P8: return 15
case .stationG1: return 25
case .loraRelayV1: return 32
case .nrf52840Dk: return 33
@ -237,6 +243,7 @@ extension HardwareModel: CaseIterable {
.lilygoTbeamS3Core,
.rak11200,
.nanoG1,
.tloraV211P8,
.stationG1,
.loraRelayV1,
.nrf52840Dk,
@ -1129,7 +1136,7 @@ struct MeshPacket {
///
/// The sending node number.
/// Note: Our crypto implementation uses this field as well.
/// See [crypto](/docs/developers/firmware/encryption) for details.
/// See [crypto](/docs/overview/encryption) for details.
/// FIXME - really should be fixed32 instead, this encoding only hurts the ble link though.
var from: UInt32 {
get {return _storage._from}
@ -1190,7 +1197,7 @@ struct MeshPacket {
/// needs to be unique for a few minutes (long enough to last for the length of
/// any ACK or the completion of a mesh broadcast flood).
/// Note: Our crypto implementation uses this id as well.
/// See [crypto](/docs/developers/firmware/encryption) for details.
/// See [crypto](/docs/overview/encryption) for details.
/// FIXME - really should be fixed32 instead, this encoding only
/// hurts the ble link though.
var id: UInt32 {
@ -2124,6 +2131,7 @@ extension HardwareModel: SwiftProtobuf._ProtoNameProviding {
12: .same(proto: "LILYGO_TBEAM_S3_CORE"),
13: .same(proto: "RAK11200"),
14: .same(proto: "NANO_G1"),
15: .same(proto: "TLORA_V2_1_1P8"),
25: .same(proto: "STATION_G1"),
32: .same(proto: "LORA_RELAY_V1"),
33: .same(proto: "NRF52840DK"),

View file

@ -101,6 +101,16 @@ struct ModuleConfig {
set {payloadVariant = .cannedMessage(newValue)}
}
///
/// TODO: REPLACE
var audio: ModuleConfig.AudioConfig {
get {
if case .audio(let v)? = payloadVariant {return v}
return ModuleConfig.AudioConfig()
}
set {payloadVariant = .audio(newValue)}
}
var unknownFields = SwiftProtobuf.UnknownStorage()
///
@ -127,6 +137,9 @@ struct ModuleConfig {
///
/// TODO: REPLACE
case cannedMessage(ModuleConfig.CannedMessageConfig)
///
/// TODO: REPLACE
case audio(ModuleConfig.AudioConfig)
#if !swift(>=4.1)
static func ==(lhs: ModuleConfig.OneOf_PayloadVariant, rhs: ModuleConfig.OneOf_PayloadVariant) -> Bool {
@ -162,6 +175,10 @@ struct ModuleConfig {
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
}()
default: return false
}
}
@ -213,6 +230,89 @@ struct ModuleConfig {
init() {}
}
///
/// Audio Config for codec2 voice
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.
///
/// Whether Audio is enabled
var codec2Enabled: Bool = false
///
/// ADC where Microphone is connected
var micChan: UInt32 = 0
///
/// DAC where Speaker is connected
var ampPin: UInt32 = 0
///
/// PTT Pin
var pttPin: UInt32 = 0
///
/// The audio sample rate to use for codec2
var bitrate: ModuleConfig.AudioConfig.Audio_Baud = .codec2Default
var unknownFields = SwiftProtobuf.UnknownStorage()
///
/// Baudrate for codec2 voice
enum Audio_Baud: SwiftProtobuf.Enum {
typealias RawValue = Int
case codec2Default // = 0
case codec23200 // = 1
case codec22400 // = 2
case codec21600 // = 3
case codec21400 // = 4
case codec21300 // = 5
case codec21200 // = 6
case codec2700 // = 7
case codec2700B // = 8
case UNRECOGNIZED(Int)
init() {
self = .codec2Default
}
init?(rawValue: Int) {
switch rawValue {
case 0: self = .codec2Default
case 1: self = .codec23200
case 2: self = .codec22400
case 3: self = .codec21600
case 4: self = .codec21400
case 5: self = .codec21300
case 6: self = .codec21200
case 7: self = .codec2700
case 8: self = .codec2700B
default: self = .UNRECOGNIZED(rawValue)
}
}
var rawValue: Int {
switch self {
case .codec2Default: return 0
case .codec23200: return 1
case .codec22400: return 2
case .codec21600: return 3
case .codec21400: return 4
case .codec21300: return 5
case .codec21200: return 6
case .codec2700: return 7
case .codec2700B: return 8
case .UNRECOGNIZED(let i): return i
}
}
}
init() {}
}
///
/// Serial Config
struct SerialConfig {
@ -627,6 +727,21 @@ struct ModuleConfig {
#if swift(>=4.2)
extension ModuleConfig.AudioConfig.Audio_Baud: CaseIterable {
// The compiler won't synthesize support with the UNRECOGNIZED case.
static var 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.
static var allCases: [ModuleConfig.SerialConfig.Serial_Baud] = [
@ -680,6 +795,8 @@ extension ModuleConfig.CannedMessageConfig.InputEventChar: CaseIterable {
extension ModuleConfig: @unchecked Sendable {}
extension ModuleConfig.OneOf_PayloadVariant: @unchecked Sendable {}
extension ModuleConfig.MQTTConfig: @unchecked Sendable {}
extension ModuleConfig.AudioConfig: @unchecked Sendable {}
extension ModuleConfig.AudioConfig.Audio_Baud: @unchecked Sendable {}
extension ModuleConfig.SerialConfig: @unchecked Sendable {}
extension ModuleConfig.SerialConfig.Serial_Baud: @unchecked Sendable {}
extension ModuleConfig.SerialConfig.Serial_Mode: @unchecked Sendable {}
@ -703,6 +820,7 @@ extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
5: .standard(proto: "range_test"),
6: .same(proto: "telemetry"),
7: .standard(proto: "canned_message"),
8: .same(proto: "audio"),
]
mutating func decodeMessage<D: SwiftProtobuf.Decoder>(decoder: inout D) throws {
@ -802,6 +920,19 @@ extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
self.payloadVariant = .cannedMessage(v)
}
}()
case 8: try {
var v: ModuleConfig.AudioConfig?
var hadOneofValue = false
if let current = self.payloadVariant {
hadOneofValue = true
if case .audio(let m) = current {v = m}
}
try decoder.decodeSingularMessageField(value: &v)
if let v = v {
if hadOneofValue {try decoder.handleConflictingOneOf()}
self.payloadVariant = .audio(v)
}
}()
default: break
}
}
@ -841,6 +972,10 @@ extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementat
guard case .cannedMessage(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 7)
}()
case .audio?: try {
guard case .audio(let v)? = self.payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 8)
}()
case nil: break
}
try unknownFields.traverse(visitor: &visitor)
@ -915,6 +1050,76 @@ extension ModuleConfig.MQTTConfig: SwiftProtobuf.Message, SwiftProtobuf._Message
}
}
extension ModuleConfig.AudioConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = ModuleConfig.protoMessageName + ".AudioConfig"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1: .standard(proto: "codec2_enabled"),
2: .standard(proto: "mic_chan"),
3: .standard(proto: "amp_pin"),
4: .standard(proto: "ptt_pin"),
5: .same(proto: "bitrate"),
]
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.codec2Enabled) }()
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.micChan) }()
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.ampPin) }()
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.pttPin) }()
case 5: try { try decoder.decodeSingularEnumField(value: &self.bitrate) }()
default: break
}
}
}
func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
if self.codec2Enabled != false {
try visitor.visitSingularBoolField(value: self.codec2Enabled, fieldNumber: 1)
}
if self.micChan != 0 {
try visitor.visitSingularUInt32Field(value: self.micChan, fieldNumber: 2)
}
if self.ampPin != 0 {
try visitor.visitSingularUInt32Field(value: self.ampPin, fieldNumber: 3)
}
if self.pttPin != 0 {
try visitor.visitSingularUInt32Field(value: self.pttPin, fieldNumber: 4)
}
if self.bitrate != .codec2Default {
try visitor.visitSingularEnumField(value: self.bitrate, fieldNumber: 5)
}
try unknownFields.traverse(visitor: &visitor)
}
static func ==(lhs: ModuleConfig.AudioConfig, rhs: ModuleConfig.AudioConfig) -> Bool {
if lhs.codec2Enabled != rhs.codec2Enabled {return false}
if lhs.micChan != rhs.micChan {return false}
if lhs.ampPin != rhs.ampPin {return false}
if lhs.pttPin != rhs.pttPin {return false}
if lhs.bitrate != rhs.bitrate {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
}
extension ModuleConfig.AudioConfig.Audio_Baud: SwiftProtobuf._ProtoNameProviding {
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
0: .same(proto: "CODEC2_DEFAULT"),
1: .same(proto: "CODEC2_3200"),
2: .same(proto: "CODEC2_2400"),
3: .same(proto: "CODEC2_1600"),
4: .same(proto: "CODEC2_1400"),
5: .same(proto: "CODEC2_1300"),
6: .same(proto: "CODEC2_1200"),
7: .same(proto: "CODEC2_700"),
8: .same(proto: "CODEC2_700B"),
]
}
extension ModuleConfig.SerialConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
static let protoMessageName: String = ModuleConfig.protoMessageName + ".SerialConfig"
static let _protobuf_nameMap: SwiftProtobuf._NameMap = [

View file

@ -82,6 +82,10 @@ enum PortNum: SwiftProtobuf.Enum {
/// Payload is a [Waypoint](/docs/developers/protobufs/api#waypoint) message
case waypointApp // = 8
/// Audio Payloads.
/// Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now
case audioApp // = 9
///
/// Provides a 'ping' service that replies to any packet it receives.
/// Also serves as a small example module.
@ -129,7 +133,7 @@ enum PortNum: SwiftProtobuf.Enum {
///
/// Private applications should use portnums >= 256.
/// To simplify initial development and testing you can use "PRIVATE_APP"
/// in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/Meshtastic-device/blob/master/bin/regen-protos.sh))
/// in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh))
case privateApp // = 256
///
@ -156,6 +160,7 @@ enum PortNum: SwiftProtobuf.Enum {
case 6: self = .adminApp
case 7: self = .textMessageCompressedApp
case 8: self = .waypointApp
case 9: self = .audioApp
case 32: self = .replyApp
case 33: self = .ipTunnelApp
case 64: self = .serialApp
@ -182,6 +187,7 @@ enum PortNum: SwiftProtobuf.Enum {
case .adminApp: return 6
case .textMessageCompressedApp: return 7
case .waypointApp: return 8
case .audioApp: return 9
case .replyApp: return 32
case .ipTunnelApp: return 33
case .serialApp: return 64
@ -213,6 +219,7 @@ extension PortNum: CaseIterable {
.adminApp,
.textMessageCompressedApp,
.waypointApp,
.audioApp,
.replyApp,
.ipTunnelApp,
.serialApp,
@ -246,6 +253,7 @@ extension PortNum: SwiftProtobuf._ProtoNameProviding {
6: .same(proto: "ADMIN_APP"),
7: .same(proto: "TEXT_MESSAGE_COMPRESSED_APP"),
8: .same(proto: "WAYPOINT_APP"),
9: .same(proto: "AUDIO_APP"),
32: .same(proto: "REPLY_APP"),
33: .same(proto: "IP_TUNNEL_APP"),
64: .same(proto: "SERIAL_APP"),

View file

@ -26,17 +26,11 @@ struct NodeDetail: View {
let hwModelString = node.user?.hwModel ?? "UNSET"
NavigationStack {
GeometryReader { bounds in
VStack {
if node.positions?.count ?? 0 > 0 {
let mostRecent = node.positions?.lastObject as! PositionEntity
if mostRecent.coordinate != nil {
let nodeCoordinatePosition = CLLocationCoordinate2D(latitude: mostRecent.latitude!, longitude: mostRecent.longitude!)
let regionBinding = Binding<MKCoordinateRegion>(
@ -45,9 +39,7 @@ struct NodeDetail: View {
},
set: { _ in }
)
ZStack {
let annotations = node.positions?.array as! [PositionEntity]
Map(coordinateRegion: regionBinding,
@ -73,7 +65,6 @@ struct NodeDetail: View {
}
} else {
HStack {
}
@ -81,25 +72,16 @@ struct NodeDetail: View {
}
ScrollView {
Divider()
if UIDevice.current.userInterfaceIdiom == .pad || UIDevice.current.userInterfaceIdiom == .mac {
HStack {
VStack(alignment: .center) {
CircleText(text: node.user?.shortName ?? "???", color: .accentColor, circleSize: 75, fontSize: 26)
}
Divider()
VStack {
if node.user != nil {
Image(hwModelString)
.resizable()
.aspectRatio(contentMode: .fill)
@ -112,7 +94,6 @@ struct NodeDetail: View {
}
}
if node.snr > 0 {
Divider()
VStack(alignment: .center) {
@ -127,23 +108,15 @@ struct NodeDetail: View {
.font(.largeTitle)
.foregroundColor(.gray)
.fixedSize()
}
}
if node.telemetries?.count ?? 0 >= 1 {
let mostRecent = node.telemetries?.lastObject as! TelemetryEntity
Divider()
VStack(alignment: .center) {
BatteryGauge(batteryLevel: Double(mostRecent.batteryLevel))
if mostRecent.voltage > 0 {
Text(String(format: "%.2f", mostRecent.voltage) + " V")
@ -154,7 +127,6 @@ struct NodeDetail: View {
}
.padding()
}
}
.padding()

View file

@ -1,8 +1,8 @@
//
// NodeList.swift
// MeshtasticApple
// Meshtastic
//
// Created by Garth Vander Houwen on 8/7/21.
// Copyright(c) Garth Vander Houwen 8/7/21.
//
// Abstract:
@ -42,24 +42,17 @@ struct NodeList: View {
let connected: Bool = (bleManager.connectedPeripheral != nil && bleManager.connectedPeripheral.num == node.num)
VStack(alignment: .leading) {
HStack {
CircleText(text: node.user?.shortName ?? "???", color: .blue).offset(y: 1).padding(.trailing, 5)
CircleText(text: node.user?.shortName ?? "???", color: .blue, circleSize: 52, fontSize: 16).offset(y: 1).padding(.trailing, 5)
.offset(x: -15)
if UIDevice.current.userInterfaceIdiom == .pad { Text(node.user?.longName ?? "Unknown").font(.headline)
.offset(x: -15)
} else {
Text(node.user?.longName ?? "Unknown").font(.title2).offset(x: -15)
}
Text(node.user?.longName ?? "Unknown").font(.headline).offset(x: -15)
}
.padding(.bottom, 5)
if connected {
HStack(alignment: .bottom) {
Image(systemName: "repeat.circle.fill").font(.title2)
.foregroundColor(.accentColor).symbolRenderingMode(.hierarchical)
if UIDevice.current.userInterfaceIdiom == .pad || UIDevice.current.userInterfaceIdiom == .mac {
Text("Currently Connected").font(.callout).foregroundColor(Color.accentColor)
} else {
Text("Currently Connected").font(.title3).foregroundColor(Color.accentColor)
}
Text("Currently Connected").font(.callout).foregroundColor(Color.accentColor)
}
.padding(.bottom, 2)
}
@ -72,11 +65,8 @@ struct NodeList: View {
let metersAway = nodeCoord.distance(from: myCoord)
Image(systemName: "lines.measurement.horizontal").font(.title3)
.foregroundColor(.accentColor).symbolRenderingMode(.hierarchical)
if UIDevice.current.userInterfaceIdiom == .pad || UIDevice.current.userInterfaceIdiom == .mac {
DistanceText(meters: metersAway).font(.subheadline).foregroundColor(.gray)
} else {
DistanceText(meters: metersAway).font(.title3).foregroundColor(.gray)
}
DistanceText(meters: metersAway).font(.subheadline).foregroundColor(.gray)
}
}
.padding(.bottom, 2)

View file

@ -112,7 +112,7 @@ struct TelemetryConfig: View {
Section(header: Text("Sensor Options")) {
Text("Supported I2C Connected sensors will be detected automatically, sensors are BMP280, BME280, BME680, MCP9808, INA219 and INA260.")
Text("Supported I2C Connected sensors will be detected automatically, sensors are BMP280, BME280, BME680, MCP9808, INA219, INA260, LPS22 and SHTC3.")
.font(.caption)
Toggle(isOn: $environmentMeasurementEnabled) {