USB client presence IS detectable on nRF52 after all: (bool)Serial ==
tud_cdc_n_connected() (DTR — a host has the CDC port open). Add
isClientConnected() = BLE-bonded OR USB-CDC-open; DualSerialInterface
overrides it, base defaults to isConnected() (single-transport unchanged).
Wire it so each consumer gets the right signal:
- hasConnection() ← isClientConnected(): Auto buzzer mute + message-wake now
trigger on BLE or an open USB port (PR #14's intent, done correctly), but
not on charging-only (no host → DTR low).
- BT status indicator + pairing PIN stay on isBLEConnected() (BLE-specific).
Caveat: a plain serial monitor also asserts DTR, so it counts as connected.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- DualSerialInterface: guard writeFrame/isWriteBusy/isBLEConnected with
_ble_enabled to avoid BLE-after-disable race
- NearbyScreen: initialize all fields in constructor; promote D_* layout
constants to class scope; clamp _dscroll on result count change;
replace hardcoded 2 with D_VISIBLE in scroll logic; allow re-scan
from detail view via KEY_CONTEXT_MENU/KEY_ENTER
- variant.cpp: fix inconsistent indentation in initVariant()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- DualSerialInterface: enable()/disable() control BLE only, USB always on;
USB state machine not read while BLE connected to avoid partial-frame
corruption; reset USB on BLE disconnect for clean reconnect
- Fix -UBLE_DEBUG_LOGGING (no space) to avoid PlatformIO SCons parse error
- build.sh: drop separate USB/BLE builds, dual_settings only
- wio-tracker-l1-eink: enable DUAL_SERIAL in companion_radio_ble build
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
BLE takes priority when connected; USB is always ready as fallback.
Both state machines run continuously — no BLE disconnect on USB connect.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaced use of `restartOnDisconnect(true)` with explicit (existing) manual re-advertising logic.
This avoids Bluetooth stack instability caused by overlapping advertising state,
Changes:
- Added explicit `Bluefruit.Advertising.stop()` and data clears in `startAdv()`
- Disabled automatic restart with `restartOnDisconnect(false)`
- Re-advertising now fully handled in `checkRecvFrame()` loop
Tested on: iPhone, Android, Windows, and Chrome – confirmed stable reconnects and name visibility.
Removed the call to Bluefruit.ScanResponse.addName() in startAdv(), as it was preventing BLE from reliably restarting advertising after a disconnect.
Hypothesis: adding the device name to the scan response exceeds internal buffer limits or causes a conflict with advertising timing, leading to the BLE stack silently failing to re-advertise.
Tested successfully (on T-1000) without this line, advertising now resumes correctly after disconnection (on Iphone)
Added RAK12500 GPS support
Added socket scan capability to determine which socket the GPS is connected to
T-beam supreme: added conditional to displaying location data to only when gps is active