Skip to content

Commit

Permalink
Merge pull request #755 from meshtastic/2.3.15
Browse files Browse the repository at this point in the history
2.3.15 Specific Changes
  • Loading branch information
garthvh authored Jul 7, 2024
2 parents 03f251a + 9db1692 commit 7c73f99
Show file tree
Hide file tree
Showing 10 changed files with 432 additions and 10 deletions.
8 changes: 4 additions & 4 deletions Meshtastic.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1421,7 +1421,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.3.12;
MARKETING_VERSION = 2.3.15;
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTS_MACCATALYST = YES;
Expand Down Expand Up @@ -1456,7 +1456,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.3.12;
MARKETING_VERSION = 2.3.15;
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTS_MACCATALYST = YES;
Expand Down Expand Up @@ -1488,7 +1488,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 2.3.12;
MARKETING_VERSION = 2.3.15;
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand Down Expand Up @@ -1521,7 +1521,7 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 2.3.12;
MARKETING_VERSION = 2.3.15;
PRODUCT_BUNDLE_IDENTIFIER = gvh.MeshtasticClient.Widgets;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
Expand Down
2 changes: 2 additions & 0 deletions Meshtastic/Helpers/BLEManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -864,6 +864,8 @@ class BLEManager: NSObject, CBPeripheralDelegate, MqttClientProxyManagerDelegate
Logger.services.info("MAX PORT NUM OF 511")
case .atakPlugin:
MeshLogger.log("🕸️ MESH PACKET received for ATAK Plugin App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")")
case .powerstressApp:
MeshLogger.log("🕸️ MESH PACKET received for Power Stress App UNHANDLED \((try? decodedInfo.packet.jsonString()) ?? "JSON Decode Failure")")
}

if decodedInfo.configCompleteID != 0 && decodedInfo.configCompleteID == configNonce {
Expand Down
48 changes: 48 additions & 0 deletions Meshtastic/Resources/DeviceHardware.json
Original file line number Diff line number Diff line change
Expand Up @@ -318,5 +318,53 @@
"architecture": "esp32-s3",
"activelySupported": true,
"displayName": "unPhone"
},
{
"hwModel": 48,
"hwModelSlug": "HELTEC_WIRELESS_TRACKER",
"platformioTarget": "tracksenger",
"architecture": "esp32-s3",
"activelySupported": true,
"displayName": "TrackSenger (small TFT)"
},
{
"hwModel": 48,
"hwModelSlug": "HELTEC_WIRELESS_TRACKER",
"platformioTarget": "tracksenger-lcd",
"architecture": "esp32-s3",
"activelySupported": true,
"displayName": "TrackSenger (big TFT)"
},
{
"hwModel": 48,
"hwModelSlug": "HELTEC_WIRELESS_TRACKER",
"platformioTarget": "tracksenger-oled",
"architecture": "esp32-s3",
"activelySupported": true,
"displayName": "TrackSenger (big OLED)"
},
{
"hwModel": 61,
"hwModelSlug": "CDEBYTE_EORA_S3",
"platformioTarget": "CDEBYTE_EoRa-S3",
"architecture": "esp32-s3",
"activelySupported": true,
"displayName": "EBYTE EoRa-S3"
},
{
"hwModel": 64,
"hwModelSlug": "RADIOMASTER_900_BANDIT_NANO",
"platformioTarget": "radiomaster_900_bandit_nano",
"architecture": "esp32",
"activelySupported": true,
"displayName": "RadioMaster 900 Bandit Nano"
},
{
"hwModel": 21,
"hwModelSlug": "WIO_WM1110",
"platformioTarget": "wio-tracker-wm1110",
"architecture": "nrf52840",
"activelySupported": true,
"displayName": "Seeed Wio WM1110 Tracker"
}
]
2 changes: 1 addition & 1 deletion Meshtastic/Views/Nodes/Helpers/Map/MapSettingsForm.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ struct MapSettingsForm: View {
@AppStorage("meshMapShowNodeHistory") private var nodeHistory = false
@AppStorage("meshMapShowRouteLines") private var routeLines = false
@AppStorage("enableMapConvexHull") private var convexHull = false
@AppStorage("enableMapWaypoints") private var waypoints = false
@AppStorage("enableMapWaypoints") private var waypoints = true
@Binding var traffic: Bool
@Binding var pointsOfInterest: Bool
@Binding var mapLayer: MapLayer
Expand Down
2 changes: 1 addition & 1 deletion Meshtastic/Views/Settings/AppLog.swift
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ struct AppLog: View {
}
}

