aboutsummaryrefslogtreecommitdiffstats
path: root/sw/cal/dbc.go
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2025-11-07 19:10:23 -0500
committerSam Anthony <sam@samanthony.xyz>2025-11-07 19:10:23 -0500
commitc43588e172917783843133eb0061bf0d118ae5d5 (patch)
treec748fecb1b530422c57dae449064cd8a5beb6c6a /sw/cal/dbc.go
parent688972df9daa1f80d24feff5c056ab3a66c4eee9 (diff)
downloadcan-gauge-interface-c43588e172917783843133eb0061bf0d118ae5d5.zip
cal: transmit table to CAN bus
Diffstat (limited to 'sw/cal/dbc.go')
-rw-r--r--sw/cal/dbc.go30
1 files changed, 14 insertions, 16 deletions
diff --git a/sw/cal/dbc.go b/sw/cal/dbc.go
index 53ca852..7aa61bd 100644
--- a/sw/cal/dbc.go
+++ b/sw/cal/dbc.go
@@ -9,7 +9,7 @@ import (
)
// Extract signals from the DBC file.
-func parseSignals(filename string, names []string) ([]dbc.SignalDef, error) {
+func parseSignals(filename string, names map[int]string) (map[int]dbc.SignalDef, error) {
// Parse DBC file
msgDefs, err := parseDbcFile(filename)
if err != nil {
@@ -17,29 +17,27 @@ func parseSignals(filename string, names []string) ([]dbc.SignalDef, error) {
}
// Search for signals
- sigPtrs := make([]*dbc.SignalDef, len(names))
+ signals := make(map[int]dbc.SignalDef)
for _, msg := range msgDefs {
- for i := range names {
- j := slices.IndexFunc(msg.Signals, func(sig dbc.SignalDef) bool { return sig.Name == dbc.Identifier(names[i]) })
- if j < 0 {
+ for k, name := range names {
+ i := slices.IndexFunc(msg.Signals, func(sig dbc.SignalDef) bool { return sig.Name == dbc.Identifier(name) })
+ if i < 0 {
continue
}
- if sigPtrs[i] != nil {
- return nil, ErrDupSig{msg.Signals[j]}
+ if _, ok := signals[k]; ok {
+ return nil, ErrDupSig{msg.Signals[i]}
}
- sigPtrs[i] = &msg.Signals[j]
+ signals[k] = msg.Signals[i]
}
}
// Check all signals are present
- if i := slices.IndexFunc(sigPtrs, func(sp *dbc.SignalDef) bool { return sp == nil }); i >= 0 {
- return nil, ErrNoSig{filename, names[i]}
- }
-
- // Dereference
- signals := make([]dbc.SignalDef, len(sigPtrs))
- for i := range sigPtrs {
- signals[i] = *sigPtrs[i]
+ if len(signals) != len(names) {
+ for k, name := range names {
+ if _, ok := signals[k]; !ok {
+ return nil, ErrNoSig{filename, name}
+ }
+ }
}
return signals, nil