From 3d381e0db4f8e9cc56075ac73c76220282d22fa4 Mon Sep 17 00:00:00 2001 From: austinchan3678 Date: Sat, 7 Jun 2025 00:53:29 -0700 Subject: [PATCH 1/2] the things --- gr25/model/inverter.go | 194 +++++++++++++++++++++++++++++++++++++++++ gr25/model/message.go | 7 +- 2 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 gr25/model/inverter.go diff --git a/gr25/model/inverter.go b/gr25/model/inverter.go new file mode 100644 index 00000000..b26472ce --- /dev/null +++ b/gr25/model/inverter.go @@ -0,0 +1,194 @@ +package model + +import mp "github.com/gaucho-racing/mapache-go" + +var InverterStatusOne = mp.Message{ + mp.NewField("ac_current", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "ac_current", + Value: float64(f.Value)*0.01 - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("dc_current", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "dc_current", + Value: float64(f.Value) * 0.01, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("motor_rpm", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "motor_rpm", + Value: float64(f.Value) - 32768, + RawValue: f.Value, + }) + return signals + }), +} + +var InverterStatusTwo = mp.Message{ + mp.NewField("u_mosfet_temp", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "u_mosfet_temp", + Value: float64(f.Value) - 40, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("v_mosfet_temp", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "v_mosfet_temp", + Value: float64(f.Value) - 40, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("w_mosfet_temp", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "w_mosfet_temp", + Value: float64(f.Value) - 40, + RawValue: f.Value, + }) + return signals + }), +} + +var InverterStatusThree = mp.Message{ + mp.NewField("motor_temp", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "motor_temp", + Value: float64(f.Value) - 40, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("fault_flags", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + bitMap := []string{ + "over_voltage_faults", + "under_voltage_fault", + "inverter_overtemp_fault", + "motor_overtemp_fault", + "transistor_fault", + "encoder_fault", + "can_fault", + } + for i := 0; i < len(bitMap); i++ { + signals = append(signals, mp.Signal{ + Name: bitMap[i], + Value: float64(f.Bytes[0] >> i & 1), + RawValue: int(f.Bytes[0] >> i & 1), + }) + } + return signals + }), +} + +var InverterConfig = mp.Message{ + mp.NewField("max_ac_current", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "max_ac_current", + Value: float64(f.Value)*0.01 - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("max_dc_current", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "max_dc_current", + Value: float64(f.Value)*0.01 - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("absolute_max_rpm_limit", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "absolute_max_rpm_limit", + Value: float64(f.Value) - 32768, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("motor_direction", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + bitMap := []string{ + "motor_direction", + } + for i := 0; i < len(bitMap); i++ { + signals = append(signals, mp.Signal{ + Name: bitMap[i], + Value: float64(f.Bytes[0] >> i & 1), + RawValue: int(f.Bytes[0] >> i & 1), + }) + } + + return signals + }), +} + +var InverterCommand = mp.Message{ + mp.NewField("set_ac_current", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_ac_current", + Value: float64(f.Value)*0.01 - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("set_dc_current", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_dc_current", + Value: float64(f.Value)*0.01 - 327.68, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("rpm_limit", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "rpm_limit", + Value: float64(f.Value) - 32768, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("field_weakening", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "field_weakening", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("drive_enable", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + bitMap := []string{ + "drive_enable", + } + for i := 0; i < len(bitMap); i++ { + signals = append(signals, mp.Signal{ + Name: bitMap[i], + Value: float64(f.Bytes[0] >> i & 1), + RawValue: int(f.Bytes[0] >> i & 1), + }) + } + + return signals + }), +} diff --git a/gr25/model/message.go b/gr25/model/message.go index 905bff9b..36a9c4e6 100644 --- a/gr25/model/message.go +++ b/gr25/model/message.go @@ -18,13 +18,18 @@ var messageMap = map[int]mp.Message{ 0x010: ACUCellDataFour, 0x011: ACUCellDataFive, 0x012: DC_DCStatus, + 0x013: InverterStatusOne, + 0x014: InverterStatusTwo, + 0x015: InverterStatusThree, + 0x016: InverterConfig, + 0x017: InverterCommand, 0x018: FanStatus, 0x019: FanCommand, 0x01A: DashPanel, 0x01B: DashConfig, 0x02A: TCMResourceUtil, 0x02B: DashWarningFlags, - 0x02E: ECUPedals, + 0x02E: ECUPedals, } func GetMessage(id int) mp.Message { From 092b55d6c0e522ecb9aacd107a441cec89455509 Mon Sep 17 00:00:00 2001 From: austinchan3678 Date: Sat, 7 Jun 2025 01:34:25 -0700 Subject: [PATCH 2/2] test --- gr25/model/inverter.go | 1 - 1 file changed, 1 deletion(-) diff --git a/gr25/model/inverter.go b/gr25/model/inverter.go index b26472ce..b76b2ec7 100644 --- a/gr25/model/inverter.go +++ b/gr25/model/inverter.go @@ -188,7 +188,6 @@ var InverterCommand = mp.Message{ RawValue: int(f.Bytes[0] >> i & 1), }) } - return signals }), }