software:firmware
MakAir Firmware
end_of_line_test.cpp File Reference

Auto test for end of line unit test. More...

Go to the source code of this file.

Macros

#define EOLTRACESIZE   60
 
#define EOLSCREENSIZE   100
 
#define EOL_TOTALBUTTONS   11
 

Functions

void eolScreenMessage (char *message, bool isFailed)
 
void millisecondTimerEOL (HardwareTimer *)
 

Variables

uint32_t clockEOLTimer = 0
 
uint32_t eolMSCount = 0
 
uint32_t eolTestNumber = 0
 
int32_t pressureValue = 0
 
int32_t flowValue = 0
 
int32_t minPressureValue = INT32_MAX
 
int32_t maxPressureValue = 0
 
int32_t minFlowValue = INT32_MAX
 
int32_t maxFlowValue = 0
 
EolTest eolTest = EolTest()
 
HardwareTimer * eolTimer
 
TestState eolState = STATE_IN_PROGRESS
 
TestStep eolstep = START
 
TestStep previousEolStep = START
 
boolean eolFail = false
 
boolean eolStepConfirmed = false
 
char eolScreenBuffer [EOLSCREENSIZE+1]
 
char eolTrace [EOLTRACESIZE]
 
int16_t eolMatrixCurrentColumn = 1
 

Detailed Description

Auto test for end of line unit test.

Author
Makers For Life

Definition in file end_of_line_test.cpp.

Macro Definition Documentation

◆ EOL_TOTALBUTTONS

#define EOL_TOTALBUTTONS   11

Definition at line 103 of file end_of_line_test.cpp.

◆ EOLSCREENSIZE

#define EOLSCREENSIZE   100

Definition at line 100 of file end_of_line_test.cpp.

◆ EOLTRACESIZE

#define EOLTRACESIZE   60

Definition at line 99 of file end_of_line_test.cpp.

Function Documentation

◆ eolScreenMessage()

void eolScreenMessage ( char *  message,
bool  isFailed 
)

Definition at line 56 of file end_of_line_test.cpp.

56  {
57  screen.clear();
58  // cppcheck-suppress misra-c2012-12.3
59  if (eolTestNumber == (uint32_t)0 && !isFailed) {
60  screen.setCursor(0, 0);
61  screen.print("EOL TEST");
62  } else {
63  screen.setCursor(0, 0);
64  screen.print("EOL TEST #");
65  screen.print(eolTestNumber);
66  if (isFailed) {
67  screen.setCursor(15, 0);
68  screen.print("FAIL");
69  } else {
70  screen.setCursor(18, 0);
71  screen.print("OK");
72  }
73  }
74 
75  // Print line by line, respect newlines
76  int line = 1;
77  // cppcheck-suppress misra-c2012-12.3 ; call to unknown external: screen.setCursor
78  screen.setCursor(0, line);
79  int i = 0;
80  while (i < 62) {
81  if (message[i] == '\n') {
82  line++;
83  screen.setCursor(0, line);
84  i++;
85  }
86  if ((message[i] == 0) || (line > 3)) {
87  break;
88  }
89  screen.print(message[i]);
90  i++;
91  }
92 }
uint32_t eolTestNumber
uint16_t i
LiquidCrystal screen
Instance of the screen controller.

◆ millisecondTimerEOL()

void millisecondTimerEOL ( HardwareTimer *  )

Definition at line 109 of file end_of_line_test.cpp.

