@@ -41,6 +41,11 @@ enum class SensorType : uint8_t {
4141 LSUADV = 2 ,
4242};
4343
44+ struct CanStatusData {
45+ HeaterAllow heaterAllow;
46+ float remoteBatteryVoltage;
47+ };
48+
4449#ifndef BOARD_DEFAULT_SENSOR_TYPE
4550#define BOARD_DEFAULT_SENSOR_TYPE SensorType::LSU49
4651#endif
@@ -54,11 +59,22 @@ enum class AuxOutputMode : uint8_t {
5459 Egt1 = 5 ,
5560};
5661
62+ enum class CanProtocol : uint8_t {
63+ None = 0 ,
64+ AemNet = 1 , // for backward compatibility
65+ LinkEcu = 2 ,
66+ Haltech = 3 ,
67+ EcuMasterClassic = 4 ,
68+ EcuMasterBlack = 5 ,
69+ Motec = 6 ,
70+ Emtron = 7 ,
71+ };
72+
5773class Configuration {
5874private:
5975 // Increment this any time the configuration format changes
6076 // It is stored along with the data to ensure that it has been written before
61- static constexpr uint32_t ExpectedTag = 0xDEADBE03 ;
77+ static constexpr uint32_t ExpectedTag = 0xDEADBE04 ;
6278 uint32_t Tag = ExpectedTag;
6379
6480public:
@@ -75,6 +91,7 @@ class Configuration {
7591 *this = {};
7692
7793 NoLongerUsed0 = 0 ;
94+ CanMode = 0 ;
7895 sensorType = BOARD_DEFAULT_SENSOR_TYPE ;
7996
8097 /* default auxout curve is 0..5V for AFR 8.5 to 18.0
@@ -92,9 +109,9 @@ class Configuration {
92109 afr[i].RusEfiTxDiag = true ;
93110 afr[i].RusEfiIdx = i;
94111
95- // Disable AemNet
96- afr[i].AemNetTx = false ;
97- afr[i].AemNetIdOffset = i;
112+ // No extra protocol by default
113+ afr[i].ExtraCanProtocol = CanProtocol::None ;
114+ afr[i].ExtraCanIdOffset = i;
98115 }
99116
100117 for (i = 0 ; i < EGT_CHANNELS ; i++) {
@@ -103,9 +120,9 @@ class Configuration {
103120 egt[i].RusEfiTxDiag = false ;
104121 egt[i].RusEfiIdx = i;
105122
106- // Enable AemNet
107- egt[i].AemNetTx = true ;
108- egt[i].AemNetIdOffset = i;
123+ // AemNet protocol by default
124+ egt[i].ExtraCanProtocol = CanProtocol::AemNet ;
125+ egt[i].ExtraCanIdOffset = i;
109126 }
110127
111128 heaterConfig.HeaterSupplyOffVoltage = HEATER_SUPPLY_OFF_VOLTAGE ;
@@ -119,7 +136,8 @@ class Configuration {
119136 // Actual configuration data
120137 union {
121138 struct {
122- uint8_t NoLongerUsed0 = 0 ;
139+ uint8_t NoLongerUsed0 : 6 = 0 ;
140+ uint8_t CanMode : 2 ;
123141 // AUX0 and AUX1 curves
124142 float auxOutBins[2 ][8 ];
125143 float auxOutValues[2 ][8 ];
@@ -131,22 +149,24 @@ class Configuration {
131149 struct {
132150 bool RusEfiTx:1 ;
133151 bool RusEfiTxDiag:1 ;
134- bool AemNetTx:1 ;
152+ CanProtocol ExtraCanProtocol:4 ;
153+
135154
136155 uint8_t RusEfiIdx;
137- uint8_t AemNetIdOffset ;
138- uint8_t pad [5 ];
156+ uint8_t ExtraCanIdOffset ;
157+ uint8_t Reserved [5 ];
139158 } afr[2 ];
140159
141160 // per EGT channel settings
142161 struct {
143162 bool RusEfiTx:1 ;
144163 bool RusEfiTxDiag:1 ;
145- bool AemNetTx:1 ;
164+ CanProtocol ExtraCanProtocol:4 ;
165+
146166
147167 uint8_t RusEfiIdx;
148- uint8_t AemNetIdOffset ;
149- uint8_t pad [5 ];
168+ uint8_t ExtraCanIdOffset ;
169+ uint8_t Reserved [5 ];
150170 } egt[2 ];
151171
152172 struct HeaterConfig heaterConfig;
0 commit comments