ReadFrame now returns on serial timeout instead of looping forever, and
serve closes and reopens the port after a master reboot so polling and
API commands can resume.
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>
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>