diff --git a/gr25/model/acu.go b/gr25/model/acu.go index 6bb7aff8..eb10e56f 100644 --- a/gr25/model/acu.go +++ b/gr25/model/acu.go @@ -185,11 +185,13 @@ var ACUPrecharge = mp.Message{ bitMap := []string{ "set_ts_active", } - signals = append(signals, mp.Signal{ - Name: bitMap[0], - Value: float64(f.CheckBit(0)), - RawValue: f.CheckBit(0), - }) + 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/dash_panel.go b/gr25/model/dash_panel.go new file mode 100644 index 00000000..9582d311 --- /dev/null +++ b/gr25/model/dash_panel.go @@ -0,0 +1,117 @@ +package model + +import mp "github.com/gaucho-racing/mapache-go" + +var DashPanel = mp.Message{ + mp.NewField("dash_panel", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + bitMap := []string{ + "bms_led", + "imd_led", + "bspd_led", + } + 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 + }), + mp.NewField("ignored", 2, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + return []mp.Signal{} + }), +} + +// ECU sends this command to dash panel +var DashConfig = mp.Message{ + mp.NewField("dash_panel_leds", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + bitMap := []string{ + "bms_led", + "imd_led", + "bspd_led", + } + 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 + }), + mp.NewField("button_led_1_r", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "button_led_1_r", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("button_led_1_g", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "button_led_1_g", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("button_led_1_b", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "button_led_1_b", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("button_led_2_r", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "button_led_2_r", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("button_led_2_g", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "button_led_2_g", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), + mp.NewField("button_led_2_b", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + signals = append(signals, mp.Signal{ + Name: "button_led_2_b", + Value: float64(f.Value), + RawValue: f.Value, + }) + return signals + }), +} + +// ECU sends this command to dash panel +var DashWarningFlags = mp.Message{ + mp.NewField("warning_flags", 1, mp.Unsigned, mp.LittleEndian, func(f mp.Field) []mp.Signal { + signals := []mp.Signal{} + bitMap := []string{ + "bse_apps_violation", + } + 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 399cdeda..7f7171de 100644 --- a/gr25/model/message.go +++ b/gr25/model/message.go @@ -20,7 +20,10 @@ var messageMap = map[int]mp.Message{ 0x012: DC_DCStatus, 0x018: FanStatus, 0x019: FanCommand, + 0x01A: DashPanel, + 0x01B: DashConfig, 0x02A: TCMResourceUtil, + 0x02B: DashWarningFlags, } func GetMessage(id int) mp.Message {