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#include "maths.h"
13#include "decoder_t.h"
14
15// Forward declares
16struct config4;
17
18using byte = uint8_t;
19
20constexpr uint8_t BIT_TIMER_1HZ = 0;
21constexpr uint8_t BIT_TIMER_4HZ = 1;
22constexpr uint8_t BIT_TIMER_10HZ = 2;
23constexpr uint8_t BIT_TIMER_15HZ = 3;
24constexpr uint8_t BIT_TIMER_30HZ = 4;
25constexpr uint8_t BIT_TIMER_50HZ = 5;
26constexpr uint8_t BIT_TIMER_200HZ = 6;
27constexpr uint8_t BIT_TIMER_1KHZ = 7;
28
30enum class SchedulerCutStatus : uint8_t
31{
33 None,
35 Rolling,
37 Full,
38};
39
40
42enum class EngineRotationStatus : uint8_t
43{
45 Stopped,
47 Cranking,
49 Running,
50};
51
53{
54 bool angleError : 1;
55 int16_t angle = 0;
56 uint8_t targetAngle = 0;
57 uint8_t duty = 0;
58
60 : angleError(false)
61 {
62 }
63};
64
66{
67 uint8_t primary : 4;
68 uint8_t secondary : 4;
70 uint8_t getTotalInjectors(void) const
71 {
72 return primary + secondary;
73 }
74 bool isPrimaryInjector(uint8_t channel) const
75 {
76 return channel>0 && channel<=primary;
77 }
78 bool isSecondaryInjector(uint8_t channel) const
79 {
80 return channel>primary && channel<=getTotalInjectors();
81 }
82};
83
85{
86 bool acRequested : 1;
87 bool compressorOn : 1;
90 bool turningOn : 1;
92 bool fanOn : 1;
93
94 bool isLockoutActive(void) const
95 {
96 return rpmLockoutActive
99 ;
100 }
101};
102
104{
111 uint16_t clutchEngagedRPM = 0;
112
114 : launchingSoft(false)
115 , launchingHard(false)
116 , flatShiftingHard(false)
117 , flatShiftingSoft(false)
118 , previousClutchTrigger(false)
119 , clutchTrigger(false)
120 {
121 }
122};
123
131struct statuses {
133 statuses(void);
134
135#if defined(UNIT_TEST)
143 void setRpm(uint16_t rpm);
144#endif
145
158 void setRevolutionTime(uint32_t revTime);
159
161
162 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
164 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
165 volatile bool injPrimed : 1;
166
167 uint16_t RPM;
169 uint16_t baroADC;
170 uint16_t MAP;
171 uint16_t EMAP;
172 uint8_t baro;
173 uint8_t TPS;
174 uint8_t tpsADC;
175 int16_t tpsDOT;
176 byte TPSlast;
177 int16_t mapDOT;
178 volatile int rpmDOT;
179 byte VE;
180 byte VE1;
181 byte VE2;
182 uint8_t O2;
183 uint8_t O2_2;
185 uint16_t cltADC;
186 int IAT;
187 uint16_t iatADC;
188 uint16_t O2ADC;
189 uint16_t O2_2ADC;
190 uint16_t dwell;
191 volatile uint16_t actualDwell;
194 int8_t advance;
195 int8_t advance1;
196 int8_t advance2;
197 uint16_t corrections;
198 uint16_t AEamount;
212 volatile byte ethanolPct;
213 volatile int8_t fuelTemp;
214 unsigned long AEStartTime;
216 // Status1 fields as defined in the INI
217 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
218 bool isDFCOActive : 1;
219 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
220 volatile bool isToothLog1Full : 1;
221
222 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
224 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
225 bool idleOn : 1;
226
227 // Status3 fields as defined in the INI.
228 // TODO: resolve duplication with nitrous_status
229 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
230 bool nitrousActive : 1;
231 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
233 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
234 bool vssUiRefresh : 1;
235
236 // Status4 fields as defined in the INI.
237 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
238 bool wmiTankEmpty : 1;
239 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
240 bool burnPending : 1;
241 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
242 bool stagingActive : 1;
243 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
244 bool commCompat : 1;
245 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
247
248 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
250 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
252 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
254
255 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
256 bool aseIsActive : 1;
257 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
258 bool wueIsActive : 1;
259 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
260 // TODO: acceleration has 3 states: Steady, Accelerating, Decelerating. Need to capture this better
261 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
263 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
266
267 volatile byte runSecs;
268 volatile byte secl;
269 volatile uint16_t loopsPerSecond;
270 // TODO: remove this: only updated & read in logger
271 uint16_t freeRAM;
272 volatile uint32_t startRevolutions;
273 uint16_t boostTarget;
274 // TODO: resolve conflict with testActive
275 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
276 bool isTestModeActive : 1; // Is hardware test mode on?
277 bool testActive; // Not in use ? Replaced by testOutputs ?
278 uint16_t boostDuty;
279 byte idleLoad;
280 uint16_t canin[16];
281 uint16_t crankRPM = 400;
284 byte nSquirts;
285 uint16_t fuelLoad;
286 uint16_t ignLoad;
287 volatile byte syncLossCounter;
289 volatile byte knockCount;
291 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
292 uint16_t injAngle;
294 uint16_t vss;
296 byte gear;
302 {
303 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
304 bool rpm : 1;
305 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
306 bool coolant : 1;
307 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
308 bool boostCut : 1;
309 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
310 bool oil : 1;
311 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
312 bool afr : 1;
313
315 // cppcheck-suppress misra-c2012-8.10 ; False positive - cannot make this static
316 inline bool isActive(void) const {
317 return rpm
318 || coolant
319 || boostCut
320 || oil
321 || afr
322 ;
323 }
324
326 // cppcheck-suppress misra-c2012-8.10 ; False positive - cannot make this static
327 inline void reset(void) {
328 rpm = false;
329 boostCut = false;
330 oil = false;
331 afr = false;
332 coolant = false;
333 }
334 };
336 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
337 bool ioError : 1;
338
340 byte wmiPW;
341
342 // SD card status fields.
343 // TODO: conditional compile on SD_LOGGING once board definition is separated from globals.h
344 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
345 bool sdCardPresent : 1;
346 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
347 unsigned int sdCardType : 1;
348 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
349 bool sdCardReady : 1;
350 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
351 bool sdCardLogging : 1;
352 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
353 bool sdCardError : 1;
354 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
355 unsigned int sdCardFS : 1;
356 // cppcheck-suppress misra-c2012-6.1 ; False positive - MISRA C:2012 Rule (R 6.1) permits the use of boolean for bit fields.
357 bool sdCardUnused : 1;
358
360
361 uint8_t systemTemp;
362 uint32_t revolutionTime; //The time in uS that one revolution would take at current speed (The time tooth 1 was last seen, minus the time it was seen prior to that). Zero if the speed is unknown
363
365 uint8_t injLayout : 3;
367
370 {
371 // Using bytes for compactness ATM, but that limits us to 8 fuel and
372 // 8 ignition channels
374 byte ignitionChannels = 0xFF;
375 byte fuelChannels = 0xFF;
377 };
379
381
382 uint8_t LOOP_TIMER;
383
386
388};
Bit twiddling macros.
uint8_t byte
Definition config_pages.h:16
const config4 & page4
Definition engineProtection.cpp:172
EngineRotationStatus
The engine rotation status.
Definition statuses.h:43
constexpr uint8_t BIT_TIMER_200HZ
Definition statuses.h:26
constexpr uint8_t BIT_TIMER_1HZ
Definition statuses.h:20
constexpr uint8_t BIT_TIMER_1KHZ
Definition statuses.h:27
constexpr uint8_t BIT_TIMER_10HZ
Definition statuses.h:22
SchedulerCutStatus
The current status of scheduler channel cuts.
Definition statuses.h:31
constexpr uint8_t BIT_TIMER_15HZ
Definition statuses.h:23
constexpr uint8_t BIT_TIMER_50HZ
Definition statuses.h:25
constexpr uint8_t BIT_TIMER_4HZ
Definition statuses.h:21
constexpr uint8_t BIT_TIMER_30HZ
Definition statuses.h:24
Definition statuses.h:85
bool acRequested
Indicates whether the A/C button is pressed.
Definition statuses.h:86
bool tpsLockoutActive
Indicates the A/C is locked out due to high TPS, or the post-high-TPS "stand-down" lockout period.
Definition statuses.h:89
bool rpmLockoutActive
Indicates the A/C is locked out due to the RPM being too high/low, or the post-high/post-low-RPM "sta...
Definition statuses.h:88
bool cltLockoutActive
Indicates the A/C is locked out either due to high coolant temp.
Definition statuses.h:91
bool compressorOn
Indicates whether the A/C compressor is running.
Definition statuses.h:87
bool isLockoutActive(void) const
Definition statuses.h:94
bool fanOn
Indicates whether the A/C fan is running.
Definition statuses.h:92
bool turningOn
Indicates the A/C request is on (i.e. A/C button pressed), the lockouts are off, however the start de...
Definition statuses.h:90
Definition config_pages.h:357
This structure represents a decoder configuration.
Definition decoder_t.h:95
Definition statuses.h:104
bool previousClutchTrigger
Definition statuses.h:109
bool launchingHard
Definition statuses.h:106
uint16_t clutchEngagedRPM
The RPM at which the clutch was last depressed. Used for distinguishing between launch control and fl...
Definition statuses.h:111
bool flatShiftingHard
Definition statuses.h:107
bool launchingSoft
Definition statuses.h:105
bool flatShiftingSoft
Definition statuses.h:108
bool clutchTrigger
Definition statuses.h:110
launchStatus_t()
Definition statuses.h:113
Definition statuses.h:66
uint8_t secondary
Definition statuses.h:68
uint8_t primary
Definition statuses.h:67
uint8_t getTotalInjectors(void) const
Definition statuses.h:70
bool isPrimaryInjector(uint8_t channel) const
Definition statuses.h:74
bool isSecondaryInjector(uint8_t channel) const
Definition statuses.h:78
Engine protection status fields.
Definition statuses.h:302
bool rpm
true if RPM limits have been breached, false otherwise
Definition statuses.h:304
bool isActive(void) const
Are any protections active.
Definition statuses.h:316
bool oil
true if the oil limit has been breached, false otherwise
Definition statuses.h:310
bool afr
true if the afr limit has been breached, false otherwise
Definition statuses.h:312
bool boostCut
true if the boost limit has been breached, false otherwise
Definition statuses.h:308
bool coolant
true if coolant limits have been breached, false otherwise
Definition statuses.h:306
void reset(void)
Reset all protections to off.
Definition statuses.h:327
Fuel and ignition scheduler cut state.
Definition statuses.h:370
byte fuelChannels
Which fuel channels are on (1) or off (0)
Definition statuses.h:375
SchedulerCutStatus status
Definition statuses.h:376
byte ignitionChannelsPending
Any ignition channels that are pending injections before they are resumed.
Definition statuses.h:373
byte ignitionChannels
Which ignition channels are on (1) or off (0)
Definition statuses.h:374
The status struct with current values for all 'live' variables.
Definition statuses.h:131
byte dwellCorrection
Definition statuses.h:192
num_injector_t injOutputs
Definition statuses.h:366
bool wueIsActive
Is Warm Up Enrichment (WUE) active (true) or not (false)
Definition statuses.h:258
uint16_t baroADC
Definition statuses.h:169
volatile byte syncLossCounter
Definition statuses.h:287
byte ASEValue
Definition statuses.h:293
uint16_t canin[16]
16bit raw value of selected canin data for channels 0-15
Definition statuses.h:280
byte oilPressure
Definition statuses.h:298
EngineRotationStatus rotationStatus
Definition statuses.h:265
byte launchCorrection
Definition statuses.h:204
scheduler_cut_t schedulerCutState
Definition statuses.h:378
bool idleUpActive
Definition statuses.h:210
bool wmiTankEmpty
Is the Water Methanol Injection tank empty (true) or not (false)
Definition statuses.h:238
unsigned int sdCardFS
File system type 0=no FAT16, 1=FAT32.
Definition statuses.h:355
uint32_t revolutionTime
Definition statuses.h:362
bool CTPSActive
Definition statuses.h:211
byte CLIdleTarget
Definition statuses.h:209
byte TPSlast
Definition statuses.h:176
bool testActive
Definition statuses.h:277
uint16_t MAP
Manifold absolute pressure.
Definition statuses.h:170
bool idleUpOutputActive
Definition statuses.h:295
bool secondSparkTableActive
Secondary spark table is use (true) or not (false)
Definition statuses.h:249
byte baroCorrection
Definition statuses.h:203
unsigned long AEStartTime
Definition statuses.h:214
byte VE2
Definition statuses.h:181
byte flexCorrection
Definition statuses.h:205
volatile uint16_t loopsPerSecond
Definition statuses.h:269
bool toothLogEnabled
Definition statuses.h:290
bool burnPending
Is an EEPROM burn pending (true) or not (false)
Definition statuses.h:240
byte VE1
Definition statuses.h:180
bool sdCardLogging
true if logging active, false if not
Definition statuses.h:351
int IAT
Definition statuses.h:186
int16_t mapDOT
Definition statuses.h:177
uint16_t ignLoad
Definition statuses.h:286
byte wueCorrection
Definition statuses.h:200
byte batCorrection
Definition statuses.h:201
int8_t advance
Definition statuses.h:194
uint16_t dwell
dwell (coil primary winding/circuit on) time (in ms * 10 ? See correctionsDwell)
Definition statuses.h:190
uint8_t tpsADC
Definition statuses.h:174
volatile byte knockCount
Definition statuses.h:289
bool knockRetardActive
Is knock retardation active (true) or not (false)
Definition statuses.h:251
void setRevolutionTime(uint32_t revTime)
Set the crank revolution time & the values derived from it.
Definition statuses.cpp:24
bool knockPulseDetected
Definition statuses.h:253
byte nSquirts
Number of injector squirts per cycle (per injector)
Definition statuses.h:284
int8_t advance2
Definition statuses.h:196
statuses(void)
Default construct.
Definition statuses.cpp:7
bool ioError
true if there is an analog pin conflict
Definition statuses.h:337
bool sdCardUnused
true if unused, false if not
Definition statuses.h:357
uint16_t vss
Definition statuses.h:294
byte knockRetard
Definition statuses.h:288
airConStatus_t acStatus
Definition statuses.h:359
uint16_t boostTarget
Definition statuses.h:273
uint16_t EMAP
EMAP ... (See config6::useEMAP for EMAP enablement)
Definition statuses.h:171
bool sdCardReady
true if ready, false if not
Definition statuses.h:349
byte gear
Definition statuses.h:296
volatile bool injPrimed
Tracks whether or not the injector priming has been completed yet.
Definition statuses.h:165
launchStatus_t launchStatus
Definition statuses.h:387
uint8_t maxIgnOutputs
Definition statuses.h:364
volatile byte secl
Definition statuses.h:268
bool secondFuelTableActive
Secondary fuel table is use (true) or not (false)
Definition statuses.h:232
bool isTestModeActive
Definition statuses.h:276
bool nitrousActive
Nitrous on (true) or off (false)
Definition statuses.h:230
uint16_t fuelLoad
Definition statuses.h:285
int coolant
Definition statuses.h:184
byte VE
Definition statuses.h:179
bool isDeceleratingTPS
Are we decelerating (true) or not (false), based on TPS.
Definition statuses.h:264
volatile uint16_t actualDwell
actual dwell time if new ignition mode is used (in uS)
Definition statuses.h:191
byte fuelPressure
Definition statuses.h:297
volatile uint32_t startRevolutions
Definition statuses.h:272
uint16_t boostDuty
Boost Duty percentage value * 100 to give 2 points of precision.
Definition statuses.h:278
volatile bool isToothLog1Full
Boost Cut status: true == active, false == inactive.
Definition statuses.h:220
byte battery10
Definition statuses.h:193
bool commCompat
Definition statuses.h:244
volatile byte runSecs
Definition statuses.h:267
uint16_t iatADC
Definition statuses.h:187
int8_t advance1
Definition statuses.h:195
uint16_t RPM
RPM - Current Revs per minute.
Definition statuses.h:167
bool stagingActive
Is fuel injection staging active (true) or not (false)
Definition statuses.h:242
byte wmiPW
Definition statuses.h:340
bool isFixedCrankingIgnitionTimingActive(const config4 &page4) const
Definition statuses.cpp:46
bool aseIsActive
Is After Start Enrichment (ASE) active (true) or not (false)
Definition statuses.h:256
bool vssUiRefresh
Flag to indicate that the VSS value needs to be refreshed in the UI.
Definition statuses.h:234
volatile int8_t fuelTemp
Definition statuses.h:213
uint8_t injLayout
Normally the same value as config2::injLayout, but under some situations will change to one of the ot...
Definition statuses.h:365
byte RPMdiv100
RPM value scaled (divided by 100) to fit a byte (0-255, e.g. 12000 => 120)
Definition statuses.h:168
bool sdCardPresent
true if a card is present, false if not
Definition statuses.h:345
uint16_t corrections
Definition statuses.h:197
byte fanDuty
Definition statuses.h:339
uint8_t LOOP_TIMER
The timer flags currently in effect.
Definition statuses.h:382
uint8_t TPS
Definition statuses.h:173
decoder_t decoder
The current decoder.
Definition statuses.h:380
bool idleOn
Is the idle code active : true == active, false == inactive.
Definition statuses.h:225
byte afrTarget
Definition statuses.h:208
volatile int rpmDOT
Definition statuses.h:178
byte fuelTempCorrection
Definition statuses.h:206
bool softLimitActive
Soft limit status: true == on, false == off.
Definition statuses.h:223
byte nitrous_status
Definition statuses.h:283
vvtStatus_t vvt1
Definition statuses.h:384
bool isAcceleratingTPS
Are we accelerating (true) or not (false), based on TPS.
Definition statuses.h:262
uint8_t systemTemp
Definition statuses.h:361
int16_t tpsDOT
Definition statuses.h:175
uint8_t O2_2
Definition statuses.h:183
uint16_t freeRAM
Definition statuses.h:271
bool sdCardError
true if error, false if not
Definition statuses.h:353
byte compositeTriggerUsed
Definition statuses.h:291
byte egoCorrection
Definition statuses.h:199
int16_t flexBoostCorrection
Definition statuses.h:282
vvtStatus_t vvt2
Definition statuses.h:385
bool initialisationComplete
Tracks whether the setup() function has run completely.
Definition statuses.h:163
int8_t flexIgnCorrection
Definition statuses.h:207
byte idleLoad
Either the current steps or current duty cycle for the idle control.
Definition statuses.h:279
uint16_t O2_2ADC
Definition statuses.h:189
byte iatCorrection
Definition statuses.h:202
uint8_t O2
Definition statuses.h:182
bool allowLegacyComms
Definition statuses.h:246
uint16_t injAngle
Definition statuses.h:292
uint16_t crankRPM
Definition statuses.h:281
uint8_t baro
Barometric pressure is simply the initial MAP reading, taken before the engine is running....
Definition statuses.h:172
engine_protect_flags_t engineProtect
Definition statuses.h:335
volatile byte ethanolPct
Definition statuses.h:212
uint16_t AEamount
Definition statuses.h:198
uint16_t cltADC
Definition statuses.h:185
uint16_t O2ADC
Definition statuses.h:188
bool isDFCOActive
Deceleration Fuel Cut Off status: true == active, false == inactive.
Definition statuses.h:218
unsigned int sdCardType
0==SD, 1==SDHC
Definition statuses.h:347
Definition statuses.h:53
int16_t angle
Measured cam angle.
Definition statuses.h:55
uint8_t duty
PWM duty.
Definition statuses.h:57
vvtStatus_t()
Definition statuses.h:59
bool angleError
Is the cam angle within limits (false) or not (true)
Definition statuses.h:54
uint8_t targetAngle
Target angle.
Definition statuses.h:56