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>
Probe and configure the sensor when present; log and continue boot if
init fails so boards without BMA456 still run normally.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add esp_now_messages.proto with EspNowMessage types, encode/decode helpers,
and Makefile targets to regenerate firmware and UART schemas together.
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>
Track ESP-NOW slaves in a shared registry and respond to CLIENT_INFO
with protobuf ClientInfoResponse; ESP-NOW path upserts registry entries.
Co-authored-by: Cursor <cursoragent@cursor.com>
Slave responds and logs only on first discover from a given master MAC;
subsequent broadcasts on the same network are silently ignored.
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>
Use TX=GPIO3 and RX=GPIO2 at 921600 to match the terminal adapter wiring;
log received message id and which handler command is triggered.
Co-authored-by: Cursor <cursoragent@cursor.com>
Centralize command dispatch over a FreeRTOS queue so UART and future
ESP-NOW transports can register handlers; implement the protobuf VERSION
command with framed nanopb responses including build git hash.
Co-authored-by: Cursor <cursoragent@cursor.com>