aboutsummaryrefslogtreecommitdiffstats
path: root/sw/cal/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'sw/cal/main.go')
-rw-r--r--sw/cal/main.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/sw/cal/main.go b/sw/cal/main.go
new file mode 100644
index 0000000..98e021c
--- /dev/null
+++ b/sw/cal/main.go
@@ -0,0 +1,95 @@
+package main
+
+import (
+ "flag"
+ "fmt"
+ "os"
+
+ "go.einride.tech/can/pkg/dbc"
+)
+
+const dev = "can0"
+
+type Signals struct {
+ tach, speed, an1, an2, an3, an4 *dbc.SignalDef
+}
+
+// Flags
+var (
+ // DBC file
+ dbcFilenameFlag = "dbc"
+ dbcFilename = flag.String(dbcFilenameFlag, "", "DBC file name")
+
+ // Signal names
+ tachSigFlag = "tachSig"
+ speedSigFlag = "speedSig"
+ an1SigFlag = "an1Sig"
+ an2SigFlag = "an2Sig"
+ an3SigFlag = "an3Sig"
+ an4SigFlag = "an4Sig"
+ tachSig = flag.String(tachSigFlag, "", "tachometer signal name")
+ speedSig = flag.String(speedSigFlag, "", "speedometer signal name")
+ an1Sig = flag.String(an1SigFlag, "", "analog channel 1 signal name")
+ an2Sig = flag.String(an2SigFlag, "", "analog channel 2 signal name")
+ an3Sig = flag.String(an3SigFlag, "", "analog channel 3 signal name")
+ an4Sig = flag.String(an4SigFlag, "", "analog channel 4 signal name")
+
+ // Calibration tables
+ // TODO
+)
+
+func main() {
+ // Parse command line args
+ flag.Parse()
+ if *dbcFilename == "" {
+ weprintf("Missing '%s' flag.\n", dbcFilenameFlag)
+ flag.Usage()
+ os.Exit(1)
+ }
+
+ // Parse DBC file
+ msgDefs, err := parseDbcFile(*dbcFilename)
+ if err != nil {
+ eprintf("Error parsing %s: %v\n", *dbcFilename, err)
+ }
+
+
+ for _, msg := range msgDefs {
+ for _, sig := range msg.Signals {
+ fmt.Println(sig)
+ }
+ }
+}
+
+func parseDbcFile(filename string) ([]*dbc.MessageDef, error) {
+ // Read file
+ buf, err := os.ReadFile(filename)
+ if err != nil {
+ return nil, err
+ }
+
+ // Parse file
+ parser := dbc.NewParser(filename, buf)
+ if err := parser.Parse(); err != nil {
+ return nil, err
+ }
+
+ // Filter message definitions
+ defs := parser.Defs()
+ msgDefs := make([]*dbc.MessageDef, 0, len(defs))
+ for _, def := range defs {
+ if msg, ok := def.(*dbc.MessageDef); ok {
+ msgDefs = append(msgDefs, msg)
+ }
+ }
+ return msgDefs, nil
+}
+
+func eprintf(format string, a ...any) {
+ weprintf(format, a...)
+ os.Exit(1)
+}
+
+func weprintf(format string, a ...any) {
+ fmt.Fprintf(os.Stderr, format, a...)
+}