@available(iOS 17.4, *)
@available(iOS 17.4, macOS 14.4, *)
extension AppLog {
@MainActor
private func searchAppLogs() async -> [OSLogEntryLog] {
Expand Down
2 changes: 1 addition & 1 deletion Meshtastic/Views/Settings/Firmware.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ struct Firmware: View {
@Environment(\.managedObjectContext) var context
@EnvironmentObject var bleManager: BLEManager
var node: NodeInfoEntity?
@State var minimumVersion = "2.3.9"
@State var minimumVersion = "2.3.14"
@State var version = ""
@State private var currentDevice: DeviceHardware?
@State private var latestStable: FirmwareRelease?
Expand Down
3 changes: 0 additions & 3 deletions MeshtasticProtobufs/Sources/meshtastic/config.pb.swift
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,6 @@ public struct Config {
/// 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

///
/// Description: Combination of both ROUTER and CLIENT. Not for mobile devices.
case routerClient // = 3

///
Expand Down
127 changes: 127 additions & 0 deletions MeshtasticProtobufs/Sources/meshtastic/mesh.pb.swift
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,23 @@ public enum HardwareModel: SwiftProtobuf.Enum {
/// Heltec Capsule Sensor V3 with ESP32-S3 CPU, Portable LoRa device that can replace GNSS modules or sensors
case heltecCapsuleSensorV3 // = 65

///
/// Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display
case heltecVisionMasterT190 // = 66

///
/// Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display
case heltecVisionMasterE213 // = 67

///
/// Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display
case heltecVisionMasterE290 // = 68

///
/// Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design,
/// specifically adapted for the Meshtatic project
case heltecMeshNodeT114 // = 69

///
/// ------------------------------------------------------------------------------------------------------------------------------------------
/// 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.
Expand Down Expand Up @@ -382,6 +399,10 @@ public enum HardwareModel: SwiftProtobuf.Enum {
case 63: self = .nrf52PromicroDiy
case 64: self = .radiomaster900BanditNano
case 65: self = .heltecCapsuleSensorV3
case 66: self = .heltecVisionMasterT190
case 67: self = .heltecVisionMasterE213
case 68: self = .heltecVisionMasterE290
case 69: self = .heltecMeshNodeT114
case 255: self = .privateHw
default: self = .UNRECOGNIZED(rawValue)
}
Expand Down Expand Up @@ -454,6 +475,10 @@ public enum HardwareModel: SwiftProtobuf.Enum {
case .nrf52PromicroDiy: return 63
case .radiomaster900BanditNano: return 64
case .heltecCapsuleSensorV3: return 65
case .heltecVisionMasterT190: return 66
case .heltecVisionMasterE213: return 67
case .heltecVisionMasterE290: return 68
case .heltecMeshNodeT114: return 69
case .privateHw: return 255
case .UNRECOGNIZED(let i): return i
}
Expand Down Expand Up @@ -531,6 +556,10 @@ extension HardwareModel: CaseIterable {
.nrf52PromicroDiy,
.radiomaster900BanditNano,
.heltecCapsuleSensorV3,
.heltecVisionMasterT190,
.heltecVisionMasterE213,
.heltecVisionMasterE290,
.heltecMeshNodeT114,
.privateHw,
]
}
Expand Down Expand Up @@ -2286,6 +2315,16 @@ public struct FromRadio {
set {_uniqueStorage()._payloadVariant = .mqttClientProxyMessage(newValue)}
}

///
/// File system manifest messages
public var fileInfo: FileInfo {
get {
if case .fileInfo(let v)? = _storage._payloadVariant {return v}
return FileInfo()
}
set {_uniqueStorage()._payloadVariant = .fileInfo(newValue)}
}

public var unknownFields = SwiftProtobuf.UnknownStorage()

///
Expand Down Expand Up @@ -2338,6 +2377,9 @@ public struct FromRadio {
///
/// MQTT Client Proxy Message (device sending to client / phone for publishing to MQTT)
case mqttClientProxyMessage(MqttClientProxyMessage)
///
/// File system manifest messages
case fileInfo(FileInfo)

#if !swift(>=4.1)
public static func ==(lhs: FromRadio.OneOf_PayloadVariant, rhs: FromRadio.OneOf_PayloadVariant) -> Bool {
Expand Down Expand Up @@ -2397,6 +2439,10 @@ public struct FromRadio {
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
}()
default: return false
}
}
Expand All @@ -2408,6 +2454,26 @@ public struct FromRadio {
fileprivate var _storage = _StorageClass.defaultInstance
}

///
/// Individual File info for the device
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.

///
/// The fully qualified path of the file
public var fileName: String = String()

///
/// The size of the file in bytes
public var sizeBytes: UInt32 = 0

public var unknownFields = SwiftProtobuf.UnknownStorage()

public init() {}
}

///
/// Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
/// Once the write completes the phone can assume it is handled.
Expand Down Expand Up @@ -2879,6 +2945,7 @@ extension LogRecord.Level: @unchecked Sendable {}
extension QueueStatus: @unchecked Sendable {}
extension FromRadio: @unchecked Sendable {}
extension FromRadio.OneOf_PayloadVariant: @unchecked Sendable {}
extension FileInfo: @unchecked Sendable {}
extension ToRadio: @unchecked Sendable {}
extension ToRadio.OneOf_PayloadVariant: @unchecked Sendable {}
extension Compressed: @unchecked Sendable {}
Expand Down Expand Up @@ -2964,6 +3031,10 @@ extension HardwareModel: SwiftProtobuf._ProtoNameProviding {
63: .same(proto: "NRF52_PROMICRO_DIY"),
64: .same(proto: "RADIOMASTER_900_BANDIT_NANO"),
65: .same(proto: "HELTEC_CAPSULE_SENSOR_V3"),
66: .same(proto: "HELTEC_VISION_MASTER_T190"),
67: .same(proto: "HELTEC_VISION_MASTER_E213"),
68: .same(proto: "HELTEC_VISION_MASTER_E290"),
69: .same(proto: "HELTEC_MESH_NODE_T114"),
255: .same(proto: "PRIVATE_HW"),
]
}
Expand Down Expand Up @@ -4229,6 +4300,7 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
12: .same(proto: "xmodemPacket"),
13: .same(proto: "metadata"),
14: .same(proto: "mqttClientProxyMessage"),
15: .same(proto: "fileInfo"),
]

fileprivate class _StorageClass {
Expand Down Expand Up @@ -4428,6 +4500,19 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
_storage._payloadVariant = .mqttClientProxyMessage(v)
}
}()
case 15: try {
var v: FileInfo?
var hadOneofValue = false
if let current = _storage._payloadVariant {
hadOneofValue = true
if case .fileInfo(let m) = current {v = m}
}
try decoder.decodeSingularMessageField(value: &v)
if let v = v {
if hadOneofValue {try decoder.handleConflictingOneOf()}
_storage._payloadVariant = .fileInfo(v)
}
}()
default: break
}
}
Expand Down Expand Up @@ -4496,6 +4581,10 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
guard case .mqttClientProxyMessage(let v)? = _storage._payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 14)
}()
case .fileInfo?: try {
guard case .fileInfo(let v)? = _storage._payloadVariant else { preconditionFailure() }
try visitor.visitSingularMessageField(value: v, fieldNumber: 15)
}()
case nil: break
}
}
Expand All @@ -4518,6 +4607,44 @@ extension FromRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementation
}
}

extension FileInfo: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
public static let protoMessageName: String = _protobuf_package + ".FileInfo"
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
1: .standard(proto: "file_name"),
2: .standard(proto: "size_bytes"),
]

public 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.decodeSingularStringField(value: &self.fileName) }()
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.sizeBytes) }()
default: break
}
}
}

public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
if !self.fileName.isEmpty {
try visitor.visitSingularStringField(value: self.fileName, fieldNumber: 1)
}
if self.sizeBytes != 0 {
try visitor.visitSingularUInt32Field(value: self.sizeBytes, fieldNumber: 2)
}
try unknownFields.traverse(visitor: &visitor)
}

public static func ==(lhs: FileInfo, rhs: FileInfo) -> Bool {
if lhs.fileName != rhs.fileName {return false}
if lhs.sizeBytes != rhs.sizeBytes {return false}
if lhs.unknownFields != rhs.unknownFields {return false}
return true
}
}

extension ToRadio: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
public static let protoMessageName: String = _protobuf_package + ".ToRadio"
public static let _protobuf_nameMap: SwiftProtobuf._NameMap = [
Expand Down
Loading

0 comments on commit 7c73f99

Please sign in to comment.