HAHAHAHHA

Dependencies:   TextLCD mbed-rtos mbed

Fork of 541-pacemaker-heart by Terry Fang

Committer:
ems316
Date:
Fri Dec 09 11:07:18 2016 +0000
Revision:
6:53fa082961d2
Parent:
5:ba77f2da6fc5
here is 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
terryfan 0:da581483b90d 1 #include "mbed.h"
terryfan 0:da581483b90d 2 #include "rtos.h"
terryfan 0:da581483b90d 3 #include "TextLCD.h"
terryfan 0:da581483b90d 4
terryfan 0:da581483b90d 5 LocalFileSystem local("local");
terryfan 0:da581483b90d 6
terryfan 0:da581483b90d 7 InterruptIn vpace(p5);
terryfan 0:da581483b90d 8 InterruptIn apace(p6);
terryfan 0:da581483b90d 9 DigitalOut vsignal(p7);
terryfan 0:da581483b90d 10 DigitalOut asignal(p8);
terryfan 0:da581483b90d 11
terryfan 0:da581483b90d 12 DigitalOut asignal_led(LED1);
terryfan 0:da581483b90d 13 DigitalOut vsignal_led(LED2);
terryfan 0:da581483b90d 14 DigitalOut apace_led(LED3);
terryfan 0:da581483b90d 15 DigitalOut vpace_led(LED4);
terryfan 0:da581483b90d 16
terryfan 0:da581483b90d 17 Thread *heartmodeThread;
terryfan 0:da581483b90d 18 osThreadId heartmodeTid;
terryfan 3:1498846197ee 19 osThreadId beats;
terryfan 3:1498846197ee 20 osThreadId displayTid;
terryfan 3:1498846197ee 21 osThreadId HeartSenseTid;
terryfan 3:1498846197ee 22 Timer vClock;
terryfan 0:da581483b90d 23
terryfan 1:57cd3ae5f44a 24 Queue<char,256> mode_q;
terryfan 1:57cd3ae5f44a 25 Queue<char,256> signal_q;
terryfan 3:1498846197ee 26 Queue<char,256> obsint_q;
terryfan 1:57cd3ae5f44a 27
terryfan 1:57cd3ae5f44a 28 FILE * testresults;
terryfan 1:57cd3ae5f44a 29
terryfan 0:da581483b90d 30 TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
terryfan 0:da581483b90d 31 RawSerial pc(USBTX, USBRX);
terryfan 0:da581483b90d 32 char key = 'n';
terryfan 0:da581483b90d 33 int manual_mode;
terryfan 2:18b496a20413 34
terryfan 1:57cd3ae5f44a 35 volatile char c;
terryfan 1:57cd3ae5f44a 36 volatile int mm = 0;
terryfan 0:da581483b90d 37
terryfan 3:1498846197ee 38 volatile int om = 0;
terryfan 0:da581483b90d 39 int lri = 1000;
terryfan 0:da581483b90d 40 int uri = 700;
terryfan 0:da581483b90d 41 int avi = 150;
terryfan 0:da581483b90d 42 int pvarp = 300;
terryfan 4:cf40000fdac1 43 int vrp = 200;
ems316 6:53fa082961d2 44 int arp = 25;
terryfan 0:da581483b90d 45
terryfan 3:1498846197ee 46
terryfan 0:da581483b90d 47 int twait = 10;
terryfan 0:da581483b90d 48 int thrsh = 1000;
terryfan 0:da581483b90d 49 int heartmode = 0;
terryfan 3:1498846197ee 50 int v_flag = 0;
terryfan 3:1498846197ee 51 int observation_interval = 10000; // In miliseconds
terryfan 4:cf40000fdac1 52 int tmm = 0; //testmode flag
terryfan 1:57cd3ae5f44a 53
terryfan 2:18b496a20413 54 int heart_beats = 0; // Heart-Beats (sensed or paced) since the last observation interval
terryfan 2:18b496a20413 55 Mutex hr_mutex; //hr_mutex.lock()/unlock()
terryfan 1:57cd3ae5f44a 56
terryfan 3:1498846197ee 57 void HeartSense(void const *args)
terryfan 3:1498846197ee 58 {
terryfan 3:1498846197ee 59 while(1) {
terryfan 3:1498846197ee 60 osEvent ext_signal = osSignalWait(0, osWaitForever);
terryfan 3:1498846197ee 61 int evt2 = ext_signal.value.signals;
terryfan 3:1498846197ee 62
terryfan 3:1498846197ee 63 switch(evt2) {
terryfan 3:1498846197ee 64 case(0x1):
terryfan 3:1498846197ee 65 vpace_led = 1;
terryfan 3:1498846197ee 66 v_flag = 1;
terryfan 3:1498846197ee 67 Thread::wait(twait);
terryfan 3:1498846197ee 68 vpace_led = 0;
terryfan 3:1498846197ee 69 v_flag = 0;
terryfan 3:1498846197ee 70 break;
terryfan 3:1498846197ee 71
terryfan 3:1498846197ee 72 case(0x10):
terryfan 3:1498846197ee 73 apace_led = 1;
terryfan 3:1498846197ee 74 Thread::wait(twait);
terryfan 3:1498846197ee 75 apace_led = 0;
terryfan 3:1498846197ee 76 break;
terryfan 3:1498846197ee 77 }
terryfan 3:1498846197ee 78 }
terryfan 3:1498846197ee 79 }
terryfan 3:1498846197ee 80
terryfan 0:da581483b90d 81 void vpace_irq()
terryfan 0:da581483b90d 82 {
ems316 6:53fa082961d2 83 //lcd.printf("In vpace IRQ/n");
terryfan 0:da581483b90d 84 //heartmodeThread->signal_set(0x1);
terryfan 4:cf40000fdac1 85 if(tmm)
terryfan 4:cf40000fdac1 86 {
terryfan 4:cf40000fdac1 87 osSignalSet(heartmodeTid, 0x1);
terryfan 4:cf40000fdac1 88 }
terryfan 3:1498846197ee 89 osSignalSet(HeartSenseTid, 0x1);
terryfan 0:da581483b90d 90 }
terryfan 0:da581483b90d 91
terryfan 3:1498846197ee 92
terryfan 0:da581483b90d 93 void apace_irq()
terryfan 0:da581483b90d 94 {
terryfan 0:da581483b90d 95 //heartmodeThread->signal_set(0x10);
ems316 6:53fa082961d2 96 //lcd.printf("In apace IRQ/n");
terryfan 4:cf40000fdac1 97 if(tmm)
terryfan 4:cf40000fdac1 98 {
terryfan 4:cf40000fdac1 99 osSignalSet(heartmodeTid, 0x10);
terryfan 4:cf40000fdac1 100 }
terryfan 3:1498846197ee 101 osSignalSet(HeartSenseTid, 0x10);
terryfan 0:da581483b90d 102 }
terryfan 0:da581483b90d 103
terryfan 3:1498846197ee 104
terryfan 1:57cd3ae5f44a 105 void Rx_interrupt()
terryfan 1:57cd3ae5f44a 106 {
terryfan 1:57cd3ae5f44a 107 while(pc.readable()) {
terryfan 1:57cd3ae5f44a 108 c = pc.getc();
terryfan 2:18b496a20413 109 if(c == 'm' && om != 1) {
terryfan 1:57cd3ae5f44a 110 mode_q.put((char*)c);
terryfan 1:57cd3ae5f44a 111 mm = 1;
terryfan 2:18b496a20413 112 } else if((c == 'r' || c == 't') && om != 1) {
terryfan 1:57cd3ae5f44a 113 mode_q.put((char*)c);
terryfan 1:57cd3ae5f44a 114 mm = 0;
terryfan 1:57cd3ae5f44a 115 } else if((c == 'a' || c == 'v') && mm) {
terryfan 1:57cd3ae5f44a 116 signal_q.put((char*)c);
terryfan 2:18b496a20413 117 } else if(c == 'o' && om != 1) {
terryfan 2:18b496a20413 118 mode_q.put((char*)c);
terryfan 2:18b496a20413 119 om = 1;
terryfan 2:18b496a20413 120 } else if (c == '\r' && om) {
terryfan 2:18b496a20413 121 obsint_q.put((char*)c);
terryfan 2:18b496a20413 122 om = 0;
terryfan 2:18b496a20413 123 } else if ((int)c > 47 && (int)c < 58 && om) {
terryfan 2:18b496a20413 124 obsint_q.put((char*)c);
terryfan 1:57cd3ae5f44a 125 }
terryfan 1:57cd3ae5f44a 126 }
terryfan 1:57cd3ae5f44a 127 }
terryfan 1:57cd3ae5f44a 128
terryfan 2:18b496a20413 129 void displayThread(void const *args)
terryfan 2:18b496a20413 130 {
terryfan 3:1498846197ee 131
terryfan 2:18b496a20413 132 while (1) {
terryfan 2:18b496a20413 133 Thread::wait(observation_interval);
terryfan 2:18b496a20413 134 lcd.cls();
terryfan 3:1498846197ee 135
terryfan 2:18b496a20413 136 hr_mutex.lock();
terryfan 2:18b496a20413 137 int hr = (heart_beats*60) / (observation_interval / 1000);
terryfan 2:18b496a20413 138 heart_beats = 0;
terryfan 2:18b496a20413 139 hr_mutex.unlock();
terryfan 3:1498846197ee 140
terryfan 2:18b496a20413 141 lcd.printf("%s%d%s","HR: ", hr, " bpm");
terryfan 2:18b496a20413 142 }
terryfan 2:18b496a20413 143 }
terryfan 3:1498846197ee 144
terryfan 3:1498846197ee 145 void h_beats(void const *args)
terryfan 3:1498846197ee 146 {
terryfan 3:1498846197ee 147 vClock.start();
terryfan 3:1498846197ee 148 while(1) {
terryfan 3:1498846197ee 149 if(vsignal == 1 && vClock.read_ms() >= vrp) {
terryfan 3:1498846197ee 150 v_flag = 1;
terryfan 3:1498846197ee 151 }
terryfan 3:1498846197ee 152
terryfan 3:1498846197ee 153 if(v_flag == 1) { //osSignalWait(0x1, osWaitForever); when vpace happens, v_flag is set and beats++
terryfan 3:1498846197ee 154 hr_mutex.lock();
terryfan 3:1498846197ee 155 heart_beats++;
terryfan 3:1498846197ee 156 hr_mutex.unlock();
terryfan 3:1498846197ee 157 vClock.reset();
terryfan 3:1498846197ee 158 v_flag = 0;
terryfan 3:1498846197ee 159 }
terryfan 3:1498846197ee 160 }
terryfan 3:1498846197ee 161 }
terryfan 3:1498846197ee 162
terryfan 0:da581483b90d 163 void test_vrp_vv(FILE * results, Timer * ti)
terryfan 0:da581483b90d 164 {
terryfan 0:da581483b90d 165 int vrpwait = vrp/2;
terryfan 0:da581483b90d 166 int adifu,vdifu,difl = 0;
terryfan 0:da581483b90d 167 fprintf(results, " Test VRP VV\n\n Time Action\n");
terryfan 0:da581483b90d 168 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 169 apace_led = 1;
terryfan 0:da581483b90d 170 Thread::wait(twait);
terryfan 0:da581483b90d 171 apace_led = 0;
terryfan 0:da581483b90d 172 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 173 ti->reset();
terryfan 3:1498846197ee 174 v_flag = 1;
terryfan 0:da581483b90d 175 vpace_led = 1;
terryfan 0:da581483b90d 176 Thread::wait(twait);
terryfan 3:1498846197ee 177 v_flag = 0;
terryfan 0:da581483b90d 178 vpace_led = 0;
terryfan 0:da581483b90d 179
terryfan 3:1498846197ee 180
terryfan 0:da581483b90d 181 Thread::wait(vrpwait);
terryfan 0:da581483b90d 182 vsignal = 1;
terryfan 0:da581483b90d 183 vsignal_led = 1;
terryfan 0:da581483b90d 184 fprintf(results, "%6d%8s\n", ti->read_ms(), "VS");
terryfan 0:da581483b90d 185 Thread::wait(twait);
terryfan 0:da581483b90d 186 vsignal_led = 0;
terryfan 0:da581483b90d 187 vsignal = 0;
terryfan 0:da581483b90d 188
terryfan 3:1498846197ee 189
terryfan 0:da581483b90d 190 Thread::wait(vrpwait);
terryfan 0:da581483b90d 191 vsignal = 1;
terryfan 0:da581483b90d 192 difl = ti->read_us();
terryfan 0:da581483b90d 193 vsignal_led = 1;
terryfan 0:da581483b90d 194 fprintf(results, "%6d%8s\n", ti->read_ms(), "VS");
terryfan 0:da581483b90d 195 Thread::wait(twait);
terryfan 0:da581483b90d 196 vsignal = 0;
terryfan 0:da581483b90d 197 vsignal_led = 0;
terryfan 0:da581483b90d 198
terryfan 3:1498846197ee 199
terryfan 0:da581483b90d 200 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 201 adifu = ti->read_us();
terryfan 0:da581483b90d 202 apace_led = 1;
terryfan 0:da581483b90d 203 fprintf(results, "%6d%8s\n", ti->read_ms(), "AP");
terryfan 0:da581483b90d 204 Thread::wait(twait);
terryfan 0:da581483b90d 205 apace_led = 0;
terryfan 0:da581483b90d 206
terryfan 3:1498846197ee 207
terryfan 0:da581483b90d 208 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 209 vdifu = ti->read_us();
terryfan 0:da581483b90d 210 vpace_led = 1;
terryfan 3:1498846197ee 211 v_flag = 1;
terryfan 0:da581483b90d 212 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 213 Thread::wait(twait);
terryfan 0:da581483b90d 214 vpace_led = 0;
terryfan 3:1498846197ee 215 v_flag = 0;
terryfan 0:da581483b90d 216
terryfan 3:1498846197ee 217
terryfan 0:da581483b90d 218 int adif = adifu-difl;
terryfan 0:da581483b90d 219 int vdif = vdifu-difl;
terryfan 0:da581483b90d 220 const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) &&
terryfan 0:da581483b90d 221 (adif < ((lri-avi)*1000 + thrsh)) &&
terryfan 0:da581483b90d 222 (vdif >= (lri*1000 - thrsh)) &&
terryfan 0:da581483b90d 223 (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 224
terryfan 3:1498846197ee 225
terryfan 0:da581483b90d 226 fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif);
terryfan 0:da581483b90d 227
terryfan 3:1498846197ee 228
terryfan 0:da581483b90d 229 }
terryfan 0:da581483b90d 230 void test_pvarp_aa(FILE * results, Timer * ti)
terryfan 0:da581483b90d 231 {
terryfan 0:da581483b90d 232 int pvarpwait = pvarp/2;
terryfan 0:da581483b90d 233 int vdifu = 0;
terryfan 0:da581483b90d 234 fprintf(results, " Test PVARP AA\n\n Time Action\n");
terryfan 0:da581483b90d 235 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 236 apace_led = 1;
terryfan 0:da581483b90d 237 Thread::wait(twait);
terryfan 0:da581483b90d 238 apace_led = 0;
terryfan 0:da581483b90d 239 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 240 ti->reset();
terryfan 0:da581483b90d 241 vpace_led = 1;
terryfan 3:1498846197ee 242 v_flag = 1;
terryfan 0:da581483b90d 243 Thread::wait(twait);
terryfan 0:da581483b90d 244 vpace_led = 0;
terryfan 3:1498846197ee 245 v_flag = 0;
terryfan 0:da581483b90d 246
terryfan 3:1498846197ee 247
terryfan 0:da581483b90d 248 Thread::wait(pvarpwait);
terryfan 0:da581483b90d 249 asignal = 1;
terryfan 0:da581483b90d 250 asignal_led = 1;
terryfan 0:da581483b90d 251 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 252 Thread::wait(twait);
terryfan 0:da581483b90d 253 asignal_led = 0;
terryfan 0:da581483b90d 254 asignal = 0;
terryfan 0:da581483b90d 255
terryfan 3:1498846197ee 256
terryfan 0:da581483b90d 257 Thread::wait(pvarpwait);
terryfan 0:da581483b90d 258 asignal = 1;
terryfan 0:da581483b90d 259 //difl = ti->read_us();
terryfan 0:da581483b90d 260 asignal_led = 1;
terryfan 0:da581483b90d 261 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 262 Thread::wait(twait);
terryfan 0:da581483b90d 263 asignal_led = 0;
terryfan 0:da581483b90d 264 asignal = 0;
terryfan 0:da581483b90d 265
terryfan 3:1498846197ee 266
terryfan 0:da581483b90d 267 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 268 vdifu = ti->read_us();
terryfan 0:da581483b90d 269 vpace_led = 1;
terryfan 3:1498846197ee 270 v_flag = 1;
terryfan 0:da581483b90d 271 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 272 Thread::wait(twait);
terryfan 0:da581483b90d 273 vpace_led = 0;
terryfan 3:1498846197ee 274 v_flag = 0;
terryfan 0:da581483b90d 275
terryfan 3:1498846197ee 276
terryfan 0:da581483b90d 277 int vdif = vdifu;
terryfan 0:da581483b90d 278 const char * res = ((vdif >= (uri*1000 - thrsh)) &&
terryfan 0:da581483b90d 279 (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 280
terryfan 3:1498846197ee 281
terryfan 0:da581483b90d 282 fprintf(results, "\nResult: %s %d\n\n", res, vdif);
terryfan 0:da581483b90d 283 }
terryfan 0:da581483b90d 284
terryfan 3:1498846197ee 285
terryfan 0:da581483b90d 286 void test_pvarp_arp_aaa(FILE * results, Timer * ti)
terryfan 0:da581483b90d 287 {
terryfan 0:da581483b90d 288 int arpwait = arp/2;
terryfan 0:da581483b90d 289 int vdifu = 0;
terryfan 0:da581483b90d 290 fprintf(results, "Test PVARP ARP AAA\n\n Time Action\n");
terryfan 0:da581483b90d 291 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 292 apace_led = 1;
terryfan 0:da581483b90d 293 Thread::wait(twait);
terryfan 0:da581483b90d 294 apace_led = 0;
terryfan 0:da581483b90d 295 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 296 ti->reset();
terryfan 0:da581483b90d 297 vpace_led = 1;
terryfan 3:1498846197ee 298 v_flag = 1;
terryfan 0:da581483b90d 299 Thread::wait(twait);
terryfan 0:da581483b90d 300 vpace_led = 0;
terryfan 3:1498846197ee 301 v_flag = 0;
terryfan 0:da581483b90d 302
terryfan 3:1498846197ee 303
terryfan 0:da581483b90d 304 Thread::wait(pvarp);
terryfan 0:da581483b90d 305 asignal = 1;
terryfan 0:da581483b90d 306 asignal_led = 1;
terryfan 0:da581483b90d 307 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 308 Thread::wait(twait);
terryfan 0:da581483b90d 309 asignal_led = 0;
terryfan 0:da581483b90d 310 asignal = 0;
terryfan 0:da581483b90d 311
terryfan 3:1498846197ee 312
terryfan 0:da581483b90d 313 Thread::wait(arpwait);
terryfan 0:da581483b90d 314 asignal = 1;
terryfan 0:da581483b90d 315 asignal_led = 1;
terryfan 0:da581483b90d 316 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 317 Thread::wait(twait);
terryfan 0:da581483b90d 318 asignal_led = 0;
terryfan 0:da581483b90d 319 asignal = 0;
terryfan 0:da581483b90d 320
terryfan 3:1498846197ee 321
terryfan 0:da581483b90d 322 Thread::wait(arpwait);
terryfan 0:da581483b90d 323 asignal = 1;
terryfan 0:da581483b90d 324 asignal_led = 1;
terryfan 0:da581483b90d 325 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 326 Thread::wait(twait);
terryfan 0:da581483b90d 327 asignal_led = 0;
terryfan 0:da581483b90d 328 asignal = 0;
terryfan 0:da581483b90d 329
terryfan 3:1498846197ee 330
terryfan 0:da581483b90d 331 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 332 vdifu = ti->read_us();
terryfan 0:da581483b90d 333 vpace_led = 1;
terryfan 3:1498846197ee 334 v_flag = 1;
terryfan 0:da581483b90d 335 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 336 Thread::wait(twait);
terryfan 0:da581483b90d 337 vpace_led = 0;
terryfan 3:1498846197ee 338 v_flag = 0;
terryfan 0:da581483b90d 339
terryfan 3:1498846197ee 340
terryfan 0:da581483b90d 341 int vdif = vdifu;
terryfan 0:da581483b90d 342 const char * res = ((vdif >= (uri*1000 - thrsh)) &&
terryfan 0:da581483b90d 343 (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 344
terryfan 3:1498846197ee 345
terryfan 0:da581483b90d 346 fprintf(results, "\nResult: %s %d\n\n", res, vdif);
terryfan 0:da581483b90d 347 }
terryfan 0:da581483b90d 348
terryfan 3:1498846197ee 349
terryfan 0:da581483b90d 350 void test_pvarp_arp_aav(FILE * results, Timer * ti)
terryfan 0:da581483b90d 351 {
terryfan 0:da581483b90d 352 int adifu,vdifu,difl = 0;
terryfan 0:da581483b90d 353 fprintf(results, "Test PVARP ARP AAV\n\n Time Action\n");
terryfan 0:da581483b90d 354 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 355 apace_led = 1;
terryfan 0:da581483b90d 356 Thread::wait(twait);
terryfan 0:da581483b90d 357 apace_led = 0;
terryfan 0:da581483b90d 358 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 359 ti->reset();
terryfan 0:da581483b90d 360 vpace_led = 1;
terryfan 3:1498846197ee 361 v_flag = 1;
terryfan 0:da581483b90d 362 Thread::wait(twait);
terryfan 0:da581483b90d 363 vpace_led = 0;
terryfan 3:1498846197ee 364 v_flag = 0;
terryfan 0:da581483b90d 365
terryfan 3:1498846197ee 366
terryfan 0:da581483b90d 367 Thread::wait(pvarp);
terryfan 0:da581483b90d 368 asignal = 1;
terryfan 0:da581483b90d 369 asignal_led = 1;
terryfan 0:da581483b90d 370 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 371 Thread::wait(twait);
terryfan 0:da581483b90d 372 asignal_led = 0;
terryfan 0:da581483b90d 373 asignal = 0;
terryfan 0:da581483b90d 374
terryfan 3:1498846197ee 375
terryfan 0:da581483b90d 376 Thread::wait(arp);
terryfan 0:da581483b90d 377 asignal = 1;
terryfan 0:da581483b90d 378 asignal_led = 1;
terryfan 0:da581483b90d 379 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 380 Thread::wait(twait);
terryfan 0:da581483b90d 381 asignal_led = 0;
terryfan 0:da581483b90d 382 asignal = 0;
terryfan 0:da581483b90d 383
terryfan 3:1498846197ee 384
terryfan 0:da581483b90d 385 Thread::wait(20);
terryfan 0:da581483b90d 386 vsignal = 1;
terryfan 0:da581483b90d 387 difl = ti->read_us();
terryfan 0:da581483b90d 388 vsignal_led = 1;
terryfan 0:da581483b90d 389 fprintf(results, "%6d%8s\n", ti->read_ms(), "VS");
terryfan 0:da581483b90d 390 Thread::wait(twait);
terryfan 0:da581483b90d 391 vsignal = 0;
terryfan 0:da581483b90d 392 vsignal_led = 0;
terryfan 0:da581483b90d 393
terryfan 3:1498846197ee 394
terryfan 0:da581483b90d 395 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 396 adifu = ti->read_us();
terryfan 0:da581483b90d 397 apace_led = 1;
terryfan 0:da581483b90d 398 fprintf(results, "%6d%8s\n", ti->read_ms(), "AP");
terryfan 0:da581483b90d 399 Thread::wait(twait);
terryfan 0:da581483b90d 400 apace_led = 0;
terryfan 0:da581483b90d 401
terryfan 3:1498846197ee 402
terryfan 0:da581483b90d 403 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 404 vdifu = ti->read_us();
terryfan 0:da581483b90d 405 vpace_led = 1;
terryfan 3:1498846197ee 406 v_flag = 1;
terryfan 0:da581483b90d 407 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 408 Thread::wait(twait);
terryfan 0:da581483b90d 409 vpace_led = 0;
terryfan 3:1498846197ee 410 v_flag = 0;
terryfan 0:da581483b90d 411
terryfan 3:1498846197ee 412
terryfan 0:da581483b90d 413 int adif = adifu-difl;
terryfan 0:da581483b90d 414 int vdif = vdifu-difl;
terryfan 0:da581483b90d 415 const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) &&
terryfan 0:da581483b90d 416 (adif < ((lri-avi)*1000 + thrsh)) &&
terryfan 0:da581483b90d 417 (vdif >= (lri*1000 - thrsh)) &&
terryfan 0:da581483b90d 418 (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 419
terryfan 3:1498846197ee 420
terryfan 0:da581483b90d 421 fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif);
terryfan 0:da581483b90d 422
terryfan 3:1498846197ee 423
terryfan 0:da581483b90d 424 }
terryfan 0:da581483b90d 425
terryfan 3:1498846197ee 426
terryfan 0:da581483b90d 427 void test_vpace_after_a(FILE * results, Timer * ti)
terryfan 0:da581483b90d 428 {
terryfan 0:da581483b90d 429 int vdifu = 0;
terryfan 0:da581483b90d 430 fprintf(results, "Test VPACE After A\n\n Time Action\n");
terryfan 0:da581483b90d 431 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 432 apace_led = 1;
terryfan 0:da581483b90d 433 Thread::wait(twait);
terryfan 0:da581483b90d 434 apace_led = 0;
terryfan 0:da581483b90d 435 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 436 ti->reset();
terryfan 0:da581483b90d 437 vpace_led = 1;
terryfan 3:1498846197ee 438 v_flag = 1;
terryfan 0:da581483b90d 439 Thread::wait(twait);
terryfan 0:da581483b90d 440 vpace_led = 0;
terryfan 3:1498846197ee 441 v_flag = 0;
terryfan 0:da581483b90d 442
terryfan 3:1498846197ee 443
terryfan 0:da581483b90d 444 Thread::wait(pvarp);
terryfan 0:da581483b90d 445 asignal = 1;
terryfan 0:da581483b90d 446 asignal_led = 1;
terryfan 0:da581483b90d 447 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 448 Thread::wait(twait);
terryfan 0:da581483b90d 449 asignal_led = 0;
terryfan 0:da581483b90d 450 asignal = 0;
terryfan 0:da581483b90d 451
terryfan 3:1498846197ee 452
terryfan 0:da581483b90d 453 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 454 vdifu = ti->read_us();
terryfan 0:da581483b90d 455 vpace_led = 1;
terryfan 3:1498846197ee 456 v_flag = 1;
terryfan 0:da581483b90d 457 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 458 Thread::wait(twait);
terryfan 0:da581483b90d 459 vpace_led = 0;
terryfan 3:1498846197ee 460 v_flag = 0;
terryfan 0:da581483b90d 461
terryfan 3:1498846197ee 462
terryfan 0:da581483b90d 463 int vdif = vdifu;
terryfan 0:da581483b90d 464 const char * res = ((vdif >= (uri*1000 - thrsh)) &&
terryfan 0:da581483b90d 465 (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 466
terryfan 3:1498846197ee 467
terryfan 0:da581483b90d 468 fprintf(results, "\nResult: %s %d\n\n", res, vdif);
terryfan 0:da581483b90d 469 }
terryfan 0:da581483b90d 470
terryfan 3:1498846197ee 471
terryfan 0:da581483b90d 472 void test_apace_vpace_av(FILE * results, Timer * ti)
terryfan 0:da581483b90d 473 {
terryfan 0:da581483b90d 474 fprintf(results, "Test APACE After V\n\n Time Action\n");
terryfan 0:da581483b90d 475 int adifu,vdifu = 0;
terryfan 0:da581483b90d 476 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 477 apace_led = 1;
terryfan 0:da581483b90d 478 Thread::wait(twait);
terryfan 0:da581483b90d 479 apace_led = 0;
terryfan 0:da581483b90d 480 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 481 ti->reset();
terryfan 0:da581483b90d 482 vpace_led = 1;
terryfan 3:1498846197ee 483 v_flag = 1;
terryfan 0:da581483b90d 484 Thread::wait(twait);
terryfan 0:da581483b90d 485 vpace_led = 0;
terryfan 3:1498846197ee 486 v_flag = 0;
terryfan 0:da581483b90d 487
terryfan 0:da581483b90d 488 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 489 adifu = ti->read_us();
terryfan 0:da581483b90d 490 apace_led = 1;
terryfan 0:da581483b90d 491 fprintf(results, "%6d%8s\n", ti->read_ms(), "AP");
terryfan 0:da581483b90d 492 Thread::wait(twait);
terryfan 0:da581483b90d 493 apace_led = 0;
terryfan 0:da581483b90d 494
terryfan 3:1498846197ee 495
terryfan 0:da581483b90d 496 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 497 vdifu = ti->read_us();
terryfan 0:da581483b90d 498 vpace_led = 1;
terryfan 3:1498846197ee 499 v_flag = 1;
terryfan 0:da581483b90d 500 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 501 Thread::wait(twait);
terryfan 0:da581483b90d 502 vpace_led = 0;
terryfan 3:1498846197ee 503 v_flag = 0;
terryfan 0:da581483b90d 504
terryfan 3:1498846197ee 505
terryfan 0:da581483b90d 506 int adif = adifu;
terryfan 0:da581483b90d 507 int vdif = vdifu;
terryfan 0:da581483b90d 508 const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) &&
terryfan 0:da581483b90d 509 (adif < ((lri-avi)*1000 + thrsh)) &&
terryfan 0:da581483b90d 510 (vdif >= (lri*1000 - thrsh)) &&
terryfan 0:da581483b90d 511 (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 512
terryfan 3:1498846197ee 513
terryfan 0:da581483b90d 514 fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif);
terryfan 0:da581483b90d 515 }
terryfan 0:da581483b90d 516
terryfan 3:1498846197ee 517
terryfan 0:da581483b90d 518 void test_avi_a(FILE * results, Timer * ti)
terryfan 0:da581483b90d 519 {
terryfan 0:da581483b90d 520 int vdifu,difl = 0;
terryfan 0:da581483b90d 521 fprintf(results, " Test AVI\n\n Time Action\n");
terryfan 0:da581483b90d 522 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 523 apace_led = 1;
terryfan 0:da581483b90d 524 Thread::wait(twait);
terryfan 0:da581483b90d 525 apace_led = 0;
terryfan 0:da581483b90d 526 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 527 ti->reset();
terryfan 0:da581483b90d 528 vpace_led = 1;
terryfan 3:1498846197ee 529 v_flag = 1;
terryfan 0:da581483b90d 530 Thread::wait(twait);
terryfan 0:da581483b90d 531 vpace_led = 0;
terryfan 3:1498846197ee 532 v_flag = 0;
terryfan 0:da581483b90d 533
terryfan 3:1498846197ee 534
terryfan 0:da581483b90d 535 Thread::wait(uri);
terryfan 0:da581483b90d 536 asignal = 1;
terryfan 0:da581483b90d 537 difl = ti->read_us();
terryfan 0:da581483b90d 538 asignal_led = 1;
terryfan 0:da581483b90d 539 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 540 Thread::wait(twait);
terryfan 0:da581483b90d 541 asignal_led = 0;
terryfan 0:da581483b90d 542 asignal = 0;
terryfan 0:da581483b90d 543
terryfan 3:1498846197ee 544
terryfan 0:da581483b90d 545 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 546 vdifu = ti->read_us();
terryfan 0:da581483b90d 547 vpace_led = 1;
terryfan 3:1498846197ee 548 v_flag = 1;
terryfan 0:da581483b90d 549 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 550 Thread::wait(twait);
terryfan 0:da581483b90d 551 vpace_led = 0;
terryfan 3:1498846197ee 552 v_flag = 0;
terryfan 0:da581483b90d 553
terryfan 3:1498846197ee 554
terryfan 0:da581483b90d 555 int vpc = (avi*1000) + difl;
terryfan 0:da581483b90d 556 const char * res = ((vpc >= (vdifu - thrsh)) &&
terryfan 0:da581483b90d 557 (vpc < (vdifu + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 558
terryfan 3:1498846197ee 559
terryfan 0:da581483b90d 560 fprintf(results, "\nResult: %s %d\n\n", res, vpc);
terryfan 0:da581483b90d 561
terryfan 3:1498846197ee 562
terryfan 0:da581483b90d 563 }
terryfan 0:da581483b90d 564
terryfan 3:1498846197ee 565
terryfan 0:da581483b90d 566 void test_uri_a(FILE * results, Timer * ti)
terryfan 0:da581483b90d 567 {
terryfan 0:da581483b90d 568 int vdifu = 0;
terryfan 0:da581483b90d 569 fprintf(results, " Test URI\n\n Time Action\n");
terryfan 0:da581483b90d 570 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 571 apace_led = 1;
terryfan 0:da581483b90d 572 Thread::wait(twait);
terryfan 0:da581483b90d 573 apace_led = 0;
terryfan 0:da581483b90d 574 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 575 ti->reset();
terryfan 0:da581483b90d 576 vpace_led = 1;
terryfan 3:1498846197ee 577 v_flag = 1;
terryfan 0:da581483b90d 578 Thread::wait(twait);
terryfan 0:da581483b90d 579 vpace_led = 0;
terryfan 3:1498846197ee 580 v_flag = 0;
terryfan 0:da581483b90d 581
terryfan 3:1498846197ee 582
terryfan 0:da581483b90d 583 Thread::wait(pvarp);
terryfan 0:da581483b90d 584 asignal = 1;
terryfan 0:da581483b90d 585 asignal_led = 1;
terryfan 0:da581483b90d 586 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 587 Thread::wait(twait);
terryfan 0:da581483b90d 588 asignal_led = 0;
terryfan 0:da581483b90d 589 asignal = 0;
terryfan 0:da581483b90d 590
terryfan 3:1498846197ee 591
terryfan 0:da581483b90d 592 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 593 vdifu = ti->read_us();
terryfan 0:da581483b90d 594 vpace_led = 1;
terryfan 3:1498846197ee 595 v_flag = 1;
terryfan 0:da581483b90d 596 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 597 Thread::wait(twait);
terryfan 0:da581483b90d 598 vpace_led = 0;
terryfan 3:1498846197ee 599 v_flag = 0;
terryfan 0:da581483b90d 600
terryfan 3:1498846197ee 601
terryfan 0:da581483b90d 602 int vdif = vdifu;
terryfan 0:da581483b90d 603 const char * res = ((vdif >= (uri*1000 - thrsh)) &&
terryfan 0:da581483b90d 604 (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 605
terryfan 3:1498846197ee 606
terryfan 0:da581483b90d 607 fprintf(results, "\nResult: %s %d\n\n", res, vdif);
terryfan 0:da581483b90d 608
terryfan 3:1498846197ee 609
terryfan 0:da581483b90d 610 }
terryfan 0:da581483b90d 611
terryfan 3:1498846197ee 612
terryfan 0:da581483b90d 613 void test_normal_10(FILE * results, Timer * ti)
terryfan 0:da581483b90d 614 {
terryfan 0:da581483b90d 615 fprintf(results, " Test Normal x10\n\n Time Action\n");
terryfan 0:da581483b90d 616 int adifu,vdifu,difl,i = 0;
terryfan 0:da581483b90d 617 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 618 apace_led = 1;
terryfan 0:da581483b90d 619 Thread::wait(twait);
terryfan 0:da581483b90d 620 apace_led = 0;
terryfan 0:da581483b90d 621 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 622 ti->reset();
terryfan 0:da581483b90d 623 vpace_led = 1;
terryfan 3:1498846197ee 624 v_flag = 1;
terryfan 0:da581483b90d 625 Thread::wait(twait);
terryfan 0:da581483b90d 626 vpace_led = 0;
terryfan 3:1498846197ee 627 v_flag = 0;
terryfan 0:da581483b90d 628
terryfan 3:1498846197ee 629
terryfan 0:da581483b90d 630 while(i < 10) {
terryfan 0:da581483b90d 631 Thread::wait(pvarp);
terryfan 0:da581483b90d 632 asignal = 1;
terryfan 0:da581483b90d 633 asignal_led = 1;
terryfan 0:da581483b90d 634 fprintf(results, "%6d%8s\n", ti->read_ms(), "AS");
terryfan 0:da581483b90d 635 Thread::wait(twait);
terryfan 0:da581483b90d 636 asignal_led = 0;
terryfan 0:da581483b90d 637 asignal = 0;
terryfan 0:da581483b90d 638
terryfan 3:1498846197ee 639
terryfan 0:da581483b90d 640 Thread::wait(75);
terryfan 0:da581483b90d 641 vsignal = 1;
terryfan 0:da581483b90d 642 difl = ti->read_us();
terryfan 0:da581483b90d 643 vsignal_led = 1;
terryfan 0:da581483b90d 644 fprintf(results, "%6d%8s\n", ti->read_ms(), "VS");
terryfan 0:da581483b90d 645 Thread::wait(twait);
terryfan 0:da581483b90d 646 vsignal = 0;
terryfan 0:da581483b90d 647 vsignal_led = 0;
terryfan 0:da581483b90d 648 i = i+1;
terryfan 0:da581483b90d 649 }
terryfan 0:da581483b90d 650
terryfan 3:1498846197ee 651
terryfan 0:da581483b90d 652 osSignalWait(0x10, osWaitForever);
terryfan 0:da581483b90d 653 adifu = ti->read_us();
terryfan 0:da581483b90d 654 apace_led = 1;
terryfan 0:da581483b90d 655 fprintf(results, "%6d%8s\n", ti->read_ms(), "AP");
terryfan 0:da581483b90d 656 Thread::wait(twait);
terryfan 0:da581483b90d 657 apace_led = 0;
terryfan 0:da581483b90d 658
terryfan 3:1498846197ee 659
terryfan 0:da581483b90d 660 osSignalWait(0x1, osWaitForever);
terryfan 0:da581483b90d 661 vdifu = ti->read_us();
terryfan 0:da581483b90d 662 vpace_led = 1;
terryfan 3:1498846197ee 663 v_flag = 1;
terryfan 0:da581483b90d 664 fprintf(results, "%6d%8s\n", ti->read_ms(), "VP");
terryfan 0:da581483b90d 665 Thread::wait(twait);
terryfan 0:da581483b90d 666 vpace_led = 0;
terryfan 3:1498846197ee 667 v_flag = 0;
terryfan 0:da581483b90d 668
terryfan 3:1498846197ee 669
terryfan 0:da581483b90d 670 int adif = adifu - difl;
terryfan 0:da581483b90d 671 int vdif = vdifu - difl;
terryfan 0:da581483b90d 672 const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) &&
terryfan 0:da581483b90d 673 (adif < ((lri-avi)*1000 + thrsh)) &&
terryfan 0:da581483b90d 674 (vdif >= (lri*1000 - thrsh)) &&
terryfan 0:da581483b90d 675 (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed";
terryfan 0:da581483b90d 676
terryfan 3:1498846197ee 677
terryfan 0:da581483b90d 678 fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif);
terryfan 0:da581483b90d 679 }
terryfan 0:da581483b90d 680
terryfan 3:1498846197ee 681
terryfan 0:da581483b90d 682 void testmode(void const *args)
terryfan 0:da581483b90d 683 {
terryfan 0:da581483b90d 684 Timer *t;
terryfan 3:1498846197ee 685 testresults = fopen("/local/test.txt", "w"); // Open "out.txt" on the local file system for writing
terryfan 0:da581483b90d 686 t = new Timer();
terryfan 0:da581483b90d 687 t->start();
terryfan 0:da581483b90d 688
terryfan 3:1498846197ee 689
terryfan 0:da581483b90d 690 test_vrp_vv(testresults, t);
terryfan 0:da581483b90d 691 test_pvarp_aa(testresults, t);
terryfan 0:da581483b90d 692 test_pvarp_arp_aaa(testresults, t);
terryfan 0:da581483b90d 693 test_pvarp_arp_aav(testresults, t);
terryfan 0:da581483b90d 694 test_vpace_after_a(testresults, t);
terryfan 0:da581483b90d 695 test_apace_vpace_av(testresults, t);
terryfan 0:da581483b90d 696 test_avi_a(testresults, t);
terryfan 0:da581483b90d 697 test_uri_a(testresults, t);
terryfan 0:da581483b90d 698 test_normal_10(testresults, t);
terryfan 0:da581483b90d 699 fclose(testresults);
terryfan 0:da581483b90d 700 }
terryfan 0:da581483b90d 701
terryfan 0:da581483b90d 702
terryfan 3:1498846197ee 703
terryfan 3:1498846197ee 704
terryfan 0:da581483b90d 705 void randommode(void const *args)
terryfan 0:da581483b90d 706 {
terryfan 0:da581483b90d 707 int aorv,sig = 0;
terryfan 0:da581483b90d 708
terryfan 0:da581483b90d 709 //osEvent ext_signal = osSignalWait(0, 1);
terryfan 0:da581483b90d 710 //int evt = ext_signal.value.signals;
terryfan 0:da581483b90d 711 //osSignalSet(heartmodeTid, 0x1);
terryfan 0:da581483b90d 712 //osSignalWait(0, osWaitForever);
terryfan 0:da581483b90d 713 while(heartmode == 0) {
terryfan 0:da581483b90d 714 aorv = (float)(rand()%2);
terryfan 3:1498846197ee 715 sig = aorv ? rand()%(lri - avi) : rand()%(lri);
terryfan 0:da581483b90d 716
terryfan 0:da581483b90d 717 osEvent ext_signal = osSignalWait(0, sig);
terryfan 0:da581483b90d 718 int evt = ext_signal.value.signals;
terryfan 0:da581483b90d 719
terryfan 0:da581483b90d 720 switch(evt) {
terryfan 0:da581483b90d 721 case(0x0):
terryfan 0:da581483b90d 722 if(aorv) {
terryfan 0:da581483b90d 723 asignal = 1;
terryfan 0:da581483b90d 724 asignal_led = 1;
terryfan 0:da581483b90d 725 Thread::wait(twait);
terryfan 0:da581483b90d 726 asignal_led = 0;
terryfan 0:da581483b90d 727 asignal = 0;
terryfan 0:da581483b90d 728 break;
terryfan 0:da581483b90d 729 } else {
terryfan 0:da581483b90d 730 vsignal = 1;
terryfan 0:da581483b90d 731 vsignal_led = 1;
terryfan 0:da581483b90d 732 Thread::wait(twait);
terryfan 0:da581483b90d 733 vsignal_led = 0;
terryfan 0:da581483b90d 734 vsignal = 0;
terryfan 0:da581483b90d 735 break;
terryfan 0:da581483b90d 736 }
terryfan 3:1498846197ee 737 // case(0x1):
terryfan 3:1498846197ee 738 // vpace_led = 1;
terryfan 3:1498846197ee 739 // v_flag = 1;
terryfan 3:1498846197ee 740 // Thread::wait(twait);
terryfan 3:1498846197ee 741 // vpace_led = 0;
terryfan 3:1498846197ee 742 // v_flag = 0;
terryfan 3:1498846197ee 743 // break;
terryfan 3:1498846197ee 744 //
terryfan 3:1498846197ee 745 //
terryfan 3:1498846197ee 746 // case(0x10):
terryfan 3:1498846197ee 747 // apace_led = 1;
terryfan 3:1498846197ee 748 // Thread::wait(twait);
terryfan 3:1498846197ee 749 // apace_led = 0;
terryfan 3:1498846197ee 750 // break;
terryfan 0:da581483b90d 751
terryfan 1:57cd3ae5f44a 752
terryfan 1:57cd3ae5f44a 753 // case(0x100):
terryfan 1:57cd3ae5f44a 754 //
terryfan 0:da581483b90d 755 }
terryfan 0:da581483b90d 756 }
terryfan 0:da581483b90d 757 }
terryfan 0:da581483b90d 758
terryfan 3:1498846197ee 759
terryfan 1:57cd3ae5f44a 760 void manualmode(void const *args)
terryfan 1:57cd3ae5f44a 761 {
terryfan 1:57cd3ae5f44a 762 while(1) {
terryfan 1:57cd3ae5f44a 763 osEvent evt = signal_q.get();
terryfan 1:57cd3ae5f44a 764 if(evt.status == osEventMessage) {
terryfan 1:57cd3ae5f44a 765 if((char)evt.value.p == 'a') {
terryfan 1:57cd3ae5f44a 766 asignal = 1;
terryfan 1:57cd3ae5f44a 767 asignal_led = 1;
terryfan 1:57cd3ae5f44a 768 Thread::wait(twait);
terryfan 1:57cd3ae5f44a 769 asignal_led = 0;
terryfan 1:57cd3ae5f44a 770 asignal = 0;
terryfan 1:57cd3ae5f44a 771 } else if((char)evt.value.p == 'v') {
terryfan 1:57cd3ae5f44a 772 vsignal = 1;
terryfan 1:57cd3ae5f44a 773 vsignal_led = 1;
terryfan 1:57cd3ae5f44a 774 Thread::wait(twait);
terryfan 1:57cd3ae5f44a 775 vsignal = 0;
terryfan 1:57cd3ae5f44a 776 vsignal_led = 0;
terryfan 1:57cd3ae5f44a 777 }
terryfan 1:57cd3ae5f44a 778 }
terryfan 1:57cd3ae5f44a 779 }
terryfan 1:57cd3ae5f44a 780 }
terryfan 0:da581483b90d 781
terryfan 2:18b496a20413 782 void obsinterval()
terryfan 2:18b496a20413 783 {
terryfan 2:18b496a20413 784 char newObsInt[8];
terryfan 2:18b496a20413 785 int isChangingObsInt = 1;
terryfan 2:18b496a20413 786 int i = 0;
terryfan 2:18b496a20413 787 while(isChangingObsInt) {
terryfan 2:18b496a20413 788 osEvent evt = obsint_q.get();
terryfan 2:18b496a20413 789 if(evt.status == osEventMessage) {
terryfan 2:18b496a20413 790 key = (char)evt.value.p;
terryfan 3:1498846197ee 791 if(key != '\r' && i < 7 ) {
terryfan 2:18b496a20413 792 newObsInt[i] = key;
terryfan 2:18b496a20413 793 i++;
terryfan 2:18b496a20413 794 } else if((key == '\r') && (i > 0)) {
terryfan 3:1498846197ee 795 hr_mutex.lock();
terryfan 3:1498846197ee 796 heart_beats = 0;
terryfan 3:1498846197ee 797 hr_mutex.unlock();
terryfan 2:18b496a20413 798 int obsint;
terryfan 2:18b496a20413 799 newObsInt[i] = '\0';
terryfan 2:18b496a20413 800 sscanf(newObsInt, "%d", &obsint);
terryfan 3:1498846197ee 801 hr_mutex.lock();
terryfan 2:18b496a20413 802 observation_interval = (obsint > 0 ) ? obsint: 1;
terryfan 3:1498846197ee 803 hr_mutex.unlock();
terryfan 2:18b496a20413 804 isChangingObsInt = 0;
terryfan 2:18b496a20413 805 //lcd.printf("%d", observation_interval);
terryfan 3:1498846197ee 806 }
terryfan 2:18b496a20413 807 }
terryfan 2:18b496a20413 808 }
terryfan 2:18b496a20413 809 }
terryfan 1:57cd3ae5f44a 810 osThreadDef(randommode, osPriorityNormal, DEFAULT_STACK_SIZE);
terryfan 0:da581483b90d 811 osThreadDef(testmode, osPriorityNormal, DEFAULT_STACK_SIZE);
terryfan 1:57cd3ae5f44a 812 osThreadDef(manualmode, osPriorityNormal, DEFAULT_STACK_SIZE);
terryfan 3:1498846197ee 813 osThreadDef(h_beats, osPriorityNormal, DEFAULT_STACK_SIZE);
terryfan 3:1498846197ee 814 osThreadDef(displayThread, osPriorityNormal, DEFAULT_STACK_SIZE);
terryfan 3:1498846197ee 815 osThreadDef(HeartSense, osPriorityNormal, DEFAULT_STACK_SIZE);
terryfan 1:57cd3ae5f44a 816
terryfan 0:da581483b90d 817 int main()
terryfan 0:da581483b90d 818 {
terryfan 0:da581483b90d 819 vpace.rise(&vpace_irq);
terryfan 0:da581483b90d 820 apace.rise(&apace_irq);
terryfan 0:da581483b90d 821
terryfan 1:57cd3ae5f44a 822 pc.attach(&Rx_interrupt, RawSerial::RxIrq);
terryfan 2:18b496a20413 823
terryfan 0:da581483b90d 824 //heartmodeThread = new Thread();
terryfan 3:1498846197ee 825
terryfan 4:cf40000fdac1 826 // Callback<void()> testmodeTask((void*)NULL,(void (*)(void *))&testmode);
terryfan 0:da581483b90d 827
terryfan 3:1498846197ee 828 HeartSenseTid = osThreadCreate(osThread(HeartSense), NULL);
terryfan 1:57cd3ae5f44a 829 heartmodeTid = osThreadCreate(osThread(randommode), NULL);
terryfan 3:1498846197ee 830 beats = osThreadCreate(osThread(h_beats), NULL);
terryfan 3:1498846197ee 831 displayTid = osThreadCreate(osThread(displayThread), NULL);
terryfan 1:57cd3ae5f44a 832 // heartmodeTid = osThreadCreate(osThread(testmode), NULL);
terryfan 1:57cd3ae5f44a 833 // heartmodeTid = osThreadCreate(osThread(manualmode), NULL);
terryfan 2:18b496a20413 834
terryfan 0:da581483b90d 835 while(true) {
terryfan 1:57cd3ae5f44a 836 osEvent evt = mode_q.get();
terryfan 1:57cd3ae5f44a 837 if(evt.status == osEventMessage) {
terryfan 1:57cd3ae5f44a 838 switch((char)evt.value.p) {
terryfan 0:da581483b90d 839 //pvarp = 0.3s
terryfan 0:da581483b90d 840 case('r'):
terryfan 4:cf40000fdac1 841 tmm = 0;
terryfan 0:da581483b90d 842 lcd.printf("R");
terryfan 1:57cd3ae5f44a 843 osThreadTerminate (heartmodeTid);
terryfan 3:1498846197ee 844 osThreadTerminate (displayTid);
terryfan 1:57cd3ae5f44a 845 if (testresults != NULL) {
terryfan 1:57cd3ae5f44a 846 fclose(testresults);
terryfan 1:57cd3ae5f44a 847 }
terryfan 1:57cd3ae5f44a 848 asignal_led = 0;
terryfan 1:57cd3ae5f44a 849 vsignal_led = 0;
terryfan 1:57cd3ae5f44a 850 apace_led = 0;
terryfan 1:57cd3ae5f44a 851 vpace_led = 0;
terryfan 1:57cd3ae5f44a 852
terryfan 3:1498846197ee 853 displayTid = osThreadCreate(osThread(displayThread), NULL);
terryfan 1:57cd3ae5f44a 854 heartmodeTid = osThreadCreate(osThread(randommode), NULL);
terryfan 0:da581483b90d 855 // Thread::wait(100);
terryfan 0:da581483b90d 856 break;
terryfan 0:da581483b90d 857 case('t'):
terryfan 4:cf40000fdac1 858
terryfan 4:cf40000fdac1 859 tmm = 1;
terryfan 0:da581483b90d 860 lcd.printf("T");
terryfan 1:57cd3ae5f44a 861 osThreadTerminate (heartmodeTid);
terryfan 3:1498846197ee 862 osThreadTerminate (displayTid);
terryfan 1:57cd3ae5f44a 863 asignal_led = 0;
terryfan 1:57cd3ae5f44a 864 vsignal_led = 0;
terryfan 1:57cd3ae5f44a 865 apace_led = 0;
terryfan 1:57cd3ae5f44a 866 vpace_led = 0;
ems316 6:53fa082961d2 867 osSignalClear (heartmodeTid,0);
terryfan 3:1498846197ee 868 displayTid = osThreadCreate(osThread(displayThread), NULL);
ems316 6:53fa082961d2 869 heartmodeTid = osThreadCreate(osThread(testmode), NULL);
terryfan 4:cf40000fdac1 870
terryfan 4:cf40000fdac1 871 if (testresults != NULL) {
terryfan 4:cf40000fdac1 872 fclose(testresults);
terryfan 4:cf40000fdac1 873 }
terryfan 5:ba77f2da6fc5 874
terryfan 0:da581483b90d 875 break;
terryfan 0:da581483b90d 876 case('m'):
terryfan 4:cf40000fdac1 877 tmm = 0;
terryfan 0:da581483b90d 878 lcd.printf("M");
terryfan 1:57cd3ae5f44a 879 osThreadTerminate (heartmodeTid);
terryfan 3:1498846197ee 880 osThreadTerminate (displayTid);
terryfan 1:57cd3ae5f44a 881 if (testresults != NULL) {
terryfan 1:57cd3ae5f44a 882 fclose(testresults);
terryfan 1:57cd3ae5f44a 883 }
terryfan 1:57cd3ae5f44a 884 asignal_led = 0;
terryfan 1:57cd3ae5f44a 885 vsignal_led = 0;
terryfan 1:57cd3ae5f44a 886 apace_led = 0;
terryfan 1:57cd3ae5f44a 887 vpace_led = 0;
terryfan 1:57cd3ae5f44a 888
terryfan 3:1498846197ee 889 displayTid = osThreadCreate(osThread(displayThread), NULL);
terryfan 1:57cd3ae5f44a 890 heartmodeTid = osThreadCreate(osThread(manualmode), NULL);
terryfan 0:da581483b90d 891 manual_mode = 1;
terryfan 0:da581483b90d 892
terryfan 3:1498846197ee 893
terryfan 0:da581483b90d 894 break;
terryfan 0:da581483b90d 895 case('o'):
terryfan 4:cf40000fdac1 896 tmm = 0;
terryfan 2:18b496a20413 897 lcd.printf("modeO");
terryfan 2:18b496a20413 898 obsinterval();
terryfan 3:1498846197ee 899 osThreadTerminate (displayTid);
terryfan 3:1498846197ee 900 displayTid = osThreadCreate(osThread(displayThread), NULL);
terryfan 0:da581483b90d 901 break;
terryfan 0:da581483b90d 902 }
terryfan 0:da581483b90d 903 }
terryfan 0:da581483b90d 904 }
terryfan 0:da581483b90d 905 }