roverd race fix

This commit is contained in:
legop3
2026-01-15 12:01:45 -05:00
parent 8212a14ea8
commit d272a33dc2
4 changed files with 21 additions and 3 deletions
+19 -1
View File
@@ -24,6 +24,8 @@ const (
piCmdWaveDelete = 50
piCmdWaveTxSend = 51
piOutput = 1
pigpioConnectRetries = 20
pigpioConnectDelay = 250 * time.Millisecond
)
type pigpioCmd struct {
@@ -102,7 +104,7 @@ func NewIRTransmitter(cfg IRConfig, logger *log.Logger) (*IRTransmitter, error)
return nil, fmt.Errorf("ir disabled")
}
client, err := newPigpioClient(pigpioAddr)
client, err := connectPigpioWithRetry(pigpioAddr, logger)
if err != nil {
return nil, fmt.Errorf("connect pigpio: %w", err)
}
@@ -124,6 +126,22 @@ func NewIRTransmitter(cfg IRConfig, logger *log.Logger) (*IRTransmitter, error)
return tx, nil
}
func connectPigpioWithRetry(addr string, logger *log.Logger) (*pigpioClient, error) {
var lastErr error
for attempt := 1; attempt <= pigpioConnectRetries; attempt++ {
client, err := newPigpioClient(addr)
if err == nil {
return client, nil
}
lastErr = err
if attempt == 1 || attempt%4 == 0 {
logger.Printf("pigpio connect attempt %d/%d failed: %v", attempt, pigpioConnectRetries, err)
}
time.Sleep(pigpioConnectDelay)
}
return nil, lastErr
}
func (t *IRTransmitter) Close() {
t.mu.Lock()
defer t.mu.Unlock()
+2 -2
View File
@@ -1,7 +1,7 @@
[Unit]
Description=Multi-Roomba rover control agent
After=network-online.target mediamtx.service
Wants=network-online.target
After=network-online.target mediamtx.service pigpiod.service
Wants=network-online.target pigpiod.service
[Service]
Type=simple