HAHAHAHHA

Dependencies:   TextLCD mbed-rtos mbed

Fork of 541-pacemaker-heart by Terry Fang

Committer:
terryfan
Date:
Wed Dec 07 15:09:32 2016 +0000
Revision:
3:1498846197ee
Parent:
2:18b496a20413
Child:
4:cf40000fdac1
latest heart.

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