From 24418c0193cee685a8c62d6b35394fc45c823565 Mon Sep 17 00:00:00 2001 From: Shravya Salem Sathish Date: Sat, 24 Oct 2026 01:05:24 -0700 Subject: [PATCH 1/5] Added new IMU and lin pots CAN IDs and message parsing --- gr26/model/message.go | 3 ++ gr26/model/sam.go | 74 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 gr26/model/sam.go diff --git a/gr26/model/message.go b/gr26/model/message.go index ac023b2e..8afcb7bb 100644 --- a/gr26/model/message.go +++ b/gr26/model/message.go @@ -43,6 +43,9 @@ var messageMap = map[int]mp.Message{ 0x201: TCMResourceUtil, 0x210: TCMShelterHeartbeat, 0x211: TCMShelterBatch, + // SAM + 0x026: SAMIMU, + 0x02B: SAMSusPots, // GPS 0x030: DGPS_UVW, 0x031: GPSLatitude, diff --git a/gr26/model/sam.go b/gr26/model/sam.go new file mode 100644 index 00000000..bfc7b3c7 --- /dev/null +++ b/gr26/model/sam.go @@ -0,0 +1,74 @@ +package model + +import ( + mp "github.com/gaucho-racing/mapache/mapache-go/v3" +) + +var SAMIMU = mp.Message{ + mp.NewField("bmi323_acc_x", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "bmi323_acc_x", + Value: (float64(f.Value) * 0.01) - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("bmi323_acc_y", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "bmi323_acc_y", + Value: (float64(f.Value) * 0.01) - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("bmi323_acc_z", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "bmi323_acc_z", + Value: (float64(f.Value) * 0.01) - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("bmi323_gyro_x", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "bmi323_gyro_x", + Value: (float64(f.Value) * 0.001) - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("bmi323_gyro_y", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "bmi323_gyro_y", + Value: (float64(f.Value) * 0.001) - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("bmi323_gyro_z", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "bmi323_gyro_z", + Value: (float64(f.Value) * 0.001) - 327.68, + RawValue: f.Value, + }) + return signals + }), +} + +var SAMSusPots = mp.Message{ + mp.NewField("sus_pot_pos", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "sus_pot_pos", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} From fe9c352c033970db3094804b9c324766bfe501db Mon Sep 17 00:00:00 2001 From: Shravya Salem Sathish Date: Sat, 24 Oct 2026 02:18:57 -0700 Subject: [PATCH 2/5] Fixed scaling formula for gyros --- gr26/Dockerfile | 2 +- gr26/model/sam.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gr26/Dockerfile b/gr26/Dockerfile index dbbf8715..4e63c760 100644 --- a/gr26/Dockerfile +++ b/gr26/Dockerfile @@ -1,7 +1,7 @@ FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS builder RUN apk --no-cache add ca-certificates -RUN apk add --no-cache tzdata +RUN apk add --no-cache git tzdata WORKDIR /app diff --git a/gr26/model/sam.go b/gr26/model/sam.go index bfc7b3c7..7a7bcbde 100644 --- a/gr26/model/sam.go +++ b/gr26/model/sam.go @@ -36,7 +36,7 @@ var SAMIMU = mp.Message{ signals := []mp.Signal{} signals = append(signals, mp.Signal{ Name: "bmi323_gyro_x", - Value: (float64(f.Value) * 0.001) - 327.68, + Value: (float64(f.Value) * 0.001) - 32.768, RawValue: f.Value, }) return signals @@ -45,7 +45,7 @@ var SAMIMU = mp.Message{ signals := []mp.Signal{} signals = append(signals, mp.Signal{ Name: "bmi323_gyro_y", - Value: (float64(f.Value) * 0.001) - 327.68, + Value: (float64(f.Value) * 0.001) - 32.768, RawValue: f.Value, }) return signals @@ -54,7 +54,7 @@ var SAMIMU = mp.Message{ signals := []mp.Signal{} signals = append(signals, mp.Signal{ Name: "bmi323_gyro_z", - Value: (float64(f.Value) * 0.001) - 327.68, + Value: (float64(f.Value) * 0.001) - 32.768, RawValue: f.Value, }) return signals From ea98376b5fba2eedda5c0399fe809ceae4266e8a Mon Sep 17 00:00:00 2001 From: Daniel Hansen <105574022+dchansen06@users.noreply.github.com> Date: Sat, 24 Oct 2026 03:10:06 -0700 Subject: [PATCH 3/5] No longer need `git` in the dockerfile Signed-off-by: Daniel Hansen <105574022+dchansen06@users.noreply.github.com> --- gr26/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gr26/Dockerfile b/gr26/Dockerfile index 4e63c760..dbbf8715 100644 --- a/gr26/Dockerfile +++ b/gr26/Dockerfile @@ -1,7 +1,7 @@ FROM --platform=$BUILDPLATFORM golang:1.26-alpine AS builder RUN apk --no-cache add ca-certificates -RUN apk add --no-cache git tzdata +RUN apk add --no-cache tzdata WORKDIR /app From 6ee1a6916fedc8d7b989b578da1394bf86f36c17 Mon Sep 17 00:00:00 2001 From: Shravya Salem Sathish Date: Sat, 24 Oct 2026 03:47:18 -0700 Subject: [PATCH 4/5] Changed power level torque map to forward and regen current --- gr26/model/ecu.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/gr26/model/ecu.go b/gr26/model/ecu.go index 8baced8e..0875a342 100644 --- a/gr26/model/ecu.go +++ b/gr26/model/ecu.go @@ -6,6 +6,23 @@ import ( mp "github.com/gaucho-racing/mapache/mapache-go/v3" ) +func map_forward_current(raw_current uint8) float64 { + switch raw_current { + case 0: + return 50 + case 1: + return 100 + case 2: + return 200 + case 3: + return 300 + case 4: + return 325 + default: + return 0 + } +} + var ECUStatus1 = mp.Message{ mp.NewField("ecu_state", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { return []mp.Signal{ @@ -27,10 +44,10 @@ var ECUStatus1 = mp.Message{ {Name: "ping_group_3", Value: float64(f.Value), RawValue: f.Value}, } }), - mp.NewField("power_torque", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + mp.NewField("forward_ac_i_code_regen_ac_i_code", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { return []mp.Signal{ - {Name: "power_level", Value: float64(f.Value & 0x0F), RawValue: f.Value & 0x0F}, - {Name: "torque_map", Value: float64((f.Value >> 4) & 0x0F), RawValue: (f.Value >> 4) & 0x0F}, + {Name: "forward_ac_i_code", Value: map_forward_current(f.Value & 0x0F), RawValue: f.Value & 0x0F}, + {Name: "regen_ac_i_code", Value: float64((f.Value>>4)&0x0F) * 15.0, RawValue: (f.Value >> 4) & 0x0F}, } }), mp.NewField("max_cell_temp", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { From 77583789e9b4b499d2dcc7ce1a64c5599b4261b4 Mon Sep 17 00:00:00 2001 From: Shravya Salem Sathish Date: Sat, 24 Oct 2026 03:51:35 -0700 Subject: [PATCH 5/5] Fixed a little casting error for the forward current --- gr26/model/ecu.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gr26/model/ecu.go b/gr26/model/ecu.go index 0875a342..b249d428 100644 --- a/gr26/model/ecu.go +++ b/gr26/model/ecu.go @@ -46,7 +46,7 @@ var ECUStatus1 = mp.Message{ }), mp.NewField("forward_ac_i_code_regen_ac_i_code", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { return []mp.Signal{ - {Name: "forward_ac_i_code", Value: map_forward_current(f.Value & 0x0F), RawValue: f.Value & 0x0F}, + {Name: "forward_ac_i_code", Value: map_forward_current(uint8(f.Value & 0x0F)), RawValue: f.Value & 0x0F}, {Name: "regen_ac_i_code", Value: float64((f.Value>>4)&0x0F) * 15.0, RawValue: (f.Value >> 4) & 0x0F}, } }),