CIS541 / Mbed 2 deprecated CIS541PM

Dependencies:   mbed mbed-rtos TextLCD

Committer:
shibulal
Date:
Mon Nov 30 20:52:31 2015 +0000
Revision:
5:a74776e6504f
Parent:
4:242a71a6efed
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shibulal 0:2d6b43fc4625 1 #include "mbed.h"
shibulal 1:e3a5388e46ab 2 #include "rtos.h"
shibulal 3:ac2e5aceb324 3 #include "TextLCD.h"
shibulal 2:b178e27d9f22 4 InterruptIn A(p8);
shibulal 2:b178e27d9f22 5 InterruptIn V(p9);
shibulal 3:ac2e5aceb324 6 int pacemakerrate;
shibulal 3:ac2e5aceb324 7 DigitalOut Apace(p10);
shibulal 3:ac2e5aceb324 8 DigitalOut Vpace(p11);
shibulal 3:ac2e5aceb324 9 DigitalOut ApaceLED(LED1);
shibulal 3:ac2e5aceb324 10 DigitalOut VpaceLED(LED2);
shibulal 3:ac2e5aceb324 11 DigitalOut AsigLED(LED3);
shibulal 3:ac2e5aceb324 12 DigitalOut VsigLED(LED4);
shibulal 3:ac2e5aceb324 13 TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
shibulal 1:e3a5388e46ab 14 Serial pc(USBTX, USBRX);
shibulal 3:ac2e5aceb324 15 Queue<char, 16> AVsigpmv;
shibulal 3:ac2e5aceb324 16 Queue<char, 16> AVsensepmv;
shibulal 3:ac2e5aceb324 17 Queue<char, 16> AVpacepmv;
shibulal 3:ac2e5aceb324 18 Queue<char, 16> AVsigpms;
shibulal 3:ac2e5aceb324 19 Queue<char, 16> AVsensepms;
shibulal 3:ac2e5aceb324 20 Queue<char, 16> AVpacepms;
shibulal 3:ac2e5aceb324 21 Queue<char, 16> AVsigpma;
shibulal 3:ac2e5aceb324 22 Queue<char, 16> AVsensepma;
shibulal 3:ac2e5aceb324 23 Queue<char, 16> AVpacepma;
shibulal 3:ac2e5aceb324 24 Queue<char, 16> AVsigpmm;
shibulal 3:ac2e5aceb324 25 Queue<char, 16> AVsensepmm;
shibulal 3:ac2e5aceb324 26 Queue<char, 16> AVpacepmm;
shibulal 3:ac2e5aceb324 27 Queue<char, 16> AVsigpmd;
shibulal 3:ac2e5aceb324 28 Queue<char, 16> AVsensepmd;
shibulal 3:ac2e5aceb324 29 Queue<char, 16> AVpacepmd;
shibulal 1:e3a5388e46ab 30 void PacemakerKeyboardInput(void const *args);
shibulal 1:e3a5388e46ab 31 void PacemakerModes(void const *args);
shibulal 3:ac2e5aceb324 32
shibulal 2:b178e27d9f22 33 void PacemakerSend(void const *args);
shibulal 3:ac2e5aceb324 34 void PaceMakerAtrialInterval(void const *args);
shibulal 3:ac2e5aceb324 35 void PaceMakerVentricalInterval(void const *args);
shibulal 3:ac2e5aceb324 36 int pacemakerMode;
shibulal 1:e3a5388e46ab 37 int modeSwitchTimeInterval = 5000;
shibulal 1:e3a5388e46ab 38 int flag=0;
shibulal 3:ac2e5aceb324 39 int PVAB;
shibulal 1:e3a5388e46ab 40 const int sleepModeURI = 1000;
shibulal 1:e3a5388e46ab 41 const int sleepModeLRI = 2000;
shibulal 1:e3a5388e46ab 42 const int normalModeURI = 600;
shibulal 1:e3a5388e46ab 43 const int normalModeLRI = 1500;
shibulal 1:e3a5388e46ab 44 const int sportsModeURI = 343;
shibulal 1:e3a5388e46ab 45 const int sportsModeLRI = 600;
shibulal 1:e3a5388e46ab 46 const int manualModeURI = 343;
shibulal 1:e3a5388e46ab 47 const int manualModeLRI = 2000;
shibulal 4:242a71a6efed 48 int low[4] = {30,40,100,30};
shibulal 4:242a71a6efed 49 int high[4] = {60,100,175,175};
shibulal 3:ac2e5aceb324 50 int pulses = 0;
shibulal 3:ac2e5aceb324 51 int pacemakerInterval = 10;
shibulal 4:242a71a6efed 52 int newpacemakerInterval;
shibulal 3:ac2e5aceb324 53 int heartInterval = 10;
shibulal 4:242a71a6efed 54 int paceMakerRate = 0;
shibulal 3:ac2e5aceb324 55 int heartRate = 0;
shibulal 1:e3a5388e46ab 56 int LRI = normalModeLRI;
shibulal 1:e3a5388e46ab 57 int URI = normalModeURI;
shibulal 1:e3a5388e46ab 58 Timer k;
shibulal 3:ac2e5aceb324 59 Timer r;
shibulal 2:b178e27d9f22 60 Timer p;
shibulal 3:ac2e5aceb324 61 Timer t_loc;
shibulal 3:ac2e5aceb324 62 Timer t;
shibulal 2:b178e27d9f22 63 const int PVARP = 150;
shibulal 2:b178e27d9f22 64 const int VRP = PVARP;
shibulal 2:b178e27d9f22 65 const int AVI = 65;
shibulal 1:e3a5388e46ab 66 char mode;
shibulal 1:e3a5388e46ab 67 char manualPace;
shibulal 2:b178e27d9f22 68 char AorV;
shibulal 2:b178e27d9f22 69 char AorVsense;
shibulal 1:e3a5388e46ab 70 Thread Pmki(PacemakerKeyboardInput,(void *) 0);
shibulal 2:b178e27d9f22 71 Thread Pmm(PacemakerModes,(void *) 0);
shibulal 5:a74776e6504f 72 //Thread Pms (PacemakerSend, (void *) 0);
shibulal 5:a74776e6504f 73 //Thread PmA (PaceMakerAtrialInterval, (void *) 0);
shibulal 5:a74776e6504f 74 //Thread PmV (PaceMakerVentricalInterval, (void *) 0);
shibulal 1:e3a5388e46ab 75 void PacemakerKeyboardInput(void const *args){
shibulal 5:a74776e6504f 76 pc.printf("type something");
shibulal 1:e3a5388e46ab 77 k.start();
shibulal 1:e3a5388e46ab 78 char input;
shibulal 1:e3a5388e46ab 79 while(true){
shibulal 5:a74776e6504f 80 if (pc.readable()){
shibulal 5:a74776e6504f 81
shibulal 1:e3a5388e46ab 82 input=pc.getc();
shibulal 1:e3a5388e46ab 83 if (k.read()>=modeSwitchTimeInterval && flag==0){
shibulal 1:e3a5388e46ab 84 if (input=='F'){
shibulal 1:e3a5388e46ab 85 mode='F';
shibulal 1:e3a5388e46ab 86 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 87 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 88 }
shibulal 1:e3a5388e46ab 89 else if (input=='S'){
shibulal 1:e3a5388e46ab 90 mode='S';
shibulal 1:e3a5388e46ab 91 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 92 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 93 }
shibulal 1:e3a5388e46ab 94 else if (input=='N'){
shibulal 1:e3a5388e46ab 95 mode='N';
shibulal 1:e3a5388e46ab 96 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 97 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 98 }
shibulal 1:e3a5388e46ab 99 else if (input=='O'){
shibulal 1:e3a5388e46ab 100 mode='O';
shibulal 4:242a71a6efed 101 input=pc.getc();
shibulal 4:242a71a6efed 102 newpacemakerInterval=10*(int)input;
shibulal 4:242a71a6efed 103 input=pc.getc();
shibulal 4:242a71a6efed 104 newpacemakerInterval=newpacemakerInterval+(int)input;
shibulal 1:e3a5388e46ab 105 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 106 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 107 }
shibulal 1:e3a5388e46ab 108 else if (input=='M'){
shibulal 1:e3a5388e46ab 109 mode='M';
shibulal 1:e3a5388e46ab 110 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 111 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 112 }
shibulal 1:e3a5388e46ab 113 else if (input=='A'){
shibulal 1:e3a5388e46ab 114 if (mode=='M')
shibulal 1:e3a5388e46ab 115 manualPace='A';
shibulal 1:e3a5388e46ab 116 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 117 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 118 }
shibulal 1:e3a5388e46ab 119 }
shibulal 1:e3a5388e46ab 120 else if (input=='V'){
shibulal 1:e3a5388e46ab 121 if (mode=='M'){
shibulal 2:b178e27d9f22 122
shibulal 1:e3a5388e46ab 123 manualPace='V';
shibulal 1:e3a5388e46ab 124 Pmm.signal_set(0x1);
shibulal 1:e3a5388e46ab 125 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 126 }
shibulal 1:e3a5388e46ab 127 }
shibulal 1:e3a5388e46ab 128 }
shibulal 5:a74776e6504f 129 }
shibulal 1:e3a5388e46ab 130 }
shibulal 2:b178e27d9f22 131
shibulal 1:e3a5388e46ab 132
shibulal 1:e3a5388e46ab 133
shibulal 1:e3a5388e46ab 134 void PacemakerModes(void const *args){
shibulal 1:e3a5388e46ab 135 while(1){
shibulal 5:a74776e6504f 136 pc.printf("enter pm mode");
shibulal 1:e3a5388e46ab 137 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 138 if (mode=='F'){
shibulal 1:e3a5388e46ab 139 LRI=sportsModeLRI;
shibulal 1:e3a5388e46ab 140 URI=sportsModeURI;
shibulal 2:b178e27d9f22 141 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 142 }
shibulal 1:e3a5388e46ab 143 else if (mode=='S'){
shibulal 1:e3a5388e46ab 144 LRI=sleepModeLRI;
shibulal 1:e3a5388e46ab 145 URI=sleepModeURI;
shibulal 2:b178e27d9f22 146 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 147 }
shibulal 1:e3a5388e46ab 148 else if (mode=='N'){
shibulal 1:e3a5388e46ab 149 LRI=normalModeLRI;
shibulal 1:e3a5388e46ab 150 URI=normalModeURI;
shibulal 2:b178e27d9f22 151 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 152 }
shibulal 1:e3a5388e46ab 153 else if (mode=='O'){
shibulal 4:242a71a6efed 154 pacemakerInterval=newpacemakerInterval;
shibulal 2:b178e27d9f22 155 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 156 }
shibulal 1:e3a5388e46ab 157 else if (mode=='M'){
shibulal 1:e3a5388e46ab 158 LRI=manualModeLRI;
shibulal 1:e3a5388e46ab 159 URI=manualModeURI;
shibulal 2:b178e27d9f22 160 Pmki.signal_set(0x1);
shibulal 1:e3a5388e46ab 161 while(1){
shibulal 1:e3a5388e46ab 162 Thread::signal_wait(0x1);
shibulal 1:e3a5388e46ab 163 if (mode=='M'){
shibulal 1:e3a5388e46ab 164 if (manualPace=='A'){
shibulal 3:ac2e5aceb324 165 char* element;
shibulal 3:ac2e5aceb324 166 *element='A';
shibulal 3:ac2e5aceb324 167 AVpacepms.put(element);
shibulal 3:ac2e5aceb324 168 AVpacepma.put(element);
shibulal 3:ac2e5aceb324 169 AVpacepmv.put(element);
shibulal 3:ac2e5aceb324 170 AVpacepmm.put(element);
shibulal 3:ac2e5aceb324 171 AVpacepmd.put(element);
shibulal 1:e3a5388e46ab 172 }
shibulal 1:e3a5388e46ab 173 else if (manualPace=='V'){
shibulal 3:ac2e5aceb324 174 char* element;
shibulal 3:ac2e5aceb324 175 *element='V';
shibulal 3:ac2e5aceb324 176 AVpacepms.put(element);
shibulal 3:ac2e5aceb324 177 AVpacepma.put(element);
shibulal 3:ac2e5aceb324 178 AVpacepmv.put(element);
shibulal 3:ac2e5aceb324 179 AVpacepmm.put(element);
shibulal 3:ac2e5aceb324 180 AVpacepmd.put(element);
shibulal 1:e3a5388e46ab 181 }
shibulal 1:e3a5388e46ab 182 }
shibulal 1:e3a5388e46ab 183 else {
shibulal 2:b178e27d9f22 184 Pmm.signal_set(0x1);
shibulal 2:b178e27d9f22 185 Pmki.signal_set(0x1);
shibulal 2:b178e27d9f22 186 break;
shibulal 2:b178e27d9f22 187 }
shibulal 2:b178e27d9f22 188 Pmki.signal_set(0x1);
shibulal 2:b178e27d9f22 189 }
shibulal 2:b178e27d9f22 190 }
shibulal 2:b178e27d9f22 191 }
shibulal 2:b178e27d9f22 192 }
shibulal 3:ac2e5aceb324 193
shibulal 3:ac2e5aceb324 194 void PaceMakerAtrialInterval(void const *args){
shibulal 3:ac2e5aceb324 195 char *AorVsig;
shibulal 3:ac2e5aceb324 196 char *AorVpace;
shibulal 3:ac2e5aceb324 197 char *AorVsense;
shibulal 3:ac2e5aceb324 198 osEvent evt;
shibulal 5:a74776e6504f 199 pc.printf("entering atrial interval");
shibulal 3:ac2e5aceb324 200 while (1){
shibulal 3:ac2e5aceb324 201 evt = AVsigpma.get(1);
shibulal 3:ac2e5aceb324 202 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 203 AorVsig = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 204 }
shibulal 3:ac2e5aceb324 205 if (*AorVsig=='A'){
shibulal 3:ac2e5aceb324 206 AorVsig=0;
shibulal 3:ac2e5aceb324 207 char* element;
shibulal 3:ac2e5aceb324 208 *element='A';
shibulal 3:ac2e5aceb324 209 AVsensepms.put(element);
shibulal 3:ac2e5aceb324 210 AVsensepma.put(element);
shibulal 3:ac2e5aceb324 211 AVsensepmv.put(element);
shibulal 3:ac2e5aceb324 212 AVsensepmm.put(element);
shibulal 3:ac2e5aceb324 213 AVsensepmd.put(element);
shibulal 3:ac2e5aceb324 214 break;
shibulal 3:ac2e5aceb324 215 }
shibulal 3:ac2e5aceb324 216 evt = AVpacepma.get(1);
shibulal 3:ac2e5aceb324 217 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 218 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 219 }
shibulal 3:ac2e5aceb324 220 if (*AorVpace=='A'){
shibulal 3:ac2e5aceb324 221 AorVpace=0;
shibulal 3:ac2e5aceb324 222 break;
shibulal 3:ac2e5aceb324 223 }
shibulal 3:ac2e5aceb324 224 }
shibulal 3:ac2e5aceb324 225 t.reset();
shibulal 2:b178e27d9f22 226 while(1){
shibulal 3:ac2e5aceb324 227 osEvent evt = AVsensepma.get(1);
shibulal 3:ac2e5aceb324 228 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 229 AorVsense = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 230 }
shibulal 3:ac2e5aceb324 231 if (*AorVsense=='V'){
shibulal 3:ac2e5aceb324 232 AorVsense=0;
shibulal 3:ac2e5aceb324 233 break;
shibulal 3:ac2e5aceb324 234 }
shibulal 3:ac2e5aceb324 235 evt = AVsensepma.get(1);
shibulal 3:ac2e5aceb324 236 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 237 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 238 }
shibulal 3:ac2e5aceb324 239 if (*AorVpace=='V'){
shibulal 3:ac2e5aceb324 240 *AorVpace='V';
shibulal 3:ac2e5aceb324 241 break;
shibulal 3:ac2e5aceb324 242 }
shibulal 3:ac2e5aceb324 243 }
shibulal 3:ac2e5aceb324 244 k.reset();
shibulal 3:ac2e5aceb324 245 while(!(k>=PVARP));
shibulal 3:ac2e5aceb324 246 while(!(t>=URI));
shibulal 3:ac2e5aceb324 247 }
shibulal 3:ac2e5aceb324 248 void updatePacemaker(){
shibulal 3:ac2e5aceb324 249 int temp = 60/pacemakerInterval;
shibulal 4:242a71a6efed 250 paceMakerRate = paceMakerRate + temp;
shibulal 3:ac2e5aceb324 251 }
shibulal 3:ac2e5aceb324 252 void PaceMakerDisplay(void const *args){
shibulal 3:ac2e5aceb324 253 osEvent evt;
shibulal 3:ac2e5aceb324 254 char* AorVsense;
shibulal 3:ac2e5aceb324 255 char* AorVpace;
shibulal 3:ac2e5aceb324 256 while(1){
shibulal 3:ac2e5aceb324 257
shibulal 3:ac2e5aceb324 258 while(1){
shibulal 3:ac2e5aceb324 259 evt = AVsensepmd.get(1);
shibulal 3:ac2e5aceb324 260 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 261 AorVsense = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 262 }
shibulal 3:ac2e5aceb324 263 if (*AorVsense=='V'){
shibulal 3:ac2e5aceb324 264 break;
shibulal 3:ac2e5aceb324 265 }
shibulal 3:ac2e5aceb324 266 evt = AVpacepmd.get(1);
shibulal 3:ac2e5aceb324 267 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 268 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 269 }
shibulal 3:ac2e5aceb324 270 if (*AorVpace=='V'){
shibulal 3:ac2e5aceb324 271 break;
shibulal 3:ac2e5aceb324 272 }
shibulal 3:ac2e5aceb324 273 }
shibulal 3:ac2e5aceb324 274 if (r<=pacemakerInterval*1000){
shibulal 3:ac2e5aceb324 275 updatePacemaker();
shibulal 3:ac2e5aceb324 276 }
shibulal 3:ac2e5aceb324 277 else {
shibulal 4:242a71a6efed 278 if (paceMakerRate < low[mode]){
shibulal 3:ac2e5aceb324 279 r.reset();
shibulal 3:ac2e5aceb324 280 paceMakerRate=0;
shibulal 3:ac2e5aceb324 281 }
shibulal 4:242a71a6efed 282 else if (paceMakerRate >= low[mode] && paceMakerRate <= high[mode]){
shibulal 3:ac2e5aceb324 283 //high alarm
shibulal 3:ac2e5aceb324 284 r.reset();
shibulal 3:ac2e5aceb324 285 paceMakerRate=0;
shibulal 3:ac2e5aceb324 286 }
shibulal 4:242a71a6efed 287 else if (paceMakerRate > high[mode]){
shibulal 3:ac2e5aceb324 288 //low alarm
shibulal 3:ac2e5aceb324 289 r.reset();
shibulal 3:ac2e5aceb324 290 paceMakerRate=0;
shibulal 3:ac2e5aceb324 291 }
shibulal 3:ac2e5aceb324 292 }
shibulal 3:ac2e5aceb324 293
shibulal 3:ac2e5aceb324 294
shibulal 3:ac2e5aceb324 295 }
shibulal 3:ac2e5aceb324 296 }
shibulal 3:ac2e5aceb324 297 void PaceMakerVentricalInterval(void const *args){
shibulal 3:ac2e5aceb324 298 char *AorVsig;
shibulal 3:ac2e5aceb324 299 char *AorVsense;
shibulal 3:ac2e5aceb324 300 char *AorVpace;
shibulal 3:ac2e5aceb324 301 osEvent evt;
shibulal 3:ac2e5aceb324 302 while(1){
shibulal 3:ac2e5aceb324 303 while(1){
shibulal 3:ac2e5aceb324 304 evt = AVsigpmv.get(1);
shibulal 3:ac2e5aceb324 305 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 306 AorVsig = (char*)evt.value.p;
shibulal 2:b178e27d9f22 307 }
shibulal 3:ac2e5aceb324 308 if (*AorVsig=='V'){
shibulal 3:ac2e5aceb324 309 AorVsig=0;
shibulal 3:ac2e5aceb324 310 char* element;
shibulal 3:ac2e5aceb324 311 *element='V';
shibulal 5:a74776e6504f 312 pc.printf("sending V pace");
shibulal 3:ac2e5aceb324 313 AVsensepms.put(element);
shibulal 3:ac2e5aceb324 314 AVsensepma.put(element);
shibulal 3:ac2e5aceb324 315 AVsensepmv.put(element);
shibulal 3:ac2e5aceb324 316 AVsensepmm.put(element);
shibulal 3:ac2e5aceb324 317 AVsensepmd.put(element);
shibulal 3:ac2e5aceb324 318 break;
shibulal 3:ac2e5aceb324 319 }
shibulal 3:ac2e5aceb324 320 evt = AVsensepmv.get(1);
shibulal 3:ac2e5aceb324 321 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 322 AorVsense = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 323 }
shibulal 3:ac2e5aceb324 324 if (*AorVsense=='A'){
shibulal 3:ac2e5aceb324 325 AorVsense=0;
shibulal 3:ac2e5aceb324 326 p.reset();
shibulal 3:ac2e5aceb324 327 while(!(p>=PVAB));
shibulal 3:ac2e5aceb324 328 while(1){
shibulal 3:ac2e5aceb324 329 osEvent evt = AVsigpmv.get(1);
shibulal 3:ac2e5aceb324 330 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 331 AorVsig = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 332 }
shibulal 3:ac2e5aceb324 333 if (*AorVsig=='V'){
shibulal 3:ac2e5aceb324 334 AorVsig=0;
shibulal 3:ac2e5aceb324 335 break;
shibulal 3:ac2e5aceb324 336 }
shibulal 3:ac2e5aceb324 337 evt = AVpacepmv.get(1);
shibulal 3:ac2e5aceb324 338 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 339 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 340 }
shibulal 3:ac2e5aceb324 341 if (*AorVpace=='V'){
shibulal 3:ac2e5aceb324 342 char* element;
shibulal 3:ac2e5aceb324 343 *element='V';
shibulal 3:ac2e5aceb324 344 AVsensepmv.put(element);
shibulal 3:ac2e5aceb324 345 break;
shibulal 3:ac2e5aceb324 346 }
shibulal 3:ac2e5aceb324 347 p.reset();
shibulal 3:ac2e5aceb324 348 while(!(p>=VRP));
shibulal 2:b178e27d9f22 349 }
shibulal 3:ac2e5aceb324 350 break;
shibulal 3:ac2e5aceb324 351 }
shibulal 3:ac2e5aceb324 352 evt = AVpacepmv.get(1);
shibulal 3:ac2e5aceb324 353 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 354 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 355 }
shibulal 3:ac2e5aceb324 356 if (*AorVpace=='A'){
shibulal 3:ac2e5aceb324 357 AorVpace=0;
shibulal 3:ac2e5aceb324 358 p.reset();
shibulal 3:ac2e5aceb324 359 while(!(p>=PVAB));
shibulal 3:ac2e5aceb324 360 while(1){
shibulal 3:ac2e5aceb324 361 osEvent evt = AVsigpmv.get(1);
shibulal 3:ac2e5aceb324 362 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 363 AorVsig = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 364 }
shibulal 3:ac2e5aceb324 365 if (*AorVsig=='V'){
shibulal 3:ac2e5aceb324 366 AorVsig=0;
shibulal 3:ac2e5aceb324 367 break;
shibulal 3:ac2e5aceb324 368 }
shibulal 3:ac2e5aceb324 369 evt = AVpacepmv.get(1);
shibulal 3:ac2e5aceb324 370 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 371 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 372 }
shibulal 3:ac2e5aceb324 373 if (*AorVpace=='V'){
shibulal 3:ac2e5aceb324 374 char* element;
shibulal 3:ac2e5aceb324 375 *element='V';
shibulal 5:a74776e6504f 376 pc.printf("sending V pace");
shibulal 3:ac2e5aceb324 377 AVsensepms.put(element);
shibulal 3:ac2e5aceb324 378 AVsensepma.put(element);
shibulal 3:ac2e5aceb324 379 AVsensepmv.put(element);
shibulal 3:ac2e5aceb324 380 AVsensepmm.put(element);
shibulal 3:ac2e5aceb324 381 AVsensepmd.put(element);
shibulal 3:ac2e5aceb324 382 break;
shibulal 3:ac2e5aceb324 383 }
shibulal 3:ac2e5aceb324 384 p.reset();
shibulal 3:ac2e5aceb324 385 while(!(p.read()>=VRP));
shibulal 3:ac2e5aceb324 386 }
shibulal 3:ac2e5aceb324 387 break;
shibulal 2:b178e27d9f22 388 }
shibulal 3:ac2e5aceb324 389 }
shibulal 3:ac2e5aceb324 390 }
shibulal 3:ac2e5aceb324 391
shibulal 3:ac2e5aceb324 392 }
shibulal 3:ac2e5aceb324 393 void PacemakerSend(void const *args){
shibulal 3:ac2e5aceb324 394 char *AorV;
shibulal 3:ac2e5aceb324 395 while(1){
shibulal 3:ac2e5aceb324 396 while(1){
shibulal 3:ac2e5aceb324 397 osEvent evt = AVsensepms.get(1);
shibulal 3:ac2e5aceb324 398 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 399 AorV = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 400 }
shibulal 3:ac2e5aceb324 401 if (*AorV=='A'){
shibulal 3:ac2e5aceb324 402 AorV=0;
shibulal 3:ac2e5aceb324 403 break;
shibulal 3:ac2e5aceb324 404 }
shibulal 3:ac2e5aceb324 405 else if (t.read()>=AVI){
shibulal 3:ac2e5aceb324 406 char* element;
shibulal 3:ac2e5aceb324 407 *element='V';
shibulal 3:ac2e5aceb324 408 AVpacepms.put(element);
shibulal 3:ac2e5aceb324 409 AVpacepmv.put(element);
shibulal 3:ac2e5aceb324 410 AVpacepma.put(element);
shibulal 3:ac2e5aceb324 411 Vpace=1;
shibulal 3:ac2e5aceb324 412 wait(.1);
shibulal 3:ac2e5aceb324 413 Vpace=0;
shibulal 3:ac2e5aceb324 414 break;
shibulal 3:ac2e5aceb324 415 }
shibulal 3:ac2e5aceb324 416 else if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 417 while(pacemakerMode!=0);
shibulal 3:ac2e5aceb324 418 break;
shibulal 3:ac2e5aceb324 419 }
shibulal 3:ac2e5aceb324 420 }
shibulal 3:ac2e5aceb324 421 while(1){
shibulal 3:ac2e5aceb324 422 osEvent evt = AVsensepms.get(1);
shibulal 3:ac2e5aceb324 423 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 424 AorV = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 425 }
shibulal 3:ac2e5aceb324 426 if (*AorV=='A'){
shibulal 3:ac2e5aceb324 427 AorV=0;
shibulal 3:ac2e5aceb324 428 if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 429 while(pacemakerMode!=0);
shibulal 2:b178e27d9f22 430 break;
shibulal 2:b178e27d9f22 431 }
shibulal 3:ac2e5aceb324 432 else{
shibulal 3:ac2e5aceb324 433 t.reset();
shibulal 1:e3a5388e46ab 434 break;
shibulal 1:e3a5388e46ab 435 }
shibulal 2:b178e27d9f22 436 }
shibulal 3:ac2e5aceb324 437 else if (*AorV=='V'){
shibulal 3:ac2e5aceb324 438 AorV=0;
shibulal 3:ac2e5aceb324 439 t.reset();
shibulal 3:ac2e5aceb324 440 while(1){
shibulal 3:ac2e5aceb324 441 osEvent evt = AVsensepms.get(1);
shibulal 3:ac2e5aceb324 442 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 443 AorV = (char*)evt.value.p;
shibulal 2:b178e27d9f22 444 }
shibulal 3:ac2e5aceb324 445 if (*AorV=='A'){
shibulal 3:ac2e5aceb324 446 AorV=0;
shibulal 3:ac2e5aceb324 447 if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 448 while(pacemakerMode!=0);
shibulal 3:ac2e5aceb324 449 break;
shibulal 3:ac2e5aceb324 450 }
shibulal 3:ac2e5aceb324 451 else{
shibulal 3:ac2e5aceb324 452 t.reset();
shibulal 3:ac2e5aceb324 453 break;
shibulal 3:ac2e5aceb324 454 }
shibulal 3:ac2e5aceb324 455 }
shibulal 3:ac2e5aceb324 456 else if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 457 while(pacemakerMode!=0);
shibulal 3:ac2e5aceb324 458 break;
shibulal 3:ac2e5aceb324 459 }
shibulal 3:ac2e5aceb324 460 else if (t>= LRI-AVI){
shibulal 3:ac2e5aceb324 461 char* element;
shibulal 3:ac2e5aceb324 462 *element='A';
shibulal 5:a74776e6504f 463 pc.printf("sending A pace");
shibulal 3:ac2e5aceb324 464 AVpacepms.put(element);
shibulal 3:ac2e5aceb324 465 AVpacepma.put(element);
shibulal 3:ac2e5aceb324 466 AVpacepmv.put(element);
shibulal 3:ac2e5aceb324 467 AVpacepmm.put(element);
shibulal 3:ac2e5aceb324 468 AVpacepmd.put(element);
shibulal 3:ac2e5aceb324 469 Apace=1;
shibulal 3:ac2e5aceb324 470 wait(.1);
shibulal 3:ac2e5aceb324 471 Apace=0;
shibulal 3:ac2e5aceb324 472 if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 473 while(pacemakerMode!=0);
shibulal 3:ac2e5aceb324 474 break;
shibulal 3:ac2e5aceb324 475 }
shibulal 3:ac2e5aceb324 476 else{
shibulal 3:ac2e5aceb324 477 t.reset();
shibulal 3:ac2e5aceb324 478 break;
shibulal 3:ac2e5aceb324 479 }
shibulal 3:ac2e5aceb324 480 }
shibulal 2:b178e27d9f22 481 }
shibulal 2:b178e27d9f22 482 }
shibulal 3:ac2e5aceb324 483 else if (t.read()>=LRI){
shibulal 3:ac2e5aceb324 484 char* element;
shibulal 5:a74776e6504f 485 pc.printf("sending A pace");
shibulal 3:ac2e5aceb324 486 *element='A';
shibulal 3:ac2e5aceb324 487 AVpacepms.put(element);
shibulal 3:ac2e5aceb324 488 AVpacepma.put(element);
shibulal 3:ac2e5aceb324 489 AVpacepmv.put(element);
shibulal 3:ac2e5aceb324 490 AVpacepmm.put(element);
shibulal 3:ac2e5aceb324 491 AVpacepmd.put(element);
shibulal 3:ac2e5aceb324 492 Apace=1;
shibulal 3:ac2e5aceb324 493 wait(.1);
shibulal 3:ac2e5aceb324 494 Apace=0;
shibulal 3:ac2e5aceb324 495 if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 496 while(pacemakerMode!=0);
shibulal 3:ac2e5aceb324 497 break;
shibulal 3:ac2e5aceb324 498 }
shibulal 3:ac2e5aceb324 499 else{
shibulal 3:ac2e5aceb324 500 t.reset();
shibulal 3:ac2e5aceb324 501 break;
shibulal 3:ac2e5aceb324 502 }
shibulal 2:b178e27d9f22 503 }
shibulal 3:ac2e5aceb324 504 else if (pacemakerMode==1){
shibulal 3:ac2e5aceb324 505 while(pacemakerMode!=0);
shibulal 2:b178e27d9f22 506 break;
shibulal 2:b178e27d9f22 507 }
shibulal 1:e3a5388e46ab 508
shibulal 2:b178e27d9f22 509
shibulal 3:ac2e5aceb324 510 }
shibulal 2:b178e27d9f22 511 }
shibulal 3:ac2e5aceb324 512 }
shibulal 3:ac2e5aceb324 513 void Asig();
shibulal 3:ac2e5aceb324 514 void Vsig();
shibulal 1:e3a5388e46ab 515 int main(){
shibulal 3:ac2e5aceb324 516 osEvent evt;
shibulal 3:ac2e5aceb324 517 A.mode(PullDown);
shibulal 3:ac2e5aceb324 518 char* AorVpace;
shibulal 3:ac2e5aceb324 519 char* AorVsig;
shibulal 2:b178e27d9f22 520 A.rise(Asig);
shibulal 2:b178e27d9f22 521 V.mode(PullDown);
shibulal 2:b178e27d9f22 522 V.rise(Vsig);
shibulal 1:e3a5388e46ab 523
shibulal 3:ac2e5aceb324 524 while(1){
shibulal 3:ac2e5aceb324 525 evt = AVpacepmm.get(1);
shibulal 3:ac2e5aceb324 526 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 527 AorVpace = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 528 }
shibulal 3:ac2e5aceb324 529 if (*AorVpace=='A'){
shibulal 3:ac2e5aceb324 530 AorVpace=0;
shibulal 3:ac2e5aceb324 531 ApaceLED=1;
shibulal 3:ac2e5aceb324 532 wait(.1);
shibulal 3:ac2e5aceb324 533 ApaceLED=(0);
shibulal 3:ac2e5aceb324 534 }
shibulal 3:ac2e5aceb324 535 else if (*AorVpace=='V'){
shibulal 3:ac2e5aceb324 536 AorVpace=0;
shibulal 3:ac2e5aceb324 537 VpaceLED=1;
shibulal 3:ac2e5aceb324 538 wait(.1);
shibulal 3:ac2e5aceb324 539 VpaceLED=0;
shibulal 3:ac2e5aceb324 540 }
shibulal 3:ac2e5aceb324 541 evt = AVsigpmm.get(1);
shibulal 3:ac2e5aceb324 542 if (evt.status == osEventMessage) {
shibulal 3:ac2e5aceb324 543 AorVsig = (char*)evt.value.p;
shibulal 3:ac2e5aceb324 544 }
shibulal 3:ac2e5aceb324 545 if (*AorVsig=='A'){
shibulal 3:ac2e5aceb324 546 AorVsig=0;
shibulal 3:ac2e5aceb324 547 AsigLED=1;
shibulal 3:ac2e5aceb324 548 wait(.1);
shibulal 3:ac2e5aceb324 549 ApaceLED=(0);
shibulal 3:ac2e5aceb324 550 }
shibulal 3:ac2e5aceb324 551 else if (*AorVsig=='V'){
shibulal 3:ac2e5aceb324 552 AorVsig=0;
shibulal 3:ac2e5aceb324 553 VsigLED=1;
shibulal 3:ac2e5aceb324 554 wait(.1);
shibulal 3:ac2e5aceb324 555 VpaceLED=0;
shibulal 3:ac2e5aceb324 556 }
shibulal 3:ac2e5aceb324 557 lcd.cls();
shibulal 4:242a71a6efed 558 lcd.printf("%d", paceMakerRate);
shibulal 3:ac2e5aceb324 559 Thread::wait(15);
shibulal 3:ac2e5aceb324 560 };
shibulal 0:2d6b43fc4625 561 }
shibulal 2:b178e27d9f22 562
shibulal 2:b178e27d9f22 563
shibulal 2:b178e27d9f22 564 void Asig() {
shibulal 3:ac2e5aceb324 565 char* element;
shibulal 5:a74776e6504f 566 pc.printf("received A signal");
shibulal 3:ac2e5aceb324 567 *element='A';
shibulal 3:ac2e5aceb324 568 AVsigpms.put(element);
shibulal 3:ac2e5aceb324 569 AVsigpma.put(element);
shibulal 3:ac2e5aceb324 570 AVsigpmv.put(element);
shibulal 3:ac2e5aceb324 571 AVsigpmm.put(element);
shibulal 3:ac2e5aceb324 572 AVsigpmd.put(element);
shibulal 2:b178e27d9f22 573
shibulal 2:b178e27d9f22 574 }
shibulal 2:b178e27d9f22 575 void Vsig() {
shibulal 3:ac2e5aceb324 576 char* element;
shibulal 5:a74776e6504f 577 pc.printf("received V signal");
shibulal 3:ac2e5aceb324 578 *element='V';
shibulal 3:ac2e5aceb324 579 AVsigpms.put(element);
shibulal 3:ac2e5aceb324 580 AVsigpma.put(element);
shibulal 3:ac2e5aceb324 581 AVsigpmv.put(element);
shibulal 3:ac2e5aceb324 582 AVsigpmm.put(element);
shibulal 3:ac2e5aceb324 583 AVsigpmd.put(element);
shibulal 2:b178e27d9f22 584
shibulal 2:b178e27d9f22 585 }