3K04 Project / Mbed 2 deprecated PacemakerSerialStuff

Dependencies:   mbed-rtos mbed

Fork of Pacemaker by 3K04 Project

Revision:
6:d71e30291a62
Parent:
2:4fb5a8d15f9c
Child:
7:4a1ec89e37cc
diff -r 812fc17e2a3e -r d71e30291a62 pulsegenerator.cpp
--- a/pulsegenerator.cpp	Wed Dec 07 21:26:55 2016 +0000
+++ b/pulsegenerator.cpp	Mon Dec 19 18:50:33 2016 +0000
@@ -1,47 +1,33 @@
-#include "pinmap.h"
-#include "parameters.h"
 #include "pulsegenerator.h"
-#include "rtos.h"
-#include "motion.h"
 
-
-
-modes currentMode=VOO;
-modes nextMode=VOO;
+Param *INPUTS;
 
-void timer_thread ();
-void pace_controller ();
+string        none = "N";
+string        transmit = "TR";
+string        rec = "RE";
+string        egramTog = "ET";
 
-/*=== RTOS Required Components ===*/
-Thread paceThread(osPriorityNormal);
-Thread timerThread(osPriorityNormal);
+bool          egram = true;
 
-uint32_t pace_period_ms;
-uint32_t next_pace_period_ms;
-
+string        AOO = "AOO";
+string        VOO = "VOO";
+string        VVI = "VVI";
 
 uint8_t initialized = 0;
 
+int pace_period_ms;
+
 /******************************************
  *
  *       Pacing Mode Functions
  *
- ******************************************/
-
-modes set_pacing_mode (modes newMode) {
-    nextMode = newMode;
-    return currentMode;    
-}
+ *******************************************
 
-uint32_t set_pace_period_ms(uint32_t new_pace_period_ms){
-    next_pace_period_ms = new_pace_period_ms;
-    return pace_period_ms;
-}
+//
+//Deactivates both pacing circuits
+//Cancels any existing pace event
+*/
 
