aboutsummaryrefslogtreecommitdiffstats
path: root/sw
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-11-07 19:54:15 -0500
committerSam Anthony <sam@samanthony.xyz>2025-11-07 19:54:15 -0500
commitb9ad4f9701304cd616337fd6df21f6442de743bd (patch)
treedadc4786b8fac1e442c062a4eafd3ba944b75bcf /sw
parentc43588e172917783843133eb0061bf0d118ae5d5 (diff)
downloadcan-gauge-interface-b9ad4f9701304cd616337fd6df21f6442de743bd.zip
cal: retransmit on buffer full error
Diffstat (limited to 'sw')
-rw-r--r--sw/cal/can.go23
-rw-r--r--sw/cal/main.go6
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 {