113 {
114  clockEOLTimer++;
115  eolMSCount++;
116  static int batlevel = 0;
117  static int buttonsPushed[EOL_TOTALBUTTONS];
118 
119  if ((clockEOLTimer % 100u) == 0u) {
120  // Refresh screen every 100 ms, no more
122  }
123  if ((clockEOLTimer % 500u) == 0u) {
124  // Send EOL snapshot to telemetry every 500 ms, no more
126  }
127  if ((clockEOLTimer % 10u) == 0u) {
128  // Check for pending serial messages
130  }
131 
132  // Check for battery state
133  batteryLoop(0);
134 
135  // First step: reset the step count
136  if (eolstep == START) {
137  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "\nTo begin press\nbutton START");
138 
139  // Wait the operator to press start to begin the EOL test
140  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
141  while (digitalRead(PIN_BTN_START) == HIGH) {
142  continue;
143  }
144 
145  // Error out immediately if power supply expander is not available
146  if (!isMainsAvailable()) {
149  } else {
150  // Move to first step (check ventirad fans)
151  eolTestNumber++;
152  eolMSCount = 0;
153  eolstep = CHECK_FAN;
154 
155  // Important: setup main controller for later use (ONCE!)
157  }
158  }
160  eolFail = true;
161  // The operator should carefuly check the wire between power supply and the expander
162  // connector.
163  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
164  "Check power cable\nto the motherboard,\n and run the test again");
165 
166  } else if (eolstep == CHECK_FAN) {
167  // The operator should check that both fans are running, and hit "start" to confirm
168  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
169  "Check fans\nthen press\nbutton START");
170  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
171  while (digitalRead(PIN_BTN_START) == HIGH) {
172  continue;
173  }
174  eolTestNumber++;
175  eolMSCount = 0;
177  }
178  } else if (eolstep == TEST_BAT_DEAD) {
179  // Check if the voltage is acceptable
180  blower.runSpeed(1799); // Run blower to drain more current
181  batlevel = getBatteryLevelX100();
182  if (eolMSCount < 5000u) {
183  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Test Vbat\n V=%02d.%02d",
184  batlevel / 100, batlevel % 100);
185  (void)snprintf(eolTrace, EOLTRACESIZE, "Voltage: %02d.%02dV", batlevel / 100,
186  batlevel % 100);
187  } else {
188  if (isMainsConnected()) {
190  } else if (batlevel < 2200) { // Test if battery is under 22V
193  } else {
194  eolTestNumber++;
195  blower.stop();
197  }
198  }
199  } else if (eolstep == BATTERY_DEEP_DISCHARGE) {
200  // FAIL: Battery voltage is too low
201  eolFail = true;
202  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
203  "Test Vbat Failure\nBATTERY IS TO LOW\n V=%02d.%d", batlevel / 100,
204  batlevel % 100);
205  (void)snprintf(eolTrace, EOLTRACESIZE, "Voltage: %02d.%02dV", batlevel / 100,
206  batlevel % 100);
207  } else if (eolstep == DISCONNECT_MAINS) {
208  // Ask the operator to unplug the machine
209  batlevel = getBatteryLevelX100();
210 
211  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
212  "Test Vbat\nUnplug AC...\n V=%02d.%02d", batlevel / 100,
213  batlevel % 100);
214  (void)snprintf(eolTrace, EOLTRACESIZE, "Voltage: %02d.%02dV", batlevel / 100,
215  batlevel % 100);
216  if (!isMainsConnected()) {
217  eolMSCount = 0;
219  }
220  } else if (eolstep == CONNECT_MAINS) {
221  // Ask the operator to reconnect the machine and wait for direct info from supply
222  batlevel = getBatteryLevelX100();
223 
224  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Test Vbat\nPlug AC...\nV=%02d.%02d",
225  batlevel / 100, batlevel % 100);
226  (void)snprintf(eolTrace, EOLTRACESIZE, "Voltage: %02d.%02dV", batlevel / 100,
227  batlevel % 100);
228  // Wait for mains connected signal
229  if (isMainsConnected()) {
231  eolTestNumber++;
232  blower.stop();
234  }
235  } else if (eolstep == CHECK_BUZZER) {
236  // Run the buzzer (previous step) and ask the operator to hit the STOP button
237  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
238  "Check Buzzer\nthen press\nbutton PAUSE");
239  if (eolStepConfirmed || digitalRead(PIN_BTN_STOP) == HIGH) {
241  eolTestNumber++;
242 
243  #ifndef DISABLE_BUTTONS
245  #else
246  eolTestNumber++;
248  #endif
249  }
250  } else if (eolstep == CHECK_ALL_BUTTONS) {
251  // Ask the operator to hit each button
252  if (digitalRead(PIN_BTN_ALARM_OFF) == HIGH) {
253  buttonsPushed[0] = 1;
254  }
255  // this buttons are in a matrix
256  if (1 == eolMatrixCurrentColumn) {
257  // Increase counter for each column and row
258  if (HIGH == digitalRead(PIN_IN_ROW1)) {
259  buttonsPushed[1] = 1;
260  }
261  if (HIGH == digitalRead(PIN_IN_ROW2)) {
262  buttonsPushed[2] = 1;
263  }
264  if (HIGH == digitalRead(PIN_IN_ROW3)) {
265  buttonsPushed[3] = 1;
266  }
267  } else if (2 == eolMatrixCurrentColumn) {
268  if (HIGH == digitalRead(PIN_IN_ROW1)) {
269  buttonsPushed[4] = 1;
270  }
271  if (HIGH == digitalRead(PIN_IN_ROW2)) {
272  buttonsPushed[5] = 1;
273  }
274  if (HIGH == digitalRead(PIN_IN_ROW3)) {
275  buttonsPushed[6] = 1;
276  }
277  } else if (3 == eolMatrixCurrentColumn) {
278  if (HIGH == digitalRead(PIN_IN_ROW1)) {
279  buttonsPushed[7] = 1;
280  }
281  if (HIGH == digitalRead(PIN_IN_ROW2)) {
282  buttonsPushed[8] = 1;
283  }
284  // there is no button on col3 x row3
285  } else {
286  // Do nothing
287  }
288  // next column
290  if (4 == eolMatrixCurrentColumn) {
292  }
293  digitalWrite(PIN_OUT_COL1, (1 == eolMatrixCurrentColumn) ? HIGH : LOW);
294  digitalWrite(PIN_OUT_COL2, (2 == eolMatrixCurrentColumn) ? HIGH : LOW);
295  digitalWrite(PIN_OUT_COL3, (3 == eolMatrixCurrentColumn) ? HIGH : LOW);
296 
297  if (digitalRead(PIN_BTN_START) == HIGH) {
298  buttonsPushed[9] = 1;
299  }
300  if (digitalRead(PIN_BTN_STOP) == HIGH) {
301  buttonsPushed[10] = 1;
302  }
303  int totalPushed = 0;
304  for (int i = 0; i < EOL_TOTALBUTTONS; i++) {
305  totalPushed += buttonsPushed[i];
306  }
307  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
308  "Please press each\nbutton... \n %d / %d OK", totalPushed, EOL_TOTALBUTTONS);
309  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressed: %d / %d", totalPushed, EOL_TOTALBUTTONS);
310  if (totalPushed == EOL_TOTALBUTTONS) {
311  eolTestNumber++;
312  while (digitalRead(PIN_BTN_START) == HIGH) {
313  continue; // Wait release if still pressed in previous test
314  }
316  }
317  } else if (eolstep == CHECK_UI_SCREEN) {
318  // Ask the operator to activate the trigger on the UI screen. It allows to test
319  // communication with the UI, and tactile function of the UI.
320 
321  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
322  "Press continue\nbutton on\ntouchscreen");
323 
324  if (eolStepConfirmed == true) {
326  eolMSCount = 0;
327  }
328  } else if (eolstep == PLUG_AIR_TEST_SYTEM) {
329  // Ask the operator to plug the lung system on the machine, and wait the operator to press
330  // start
331  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
332  "Plug testing\npipes then press\nSTART");
333  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
334  while (digitalRead(PIN_BTN_START) == HIGH) {
335  continue;
336  }
337  eolMSCount = 0;
339  }
340  } else if (eolstep == REACH_MAX_PRESSURE) {
341  // Turn on the blower and check if able to reach the max pressure 650 mmH2O
347  blower.runSpeed(1790);
348  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Increasing pressure\n \nP = %d mmH2O",
349  pressureValue);
350  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressure: %d mmH2O", pressureValue);
351  if (pressureValue > 650) {
352  eolMSCount = 0;
353  eolTestNumber++;
355  }
356  if (eolMSCount > 20000u) {
357  eolFail = true;
360  }
361  } else if (eolstep == MAX_PRESSURE_NOT_REACHED) {
362  // FAIL: Case max pressure was not reached
363  blower.stop();
364  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Pressure increase\nimpossible! ");
365  } else if (eolstep == MAX_PRESSURE_REACHED_OK) {
366  // Close the valves and wait 1000 ms
371  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Closing valves...");
372  if (eolMSCount > 1000u) {
373  eolMSCount = 0;
375  }
376  } else if (eolstep == START_LEAK_MESURE) {
377  // Stop the blower and measure leak with the pressure sensor
378  blower.stop();
384  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Leak Test...\n \nP = %d mmH2O",
385  pressureValue);
386  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressure: %d mmH2O", pressureValue);
387  if (eolMSCount > 10000u) {
388  eolMSCount = 0;
389  if (pressureValue > 400) {
391  eolTestNumber++;
392  } else {
393  eolFail = true;
396  }
397  }
398  } else if (eolstep == LEAK_IS_TOO_HIGH) {
399  // FAIL: Case Leak is too high
400  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Important Leak\nPfinal = %d mmH2O",
401  pressureValue);
402  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressure: %d mmH2O", pressureValue);
403  } else if (eolstep == REACH_NULL_PRESSURE) {
404  // Open the valves to empty the lung system
410  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Opening valves...\n \nP = %d mmH2O",
411  pressureValue);
412  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressure: %d mmH2O", pressureValue);
413  if (pressureValue < 20) {
414  eolMSCount = 0;
415  eolTestNumber++;
417  }
418  if (eolMSCount > 10000u) {
419  eolMSCount = 0;
420  eolFail = true;
423  }
424  } else if (eolstep == MIN_PRESSURE_NOT_REACHED) {
425  // FAIL: Case emptying the system did not work
426  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Opening valves\nimpossible! ");
428  // Ask the operator to open the oxygen entrance, and wait for confirmation
429  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
430  "Open oxygen\nthen press\nbutton START");
431  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
432  while (digitalRead(PIN_BTN_START) == HIGH) {
433  continue;
434  }
435  eolMSCount = 0;
436  eolTestNumber++;
438  }
439  } else if (eolstep == START_O2_TEST) {
440  // Close the valves, run the blower, and wait for pressure to go above 100 mmH2O
441  blower.runSpeed(1790);
447  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Test O2...\n \nP = %d mmH2O",
448  pressureValue);
449  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressure: %d mmH2O", pressureValue);
450  if (pressureValue > 100) {
452  eolTestNumber++;
453  eolMSCount = 0;
454  } else if (eolMSCount > 20000u) {
455  eolMSCount = 0;
456  eolFail = true;
459  } else {
460  // Do nothing
461  }
462  } else if (eolstep == O2_PRESSURE_NOT_REACH) {
463  // FAIL: the pressure did not bo above 100 mmh2O during O2 test
464  blower.stop();
465  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Pipe O2\nBlocked! ");
466  } else if (eolstep == WAIT_USER_BEFORE_LONG_RUN) {
467  // Wait for user to press start before long run.
468  blower.stop();
469  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
470  "Close oxygen\nthen press\nbutton START");
471  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
472  while (digitalRead(PIN_BTN_START) == HIGH) {
473  continue;
474  }
475  eolMSCount = 0;
476  eolTestNumber++;
478  }
479  } else if (eolstep == START_LONG_RUN_BLOWER) {
480  // Run the blower during 5 minutes and check stability
481  blower.runSpeed(1790);
487 #ifdef MASS_FLOW_METER_ENABLED
489 #else
490  flowValue = 0;
491 #endif
492  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
493  "Testing blower\nP= %d mmH2O \nF= %d SLM", pressureValue, flowValue);
494  (void)snprintf(eolTrace, EOLTRACESIZE, "Pressure: %d mmH2O; Flow: %d SLM", pressureValue,
495  flowValue);
496 
497  if (eolMSCount > 10000u) {
502  if ((maxPressureValue - minPressureValue) > 40) { // 40 mmH2O
505  eolMSCount = 0;
506  }
507  if ((maxFlowValue - minFlowValue) > 5500) { // 5500 mL/min
510  eolMSCount = 0;
511  }
512  }
513 
514  if (eolMSCount > 60000u) {
515  if ((maxPressureValue - minPressureValue) < 40) {
518  eolMSCount = 0;
519  eolTestNumber++;
520  } else {
523  eolMSCount = 0;
524  }
525  }
526  } else if (eolstep == PRESSURE_NOT_STABLE) {
527  // FAIL: pressure was not stable during long run test
528  blower.stop();
533  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
534  "Pressure not stable\nMax= %d mmH2O \nMin= %d mmH2O", maxPressureValue,
536  (void)snprintf(eolTrace, EOLTRACESIZE, "Maximum: %d mmH2O; Minimum: %d mmH2O",
538  } else if (eolstep == FLOW_NOT_STABLE) {
539  // FAIL: flow was not stable during long run test
540  blower.stop();
545  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
546  "Flow not stable\nMax= %d SLM \nMin= %d SLM", maxFlowValue, minFlowValue);
547  (void)snprintf(eolTrace, EOLTRACESIZE, "Maximum: %d SLM; Minimum: %d SLM", maxFlowValue,
548  minFlowValue);
549  } else if (eolstep == END_SUCCESS) {
550  // SUCESS: end of the procedure
551  blower.stop();
556  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE,
557  "********************\n**** SUCCESS !! ****\n********************");
558  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
559  while (digitalRead(PIN_BTN_START) == HIGH) {
560  continue;
561  }
562  eolMSCount = 0;
565  }
566 
567  } else if (eolstep == DISPLAY_PRESSURE) {
568  // SUCESS: end of the procedure
569  blower.stop();
574  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Pressure \nMax= %d mmH2O \nMin= %d mmH2O",
576  (void)snprintf(eolTrace, EOLTRACESIZE, "Maximum: %d mmH2O; Minimum: %d mmH2O",
578  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
579  while (digitalRead(PIN_BTN_START) == HIGH) {
580  continue;
581  }
584  }
585 
586  } else if (eolstep == DISPLAY_FLOW) {
587  // SUCESS: end of the procedure
588  blower.stop();
593  (void)snprintf(eolScreenBuffer, EOLSCREENSIZE, "Flow\nMax= %d SLM \nMin= %d SLM",
595  (void)snprintf(eolTrace, EOLTRACESIZE, "Maximum: %d SLM; Minimum: %d SLM", maxFlowValue,
596  minFlowValue);
597  if (eolStepConfirmed || digitalRead(PIN_BTN_START) == HIGH) {
598  while (digitalRead(PIN_BTN_START) == HIGH) {
599  continue;
600  }
603  }
604 
605  } else {
606  // Do nothing
607  }
608 
609  // Perform cleanup work? (if step changed)
610  if (previousEolStep != eolstep) {
611  // Clear out trace string buffer
612  (void)snprintf(eolTrace, EOLTRACESIZE, "");
613 
614  // Switch back step confirmed tag back to false (as step changed)
615  eolStepConfirmed = false;
616  }
617 
619 }
uint32_t getBatteryLevelX100()
Returns battery level x100 for better accuracy.
Definition: battery.cpp:129
bool isMainsAvailable()
Check if the cable between power supply and expander input is connected.
Definition: battery.cpp:144
bool isMainsConnected()
Check if mains are connected.
Definition: battery.cpp:141
void batteryLoop(uint32_t p_cycleNumber)
Handle battery events.
Definition: battery.cpp:117
Blower blower
Definition: blower.cpp:20
void BuzzerControl_On(void)
Switch buzzer ON.
void BuzzerControl_Off(void)
Switch buzzer OFF.
void stop()
Stops the blower.
Definition: blower.cpp:105
void runSpeed(uint16_t p_runSpeed)
Run the blower to a given speed.
Definition: blower.cpp:69
void setup()
Initialize actuators.
int32_t read()
Read the current pressure for the feedback control.
Definition: pressure.cpp:29
uint16_t minAperture() const
Minimum valve aperture angle in degrees.
void execute()
Command the valve to go to the requested aperture.
void open()
Request opening of the Pressure Valve.
uint16_t maxAperture() const
Maximum valve aperture angle in degrees.
void close()
Request closing of the Pressure Valve.
char eolScreenBuffer[EOLSCREENSIZE+1]
int32_t maxPressureValue
void eolScreenMessage(char *message, bool isFailed)
int32_t minFlowValue
int32_t maxFlowValue
int32_t flowValue
TestStep previousEolStep
TestStep eolstep
boolean eolFail
int32_t pressureValue
int32_t minPressureValue
uint32_t clockEOLTimer
char eolTrace[EOLTRACESIZE]
uint32_t eolMSCount
int16_t eolMatrixCurrentColumn
TestState eolState
#define EOL_TOTALBUTTONS
#define EOLSCREENSIZE
boolean eolStepConfirmed
#define EOLTRACESIZE
@ CHECK_ALL_BUTTONS
@ END_SUCCESS
@ START
@ USER_CONFIRMATION_BEFORE_O2_TEST
@ MAX_PRESSURE_REACHED_OK
@ START_O2_TEST
@ CONNECT_MAINS
@ SUPPLY_TO_EXPANDER_NOT_CONNECTED
@ CHECK_UI_SCREEN
@ MAX_PRESSURE_NOT_REACHED
@ O2_PRESSURE_NOT_REACH
@ LEAK_IS_TOO_HIGH
@ CHECK_FAN
@ WAIT_USER_BEFORE_LONG_RUN
@ BATTERY_DEEP_DISCHARGE
@ TEST_BAT_DEAD
@ MIN_PRESSURE_NOT_REACHED
@ DISCONNECT_MAINS
@ DISPLAY_FLOW
@ PLUG_AIR_TEST_SYTEM
@ START_LONG_RUN_BLOWER
@ REACH_NULL_PRESSURE
@ START_LEAK_MESURE
@ REACH_MAX_PRESSURE
@ PRESSURE_NOT_STABLE
@ DISPLAY_PRESSURE
@ FLOW_NOT_STABLE
@ CHECK_BUZZER
@ STATE_SUCCESS
@ STATE_ERROR
MainController mainController
int32_t MFM_read_airflow(void)
Read instant air flow.
#define PIN_BTN_START
Definition: parameters.h:232
#define PIN_OUT_COL2
Definition: parameters.h:236
#define PIN_IN_ROW3
Definition: parameters.h:240
#define PIN_IN_ROW1
Definition: parameters.h:238
#define PIN_OUT_COL1
Definition: parameters.h:235
#define PIN_BTN_STOP
Definition: parameters.h:233
#define PIN_BTN_ALARM_OFF
Definition: parameters.h:231
#define PIN_IN_ROW2
Definition: parameters.h:239
#define PIN_OUT_COL3
Definition: parameters.h:237
PressureSensor inspiratoryPressureSensor
Definition: pressure.cpp:23
PressureValve inspiratoryValve
PressureValve expiratoryValve
void serialControlLoop()
Parse input and handle changes of settings.
void sendEolTestSnapshot(TestStep step, TestState state, char message[])
Send an "end-of-line test" snapshot.
Definition: telemetry.cpp:1406

