Speeduino
Loading...
Searching...
No Matches
statuses.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <stdint.h>
11#include "bit_manip.h"
12
13#if __has_include(<SimplyAtomic.h>)
14 #include <SimplyAtomic.h>
15#else
16 //Fallback for Arduino IDE when SimplyAtomic is not installed
17 #include <util/atomic.h>
18 #define ATOMIC() ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
19 #warning It is strongly recomended to install the SimplyAtomic library rather than relying on the built-in ATOMIC
20#endif
21
22using byte = uint8_t;
23
24//Define bit positions within engine variable
25#define BIT_ENGINE_RUN 0 // Engine running
26#define BIT_ENGINE_CRANK 1 // Engine cranking
27#define BIT_ENGINE_ASE 2 // after start enrichment (ASE)
28#define BIT_ENGINE_WARMUP 3 // Engine in warmup
29#define BIT_ENGINE_ACC 4 // in acceleration mode (TPS accel)
30#define BIT_ENGINE_DCC 5 // in deceleration mode
31#define BIT_ENGINE_MAPACC 6 // MAP acceleration mode
32#define BIT_ENGINE_MAPDCC 7 // MAP deceleration mode
33
34// Bit masks for statuses::status1
35#define BIT_STATUS1_INJ1 0 //inj1
36#define BIT_STATUS1_INJ2 1 //inj2
37#define BIT_STATUS1_INJ3 2 //inj3
38#define BIT_STATUS1_INJ4 3 //inj4
39#define BIT_STATUS1_DFCO 4 //Deceleration fuel cutoff
40#define BIT_STATUS1_BOOSTCUT 5 //Fuel component of MAP based boost cut out
41#define BIT_STATUS1_TOOTHLOG1READY 6 //Used to flag if tooth log 1 is ready
42#define BIT_STATUS1_TOOTHLOG2READY 7 //Used to flag if tooth log 2 is ready (Log is not currently used)
43
44// Bit masks for statuses::status2
45#define BIT_STATUS2_HLAUNCH 0 //Hard Launch indicator
46#define BIT_STATUS2_SLAUNCH 1 //Soft Launch indicator
47#define BIT_STATUS2_HRDLIM 2 //Hard limiter indicator
48#define BIT_STATUS2_SFTLIM 3 //Soft limiter indicator
49#define BIT_STATUS2_BOOSTCUT 4 //Spark component of MAP based boost cut out
50#define BIT_STATUS2_ERROR 5 // Error is detected
51#define BIT_STATUS2_IDLE 6 // idle on
52#define BIT_STATUS2_SYNC 7 // Whether engine has sync or not
53
54// Bit masks for statuses::status3
55#define BIT_STATUS3_RESET_PREVENT 0 //Indicates whether reset prevention is enabled
56#define BIT_STATUS3_NITROUS 1
57#define BIT_STATUS3_FUEL2_ACTIVE 2
58#define BIT_STATUS3_VSS_REFRESH 3
59#define BIT_STATUS3_HALFSYNC 4 //shows if there is only sync from primary trigger, but not from secondary.
60#define BIT_STATUS3_NSQUIRTS1 5 // Uses bits 5-7
61
62// Bit masks for statuses::status4
63#define BIT_STATUS4_WMI_EMPTY 0 //Indicates whether the WMI tank is empty
64#define BIT_STATUS4_VVT1_ERROR 1 //VVT1 cam angle within limits or not
65#define BIT_STATUS4_VVT2_ERROR 2 //VVT2 cam angle within limits or not
66#define BIT_STATUS4_FAN 3 //Fan Status
67#define BIT_STATUS4_BURNPENDING 4
68#define BIT_STATUS4_STAGING_ACTIVE 5
69#define BIT_STATUS4_COMMS_COMPAT 6
70#define BIT_STATUS4_ALLOW_LEGACY_COMMS 7
71
72// Bit masks for statuses::status5
73#define BIT_STATUS5_FLATSH 0 //Flat shift hard cut
74#define BIT_STATUS5_FLATSS 1 //Flat shift soft cut
75#define BIT_STATUS5_SPARK2_ACTIVE 2
76#define BIT_STATUS5_KNOCK_ACTIVE 3
77#define BIT_STATUS5_KNOCK_PULSE 4
78#define BIT_STATUS5_CLUTCH_PRESS 5
79#define BIT_STATUS5_UNUSED7 6
80#define BIT_STATUS5_UNUSED8 7
81
82#define BIT_AIRCON_REQUEST 0 //Indicates whether the A/C button is pressed
83#define BIT_AIRCON_COMPRESSOR 1 //Indicates whether the A/C compressor is running
84#define BIT_AIRCON_RPM_LOCKOUT 2 //Indicates the A/C is locked out due to the RPM being too high/low, or the post-high/post-low-RPM "stand-down" lockout period
85#define BIT_AIRCON_TPS_LOCKOUT 3 //Indicates the A/C is locked out due to high TPS, or the post-high-TPS "stand-down" lockout period
86#define BIT_AIRCON_TURNING_ON 4 //Indicates the A/C request is on (i.e. A/C button pressed), the lockouts are off, however the start delay has not yet elapsed. This gives the idle up time to kick in before the compressor.
87#define BIT_AIRCON_CLT_LOCKOUT 5 //Indicates the A/C is locked out either due to high coolant temp.
88#define BIT_AIRCON_FAN 6 //Indicates whether the A/C fan is running
89#define BIT_AIRCON_UNUSED8 7
90
91#define ENGINE_PROTECT_BIT_RPM 0
92#define ENGINE_PROTECT_BIT_MAP 1
93#define ENGINE_PROTECT_BIT_OIL 2
94#define ENGINE_PROTECT_BIT_AFR 3
95#define ENGINE_PROTECT_BIT_COOLANT 4
96
104struct statuses {
105 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
106 volatile bool hasSync : 1;
108 // cppcheck-suppress misra-c2012-6.1
110 // cppcheck-suppress misra-c2012-6.1
112 // cppcheck-suppress misra-c2012-6.1
114 // cppcheck-suppress misra-c2012-6.1
115 volatile bool fpPrimed : 1;
116 // cppcheck-suppress misra-c2012-6.1
117 volatile bool injPrimed : 1;
118 // cppcheck-suppress misra-c2012-6.1
119 volatile bool tachoSweepEnabled : 1;
120 // cppcheck-suppress misra-c2012-6.1
121 volatile bool tachoAlt : 1;
122
125 long longRPM;
127 long MAP;
133 byte TPSlast;
135 volatile int rpmDOT;
136 byte VE;
137 byte VE1;
138 byte VE2;
143 int IAT;
169 volatile byte ethanolPct;
170 volatile int8_t fuelTemp;
171 unsigned long AEEndTime;
172 volatile byte status1;
173 volatile byte status2;
174 volatile byte status3;
175 volatile byte status4;
176 volatile byte status5;
178 unsigned int PW1;
179 unsigned int PW2;
180 unsigned int PW3;
181 unsigned int PW4;
182 unsigned int PW5;
183 unsigned int PW6;
184 unsigned int PW7;
185 unsigned int PW8;
186 volatile byte runSecs;
187 volatile byte secl;
192 unsigned int clutchEngagedRPM;
197 bool testActive; // Not in use ? Replaced by testOutputs ?
199 byte idleLoad;
205 byte nSquirts;
210 volatile byte syncLossCounter;
212 volatile byte knockCount;
214 byte compositeTriggerUsed; // 0 means composite logger disabled, 2 means use secondary input (1st cam), 3 means use tertiary input (2nd cam), 4 means log both cams together
215 int16_t vvt1Angle; //Has to be a long for PID calcs (CL VVT control)
217 long vvt1Duty; //Has to be a long for PID calcs (CL VVT control)
222 byte gear;
227 byte wmiPW;
228 int16_t vvt2Angle; //Has to be a long for PID calcs (CL VVT control)
230 long vvt2Duty; //Has to be a long for PID calcs (CL VVT control)
232 byte TS_SD_Status; //TunerStudios SD card status
235};
236
241static inline bool HasAnySyncUnsafe(const statuses &status) {
242 return status.hasSync || BIT_CHECK(status.status3, BIT_STATUS3_HALFSYNC);
243}
244
245static inline bool HasAnySync(const statuses &status) {
246 ATOMIC() {
247 return HasAnySyncUnsafe(status);
248 }
249 return false; // Just here to avoid compiler warning.
250}
Bit twiddling macros.
#define BIT_CHECK(var, pos)
Is bit pos (0-7) in byte var set?
Definition bit_manip.h:15
uint8_t byte
Definition config_pages.h:15
static uint32_t rshift(uint32_t a)
Bitwise right shift - generic, unoptimized, case.
Definition bit_shifts.h:348
static bool HasAnySync(const statuses &status)
Definition statuses.h:245
#define BIT_STATUS3_HALFSYNC
Definition statuses.h:59
static bool HasAnySyncUnsafe(const statuses &status)
Non-atomic version of HasAnySync. **Should only be called in an ATOMIC() block***.
Definition statuses.h:241
#define ATOMIC()
Definition statuses.h:18
The status struct with current values for all 'live' variables.
Definition statuses.h:104
byte dwellCorrection
Definition statuses.h:149
uint16_t baroADC
Definition statuses.h:126
volatile byte syncLossCounter
Definition statuses.h:210
byte ASEValue
Definition statuses.h:219
int16_t vvt2Angle
Definition statuses.h:228
byte testOutputs
Test Output bits (only first bit used/tested ?)
Definition statuses.h:196
volatile bool hasSync
Definition statuses.h:106
uint16_t canin[16]
16bit raw value of selected canin data for channels 0-15
Definition statuses.h:200
byte oilPressure
Definition statuses.h:224
uint8_t current_caninchannel
Definition statuses.h:201
bool launchingSoft
Definition statuses.h:189
unsigned int PW3
In uS.
Definition statuses.h:180
byte launchCorrection
Definition statuses.h:161
unsigned int PW6
In uS.
Definition statuses.h:183
bool idleUpActive
Definition statuses.h:167
long vvt1Duty
Definition statuses.h:217
bool CTPSActive
Definition statuses.h:168
unsigned int PW8
In uS.
Definition statuses.h:185
byte CLIdleTarget
Definition statuses.h:166
byte vvt2TargetAngle
Definition statuses.h:229
volatile byte status5
Status 5 ... (See also config10 Status 5* members and BIT_STATU5_* defines)
Definition statuses.h:176
byte TPSlast
Definition statuses.h:133
bool clutchTrigger
Definition statuses.h:111
bool testActive
Definition statuses.h:197
bool idleUpOutputActive
Definition statuses.h:221
unsigned long AEEndTime
Definition statuses.h:171
byte baroCorrection
Definition statuses.h:160
bool flatShiftingHard
Definition statuses.h:193
int16_t vvt1Angle
Definition statuses.h:215
unsigned int PW4
In uS.
Definition statuses.h:181
byte VE2
Definition statuses.h:138
byte flexCorrection
Definition statuses.h:162
volatile uint16_t loopsPerSecond
Definition statuses.h:188
bool toothLogEnabled
Definition statuses.h:213
byte VE1
Definition statuses.h:137
int IAT
Definition statuses.h:143
int16_t mapDOT
Definition statuses.h:134
uint16_t ignLoad
Definition statuses.h:208
byte wueCorrection
Definition statuses.h:157
byte batCorrection
Definition statuses.h:158
int8_t advance
Definition statuses.h:151
unsigned int PW1
In uS.
Definition statuses.h:178
uint16_t dwell
dwell (coil primary winding/circuit on) time (in ms * 10 ? See correctionsDwell)
Definition statuses.h:147
uint8_t tpsADC
Definition statuses.h:131
uint8_t engine
Engine status bits (See BIT_ENGINE_* defines on top of this file)
Definition statuses.h:177
volatile byte knockCount
Definition statuses.h:212
byte nSquirts
Number of injector squirts per cycle (per injector)
Definition statuses.h:205
int8_t advance2
Definition statuses.h:153
volatile byte status4
Status bits (See BIT_STATUS4_* defines on top of this file)
Definition statuses.h:175
uint16_t vss
Definition statuses.h:220
byte knockRetard
Definition statuses.h:211
byte TS_SD_Status
Definition statuses.h:232
uint16_t boostTarget
Definition statuses.h:195
uint16_t EMAP
EMAP ... (See config6::useEMAP for EMAP enablement)
Definition statuses.h:128
bool fuelPumpOn
Definition statuses.h:209
byte gear
Definition statuses.h:222
volatile bool injPrimed
Tracks whether or not the injector priming has been completed yet.
Definition statuses.h:117
volatile byte secl
Definition statuses.h:187
byte airConStatus
Definition statuses.h:233
uint16_t fuelLoad
Definition statuses.h:207
int coolant
Definition statuses.h:141
byte VE
Definition statuses.h:136
volatile uint16_t actualDwell
actual dwell time if new ignition mode is used (in uS)
Definition statuses.h:148
byte fuelPressure
Definition statuses.h:223
unsigned int clutchEngagedRPM
Definition statuses.h:192
volatile uint32_t startRevolutions
Definition statuses.h:194
unsigned int PW5
In uS.
Definition statuses.h:182
volatile bool tachoAlt
Definition statuses.h:121
uint16_t boostDuty
Boost Duty percentage value * 100 to give 2 points of precision.
Definition statuses.h:198
bool previousClutchTrigger
Definition statuses.h:113
byte battery10
Definition statuses.h:150
volatile byte runSecs
Definition statuses.h:186
uint16_t iatADC
Definition statuses.h:144
int8_t advance1
Definition statuses.h:152
uint16_t RPM
RPM - Current Revs per minute.
Definition statuses.h:123
long longRPM
RPM as long int (gets assigned to / maintained in statuses.RPM as well)
Definition statuses.h:125
byte wmiPW
Definition statuses.h:227
volatile int8_t fuelTemp
Definition statuses.h:170
byte vvt1TargetAngle
Definition statuses.h:216
byte RPMdiv100
RPM value scaled (divided by 100) to fit a byte (0-255, e.g. 12000 => 120)
Definition statuses.h:124
uint16_t corrections
Definition statuses.h:154
long vvt2Duty
Definition statuses.h:230
byte fanDuty
Definition statuses.h:226
uint8_t TPS
Definition statuses.h:130
byte outputsStatus
Definition statuses.h:231
byte afrTarget
Definition statuses.h:165
volatile byte status3
Status bits (See BIT_STATUS3_* defines on top of this file)
Definition statuses.h:174
bool launchingHard
Definition statuses.h:190
volatile int rpmDOT
Definition statuses.h:135
byte fuelTempCorrection
Definition statuses.h:163
byte nChannels
Definition statuses.h:206
byte nitrous_status
Definition statuses.h:204
unsigned int PW2
In uS.
Definition statuses.h:179
uint8_t systemTemp
Definition statuses.h:234
volatile bool fpPrimed
Tracks whether or not the fuel pump priming has been completed yet.
Definition statuses.h:115
int16_t tpsDOT
Definition statuses.h:132
uint8_t O2_2
Definition statuses.h:140
uint16_t freeRAM
Definition statuses.h:191
byte compositeTriggerUsed
Definition statuses.h:214
byte egoCorrection
Definition statuses.h:156
int16_t flexBoostCorrection
Definition statuses.h:203
bool initialisationComplete
Tracks whether the setup() function has run completely.
Definition statuses.h:109
int8_t flexIgnCorrection
Definition statuses.h:164
byte idleLoad
Either the current steps or current duty cycle for the idle control.
Definition statuses.h:199
uint16_t O2_2ADC
Definition statuses.h:146
byte iatCorrection
Definition statuses.h:159
uint8_t O2
Definition statuses.h:139
uint16_t injAngle
Definition statuses.h:218
long MAP
Manifold absolute pressure. Has to be a long for PID calcs (Boost control)
Definition statuses.h:127
volatile bool tachoSweepEnabled
Definition statuses.h:119
uint16_t crankRPM
Definition statuses.h:202
uint8_t baro
Barometric pressure is simply the initial MAP reading, taken before the engine is running....
Definition statuses.h:129
volatile byte ethanolPct
Definition statuses.h:169
unsigned int PW7
In uS.
Definition statuses.h:184
uint16_t AEamount
Definition statuses.h:155
byte engineProtectStatus
Definition statuses.h:225
volatile byte status2
status 2/control indicator bits (launch control, boost cut, spark errors, See BIT_STATUS2_* defines)
Definition statuses.h:173
uint16_t cltADC
Definition statuses.h:142
uint16_t O2ADC
Definition statuses.h:145
volatile byte status1
Status bits (See BIT_STATUS1_* defines on top of this file)
Definition statuses.h:172