From 0adcf7d93484f9613da37000e54348613511acc7 Mon Sep 17 00:00:00 2001 From: Jake Jurek Date: Wed, 18 Jun 2025 22:15:12 -0400 Subject: [PATCH] added dti ingest with some TODO's --- gr25/model/inverter.go | 397 +++++++++++++++++++++++++++++++++++++++++ gr25/model/message.go | 18 ++ 2 files changed, 415 insertions(+) diff --git a/gr25/model/inverter.go b/gr25/model/inverter.go index 729c006e..8c4da7ab 100644 --- a/gr25/model/inverter.go +++ b/gr25/model/inverter.go @@ -191,3 +191,400 @@ var InverterCommand = mp.Message{ return signals }), } + +// DTI Inverter + +var DTIDataFive = mp.Message{ + mp.NewField("rpm_min_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "rpm_min_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("input_voltage_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "input_voltage_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("can_map_version", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "can_map_version", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("power_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "power_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("rpm_max_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "rpm_max_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("motor_temp_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "motor_temp_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("motor_acc_temp_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "motor_acc_temp_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("igbt_temp_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "igbt_temp_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("igbt_acc_temp_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "igbt_acc_temp_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("drive_enable_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "drive_enable_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("dc_current_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "dc_current_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("capacitor_temp_limit", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "capacitor_temp_limit", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("drive_enable", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "drive_enable", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + // TODO: is this supposed to be zero bytes? + mp.NewField("digital_io", 0, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "digital_io", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("brake_signal", 1, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "brake_signal", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("throttle_signal", 1, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "throttle_signal", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} + +var DTIDataFour = mp.Message{ + mp.NewField("foc_iq", 4, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "foc_iq", + Value: float64(f.Value) * 0.001, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("foc_id", 4, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "foc_id", + Value: float64(f.Value) * 0.001, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIDataThree = mp.Message{ + mp.NewField("fault_codes", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "fault_codes", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("controller_temperature", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "controller_temperature", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("motor_temperature", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "motor_temperature", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIDataTwo = mp.Message{ + mp.NewField("dc_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "dc_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("ac_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "ac_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIDataOne = mp.Message{ + mp.NewField("input_voltage", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "input_voltage", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + // TODO: is this supposed to be zero bytes + mp.NewField("duty_cycle", 0, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "duty_cycle", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), + mp.NewField("erpm", 4, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "erpm", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlTwelve = mp.Message{ + mp.NewField("drive_enable", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "drive_enable", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlEleven = mp.Message{ + mp.NewField("set_max_dc_brake_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_max_dc_brake_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlTen = mp.Message{ + mp.NewField("set_max_dc_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_max_dc_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlNine = mp.Message{ + mp.NewField("set_max_brake_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_max_brake_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlEight = mp.Message{ + mp.NewField("set_max_ac_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_max_ac_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlSeven = mp.Message{ + mp.NewField("digital_out", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "digital_out", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlSix = mp.Message{ + mp.NewField("set_relative_brake_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_relative_brake_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlFive = mp.Message{ + mp.NewField("set_relative_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_relative_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlFour = mp.Message{ + mp.NewField("set_position", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_position", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlThree = mp.Message{ + mp.NewField("set_speed", 4, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_speed", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlTwo = mp.Message{ + mp.NewField("set_brake_current", 2, mp.Signed, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "set_brake_current", + Value: float64(f.Value) * 0.1, + RawValue: f.Value, + }) + return signals + }), +} + +var DTIControlOne = mp.Message{ + mp.NewField("set_ac_current", 2, mp.Signed, 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.1, + RawValue: f.Value, + }) + return signals + }), +} diff --git a/gr25/model/message.go b/gr25/model/message.go index 3b9726b7..8950d112 100644 --- a/gr25/model/message.go +++ b/gr25/model/message.go @@ -37,6 +37,24 @@ var messageMap = map[int]mp.Message{ 0x034: GPSPx, 0x035: GPSQy, 0x036: GPSRz, + // TODO: DTI Messages idk what position they are supposed to be + 0x037: DTIControlOne, + 0x038: DTIControlTwo, + 0x039: DTIControlThree, + 0x03A: DTIControlFour, + 0x03B: DTIControlFive, + 0x03C: DTIControlSix, + 0x03D: DTIControlSeven, + 0x03E: DTIControlEight, + 0x03F: DTIControlNine, + 0x040: DTIControlTen, + 0x041: DTIControlEleven, + 0x042: DTIControlTwelve, + 0x043: DTIDataOne, + 0x044: DTIDataTwo, + 0x045: DTIDataThree, + 0x046: DTIDataFour, + 0x047: DTIDataFive, } func GetMessage(id int) mp.Message {