3k04 team / Mbed 2 deprecated Pacemaker

Dependencies:   mbed Queue mbed-rtos FXOS8700Q

Fork of Pacemaker by Eric dollar

Revision:
22:19b187e345c9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/interface.cpp.orig	Thu Nov 24 03:42:12 2016 +0000
@@ -0,0 +1,289 @@
+    #pragma once
+#include "mbed.h"
+#include "interface.h"
+#include "hardware.h"
+#include "chamberData.h"
+#include "genData.h"
+#include "pulse.h"
+#include "voor.h"
+#include "rtos.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string>
+
+//CONSTRUCTORS*****************************
+interface::interface(){
+    }
+
+interface::~interface(){};
+
+interface::interface(Serial* inputPC){
+    pc = inputPC;
+    }
+
+interface::interface(Serial* inputPC , pulse* p ,genData* genData, chamberData* atrium , chamberData* ventricle){
+    generalData = genData;
+    pc = inputPC;
+    interfacePulse = p;
+    atrData = atrium;
+    ventData = ventricle;
+    }
+//********************************************
+
+
+//USER INTERFACE SCREENS**************************   
+
+void interface::startScreen(){
+    
+    pc->printf("\n ____   _    ____ _____ __  __    _    _  _______ ____  ");
+    pc->printf("\n|  _ \\ / \\  / ___| ____|  \\/  |  / \\  | |/ / ____|  _ \\");
+    pc->printf("\n| |_) / _ \\| |   |  _| | |\\/| | / _ \\ | ' /|  _| | |_) |");
+    pc->printf("\n|  __/ ___ \\ |___| |___| |  | |/ ___ \\| . \\| |___|  _ <");
+    pc->printf("\n|_| /_/   \\_\\____|_____|_|  |_/_/   \\_\\_|\\_\\_____|_| \\_\\");
+    
+    
+    pc->printf("\nWelcome to the PACEMAKER DCM.\n");
+    pc->printf("Options:\n");
+    pc->printf("1. Start VOOR Pulse\n"); // temporary test to get VOOR working
+    pc->printf("2. View/Change data\n");
+    pc->printf("Please enter a command:");
+    char command = getChar();
+    switch (command) {
+        case '1':{
+            
+            voor v(interfacePulse, ventData); //creates new instance of voor
+            v.startPace(); //starts pacing voor the same way as it used to pace in the user interface
+            //interfacePulse->startPulse(); //problems with this method: you create the pc output twice, once in UI and once in pulse.
+            startScreen();                             //realistically we'll never need to call the serial output in pulse, it should all be done in UI
+            break;
+            }
+        case '2':
+            interface::dataScreen();
+            break;
+        default:
+            pc->printf("\nThat is not an option.\n");
+            interface::startScreen();
+            break;
+    }   
+}
+
+void interface::dataScreen(){
+    (*pc).printf("\nDCM Data sets:\n");
+    (*pc).printf("1. Atrium Data\n2. Ventricle Data\n3. General Data\n4. Egram Data\n5. Back to start page\n");
+    (*pc).printf("Choose a data set:");
+    char command = getChar();
+    switch (command) {
+        case '1':
+            interface::chamberDataScreen(atrData);
+        case '2':
+            interface::chamberDataScreen(ventData);
+        case '3':
+            interface::genDataScreen();
+        case '4':
+            pc->printf("\nNot setup yet");
+            break;
+        case '5':
+            interface::startScreen();  
+        default:
+            pc->printf("\nThat is not an option.\n");
+            interface::dataScreen();
+    }  
+}
+
+void interface::chamberDataScreen(chamberData* chamber){
+    if (chamber == atrData)
+    pc->printf("\nAtrium Data");
+    
+    if (chamber == ventData)   
+    pc->printf("\nVentricle Data");
+    
+    pc->printf("\n1. Pace Amplitude: %f", chamber->getPaceAmp()*7);
+    pc->printf("\n2. Pace Width: %f", chamber->getPaceWidth());
+    pc->printf("\n3. Refractory Period: %f", chamber->getRP());
+    pc->printf("\n4. Sensitivity: %f", chamber->getSensitivity());
+    pc->printf("\nChoose variable to be changed or 5 To return to Data Sets");
+    
+    char command = getChar();
+    switch (command){
+        case '1':
+            pc->printf("\nChoose New Value for the Pace Amplitude:");
+            char* value = getInput();
+            int valInRange = chamber->chngPaceAmp(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",chamber->getPaceAmp()*7);
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::dataScreen();
+            break;
+        case '2':
+            pc->printf("\nChoose New Value for the Pace Width:");
+            value = getInput();
+            valInRange = chamber->chngPaceWidth(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",chamber->getPaceWidth());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::dataScreen();
+            break;
+        case '3':
+            pc->printf("\nChoose New Value for the Refractory Period:");
+            value = getInput();
+            valInRange = chamber->chngRP(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",chamber->getRP());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::dataScreen();
+            break;
+        case '4':
+            pc->printf("\nChoose New Value for the Sensitivity:");
+            value = getInput();
+            valInRange = chamber->chngSensitivity(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",chamber->getSensitivity());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::dataScreen();
+            break;
+        case '5':
+            interface::dataScreen();
+            break;
+        default:
+            pc->printf("\nThat is not an option.");
+            interface::chamberDataScreen(chamber);
+            break;
+    }  
+}
+
+void interface::genDataScreen(){ //moved option 3 from dataScreen() into its own method
+    pc->printf("\nGeneral Data");
+    pc->printf("\n1. Hysteresis: %s", generalData->getHyst() ? "true" : "false");
+    pc->printf("\n2. Hysteresis Rate Limit: %f", generalData->getHystRL());
+    pc->printf("\n3. Lower Rate Limit: %f", generalData->getLRL());
+    pc->printf("\n4. Upper Rate Limit: %f", generalData->getURL());
+    pc->printf("\n5. Atrial-Ventricular Delay: %f", generalData->getAVdelay());
+    pc->printf("\n6. Atrial-Ventricular Delay Offset: %f" , generalData->getAVdelayOffset());
+    pc->printf("\n7. Rate Smoothing: %f", generalData->getRSmooth());
+    pc->printf("\nChoose variable to be changed or 5 To return to Data Sets");      
+    char command = getChar();
+    switch (command) {
+        case '1':
+            pc->printf("\nSet Hysteresis (t for true, f for false):");
+            char* value = getInput();
+            if(*value == 't'){
+                generalData->chngHyst(true);
+            }else if(*value == 'f'){
+                generalData->chngHyst(false);
+            }else{
+                pc->printf("You may only enter 't' or 'f'.");   
+            }
+            pc->printf("%s", generalData->getHyst() ? "true" : "false");
+            interface::genDataScreen();
+            break;
+        case '2':
+            pc->printf("\nChoose New Value for Hysteresis Rate Limit:");
+            value = getInput();
+            int valInRange = generalData->chngHystRL(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",generalData->getHystRL());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::genDataScreen();
+            break;
+        case '3':
+            pc->printf("\nChoose New Value for the Lower Rate Limit:");
+            value = getInput();
+            valInRange = generalData->chngLRL(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",generalData->getLRL());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::genDataScreen();
+            break;
+        case '4':
+            pc->printf("\nChoose New Value for the Upper Rate Limit:");
+            value = getInput();
+            valInRange = generalData->chngURL(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",generalData->getURL());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::genDataScreen();
+            break;
+        case '5':
+            pc->printf("\nChoose New Value for the Atrial-Ventricular Delay:");
+            value = getInput();
+            valInRange = generalData->chngAVdelay(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",generalData->getAVdelay());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::genDataScreen();
+            break; 
+        case '6':
+            pc->printf("\nChoose New Value for the Atrial-Ventricular Delay Offset:");
+            value = getInput();
+            valInRange = generalData->chngAVdelayOffset(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",generalData->getAVdelayOffset());
+            }else{
+                pc->printf("\nThat value is not within range.");  
+            }
+            interface::genDataScreen();
+            break;
+        case '7':
+            pc->printf("\nChoose New Value for the Rate Smoothing:");
+            value = getInput();
+            valInRange = generalData->chngRSmooth(atof(value));
+            if(valInRange == 1){
+                pc->printf("\t%f",generalData->getRSmooth());
+            }else{
+                pc->printf("\nThat value is not within range.");   
+            }
+            interface::genDataScreen();
+            break;
+        default:
+            pc->printf("\nThat is not an option.\n");
+            interface::genDataScreen();
+            break;
+    }  
+}
+ 
+char* interface::getInput(){
+    char buffer[5];
+    fgets (buffer,5,stdin);
+    return buffer;
+}
+
+char interface::getChar(){
+    while(true){
+        if(pc->readable()){
+            char command = pc->getc();
+            return command;   
+            }   
+        }   
+}
+//****************************
+
+//void interface::getAPulse(){ //TODO get this to work, the wait command has issues, see pulse.cpp . wait takes in seconds as argument
+//    pulse myPulse(*atr);
+//    myPulse.setWidth(1);
+//    myPulse.startPulse();
+//    }
+    
+//void interface::LEDon(AnalogOut* out){
+//    (*out) = 0;
+////    (*pc).printf(led);
+//}
+//    
+//void interface::LEDoff(AnalogOut* out){
+//    (*out) = 1;
+//}
\ No newline at end of file