diff options
| -rw-r--r-- | sw/cal/can.go | 23 | ||||
| -rw-r--r-- | sw/cal/main.go | 6 |
2 files changed, 23 insertions, 6 deletions
diff --git a/sw/cal/can.go b/sw/cal/can.go index 53f00a0..e47a42c 100644 --- a/sw/cal/can.go +++ b/sw/cal/can.go @@ -3,16 +3,18 @@ package main import ( "context" bin "encoding/binary" + "strings" + "time" "go.einride.tech/can" "go.einride.tech/can/pkg/socketcan" ) const ( - - // CAN IDs tblCtrlId = 0x1272000 sigCtrlId = 0x1272100 + + timeout = 5 * time.Second ) // Write a calibration table to the EEPROM. @@ -50,5 +52,20 @@ func writeRow(tx *socketcan.Transmitter, key int32, val uint16, sig int, row int Data: data, IsExtended: true, } - return tx.TransmitFrame(context.Background(), frame) + ctx, _ := context.WithTimeout(context.Background(), timeout) + return transmit(tx, frame, ctx) + +} + +func transmit(tx *socketcan.Transmitter, frame can.Frame, ctx context.Context) error { + for { + err := tx.TransmitFrame(ctx, frame) + if err == nil { + return nil + } else if strings.HasSuffix(err.Error(), "no buffer space available") { + continue + } else { + return err + } + } } diff --git a/sw/cal/main.go b/sw/cal/main.go index c2b7209..64b63ca 100644 --- a/sw/cal/main.go +++ b/sw/cal/main.go @@ -9,8 +9,6 @@ import ( "go.einride.tech/can/pkg/socketcan" ) -const dev = "can0" - type Signals struct { tach, speed, an1, an2, an3, an4 *dbc.SignalDef } @@ -82,6 +80,7 @@ func main() { } defer conn.Close() tx := socketcan.NewTransmitter(conn) + defer tx.Close() // Write calibration tables to EEPROM for k, filename := range tblFilenames { @@ -91,12 +90,13 @@ func main() { eprintf("%v\n", err) } + fmt.Println("Transmitting", filename) if err := writeTable(tx, tbl, k); err != nil { eprintf("%v\n", err) } } - fmt.Println(sigDefs) + fmt.Println(sigDefs) // TODO } func nonEmpty(ss ...string) map[int]string { |