3K04 Project / Mbed 2 deprecated PacemakerSerialStuff

Dependencies:   mbed-rtos mbed

Fork of Pacemaker by 3K04 Project

Committer:
kieftea
Date:
Mon Dec 19 19:56:08 2016 +0000
Revision:
7:4a1ec89e37cc
Parent:
6:d71e30291a62
PARAM WORKING

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kieftea 0:00669618559e 1 #include "pulsegenerator.h"
kieftea 0:00669618559e 2
kieftea 7:4a1ec89e37cc 3
kieftea 6:d71e30291a62 4 Param *INPUTS;
kieftea 0:00669618559e 5
kieftea 6:d71e30291a62 6 string none = "N";
kieftea 6:d71e30291a62 7 string transmit = "TR";
kieftea 6:d71e30291a62 8 string rec = "RE";
kieftea 6:d71e30291a62 9 string egramTog = "ET";
kieftea 0:00669618559e 10
kieftea 6:d71e30291a62 11 bool egram = true;
kieftea 0:00669618559e 12
kieftea 6:d71e30291a62 13 string AOO = "AOO";
kieftea 6:d71e30291a62 14 string VOO = "VOO";
kieftea 6:d71e30291a62 15 string VVI = "VVI";
kieftea 0:00669618559e 16
kieftea 0:00669618559e 17 uint8_t initialized = 0;
kieftea 0:00669618559e 18
kieftea 6:d71e30291a62 19 int pace_period_ms;
kieftea 6:d71e30291a62 20
kieftea 0:00669618559e 21 /******************************************
kieftea 0:00669618559e 22 *
kieftea 0:00669618559e 23 * Pacing Mode Functions
kieftea 0:00669618559e 24 *
kieftea 6:d71e30291a62 25 *******************************************
kieftea 0:00669618559e 26
kieftea 6:d71e30291a62 27 //
kieftea 6:d71e30291a62 28 //Deactivates both pacing circuits
kieftea 6:d71e30291a62 29 //Cancels any existing pace event
kieftea 6:d71e30291a62 30 */
kieftea 1:8f545f45d899 31
kieftea 0:00669618559e 32 void pace_charge_shutdown () {
kieftea 0:00669618559e 33 /* Stage 1: Switch-OFF/Ground-ON */
kieftea 0:00669618559e 34 atr_pace_ctrl = LOW;
kieftea 0:00669618559e 35 vent_pace_ctrl = LOW;
kieftea 0:00669618559e 36 atr_grnd_ctrl = HIGH;
kieftea 0:00669618559e 37 vent_grnd_ctrl = HIGH;
kieftea 0:00669618559e 38 wait_ms(50);
kieftea 0:00669618559e 39
kieftea 0:00669618559e 40
kieftea 0:00669618559e 41 /* Stage 2: Ref PWM LOW */
kieftea 0:00669618559e 42 pacing_ref_pwm = LOW;
kieftea 0:00669618559e 43 wait_ms(100);
kieftea 0:00669618559e 44
kieftea 0:00669618559e 45 /* Stage 3: Charge CTRL off */
kieftea 0:00669618559e 46 pace_charge_ctrl = LOW;
kieftea 0:00669618559e 47 wait_ms(10);
kieftea 0:00669618559e 48
kieftea 0:00669618559e 49 /* Stage 4: Ground OFF */
kieftea 0:00669618559e 50 atr_grnd_ctrl = LOW;
kieftea 0:00669618559e 51 vent_grnd_ctrl = LOW;
kieftea 0:00669618559e 52 }
kieftea 0:00669618559e 53
kieftea 0:00669618559e 54 void pulsegenerator_initialize () {
kieftea 0:00669618559e 55 if (initialized) return;
kieftea 0:00669618559e 56 pace_charge_shutdown ();
kieftea 0:00669618559e 57 initialized = 1;
kieftea 6:d71e30291a62 58 wait(1);
kieftea 0:00669618559e 59 }
kieftea 0:00669618559e 60
kieftea 0:00669618559e 61 /*
kieftea 0:00669618559e 62 Prep the circuit for Ventricle Pace Event
kieftea 0:00669618559e 63 */
kieftea 0:00669618559e 64 void vent_pace_prime () {
kieftea 0:00669618559e 65 /* Redundant code to close ground switches,
kieftea 0:00669618559e 66 * prevents accidentally shorting the pacemaker
kieftea 0:00669618559e 67 */
kieftea 0:00669618559e 68 atr_grnd_ctrl = LOW;
kieftea 0:00669618559e 69 vent_grnd_ctrl = LOW;
kieftea 0:00669618559e 70
kieftea 0:00669618559e 71 /* Stage 1: Ref PWM On */
kieftea 0:00669618559e 72 pacing_ref_pwm = HIGH;
kieftea 0:00669618559e 73 wait_ms(10);
kieftea 0:00669618559e 74
kieftea 0:00669618559e 75 /* Stage 2: Charge CTRL on */
kieftea 0:00669618559e 76 pace_charge_ctrl = HIGH;
kieftea 0:00669618559e 77 wait_ms(10);
kieftea 0:00669618559e 78 }
kieftea 0:00669618559e 79
kieftea 0:00669618559e 80 /*
kieftea 0:00669618559e 81 Prep the circuit for Atrium Pace Event
kieftea 0:00669618559e 82 */
kieftea 0:00669618559e 83 void atr_pace_prime () {
kieftea 0:00669618559e 84 /* Redundant code to close ground switches,
kieftea 0:00669618559e 85 * prevents accidentally shorting the pacemaker
kieftea 0:00669618559e 86 */
kieftea 0:00669618559e 87 atr_grnd_ctrl = LOW;
kieftea 0:00669618559e 88 vent_grnd_ctrl = LOW;
kieftea 0:00669618559e 89
kieftea 0:00669618559e 90 /* Stage 4: Ref PWM On */
kieftea 0:00669618559e 91 pacing_ref_pwm = HIGH;
kieftea 0:00669618559e 92 wait_ms(10);
kieftea 0:00669618559e 93
kieftea 0:00669618559e 94 /* Stage 5: Charge CTRL on */
kieftea 0:00669618559e 95 pace_charge_ctrl = HIGH;
kieftea 0:00669618559e 96 wait_ms(10);
kieftea 0:00669618559e 97 }
kieftea 0:00669618559e 98
kieftea 6:d71e30291a62 99 void pace_vent (int pulse_width_us) {
kieftea 6:d71e30291a62 100 green = 0;
kieftea 0:00669618559e 101 vent_pace_prime();
kieftea 0:00669618559e 102
kieftea 0:00669618559e 103 // Begin Pace Event Output
kieftea 0:00669618559e 104 vent_pace_ctrl = HIGH;
kieftea 0:00669618559e 105
kieftea 0:00669618559e 106 // Pace Duration
kieftea 0:00669618559e 107 wait_us(pulse_width_us);
kieftea 0:00669618559e 108
kieftea 0:00669618559e 109 // Shut off Pace
kieftea 0:00669618559e 110 vent_pace_ctrl = LOW;
kieftea 0:00669618559e 111
kieftea 0:00669618559e 112 pace_charge_shutdown ();
kieftea 6:d71e30291a62 113 green = 1;
kieftea 0:00669618559e 114 }
kieftea 0:00669618559e 115
kieftea 6:d71e30291a62 116 void pace_atr (int pulse_width_us) {
kieftea 6:d71e30291a62 117
kieftea 0:00669618559e 118 atr_pace_prime();
kieftea 0:00669618559e 119
kieftea 0:00669618559e 120 // Begin Pace Event Output
kieftea 0:00669618559e 121 atr_pace_ctrl = HIGH;
kieftea 0:00669618559e 122
kieftea 0:00669618559e 123 // Pace Duration
kieftea 0:00669618559e 124 wait_us(pulse_width_us);
kieftea 0:00669618559e 125
kieftea 0:00669618559e 126 // Shut off Pace
kieftea 0:00669618559e 127 atr_pace_ctrl = LOW;
kieftea 0:00669618559e 128
kieftea 0:00669618559e 129 pace_charge_shutdown ();
kieftea 0:00669618559e 130 }
kieftea 0:00669618559e 131
kieftea 0:00669618559e 132 void pace_VOO () {
kieftea 6:d71e30291a62 133 pace_vent ((*INPUTS).getVPulseWidth_us());
kieftea 0:00669618559e 134 }
kieftea 0:00669618559e 135
kieftea 0:00669618559e 136 void pace_AOO () {
kieftea 6:d71e30291a62 137 pace_atr ((*INPUTS).getAPulseWidth_us());
kieftea 0:00669618559e 138 }
kieftea 0:00669618559e 139
kieftea 6:d71e30291a62 140 void pace_VVI() {
kieftea 6:d71e30291a62 141 int i = 0;
kieftea 6:d71e30291a62 142 while (i >=60){
kieftea 6:d71e30291a62 143 if (vent_rect_signal == 0){//if there is no signal on the heart then adda counter and wait a millisecond before checking again
kieftea 6:d71e30291a62 144 i++;
kieftea 6:d71e30291a62 145 wait_ms(1); // wait one millisecond
kieftea 6:d71e30291a62 146 //blue != blue;
kieftea 6:d71e30291a62 147 egramSend();
kieftea 1:8f545f45d899 148 }
kieftea 6:d71e30291a62 149 else{//if there is a signal then there is a heart beat, and the VII will return 0 and wait to be caled on again.
kieftea 6:d71e30291a62 150 return;
kieftea 2:4fb5a8d15f9c 151 }
kieftea 6:d71e30291a62 152 }
kieftea 6:d71e30291a62 153
kieftea 6:d71e30291a62 154 pace_vent ((*INPUTS).getVPulseWidth_us());//if there is no heartbeat recordered for 60 millaseconds, then it will call on the pacemaker to pulse.
kieftea 6:d71e30291a62 155 return;
kieftea 6:d71e30291a62 156
kieftea 0:00669618559e 157 }
kieftea 0:00669618559e 158
kieftea 0:00669618559e 159 void begin_pace () {
kieftea 0:00669618559e 160 if (!initialized) pulsegenerator_initialize ();
kieftea 6:d71e30291a62 161
kieftea 7:4a1ec89e37cc 162 Param pacemaker("$VOO,60,120,120,150,OFF,50,OFF,3.50,3.50,3.75,3.75,0.40,0.40,0.75,2.50,320,250,250,OFF,OFF,OFF,OFF,20,1,40,Med,30,8,5,*");
kieftea 7:4a1ec89e37cc 163 string temp = pacemaker.getParameters();
kieftea 7:4a1ec89e37cc 164 (*INPUTS).setParameters(temp);
kieftea 7:4a1ec89e37cc 165 //(*INPUTS).setParameters(pacemaker.getParameters());
kieftea 7:4a1ec89e37cc 166 //(*INPUTS).setMode("VOO");
kieftea 7:4a1ec89e37cc 167 //green = 1;
kieftea 7:4a1ec89e37cc 168 //red = 1;
kieftea 7:4a1ec89e37cc 169 //blue = 0;
kieftea 7:4a1ec89e37cc 170 //wait(1);
kieftea 6:d71e30291a62 171
kieftea 6:d71e30291a62 172 //serialCheck(recieve());
kieftea 7:4a1ec89e37cc 173 //(*INPUTS).setParameters("$VOO,60,120,120,150,OFF,50,OFF,3.50,3.50,3.75,3.75,0.40,0.40,0.75,2.50,320,250,250,OFF,OFF,OFF,OFF,20,1,40,Med,30,8,5,*");
kieftea 7:4a1ec89e37cc 174 blue = 0;
kieftea 7:4a1ec89e37cc 175 red = 0;
kieftea 7:4a1ec89e37cc 176 green = 1;
kieftea 7:4a1ec89e37cc 177 wait(5);
kieftea 7:4a1ec89e37cc 178
kieftea 0:00669618559e 179
kieftea 6:d71e30291a62 180 while(1){
kieftea 6:d71e30291a62 181 pace_period_ms = (*INPUTS).getLowerRateLimit_ms();
kieftea 6:d71e30291a62 182
kieftea 6:d71e30291a62 183 if (strcmp((*INPUTS).getMode().c_str(),VOO.c_str()) == 0){
kieftea 6:d71e30291a62 184 green = 1;
kieftea 6:d71e30291a62 185 blue = 1;
kieftea 6:d71e30291a62 186 red = !red;
kieftea 6:d71e30291a62 187 wait(1);
kieftea 6:d71e30291a62 188 time_t start = time(NULL);
kieftea 6:d71e30291a62 189
kieftea 6:d71e30291a62 190 pace_VOO();
kieftea 6:d71e30291a62 191
kieftea 6:d71e30291a62 192 time_t now = time(NULL);
kieftea 6:d71e30291a62 193 while((now - start) <= pace_period_ms){
kieftea 6:d71e30291a62 194 egramSend();
kieftea 6:d71e30291a62 195 //wait(2);
kieftea 6:d71e30291a62 196 //red = !red;
kieftea 6:d71e30291a62 197 }
kieftea 6:d71e30291a62 198 //red = !red;
kieftea 6:d71e30291a62 199 } else if (strcmp((*INPUTS).getMode().c_str(),AOO.c_str()) == 0) {
kieftea 6:d71e30291a62 200 green = 1;
kieftea 6:d71e30291a62 201 blue = !blue;
kieftea 6:d71e30291a62 202 red = 1;
kieftea 6:d71e30291a62 203 wait(1);
kieftea 6:d71e30291a62 204 time_t start = time(NULL);
kieftea 6:d71e30291a62 205
kieftea 6:d71e30291a62 206 pace_AOO();
kieftea 6:d71e30291a62 207
kieftea 6:d71e30291a62 208 time_t now = time(NULL);
kieftea 6:d71e30291a62 209 while((now - start) <= pace_period_ms){
kieftea 6:d71e30291a62 210 egramSend();
kieftea 6:d71e30291a62 211 //wait(2);
kieftea 6:d71e30291a62 212 //green = !green;
kieftea 6:d71e30291a62 213 }
kieftea 6:d71e30291a62 214 //green = !green;
kieftea 6:d71e30291a62 215 } else if (strcmp((*INPUTS).getMode().c_str(),VVI.c_str()) == 0) {
kieftea 6:d71e30291a62 216 green = !green;
kieftea 6:d71e30291a62 217 blue = 1;
kieftea 6:d71e30291a62 218 red = 1;
kieftea 6:d71e30291a62 219 wait(1);
kieftea 6:d71e30291a62 220 pace_VVI();
kieftea 6:d71e30291a62 221 //blue != blue;
kieftea 6:d71e30291a62 222 } else {
kieftea 6:d71e30291a62 223 green = 1;
kieftea 6:d71e30291a62 224 blue = !blue;
kieftea 6:d71e30291a62 225 red = !red;
kieftea 6:d71e30291a62 226 wait(1);
kieftea 6:d71e30291a62 227 time_t start = time(NULL);
kieftea 6:d71e30291a62 228
kieftea 6:d71e30291a62 229 pace_VOO();
kieftea 6:d71e30291a62 230
kieftea 6:d71e30291a62 231 time_t now = time(NULL);
kieftea 6:d71e30291a62 232 while((now - start) <= pace_period_ms){
kieftea 6:d71e30291a62 233 egramSend();
kieftea 6:d71e30291a62 234 //blue = !blue;
kieftea 6:d71e30291a62 235 //wait(1);
kieftea 6:d71e30291a62 236 //reen = !green;
kieftea 6:d71e30291a62 237 //wait(1);
kieftea 6:d71e30291a62 238 }
kieftea 6:d71e30291a62 239 //blue = 0;
kieftea 6:d71e30291a62 240 //green = 0;
kieftea 6:d71e30291a62 241 }
kieftea 6:d71e30291a62 242
kieftea 6:d71e30291a62 243 //serialCheck(recieve());
kieftea 6:d71e30291a62 244
kieftea 6:d71e30291a62 245 }
kieftea 6:d71e30291a62 246
kieftea 0:00669618559e 247 }
kieftea 0:00669618559e 248
kieftea 6:d71e30291a62 249 /*
kieftea 0:00669618559e 250 void timer_thread () {
kieftea 0:00669618559e 251 while (true) {
kieftea 0:00669618559e 252 paceThread.signal_set(0x4);
kieftea 0:00669618559e 253
kieftea 2:4fb5a8d15f9c 254 wait_ms(pace_period_ms - 180); //delay for every pace call
kieftea 0:00669618559e 255 }
kieftea 0:00669618559e 256 }
kieftea 0:00669618559e 257
kieftea 0:00669618559e 258 void pace_controller () {
kieftea 0:00669618559e 259 while(true) {
kieftea 0:00669618559e 260 Thread::signal_wait(0x0, osWaitForever); //Sleep until next cycle
kieftea 0:00669618559e 261
kieftea 0:00669618559e 262 switch (currentMode) {
kieftea 0:00669618559e 263 case VOO : pace_VOO(); break;
kieftea 0:00669618559e 264 case VOOR : pace_VOOR(); break;
kieftea 0:00669618559e 265 case AOO : pace_AOO(); break;
kieftea 0:00669618559e 266 default : pace_VOO(); break;
kieftea 0:00669618559e 267 }
kieftea 0:00669618559e 268 }
kieftea 6:d71e30291a62 269 }
kieftea 6:d71e30291a62 270 */
kieftea 6:d71e30291a62 271
kieftea 6:d71e30291a62 272 void egramSend(void){
kieftea 6:d71e30291a62 273 red = 0;
kieftea 6:d71e30291a62 274 green = 0;
kieftea 6:d71e30291a62 275 blue = 0;
kieftea 6:d71e30291a62 276 if (egram) {
kieftea 6:d71e30291a62 277 send("HelloWorld!\r\n");//send data
kieftea 6:d71e30291a62 278 send((*INPUTS).getMode());
kieftea 6:d71e30291a62 279 } else {
kieftea 6:d71e30291a62 280 return;
kieftea 6:d71e30291a62 281 }
kieftea 6:d71e30291a62 282 wait(1);
kieftea 6:d71e30291a62 283 red = 1;
kieftea 6:d71e30291a62 284 green = 1;
kieftea 6:d71e30291a62 285 blue = 1;
kieftea 6:d71e30291a62 286 }
kieftea 6:d71e30291a62 287
kieftea 6:d71e30291a62 288 void serialCheck(string check){
kieftea 6:d71e30291a62 289 if (strcmp(check.c_str(),none.c_str()) == 0){
kieftea 6:d71e30291a62 290 return;//continue
kieftea 6:d71e30291a62 291 } else if (strcmp(check.c_str(),rec.c_str()) == 0){
kieftea 6:d71e30291a62 292 wait_ms(5);
kieftea 6:d71e30291a62 293 send("R");//send "RE\n" for recieved
kieftea 6:d71e30291a62 294 red = 0;
kieftea 6:d71e30291a62 295 blue = 1;
kieftea 6:d71e30291a62 296 green = 1;
kieftea 6:d71e30291a62 297 send((*INPUTS).getParameters());//send data to DCM
kieftea 6:d71e30291a62 298 } else if (strcmp(check.c_str(),egramTog.c_str()) == 0){
kieftea 6:d71e30291a62 299 wait_ms(5);
kieftea 6:d71e30291a62 300 send("R");//send "RE\n" for recieved
kieftea 6:d71e30291a62 301 red = 1;
kieftea 6:d71e30291a62 302 blue = 0;
kieftea 6:d71e30291a62 303 green = 1;
kieftea 6:d71e30291a62 304 //toggle egram variable to start or stop sending
kieftea 6:d71e30291a62 305 } else if (strcmp(check.c_str(),transmit.c_str()) == 0){
kieftea 6:d71e30291a62 306 wait_ms(5);
kieftea 6:d71e30291a62 307 send("R");//send "RE\n" for recieved
kieftea 6:d71e30291a62 308 red = 1;
kieftea 6:d71e30291a62 309 blue = 1;
kieftea 6:d71e30291a62 310 green = 0;
kieftea 6:d71e30291a62 311 (*INPUTS).setParameters(recieve());//recieve data from DCM
kieftea 6:d71e30291a62 312 } else {
kieftea 6:d71e30291a62 313 wait_ms(5);
kieftea 6:d71e30291a62 314 send("N");//send "NR\n" for not recieved
kieftea 6:d71e30291a62 315 red = 0;
kieftea 6:d71e30291a62 316 blue = 0;
kieftea 6:d71e30291a62 317 green = 0;
kieftea 6:d71e30291a62 318 }
kieftea 6:d71e30291a62 319 }