diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-11-07 16:10:37 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-11-07 16:10:37 -0500 |
| commit | 250c47a8e6dc1de1839f9717ec160ea7ec161105 (patch) | |
| tree | 938d0768998d9e6cb793e470a063f71057834013 /sw/cal | |
| parent | 085c7bba8dce915f098e5cdc53c2003b6f89769a (diff) | |
| download | can-gauge-interface-250c47a8e6dc1de1839f9717ec160ea7ec161105.zip | |
cal: parse dbc file
Diffstat (limited to 'sw/cal')
| -rw-r--r-- | sw/cal/go.mod | 14 | ||||
| -rw-r--r-- | sw/cal/go.sum | 16 | ||||
| -rw-r--r-- | sw/cal/main.go | 95 |
3 files changed, 125 insertions, 0 deletions
diff --git a/sw/cal/go.mod b/sw/cal/go.mod new file mode 100644 index 0000000..16cb63c --- /dev/null +++ b/sw/cal/go.mod @@ -0,0 +1,14 @@ +module git.samanthony.xyz/can_gauge_interface/sw/cal + +go 1.25.3 + +require ( + github.com/google/go-cmp v0.6.0 // indirect + github.com/josharian/native v1.1.0 // indirect + github.com/mdlayher/netlink v1.7.2 // indirect + github.com/mdlayher/socket v0.4.1 // indirect + go.einride.tech/can v0.16.1 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.31.0 // indirect +) diff --git a/sw/cal/go.sum b/sw/cal/go.sum new file mode 100644 index 0000000..4005cd3 --- /dev/null +++ b/sw/cal/go.sum @@ -0,0 +1,16 @@ +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= +github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= +github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= +github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +go.einride.tech/can v0.16.1 h1:s9MqX1OR6ujGxvl+gOWAGL54MC3kaPE+cgxBCUfDrB8= +go.einride.tech/can v0.16.1/go.mod h1:9pgqXNGpPfrd/WGXGmiKW8cUvIep/o+o76JgUKpQuWI= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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...) +} |