Use a uint16 LE length and 1024-byte max payload so CLIENT_INFO and BATTERY_STATUS no longer fail encoding past ~10 connected pods.
Co-authored-by: Cursor <cursoragent@cursor.com>
Accel/tap use fire-and-forget ESP-NOW with a 10 ms FreeRTOS-safe cadence, OTA recovers from seq gaps and auto-reboots after success, and bootloader app rollback confirms after a stable boot.
Co-authored-by: Cursor <cursoragent@cursor.com>
Allow the same staged firmware upload path on BLE as UART, fix distribute stack/event-group crashes, and recover sticky slave OTA sessions instead of failing with err=4.
Co-authored-by: Cursor <cursoragent@cursor.com>
Serve starts without a required port; REST/WS/UI can scan and switch transports, with BLE live ticks and UART-only OTA.
Co-authored-by: Cursor <cursoragent@cursor.com>
Master can speak the same framed protobuf protocol over NimBLE or UART; goTool gains -ble, ble-rtt, and ble-stream timing checks for ESP-NOW coexistence.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose the command via goTool CLI/REST and dashboard controls so log verbosity can be tuned without reflashing.
Co-authored-by: Cursor <cursoragent@cursor.com>
Split ESP-NOW into core/master/slave modules, block non-OTA UART traffic during updates, and hold the host serial port exclusively so dashboard polling cannot interleave with firmware uploads.
Co-authored-by: Cursor <cursoragent@cursor.com>
Document UART command flow, ESP-NOW data paths, and module map for
developers without covering goTool; link from main/README.
Co-authored-by: Cursor <cursoragent@cursor.com>