Fix UART hang after master restart from the dashboard.

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>
This commit is contained in:
2026-05-31 16:45:57 +02:00
co-authored by Cursor
parent e4ce18edd8
commit ab1844ac32
5 changed files with 44 additions and 7 deletions
+2 -2
View File
@@ -80,7 +80,7 @@ func (s *serialPort) exchangePayloadLocked(payload []byte, cmdName string, timeo
}
defer func() { _ = s.port.SetReadTimeout(readTimeout) }()
respPayload, err := uartframe.ReadFrame(s.port, nil)
respPayload, err := uartframe.ReadFrame(s.port, nil, timeout)
if err != nil {
return nil, fmt.Errorf("read response: %w", err)
}
@@ -113,7 +113,7 @@ func (s *serialPort) exchangeLocked(cmdID byte, cmdName string) ([]byte, error)
return nil, fmt.Errorf("write: %w", err)
}
payload, err := uartframe.ReadFrame(s.port, nil)
payload, err := uartframe.ReadFrame(s.port, nil, readTimeout)
if err != nil {
return nil, fmt.Errorf("read response: %w", err)
}