2022-06-22 09:05:56 -07:00
//
// E x t e r n a l N o t i f i c a t i o n C o n f i g . s w i f t
// M e s h t a s t i c A p p l e
//
// C o p y r i g h t ( c ) G a r t h V a n d e r H o u w e n 6 / 2 2 / 2 2 .
//
2024-06-07 22:09:20 -05:00
import MeshtasticProtobufs
2024-06-03 02:17:55 -07:00
import OSLog
2024-06-07 22:09:20 -05:00
import SwiftUI
2022-06-22 09:05:56 -07:00
struct ExternalNotificationConfig : View {
2025-10-05 17:51:18 -07:00
2022-06-22 09:05:56 -07:00
@ Environment ( \ . managedObjectContext ) var context
Transports Interface to Support TCP for all Platforms and Serial on Mac (#1341)
* Initial implementation of transports
* Initial LogRadio implementation
* Fixes for Settings view (caused by debug commenting)
* Refinement of the object and actor model
* Connect view text and tab updates
* Fix mac catalyst and tests
* Warning and logging clean-up
* In progress commit
* Serial Transport and Reconnect draft work
* Serial transport and reconnection draft work
* Quick fix for BLE - still more work to do
* interim commit
* More in progress changes
* Minor improvements
* Pretty good initial implementation
* Bump version beyond the app store
* Fix for disconnection swipeAction
* Tweaks to TCPConnection implementation
* Retry for NONCE_ONLY_DB
* Revert json string change
* Simplified some of the API + "Anti-discovery"
* Tweaks for devices leaving the discovery process
* Bump version
* iOS26 Tweaks
* Tweaks and bug fixes
* Add link with slash sf symbol
* update symbol image on connect view
* BLE disconnect handling
* Log privacy attributes
* Onboarding and minor fixes.
* change database to nodes, add emoji to tcp logs
* Error handling improvements
* More logging emojis
* Suppressed unnecessary errors on disconnect
* Heartbeat emoji
* Add bluetooth symbol
* add privacy attributes to [TCP] logs, add custom bluetooth logo
* Improve routing logs
* Emoji for connect logs
* Heartbeat emoji
* Add CBCentralManagerScanOptionAllowDuplicatesKey options to central for bluetooth
* fix nav errors by switching from observableobject to state
* Update connection indicator icon
* fix for BLE disconnects
* Connection process fixes
* More fixes/tweaks to connection process
* Strict concurrency
* Fix some warnings, remove wifi warning
* delete stale keys
* interim commit
* Update privacy for log, fix wrong space
* fix a couple of linting items
* Switch to targeted
* interim commit
* BLE Signal strenth on connect view
* Remove BLE RSSI from long press menu
* Modem lights
* minor spacing tweak
* Additional BLE logging and a scanning fix.
* Discovery and BLE RSSI improvements
* Background suspension
* Update isConnected to enable UI during db load
* update protobufs
* Replace config if statements with switches, Fix unknown module config logging, make dark mode modem circle stroke color white so they are visible
* Additional logging cleanup
* hast
* Set unmessagable to true if the longname has the unmessagable emoji
* Connect error handling improvements
* Admin popup list icon and activity lights updates
* Revert use of .toolbar back to .navigationBarItems
* More public logging
* Better BLE error handling
* Node DB progress meter
* minor tweak to activity light interaction timing
* Fix comment linting, remove stale keys
* Remove stale keys
* Easy linting fixes
* Two more simple linting fixes
* clean up meshtasticapp
* More public logging
* Replay config
* Logging
* Fix for unselected node on Settings
* Tweak to progress meter based on device idiom
* Update protos
* Session replay redaction of messages
* Serial fix for old devices, and a let statement
* Mask text too
* Fix typo
* BLE poweredOff is now an auto-reconnectable error
* Update logging
* Fix for peerRemovedPairingInformation
* Logging for BLE peripheral:didUpdateValueFor errors.
* Fix for inconsistent swipe disconnect behavior
* periperal:didUpdateValueFor error handling
* Fix for BLEConnection continuation guarding
* BLEConnection actor deadlock on disconnect
* Heartbeat nonce
* Fix for swipe disconnect and task cancellation
* Fix for swipe actions not honoring .disabled()
* Tell BLETransport when BLEConnection is cancelled
* Update navigation logging
* Logging updates
* Bump version to 2.7.0
* Organize into folders and heartbeat stuff
* Minor improvements to manual TCP connection
* Auto-connect toggle
* Possible BLE bug, still waiting to see in logs
* Concurrency tweaks
* Concurrency improvements
* requestDeviceMetadata fix. fixes remote admin
* Minor typo fixes
* "All" button for log filters: category and level
* More robust continuation handling for BLE
* @FetchRequest based ChannelMessageList
* Update info.plist and device hardware file
* Move auto connect toggle to app settings and debug mode, tint properly with the accent color
* Add label to auto connect toggle
* Update log for node info received from ourselves over the mesh
* Remove unused scrollViewProxy
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update target for connect view
* Properly Set datadog environment
* Comment out ble manager
* Adjust cyclomatic complexity thresholds in .swiftlint.yml
* Linting fixes, delete ble manager
* Make session replay debug only
---------
Co-authored-by: jake-b <jake-b@users.noreply.github.com>
Co-authored-by: jake <jake@jakes-Mac-mini.local>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-27 08:09:02 -07:00
@ EnvironmentObject var accessoryManager : AccessoryManager
2022-12-09 18:19:00 -08:00
@ Environment ( \ . dismiss ) private var goBack
2025-10-05 17:51:18 -07:00
2022-07-07 00:29:52 -07:00
var node : NodeInfoEntity ?
2025-10-05 17:51:18 -07:00
2022-07-01 10:57:54 -07:00
@ State private var isPresentingSaveConfirm : Bool = false
@ State var hasChanges = false
2022-06-22 09:05:56 -07:00
@ State var enabled = false
@ State var alertBell = false
2022-12-23 11:30:55 -08:00
@ State var alertBellBuzzer = false
@ State var alertBellVibra = false
2022-07-01 10:57:54 -07:00
@ State var alertMessage = false
2022-12-23 11:30:55 -08:00
@ State var alertMessageBuzzer = false
@ State var alertMessageVibra = false
2022-07-01 10:57:54 -07:00
@ State var active = false
2022-12-23 14:00:48 -08:00
@ State var usePWM = false
2022-07-01 10:57:54 -07:00
@ State var output = 0
2022-12-23 11:30:55 -08:00
@ State var outputBuzzer = 0
@ State var outputVibra = 0
2022-07-01 10:57:54 -07:00
@ State var outputMilliseconds = 0
2025-10-05 17:51:18 -07:00
@ State private var nagTimeout : UpdateInterval = UpdateInterval ( from : 0 )
2023-12-20 10:24:01 -08:00
@ State var useI2SAsBuzzer = false
2025-10-05 17:51:18 -07:00
2022-06-22 09:05:56 -07:00
var body : some View {
2025-10-05 17:51:18 -07:00
Form {
ConfigHeader ( title : " External notification " , config : \ . externalNotificationConfig , node : node , onAppear : setExternalNotificationValues )
Section ( header : Text ( " Options " ) ) {
Toggle ( isOn : $ enabled ) {
Label ( " Enabled " , systemImage : " megaphone " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ alertBell ) {
Label ( " Alert when receiving a bell " , systemImage : " bell " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ alertMessage ) {
Label ( " Alert when receiving a message " , systemImage : " message " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ usePWM ) {
Label ( " Use PWM Buzzer " , systemImage : " light.beacon.max.fill " )
Text ( " Use a PWM output (like the RAK Buzzer) for tunes instead of an on/off output. This will ignore the output, output duration and active settings and use the device config buzzer GPIO option instead. " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ useI2SAsBuzzer ) {
Label ( " Use I2S As Buzzer " , systemImage : " light.beacon.max.fill " )
Text ( " 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. " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
}
Section ( header : Text ( " Primary GPIO " ) ) {
Toggle ( isOn : $ active ) {
Label ( " Active " , systemImage : " togglepower " )
Text ( " If enabled, the 'output' Pin will be pulled active high, disabled means active low. " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Picker ( " Output pin GPIO " , selection : $ output ) {
ForEach ( 0. . < 49 ) {
if $0 = = 0 {
Text ( " Unset " )
} else {
Text ( " Pin \( $0 ) " )
}
2022-06-22 09:05:56 -07:00
}
2025-10-05 17:51:18 -07:00
}
. pickerStyle ( DefaultPickerStyle ( ) )
. listRowSeparator ( . visible )
Picker ( " GPIO Output Duration " , selection : $ outputMilliseconds ) {
ForEach ( OutputIntervals . allCases ) { oi in
Text ( oi . description )
2023-12-20 10:24:01 -08:00
}
2023-12-06 12:32:17 -08:00
}
2025-10-05 17:51:18 -07:00
. pickerStyle ( DefaultPickerStyle ( ) )
. listRowSeparator ( . hidden )
Text ( " When using in GPIO mode, keep the output on for this long. " )
. foregroundColor ( . gray )
. font ( . callout )
. listRowSeparator ( . visible )
UpdateIntervalPicker (
config : . nagTimeout ,
pickerLabel : " Nag Timeout " ,
selectedInterval : $ nagTimeout
)
. listRowSeparator ( . hidden )
}
Section ( header : Text ( " Optional GPIO " ) ) {
Toggle ( isOn : $ alertBellBuzzer ) {
Label ( " Alert GPIO buzzer when receiving a bell " , systemImage : " bell " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ alertBellVibra ) {
Label ( " Alert GPIO vibra motor when receiving a bell " , systemImage : " bell " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ alertMessageBuzzer ) {
Label ( " Alert GPIO buzzer when receiving a message " , systemImage : " message " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Toggle ( isOn : $ alertMessageBuzzer ) {
Label ( " Alert GPIO vibra motor when receiving a message " , systemImage : " message " )
}
. toggleStyle ( SwitchToggleStyle ( tint : . accentColor ) )
Picker ( " Output pin buzzer GPIO " , selection : $ outputBuzzer ) {
ForEach ( 0. . < 49 ) {
if $0 = = 0 {
Text ( " Unset " )
} else {
Text ( " Pin \( $0 ) " )
2022-06-22 09:05:56 -07:00
}
2025-10-05 17:51:18 -07:00
}
}
. pickerStyle ( DefaultPickerStyle ( ) )
Picker ( " Output pin vibra GPIO " , selection : $ outputVibra ) {
ForEach ( 0. . < 49 ) {
if $0 = = 0 {
Text ( " Unset " )
} else {
Text ( " Pin \( $0 ) " )
2022-06-29 20:04:20 -07:00
}
2025-10-05 17:51:18 -07:00
}
2022-07-01 10:57:54 -07:00
}
2025-10-05 17:51:18 -07:00
. pickerStyle ( DefaultPickerStyle ( ) )
2022-07-01 10:57:54 -07:00
}
2022-12-23 11:30:55 -08:00
}
2025-10-05 17:51:18 -07:00
. disabled ( ! accessoryManager . isConnected || node ? . externalNotificationConfig = = nil )
. safeAreaInset ( edge : . bottom , alignment : . center ) {
HStack ( spacing : 0 ) {
SaveConfigButton ( node : node , hasChanges : $ hasChanges ) {
let connectedNode = getNodeInfo ( id : accessoryManager . activeDeviceNum ? ? - 1 , context : context )
if connectedNode != nil {
var enc = ModuleConfig . ExternalNotificationConfig ( )
enc . enabled = enabled
enc . alertBell = alertBell
enc . alertBellBuzzer = alertBellBuzzer
enc . alertBellVibra = alertBellVibra
enc . alertMessage = alertMessage
enc . alertMessageBuzzer = alertMessageBuzzer
enc . alertMessageVibra = alertMessageVibra
enc . active = active
enc . output = UInt32 ( output )
enc . nagTimeout = UInt32 ( nagTimeout . intValue )
enc . outputBuzzer = UInt32 ( outputBuzzer )
enc . outputVibra = UInt32 ( outputVibra )
enc . outputMs = UInt32 ( outputMilliseconds )
enc . usePwm = usePWM
enc . useI2SAsBuzzer = useI2SAsBuzzer
Task {
do {
_ = try await accessoryManager . saveExternalNotificationModuleConfig ( config : enc , fromUser : connectedNode ! . user ! , toUser : node ! . user ! )
Task { @ MainActor in
hasChanges = false
goBack ( )
}
} catch {
Logger . mesh . error ( " Unable to save external notiication module config " )
}
Transports Interface to Support TCP for all Platforms and Serial on Mac (#1341)
* Initial implementation of transports
* Initial LogRadio implementation
* Fixes for Settings view (caused by debug commenting)
* Refinement of the object and actor model
* Connect view text and tab updates
* Fix mac catalyst and tests
* Warning and logging clean-up
* In progress commit
* Serial Transport and Reconnect draft work
* Serial transport and reconnection draft work
* Quick fix for BLE - still more work to do
* interim commit
* More in progress changes
* Minor improvements
* Pretty good initial implementation
* Bump version beyond the app store
* Fix for disconnection swipeAction
* Tweaks to TCPConnection implementation
* Retry for NONCE_ONLY_DB
* Revert json string change
* Simplified some of the API + "Anti-discovery"
* Tweaks for devices leaving the discovery process
* Bump version
* iOS26 Tweaks
* Tweaks and bug fixes
* Add link with slash sf symbol
* update symbol image on connect view
* BLE disconnect handling
* Log privacy attributes
* Onboarding and minor fixes.
* change database to nodes, add emoji to tcp logs
* Error handling improvements
* More logging emojis
* Suppressed unnecessary errors on disconnect
* Heartbeat emoji
* Add bluetooth symbol
* add privacy attributes to [TCP] logs, add custom bluetooth logo
* Improve routing logs
* Emoji for connect logs
* Heartbeat emoji
* Add CBCentralManagerScanOptionAllowDuplicatesKey options to central for bluetooth
* fix nav errors by switching from observableobject to state
* Update connection indicator icon
* fix for BLE disconnects
* Connection process fixes
* More fixes/tweaks to connection process
* Strict concurrency
* Fix some warnings, remove wifi warning
* delete stale keys
* interim commit
* Update privacy for log, fix wrong space
* fix a couple of linting items
* Switch to targeted
* interim commit
* BLE Signal strenth on connect view
* Remove BLE RSSI from long press menu
* Modem lights
* minor spacing tweak
* Additional BLE logging and a scanning fix.
* Discovery and BLE RSSI improvements
* Background suspension
* Update isConnected to enable UI during db load
* update protobufs
* Replace config if statements with switches, Fix unknown module config logging, make dark mode modem circle stroke color white so they are visible
* Additional logging cleanup
* hast
* Set unmessagable to true if the longname has the unmessagable emoji
* Connect error handling improvements
* Admin popup list icon and activity lights updates
* Revert use of .toolbar back to .navigationBarItems
* More public logging
* Better BLE error handling
* Node DB progress meter
* minor tweak to activity light interaction timing
* Fix comment linting, remove stale keys
* Remove stale keys
* Easy linting fixes
* Two more simple linting fixes
* clean up meshtasticapp
* More public logging
* Replay config
* Logging
* Fix for unselected node on Settings
* Tweak to progress meter based on device idiom
* Update protos
* Session replay redaction of messages
* Serial fix for old devices, and a let statement
* Mask text too
* Fix typo
* BLE poweredOff is now an auto-reconnectable error
* Update logging
* Fix for peerRemovedPairingInformation
* Logging for BLE peripheral:didUpdateValueFor errors.
* Fix for inconsistent swipe disconnect behavior
* periperal:didUpdateValueFor error handling
* Fix for BLEConnection continuation guarding
* BLEConnection actor deadlock on disconnect
* Heartbeat nonce
* Fix for swipe disconnect and task cancellation
* Fix for swipe actions not honoring .disabled()
* Tell BLETransport when BLEConnection is cancelled
* Update navigation logging
* Logging updates
* Bump version to 2.7.0
* Organize into folders and heartbeat stuff
* Minor improvements to manual TCP connection
* Auto-connect toggle
* Possible BLE bug, still waiting to see in logs
* Concurrency tweaks
* Concurrency improvements
* requestDeviceMetadata fix. fixes remote admin
* Minor typo fixes
* "All" button for log filters: category and level
* More robust continuation handling for BLE
* @FetchRequest based ChannelMessageList
* Update info.plist and device hardware file
* Move auto connect toggle to app settings and debug mode, tint properly with the accent color
* Add label to auto connect toggle
* Update log for node info received from ourselves over the mesh
* Remove unused scrollViewProxy
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update target for connect view
* Properly Set datadog environment
* Comment out ble manager
* Adjust cyclomatic complexity thresholds in .swiftlint.yml
* Linting fixes, delete ble manager
* Make session replay debug only
---------
Co-authored-by: jake-b <jake-b@users.noreply.github.com>
Co-authored-by: jake <jake@jakes-Mac-mini.local>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-27 08:09:02 -07:00
}
}
2022-07-11 16:18:16 -07:00
}
2022-07-02 12:34:45 -07:00
}
2022-12-23 11:30:55 -08:00
}
2025-05-08 22:50:44 -07:00
. navigationTitle ( " External Notification Config " )
2024-08-11 09:07:22 -07:00
. navigationBarItems (
trailing : ZStack {
ConnectedDevice (
Transports Interface to Support TCP for all Platforms and Serial on Mac (#1341)
* Initial implementation of transports
* Initial LogRadio implementation
* Fixes for Settings view (caused by debug commenting)
* Refinement of the object and actor model
* Connect view text and tab updates
* Fix mac catalyst and tests
* Warning and logging clean-up
* In progress commit
* Serial Transport and Reconnect draft work
* Serial transport and reconnection draft work
* Quick fix for BLE - still more work to do
* interim commit
* More in progress changes
* Minor improvements
* Pretty good initial implementation
* Bump version beyond the app store
* Fix for disconnection swipeAction
* Tweaks to TCPConnection implementation
* Retry for NONCE_ONLY_DB
* Revert json string change
* Simplified some of the API + "Anti-discovery"
* Tweaks for devices leaving the discovery process
* Bump version
* iOS26 Tweaks
* Tweaks and bug fixes
* Add link with slash sf symbol
* update symbol image on connect view
* BLE disconnect handling
* Log privacy attributes
* Onboarding and minor fixes.
* change database to nodes, add emoji to tcp logs
* Error handling improvements
* More logging emojis
* Suppressed unnecessary errors on disconnect
* Heartbeat emoji
* Add bluetooth symbol
* add privacy attributes to [TCP] logs, add custom bluetooth logo
* Improve routing logs
* Emoji for connect logs
* Heartbeat emoji
* Add CBCentralManagerScanOptionAllowDuplicatesKey options to central for bluetooth
* fix nav errors by switching from observableobject to state
* Update connection indicator icon
* fix for BLE disconnects
* Connection process fixes
* More fixes/tweaks to connection process
* Strict concurrency
* Fix some warnings, remove wifi warning
* delete stale keys
* interim commit
* Update privacy for log, fix wrong space
* fix a couple of linting items
* Switch to targeted
* interim commit
* BLE Signal strenth on connect view
* Remove BLE RSSI from long press menu
* Modem lights
* minor spacing tweak
* Additional BLE logging and a scanning fix.
* Discovery and BLE RSSI improvements
* Background suspension
* Update isConnected to enable UI during db load
* update protobufs
* Replace config if statements with switches, Fix unknown module config logging, make dark mode modem circle stroke color white so they are visible
* Additional logging cleanup
* hast
* Set unmessagable to true if the longname has the unmessagable emoji
* Connect error handling improvements
* Admin popup list icon and activity lights updates
* Revert use of .toolbar back to .navigationBarItems
* More public logging
* Better BLE error handling
* Node DB progress meter
* minor tweak to activity light interaction timing
* Fix comment linting, remove stale keys
* Remove stale keys
* Easy linting fixes
* Two more simple linting fixes
* clean up meshtasticapp
* More public logging
* Replay config
* Logging
* Fix for unselected node on Settings
* Tweak to progress meter based on device idiom
* Update protos
* Session replay redaction of messages
* Serial fix for old devices, and a let statement
* Mask text too
* Fix typo
* BLE poweredOff is now an auto-reconnectable error
* Update logging
* Fix for peerRemovedPairingInformation
* Logging for BLE peripheral:didUpdateValueFor errors.
* Fix for inconsistent swipe disconnect behavior
* periperal:didUpdateValueFor error handling
* Fix for BLEConnection continuation guarding
* BLEConnection actor deadlock on disconnect
* Heartbeat nonce
* Fix for swipe disconnect and task cancellation
* Fix for swipe actions not honoring .disabled()
* Tell BLETransport when BLEConnection is cancelled
* Update navigation logging
* Logging updates
* Bump version to 2.7.0
* Organize into folders and heartbeat stuff
* Minor improvements to manual TCP connection
* Auto-connect toggle
* Possible BLE bug, still waiting to see in logs
* Concurrency tweaks
* Concurrency improvements
* requestDeviceMetadata fix. fixes remote admin
* Minor typo fixes
* "All" button for log filters: category and level
* More robust continuation handling for BLE
* @FetchRequest based ChannelMessageList
* Update info.plist and device hardware file
* Move auto connect toggle to app settings and debug mode, tint properly with the accent color
* Add label to auto connect toggle
* Update log for node info received from ourselves over the mesh
* Remove unused scrollViewProxy
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update target for connect view
* Properly Set datadog environment
* Comment out ble manager
* Adjust cyclomatic complexity thresholds in .swiftlint.yml
* Linting fixes, delete ble manager
* Make session replay debug only
---------
Co-authored-by: jake-b <jake-b@users.noreply.github.com>
Co-authored-by: jake <jake@jakes-Mac-mini.local>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-27 08:09:02 -07:00
deviceConnected : accessoryManager . isConnected ,
name : accessoryManager . activeConnection ? . device . shortName ? ? " ? "
2024-08-11 09:07:22 -07:00
)
}
)
2024-09-05 19:31:29 -07:00
. onFirstAppear {
// N e e d t o r e q u e s t a E x t e r n a l N o t i f i c a t i o n M o d u l e C o n f i g f r o m t h e r e m o t e n o d e b e f o r e a l l o w i n g c h a n g e s
Transports Interface to Support TCP for all Platforms and Serial on Mac (#1341)
* Initial implementation of transports
* Initial LogRadio implementation
* Fixes for Settings view (caused by debug commenting)
* Refinement of the object and actor model
* Connect view text and tab updates
* Fix mac catalyst and tests
* Warning and logging clean-up
* In progress commit
* Serial Transport and Reconnect draft work
* Serial transport and reconnection draft work
* Quick fix for BLE - still more work to do
* interim commit
* More in progress changes
* Minor improvements
* Pretty good initial implementation
* Bump version beyond the app store
* Fix for disconnection swipeAction
* Tweaks to TCPConnection implementation
* Retry for NONCE_ONLY_DB
* Revert json string change
* Simplified some of the API + "Anti-discovery"
* Tweaks for devices leaving the discovery process
* Bump version
* iOS26 Tweaks
* Tweaks and bug fixes
* Add link with slash sf symbol
* update symbol image on connect view
* BLE disconnect handling
* Log privacy attributes
* Onboarding and minor fixes.
* change database to nodes, add emoji to tcp logs
* Error handling improvements
* More logging emojis
* Suppressed unnecessary errors on disconnect
* Heartbeat emoji
* Add bluetooth symbol
* add privacy attributes to [TCP] logs, add custom bluetooth logo
* Improve routing logs
* Emoji for connect logs
* Heartbeat emoji
* Add CBCentralManagerScanOptionAllowDuplicatesKey options to central for bluetooth
* fix nav errors by switching from observableobject to state
* Update connection indicator icon
* fix for BLE disconnects
* Connection process fixes
* More fixes/tweaks to connection process
* Strict concurrency
* Fix some warnings, remove wifi warning
* delete stale keys
* interim commit
* Update privacy for log, fix wrong space
* fix a couple of linting items
* Switch to targeted
* interim commit
* BLE Signal strenth on connect view
* Remove BLE RSSI from long press menu
* Modem lights
* minor spacing tweak
* Additional BLE logging and a scanning fix.
* Discovery and BLE RSSI improvements
* Background suspension
* Update isConnected to enable UI during db load
* update protobufs
* Replace config if statements with switches, Fix unknown module config logging, make dark mode modem circle stroke color white so they are visible
* Additional logging cleanup
* hast
* Set unmessagable to true if the longname has the unmessagable emoji
* Connect error handling improvements
* Admin popup list icon and activity lights updates
* Revert use of .toolbar back to .navigationBarItems
* More public logging
* Better BLE error handling
* Node DB progress meter
* minor tweak to activity light interaction timing
* Fix comment linting, remove stale keys
* Remove stale keys
* Easy linting fixes
* Two more simple linting fixes
* clean up meshtasticapp
* More public logging
* Replay config
* Logging
* Fix for unselected node on Settings
* Tweak to progress meter based on device idiom
* Update protos
* Session replay redaction of messages
* Serial fix for old devices, and a let statement
* Mask text too
* Fix typo
* BLE poweredOff is now an auto-reconnectable error
* Update logging
* Fix for peerRemovedPairingInformation
* Logging for BLE peripheral:didUpdateValueFor errors.
* Fix for inconsistent swipe disconnect behavior
* periperal:didUpdateValueFor error handling
* Fix for BLEConnection continuation guarding
* BLEConnection actor deadlock on disconnect
* Heartbeat nonce
* Fix for swipe disconnect and task cancellation
* Fix for swipe actions not honoring .disabled()
* Tell BLETransport when BLEConnection is cancelled
* Update navigation logging
* Logging updates
* Bump version to 2.7.0
* Organize into folders and heartbeat stuff
* Minor improvements to manual TCP connection
* Auto-connect toggle
* Possible BLE bug, still waiting to see in logs
* Concurrency tweaks
* Concurrency improvements
* requestDeviceMetadata fix. fixes remote admin
* Minor typo fixes
* "All" button for log filters: category and level
* More robust continuation handling for BLE
* @FetchRequest based ChannelMessageList
* Update info.plist and device hardware file
* Move auto connect toggle to app settings and debug mode, tint properly with the accent color
* Add label to auto connect toggle
* Update log for node info received from ourselves over the mesh
* Remove unused scrollViewProxy
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update target for connect view
* Properly Set datadog environment
* Comment out ble manager
* Adjust cyclomatic complexity thresholds in .swiftlint.yml
* Linting fixes, delete ble manager
* Make session replay debug only
---------
Co-authored-by: jake-b <jake-b@users.noreply.github.com>
Co-authored-by: jake <jake@jakes-Mac-mini.local>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-27 08:09:02 -07:00
if let deviceNum = accessoryManager . activeDeviceNum , let node {
let connectedNode = getNodeInfo ( id : deviceNum , context : context )
2024-09-05 19:31:29 -07:00
if let connectedNode {
Transports Interface to Support TCP for all Platforms and Serial on Mac (#1341)
* Initial implementation of transports
* Initial LogRadio implementation
* Fixes for Settings view (caused by debug commenting)
* Refinement of the object and actor model
* Connect view text and tab updates
* Fix mac catalyst and tests
* Warning and logging clean-up
* In progress commit
* Serial Transport and Reconnect draft work
* Serial transport and reconnection draft work
* Quick fix for BLE - still more work to do
* interim commit
* More in progress changes
* Minor improvements
* Pretty good initial implementation
* Bump version beyond the app store
* Fix for disconnection swipeAction
* Tweaks to TCPConnection implementation
* Retry for NONCE_ONLY_DB
* Revert json string change
* Simplified some of the API + "Anti-discovery"
* Tweaks for devices leaving the discovery process
* Bump version
* iOS26 Tweaks
* Tweaks and bug fixes
* Add link with slash sf symbol
* update symbol image on connect view
* BLE disconnect handling
* Log privacy attributes
* Onboarding and minor fixes.
* change database to nodes, add emoji to tcp logs
* Error handling improvements
* More logging emojis
* Suppressed unnecessary errors on disconnect
* Heartbeat emoji
* Add bluetooth symbol
* add privacy attributes to [TCP] logs, add custom bluetooth logo
* Improve routing logs
* Emoji for connect logs
* Heartbeat emoji
* Add CBCentralManagerScanOptionAllowDuplicatesKey options to central for bluetooth
* fix nav errors by switching from observableobject to state
* Update connection indicator icon
* fix for BLE disconnects
* Connection process fixes
* More fixes/tweaks to connection process
* Strict concurrency
* Fix some warnings, remove wifi warning
* delete stale keys
* interim commit
* Update privacy for log, fix wrong space
* fix a couple of linting items
* Switch to targeted
* interim commit
* BLE Signal strenth on connect view
* Remove BLE RSSI from long press menu
* Modem lights
* minor spacing tweak
* Additional BLE logging and a scanning fix.
* Discovery and BLE RSSI improvements
* Background suspension
* Update isConnected to enable UI during db load
* update protobufs
* Replace config if statements with switches, Fix unknown module config logging, make dark mode modem circle stroke color white so they are visible
* Additional logging cleanup
* hast
* Set unmessagable to true if the longname has the unmessagable emoji
* Connect error handling improvements
* Admin popup list icon and activity lights updates
* Revert use of .toolbar back to .navigationBarItems
* More public logging
* Better BLE error handling
* Node DB progress meter
* minor tweak to activity light interaction timing
* Fix comment linting, remove stale keys
* Remove stale keys
* Easy linting fixes
* Two more simple linting fixes
* clean up meshtasticapp
* More public logging
* Replay config
* Logging
* Fix for unselected node on Settings
* Tweak to progress meter based on device idiom
* Update protos
* Session replay redaction of messages
* Serial fix for old devices, and a let statement
* Mask text too
* Fix typo
* BLE poweredOff is now an auto-reconnectable error
* Update logging
* Fix for peerRemovedPairingInformation
* Logging for BLE peripheral:didUpdateValueFor errors.
* Fix for inconsistent swipe disconnect behavior
* periperal:didUpdateValueFor error handling
* Fix for BLEConnection continuation guarding
* BLEConnection actor deadlock on disconnect
* Heartbeat nonce
* Fix for swipe disconnect and task cancellation
* Fix for swipe actions not honoring .disabled()
* Tell BLETransport when BLEConnection is cancelled
* Update navigation logging
* Logging updates
* Bump version to 2.7.0
* Organize into folders and heartbeat stuff
* Minor improvements to manual TCP connection
* Auto-connect toggle
* Possible BLE bug, still waiting to see in logs
* Concurrency tweaks
* Concurrency improvements
* requestDeviceMetadata fix. fixes remote admin
* Minor typo fixes
* "All" button for log filters: category and level
* More robust continuation handling for BLE
* @FetchRequest based ChannelMessageList
* Update info.plist and device hardware file
* Move auto connect toggle to app settings and debug mode, tint properly with the accent color
* Add label to auto connect toggle
* Update log for node info received from ourselves over the mesh
* Remove unused scrollViewProxy
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update target for connect view
* Properly Set datadog environment
* Comment out ble manager
* Adjust cyclomatic complexity thresholds in .swiftlint.yml
* Linting fixes, delete ble manager
* Make session replay debug only
---------
Co-authored-by: jake-b <jake-b@users.noreply.github.com>
Co-authored-by: jake <jake@jakes-Mac-mini.local>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-27 08:09:02 -07:00
if node . num != deviceNum {
2024-09-05 19:31:29 -07:00
if UserDefaults . enableAdministration && node . num != connectedNode . num {
// / 2 . 5 A d m i n i s t r a t i o n w i t h s e s s i o n p a s s k e y
let expiration = node . sessionExpiration ? ? Date ( )
if expiration < Date ( ) || node . externalNotificationConfig = = nil {
Transports Interface to Support TCP for all Platforms and Serial on Mac (#1341)
* Initial implementation of transports
* Initial LogRadio implementation
* Fixes for Settings view (caused by debug commenting)
* Refinement of the object and actor model
* Connect view text and tab updates
* Fix mac catalyst and tests
* Warning and logging clean-up
* In progress commit
* Serial Transport and Reconnect draft work
* Serial transport and reconnection draft work
* Quick fix for BLE - still more work to do
* interim commit
* More in progress changes
* Minor improvements
* Pretty good initial implementation
* Bump version beyond the app store
* Fix for disconnection swipeAction
* Tweaks to TCPConnection implementation
* Retry for NONCE_ONLY_DB
* Revert json string change
* Simplified some of the API + "Anti-discovery"
* Tweaks for devices leaving the discovery process
* Bump version
* iOS26 Tweaks
* Tweaks and bug fixes
* Add link with slash sf symbol
* update symbol image on connect view
* BLE disconnect handling
* Log privacy attributes
* Onboarding and minor fixes.
* change database to nodes, add emoji to tcp logs
* Error handling improvements
* More logging emojis
* Suppressed unnecessary errors on disconnect
* Heartbeat emoji
* Add bluetooth symbol
* add privacy attributes to [TCP] logs, add custom bluetooth logo
* Improve routing logs
* Emoji for connect logs
* Heartbeat emoji
* Add CBCentralManagerScanOptionAllowDuplicatesKey options to central for bluetooth
* fix nav errors by switching from observableobject to state
* Update connection indicator icon
* fix for BLE disconnects
* Connection process fixes
* More fixes/tweaks to connection process
* Strict concurrency
* Fix some warnings, remove wifi warning
* delete stale keys
* interim commit
* Update privacy for log, fix wrong space
* fix a couple of linting items
* Switch to targeted
* interim commit
* BLE Signal strenth on connect view
* Remove BLE RSSI from long press menu
* Modem lights
* minor spacing tweak
* Additional BLE logging and a scanning fix.
* Discovery and BLE RSSI improvements
* Background suspension
* Update isConnected to enable UI during db load
* update protobufs
* Replace config if statements with switches, Fix unknown module config logging, make dark mode modem circle stroke color white so they are visible
* Additional logging cleanup
* hast
* Set unmessagable to true if the longname has the unmessagable emoji
* Connect error handling improvements
* Admin popup list icon and activity lights updates
* Revert use of .toolbar back to .navigationBarItems
* More public logging
* Better BLE error handling
* Node DB progress meter
* minor tweak to activity light interaction timing
* Fix comment linting, remove stale keys
* Remove stale keys
* Easy linting fixes
* Two more simple linting fixes
* clean up meshtasticapp
* More public logging
* Replay config
* Logging
* Fix for unselected node on Settings
* Tweak to progress meter based on device idiom
* Update protos
* Session replay redaction of messages
* Serial fix for old devices, and a let statement
* Mask text too
* Fix typo
* BLE poweredOff is now an auto-reconnectable error
* Update logging
* Fix for peerRemovedPairingInformation
* Logging for BLE peripheral:didUpdateValueFor errors.
* Fix for inconsistent swipe disconnect behavior
* periperal:didUpdateValueFor error handling
* Fix for BLEConnection continuation guarding
* BLEConnection actor deadlock on disconnect
* Heartbeat nonce
* Fix for swipe disconnect and task cancellation
* Fix for swipe actions not honoring .disabled()
* Tell BLETransport when BLEConnection is cancelled
* Update navigation logging
* Logging updates
* Bump version to 2.7.0
* Organize into folders and heartbeat stuff
* Minor improvements to manual TCP connection
* Auto-connect toggle
* Possible BLE bug, still waiting to see in logs
* Concurrency tweaks
* Concurrency improvements
* requestDeviceMetadata fix. fixes remote admin
* Minor typo fixes
* "All" button for log filters: category and level
* More robust continuation handling for BLE
* @FetchRequest based ChannelMessageList
* Update info.plist and device hardware file
* Move auto connect toggle to app settings and debug mode, tint properly with the accent color
* Add label to auto connect toggle
* Update log for node info received from ourselves over the mesh
* Remove unused scrollViewProxy
* Update Meshtastic/Views/Onboarding/DeviceOnboarding.swift
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Update target for connect view
* Properly Set datadog environment
* Comment out ble manager
* Adjust cyclomatic complexity thresholds in .swiftlint.yml
* Linting fixes, delete ble manager
* Make session replay debug only
---------
Co-authored-by: jake-b <jake-b@users.noreply.github.com>
Co-authored-by: jake <jake@jakes-Mac-mini.local>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-27 08:09:02 -07:00
Task {
do {
Logger . mesh . info ( " ⚙️ Empty or expired external notificaiton module config requesting via PKI admin " )
try await accessoryManager . requestExternalNotificationModuleConfig ( fromUser : connectedNode . user ! , toUser : node . user ! )
} catch {
Logger . mesh . info ( " 🚨 Unable to send external ntoification module config request " )
}
}
2024-09-05 19:31:29 -07:00
}
} else {
// / L e g a c y A d m i n i s t r a t i o n
2025-05-13 06:19:27 -07:00
Logger . mesh . info ( " ☠️ Using insecure legacy admin that is no longer supported, please upgrade your firmware. " )
2024-09-05 19:31:29 -07:00
}
}
2023-02-01 09:19:45 -08:00
}
}
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : enabled ) { _ , newEnabled in
if newEnabled != node ? . externalNotificationConfig ? . enabled { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : alertBell ) { _ , newAlertBell in
if newAlertBell != node ? . externalNotificationConfig ? . alertBell { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : alertBellBuzzer ) { _ , newAlertBellBuzzer in
if newAlertBellBuzzer != node ? . externalNotificationConfig ? . alertBellBuzzer { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : alertBellVibra ) { _ , newAlertBellVibra in
if newAlertBellVibra != node ? . externalNotificationConfig ? . alertBellVibra { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : alertMessage ) { _ , newAlertMessage in
if newAlertMessage != node ? . externalNotificationConfig ? . alertMessage { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : alertMessageBuzzer ) { _ , newAlertMessageBuzzer in
if newAlertMessageBuzzer != node ? . externalNotificationConfig ? . alertMessageBuzzer { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : alertMessageVibra ) { _ , newAlertMessageVibra in
if newAlertMessageVibra != node ? . externalNotificationConfig ? . alertMessageVibra { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : active ) { _ , newActive in
if newActive != node ? . externalNotificationConfig ? . active { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : output ) { _ , newOutput in
if newOutput != node ? . externalNotificationConfig ? . output ? ? - 1 { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : output ) { _ , newOutputBuzzer in
if newOutputBuzzer != node ? . externalNotificationConfig ? . outputBuzzer ? ? - 1 { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : output ) { _ , newOutputVibra in
if newOutputVibra != node ? . externalNotificationConfig ? . outputVibra ? ? - 1 { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : outputMilliseconds ) { _ , newOutputMs in
if newOutputMs != node ? . externalNotificationConfig ? . outputMilliseconds ? ? - 1 { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : usePWM ) { _ , newPWM in
if newPWM != node ? . externalNotificationConfig ? . usePWM { hasChanges = true }
2022-12-23 11:30:55 -08:00
}
2025-10-05 17:51:18 -07:00
. onChange ( of : nagTimeout . intValue ) { _ , newNagTimeout in
2024-10-06 08:50:12 -07:00
if newNagTimeout != node ? . externalNotificationConfig ? . nagTimeout ? ? - 1 { hasChanges = true }
2022-06-22 09:05:56 -07:00
}
2024-10-06 08:50:12 -07:00
. onChange ( of : useI2SAsBuzzer ) { _ , newUseI2SAsBuzzer in
if newUseI2SAsBuzzer != node ? . externalNotificationConfig ? . useI2SAsBuzzer { hasChanges = true }
2023-12-20 10:24:01 -08:00
}
2022-06-22 09:05:56 -07:00
}
2023-03-19 18:37:23 -07:00
func setExternalNotificationValues ( ) {
self . enabled = node ? . externalNotificationConfig ? . enabled ? ? false
self . alertBell = node ? . externalNotificationConfig ? . alertBell ? ? false
self . alertBellBuzzer = node ? . externalNotificationConfig ? . alertBellBuzzer ? ? false
self . alertBellVibra = node ? . externalNotificationConfig ? . alertBellVibra ? ? false
self . alertMessage = node ? . externalNotificationConfig ? . alertMessage ? ? false
self . alertMessageBuzzer = node ? . externalNotificationConfig ? . alertMessageBuzzer ? ? false
self . alertMessageVibra = node ? . externalNotificationConfig ? . alertMessageVibra ? ? false
self . active = node ? . externalNotificationConfig ? . active ? ? false
self . output = Int ( node ? . externalNotificationConfig ? . output ? ? 0 )
self . outputBuzzer = Int ( node ? . externalNotificationConfig ? . outputBuzzer ? ? 0 )
self . outputVibra = Int ( node ? . externalNotificationConfig ? . outputVibra ? ? 0 )
self . outputMilliseconds = Int ( node ? . externalNotificationConfig ? . outputMilliseconds ? ? 0 )
2025-10-05 17:51:18 -07:00
self . nagTimeout = UpdateInterval ( from : Int ( node ? . externalNotificationConfig ? . nagTimeout ? ? 0 ) )
2023-03-19 18:37:23 -07:00
self . usePWM = node ? . externalNotificationConfig ? . usePWM ? ? false
2023-12-20 10:24:01 -08:00
self . useI2SAsBuzzer = node ? . externalNotificationConfig ? . useI2SAsBuzzer ? ? false
2023-03-19 18:37:23 -07:00
self . hasChanges = false
}
2022-06-22 09:05:56 -07:00
}
2025-10-05 17:51:18 -07:00