diff options
| author | Sam Anthony <sam@samanthony.xyz> | 2025-11-07 19:10:23 -0500 |
|---|---|---|
| committer | Sam Anthony <sam@samanthony.xyz> | 2025-11-07 19:10:23 -0500 |
| commit | c43588e172917783843133eb0061bf0d118ae5d5 (patch) | |
| tree | c748fecb1b530422c57dae449064cd8a5beb6c6a /sw/cal/csv.go | |
| parent | 688972df9daa1f80d24feff5c056ab3a66c4eee9 (diff) | |
| download | can-gauge-interface-c43588e172917783843133eb0061bf0d118ae5d5.zip | |
cal: transmit table to CAN bus
Diffstat (limited to 'sw/cal/csv.go')
| -rw-r--r-- | sw/cal/csv.go | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/sw/cal/csv.go b/sw/cal/csv.go index bb5cd01..cdd5b44 100644 --- a/sw/cal/csv.go +++ b/sw/cal/csv.go @@ -1,33 +1,33 @@ package main import ( - "os" + "encoding/csv" "fmt" "io" + "os" "strconv" - "encoding/csv" ) -func parseTable(filename string) (map[int32]uint16, error) { +func parseTable(filename string) (Table, error) { f, err := os.Open(filename) if err != nil { eprintf("%v\n", err) } defer f.Close() - tbl := make(map[int32]uint16) + var tbl Table rdr := csv.NewReader(f) for { - err := parseRow(rdr, tbl) + err := parseRow(rdr, &tbl) if err == io.EOF { return tbl, nil } else if err != nil { - return nil, fmt.Errorf("%s:%v", filename, err) + return Table{}, fmt.Errorf("%s:%v", filename, err) } } } -func parseRow(rdr *csv.Reader, tbl map[int32]uint16) error { +func parseRow(rdr *csv.Reader, tbl *Table) error { row, err := rdr.Read() if err != nil { return err @@ -46,10 +46,9 @@ func parseRow(rdr *csv.Reader, tbl map[int32]uint16) error { line, col := rdr.FieldPos(1) return fmt.Errorf("%d:%d: %v", line, col, err) } - if _, ok := tbl[int32(key)]; ok { + if err := tbl.Insert(int32(key), uint16(val)); err != nil { line, col := rdr.FieldPos(0) - return fmt.Errorf("%d: %d: duplicate key %d", line, col, key) + return fmt.Errorf("%d:%d: %v", line, col, err) } - tbl[int32(key)] = uint16(val) return nil } |