Skip to content

Commit 7b75996

Browse files
committed
Implement SRS-0015 and SRS-0020
1 parent 461634c commit 7b75996

File tree

5 files changed

+137
-21
lines changed

5 files changed

+137
-21
lines changed

include/application/tasks/ventilation.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
#include "platform/common.h"
1111
#define MAX_CIRCUIT_PRESSURE_FOR_OPENING_INS_VALVE_CSP 32 //todo replace this value by the real value
12+
#define MIN_CIRCUIT_PRESSURE_FOR_OPENING_EXP_VALVE_CSP 8 //todo replace this value by the real value
1213

1314
/*
1415
* SLS-0055
@@ -27,4 +28,14 @@ uint32_t get_circuit_pressure();
2728
*/
2829
void start_inspiration();
2930

31+
/**
32+
* Ends inspiration and Start Expiration
33+
*
34+
* Verify that the pressure is acceptable to start an expiration
35+
* Ends the inspiration by closing the inspiratory valve
36+
* Starts the expiration by opening the expiratory valve
37+
* SRS-0015 and SRS-0020
38+
*/
39+
void start_expiration();
40+
3041
#endif /* INC_PLATFORM_VENTILATION_H_ */

src/application/tasks/ventilation.c

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515

1616
//todo rename this so that it does not look like they are time
1717
#define INSPIRATION 1
18-
#define INSPIRATORY_PAUSE 2
19-
#define EXPIRATION 3
20-
#define EXPIRATORY_PAUSE 4
18+
#define EXPIRATION 2
2119

2220
/*
2321
* the time the current breath cycle was supposed to start
@@ -27,11 +25,14 @@ static int start_current_breath_cycle = 0;
2725
/*
2826
* Phase of the ventilation
2927
* This should always be one of
30-
* INSPIRATION | INSPIRATORY_PAUSE
31-
* | EXPIRATION | EXPIRATORY_PAUSE
28+
* INSPIRATION | EXPIRATION
29+
* The pauses are obtained through the mechanical parts of the system
30+
* and not the software parts.
31+
* The inspiration pause is obtained through the maximal pressure
32+
* The expiration pause is obtained through the PEEP valve
3233
*/
3334

34-
static int ventilation_phase = EXPIRATORY_PAUSE;
35+
static int ventilation_phase = EXPIRATION;
3536

3637

