diff --git a/gr26/model/ecu.go b/gr26/model/ecu.go index 8baced8e..b249d428 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(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}, } }), mp.NewField("max_cell_temp", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { 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..7a7bcbde --- /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) - 32.768, + 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) - 32.768, + 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) - 32.768, + 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 + }), +}