mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
roverd race fix
This commit is contained in:
+19
-1
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user