Variable Documentation

◆ clockEOLTimer

uint32_t clockEOLTimer = 0

Definition at line 27 of file end_of_line_test.cpp.

◆ eolFail

boolean eolFail = false

Definition at line 97 of file end_of_line_test.cpp.

◆ eolMatrixCurrentColumn

int16_t eolMatrixCurrentColumn = 1

Definition at line 104 of file end_of_line_test.cpp.

◆ eolMSCount

uint32_t eolMSCount = 0

Definition at line 28 of file end_of_line_test.cpp.

◆ eolScreenBuffer

char eolScreenBuffer[EOLSCREENSIZE+1]

Definition at line 101 of file end_of_line_test.cpp.

◆ eolState

Definition at line 94 of file end_of_line_test.cpp.

◆ eolstep

TestStep eolstep = START

Definition at line 95 of file end_of_line_test.cpp.

◆ eolStepConfirmed

boolean eolStepConfirmed = false

Definition at line 98 of file end_of_line_test.cpp.

◆ eolTest

EolTest eolTest = EolTest()

Definition at line 37 of file end_of_line_test.cpp.

◆ eolTestNumber

uint32_t eolTestNumber = 0

Definition at line 29 of file end_of_line_test.cpp.

◆ eolTimer

HardwareTimer* eolTimer

Definition at line 38 of file end_of_line_test.cpp.

◆ eolTrace

char eolTrace[EOLTRACESIZE]

Definition at line 102 of file end_of_line_test.cpp.

◆ flowValue

int32_t flowValue = 0

Definition at line 31 of file end_of_line_test.cpp.

◆ maxFlowValue

int32_t maxFlowValue = 0

Definition at line 35 of file end_of_line_test.cpp.

◆ maxPressureValue

int32_t maxPressureValue = 0

Definition at line 33 of file end_of_line_test.cpp.

◆ minFlowValue

int32_t minFlowValue = INT32_MAX

Definition at line 34 of file end_of_line_test.cpp.

◆ minPressureValue

int32_t minPressureValue = INT32_MAX

Definition at line 32 of file end_of_line_test.cpp.

◆ pressureValue

int32_t pressureValue = 0

Definition at line 30 of file end_of_line_test.cpp.

◆ previousEolStep

TestStep previousEolStep = START

Definition at line 96 of file end_of_line_test.cpp.