-/*
-Deactivates both pacing circuits
-Cancels any existing pace event
-*/
 void pace_charge_shutdown () {
     /* Stage 1: Switch-OFF/Ground-ON */
     atr_pace_ctrl =  LOW;
@@ -68,6 +54,7 @@
     if (initialized) return;
     pace_charge_shutdown ();
     initialized = 1;
+    wait(1);
 }
 
 /*
@@ -108,7 +95,8 @@
     wait_ms(10);
 }
 
-void pace_vent (uint16_t pulse_width_us) {
+void pace_vent (int pulse_width_us) {
+    green = 0;
     vent_pace_prime();
 
     // Begin Pace Event Output
@@ -121,9 +109,11 @@
     vent_pace_ctrl = LOW;
     
     pace_charge_shutdown (); 
+    green = 1;
 }
 
-void pace_atr (uint16_t pulse_width_us) {
+void pace_atr (int pulse_width_us) {
+    
     atr_pace_prime();
 
     // Begin Pace Event Output
@@ -139,32 +129,114 @@
 }
 
 void pace_VOO () {
-    pace_vent (get_vent_pulse_width_us());
+    pace_vent ((*INPUTS).getVPulseWidth_us());
 }
 
 void pace_AOO () {
-    pace_atr (get_atr_pulse_width_us());
+    pace_atr ((*INPUTS).getAPulseWidth_us());
 }
 
-void pace_VOOR() {
-    if(isMotionThresholdExceeded()){
-            //set_vent_pulse_width_us();//pace faster
-            pace_VOO();
-            resetMotionDetection();
+void pace_VVI() {
+    int i = 0;
+    while (i >=60){
+        if (vent_rect_signal == 0){//if there is no signal on the heart then adda counter and wait a millisecond before checking again
+            i++;
+            wait_ms(1); // wait one millisecond
+            //blue != blue;
+            egramSend();
         }
-        else {
-            //set_vent_pulse_width_us();//pace with previous value
+    else{//if there is a signal then there is a heart beat, and the VII will return 0 and wait to be caled on again.
+        return;
         }
+   }
+   
+   pace_vent ((*INPUTS).getVPulseWidth_us());//if there is no heartbeat recordered for 60 millaseconds, then it will call on the pacemaker to pulse.
+   return;
+
 }
 
 void begin_pace () {
     if (!initialized) pulsegenerator_initialize ();
-    pace_period_ms = get_lower_rate_limit_period_ms();
+    
+    green = 1;
+    red = 1;
+    blue = 0;
+    wait(1);
+    
+    //serialCheck(recieve());
+    (*INPUTS).setParameters("$VOO,60,120,120,150,OFF,50,OFF,3.50,3.50,3.75,3.75,0.40,0.40,0.75,2.50,320,250,250,OFF,OFF,OFF,OFF,20,1,40,Med,30,8,5,*");
+    blue = 1;
     
-    paceThread.start(pace_controller);
-    timerThread.start(timer_thread);
+    while(1){
+        pace_period_ms = (*INPUTS).getLowerRateLimit_ms();
+        
+        if (strcmp((*INPUTS).getMode().c_str(),VOO.c_str()) == 0){
+            green = 1;
+            blue = 1;
+            red = !red;
+            wait(1);
+            time_t start = time(NULL);
+            
+            pace_VOO();
+            
+            time_t now = time(NULL);
+            while((now - start) <= pace_period_ms){
+                egramSend();
+                //wait(2);
+                //red = !red;
+            }
+            //red = !red;
+        } else if (strcmp((*INPUTS).getMode().c_str(),AOO.c_str()) == 0) {
+            green = 1;
+            blue = !blue;
+            red = 1;
+            wait(1);           
+            time_t start = time(NULL);
+            
+            pace_AOO();
+            
+            time_t now = time(NULL);
+            while((now - start) <= pace_period_ms){
+                egramSend();
+                //wait(2);
+                //green = !green;
+            }
+            //green = !green;
+        } else if (strcmp((*INPUTS).getMode().c_str(),VVI.c_str()) == 0) {
+            green = !green;
+            blue = 1;
+            red = 1;
+            wait(1);            
+            pace_VVI();
+            //blue != blue;
+        } else {
+            green = 1;
+            blue = !blue;
+            red = !red;
+            wait(1); 
+            time_t start = time(NULL);
+            
+            pace_VOO();
+            
+            time_t now = time(NULL);
+            while((now - start) <= pace_period_ms){
+                egramSend();
+                //blue = !blue;
+                //wait(1);
+                //reen = !green;
+                //wait(1);
+            }
+            //blue = 0;
+            //green = 0;
+        }
+        
+        //serialCheck(recieve());
+        
+    }
+    
 }
 
+/* 
 void timer_thread () {
     while (true) {
         paceThread.signal_set(0x4);
@@ -184,4 +256,54 @@
             default   : pace_VOO();  break;
         }
     }
-} 
\ No newline at end of file
+} 
+*/
+
+void egramSend(void){
+    red = 0;
+    green = 0;
+    blue = 0;
+    if (egram) {
+        send("HelloWorld!\r\n");//send data
+        send((*INPUTS).getMode());
+    } else {
+        return;
+    }
+    wait(1);
+    red = 1;
+    green = 1;
+    blue = 1;
+}
+
+void serialCheck(string check){
+    if (strcmp(check.c_str(),none.c_str()) == 0){
+        return;//continue
+    } else if (strcmp(check.c_str(),rec.c_str()) == 0){
+        wait_ms(5);
+        send("R");//send "RE\n" for recieved
+        red = 0;
+        blue = 1;
+        green = 1;
+        send((*INPUTS).getParameters());//send data to DCM
+    } else if (strcmp(check.c_str(),egramTog.c_str()) == 0){
+        wait_ms(5);
+        send("R");//send "RE\n" for recieved
+        red = 1;
+        blue = 0;
+        green = 1;
+        //toggle egram variable to start or stop sending
+    } else if (strcmp(check.c_str(),transmit.c_str()) == 0){
+        wait_ms(5);
+        send("R");//send "RE\n" for recieved
+        red = 1;
+        blue = 1;
+        green = 0;
+        (*INPUTS).setParameters(recieve());//recieve data from DCM
+    } else {
+        wait_ms(5);
+        send("N");//send "NR\n" for not recieved
+        red = 0;
+        blue = 0;
+        green = 0;
+    }
+}
\ No newline at end of file