
HAHAHAHHA
Dependencies: TextLCD mbed-rtos mbed
Fork of 541-pacemaker-heart by
Diff: main.cpp
- Revision:
- 1:57cd3ae5f44a
- Parent:
- 0:da581483b90d
- Child:
- 2:18b496a20413
--- a/main.cpp Thu Dec 01 05:02:25 2016 +0000 +++ b/main.cpp Fri Dec 02 21:39:47 2016 +0000 @@ -17,15 +17,21 @@ Thread *heartmodeThread; osThreadId heartmodeTid; +Queue<char,256> mode_q; +Queue<char,256> signal_q; + + +FILE * testresults; + ///////////////// TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); RawSerial pc(USBTX, USBRX); char key = 'n'; -char c; int manual_mode; int isChangingObsInt; ///////////////// - +volatile char c; +volatile int mm = 0; int lri = 1000; int uri = 700; @@ -37,6 +43,8 @@ int twait = 10; int thrsh = 1000; int heartmode = 0; + + void vpace_irq() { //heartmodeThread->signal_set(0x1); @@ -49,6 +57,28 @@ osSignalSet(heartmodeTid, 0x10); } + + +void Rx_interrupt() +{ + while(pc.readable()) { + c = pc.getc(); + if(c == 'm') { + mode_q.put((char*)c); + mm = 1; + } else if(c == 'r' || c == 't') { + mode_q.put((char*)c); + mm = 0; + } else if((c == 'a' || c == 'v') && mm) { + signal_q.put((char*)c); + } + } +} + + + + + void test_vrp_vv(FILE * results, Timer * ti) { int vrpwait = vrp/2; @@ -478,7 +508,7 @@ void testmode(void const *args) { Timer *t; - FILE * testresults = fopen("/local/testreport.txt", "w"); // Open "out.txt" on the local file system for writing + testresults = fopen("/local/testreport.txt", "w"); // Open "out.txt" on the local file system for writing t = new Timer(); t->start(); @@ -546,70 +576,101 @@ Thread::wait(twait); apace_led = 0; break; + +// case(0x100): +// } } } -//void Rx_interrupt() -//{ -// while(pc.readable()) { -// c = pc.getc(); -// if(c == 'r') { -// heartmode = 0; -// } else if (heartmode == 0) { -// randommode(NULL); -// } else if (c == 't') { -// heartmode = 1; -// } else if (c == 'm') { -// heartmode = 2; -// } else if (heartmode == 2 && c == 'a') { -// asignal = 1; -// asignal_led = 1; -// Thread::wait(10); -// asignal = 0; -// asignal_led = 0; -// } else if (heartmode == 2 && c == 'v') { -// vsignal = 1; -// vsignal_led = 1; -// Thread::wait(10); -// vsignal = 0; -// vsignal_led = 0; -// } -// } -//} +void manualmode(void const *args) +{ + while(1) { + osEvent evt = signal_q.get(); + if(evt.status == osEventMessage) { + if((char)evt.value.p == 'a') { + asignal = 1; + asignal_led = 1; + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + } else if((char)evt.value.p == 'v') { + vsignal = 1; + vsignal_led = 1; + Thread::wait(twait); + vsignal = 0; + vsignal_led = 0; + } + } + } +} -//osThreadDef(randommode, osPriorityNormal, DEFAULT_STACK_SIZE); +osThreadDef(randommode, osPriorityNormal, DEFAULT_STACK_SIZE); osThreadDef(testmode, osPriorityNormal, DEFAULT_STACK_SIZE); +osThreadDef(manualmode, osPriorityNormal, DEFAULT_STACK_SIZE); + int main() { vpace.rise(&vpace_irq); apace.rise(&apace_irq); -// pc.attach(&Rx_interrupt, RawSerial::RxIrq); + pc.attach(&Rx_interrupt, RawSerial::RxIrq); //heartmodeThread = new Thread(); //Callback<void()> testmodeTask((void*)NULL,(void (*)(void *))&testmode); - //heartmodeTid = osThreadCreate(osThread(randommode), NULL); - heartmodeTid = osThreadCreate(osThread(testmode), NULL); + heartmodeTid = osThreadCreate(osThread(randommode), NULL); +// heartmodeTid = osThreadCreate(osThread(testmode), NULL); +// heartmodeTid = osThreadCreate(osThread(manualmode), NULL); // lcd.printf(); while(true) { - while(pc.readable()) { - key = pc.getc(); - switch(key) { +// while(pc.readable()) { +// key = pc.getc(); + osEvent evt = mode_q.get(); + if(evt.status == osEventMessage) { + switch((char)evt.value.p) { //pvarp = 0.3s case('r'): lcd.printf("R"); - randommode(NULL); +// randommode.terminate(); + osThreadTerminate (heartmodeTid); + if (testresults != NULL) { + fclose(testresults); + } + asignal_led = 0; + vsignal_led = 0; + apace_led = 0; + vpace_led = 0; + + heartmodeTid = osThreadCreate(osThread(randommode), NULL); // Thread::wait(100); break; case('t'): lcd.printf("T"); - testmode(NULL); + osThreadTerminate (heartmodeTid); + if (testresults != NULL) { + fclose(testresults); + } + asignal_led = 0; + vsignal_led = 0; + apace_led = 0; + vpace_led = 0; + + heartmodeTid = osThreadCreate(osThread(testmode), NULL); break; case('m'): lcd.printf("M"); + osThreadTerminate (heartmodeTid); + if (testresults != NULL) { + fclose(testresults); + } + asignal_led = 0; + vsignal_led = 0; + apace_led = 0; + vpace_led = 0; + + heartmodeTid = osThreadCreate(osThread(manualmode), NULL); manual_mode = 1; break; @@ -619,24 +680,5 @@ break; } } - - if(manual_mode) { - key = pc.getc(); - if(key == 'a') { - asignal = 1; - asignal_led = 1; - Thread::wait(twait); - asignal_led = 0; - asignal = 0; - } else if(key == 'v') { - vsignal = 1; - vsignal_led = 1; - Thread::wait(twait); - vsignal = 0; - vsignal_led = 0; - } else if(key == 'q') { - manual_mode = 0; - } - } } } \ No newline at end of file