3738
uint32_t get_circuit_pressure() {
@@ -50,20 +51,12 @@ void ventilation(){
5051
* a waiting period of breath_cycle_duration for the first ventilation preiod
5152
*/
5253
switch (ventilation_phase) {
53-
case EXPIRATORY_PAUSE:
54+
case EXPIRATION:
5455
start_inspiration();
5556
break;
5657

5758
case INSPIRATION:
58-
// statements
59-
break;
60-
61-
case INSPIRATORY_PAUSE:
62-
// statements
63-
break;
64-
65-
case EXPIRATION:
66-
// statements
59+
start_expiration();
6760
break;
6861

6962
default:
@@ -86,13 +79,26 @@ void start_inspiration(){
8679
}
8780
}
8881

82+
void start_expiration(){
83+
uint32_t current_time = get_current_time();
84+
uint32_t selected_inspiratory_time;
85+
get_selected_inspiratory_time(&selected_inspiratory_time);
86+
if (current_time >= start_current_breath_cycle + selected_inspiratory_time) {
87+
if (get_circuit_pressure() > MIN_CIRCUIT_PRESSURE_FOR_OPENING_EXP_VALVE_CSP){
88+
close_inspiratory_valve();
89+
open_expiratory_valve();
90+
ventilation_phase = EXPIRATION;
91+
}
92+
}
93+
}
94+
8995

9096

9197
/*
9298
* function for test only
9399
*/
94100
void reset_to_inspiration_start(){
95-
ventilation_phase = EXPIRATORY_PAUSE;
101+
ventilation_phase = EXPIRATION;
96102
}
97103

98104
int get_ventilation_phase() {

test/test_runner.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@ int main(int argc, char **argv) {
66
"getCircuitPressure_validValues_returnsMeanPressure");
77
test(startInspiration_afterOneInspiration_openInspiratoryValve,
88
"startInspiration_afterOneInspiration_openInspiratoryValve");
9+
test(startExpiration_afterOneInspiration_closeInspiratoryValve,
10+
"startExpiration_afterOneInspiration_closeInspiratoryValve");
911
test(startInspiration_afterOneInspiration_setsVentilationPhaseToInspiration,
1012
"startInspiration_afterOneInspiration_setsVentilationPhaseToInspiration");
13+
test(startExpiration_afterOneInspiration_opensExpiratoryValve,
14+
"startExpiration_afterOneInspiration_opensExpiratoryValve");
1115
test(startInspiration_afterTwoInspirations_updatesStartCurrentBreathCycle,
1216
"startInspiration_afterTwoInspirations_updatesStartCurrentBreathCycle");
17+
test(startExpiration_afterThreeInspiration_updatesVentilationPhase,
18+
"startExpiration_afterThreeInspiration_updatesVentilationPhase");
1319
test(startInspiration_duringInspiration_doesNotUpdateStartOfcurrentBreathCycle,
1420
"startInspiration_duringInspiration_doesNotUpdateStartOfcurrentBreathCycle");
1521
test(startInspiration_duringInspiration_doesNotChangeVentilationPhase,

test/ventilation_test.c

Lines changed: 91 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ int startInspiration_afterOneInspiration_openInspiratoryValve() {
4444

4545
//initialize the function get_current_time
4646
int breath_cycle_duration = 60000/RR[0];
47-
int times[1] = {breath_cycle_duration + 1};
47+
int times[1] = {breath_cycle_duration};
4848
set_current_time(times);
4949

5050
//initialize the function to get circuit pressure
@@ -63,6 +63,35 @@ int startInspiration_afterOneInspiration_openInspiratoryValve() {
6363
assertTrue(inspiratory_valve_status == VALVE_OPEN);
6464
}
6565

66+
int startExpiration_afterOneInspiration_closeInspiratoryValve() {
67+
//initialize the function get_respiratory_rate
68+
uint32_t RR[1] = {20};
69+
status_t status[1] = {STATUS_OK};
70+
set_respiratory_rate(RR, status);
71+
72+
int breath_cycle_duration = 60000/RR[0];
73+
74+
//initialize the selected inspiratory time
75+
uint32_t insp_time [1] = {breath_cycle_duration/2};
76+
set_selected_inspiratory_time(insp_time, status);
77+
78+
//initialize the function get_current_time
79+
int times[1] = {breath_cycle_duration + insp_time[0]};
80+
set_current_time(times);
81+
82+
//initialize the function to get circuit pressure
83+
uint32_t inspiratory[1] = {40};
84+
uint32_t expiratory[1] = {41};
85+
set_inspiratory_pressure(inspiratory, status);
86+
set_expiratory_pressure(expiratory, status);
87+
88+
//reinitialize the system to be sure that the valve wasn't previously open
89+
start_expiration();
90+
91+
int inspiratory_valve_status = get_inspiratory_valve_status();
92+
assertTrue(inspiratory_valve_status == VALVE_CLOSE);
93+
}
94+
6695
int startInspiration_afterOneInspiration_setsVentilationPhaseToInspiration() {
6796
//initialize the function get_respiratory_rate
6897
uint32_t RR[1] = {20};
@@ -71,7 +100,7 @@ int startInspiration_afterOneInspiration_setsVentilationPhaseToInspiration() {
71100

72101
//initialize the function get_current_time
73102
int breath_cycle_duration = 60000/RR[0];
74-
int times[1] = {(breath_cycle_duration + 1) * 2};
103+
int times[1] = {(breath_cycle_duration) * 2};
75104
set_current_time(times);
76105

77106
//initialize the function to get circuit pressure
@@ -88,6 +117,35 @@ int startInspiration_afterOneInspiration_setsVentilationPhaseToInspiration() {
88117
assertTrue(ventilation_phase == 1);
89118
}
90119

120+
int startExpiration_afterOneInspiration_opensExpiratoryValve() {
121+
//initialize the function get_respiratory_rate
122+
uint32_t RR[1] = {20};
123+
status_t status[1] = {STATUS_OK};
124+
set_respiratory_rate(RR, status);
125+
126+
int breath_cycle_duration = 60000/RR[0];
127+
128+
//initialize the selected inspiratory time
129+
uint32_t insp_time [1] = {breath_cycle_duration/2};
130+
set_selected_inspiratory_time(insp_time, status);
131+
132+
//initialize the function get_current_time
133+
int times[1] = {breath_cycle_duration * 2 + insp_time[0]};
134+
set_current_time(times);
135+
136+
//initialize the function to get circuit pressure
137+
uint32_t inspiratory[1] = {40};
138+
uint32_t expiratory[1] = {41};
139+
set_inspiratory_pressure(inspiratory, status);
140+
set_expiratory_pressure(expiratory, status);
141+
142+
//reinitialize the system to be sure that the valve wasn't previously open
143+
start_expiration();
144+
145+
int expiratory_valve_status = get_expiratory_valve_status();
146+
assertTrue(expiratory_valve_status == VALVE_OPEN);
147+
}
148+
91149
int startInspiration_afterTwoInspirations_updatesStartCurrentBreathCycle() {
92150
//initialize the function get_respiratory_rate
93151
uint32_t RR[1] = {20};
@@ -96,7 +154,7 @@ int startInspiration_afterTwoInspirations_updatesStartCurrentBreathCycle() {
96154

97155
//initialize the function get_current_time
98156
int breath_cycle_duration = 60000/RR[0];
99-
int time = (breath_cycle_duration + 1) * 3;
157+
int time = (breath_cycle_duration) * 3;
100158
int times[1] = {time};
101159
set_current_time(times);
102160

@@ -114,6 +172,35 @@ int startInspiration_afterTwoInspirations_updatesStartCurrentBreathCycle() {
114172
assertTrue(time_of_start_current_breath_cycle == time);
115173
}
116174

175+
int startExpiration_afterThreeInspiration_updatesVentilationPhase() {
176+
//initialize the function get_respiratory_rate
177+
uint32_t RR[1] = {20};
178+
status_t status[1] = {STATUS_OK};
179+
set_respiratory_rate(RR, status);
180+
181+
int breath_cycle_duration = 60000/RR[0];
182+
183+
//initialize the selected inspiratory time
184+
uint32_t insp_time [1] = {breath_cycle_duration/2};
185+
set_selected_inspiratory_time(insp_time, status);
186+
187+
//initialize the function get_current_time
188+
int times[1] = {breath_cycle_duration * 3 + insp_time[0]};
189+
set_current_time(times);
190+
191+
//initialize the function to get circuit pressure
192+
uint32_t inspiratory[1] = {40};
193+
uint32_t expiratory[1] = {41};
194+
set_inspiratory_pressure(inspiratory, status);
195+
set_expiratory_pressure(expiratory, status);
196+
197+
//reinitialize the system to be sure that the valve wasn't previously open
198+
start_expiration();
199+
200+
int ventilation_phase = get_ventilation_phase();
201+
assertTrue(ventilation_phase == 2);
202+
}
203+
117204
int startInspiration_duringInspiration_doesNotopenInspiratoryValve() {
118205
int times[1] = {0};
119206
set_current_time (times);
@@ -158,7 +245,7 @@ int startInspiration_duringInspiration_doesNotChangeVentilationPhase() {
158245
start_inspiration();
159246

160247
int ventilation_phase = get_ventilation_phase();
161-
assertTrue(ventilation_phase == 4);
248+
assertTrue(ventilation_phase == 2);
162249
}
163250

164251
int startInspiration_duringInspiration_doesNotUpdateStartOfcurrentBreathCycle() {

test/ventilation_test.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ int getCircuitPressure_validValues_returnsMeanPressure();
77

88
int startInspiration_afterOneInspiration_openInspiratoryValve();
99

10+
int startExpiration_afterOneInspiration_closeInspiratoryValve();
11+
12+
int startExpiration_afterOneInspiration_opensExpiratoryValve();
13+
14+
int startExpiration_afterThreeInspiration_updatesVentilationPhase();
15+
1016
int startInspiration_duringInspiration_doesNotopenInspiratoryValve();
1117

1218
int startInspiration_afterOneInspiration_setsVentilationPhaseToInspiration();

0 commit comments

Comments
 (0)