HAHAHAHHA

Dependencies:   TextLCD mbed-rtos mbed

Fork of 541-pacemaker-heart by Terry Fang

Committer:
terryfan
Date:
Fri Dec 09 06:51:47 2016 +0000
Revision:
5:ba77f2da6fc5
Parent:
4:cf40000fdac1
Child:
6:53fa082961d2
INCOMPLETE

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