
HAHAHAHHA
Dependencies: TextLCD mbed-rtos mbed
Fork of 541-pacemaker-heart by
main.cpp@6:53fa082961d2, 2016-12-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |