yay!

Dependencies:   TextLCD mbed-rtos mbed

Fork of 541_Pacermaker by CIS541

Files at this revision

API Documentation at this revision

Comitter:
sanjeet25
Date:
Wed Dec 02 09:42:45 2015 +0000
Parent:
5:f21d7c8ef5bc
Commit message:
pacemaker_dynamicAVI

Changed in this revision

PacemakerLibrary.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r f21d7c8ef5bc -r a1a3e73d90f3 PacemakerLibrary.h
--- a/PacemakerLibrary.h	Wed Dec 02 06:26:32 2015 +0000
+++ b/PacemakerLibrary.h	Wed Dec 02 09:42:45 2015 +0000
@@ -23,6 +23,7 @@
 DigitalOut vPace(p24);
 InterruptIn ASignal(p25);
 InterruptIn VSignal(p26);
+DigitalOut Dynamic_AVI(p27);
 Serial pc(USBTX, USBRX);
 
 int32_t signal1 = 0x01;
@@ -78,6 +79,9 @@
 int URI;
 int PVAB;
 
+int AVI_MAX=70;
+int AVISTEP=1;
+
 Mutex displayMutex;
 Mutex AMutex;
 Mutex VMutex;
diff -r f21d7c8ef5bc -r a1a3e73d90f3 main.cpp
--- a/main.cpp	Wed Dec 02 06:26:32 2015 +0000
+++ b/main.cpp	Wed Dec 02 09:42:45 2015 +0000
@@ -3,72 +3,76 @@
 
 TextLCD lcd(p15,p16,p17,p18,p19,p20);
 
