
HAHAHAHHA
Dependencies: TextLCD mbed-rtos mbed
Fork of 541-pacemaker-heart by
Diff: main.cpp
- Revision:
- 0:da581483b90d
- Child:
- 1:57cd3ae5f44a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 01 05:02:25 2016 +0000 @@ -0,0 +1,642 @@ +#include "mbed.h" +#include "rtos.h" +#include "TextLCD.h" + +LocalFileSystem local("local"); + +InterruptIn vpace(p5); +InterruptIn apace(p6); +DigitalOut vsignal(p7); +DigitalOut asignal(p8); + +DigitalOut asignal_led(LED1); +DigitalOut vsignal_led(LED2); +DigitalOut apace_led(LED3); +DigitalOut vpace_led(LED4); + +Thread *heartmodeThread; +osThreadId heartmodeTid; + +///////////////// +TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2); +RawSerial pc(USBTX, USBRX); +char key = 'n'; +char c; +int manual_mode; +int isChangingObsInt; +///////////////// + + +int lri = 1000; +int uri = 700; +int avi = 150; +int pvarp = 300; +int vrp = 200; +int arp = 50; + +int twait = 10; +int thrsh = 1000; +int heartmode = 0; +void vpace_irq() +{ + //heartmodeThread->signal_set(0x1); + osSignalSet(heartmodeTid, 0x1); +} + +void apace_irq() +{ + //heartmodeThread->signal_set(0x10); + osSignalSet(heartmodeTid, 0x10); +} + +void test_vrp_vv(FILE * results, Timer * ti) +{ + int vrpwait = vrp/2; + int adifu,vdifu,difl = 0; + fprintf(results, " Test VRP VV\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(vrpwait); + vsignal = 1; + vsignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VS"); + Thread::wait(twait); + vsignal_led = 0; + vsignal = 0; + + Thread::wait(vrpwait); + vsignal = 1; + difl = ti->read_us(); + vsignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VS"); + Thread::wait(twait); + vsignal = 0; + vsignal_led = 0; + + osSignalWait(0x10, osWaitForever); + adifu = ti->read_us(); + apace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AP"); + Thread::wait(twait); + apace_led = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int adif = adifu-difl; + int vdif = vdifu-difl; + const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) && + (adif < ((lri-avi)*1000 + thrsh)) && + (vdif >= (lri*1000 - thrsh)) && + (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif); + +} +void test_pvarp_aa(FILE * results, Timer * ti) +{ + int pvarpwait = pvarp/2; + int vdifu = 0; + fprintf(results, " Test PVARP AA\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(pvarpwait); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + Thread::wait(pvarpwait); + asignal = 1; + //difl = ti->read_us(); + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int vdif = vdifu; + const char * res = ((vdif >= (uri*1000 - thrsh)) && + (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d\n\n", res, vdif); +} + +void test_pvarp_arp_aaa(FILE * results, Timer * ti) +{ + int arpwait = arp/2; + int vdifu = 0; + fprintf(results, "Test PVARP ARP AAA\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(pvarp); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + Thread::wait(arpwait); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + Thread::wait(arpwait); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int vdif = vdifu; + const char * res = ((vdif >= (uri*1000 - thrsh)) && + (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d\n\n", res, vdif); +} + +void test_pvarp_arp_aav(FILE * results, Timer * ti) +{ + int adifu,vdifu,difl = 0; + fprintf(results, "Test PVARP ARP AAV\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(pvarp); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + Thread::wait(arp); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + Thread::wait(20); + vsignal = 1; + difl = ti->read_us(); + vsignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VS"); + Thread::wait(twait); + vsignal = 0; + vsignal_led = 0; + + osSignalWait(0x10, osWaitForever); + adifu = ti->read_us(); + apace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AP"); + Thread::wait(twait); + apace_led = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int adif = adifu-difl; + int vdif = vdifu-difl; + const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) && + (adif < ((lri-avi)*1000 + thrsh)) && + (vdif >= (lri*1000 - thrsh)) && + (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif); + +} + +void test_vpace_after_a(FILE * results, Timer * ti) +{ + int vdifu = 0; + fprintf(results, "Test VPACE After A\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(pvarp); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int vdif = vdifu; + const char * res = ((vdif >= (uri*1000 - thrsh)) && + (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d\n\n", res, vdif); +} + +void test_apace_vpace_av(FILE * results, Timer * ti) +{ + fprintf(results, "Test APACE After V\n\n Time Action\n"); + int adifu,vdifu = 0; + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + osSignalWait(0x10, osWaitForever); + adifu = ti->read_us(); + apace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AP"); + Thread::wait(twait); + apace_led = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int adif = adifu; + int vdif = vdifu; + const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) && + (adif < ((lri-avi)*1000 + thrsh)) && + (vdif >= (lri*1000 - thrsh)) && + (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif); +} + +void test_avi_a(FILE * results, Timer * ti) +{ + int vdifu,difl = 0; + fprintf(results, " Test AVI\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(uri); + asignal = 1; + difl = ti->read_us(); + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int vpc = (avi*1000) + difl; + const char * res = ((vpc >= (vdifu - thrsh)) && + (vpc < (vdifu + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d\n\n", res, vpc); + +} + +void test_uri_a(FILE * results, Timer * ti) +{ + int vdifu = 0; + fprintf(results, " Test URI\n\n Time Action\n"); + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + Thread::wait(pvarp); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int vdif = vdifu; + const char * res = ((vdif >= (uri*1000 - thrsh)) && + (vdif < (uri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d\n\n", res, vdif); + +} + +void test_normal_10(FILE * results, Timer * ti) +{ + fprintf(results, " Test Normal x10\n\n Time Action\n"); + int adifu,vdifu,difl,i = 0; + osSignalWait(0x10, osWaitForever); + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + osSignalWait(0x1, osWaitForever); + ti->reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + + while(i < 10) { + Thread::wait(pvarp); + asignal = 1; + asignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AS"); + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + + Thread::wait(75); + vsignal = 1; + difl = ti->read_us(); + vsignal_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VS"); + Thread::wait(twait); + vsignal = 0; + vsignal_led = 0; + i = i+1; + } + + osSignalWait(0x10, osWaitForever); + adifu = ti->read_us(); + apace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "AP"); + Thread::wait(twait); + apace_led = 0; + + osSignalWait(0x1, osWaitForever); + vdifu = ti->read_us(); + vpace_led = 1; + fprintf(results, "%6d%8s\n", ti->read_ms(), "VP"); + Thread::wait(twait); + vpace_led = 0; + + int adif = adifu - difl; + int vdif = vdifu - difl; + const char * res = ((adif >= ((lri-avi)*1000 - thrsh)) && + (adif < ((lri-avi)*1000 + thrsh)) && + (vdif >= (lri*1000 - thrsh)) && + (vdif < (lri*1000 + thrsh))) ? "Passed": "Failed"; + + fprintf(results, "\nResult: %s %d %d\n\n", res, adif, vdif); +} + +void testmode(void const *args) +{ + Timer *t; + FILE * testresults = fopen("/local/testreport.txt", "w"); // Open "out.txt" on the local file system for writing + t = new Timer(); + t->start(); + + test_vrp_vv(testresults, t); + test_pvarp_aa(testresults, t); + test_pvarp_arp_aaa(testresults, t); + test_pvarp_arp_aav(testresults, t); + test_vpace_after_a(testresults, t); + test_apace_vpace_av(testresults, t); + test_avi_a(testresults, t); + test_uri_a(testresults, t); + test_normal_10(testresults, t); + fclose(testresults); +} + + +void randommode(void const *args) +{ + int aorv,sig = 0; + Timer at,vt; + + at.start(); + vt.start(); + + //osEvent ext_signal = osSignalWait(0, 1); + //int evt = ext_signal.value.signals; + //osSignalSet(heartmodeTid, 0x1); + //osSignalWait(0, osWaitForever); + while(heartmode == 0) { + aorv = (float)(rand()%2); + sig = aorv ? rand()%(lri - avi - at.read_ms()) : rand()%(lri - vt.read_ms()); + + osEvent ext_signal = osSignalWait(0, sig); + int evt = ext_signal.value.signals; + + switch(evt) { + case(0x0): + if(aorv) { + asignal = 1; + asignal_led = 1; + Thread::wait(twait); + asignal_led = 0; + asignal = 0; + break; + } else { + vsignal = 1; + at.reset(); + vt.reset(); + vsignal_led = 1; + Thread::wait(twait); + vsignal_led = 0; + vsignal = 0; + break; + } + case(0x1): + at.reset(); + vt.reset(); + vpace_led = 1; + Thread::wait(twait); + vpace_led = 0; + break; + + case(0x10): + apace_led = 1; + Thread::wait(twait); + apace_led = 0; + break; + } + } +} + +//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; +// } +// } +//} + + +//osThreadDef(randommode, osPriorityNormal, DEFAULT_STACK_SIZE); +osThreadDef(testmode, osPriorityNormal, DEFAULT_STACK_SIZE); +int main() +{ + vpace.rise(&vpace_irq); + apace.rise(&apace_irq); + +// 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); +// lcd.printf(); + while(true) { + while(pc.readable()) { + key = pc.getc(); + switch(key) { + //pvarp = 0.3s + case('r'): + lcd.printf("R"); + randommode(NULL); +// Thread::wait(100); + break; + case('t'): + lcd.printf("T"); + testmode(NULL); + break; + case('m'): + lcd.printf("M"); + manual_mode = 1; + + break; + case('o'): + isChangingObsInt = 1; + lcd.printf("O"); + 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