mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
* Bump version * Stop and resume DD Session Replay on app backgrounding and activation to prevent crashes * TAK server -> TestFlight (#1567) * Bump version * Message list performance fixes into 2.7.6 (#1475) * Remove extra want config call when adding a contact * App badge and unnecessary notification fixes (#1455) * - Fix for app badge not going to zero if a message arrives while you have that chat open - Fix for push notifications popping up when a message is received while that chat is open * Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message * Fix: Channels help grammer fix (#1452) * remove outdated TCP not available on Apple devices (#1450) * Update initial onboarding view * remove toggle gating for mac * Update crash reporting opt out in real time * Update onboarding text * Use mDNS text records for node name * TCP IP and port on the connection screen * Hide app icon chooser on mac * Infinite loop hang bugfixes and performance improvements for both `UserMessageList` and `ChannelMessageList` (#1465) * 2.7.5 Working Changes (#1460) * Remove extra want config call when adding a contact * App badge and unnecessary notification fixes (#1455) * - Fix for app badge not going to zero if a message arrives while you have that chat open - Fix for push notifications popping up when a message is received while that chat is open * Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message * Fix: Channels help grammer fix (#1452) * remove outdated TCP not available on Apple devices (#1450) * Update initial onboarding view * remove toggle gating for mac * Update crash reporting opt out in real time * Update onboarding text --------- Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> * UserEntity: add mostRecentMessage and unreadMessages with early exit when lastMessage is nil, and fetch 1 row (not N) otherwise * UserList: replace 5 slow calls to user.messageList with new fast calls * NodeList: always put the connected node at the top of list (if it matches the node filters) * ChannelEntity: add faster mostRecentPrivateMessage and unreadMessages which fetch 1 row (not N) * ChannelList: replace 5 calls to channel.allPrivateMessage with new fast calls * Fix incorrect appState.unreadDirectMessages calculations * MyInfoEntity: also fix unreadMessages count here to be fast, and use it for appState.unreadChannelMessages * UserMessageList: use @FetchRequest to prevent the N^2 behavior that was happening in calls to allPrivateMessages * Refactor ChannelEntityExtension and MyInfoEntityExtension to be more similar to UserEntityExtension * Remove SwiftUI-infinite-loop-causing `.id(redrawTapbacksTrigger)` in ChannelMessageList and UserMessageList (duplicate row ids) * MyInfoEntityExtension: exclude emoji tapbacks (which never get marked as read anyway) from unread message count * Add SaveChannelLinkData so MessageText and MeshtasticApp can use .sheet(item: ...) and avoid infinite loop hang due to Binding rebuild * ChannelMessageList and UserMessageList: switch to stable messageId for ForEach SwiftUI row identity * ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification * ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear * ChannelMessageList and UserMessageList: block spurious markMessagesAsRead when this View is not active --------- Co-authored-by: Garth Vander Houwen <garth@meshtastic.com> Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> * message-list-performance: revert scrolling changes (#1472) * Reverte0f0b4a0f7(ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear) * Revert "ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification" This reverts commitee1a7c4415. --------- Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu> * Explicitly set unmessagable, seems unnessary * Add back missing mesh map features * Fix: "Retrieving nodes" significantly slower after reconnect extracted from #1424 (#1477) * Fix: "Retrieving nodes" significantly slower after reconnect (#1424) The node database retrieval was calling context.save() for every single NodeInfo packet received (250 saves for 250 nodes). This caused severe performance degradation on reconnect when CoreData had accumulated state. Root Cause: - nodeInfoPacket() called context.save() immediately for each node - With 250 nodes, this meant 250 individual CoreData save operations - On first connection, CoreData is fresh and fast - On reconnect, CoreData has accumulated change tracking, undo management, and memory pressure, making each save progressively slower - This resulted in 10+ second retrieval times vs 1-2 seconds initially Solution: - Added deferSave parameter to nodeInfoPacket() function - During database retrieval (.retrievingDatabase state), defer all saves - Perform a single batch save when database retrieval completes (when NONCE_ONLY_DB configCompleteID is received) - This reduces 250 saves to 1 save Performance Impact: - Eliminates N individual saves during node database sync - Reduces database retrieval time back to 1-2 seconds on reconnect - Matches first-connection performance consistently Fixes #1424 * Revert *MessageListUnified files --------- Co-authored-by: Martin Bogomolni <martinbogo@gmail.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> * Hide route lines filter from mesh map * Mesh Map: fuzz imprecise locations so they're distinguishable and clickable at the highest zoom levels (#1478) Co-authored-by: Garth Vander Houwen <garth@meshtastic.com> * Fix bad merge * Update Meshtastic/Extensions/CoreData/UserEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Views/Nodes/Helpers/Map/MapContent/MeshMapContent.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Keep list of previous manual connections (#1484) * Keep list of previous manual connections * More descriptive manual connection rows * Merge fixes and new way to show IP on Connect view --------- Co-authored-by: Jake-B <jake-b@users.noreply.github.com> * Show who relayed messages (#1486) * Add identification for node that relayed text messages and add count for ammount of relayers of your message * Ack Relays * upsertPositionPacket: don't use future timestamps to set node's lastHeard (#1488) * R1 NEO * Neo * Update Meshtastic/Views/Settings/AppSettings.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove bad if * Git rid of extra environment variable * Update Meshtastic/Accessory/Transports/TCP/TCPTransport.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * MeshMap performance: quick wins (#1490) * MeshMap: change onMapCameraChange frequency to .onEnd so that zooming doesn't cause continuous SwiftUI reevaluation on every frame * MeshMapContent: factor out reducedPrecisionMapCircles into a separate function * MeshMapContent: when multiple reducedPrecisionCircles have the same (lat,lon,radius), just draw one (big perf boost in dense areas) * NodeMap performance improvements for high # positions history (#1480) * NodeMapContent: move Route Lines out of ForEach * NodeMapContent: move Convex Hull out of ForEach * NodeMapContent: Replace `position.nodePosition?` with `node` * NodeMapContent: drop unnecessary LazyVStack in showNodeHistory * NodeMapContent: hoist out nodeColorSwift * Move lineCoords, loraCoords calculations within showRouteLines, showConvexHull respectively * Hoist out repeated node.metadata?.positionFlags lookups / PositionFlags creation * NodeMapContent: remove unused @State * NodeMapSwiftUI: add NodeMapContentEquatableWrapper and NodeMapContentSignature to prevent frequent NodeMapContent recomputation and infinite render loops * NodeMapSwiftUI: disable animation during SwiftUI transactions * NodeMapContent: hoist nodeBorderColor and set allowsHitTesting(false) on history point views * NodeMapContent: prerenderHistoryPointCircle and prerenderHistoryPointArrow to avoid thousands of vector draw operations * NodeMapContent: Shared coordinate list for Route Lines and Convex Hull * NodeMapContent.prerenderHistoryPointArrow: add .frame(width: 16, height: 16) * Fix wantRangeTestPackets to correctly follow rangeTestConfig.enabled (#1489) * Fix interval drop down formatter * Clean up channel qr code functionality. * perferredPeripheralId fix * Set opt in * Retry once 5 second timer. dont throw the error * Queue for peripherals * Fix: hoplimit of dms would always fallback to hops away of the node even when configured hops was higher (#1495) * fix hops setting in dms * Fix hops for exchange position * Final fix * Don't favorite client base * Update device hardware * Prevent nil environment metrics * Bump datadog sdk * fix setting device telemetry enabled (#1515) * Update Muzi R1 Neo to actively supported * fix setting device telemetry enabled --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * Don't subscribe to mqtt topic if downlink is not on (#1501) * Dont sub if no downlink * moved reload mqtt connect config * Preview enabled in connected devices (#1509) * Update Muzi R1 Neo to actively supported * Preview enabled in connected devices * Fixing indentation * Fixing indentation --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * UpdateCoreData.updateAnyPacketFrom: mirror firmware's lastHeard/snr/rssi/hopsAway update logic from NodeDB::updateFrom (#1492) * `CLIENT_BASE` add-favorite/role-change confirmation dialog (#1493) * FavoriteNodeButton: refactor task out * AccessoryManager.connectedDeviceRole helper * FavoriteNodeButton: show confirmation dialog when a CLIENT_BASE is trying to add a favorite * addContactFromURL: add comment referencing upcoming change in https://github.com/meshtastic/firmware/pull/8495 * DeviceConfig: role picker: show a warning when selecting CLIENT_BASE, similar to warning shown for ROUTER * Adjust device configuration Client Base warning text * Compass view (#1521) * Added compass view * Added Compass View * Node colors in compass * Update Muzi R1 Neo to actively supported * Update PositionPopover.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Views/Helpers/CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Views/Helpers/CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove discovery queue * revert problematic retry functionalliy * format file * Update & improve zh-Hans translation (#1523) * Update Muzi R1 Neo to actively supported * update & improve zh-Hans translation rt --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * Update protobufs to 2.7.1 * Add long-turbo preset * Disable Range Test module when primary channel is public/unsecured (#1512) * Update Muzi R1 Neo to actively supported * Disable Range Test module when primary channel is public/unsecured Updated RangeTestConfig.swift to determine whether the primary channel (index 0) is operating without encryption or with a 1-byte minimal PSK. Disabled Range Test UI controls when on a public/default channel to prevent user interaction. Added safety enforcement in the save operation: Range Test enabled flag is automatically forced to false before sending updates to the device. Introduced a computed property isPrimaryChannelPublic following existing code patterns and security indicators (e.g., hexDescription PSK length). Matches the behavior implemented in the Android client for consistent policy across platforms. --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * Add new device images * Remove print statement, get rid of cut and paste error * Bump version * update the translations (#1540) update the translations * Don't alert (with sound: .default) when updating Live Activity (#1536) * Fix adding channels (#1532) * Full translation into Spanish (#1529) * tapback with any emoji (#1538) * Call clearStaleNodes at start of sendWantConfig (#1535) * NFC Tag contact (#1537) * Accessorymanager background discovery (#1542) * Don't add new BLE devices to the device list in the backgournd * Bump version * Update Meshtastic/MeshtasticApp.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/MeshtasticApp.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Revert "Full translation into Spanish (#1529)" (#1543) This reverts commitf25fdfb89f. * Revert "update the translations (#1540)" (#1544) This reverts commitcb2fd8cc15. * Revert "NFC Tag contact (#1537)" (#1545) This reverts commit5c22b8b6e0. * Update Muzi R1 Neo to actively supported * Revert "Update Muzi R1 Neo to actively supported" * 2.7.6 Working Changes (#1479) * Bump version * Message list performance fixes into 2.7.6 (#1475) * Remove extra want config call when adding a contact * App badge and unnecessary notification fixes (#1455) * - Fix for app badge not going to zero if a message arrives while you have that chat open - Fix for push notifications popping up when a message is received while that chat is open * Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message * Fix: Channels help grammer fix (#1452) * remove outdated TCP not available on Apple devices (#1450) * Update initial onboarding view * remove toggle gating for mac * Update crash reporting opt out in real time * Update onboarding text * Use mDNS text records for node name * TCP IP and port on the connection screen * Hide app icon chooser on mac * Infinite loop hang bugfixes and performance improvements for both `UserMessageList` and `ChannelMessageList` (#1465) * 2.7.5 Working Changes (#1460) * Remove extra want config call when adding a contact * App badge and unnecessary notification fixes (#1455) * - Fix for app badge not going to zero if a message arrives while you have that chat open - Fix for push notifications popping up when a message is received while that chat is open * Fix for cancelling notifications, works now. And scroll to bottom of conversation upon new message * Fix: Channels help grammer fix (#1452) * remove outdated TCP not available on Apple devices (#1450) * Update initial onboarding view * remove toggle gating for mac * Update crash reporting opt out in real time * Update onboarding text --------- Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> * UserEntity: add mostRecentMessage and unreadMessages with early exit when lastMessage is nil, and fetch 1 row (not N) otherwise * UserList: replace 5 slow calls to user.messageList with new fast calls * NodeList: always put the connected node at the top of list (if it matches the node filters) * ChannelEntity: add faster mostRecentPrivateMessage and unreadMessages which fetch 1 row (not N) * ChannelList: replace 5 calls to channel.allPrivateMessage with new fast calls * Fix incorrect appState.unreadDirectMessages calculations * MyInfoEntity: also fix unreadMessages count here to be fast, and use it for appState.unreadChannelMessages * UserMessageList: use @FetchRequest to prevent the N^2 behavior that was happening in calls to allPrivateMessages * Refactor ChannelEntityExtension and MyInfoEntityExtension to be more similar to UserEntityExtension * Remove SwiftUI-infinite-loop-causing `.id(redrawTapbacksTrigger)` in ChannelMessageList and UserMessageList (duplicate row ids) * MyInfoEntityExtension: exclude emoji tapbacks (which never get marked as read anyway) from unread message count * Add SaveChannelLinkData so MessageText and MeshtasticApp can use .sheet(item: ...) and avoid infinite loop hang due to Binding rebuild * ChannelMessageList and UserMessageList: switch to stable messageId for ForEach SwiftUI row identity * ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification * ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear * ChannelMessageList and UserMessageList: block spurious markMessagesAsRead when this View is not active --------- Co-authored-by: Garth Vander Houwen <garth@meshtastic.com> Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> * message-list-performance: revert scrolling changes (#1472) * Reverte0f0b4a0f7(ChannelMessageList and UserMessageList: scroll to bottom onFirstAppear) * Revert "ChannelMessageList and UserMessageList: debouncedScrollToBottom; keyboardWillShowNotification/keyboardDidShowNotification" This reverts commitee1a7c4415. --------- Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu> * Explicitly set unmessagable, seems unnessary * Add back missing mesh map features * Fix: "Retrieving nodes" significantly slower after reconnect extracted from #1424 (#1477) * Fix: "Retrieving nodes" significantly slower after reconnect (#1424) The node database retrieval was calling context.save() for every single NodeInfo packet received (250 saves for 250 nodes). This caused severe performance degradation on reconnect when CoreData had accumulated state. Root Cause: - nodeInfoPacket() called context.save() immediately for each node - With 250 nodes, this meant 250 individual CoreData save operations - On first connection, CoreData is fresh and fast - On reconnect, CoreData has accumulated change tracking, undo management, and memory pressure, making each save progressively slower - This resulted in 10+ second retrieval times vs 1-2 seconds initially Solution: - Added deferSave parameter to nodeInfoPacket() function - During database retrieval (.retrievingDatabase state), defer all saves - Perform a single batch save when database retrieval completes (when NONCE_ONLY_DB configCompleteID is received) - This reduces 250 saves to 1 save Performance Impact: - Eliminates N individual saves during node database sync - Reduces database retrieval time back to 1-2 seconds on reconnect - Matches first-connection performance consistently Fixes #1424 * Revert *MessageListUnified files --------- Co-authored-by: Martin Bogomolni <martinbogo@gmail.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> * Hide route lines filter from mesh map * Mesh Map: fuzz imprecise locations so they're distinguishable and clickable at the highest zoom levels (#1478) Co-authored-by: Garth Vander Houwen <garth@meshtastic.com> * Fix bad merge * Update Meshtastic/Extensions/CoreData/UserEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Views/Nodes/Helpers/Map/MapContent/MeshMapContent.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Extensions/CoreData/MyInfoEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Keep list of previous manual connections (#1484) * Keep list of previous manual connections * More descriptive manual connection rows * Merge fixes and new way to show IP on Connect view --------- Co-authored-by: Jake-B <jake-b@users.noreply.github.com> * Show who relayed messages (#1486) * Add identification for node that relayed text messages and add count for ammount of relayers of your message * Ack Relays * upsertPositionPacket: don't use future timestamps to set node's lastHeard (#1488) * R1 NEO * Neo * Update Meshtastic/Views/Settings/AppSettings.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove bad if * Git rid of extra environment variable * Update Meshtastic/Accessory/Transports/TCP/TCPTransport.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * MeshMap performance: quick wins (#1490) * MeshMap: change onMapCameraChange frequency to .onEnd so that zooming doesn't cause continuous SwiftUI reevaluation on every frame * MeshMapContent: factor out reducedPrecisionMapCircles into a separate function * MeshMapContent: when multiple reducedPrecisionCircles have the same (lat,lon,radius), just draw one (big perf boost in dense areas) * NodeMap performance improvements for high # positions history (#1480) * NodeMapContent: move Route Lines out of ForEach * NodeMapContent: move Convex Hull out of ForEach * NodeMapContent: Replace `position.nodePosition?` with `node` * NodeMapContent: drop unnecessary LazyVStack in showNodeHistory * NodeMapContent: hoist out nodeColorSwift * Move lineCoords, loraCoords calculations within showRouteLines, showConvexHull respectively * Hoist out repeated node.metadata?.positionFlags lookups / PositionFlags creation * NodeMapContent: remove unused @State * NodeMapSwiftUI: add NodeMapContentEquatableWrapper and NodeMapContentSignature to prevent frequent NodeMapContent recomputation and infinite render loops * NodeMapSwiftUI: disable animation during SwiftUI transactions * NodeMapContent: hoist nodeBorderColor and set allowsHitTesting(false) on history point views * NodeMapContent: prerenderHistoryPointCircle and prerenderHistoryPointArrow to avoid thousands of vector draw operations * NodeMapContent: Shared coordinate list for Route Lines and Convex Hull * NodeMapContent.prerenderHistoryPointArrow: add .frame(width: 16, height: 16) * Fix wantRangeTestPackets to correctly follow rangeTestConfig.enabled (#1489) * Fix interval drop down formatter * Clean up channel qr code functionality. * perferredPeripheralId fix * Set opt in * Retry once 5 second timer. dont throw the error * Queue for peripherals * Fix: hoplimit of dms would always fallback to hops away of the node even when configured hops was higher (#1495) * fix hops setting in dms * Fix hops for exchange position * Final fix * Don't favorite client base * Update device hardware * Prevent nil environment metrics * Bump datadog sdk * fix setting device telemetry enabled (#1515) * Update Muzi R1 Neo to actively supported * fix setting device telemetry enabled --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * Don't subscribe to mqtt topic if downlink is not on (#1501) * Dont sub if no downlink * moved reload mqtt connect config * Preview enabled in connected devices (#1509) * Update Muzi R1 Neo to actively supported * Preview enabled in connected devices * Fixing indentation * Fixing indentation --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * UpdateCoreData.updateAnyPacketFrom: mirror firmware's lastHeard/snr/rssi/hopsAway update logic from NodeDB::updateFrom (#1492) * `CLIENT_BASE` add-favorite/role-change confirmation dialog (#1493) * FavoriteNodeButton: refactor task out * AccessoryManager.connectedDeviceRole helper * FavoriteNodeButton: show confirmation dialog when a CLIENT_BASE is trying to add a favorite * addContactFromURL: add comment referencing upcoming change in https://github.com/meshtastic/firmware/pull/8495 * DeviceConfig: role picker: show a warning when selecting CLIENT_BASE, similar to warning shown for ROUTER * Adjust device configuration Client Base warning text * Compass view (#1521) * Added compass view * Added Compass View * Node colors in compass * Update Muzi R1 Neo to actively supported * Update PositionPopover.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Views/Helpers/CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Views/Helpers/CompassView.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove discovery queue * revert problematic retry functionalliy * format file * Update & improve zh-Hans translation (#1523) * Update Muzi R1 Neo to actively supported * update & improve zh-Hans translation rt --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * Update protobufs to 2.7.1 * Add long-turbo preset * Disable Range Test module when primary channel is public/unsecured (#1512) * Update Muzi R1 Neo to actively supported * Disable Range Test module when primary channel is public/unsecured Updated RangeTestConfig.swift to determine whether the primary channel (index 0) is operating without encryption or with a 1-byte minimal PSK. Disabled Range Test UI controls when on a public/default channel to prevent user interaction. Added safety enforcement in the save operation: Range Test enabled flag is automatically forced to false before sending updates to the device. Introduced a computed property isPrimaryChannelPublic following existing code patterns and security indicators (e.g., hexDescription PSK length). Matches the behavior implemented in the Android client for consistent policy across platforms. --------- Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> * Add new device images * Remove print statement, get rid of cut and paste error --------- Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu> Co-authored-by: Martin Bogomolni <martinbogo@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: jake-b <1012393+jake-b@users.noreply.github.com> Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Charles Pinesky <25388414+Vaidios@users.noreply.github.com> Co-authored-by: Radio <35003866+radiolee@users.noreply.github.com> Co-authored-by: Jason Houk <dubsectordevelopment@gmail.com> * Initial TAK Server implementation for IOS based TAK clients This is my initial implementation for a TAK Server running inside Meshtastic-Apple. * Update marketing version to 2.7.7 * Update MessageText.swift * Update Meshtastic/Helpers/TAK/CoTMessage.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Helpers/TAK/TAKCertificateManager.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactor TAKServerConfig file importer to conditionally allow p12 or pem types; update CoTMessage parsing method name for clarity; enhance mTLS logging in TAKServerManager. --------- Co-authored-by: Garth Vander Houwen <garthvh@yahoo.com> Co-authored-by: Garth Vander Houwen <garth@meshtastic.com> Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu> Co-authored-by: Martin Bogomolni <martinbogo@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: jake-b <1012393+jake-b@users.noreply.github.com> Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Charles Pinesky <25388414+Vaidios@users.noreply.github.com> Co-authored-by: Radio <35003866+radiolee@users.noreply.github.com> Co-authored-by: Jason Houk <dubsectordevelopment@gmail.com> Co-authored-by: MGJ <62177301+MGJ520@users.noreply.github.com> Co-authored-by: Alvaro Samudio <alvarosamudio@protonmail.com> Co-authored-by: Mathew Kamkar <578302+matkam@users.noreply.github.com> Co-authored-by: niccellular <79813408+niccellular@users.noreply.github.com> * Fix * Add localization strings * CoreData Writes wrapped in an Actor (#1569) * MeshPackets.swift into an actor and make async * Move upserts in UpdateCoreData to the MeshPackets actor * Update Meshtastic/Views/Settings/AppSettings.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update Meshtastic/Persistence/UpdateCoreData.swift Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Jake-B <jake-b@users.noreply.github.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Refactor channel packet sending to use async/await pattern * Fix call * `// swiftlint:disable` overrides for TAK * Revert "Fix call" This reverts commit097ddbd43f. * Move CoreData operations onto background actor * Fix for discovery reconnect issues (#1574) Co-authored-by: Jake-B <jake-b@users.noreply.github.com> * Remove specific TAK client references Be TAK client neutral. * Update TAKDataPackageGenerator.swift Add client cert to datapackage generation for TAK clients who require it. (TAK Aware afaik) * Ble improvements (#1583) * Fix for discovery reconnect issues * Allow disconnect earlier in the connection process --------- Co-authored-by: Jake-B <jake-b@users.noreply.github.com> * Update linker flag for ios 17 crash * Update protobufs * Ru/translation (#1571) * Russian localization is 50% * Russian localization is 100% * fix Taiwan language Co-authored-by: Sergei K <svk@svk.su> Co-authored-by: Dmitriy Petrov <kenzot.fpv@gmail.com> * Fix connectToPreferredDevice parameter type to resolve compilation error (#1590) * Initial plan * Fix connectToPreferredDevice signature to accept optional device parameter Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com> * Fix TAK certificate security and storage consistency Address multiple certificate management issues identified in code review: - Fix server P12 storage/retrieval inconsistency: getActiveServerP12Data() now reads from Keychain instead of UserDefaults, matching where importServerIdentity() stores the data - Improve client P12 security: migrate storage from UserDefaults to Keychain to protect certificate data from unauthorized access and backups - Fix Keychain cleanup: clearCustomCertificateData() now properly deletes both server and client P12 data from Keychain during reset - Add force-unwrap safety: replace sec_identity_create() force-unwrap with guard statement to prevent crashes, throwing TAKServerError.tlsConfigurationFailed instead - Remove unused backup certificates: delete Resources/Certificates/backup/ folder to reduce app bundle size and avoid confusion about which certificates are active All certificate data (both server and client P12 files and passwords) now consistently use Keychain storage for improved security and proper cleanup during resets. * Update TAKDataPackageGenerator.swift Fix TAKAware's data package ingestion error. This was due to us generating a DP with certs in a cert subdirectory. However TAKAware's parser did not check subdirectories. 3 areas changed in TAKDataPackageGenerator.swift: 1. Removed certs/ subdirectory creation (old lines 50-52) — the pref file and certificates are now written directly to tempDir instead of certsDir 2. Files written to tempDir instead of certsDir — the pref file (line 72), truststore (line 80), and client cert (line 89) all go to the package root 3. Manifest zipEntry values flattened (lines 216-218) — changed from certs\filename to just filename Pref file cert/ paths left unchanged (lines 170, 172) — these are ATAK convention for the client's internal cert store path, not zip-relative paths. SwiftTAK strips them to just the filename anyway, and ATAK/iTAK interpret them the same way. The resulting zip structure will now be: Meshtastic_TAK_Server/ ├── manifest.xml ├── meshtastic-server.pref ├── truststore.p12 └── DeviceName.p12 This matches the flat structure used by all passing SwiftTAK test packages (tak-all-top.zip, tak-subfolder-all-top.zip, etc.). * Fix copilot identified issues #10 — manifest.xml: Removed certs\ prefix from zip entry paths so they match the actual flat file structure. #11 — taky-server.pref: Fixed cert/ path prefixes to match the flat structure, and replaced hardcoded atakatak passwords with YOURPASSWORD placeholders. #12 — TAKServerConfig.swift:41: Replaced force-unwraps (UTType(filenameExtension: "p12")!) with nil-coalescing fallbacks (?? .pkcs12 and ?? .plainText). #13 — TAKConnection.swift:26: Removed the unused bufferTrimSize constant. --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Gnome Adrift <646322+gnomeadrift@users.noreply.github.com> Co-authored-by: Zain Kergaye <62440012+ZainKergaye@users.noreply.github.com> Co-authored-by: NillRudd <102033730+NillRudd@users.noreply.github.com> Co-authored-by: Jake-B <jake-b@users.noreply.github.com> Co-authored-by: Mike Robbins <mrobbins@alum.mit.edu> Co-authored-by: Martin Bogomolni <martinbogo@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: jake-b <1012393+jake-b@users.noreply.github.com> Co-authored-by: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Co-authored-by: Jonathan Bennett <jbennett@incomsystems.biz> Co-authored-by: Charles Pinesky <25388414+Vaidios@users.noreply.github.com> Co-authored-by: Radio <35003866+radiolee@users.noreply.github.com> Co-authored-by: Jason Houk <dubsectordevelopment@gmail.com> Co-authored-by: MGJ <62177301+MGJ520@users.noreply.github.com> Co-authored-by: Alvaro Samudio <alvarosamudio@protonmail.com> Co-authored-by: Mathew Kamkar <578302+matkam@users.noreply.github.com> Co-authored-by: niccellular <79813408+niccellular@users.noreply.github.com> Co-authored-by: Dmitriy Q <40627944+krotesk@users.noreply.github.com> Co-authored-by: Sergei K <svk@svk.su> Co-authored-by: Dmitriy Petrov <kenzot.fpv@gmail.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: garthvh <1795163+garthvh@users.noreply.github.com>
2769 lines
108 KiB
Swift
2769 lines
108 KiB
Swift
// DO NOT EDIT.
|
|
// swift-format-ignore-file
|
|
// swiftlint:disable all
|
|
//
|
|
// Generated by the Swift generator plugin for the protocol buffer compiler.
|
|
// Source: meshtastic/module_config.proto
|
|
//
|
|
// For information on using the generated types, please see the documentation:
|
|
// https://github.com/apple/swift-protobuf/
|
|
|
|
import SwiftProtobuf
|
|
|
|
// If the compiler emits an error on this type, it is because this file
|
|
// was generated by a version of the `protoc` Swift plug-in that is
|
|
// incompatible with the version of SwiftProtobuf to which you are linking.
|
|
// Please ensure that you are building against the same version of the API
|
|
// that was used to generate this file.
|
|
fileprivate struct _GeneratedWithProtocGenSwiftVersion: SwiftProtobuf.ProtobufAPIVersionCheck {
|
|
struct _2: SwiftProtobuf.ProtobufAPIVersion_2 {}
|
|
typealias Version = _2
|
|
}
|
|
|
|
public enum RemoteHardwarePinType: SwiftProtobuf.Enum, Swift.CaseIterable {
|
|
public typealias RawValue = Int
|
|
|
|
///
|
|
/// Unset/unused
|
|
case unknown // = 0
|
|
|
|
///
|
|
/// GPIO pin can be read (if it is high / low)
|
|
case digitalRead // = 1
|
|
|
|
///
|
|
/// GPIO pin can be written to (high / low)
|
|
case digitalWrite // = 2
|
|
case UNRECOGNIZED(Int)
|
|
|
|
public init() {
|
|
self = .unknown
|
|
}
|
|
|
|
public init?(rawValue: Int) {
|
|
switch rawValue {
|
|
case 0: self = .unknown
|
|
case 1: self = .digitalRead
|
|
case 2: self = .digitalWrite
|
|
default: self = .UNRECOGNIZED(rawValue)
|
|
}
|
|
}
|
|
|
|
public var rawValue: Int {
|
|
switch self {
|
|
case .unknown: return 0
|
|
case .digitalRead: return 1
|
|
case .digitalWrite: return 2
|
|
case .UNRECOGNIZED(let i): return i
|
|
}
|
|
}
|
|
|
|
// The compiler won't synthesize support with the UNRECOGNIZED case.
|
|
public static let allCases: [RemoteHardwarePinType] = [
|
|
.unknown,
|
|
.digitalRead,
|
|
.digitalWrite,
|
|
]
|
|
|
|
}
|
|
|
|
///
|
|
/// Module Config
|
|
public struct ModuleConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var payloadVariant: ModuleConfig.OneOf_PayloadVariant? = nil
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var mqtt: ModuleConfig.MQTTConfig {
|
|
get {
|
|
if case .mqtt(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.MQTTConfig()
|
|
}
|
|
set {payloadVariant = .mqtt(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var serial: ModuleConfig.SerialConfig {
|
|
get {
|
|
if case .serial(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.SerialConfig()
|
|
}
|
|
set {payloadVariant = .serial(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var externalNotification: ModuleConfig.ExternalNotificationConfig {
|
|
get {
|
|
if case .externalNotification(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.ExternalNotificationConfig()
|
|
}
|
|
set {payloadVariant = .externalNotification(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var storeForward: ModuleConfig.StoreForwardConfig {
|
|
get {
|
|
if case .storeForward(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.StoreForwardConfig()
|
|
}
|
|
set {payloadVariant = .storeForward(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var rangeTest: ModuleConfig.RangeTestConfig {
|
|
get {
|
|
if case .rangeTest(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.RangeTestConfig()
|
|
}
|
|
set {payloadVariant = .rangeTest(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var telemetry: ModuleConfig.TelemetryConfig {
|
|
get {
|
|
if case .telemetry(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.TelemetryConfig()
|
|
}
|
|
set {payloadVariant = .telemetry(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var cannedMessage: ModuleConfig.CannedMessageConfig {
|
|
get {
|
|
if case .cannedMessage(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.CannedMessageConfig()
|
|
}
|
|
set {payloadVariant = .cannedMessage(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var audio: ModuleConfig.AudioConfig {
|
|
get {
|
|
if case .audio(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.AudioConfig()
|
|
}
|
|
set {payloadVariant = .audio(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var remoteHardware: ModuleConfig.RemoteHardwareConfig {
|
|
get {
|
|
if case .remoteHardware(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.RemoteHardwareConfig()
|
|
}
|
|
set {payloadVariant = .remoteHardware(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var neighborInfo: ModuleConfig.NeighborInfoConfig {
|
|
get {
|
|
if case .neighborInfo(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.NeighborInfoConfig()
|
|
}
|
|
set {payloadVariant = .neighborInfo(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var ambientLighting: ModuleConfig.AmbientLightingConfig {
|
|
get {
|
|
if case .ambientLighting(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.AmbientLightingConfig()
|
|
}
|
|
set {payloadVariant = .ambientLighting(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var detectionSensor: ModuleConfig.DetectionSensorConfig {
|
|
get {
|
|
if case .detectionSensor(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.DetectionSensorConfig()
|
|
}
|
|
set {payloadVariant = .detectionSensor(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var paxcounter: ModuleConfig.PaxcounterConfig {
|
|
get {
|
|
if case .paxcounter(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.PaxcounterConfig()
|
|
}
|
|
set {payloadVariant = .paxcounter(newValue)}
|
|
}
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var statusmessage: ModuleConfig.StatusMessageConfig {
|
|
get {
|
|
if case .statusmessage(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.StatusMessageConfig()
|
|
}
|
|
set {payloadVariant = .statusmessage(newValue)}
|
|
}
|
|
|
|
///
|
|
/// Traffic management module config for mesh network optimization
|
|
public var trafficManagement: ModuleConfig.TrafficManagementConfig {
|
|
get {
|
|
if case .trafficManagement(let v)? = payloadVariant {return v}
|
|
return ModuleConfig.TrafficManagementConfig()
|
|
}
|
|
set {payloadVariant = .trafficManagement(newValue)}
|
|
}
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public enum OneOf_PayloadVariant: Equatable, Sendable {
|
|
///
|
|
/// TODO: REPLACE
|
|
case mqtt(ModuleConfig.MQTTConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case serial(ModuleConfig.SerialConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case externalNotification(ModuleConfig.ExternalNotificationConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case storeForward(ModuleConfig.StoreForwardConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case rangeTest(ModuleConfig.RangeTestConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case telemetry(ModuleConfig.TelemetryConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case cannedMessage(ModuleConfig.CannedMessageConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case audio(ModuleConfig.AudioConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case remoteHardware(ModuleConfig.RemoteHardwareConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case neighborInfo(ModuleConfig.NeighborInfoConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case ambientLighting(ModuleConfig.AmbientLightingConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case detectionSensor(ModuleConfig.DetectionSensorConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case paxcounter(ModuleConfig.PaxcounterConfig)
|
|
///
|
|
/// TODO: REPLACE
|
|
case statusmessage(ModuleConfig.StatusMessageConfig)
|
|
///
|
|
/// Traffic management module config for mesh network optimization
|
|
case trafficManagement(ModuleConfig.TrafficManagementConfig)
|
|
|
|
}
|
|
|
|
///
|
|
/// MQTT Client Config
|
|
public struct MQTTConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// If a meshtastic node is able to reach the internet it will normally attempt to gateway any channels that are marked as
|
|
/// is_uplink_enabled or is_downlink_enabled.
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// The server to use for our MQTT global message gateway feature.
|
|
/// If not set, the default server will be used
|
|
public var address: String = String()
|
|
|
|
///
|
|
/// MQTT username to use (most useful for a custom MQTT server).
|
|
/// If using a custom server, this will be honoured even if empty.
|
|
/// If using the default server, this will only be honoured if set, otherwise the device will use the default username
|
|
public var username: String = String()
|
|
|
|
///
|
|
/// MQTT password to use (most useful for a custom MQTT server).
|
|
/// If using a custom server, this will be honoured even if empty.
|
|
/// If using the default server, this will only be honoured if set, otherwise the device will use the default password
|
|
public var password: String = String()
|
|
|
|
///
|
|
/// Whether to send encrypted or decrypted packets to MQTT.
|
|
/// This parameter is only honoured if you also set server
|
|
/// (the default official mqtt.meshtastic.org server can handle encrypted packets)
|
|
/// Decrypted packets may be useful for external systems that want to consume meshtastic packets
|
|
public var encryptionEnabled: Bool = false
|
|
|
|
///
|
|
/// Whether to send / consume json packets on MQTT
|
|
public var jsonEnabled: Bool = false
|
|
|
|
///
|
|
/// If true, we attempt to establish a secure connection using TLS
|
|
public var tlsEnabled: Bool = false
|
|
|
|
///
|
|
/// The root topic to use for MQTT messages. Default is "msh".
|
|
/// This is useful if you want to use a single MQTT server for multiple meshtastic networks and separate them via ACLs
|
|
public var root: String = String()
|
|
|
|
///
|
|
/// If true, we can use the connected phone / client to proxy messages to MQTT instead of a direct connection
|
|
public var proxyToClientEnabled: Bool = false
|
|
|
|
///
|
|
/// If true, we will periodically report unencrypted information about our node to a map via MQTT
|
|
public var mapReportingEnabled: Bool = false
|
|
|
|
///
|
|
/// Settings for reporting information about our node to a map via MQTT
|
|
public var mapReportSettings: ModuleConfig.MapReportSettings {
|
|
get {return _mapReportSettings ?? ModuleConfig.MapReportSettings()}
|
|
set {_mapReportSettings = newValue}
|
|
}
|
|
/// Returns true if `mapReportSettings` has been explicitly set.
|
|
public var hasMapReportSettings: Bool {return self._mapReportSettings != nil}
|
|
/// Clears the value of `mapReportSettings`. Subsequent reads from it will return its default value.
|
|
public mutating func clearMapReportSettings() {self._mapReportSettings = nil}
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
|
|
fileprivate var _mapReportSettings: ModuleConfig.MapReportSettings? = nil
|
|
}
|
|
|
|
///
|
|
/// Settings for reporting unencrypted information about our node to a map via MQTT
|
|
public struct MapReportSettings: Sendable {
|
|
// 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 often we should report our info to the map (in seconds)
|
|
public var publishIntervalSecs: UInt32 = 0
|
|
|
|
///
|
|
/// Bits of precision for the location sent (default of 32 is full precision).
|
|
public var positionPrecision: UInt32 = 0
|
|
|
|
///
|
|
/// Whether we have opted-in to report our location to the map
|
|
public var shouldReportLocation: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// RemoteHardwareModule Config
|
|
public struct RemoteHardwareConfig: Sendable {
|
|
// 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
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// Whether the Module allows consumers to read / write to pins not defined in available_pins
|
|
public var allowUndefinedPinAccess: Bool = false
|
|
|
|
///
|
|
/// Exposes the available pins to the mesh for reading and writing
|
|
public var availablePins: [RemoteHardwarePin] = []
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// NeighborInfoModule Config
|
|
public struct NeighborInfoConfig: Sendable {
|
|
// 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
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// Interval in seconds of how often we should try to send our
|
|
/// Neighbor Info (minimum is 14400, i.e., 4 hours)
|
|
public var updateInterval: UInt32 = 0
|
|
|
|
///
|
|
/// Whether in addition to sending it to MQTT and the PhoneAPI, our NeighborInfo should be transmitted over LoRa.
|
|
/// Note that this is not available on a channel with default key and name.
|
|
public var transmitOverLora: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Detection Sensor Module Config
|
|
public struct DetectionSensorConfig: Sendable {
|
|
// 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
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// Interval in seconds of how often we can send a message to the mesh when a
|
|
/// trigger event is detected
|
|
public var minimumBroadcastSecs: UInt32 = 0
|
|
|
|
///
|
|
/// Interval in seconds of how often we should send a message to the mesh
|
|
/// with the current state regardless of trigger events When set to 0, only
|
|
/// trigger events will be broadcasted Works as a sort of status heartbeat
|
|
/// for peace of mind
|
|
public var stateBroadcastSecs: UInt32 = 0
|
|
|
|
///
|
|
/// Send ASCII bell with alert message
|
|
/// Useful for triggering ext. notification on bell
|
|
public var sendBell: Bool = false
|
|
|
|
///
|
|
/// Friendly name used to format message sent to mesh
|
|
/// Example: A name "Motion" would result in a message "Motion detected"
|
|
/// Maximum length of 20 characters
|
|
public var name: String = String()
|
|
|
|
///
|
|
/// GPIO pin to monitor for state changes
|
|
public var monitorPin: UInt32 = 0
|
|
|
|
///
|
|
/// The type of trigger event to be used
|
|
public var detectionTriggerType: ModuleConfig.DetectionSensorConfig.TriggerType = .logicLow
|
|
|
|
///
|
|
/// Whether or not use INPUT_PULLUP mode for GPIO pin
|
|
/// Only applicable if the board uses pull-up resistors on the pin
|
|
public var usePullup: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public enum TriggerType: SwiftProtobuf.Enum, Swift.CaseIterable {
|
|
public typealias RawValue = Int
|
|
|
|
/// Event is triggered if pin is low
|
|
case logicLow // = 0
|
|
|
|
/// Event is triggered if pin is high
|
|
case logicHigh // = 1
|
|
|
|
/// Event is triggered when pin goes high to low
|
|
case fallingEdge // = 2
|
|
|
|
/// Event is triggered when pin goes low to high
|
|
case risingEdge // = 3
|
|
|
|
/// Event is triggered on every pin state change, low is considered to be
|
|
/// "active"
|
|
case eitherEdgeActiveLow // = 4
|
|
|
|
/// Event is triggered on every pin state change, high is considered to be
|
|
/// "active"
|
|
case eitherEdgeActiveHigh // = 5
|
|
case UNRECOGNIZED(Int)
|
|
|
|
public init() {
|
|
self = .logicLow
|
|
}
|
|
|
|
public init?(rawValue: Int) {
|
|
switch rawValue {
|
|
case 0: self = .logicLow
|
|
case 1: self = .logicHigh
|
|
case 2: self = .fallingEdge
|
|
case 3: self = .risingEdge
|
|
case 4: self = .eitherEdgeActiveLow
|
|
case 5: self = .eitherEdgeActiveHigh
|
|
default: self = .UNRECOGNIZED(rawValue)
|
|
}
|
|
}
|
|
|
|
public var rawValue: Int {
|
|
switch self {
|
|
case .logicLow: return 0
|
|
case .logicHigh: return 1
|
|
case .fallingEdge: return 2
|
|
case .risingEdge: return 3
|
|
case .eitherEdgeActiveLow: return 4
|
|
case .eitherEdgeActiveHigh: return 5
|
|
case .UNRECOGNIZED(let i): return i
|
|
}
|
|
}
|
|
|
|
// The compiler won't synthesize support with the UNRECOGNIZED case.
|
|
public static let allCases: [ModuleConfig.DetectionSensorConfig.TriggerType] = [
|
|
.logicLow,
|
|
.logicHigh,
|
|
.fallingEdge,
|
|
.risingEdge,
|
|
.eitherEdgeActiveLow,
|
|
.eitherEdgeActiveHigh,
|
|
]
|
|
|
|
}
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Audio Config for codec2 voice
|
|
public struct AudioConfig: Sendable {
|
|
// 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
|
|
public var codec2Enabled: Bool = false
|
|
|
|
///
|
|
/// PTT Pin
|
|
public var pttPin: UInt32 = 0
|
|
|
|
///
|
|
/// The audio sample rate to use for codec2
|
|
public var bitrate: ModuleConfig.AudioConfig.Audio_Baud = .codec2Default
|
|
|
|
///
|
|
/// I2S Word Select
|
|
public var i2SWs: UInt32 = 0
|
|
|
|
///
|
|
/// I2S Data IN
|
|
public var i2SSd: UInt32 = 0
|
|
|
|
///
|
|
/// I2S Data OUT
|
|
public var i2SDin: UInt32 = 0
|
|
|
|
///
|
|
/// I2S Clock
|
|
public var i2SSck: UInt32 = 0
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
///
|
|
/// Baudrate for codec2 voice
|
|
public enum Audio_Baud: SwiftProtobuf.Enum, Swift.CaseIterable {
|
|
public 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)
|
|
|
|
public init() {
|
|
self = .codec2Default
|
|
}
|
|
|
|
public 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)
|
|
}
|
|
}
|
|
|
|
public 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
|
|
}
|
|
}
|
|
|
|
// 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() {}
|
|
}
|
|
|
|
///
|
|
/// Config for the Paxcounter Module
|
|
public struct PaxcounterConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Enable the Paxcounter Module
|
|
public var enabled: Bool = false
|
|
|
|
public var paxcounterUpdateInterval: UInt32 = 0
|
|
|
|
///
|
|
/// WiFi RSSI threshold. Defaults to -80
|
|
public var wifiThreshold: Int32 = 0
|
|
|
|
///
|
|
/// BLE RSSI threshold. Defaults to -80
|
|
public var bleThreshold: Int32 = 0
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Config for the Traffic Management module.
|
|
/// Provides packet inspection and traffic shaping to help reduce channel utilization
|
|
public struct TrafficManagementConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Master enable for traffic management module
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// Enable position deduplication to drop redundant position broadcasts
|
|
public var positionDedupEnabled: Bool = false
|
|
|
|
///
|
|
/// Number of bits of precision for position deduplication (0-32)
|
|
public var positionPrecisionBits: UInt32 = 0
|
|
|
|
///
|
|
/// Minimum interval in seconds between position updates from the same node
|
|
public var positionMinIntervalSecs: UInt32 = 0
|
|
|
|
///
|
|
/// Enable direct response to NodeInfo requests from local cache
|
|
public var nodeinfoDirectResponse: Bool = false
|
|
|
|
///
|
|
/// Minimum hop distance from requestor before responding to NodeInfo requests
|
|
public var nodeinfoDirectResponseMaxHops: UInt32 = 0
|
|
|
|
///
|
|
/// Enable per-node rate limiting to throttle chatty nodes
|
|
public var rateLimitEnabled: Bool = false
|
|
|
|
///
|
|
/// Time window in seconds for rate limiting calculations
|
|
public var rateLimitWindowSecs: UInt32 = 0
|
|
|
|
///
|
|
/// Maximum packets allowed per node within the rate limit window
|
|
public var rateLimitMaxPackets: UInt32 = 0
|
|
|
|
///
|
|
/// Enable dropping of unknown/undecryptable packets per rate_limit_window_secs
|
|
public var dropUnknownEnabled: Bool = false
|
|
|
|
///
|
|
/// Number of unknown packets before dropping from a node
|
|
public var unknownPacketThreshold: UInt32 = 0
|
|
|
|
///
|
|
/// Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected)
|
|
public var exhaustHopTelemetry: Bool = false
|
|
|
|
///
|
|
/// Set hop_limit to 0 for relayed position broadcasts (own packets unaffected)
|
|
public var exhaustHopPosition: Bool = false
|
|
|
|
///
|
|
/// Preserve hop_limit for router-to-router traffic
|
|
public var routerPreserveHops: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Serial Config
|
|
public struct SerialConfig: Sendable {
|
|
// SwiftProtobuf.Message conformance is added in an extension below. See the
|
|
// `Message` and `Message+*Additions` files in the SwiftProtobuf library for
|
|
// methods supported on all messages.
|
|
|
|
///
|
|
/// Preferences for the SerialModule
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var echo: Bool = false
|
|
|
|
///
|
|
/// RX pin (should match Arduino gpio pin number)
|
|
public var rxd: UInt32 = 0
|
|
|
|
///
|
|
/// TX pin (should match Arduino gpio pin number)
|
|
public var txd: UInt32 = 0
|
|
|
|
///
|
|
/// Serial baud rate
|
|
public var baud: ModuleConfig.SerialConfig.Serial_Baud = .baudDefault
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var timeout: UInt32 = 0
|
|
|
|
///
|
|
/// Mode for serial module operation
|
|
public var mode: ModuleConfig.SerialConfig.Serial_Mode = .default
|
|
|
|
///
|
|
/// Overrides the platform's defacto Serial port instance to use with Serial module config settings
|
|
/// This is currently only usable in output modes like NMEA / CalTopo and may behave strangely or not work at all in other modes
|
|
/// Existing logging over the Serial Console will still be present
|
|
public var overrideConsoleSerialPort: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public enum Serial_Baud: SwiftProtobuf.Enum, Swift.CaseIterable {
|
|
public typealias RawValue = Int
|
|
case baudDefault // = 0
|
|
case baud110 // = 1
|
|
case baud300 // = 2
|
|
case baud600 // = 3
|
|
case baud1200 // = 4
|
|
case baud2400 // = 5
|
|
case baud4800 // = 6
|
|
case baud9600 // = 7
|
|
case baud19200 // = 8
|
|
case baud38400 // = 9
|
|
case baud57600 // = 10
|
|
case baud115200 // = 11
|
|
case baud230400 // = 12
|
|
case baud460800 // = 13
|
|
case baud576000 // = 14
|
|
case baud921600 // = 15
|
|
case UNRECOGNIZED(Int)
|
|
|
|
public init() {
|
|
self = .baudDefault
|
|
}
|
|
|
|
public init?(rawValue: Int) {
|
|
switch rawValue {
|
|
case 0: self = .baudDefault
|
|
case 1: self = .baud110
|
|
case 2: self = .baud300
|
|
case 3: self = .baud600
|
|
case 4: self = .baud1200
|
|
case 5: self = .baud2400
|
|
case 6: self = .baud4800
|
|
case 7: self = .baud9600
|
|
case 8: self = .baud19200
|
|
case 9: self = .baud38400
|
|
case 10: self = .baud57600
|
|
case 11: self = .baud115200
|
|
case 12: self = .baud230400
|
|
case 13: self = .baud460800
|
|
case 14: self = .baud576000
|
|
case 15: self = .baud921600
|
|
default: self = .UNRECOGNIZED(rawValue)
|
|
}
|
|
}
|
|
|
|
public var rawValue: Int {
|
|
switch self {
|
|
case .baudDefault: return 0
|
|
case .baud110: return 1
|
|
case .baud300: return 2
|
|
case .baud600: return 3
|
|
case .baud1200: return 4
|
|
case .baud2400: return 5
|
|
case .baud4800: return 6
|
|
case .baud9600: return 7
|
|
case .baud19200: return 8
|
|
case .baud38400: return 9
|
|
case .baud57600: return 10
|
|
case .baud115200: return 11
|
|
case .baud230400: return 12
|
|
case .baud460800: return 13
|
|
case .baud576000: return 14
|
|
case .baud921600: return 15
|
|
case .UNRECOGNIZED(let i): return i
|
|
}
|
|
}
|
|
|
|
// 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 typealias RawValue = Int
|
|
case `default` // = 0
|
|
case simple // = 1
|
|
case proto // = 2
|
|
case textmsg // = 3
|
|
case nmea // = 4
|
|
|
|
/// NMEA messages specifically tailored for CalTopo
|
|
case caltopo // = 5
|
|
|
|
/// Ecowitt WS85 weather station
|
|
case ws85 // = 6
|
|
|
|
/// VE.Direct is a serial protocol used by Victron Energy products
|
|
/// https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
|
|
case veDirect // = 7
|
|
|
|
/// Used to configure and view some parameters of MeshSolar.
|
|
/// https://heltec.org/project/meshsolar/
|
|
case msConfig // = 8
|
|
|
|
/// Logs mesh traffic to the serial pins, ideal for logging via openLog or similar.
|
|
case log // = 9
|
|
|
|
/// only text (channel & DM)
|
|
case logtext // = 10
|
|
case UNRECOGNIZED(Int)
|
|
|
|
public init() {
|
|
self = .default
|
|
}
|
|
|
|
public init?(rawValue: Int) {
|
|
switch rawValue {
|
|
case 0: self = .default
|
|
case 1: self = .simple
|
|
case 2: self = .proto
|
|
case 3: self = .textmsg
|
|
case 4: self = .nmea
|
|
case 5: self = .caltopo
|
|
case 6: self = .ws85
|
|
case 7: self = .veDirect
|
|
case 8: self = .msConfig
|
|
case 9: self = .log
|
|
case 10: self = .logtext
|
|
default: self = .UNRECOGNIZED(rawValue)
|
|
}
|
|
}
|
|
|
|
public var rawValue: Int {
|
|
switch self {
|
|
case .default: return 0
|
|
case .simple: return 1
|
|
case .proto: return 2
|
|
case .textmsg: return 3
|
|
case .nmea: return 4
|
|
case .caltopo: return 5
|
|
case .ws85: return 6
|
|
case .veDirect: return 7
|
|
case .msConfig: return 8
|
|
case .log: return 9
|
|
case .logtext: return 10
|
|
case .UNRECOGNIZED(let i): return i
|
|
}
|
|
}
|
|
|
|
// 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,
|
|
.veDirect,
|
|
.msConfig,
|
|
.log,
|
|
.logtext,
|
|
]
|
|
|
|
}
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// External Notifications Config
|
|
public struct ExternalNotificationConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Enable the ExternalNotificationModule
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// When using in On/Off mode, keep the output on for this many
|
|
/// milliseconds. Default 1000ms (1 second).
|
|
public var outputMs: UInt32 = 0
|
|
|
|
///
|
|
/// Define the output pin GPIO setting Defaults to
|
|
/// EXT_NOTIFY_OUT if set for the board.
|
|
/// In standalone devices this pin should drive the LED to match the UI.
|
|
public var output: UInt32 = 0
|
|
|
|
///
|
|
/// Optional: Define a secondary output pin for a vibra motor
|
|
/// This is used in standalone devices to match the UI.
|
|
public var outputVibra: UInt32 = 0
|
|
|
|
///
|
|
/// Optional: Define a tertiary output pin for an active buzzer
|
|
/// This is used in standalone devices to to match the UI.
|
|
public var outputBuzzer: UInt32 = 0
|
|
|
|
///
|
|
/// IF this is true, the 'output' Pin will be pulled active high, false
|
|
/// means active low.
|
|
public var active: Bool = false
|
|
|
|
///
|
|
/// True: Alert when a text message arrives (output)
|
|
public var alertMessage: Bool = false
|
|
|
|
///
|
|
/// True: Alert when a text message arrives (output_vibra)
|
|
public var alertMessageVibra: Bool = false
|
|
|
|
///
|
|
/// True: Alert when a text message arrives (output_buzzer)
|
|
public var alertMessageBuzzer: Bool = false
|
|
|
|
///
|
|
/// True: Alert when the bell character is received (output)
|
|
public var alertBell: Bool = false
|
|
|
|
///
|
|
/// True: Alert when the bell character is received (output_vibra)
|
|
public var alertBellVibra: Bool = false
|
|
|
|
///
|
|
/// True: Alert when the bell character is received (output_buzzer)
|
|
public var alertBellBuzzer: Bool = false
|
|
|
|
///
|
|
/// use a PWM output instead of a simple on/off output. This will ignore
|
|
/// the 'output', 'output_ms' and 'active' settings and use the
|
|
/// device.buzzer_gpio instead.
|
|
public var usePwm: Bool = false
|
|
|
|
///
|
|
/// The notification will toggle with 'output_ms' for this time of seconds.
|
|
/// Default is 0 which means don't repeat at all. 60 would mean blink
|
|
/// and/or beep for 60 seconds
|
|
public var nagTimeout: UInt32 = 0
|
|
|
|
///
|
|
/// When true, enables devices with native I2S audio output to use the RTTTL over speaker like a buzzer
|
|
/// T-Watch S3 and T-Deck for example have this capability
|
|
public var useI2SAsBuzzer: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Store and Forward Module Config
|
|
public struct StoreForwardConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Enable the Store and Forward Module
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var heartbeat: Bool = false
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var records: UInt32 = 0
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var historyReturnMax: UInt32 = 0
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public var historyReturnWindow: UInt32 = 0
|
|
|
|
///
|
|
/// Set to true to let this node act as a server that stores received messages and resends them upon request.
|
|
public var isServer: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Preferences for the RangeTestModule
|
|
public struct RangeTestConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Enable the Range Test Module
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// Send out range test messages from this node
|
|
public var sender: UInt32 = 0
|
|
|
|
///
|
|
/// Bool value indicating that this node should save a RangeTest.csv file.
|
|
/// ESP32 Only
|
|
public var save: Bool = false
|
|
|
|
///
|
|
/// Bool indicating that the node should cleanup / destroy it's RangeTest.csv file.
|
|
/// ESP32 Only
|
|
public var clearOnReboot_p: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Configuration for both device and environment metrics
|
|
public struct TelemetryConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Interval in seconds of how often we should try to send our
|
|
/// device metrics to the mesh
|
|
public var deviceUpdateInterval: UInt32 = 0
|
|
|
|
public var environmentUpdateInterval: UInt32 = 0
|
|
|
|
///
|
|
/// Preferences for the Telemetry Module (Environment)
|
|
/// Enable/Disable the telemetry measurement module measurement collection
|
|
public var environmentMeasurementEnabled: Bool = false
|
|
|
|
///
|
|
/// Enable/Disable the telemetry measurement module on-device display
|
|
public var environmentScreenEnabled: Bool = false
|
|
|
|
///
|
|
/// We'll always read the sensor in Celsius, but sometimes we might want to
|
|
/// display the results in Fahrenheit as a "user preference".
|
|
public var environmentDisplayFahrenheit: Bool = false
|
|
|
|
///
|
|
/// Enable/Disable the air quality metrics
|
|
public var airQualityEnabled: Bool = false
|
|
|
|
///
|
|
/// Interval in seconds of how often we should try to send our
|
|
/// air quality metrics to the mesh
|
|
public var airQualityInterval: UInt32 = 0
|
|
|
|
///
|
|
/// Enable/disable Power metrics
|
|
public var powerMeasurementEnabled: Bool = false
|
|
|
|
///
|
|
/// Interval in seconds of how often we should try to send our
|
|
/// power metrics to the mesh
|
|
public var powerUpdateInterval: UInt32 = 0
|
|
|
|
///
|
|
/// Enable/Disable the power measurement module on-device display
|
|
public var powerScreenEnabled: Bool = false
|
|
|
|
///
|
|
/// Preferences for the (Health) Telemetry Module
|
|
/// Enable/Disable the telemetry measurement module measurement collection
|
|
public var healthMeasurementEnabled: Bool = false
|
|
|
|
///
|
|
/// Interval in seconds of how often we should try to send our
|
|
/// health metrics to the mesh
|
|
public var healthUpdateInterval: UInt32 = 0
|
|
|
|
///
|
|
/// Enable/Disable the health telemetry module on-device display
|
|
public var healthScreenEnabled: Bool = false
|
|
|
|
///
|
|
/// Enable/Disable the device telemetry module to send metrics to the mesh
|
|
/// Note: We will still send telemtry to the connected phone / client every minute over the API
|
|
public var deviceTelemetryEnabled: Bool = false
|
|
|
|
///
|
|
/// Enable/Disable the air quality telemetry measurement module on-device display
|
|
public var airQualityScreenEnabled: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// Canned Messages Module Config
|
|
public struct CannedMessageConfig: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// Enable the rotary encoder #1. This is a 'dumb' encoder sending pulses on both A and B pins while rotating.
|
|
public var rotary1Enabled: Bool = false
|
|
|
|
///
|
|
/// GPIO pin for rotary encoder A port.
|
|
public var inputbrokerPinA: UInt32 = 0
|
|
|
|
///
|
|
/// GPIO pin for rotary encoder B port.
|
|
public var inputbrokerPinB: UInt32 = 0
|
|
|
|
///
|
|
/// GPIO pin for rotary encoder Press port.
|
|
public var inputbrokerPinPress: UInt32 = 0
|
|
|
|
///
|
|
/// Generate input event on CW of this kind.
|
|
public var inputbrokerEventCw: ModuleConfig.CannedMessageConfig.InputEventChar = .none
|
|
|
|
///
|
|
/// Generate input event on CCW of this kind.
|
|
public var inputbrokerEventCcw: ModuleConfig.CannedMessageConfig.InputEventChar = .none
|
|
|
|
///
|
|
/// Generate input event on Press of this kind.
|
|
public var inputbrokerEventPress: ModuleConfig.CannedMessageConfig.InputEventChar = .none
|
|
|
|
///
|
|
/// Enable the Up/Down/Select input device. Can be RAK rotary encoder or 3 buttons. Uses the a/b/press definitions from inputbroker.
|
|
public var updown1Enabled: Bool = false
|
|
|
|
///
|
|
/// Enable/disable CannedMessageModule.
|
|
///
|
|
/// NOTE: This field was marked as deprecated in the .proto file.
|
|
public var enabled: Bool = false
|
|
|
|
///
|
|
/// Input event origin accepted by the canned message module.
|
|
/// Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any"
|
|
///
|
|
/// NOTE: This field was marked as deprecated in the .proto file.
|
|
public var allowInputSource: String = String()
|
|
|
|
///
|
|
/// CannedMessageModule also sends a bell character with the messages.
|
|
/// ExternalNotificationModule can benefit from this feature.
|
|
public var sendBell: Bool = false
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
public enum InputEventChar: SwiftProtobuf.Enum, Swift.CaseIterable {
|
|
public typealias RawValue = Int
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case none // = 0
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case up // = 17
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case down // = 18
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case left // = 19
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case right // = 20
|
|
|
|
///
|
|
/// '\n'
|
|
case select // = 10
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case back // = 27
|
|
|
|
///
|
|
/// TODO: REPLACE
|
|
case cancel // = 24
|
|
case UNRECOGNIZED(Int)
|
|
|
|
public init() {
|
|
self = .none
|
|
}
|
|
|
|
public init?(rawValue: Int) {
|
|
switch rawValue {
|
|
case 0: self = .none
|
|
case 10: self = .select
|
|
case 17: self = .up
|
|
case 18: self = .down
|
|
case 19: self = .left
|
|
case 20: self = .right
|
|
case 24: self = .cancel
|
|
case 27: self = .back
|
|
default: self = .UNRECOGNIZED(rawValue)
|
|
}
|
|
}
|
|
|
|
public var rawValue: Int {
|
|
switch self {
|
|
case .none: return 0
|
|
case .select: return 10
|
|
case .up: return 17
|
|
case .down: return 18
|
|
case .left: return 19
|
|
case .right: return 20
|
|
case .cancel: return 24
|
|
case .back: return 27
|
|
case .UNRECOGNIZED(let i): return i
|
|
}
|
|
}
|
|
|
|
// 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() {}
|
|
}
|
|
|
|
///
|
|
///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 {
|
|
// 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.
|
|
|
|
///
|
|
/// Sets LED to on or off.
|
|
public var ledState: Bool = false
|
|
|
|
///
|
|
/// Sets the current for the LED output. Default is 10.
|
|
public var current: UInt32 = 0
|
|
|
|
///
|
|
/// Sets the red LED level. Values are 0-255.
|
|
public var red: UInt32 = 0
|
|
|
|
///
|
|
/// Sets the green LED level. Values are 0-255.
|
|
public var green: UInt32 = 0
|
|
|
|
///
|
|
/// Sets the blue LED level. Values are 0-255.
|
|
public var blue: UInt32 = 0
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// StatusMessage config - Allows setting a status message for a node to periodically rebroadcast
|
|
public struct StatusMessageConfig: Sendable {
|
|
// 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 actual status string
|
|
public var nodeStatus: String = String()
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
public init() {}
|
|
}
|
|
|
|
///
|
|
/// A GPIO pin definition for remote hardware module
|
|
public struct RemoteHardwarePin: Sendable {
|
|
// 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.
|
|
|
|
///
|
|
/// GPIO Pin number (must match Arduino)
|
|
public var gpioPin: UInt32 = 0
|
|
|
|
///
|
|
/// Name for the GPIO pin (i.e. Front gate, mailbox, etc)
|
|
public var name: String = String()
|
|
|
|
///
|
|
/// Type of GPIO access available to consumers on the mesh
|
|
public var type: RemoteHardwarePinType = .unknown
|
|
|
|
public var unknownFields = SwiftProtobuf.UnknownStorage()
|
|
|
|
public init() {}
|
|
}
|
|
|
|
// MARK: - Code below here is support for the SwiftProtobuf runtime.
|
|
|
|
fileprivate let _protobuf_package = "meshtastic"
|
|
|
|
extension RemoteHardwarePinType: SwiftProtobuf._ProtoNameProviding {
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0UNKNOWN\0\u{1}DIGITAL_READ\0\u{1}DIGITAL_WRITE\0")
|
|
}
|
|
|
|
extension ModuleConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = _protobuf_package + ".ModuleConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}mqtt\0\u{1}serial\0\u{3}external_notification\0\u{3}store_forward\0\u{3}range_test\0\u{1}telemetry\0\u{3}canned_message\0\u{1}audio\0\u{3}remote_hardware\0\u{3}neighbor_info\0\u{3}ambient_lighting\0\u{3}detection_sensor\0\u{1}paxcounter\0\u{1}statusmessage\0\u{3}traffic_management\0")
|
|
|
|
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 {
|
|
var v: ModuleConfig.MQTTConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .mqtt(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .mqtt(v)
|
|
}
|
|
}()
|
|
case 2: try {
|
|
var v: ModuleConfig.SerialConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .serial(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .serial(v)
|
|
}
|
|
}()
|
|
case 3: try {
|
|
var v: ModuleConfig.ExternalNotificationConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .externalNotification(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .externalNotification(v)
|
|
}
|
|
}()
|
|
case 4: try {
|
|
var v: ModuleConfig.StoreForwardConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .storeForward(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .storeForward(v)
|
|
}
|
|
}()
|
|
case 5: try {
|
|
var v: ModuleConfig.RangeTestConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .rangeTest(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .rangeTest(v)
|
|
}
|
|
}()
|
|
case 6: try {
|
|
var v: ModuleConfig.TelemetryConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .telemetry(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .telemetry(v)
|
|
}
|
|
}()
|
|
case 7: try {
|
|
var v: ModuleConfig.CannedMessageConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .cannedMessage(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
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)
|
|
}
|
|
}()
|
|
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)
|
|
}
|
|
}()
|
|
case 10: try {
|
|
var v: ModuleConfig.NeighborInfoConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .neighborInfo(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .neighborInfo(v)
|
|
}
|
|
}()
|
|
case 11: try {
|
|
var v: ModuleConfig.AmbientLightingConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .ambientLighting(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .ambientLighting(v)
|
|
}
|
|
}()
|
|
case 12: try {
|
|
var v: ModuleConfig.DetectionSensorConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .detectionSensor(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .detectionSensor(v)
|
|
}
|
|
}()
|
|
case 13: try {
|
|
var v: ModuleConfig.PaxcounterConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .paxcounter(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .paxcounter(v)
|
|
}
|
|
}()
|
|
case 14: try {
|
|
var v: ModuleConfig.StatusMessageConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .statusmessage(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .statusmessage(v)
|
|
}
|
|
}()
|
|
case 15: try {
|
|
var v: ModuleConfig.TrafficManagementConfig?
|
|
var hadOneofValue = false
|
|
if let current = self.payloadVariant {
|
|
hadOneofValue = true
|
|
if case .trafficManagement(let m) = current {v = m}
|
|
}
|
|
try decoder.decodeSingularMessageField(value: &v)
|
|
if let v = v {
|
|
if hadOneofValue {try decoder.handleConflictingOneOf()}
|
|
self.payloadVariant = .trafficManagement(v)
|
|
}
|
|
}()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(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
|
|
switch self.payloadVariant {
|
|
case .mqtt?: try {
|
|
guard case .mqtt(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 1)
|
|
}()
|
|
case .serial?: try {
|
|
guard case .serial(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 2)
|
|
}()
|
|
case .externalNotification?: try {
|
|
guard case .externalNotification(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 3)
|
|
}()
|
|
case .storeForward?: try {
|
|
guard case .storeForward(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 4)
|
|
}()
|
|
case .rangeTest?: try {
|
|
guard case .rangeTest(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 5)
|
|
}()
|
|
case .telemetry?: try {
|
|
guard case .telemetry(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 6)
|
|
}()
|
|
case .cannedMessage?: try {
|
|
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 .remoteHardware?: try {
|
|
guard case .remoteHardware(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 9)
|
|
}()
|
|
case .neighborInfo?: try {
|
|
guard case .neighborInfo(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 10)
|
|
}()
|
|
case .ambientLighting?: try {
|
|
guard case .ambientLighting(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 11)
|
|
}()
|
|
case .detectionSensor?: try {
|
|
guard case .detectionSensor(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 12)
|
|
}()
|
|
case .paxcounter?: try {
|
|
guard case .paxcounter(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 13)
|
|
}()
|
|
case .statusmessage?: try {
|
|
guard case .statusmessage(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 14)
|
|
}()
|
|
case .trafficManagement?: try {
|
|
guard case .trafficManagement(let v)? = self.payloadVariant else { preconditionFailure() }
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 15)
|
|
}()
|
|
case nil: break
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig, rhs: ModuleConfig) -> Bool {
|
|
if lhs.payloadVariant != rhs.payloadVariant {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.MQTTConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".MQTTConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{1}address\0\u{1}username\0\u{1}password\0\u{3}encryption_enabled\0\u{3}json_enabled\0\u{3}tls_enabled\0\u{1}root\0\u{3}proxy_to_client_enabled\0\u{3}map_reporting_enabled\0\u{3}map_report_settings\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularStringField(value: &self.address) }()
|
|
case 3: try { try decoder.decodeSingularStringField(value: &self.username) }()
|
|
case 4: try { try decoder.decodeSingularStringField(value: &self.password) }()
|
|
case 5: try { try decoder.decodeSingularBoolField(value: &self.encryptionEnabled) }()
|
|
case 6: try { try decoder.decodeSingularBoolField(value: &self.jsonEnabled) }()
|
|
case 7: try { try decoder.decodeSingularBoolField(value: &self.tlsEnabled) }()
|
|
case 8: try { try decoder.decodeSingularStringField(value: &self.root) }()
|
|
case 9: try { try decoder.decodeSingularBoolField(value: &self.proxyToClientEnabled) }()
|
|
case 10: try { try decoder.decodeSingularBoolField(value: &self.mapReportingEnabled) }()
|
|
case 11: try { try decoder.decodeSingularMessageField(value: &self._mapReportSettings) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(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.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if !self.address.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.address, fieldNumber: 2)
|
|
}
|
|
if !self.username.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.username, fieldNumber: 3)
|
|
}
|
|
if !self.password.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.password, fieldNumber: 4)
|
|
}
|
|
if self.encryptionEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.encryptionEnabled, fieldNumber: 5)
|
|
}
|
|
if self.jsonEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.jsonEnabled, fieldNumber: 6)
|
|
}
|
|
if self.tlsEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.tlsEnabled, fieldNumber: 7)
|
|
}
|
|
if !self.root.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.root, fieldNumber: 8)
|
|
}
|
|
if self.proxyToClientEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.proxyToClientEnabled, fieldNumber: 9)
|
|
}
|
|
if self.mapReportingEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.mapReportingEnabled, fieldNumber: 10)
|
|
}
|
|
try { if let v = self._mapReportSettings {
|
|
try visitor.visitSingularMessageField(value: v, fieldNumber: 11)
|
|
} }()
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.MQTTConfig, rhs: ModuleConfig.MQTTConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.address != rhs.address {return false}
|
|
if lhs.username != rhs.username {return false}
|
|
if lhs.password != rhs.password {return false}
|
|
if lhs.encryptionEnabled != rhs.encryptionEnabled {return false}
|
|
if lhs.jsonEnabled != rhs.jsonEnabled {return false}
|
|
if lhs.tlsEnabled != rhs.tlsEnabled {return false}
|
|
if lhs.root != rhs.root {return false}
|
|
if lhs.proxyToClientEnabled != rhs.proxyToClientEnabled {return false}
|
|
if lhs.mapReportingEnabled != rhs.mapReportingEnabled {return false}
|
|
if lhs._mapReportSettings != rhs._mapReportSettings {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.MapReportSettings: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".MapReportSettings"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}publish_interval_secs\0\u{3}position_precision\0\u{3}should_report_location\0")
|
|
|
|
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.decodeSingularUInt32Field(value: &self.publishIntervalSecs) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.positionPrecision) }()
|
|
case 3: try { try decoder.decodeSingularBoolField(value: &self.shouldReportLocation) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.publishIntervalSecs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.publishIntervalSecs, fieldNumber: 1)
|
|
}
|
|
if self.positionPrecision != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.positionPrecision, fieldNumber: 2)
|
|
}
|
|
if self.shouldReportLocation != false {
|
|
try visitor.visitSingularBoolField(value: self.shouldReportLocation, fieldNumber: 3)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.MapReportSettings, rhs: ModuleConfig.MapReportSettings) -> Bool {
|
|
if lhs.publishIntervalSecs != rhs.publishIntervalSecs {return false}
|
|
if lhs.positionPrecision != rhs.positionPrecision {return false}
|
|
if lhs.shouldReportLocation != rhs.shouldReportLocation {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.RemoteHardwareConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".RemoteHardwareConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{3}allow_undefined_pin_access\0\u{3}available_pins\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularBoolField(value: &self.allowUndefinedPinAccess) }()
|
|
case 3: try { try decoder.decodeRepeatedMessageField(value: &self.availablePins) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.allowUndefinedPinAccess != false {
|
|
try visitor.visitSingularBoolField(value: self.allowUndefinedPinAccess, fieldNumber: 2)
|
|
}
|
|
if !self.availablePins.isEmpty {
|
|
try visitor.visitRepeatedMessageField(value: self.availablePins, fieldNumber: 3)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.RemoteHardwareConfig, rhs: ModuleConfig.RemoteHardwareConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.allowUndefinedPinAccess != rhs.allowUndefinedPinAccess {return false}
|
|
if lhs.availablePins != rhs.availablePins {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.NeighborInfoConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".NeighborInfoConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{3}update_interval\0\u{3}transmit_over_lora\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.updateInterval) }()
|
|
case 3: try { try decoder.decodeSingularBoolField(value: &self.transmitOverLora) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.updateInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.updateInterval, fieldNumber: 2)
|
|
}
|
|
if self.transmitOverLora != false {
|
|
try visitor.visitSingularBoolField(value: self.transmitOverLora, fieldNumber: 3)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.NeighborInfoConfig, rhs: ModuleConfig.NeighborInfoConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.updateInterval != rhs.updateInterval {return false}
|
|
if lhs.transmitOverLora != rhs.transmitOverLora {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.DetectionSensorConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".DetectionSensorConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{3}minimum_broadcast_secs\0\u{3}state_broadcast_secs\0\u{3}send_bell\0\u{1}name\0\u{3}monitor_pin\0\u{3}detection_trigger_type\0\u{3}use_pullup\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.minimumBroadcastSecs) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.stateBroadcastSecs) }()
|
|
case 4: try { try decoder.decodeSingularBoolField(value: &self.sendBell) }()
|
|
case 5: try { try decoder.decodeSingularStringField(value: &self.name) }()
|
|
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.monitorPin) }()
|
|
case 7: try { try decoder.decodeSingularEnumField(value: &self.detectionTriggerType) }()
|
|
case 8: try { try decoder.decodeSingularBoolField(value: &self.usePullup) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.minimumBroadcastSecs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.minimumBroadcastSecs, fieldNumber: 2)
|
|
}
|
|
if self.stateBroadcastSecs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.stateBroadcastSecs, fieldNumber: 3)
|
|
}
|
|
if self.sendBell != false {
|
|
try visitor.visitSingularBoolField(value: self.sendBell, fieldNumber: 4)
|
|
}
|
|
if !self.name.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.name, fieldNumber: 5)
|
|
}
|
|
if self.monitorPin != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.monitorPin, fieldNumber: 6)
|
|
}
|
|
if self.detectionTriggerType != .logicLow {
|
|
try visitor.visitSingularEnumField(value: self.detectionTriggerType, fieldNumber: 7)
|
|
}
|
|
if self.usePullup != false {
|
|
try visitor.visitSingularBoolField(value: self.usePullup, fieldNumber: 8)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.DetectionSensorConfig, rhs: ModuleConfig.DetectionSensorConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.minimumBroadcastSecs != rhs.minimumBroadcastSecs {return false}
|
|
if lhs.stateBroadcastSecs != rhs.stateBroadcastSecs {return false}
|
|
if lhs.sendBell != rhs.sendBell {return false}
|
|
if lhs.name != rhs.name {return false}
|
|
if lhs.monitorPin != rhs.monitorPin {return false}
|
|
if lhs.detectionTriggerType != rhs.detectionTriggerType {return false}
|
|
if lhs.usePullup != rhs.usePullup {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.DetectionSensorConfig.TriggerType: SwiftProtobuf._ProtoNameProviding {
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0LOGIC_LOW\0\u{1}LOGIC_HIGH\0\u{1}FALLING_EDGE\0\u{1}RISING_EDGE\0\u{1}EITHER_EDGE_ACTIVE_LOW\0\u{1}EITHER_EDGE_ACTIVE_HIGH\0")
|
|
}
|
|
|
|
extension ModuleConfig.AudioConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".AudioConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}codec2_enabled\0\u{3}ptt_pin\0\u{1}bitrate\0\u{3}i2s_ws\0\u{3}i2s_sd\0\u{3}i2s_din\0\u{3}i2s_sck\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.codec2Enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.pttPin) }()
|
|
case 3: try { try decoder.decodeSingularEnumField(value: &self.bitrate) }()
|
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.i2SWs) }()
|
|
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.i2SSd) }()
|
|
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.i2SDin) }()
|
|
case 7: try { try decoder.decodeSingularUInt32Field(value: &self.i2SSck) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.codec2Enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.codec2Enabled, fieldNumber: 1)
|
|
}
|
|
if self.pttPin != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.pttPin, fieldNumber: 2)
|
|
}
|
|
if self.bitrate != .codec2Default {
|
|
try visitor.visitSingularEnumField(value: self.bitrate, fieldNumber: 3)
|
|
}
|
|
if self.i2SWs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.i2SWs, fieldNumber: 4)
|
|
}
|
|
if self.i2SSd != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.i2SSd, fieldNumber: 5)
|
|
}
|
|
if self.i2SDin != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.i2SDin, fieldNumber: 6)
|
|
}
|
|
if self.i2SSck != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.i2SSck, fieldNumber: 7)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.AudioConfig, rhs: ModuleConfig.AudioConfig) -> Bool {
|
|
if lhs.codec2Enabled != rhs.codec2Enabled {return false}
|
|
if lhs.pttPin != rhs.pttPin {return false}
|
|
if lhs.bitrate != rhs.bitrate {return false}
|
|
if lhs.i2SWs != rhs.i2SWs {return false}
|
|
if lhs.i2SSd != rhs.i2SSd {return false}
|
|
if lhs.i2SDin != rhs.i2SDin {return false}
|
|
if lhs.i2SSck != rhs.i2SSck {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.AudioConfig.Audio_Baud: SwiftProtobuf._ProtoNameProviding {
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0CODEC2_DEFAULT\0\u{1}CODEC2_3200\0\u{1}CODEC2_2400\0\u{1}CODEC2_1600\0\u{1}CODEC2_1400\0\u{1}CODEC2_1300\0\u{1}CODEC2_1200\0\u{1}CODEC2_700\0\u{1}CODEC2_700B\0")
|
|
}
|
|
|
|
extension ModuleConfig.PaxcounterConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".PaxcounterConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{3}paxcounter_update_interval\0\u{3}wifi_threshold\0\u{3}ble_threshold\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.paxcounterUpdateInterval) }()
|
|
case 3: try { try decoder.decodeSingularInt32Field(value: &self.wifiThreshold) }()
|
|
case 4: try { try decoder.decodeSingularInt32Field(value: &self.bleThreshold) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.paxcounterUpdateInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.paxcounterUpdateInterval, fieldNumber: 2)
|
|
}
|
|
if self.wifiThreshold != 0 {
|
|
try visitor.visitSingularInt32Field(value: self.wifiThreshold, fieldNumber: 3)
|
|
}
|
|
if self.bleThreshold != 0 {
|
|
try visitor.visitSingularInt32Field(value: self.bleThreshold, fieldNumber: 4)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.PaxcounterConfig, rhs: ModuleConfig.PaxcounterConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.paxcounterUpdateInterval != rhs.paxcounterUpdateInterval {return false}
|
|
if lhs.wifiThreshold != rhs.wifiThreshold {return false}
|
|
if lhs.bleThreshold != rhs.bleThreshold {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.TrafficManagementConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".TrafficManagementConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{3}position_dedup_enabled\0\u{3}position_precision_bits\0\u{3}position_min_interval_secs\0\u{3}nodeinfo_direct_response\0\u{3}nodeinfo_direct_response_max_hops\0\u{3}rate_limit_enabled\0\u{3}rate_limit_window_secs\0\u{3}rate_limit_max_packets\0\u{3}drop_unknown_enabled\0\u{3}unknown_packet_threshold\0\u{3}exhaust_hop_telemetry\0\u{3}exhaust_hop_position\0\u{3}router_preserve_hops\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularBoolField(value: &self.positionDedupEnabled) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.positionPrecisionBits) }()
|
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.positionMinIntervalSecs) }()
|
|
case 5: try { try decoder.decodeSingularBoolField(value: &self.nodeinfoDirectResponse) }()
|
|
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.nodeinfoDirectResponseMaxHops) }()
|
|
case 7: try { try decoder.decodeSingularBoolField(value: &self.rateLimitEnabled) }()
|
|
case 8: try { try decoder.decodeSingularUInt32Field(value: &self.rateLimitWindowSecs) }()
|
|
case 9: try { try decoder.decodeSingularUInt32Field(value: &self.rateLimitMaxPackets) }()
|
|
case 10: try { try decoder.decodeSingularBoolField(value: &self.dropUnknownEnabled) }()
|
|
case 11: try { try decoder.decodeSingularUInt32Field(value: &self.unknownPacketThreshold) }()
|
|
case 12: try { try decoder.decodeSingularBoolField(value: &self.exhaustHopTelemetry) }()
|
|
case 13: try { try decoder.decodeSingularBoolField(value: &self.exhaustHopPosition) }()
|
|
case 14: try { try decoder.decodeSingularBoolField(value: &self.routerPreserveHops) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.positionDedupEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.positionDedupEnabled, fieldNumber: 2)
|
|
}
|
|
if self.positionPrecisionBits != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.positionPrecisionBits, fieldNumber: 3)
|
|
}
|
|
if self.positionMinIntervalSecs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.positionMinIntervalSecs, fieldNumber: 4)
|
|
}
|
|
if self.nodeinfoDirectResponse != false {
|
|
try visitor.visitSingularBoolField(value: self.nodeinfoDirectResponse, fieldNumber: 5)
|
|
}
|
|
if self.nodeinfoDirectResponseMaxHops != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.nodeinfoDirectResponseMaxHops, fieldNumber: 6)
|
|
}
|
|
if self.rateLimitEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.rateLimitEnabled, fieldNumber: 7)
|
|
}
|
|
if self.rateLimitWindowSecs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.rateLimitWindowSecs, fieldNumber: 8)
|
|
}
|
|
if self.rateLimitMaxPackets != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.rateLimitMaxPackets, fieldNumber: 9)
|
|
}
|
|
if self.dropUnknownEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.dropUnknownEnabled, fieldNumber: 10)
|
|
}
|
|
if self.unknownPacketThreshold != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.unknownPacketThreshold, fieldNumber: 11)
|
|
}
|
|
if self.exhaustHopTelemetry != false {
|
|
try visitor.visitSingularBoolField(value: self.exhaustHopTelemetry, fieldNumber: 12)
|
|
}
|
|
if self.exhaustHopPosition != false {
|
|
try visitor.visitSingularBoolField(value: self.exhaustHopPosition, fieldNumber: 13)
|
|
}
|
|
if self.routerPreserveHops != false {
|
|
try visitor.visitSingularBoolField(value: self.routerPreserveHops, fieldNumber: 14)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.TrafficManagementConfig, rhs: ModuleConfig.TrafficManagementConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.positionDedupEnabled != rhs.positionDedupEnabled {return false}
|
|
if lhs.positionPrecisionBits != rhs.positionPrecisionBits {return false}
|
|
if lhs.positionMinIntervalSecs != rhs.positionMinIntervalSecs {return false}
|
|
if lhs.nodeinfoDirectResponse != rhs.nodeinfoDirectResponse {return false}
|
|
if lhs.nodeinfoDirectResponseMaxHops != rhs.nodeinfoDirectResponseMaxHops {return false}
|
|
if lhs.rateLimitEnabled != rhs.rateLimitEnabled {return false}
|
|
if lhs.rateLimitWindowSecs != rhs.rateLimitWindowSecs {return false}
|
|
if lhs.rateLimitMaxPackets != rhs.rateLimitMaxPackets {return false}
|
|
if lhs.dropUnknownEnabled != rhs.dropUnknownEnabled {return false}
|
|
if lhs.unknownPacketThreshold != rhs.unknownPacketThreshold {return false}
|
|
if lhs.exhaustHopTelemetry != rhs.exhaustHopTelemetry {return false}
|
|
if lhs.exhaustHopPosition != rhs.exhaustHopPosition {return false}
|
|
if lhs.routerPreserveHops != rhs.routerPreserveHops {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.SerialConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".SerialConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{1}echo\0\u{1}rxd\0\u{1}txd\0\u{1}baud\0\u{1}timeout\0\u{1}mode\0\u{3}override_console_serial_port\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularBoolField(value: &self.echo) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.rxd) }()
|
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.txd) }()
|
|
case 5: try { try decoder.decodeSingularEnumField(value: &self.baud) }()
|
|
case 6: try { try decoder.decodeSingularUInt32Field(value: &self.timeout) }()
|
|
case 7: try { try decoder.decodeSingularEnumField(value: &self.mode) }()
|
|
case 8: try { try decoder.decodeSingularBoolField(value: &self.overrideConsoleSerialPort) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.echo != false {
|
|
try visitor.visitSingularBoolField(value: self.echo, fieldNumber: 2)
|
|
}
|
|
if self.rxd != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.rxd, fieldNumber: 3)
|
|
}
|
|
if self.txd != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.txd, fieldNumber: 4)
|
|
}
|
|
if self.baud != .baudDefault {
|
|
try visitor.visitSingularEnumField(value: self.baud, fieldNumber: 5)
|
|
}
|
|
if self.timeout != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.timeout, fieldNumber: 6)
|
|
}
|
|
if self.mode != .default {
|
|
try visitor.visitSingularEnumField(value: self.mode, fieldNumber: 7)
|
|
}
|
|
if self.overrideConsoleSerialPort != false {
|
|
try visitor.visitSingularBoolField(value: self.overrideConsoleSerialPort, fieldNumber: 8)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.SerialConfig, rhs: ModuleConfig.SerialConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.echo != rhs.echo {return false}
|
|
if lhs.rxd != rhs.rxd {return false}
|
|
if lhs.txd != rhs.txd {return false}
|
|
if lhs.baud != rhs.baud {return false}
|
|
if lhs.timeout != rhs.timeout {return false}
|
|
if lhs.mode != rhs.mode {return false}
|
|
if lhs.overrideConsoleSerialPort != rhs.overrideConsoleSerialPort {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.SerialConfig.Serial_Baud: SwiftProtobuf._ProtoNameProviding {
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0BAUD_DEFAULT\0\u{1}BAUD_110\0\u{1}BAUD_300\0\u{1}BAUD_600\0\u{1}BAUD_1200\0\u{1}BAUD_2400\0\u{1}BAUD_4800\0\u{1}BAUD_9600\0\u{1}BAUD_19200\0\u{1}BAUD_38400\0\u{1}BAUD_57600\0\u{1}BAUD_115200\0\u{1}BAUD_230400\0\u{1}BAUD_460800\0\u{1}BAUD_576000\0\u{1}BAUD_921600\0")
|
|
}
|
|
|
|
extension ModuleConfig.SerialConfig.Serial_Mode: SwiftProtobuf._ProtoNameProviding {
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0DEFAULT\0\u{1}SIMPLE\0\u{1}PROTO\0\u{1}TEXTMSG\0\u{1}NMEA\0\u{1}CALTOPO\0\u{1}WS85\0\u{1}VE_DIRECT\0\u{1}MS_CONFIG\0\u{1}LOG\0\u{1}LOGTEXT\0")
|
|
}
|
|
|
|
extension ModuleConfig.ExternalNotificationConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".ExternalNotificationConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{3}output_ms\0\u{1}output\0\u{1}active\0\u{3}alert_message\0\u{3}alert_bell\0\u{3}use_pwm\0\u{3}output_vibra\0\u{3}output_buzzer\0\u{3}alert_message_vibra\0\u{3}alert_message_buzzer\0\u{3}alert_bell_vibra\0\u{3}alert_bell_buzzer\0\u{3}nag_timeout\0\u{3}use_i2s_as_buzzer\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.outputMs) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.output) }()
|
|
case 4: try { try decoder.decodeSingularBoolField(value: &self.active) }()
|
|
case 5: try { try decoder.decodeSingularBoolField(value: &self.alertMessage) }()
|
|
case 6: try { try decoder.decodeSingularBoolField(value: &self.alertBell) }()
|
|
case 7: try { try decoder.decodeSingularBoolField(value: &self.usePwm) }()
|
|
case 8: try { try decoder.decodeSingularUInt32Field(value: &self.outputVibra) }()
|
|
case 9: try { try decoder.decodeSingularUInt32Field(value: &self.outputBuzzer) }()
|
|
case 10: try { try decoder.decodeSingularBoolField(value: &self.alertMessageVibra) }()
|
|
case 11: try { try decoder.decodeSingularBoolField(value: &self.alertMessageBuzzer) }()
|
|
case 12: try { try decoder.decodeSingularBoolField(value: &self.alertBellVibra) }()
|
|
case 13: try { try decoder.decodeSingularBoolField(value: &self.alertBellBuzzer) }()
|
|
case 14: try { try decoder.decodeSingularUInt32Field(value: &self.nagTimeout) }()
|
|
case 15: try { try decoder.decodeSingularBoolField(value: &self.useI2SAsBuzzer) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.outputMs != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.outputMs, fieldNumber: 2)
|
|
}
|
|
if self.output != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.output, fieldNumber: 3)
|
|
}
|
|
if self.active != false {
|
|
try visitor.visitSingularBoolField(value: self.active, fieldNumber: 4)
|
|
}
|
|
if self.alertMessage != false {
|
|
try visitor.visitSingularBoolField(value: self.alertMessage, fieldNumber: 5)
|
|
}
|
|
if self.alertBell != false {
|
|
try visitor.visitSingularBoolField(value: self.alertBell, fieldNumber: 6)
|
|
}
|
|
if self.usePwm != false {
|
|
try visitor.visitSingularBoolField(value: self.usePwm, fieldNumber: 7)
|
|
}
|
|
if self.outputVibra != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.outputVibra, fieldNumber: 8)
|
|
}
|
|
if self.outputBuzzer != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.outputBuzzer, fieldNumber: 9)
|
|
}
|
|
if self.alertMessageVibra != false {
|
|
try visitor.visitSingularBoolField(value: self.alertMessageVibra, fieldNumber: 10)
|
|
}
|
|
if self.alertMessageBuzzer != false {
|
|
try visitor.visitSingularBoolField(value: self.alertMessageBuzzer, fieldNumber: 11)
|
|
}
|
|
if self.alertBellVibra != false {
|
|
try visitor.visitSingularBoolField(value: self.alertBellVibra, fieldNumber: 12)
|
|
}
|
|
if self.alertBellBuzzer != false {
|
|
try visitor.visitSingularBoolField(value: self.alertBellBuzzer, fieldNumber: 13)
|
|
}
|
|
if self.nagTimeout != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.nagTimeout, fieldNumber: 14)
|
|
}
|
|
if self.useI2SAsBuzzer != false {
|
|
try visitor.visitSingularBoolField(value: self.useI2SAsBuzzer, fieldNumber: 15)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.ExternalNotificationConfig, rhs: ModuleConfig.ExternalNotificationConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.outputMs != rhs.outputMs {return false}
|
|
if lhs.output != rhs.output {return false}
|
|
if lhs.outputVibra != rhs.outputVibra {return false}
|
|
if lhs.outputBuzzer != rhs.outputBuzzer {return false}
|
|
if lhs.active != rhs.active {return false}
|
|
if lhs.alertMessage != rhs.alertMessage {return false}
|
|
if lhs.alertMessageVibra != rhs.alertMessageVibra {return false}
|
|
if lhs.alertMessageBuzzer != rhs.alertMessageBuzzer {return false}
|
|
if lhs.alertBell != rhs.alertBell {return false}
|
|
if lhs.alertBellVibra != rhs.alertBellVibra {return false}
|
|
if lhs.alertBellBuzzer != rhs.alertBellBuzzer {return false}
|
|
if lhs.usePwm != rhs.usePwm {return false}
|
|
if lhs.nagTimeout != rhs.nagTimeout {return false}
|
|
if lhs.useI2SAsBuzzer != rhs.useI2SAsBuzzer {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.StoreForwardConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".StoreForwardConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{1}heartbeat\0\u{1}records\0\u{3}history_return_max\0\u{3}history_return_window\0\u{3}is_server\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularBoolField(value: &self.heartbeat) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.records) }()
|
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.historyReturnMax) }()
|
|
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.historyReturnWindow) }()
|
|
case 6: try { try decoder.decodeSingularBoolField(value: &self.isServer) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.heartbeat != false {
|
|
try visitor.visitSingularBoolField(value: self.heartbeat, fieldNumber: 2)
|
|
}
|
|
if self.records != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.records, fieldNumber: 3)
|
|
}
|
|
if self.historyReturnMax != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.historyReturnMax, fieldNumber: 4)
|
|
}
|
|
if self.historyReturnWindow != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.historyReturnWindow, fieldNumber: 5)
|
|
}
|
|
if self.isServer != false {
|
|
try visitor.visitSingularBoolField(value: self.isServer, fieldNumber: 6)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.StoreForwardConfig, rhs: ModuleConfig.StoreForwardConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.heartbeat != rhs.heartbeat {return false}
|
|
if lhs.records != rhs.records {return false}
|
|
if lhs.historyReturnMax != rhs.historyReturnMax {return false}
|
|
if lhs.historyReturnWindow != rhs.historyReturnWindow {return false}
|
|
if lhs.isServer != rhs.isServer {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.RangeTestConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".RangeTestConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{1}enabled\0\u{1}sender\0\u{1}save\0\u{3}clear_on_reboot\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.sender) }()
|
|
case 3: try { try decoder.decodeSingularBoolField(value: &self.save) }()
|
|
case 4: try { try decoder.decodeSingularBoolField(value: &self.clearOnReboot_p) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 1)
|
|
}
|
|
if self.sender != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.sender, fieldNumber: 2)
|
|
}
|
|
if self.save != false {
|
|
try visitor.visitSingularBoolField(value: self.save, fieldNumber: 3)
|
|
}
|
|
if self.clearOnReboot_p != false {
|
|
try visitor.visitSingularBoolField(value: self.clearOnReboot_p, fieldNumber: 4)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.RangeTestConfig, rhs: ModuleConfig.RangeTestConfig) -> Bool {
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.sender != rhs.sender {return false}
|
|
if lhs.save != rhs.save {return false}
|
|
if lhs.clearOnReboot_p != rhs.clearOnReboot_p {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.TelemetryConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".TelemetryConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}device_update_interval\0\u{3}environment_update_interval\0\u{3}environment_measurement_enabled\0\u{3}environment_screen_enabled\0\u{3}environment_display_fahrenheit\0\u{3}air_quality_enabled\0\u{3}air_quality_interval\0\u{3}power_measurement_enabled\0\u{3}power_update_interval\0\u{3}power_screen_enabled\0\u{3}health_measurement_enabled\0\u{3}health_update_interval\0\u{3}health_screen_enabled\0\u{3}device_telemetry_enabled\0\u{3}air_quality_screen_enabled\0")
|
|
|
|
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.decodeSingularUInt32Field(value: &self.deviceUpdateInterval) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.environmentUpdateInterval) }()
|
|
case 3: try { try decoder.decodeSingularBoolField(value: &self.environmentMeasurementEnabled) }()
|
|
case 4: try { try decoder.decodeSingularBoolField(value: &self.environmentScreenEnabled) }()
|
|
case 5: try { try decoder.decodeSingularBoolField(value: &self.environmentDisplayFahrenheit) }()
|
|
case 6: try { try decoder.decodeSingularBoolField(value: &self.airQualityEnabled) }()
|
|
case 7: try { try decoder.decodeSingularUInt32Field(value: &self.airQualityInterval) }()
|
|
case 8: try { try decoder.decodeSingularBoolField(value: &self.powerMeasurementEnabled) }()
|
|
case 9: try { try decoder.decodeSingularUInt32Field(value: &self.powerUpdateInterval) }()
|
|
case 10: try { try decoder.decodeSingularBoolField(value: &self.powerScreenEnabled) }()
|
|
case 11: try { try decoder.decodeSingularBoolField(value: &self.healthMeasurementEnabled) }()
|
|
case 12: try { try decoder.decodeSingularUInt32Field(value: &self.healthUpdateInterval) }()
|
|
case 13: try { try decoder.decodeSingularBoolField(value: &self.healthScreenEnabled) }()
|
|
case 14: try { try decoder.decodeSingularBoolField(value: &self.deviceTelemetryEnabled) }()
|
|
case 15: try { try decoder.decodeSingularBoolField(value: &self.airQualityScreenEnabled) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.deviceUpdateInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.deviceUpdateInterval, fieldNumber: 1)
|
|
}
|
|
if self.environmentUpdateInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.environmentUpdateInterval, fieldNumber: 2)
|
|
}
|
|
if self.environmentMeasurementEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.environmentMeasurementEnabled, fieldNumber: 3)
|
|
}
|
|
if self.environmentScreenEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.environmentScreenEnabled, fieldNumber: 4)
|
|
}
|
|
if self.environmentDisplayFahrenheit != false {
|
|
try visitor.visitSingularBoolField(value: self.environmentDisplayFahrenheit, fieldNumber: 5)
|
|
}
|
|
if self.airQualityEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.airQualityEnabled, fieldNumber: 6)
|
|
}
|
|
if self.airQualityInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.airQualityInterval, fieldNumber: 7)
|
|
}
|
|
if self.powerMeasurementEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.powerMeasurementEnabled, fieldNumber: 8)
|
|
}
|
|
if self.powerUpdateInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.powerUpdateInterval, fieldNumber: 9)
|
|
}
|
|
if self.powerScreenEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.powerScreenEnabled, fieldNumber: 10)
|
|
}
|
|
if self.healthMeasurementEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.healthMeasurementEnabled, fieldNumber: 11)
|
|
}
|
|
if self.healthUpdateInterval != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.healthUpdateInterval, fieldNumber: 12)
|
|
}
|
|
if self.healthScreenEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.healthScreenEnabled, fieldNumber: 13)
|
|
}
|
|
if self.deviceTelemetryEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.deviceTelemetryEnabled, fieldNumber: 14)
|
|
}
|
|
if self.airQualityScreenEnabled != false {
|
|
try visitor.visitSingularBoolField(value: self.airQualityScreenEnabled, fieldNumber: 15)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.TelemetryConfig, rhs: ModuleConfig.TelemetryConfig) -> Bool {
|
|
if lhs.deviceUpdateInterval != rhs.deviceUpdateInterval {return false}
|
|
if lhs.environmentUpdateInterval != rhs.environmentUpdateInterval {return false}
|
|
if lhs.environmentMeasurementEnabled != rhs.environmentMeasurementEnabled {return false}
|
|
if lhs.environmentScreenEnabled != rhs.environmentScreenEnabled {return false}
|
|
if lhs.environmentDisplayFahrenheit != rhs.environmentDisplayFahrenheit {return false}
|
|
if lhs.airQualityEnabled != rhs.airQualityEnabled {return false}
|
|
if lhs.airQualityInterval != rhs.airQualityInterval {return false}
|
|
if lhs.powerMeasurementEnabled != rhs.powerMeasurementEnabled {return false}
|
|
if lhs.powerUpdateInterval != rhs.powerUpdateInterval {return false}
|
|
if lhs.powerScreenEnabled != rhs.powerScreenEnabled {return false}
|
|
if lhs.healthMeasurementEnabled != rhs.healthMeasurementEnabled {return false}
|
|
if lhs.healthUpdateInterval != rhs.healthUpdateInterval {return false}
|
|
if lhs.healthScreenEnabled != rhs.healthScreenEnabled {return false}
|
|
if lhs.deviceTelemetryEnabled != rhs.deviceTelemetryEnabled {return false}
|
|
if lhs.airQualityScreenEnabled != rhs.airQualityScreenEnabled {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.CannedMessageConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".CannedMessageConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}rotary1_enabled\0\u{3}inputbroker_pin_a\0\u{3}inputbroker_pin_b\0\u{3}inputbroker_pin_press\0\u{3}inputbroker_event_cw\0\u{3}inputbroker_event_ccw\0\u{3}inputbroker_event_press\0\u{3}updown1_enabled\0\u{1}enabled\0\u{3}allow_input_source\0\u{3}send_bell\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.rotary1Enabled) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.inputbrokerPinA) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.inputbrokerPinB) }()
|
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.inputbrokerPinPress) }()
|
|
case 5: try { try decoder.decodeSingularEnumField(value: &self.inputbrokerEventCw) }()
|
|
case 6: try { try decoder.decodeSingularEnumField(value: &self.inputbrokerEventCcw) }()
|
|
case 7: try { try decoder.decodeSingularEnumField(value: &self.inputbrokerEventPress) }()
|
|
case 8: try { try decoder.decodeSingularBoolField(value: &self.updown1Enabled) }()
|
|
case 9: try { try decoder.decodeSingularBoolField(value: &self.enabled) }()
|
|
case 10: try { try decoder.decodeSingularStringField(value: &self.allowInputSource) }()
|
|
case 11: try { try decoder.decodeSingularBoolField(value: &self.sendBell) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.rotary1Enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.rotary1Enabled, fieldNumber: 1)
|
|
}
|
|
if self.inputbrokerPinA != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.inputbrokerPinA, fieldNumber: 2)
|
|
}
|
|
if self.inputbrokerPinB != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.inputbrokerPinB, fieldNumber: 3)
|
|
}
|
|
if self.inputbrokerPinPress != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.inputbrokerPinPress, fieldNumber: 4)
|
|
}
|
|
if self.inputbrokerEventCw != .none {
|
|
try visitor.visitSingularEnumField(value: self.inputbrokerEventCw, fieldNumber: 5)
|
|
}
|
|
if self.inputbrokerEventCcw != .none {
|
|
try visitor.visitSingularEnumField(value: self.inputbrokerEventCcw, fieldNumber: 6)
|
|
}
|
|
if self.inputbrokerEventPress != .none {
|
|
try visitor.visitSingularEnumField(value: self.inputbrokerEventPress, fieldNumber: 7)
|
|
}
|
|
if self.updown1Enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.updown1Enabled, fieldNumber: 8)
|
|
}
|
|
if self.enabled != false {
|
|
try visitor.visitSingularBoolField(value: self.enabled, fieldNumber: 9)
|
|
}
|
|
if !self.allowInputSource.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.allowInputSource, fieldNumber: 10)
|
|
}
|
|
if self.sendBell != false {
|
|
try visitor.visitSingularBoolField(value: self.sendBell, fieldNumber: 11)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.CannedMessageConfig, rhs: ModuleConfig.CannedMessageConfig) -> Bool {
|
|
if lhs.rotary1Enabled != rhs.rotary1Enabled {return false}
|
|
if lhs.inputbrokerPinA != rhs.inputbrokerPinA {return false}
|
|
if lhs.inputbrokerPinB != rhs.inputbrokerPinB {return false}
|
|
if lhs.inputbrokerPinPress != rhs.inputbrokerPinPress {return false}
|
|
if lhs.inputbrokerEventCw != rhs.inputbrokerEventCw {return false}
|
|
if lhs.inputbrokerEventCcw != rhs.inputbrokerEventCcw {return false}
|
|
if lhs.inputbrokerEventPress != rhs.inputbrokerEventPress {return false}
|
|
if lhs.updown1Enabled != rhs.updown1Enabled {return false}
|
|
if lhs.enabled != rhs.enabled {return false}
|
|
if lhs.allowInputSource != rhs.allowInputSource {return false}
|
|
if lhs.sendBell != rhs.sendBell {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.CannedMessageConfig.InputEventChar: SwiftProtobuf._ProtoNameProviding {
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{2}\0NONE\0\u{2}\u{a}SELECT\0\u{2}\u{7}UP\0\u{1}DOWN\0\u{1}LEFT\0\u{1}RIGHT\0\u{2}\u{4}CANCEL\0\u{2}\u{3}BACK\0")
|
|
}
|
|
|
|
extension ModuleConfig.AmbientLightingConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".AmbientLightingConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}led_state\0\u{1}current\0\u{1}red\0\u{1}green\0\u{1}blue\0")
|
|
|
|
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.decodeSingularBoolField(value: &self.ledState) }()
|
|
case 2: try { try decoder.decodeSingularUInt32Field(value: &self.current) }()
|
|
case 3: try { try decoder.decodeSingularUInt32Field(value: &self.red) }()
|
|
case 4: try { try decoder.decodeSingularUInt32Field(value: &self.green) }()
|
|
case 5: try { try decoder.decodeSingularUInt32Field(value: &self.blue) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.ledState != false {
|
|
try visitor.visitSingularBoolField(value: self.ledState, fieldNumber: 1)
|
|
}
|
|
if self.current != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.current, fieldNumber: 2)
|
|
}
|
|
if self.red != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.red, fieldNumber: 3)
|
|
}
|
|
if self.green != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.green, fieldNumber: 4)
|
|
}
|
|
if self.blue != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.blue, fieldNumber: 5)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.AmbientLightingConfig, rhs: ModuleConfig.AmbientLightingConfig) -> Bool {
|
|
if lhs.ledState != rhs.ledState {return false}
|
|
if lhs.current != rhs.current {return false}
|
|
if lhs.red != rhs.red {return false}
|
|
if lhs.green != rhs.green {return false}
|
|
if lhs.blue != rhs.blue {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension ModuleConfig.StatusMessageConfig: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = ModuleConfig.protoMessageName + ".StatusMessageConfig"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}node_status\0")
|
|
|
|
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.nodeStatus) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if !self.nodeStatus.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.nodeStatus, fieldNumber: 1)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: ModuleConfig.StatusMessageConfig, rhs: ModuleConfig.StatusMessageConfig) -> Bool {
|
|
if lhs.nodeStatus != rhs.nodeStatus {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|
|
|
|
extension RemoteHardwarePin: SwiftProtobuf.Message, SwiftProtobuf._MessageImplementationBase, SwiftProtobuf._ProtoNameProviding {
|
|
public static let protoMessageName: String = _protobuf_package + ".RemoteHardwarePin"
|
|
public static let _protobuf_nameMap = SwiftProtobuf._NameMap(bytecode: "\0\u{3}gpio_pin\0\u{1}name\0\u{1}type\0")
|
|
|
|
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.decodeSingularUInt32Field(value: &self.gpioPin) }()
|
|
case 2: try { try decoder.decodeSingularStringField(value: &self.name) }()
|
|
case 3: try { try decoder.decodeSingularEnumField(value: &self.type) }()
|
|
default: break
|
|
}
|
|
}
|
|
}
|
|
|
|
public func traverse<V: SwiftProtobuf.Visitor>(visitor: inout V) throws {
|
|
if self.gpioPin != 0 {
|
|
try visitor.visitSingularUInt32Field(value: self.gpioPin, fieldNumber: 1)
|
|
}
|
|
if !self.name.isEmpty {
|
|
try visitor.visitSingularStringField(value: self.name, fieldNumber: 2)
|
|
}
|
|
if self.type != .unknown {
|
|
try visitor.visitSingularEnumField(value: self.type, fieldNumber: 3)
|
|
}
|
|
try unknownFields.traverse(visitor: &visitor)
|
|
}
|
|
|
|
public static func ==(lhs: RemoteHardwarePin, rhs: RemoteHardwarePin) -> Bool {
|
|
if lhs.gpioPin != rhs.gpioPin {return false}
|
|
if lhs.name != rhs.name {return false}
|
|
if lhs.type != rhs.type {return false}
|
|
if lhs.unknownFields != rhs.unknownFields {return false}
|
|
return true
|
|
}
|
|
}
|