-void incrementHeartRate() {
+int i=0;
+
+void incrementHeartRate()
+{
     heartRateMutex.lock();
     heartRate++;
     heartRateMutex.unlock();
 }
 
-void setVSignal(bool state) {
-    VMutex.lock();        
+void setVSignal(bool state)
+{
+    VMutex.lock();
     waitVSignal = state;
     VMutex.unlock();
 }
 
-void setASignal(bool state) {
-    AMutex.lock();        
+void setASignal(bool state)
+{
+    AMutex.lock();
     waitASignal = state;
-    AMutex.unlock();   
+    AMutex.unlock();
 }
 
-void setTimeConstraint(int i) {
+void setTimeConstraint(int i)
+{
     timeConstraintMutex.lock();
     timeConstraint = i;
-    timeConstraintMutex.unlock();    
+    timeConstraintMutex.unlock();
 }
 
-void printToLCD() {
+void printToLCD()
+{
     displayMutex.lock();
 //    pc.printf("%04d\r\n", avgHeartRate);
 //    pc.printf("%02d\r\n", pacemakerIntervalInMs/1000);
 //    pc.printf("%04d\r\n", (heartRateHeart*(60/sec)));
-    lcd.cls(); 
+    lcd.cls();
     lcd.locate(0,0);
     lcd.printf("Rate: %.2f BPM", avgHeartRate);
     lcd.locate(0,1);
-    switch(pacemakerMode)
-    {
+    switch(pacemakerMode) {
         default:
-        case NORMAL:
-        {
+        case NORMAL: {
             lcd.printf("NORMAL");
             break;
         }
-        case EXERCISE:
-        {
+        case EXERCISE: {
             lcd.printf("EXERCISE");
             break;
         }
-        case SLEEP:
-        {
+        case SLEEP: {
             lcd.printf("SLEEP (ZZZ)");
             break;
         }
-        case MANUAL:
-        {
+        case MANUAL: {
             lcd.printf("MANUAL");
             break;
         }
-    }    
+    }
     displayMutex.unlock();
 }
 
-void println(const char *c) {
+void println(const char *c)
+{
     pc.printf(c);
     pc.printf("\r\n");
 }
 
-void switchToNormal() {
+void switchToNormal()
+{
     LRI = normalModeLRI;
     AVI = normalModeAVI;
     PVARP = normalModePVARP;
@@ -77,7 +81,8 @@
     PVAB = normalModePVAB;
 }
 
-void switchToExercise() {
+void switchToExercise()
+{
     LRI = exerciseModeLRI;
     AVI = exerciseModeAVI;
     PVARP = exerciseModePVARP;
@@ -86,7 +91,8 @@
     PVAB = exerciseModePVAB;
 }
 
-void switchToSleep() {
+void switchToSleep()
+{
     LRI = sleepModeLRI;
     AVI = sleepModeAVI;
     PVARP = sleepModePVARP;
@@ -97,71 +103,60 @@
 
 void changeMode()
 {
-    switch(pacemakerMode)
-    {
+    switch(pacemakerMode) {
         default:
-        case NORMAL:
-        {
+        case NORMAL: {
             switchToNormal();
             break;
         }
-        case EXERCISE:
-        {
+        case EXERCISE: {
             switchToExercise();
             break;
         }
-        case SLEEP:
-        {
+        case SLEEP: {
             switchToSleep();
             break;
         }
-        case MANUAL:
-        {
+        case MANUAL: {
             break;
         }
-    }    
+    }
     changePacemakerMode=false;
 }
 
 void pacemakerModeSwitch(const void *args)
 {
-    while(1)
-    {
+    while(1) {
         Thread::signal_wait(signal3);
-        if(changePacemakerMode)
-        {
+        if(changePacemakerMode) {
             changeMode();
         }
     }
 }
-            
+
 void aSense()
 {
-    if(waitASignal)
-    {
+    if(waitASignal) {
         asenseLED=1;
         wait(0.001);
 //        pc.printf("ASense Received at %d ms\r\n", globalTimer.read_ms());
-        asenseLED=0; 
-        if(changePacemakerMode)
-        {
+        asenseLED=0;
+        if(changePacemakerMode) {
             (*P_PacemakerModeSwitch).signal_set(signal3);
         }
         ASenseReceived=true;
         (*P_PacemakerReceive).signal_set(signal4);
-    }    
+    }
 }
 
 void vSense()
 {
-    if(waitVSignal)
-    {
+    if(waitVSignal) {
         vsenseLED=1;
 //        pc.printf("VSense Received at %d ms\r\n", globalTimer.read_ms());
         wait(0.001);
         vsenseLED=0;
-        if(changePacemakerMode)
-        {
+        if(changePacemakerMode) {
             (*P_PacemakerModeSwitch).signal_set(signal3);
         }
         waitVPace=false;
@@ -172,42 +167,42 @@
 
 void timeConstraintTimeout(const void *args)
 {
-    if(timeConstraint==AVI_const)
-    {
+    if(timeConstraint==AVI_const) {
         //trigger vpace
-        if(waitVPace)
-        {
+        if(waitVPace) {
+            
             APace=false;
             (*P_PacemakerSend).signal_set(signal1);
-        }
-        else
-        {
+            AVI+=AVISTEP;
+            Dynamic_AVI=1;
+            Thread::wait(1);
+                Dynamic_AVI=0;
+                
+            if(AVI==AVI_MAX) {
+                
+                AVI=60;
+                
+            }
+            pc.printf("AVI : %u",AVI);
+        } else {
             waitVPace=true;
         }
-    }
-    else if(timeConstraint==PVAB_const)
-    {
+    } else if(timeConstraint==PVAB_const) {
         setVSignal(true);
         setTimeConstraint(AVI_const);
         TimeConstTimerOn=true;
         TimeConstTimer->start(AVI-PVAB);
-    }
-    else if(timeConstraint==VRP_const)
-    {
+    } else if(timeConstraint==VRP_const) {
         setVSignal(true);
         setTimeConstraint(PVARP_const);;
         TimeConstTimerOn=true;
         TimeConstTimer->start(PVARP-VRP);
-    }
-    else if(timeConstraint==PVARP_const)
-    {
+    } else if(timeConstraint==PVARP_const) {
         setASignal(true);
         setTimeConstraint(LRI_const);
         TimeConstTimerOn=true;
         TimeConstTimer->start(LRI-PVARP-AVI);
-    }
-    else if(timeConstraint==LRI_const)
-    {
+    } else if(timeConstraint==LRI_const) {
         //trigger apace
         APace=true;
         (*P_PacemakerSend).signal_set(signal1);
@@ -216,38 +211,30 @@
 
 void atrialEventTimeout(const void *args)
 {
-    if(VPaceNotReceived || waitVPace)
-    {
+    if(VPaceNotReceived || waitVPace) {
         APace=false;
         VPaceNotReceived=false;
         (*P_PacemakerSend).signal_set(signal1);
-    }
-    else
-    {
+    } else {
         waitVPace=true;
     }
-}   
+}
 
 void pacemakerReceive(const void *args)
 {
-    while(1)
-    {
+    while(1) {
         Thread::signal_wait(signal4);
-        if(TimeConstTimerOn)
-        {
+        if(TimeConstTimerOn) {
             TimeConstTimer->stop();
             TimeConstTimerOn=false;
         }
-        if(ASenseReceived)
-        {
+        if(ASenseReceived) {
             setASignal(false);
             setVSignal(true);
             TimeConstTimerOn=true;
             setTimeConstraint(AVI_const);
             TimeConstTimer->start(AVI);
-        }
-        else
-        {
+        } else {
             incrementHeartRate();
             setVSignal(false);
             setASignal(false);
@@ -259,22 +246,19 @@
         }
     }
 }
-        
+
 void pacemakerSend(const void *args)
 {
-    while(1)
-    {
+    while(1) {
         Thread::signal_wait(signal1);
-        if(APace)
-        {
+        if(APace) {
             pc.printf("APace Sent at %d ms\r\n", globalTimer.read_ms());
             apaceLED=1;
             aPace=1;
             Thread::wait(1);
             aPace=0;
             apaceLED=0;
-            if(changePacemakerMode)
-            {
+            if(changePacemakerMode) {
                 changeMode();
             }
 
@@ -285,17 +269,14 @@
                 TimeConstTimerOn=true;
                 TimeConstTimer->start(PVAB);
             }
-        }
-        else
-        {
+        } else {
             pc.printf("VPace Sent at %d ms\r\n", globalTimer.read_ms());
             vpaceLED=1;
             vPace=1;
             Thread::wait(1);
             vPace=0;
             vpaceLED=0;
-            if(changePacemakerMode)
-            {
+            if(changePacemakerMode) {
                 changeMode();
             }
 
@@ -314,14 +295,15 @@
     }
 }
 
-void readInt() {
+void readInt()
+{
     char c = pc.getc();
     int input = c-48;
     c = pc.getc();
     while (c != '\r') {
         input *= 10;
         input += c-48;
-        c = pc.getc();      
+        c = pc.getc();
     }
 
     if (input >= 10 && input <= 90) {
@@ -331,113 +313,90 @@
         heartRateMutex.lock();
         heartRate=0;
         heartRateMutex.unlock();
-        pc.printf("Obs Int Changed: %d\r\n", pacemakerInterval);     
+        pc.printf("Obs Int Changed: %d\r\n", pacemakerInterval);
     } else {
-        pc.printf("Bad Obs Int: %d\r\n", input);     
+        pc.printf("Bad Obs Int: %d\r\n", input);
     }
 }
 
 void pacemakerKeyboard(const void *args)
 {
-    while(1)
-    {
+    while(1) {
         Thread::signal_wait(signal2);
-        if (char_read == 'a' && pacemakerMode == MANUAL)
-        {
+        if (char_read == 'a' && pacemakerMode == MANUAL) {
             APace=true;
             (*P_PacemakerSend).signal_set(signal1);
-        }
-        else if (char_read == 'v' && pacemakerMode == MANUAL)
-        {
-            if(waitVPace)
-            {
+        } else if (char_read == 'v' && pacemakerMode == MANUAL) {
+            if(waitVPace) {
                 APace=false;
                 VPaceNotReceived=false;
                 (*P_PacemakerSend).signal_set(signal1);
-            }
-            else
-            {
+            } else {
                 VPaceNotReceived=true;
             }
-        }
-        else if (char_read == 'n' && pacemakerMode != NORMAL && !changePacemakerMode)
-        {
+        } else if (char_read == 'n' && pacemakerMode != NORMAL && !changePacemakerMode) {
             if (pacemakerMode == MANUAL) {
                 // restart A/V timers
                 TimeConstTimerOn=true;
-                TimeConstTimer->start(VRP);    
+                TimeConstTimer->start(VRP);
             }
             pacemakerMode=NORMAL;
             changePacemakerMode=true;
-        }
-        else if (char_read == 'e' && pacemakerMode != EXERCISE && !changePacemakerMode)
-        {
+        } else if (char_read == 'e' && pacemakerMode != EXERCISE && !changePacemakerMode) {
             if (pacemakerMode == MANUAL) {
                 // restart A/V timers
-                TimeConstTimer->start(VRP);    
+                TimeConstTimer->start(VRP);
             }
             pacemakerMode=EXERCISE;
             changePacemakerMode=true;
-        }
-        else if (char_read == 's' && pacemakerMode != SLEEP && !changePacemakerMode)
-        {
+        } else if (char_read == 's' && pacemakerMode != SLEEP && !changePacemakerMode) {
             if (pacemakerMode == MANUAL) {
                 // restart A/V timers
-                TimeConstTimer->start(VRP);    
+                TimeConstTimer->start(VRP);
             }
             pacemakerMode=SLEEP;
             changePacemakerMode=true;
-        }
-        else if (char_read == 'm' && pacemakerMode != MANUAL && !changePacemakerMode)
-        {
+        } else if (char_read == 'm' && pacemakerMode != MANUAL && !changePacemakerMode) {
             pacemakerMode=MANUAL;
             changePacemakerMode=true;
-        }
-        else if (char_read == 'o' && !changePacemakerMode)
-        {
+        } else if (char_read == 'o' && !changePacemakerMode) {
             // blocks, reading characters, until "return" is pressed
             observationMutex.lock();
             readInt();
             observationMutex.unlock();
-        }                
+        }
     }
 }
 
 void pacemakerAlarm(const void *args)
 {
-    while(1)
-    {
+    while(1) {
         Thread::signal_wait(signal5);
-        while(avgHeartRate > (60000/URI))
-        {
+        while(avgHeartRate > (60000/URI)) {
             buzzer=1;
             Thread::wait(5);
             buzzer=0;
             Thread::wait(5);
-            if(!alarmPrinted)
-            {
+            if(!alarmPrinted) {
                 displayMutex.lock();
                 println("!!!***Alarm High***!!!");
                 displayMutex.unlock();
                 alarmPrinted=true;
             }
         }
-        while(avgHeartRate < (60000/LRI))
-        {
+        while(avgHeartRate < (60000/LRI)) {
             buzzer=1;
             Thread::wait(10);
             buzzer=0;
             Thread::wait(10);
-            if(!alarmPrinted)
-            {
+            if(!alarmPrinted) {
                 displayMutex.lock();
                 println("!!!***Alarm Low***!!!");
                 displayMutex.unlock();
                 alarmPrinted=true;
             }
         }
-        if(alarmPrinted)
-        {
+        if(alarmPrinted) {
             alarmPrinted=false;
 //            resetDisplay();
         }
@@ -447,9 +406,8 @@
 void display(const void *args)
 {
     displayTimer.start();
-    
-    while(1)
-    {
+
+    while(1) {
         observationMutex.lock();
         if (displayTimer.read_ms() >= pacemakerIntervalInMs) {
             displayTimer.reset();
@@ -464,53 +422,52 @@
             printToLCD();
             observationMutex.unlock();
             Thread::wait(100);
-        }   
+        }
     }
 }
 
-int main() 
-{    
+int main()
+{
     setVSignal(true);
     setVSignal(true);
     switchToNormal();
-    
+
     ASignal.rise(&aSense);
     VSignal.rise(&vSense);
-    
+
     TimeConstTimer = new RtosTimer(timeConstraintTimeout, osTimerOnce, (void*)0);
     AtrialEventTimer = new RtosTimer(atrialEventTimeout, osTimerOnce, (void *)0);
-    
+
     Thread PacemakerSend(pacemakerSend);
     P_PacemakerSend=&PacemakerSend;
     PacemakerSend.set_priority(osPriorityHigh);
-    
+
     Thread PacemakerReceive(pacemakerReceive);
     P_PacemakerReceive=&PacemakerReceive;
     PacemakerReceive.set_priority(osPriorityAboveNormal);
-    
+
     Thread PacemakerModeSwitch(pacemakerModeSwitch);
     P_PacemakerModeSwitch=&PacemakerModeSwitch;
     PacemakerModeSwitch.set_priority(osPriorityAboveNormal);
-    
+
     Thread PacemakerKeyboard(pacemakerKeyboard);
     P_PacemakerKeyboard=&PacemakerKeyboard;
     PacemakerKeyboard.set_priority(osPriorityRealtime);
-    
+
     Thread Display(display);
     Display.set_priority(osPriorityAboveNormal);
-    
+
     Thread PacemakerAlarm(pacemakerAlarm);
     P_PacemakerAlarm = &PacemakerAlarm;
     PacemakerAlarm.set_priority(osPriorityAboveNormal);
-    
+
     setTimeConstraint(VRP_const);
     TimeConstTimer->start(VRP);
-    
+
     globalTimer.start();
-    
+
     while(1) {
-        if(pc.readable())
-        {
+        if(pc.readable()) {
             char_read = pc.getc();
             (*P_PacemakerKeyboard).signal_set(signal2);
         }