Slaves report pack voltages every 30s; the master caches them for fast
BATTERY_STATUS reads. goTool exposes REST/WebSocket and shows values in
the dashboard, with a nanopb fix so optional lipo submessages encode.
Co-authored-by: Cursor <cursoragent@cursor.com>
Solid color mode fills all ring LEDs; master routes UART commands to slaves
via ESPNOW_LED_RING. goTool exposes POST /api/led-ring, WebSocket set_led_ring,
and a dashboard LED panel with master/slave/all targets.
Co-authored-by: Cursor <cursoragent@cursor.com>
Slaves push BMA456 samples at 16ms when enabled; the master caches per
client and exposes ACCEL_SNAPSHOT and ACCEL_STREAM over UART. goTool adds
dashboard stream controls, HTTP accel-stream routes, and an external
WebSocket API with per-connection receive/interval and slave stream commands.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose MessageType 24 with protobuf response (success, x, y, z in raw LSB),
firmware handler with mutex-safe I2C read, goTool `accel` CLI, and docs.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default brightness is ~5%; UART blink mode and green/red pulses mark OTA success or failure. Failed UART uploads skip ESP-NOW distribution.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stop the main-loop digit demo so host-driven display persists; expose
clear/progress/digit modes with RGB and intensity via protobuf and goTool.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose OTA_SLAVE_PROGRESS on the master, track per-slave state during
distribution, run ESP-NOW OTA in a background task so the host can poll
while slaves update, and show master/slave progress in the dashboard
with table layout and faster WebSocket refresh during uploads.
Co-authored-by: Cursor <cursoragent@cursor.com>
Describe master-to-slave distribution after UART OTA, partial final block, reboot, and goTool /api/ota behaviour.
Co-authored-by: Cursor <cursoragent@cursor.com>
Share UART OTA logic between CLI and serve via POST /api/ota, WebSocket progress events, and a dashboard upload UI showing the running partition.
Co-authored-by: Cursor <cursoragent@cursor.com>
Firmware buffers 200-byte chunks into 4 KiB blocks for esp_ota_write; goTool
uploads with per-block ACK flow control and larger UART buffers to avoid stalls.
Co-authored-by: Cursor <cursoragent@cursor.com>
Always show master deadzone input with read/set controls; apply bulk slave
changes via slaves_only without changing the master's BMA456.
Co-authored-by: Cursor <cursoragent@cursor.com>
Serve polls the master over UART and pushes live state via WebSocket;
reopens the serial port when the device is unplugged and comes back.
Co-authored-by: Cursor <cursoragent@cursor.com>
Bench configs define command and console serial paths; scenarios can
reset nodes via esptool before tests. Smoke resets all nodes then waits
for ESP-NOW join.
Co-authored-by: Cursor <cursoragent@cursor.com>
JSON configs describe network and node MACs; scenarios run command
sequences with expect checks. Share UART client API across CLI and tests.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expose common gotool targets (build, clients, version, unicast-test,
deadzone) with configurable PORT, and add goTool/.gitignore for gotool.
Co-authored-by: Cursor <cursoragent@cursor.com>
Register slaves from recv src_addr instead of protobuf mac bytes, add
ESPNOW_UNICAST_TEST for path verification, restore unicast deadzone, and
expose unicast-test in goTool.
Co-authored-by: Cursor <cursoragent@cursor.com>
Filter BMA456 logs by configurable LSB threshold; master can set deadzone
for local sensor or slaves using ACCEL_DEADZONE (UART) and ESP-NOW broadcast
until unicast delivery is restored.
Co-authored-by: Cursor <cursoragent@cursor.com>
Slaves send HEARTBEAT every 1s; the master marks clients inactive after
3s without traffic and reactivates on reconnect. CLIENT_INFO reports
last_ping as milliseconds since the last packet, not uptime.
Co-authored-by: Cursor <cursoragent@cursor.com>
Refactor into version/clients subcommands with shared serial framing
to list registered slaves from the master over UART.
Co-authored-by: Cursor <cursoragent@cursor.com>
Expand main/README with master/slave overview, boot config, protocols,
and build notes; point goTool README at the full system doc.
Co-authored-by: Cursor <cursoragent@cursor.com>
Framed protobuf client for /dev/ttyUSB0 at 921600 baud with generated
uart_messages types matching the device protocol.
Co-authored-by: Cursor <cursoragent@cursor.com>