Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Pacemaker by
Diff: pulsegenerator.cpp
- Revision:
- 6:d71e30291a62
- Parent:
- 2:4fb5a8d15f9c
- Child:
- 7:4a1ec89e37cc
--- 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
