3k04 team / Mbed 2 deprecated Pacemaker

Dependencies:   mbed Queue mbed-rtos FXOS8700Q

Fork of Pacemaker by Eric dollar

Committer:
trane3
Date:
Thu Nov 24 03:42:12 2016 +0000
Revision:
22:19b187e345c9
combined changes, eric and gareth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trane3 22:19b187e345c9 1 #pragma once
trane3 22:19b187e345c9 2 #include "mbed.h"
trane3 22:19b187e345c9 3 #include "interface.h"
trane3 22:19b187e345c9 4 #include "hardware.h"
trane3 22:19b187e345c9 5 #include "chamberData.h"
trane3 22:19b187e345c9 6 #include "genData.h"
trane3 22:19b187e345c9 7 #include "pulse.h"
trane3 22:19b187e345c9 8 #include "voor.h"
trane3 22:19b187e345c9 9 #include "rtos.h"
trane3 22:19b187e345c9 10 #include <stdlib.h>
trane3 22:19b187e345c9 11 #include <stdio.h>
trane3 22:19b187e345c9 12 #include <string>
trane3 22:19b187e345c9 13
trane3 22:19b187e345c9 14 //CONSTRUCTORS*****************************
trane3 22:19b187e345c9 15 interface::interface(){
trane3 22:19b187e345c9 16 }
trane3 22:19b187e345c9 17
trane3 22:19b187e345c9 18 interface::~interface(){};
trane3 22:19b187e345c9 19
trane3 22:19b187e345c9 20 interface::interface(Serial* inputPC){
trane3 22:19b187e345c9 21 pc = inputPC;
trane3 22:19b187e345c9 22 }
trane3 22:19b187e345c9 23
trane3 22:19b187e345c9 24 interface::interface(Serial* inputPC , pulse* p ,genData* genData, chamberData* atrium , chamberData* ventricle){
trane3 22:19b187e345c9 25 generalData = genData;
trane3 22:19b187e345c9 26 pc = inputPC;
trane3 22:19b187e345c9 27 interfacePulse = p;
trane3 22:19b187e345c9 28 atrData = atrium;
trane3 22:19b187e345c9 29 ventData = ventricle;
trane3 22:19b187e345c9 30 }
trane3 22:19b187e345c9 31 //********************************************
trane3 22:19b187e345c9 32
trane3 22:19b187e345c9 33
trane3 22:19b187e345c9 34 //USER INTERFACE SCREENS**************************
trane3 22:19b187e345c9 35
trane3 22:19b187e345c9 36 void interface::startScreen(){
trane3 22:19b187e345c9 37
trane3 22:19b187e345c9 38 pc->printf("\n ____ _ ____ _____ __ __ _ _ _______ ____ ");
trane3 22:19b187e345c9 39 pc->printf("\n| _ \\ / \\ / ___| ____| \\/ | / \\ | |/ / ____| _ \\");
trane3 22:19b187e345c9 40 pc->printf("\n| |_) / _ \\| | | _| | |\\/| | / _ \\ | ' /| _| | |_) |");
trane3 22:19b187e345c9 41 pc->printf("\n| __/ ___ \\ |___| |___| | | |/ ___ \\| . \\| |___| _ <");
trane3 22:19b187e345c9 42 pc->printf("\n|_| /_/ \\_\\____|_____|_| |_/_/ \\_\\_|\\_\\_____|_| \\_\\");
trane3 22:19b187e345c9 43
trane3 22:19b187e345c9 44
trane3 22:19b187e345c9 45 pc->printf("\nWelcome to the PACEMAKER DCM.\n");
trane3 22:19b187e345c9 46 pc->printf("Options:\n");
trane3 22:19b187e345c9 47 pc->printf("1. Start VOOR Pulse\n"); // temporary test to get VOOR working
trane3 22:19b187e345c9 48 pc->printf("2. View/Change data\n");
trane3 22:19b187e345c9 49 pc->printf("Please enter a command:");
trane3 22:19b187e345c9 50 char command = getChar();
trane3 22:19b187e345c9 51 switch (command) {
trane3 22:19b187e345c9 52 case '1':{
trane3 22:19b187e345c9 53
trane3 22:19b187e345c9 54 voor v(interfacePulse, ventData); //creates new instance of voor
trane3 22:19b187e345c9 55 v.startPace(); //starts pacing voor the same way as it used to pace in the user interface
trane3 22:19b187e345c9 56 //interfacePulse->startPulse(); //problems with this method: you create the pc output twice, once in UI and once in pulse.
trane3 22:19b187e345c9 57 startScreen(); //realistically we'll never need to call the serial output in pulse, it should all be done in UI
trane3 22:19b187e345c9 58 break;
trane3 22:19b187e345c9 59 }
trane3 22:19b187e345c9 60 case '2':
trane3 22:19b187e345c9 61 interface::dataScreen();
trane3 22:19b187e345c9 62 break;
trane3 22:19b187e345c9 63 default:
trane3 22:19b187e345c9 64 pc->printf("\nThat is not an option.\n");
trane3 22:19b187e345c9 65 interface::startScreen();
trane3 22:19b187e345c9 66 break;
trane3 22:19b187e345c9 67 }
trane3 22:19b187e345c9 68 }
trane3 22:19b187e345c9 69
trane3 22:19b187e345c9 70 void interface::dataScreen(){
trane3 22:19b187e345c9 71 (*pc).printf("\nDCM Data sets:\n");
trane3 22:19b187e345c9 72 (*pc).printf("1. Atrium Data\n2. Ventricle Data\n3. General Data\n4. Egram Data\n5. Back to start page\n");
trane3 22:19b187e345c9 73 (*pc).printf("Choose a data set:");
trane3 22:19b187e345c9 74 char command = getChar();
trane3 22:19b187e345c9 75 switch (command) {
trane3 22:19b187e345c9 76 case '1':
trane3 22:19b187e345c9 77 interface::chamberDataScreen(atrData);
trane3 22:19b187e345c9 78 case '2':
trane3 22:19b187e345c9 79 interface::chamberDataScreen(ventData);
trane3 22:19b187e345c9 80 case '3':
trane3 22:19b187e345c9 81 interface::genDataScreen();
trane3 22:19b187e345c9 82 case '4':
trane3 22:19b187e345c9 83 pc->printf("\nNot setup yet");
trane3 22:19b187e345c9 84 break;
trane3 22:19b187e345c9 85 case '5':
trane3 22:19b187e345c9 86 interface::startScreen();
trane3 22:19b187e345c9 87 default:
trane3 22:19b187e345c9 88 pc->printf("\nThat is not an option.\n");
trane3 22:19b187e345c9 89 interface::dataScreen();
trane3 22:19b187e345c9 90 }
trane3 22:19b187e345c9 91 }
trane3 22:19b187e345c9 92
trane3 22:19b187e345c9 93 void interface::chamberDataScreen(chamberData* chamber){
trane3 22:19b187e345c9 94 if (chamber == atrData)
trane3 22:19b187e345c9 95 pc->printf("\nAtrium Data");
trane3 22:19b187e345c9 96
trane3 22:19b187e345c9 97 if (chamber == ventData)
trane3 22:19b187e345c9 98 pc->printf("\nVentricle Data");
trane3 22:19b187e345c9 99
trane3 22:19b187e345c9 100 pc->printf("\n1. Pace Amplitude: %f", chamber->getPaceAmp()*7);
trane3 22:19b187e345c9 101 pc->printf("\n2. Pace Width: %f", chamber->getPaceWidth());
trane3 22:19b187e345c9 102 pc->printf("\n3. Refractory Period: %f", chamber->getRP());
trane3 22:19b187e345c9 103 pc->printf("\n4. Sensitivity: %f", chamber->getSensitivity());
trane3 22:19b187e345c9 104 pc->printf("\nChoose variable to be changed or 5 To return to Data Sets");
trane3 22:19b187e345c9 105
trane3 22:19b187e345c9 106 char command = getChar();
trane3 22:19b187e345c9 107 switch (command){
trane3 22:19b187e345c9 108 case '1':
trane3 22:19b187e345c9 109 pc->printf("\nChoose New Value for the Pace Amplitude:");
trane3 22:19b187e345c9 110 char* value = getInput();
trane3 22:19b187e345c9 111 int valInRange = chamber->chngPaceAmp(atof(value));
trane3 22:19b187e345c9 112 if(valInRange == 1){
trane3 22:19b187e345c9 113 pc->printf("\t%f",chamber->getPaceAmp()*7);
trane3 22:19b187e345c9 114 }else{
trane3 22:19b187e345c9 115 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 116 }
trane3 22:19b187e345c9 117 interface::dataScreen();
trane3 22:19b187e345c9 118 break;
trane3 22:19b187e345c9 119 case '2':
trane3 22:19b187e345c9 120 pc->printf("\nChoose New Value for the Pace Width:");
trane3 22:19b187e345c9 121 value = getInput();
trane3 22:19b187e345c9 122 valInRange = chamber->chngPaceWidth(atof(value));
trane3 22:19b187e345c9 123 if(valInRange == 1){
trane3 22:19b187e345c9 124 pc->printf("\t%f",chamber->getPaceWidth());
trane3 22:19b187e345c9 125 }else{
trane3 22:19b187e345c9 126 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 127 }
trane3 22:19b187e345c9 128 interface::dataScreen();
trane3 22:19b187e345c9 129 break;
trane3 22:19b187e345c9 130 case '3':
trane3 22:19b187e345c9 131 pc->printf("\nChoose New Value for the Refractory Period:");
trane3 22:19b187e345c9 132 value = getInput();
trane3 22:19b187e345c9 133 valInRange = chamber->chngRP(atof(value));
trane3 22:19b187e345c9 134 if(valInRange == 1){
trane3 22:19b187e345c9 135 pc->printf("\t%f",chamber->getRP());
trane3 22:19b187e345c9 136 }else{
trane3 22:19b187e345c9 137 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 138 }
trane3 22:19b187e345c9 139 interface::dataScreen();
trane3 22:19b187e345c9 140 break;
trane3 22:19b187e345c9 141 case '4':
trane3 22:19b187e345c9 142 pc->printf("\nChoose New Value for the Sensitivity:");
trane3 22:19b187e345c9 143 value = getInput();
trane3 22:19b187e345c9 144 valInRange = chamber->chngSensitivity(atof(value));
trane3 22:19b187e345c9 145 if(valInRange == 1){
trane3 22:19b187e345c9 146 pc->printf("\t%f",chamber->getSensitivity());
trane3 22:19b187e345c9 147 }else{
trane3 22:19b187e345c9 148 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 149 }
trane3 22:19b187e345c9 150 interface::dataScreen();
trane3 22:19b187e345c9 151 break;
trane3 22:19b187e345c9 152 case '5':
trane3 22:19b187e345c9 153 interface::dataScreen();
trane3 22:19b187e345c9 154 break;
trane3 22:19b187e345c9 155 default:
trane3 22:19b187e345c9 156 pc->printf("\nThat is not an option.");
trane3 22:19b187e345c9 157 interface::chamberDataScreen(chamber);
trane3 22:19b187e345c9 158 break;
trane3 22:19b187e345c9 159 }
trane3 22:19b187e345c9 160 }
trane3 22:19b187e345c9 161
trane3 22:19b187e345c9 162 void interface::genDataScreen(){ //moved option 3 from dataScreen() into its own method
trane3 22:19b187e345c9 163 pc->printf("\nGeneral Data");
trane3 22:19b187e345c9 164 pc->printf("\n1. Hysteresis: %s", generalData->getHyst() ? "true" : "false");
trane3 22:19b187e345c9 165 pc->printf("\n2. Hysteresis Rate Limit: %f", generalData->getHystRL());
trane3 22:19b187e345c9 166 pc->printf("\n3. Lower Rate Limit: %f", generalData->getLRL());
trane3 22:19b187e345c9 167 pc->printf("\n4. Upper Rate Limit: %f", generalData->getURL());
trane3 22:19b187e345c9 168 pc->printf("\n5. Atrial-Ventricular Delay: %f", generalData->getAVdelay());
trane3 22:19b187e345c9 169 pc->printf("\n6. Atrial-Ventricular Delay Offset: %f" , generalData->getAVdelayOffset());
trane3 22:19b187e345c9 170 pc->printf("\n7. Rate Smoothing: %f", generalData->getRSmooth());
trane3 22:19b187e345c9 171 pc->printf("\nChoose variable to be changed or 5 To return to Data Sets");
trane3 22:19b187e345c9 172 char command = getChar();
trane3 22:19b187e345c9 173 switch (command) {
trane3 22:19b187e345c9 174 case '1':
trane3 22:19b187e345c9 175 pc->printf("\nSet Hysteresis (t for true, f for false):");
trane3 22:19b187e345c9 176 char* value = getInput();
trane3 22:19b187e345c9 177 if(*value == 't'){
trane3 22:19b187e345c9 178 generalData->chngHyst(true);
trane3 22:19b187e345c9 179 }else if(*value == 'f'){
trane3 22:19b187e345c9 180 generalData->chngHyst(false);
trane3 22:19b187e345c9 181 }else{
trane3 22:19b187e345c9 182 pc->printf("You may only enter 't' or 'f'.");
trane3 22:19b187e345c9 183 }
trane3 22:19b187e345c9 184 pc->printf("%s", generalData->getHyst() ? "true" : "false");
trane3 22:19b187e345c9 185 interface::genDataScreen();
trane3 22:19b187e345c9 186 break;
trane3 22:19b187e345c9 187 case '2':
trane3 22:19b187e345c9 188 pc->printf("\nChoose New Value for Hysteresis Rate Limit:");
trane3 22:19b187e345c9 189 value = getInput();
trane3 22:19b187e345c9 190 int valInRange = generalData->chngHystRL(atof(value));
trane3 22:19b187e345c9 191 if(valInRange == 1){
trane3 22:19b187e345c9 192 pc->printf("\t%f",generalData->getHystRL());
trane3 22:19b187e345c9 193 }else{
trane3 22:19b187e345c9 194 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 195 }
trane3 22:19b187e345c9 196 interface::genDataScreen();
trane3 22:19b187e345c9 197 break;
trane3 22:19b187e345c9 198 case '3':
trane3 22:19b187e345c9 199 pc->printf("\nChoose New Value for the Lower Rate Limit:");
trane3 22:19b187e345c9 200 value = getInput();
trane3 22:19b187e345c9 201 valInRange = generalData->chngLRL(atof(value));
trane3 22:19b187e345c9 202 if(valInRange == 1){
trane3 22:19b187e345c9 203 pc->printf("\t%f",generalData->getLRL());
trane3 22:19b187e345c9 204 }else{
trane3 22:19b187e345c9 205 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 206 }
trane3 22:19b187e345c9 207 interface::genDataScreen();
trane3 22:19b187e345c9 208 break;
trane3 22:19b187e345c9 209 case '4':
trane3 22:19b187e345c9 210 pc->printf("\nChoose New Value for the Upper Rate Limit:");
trane3 22:19b187e345c9 211 value = getInput();
trane3 22:19b187e345c9 212 valInRange = generalData->chngURL(atof(value));
trane3 22:19b187e345c9 213 if(valInRange == 1){
trane3 22:19b187e345c9 214 pc->printf("\t%f",generalData->getURL());
trane3 22:19b187e345c9 215 }else{
trane3 22:19b187e345c9 216 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 217 }
trane3 22:19b187e345c9 218 interface::genDataScreen();
trane3 22:19b187e345c9 219 break;
trane3 22:19b187e345c9 220 case '5':
trane3 22:19b187e345c9 221 pc->printf("\nChoose New Value for the Atrial-Ventricular Delay:");
trane3 22:19b187e345c9 222 value = getInput();
trane3 22:19b187e345c9 223 valInRange = generalData->chngAVdelay(atof(value));
trane3 22:19b187e345c9 224 if(valInRange == 1){
trane3 22:19b187e345c9 225 pc->printf("\t%f",generalData->getAVdelay());
trane3 22:19b187e345c9 226 }else{
trane3 22:19b187e345c9 227 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 228 }
trane3 22:19b187e345c9 229 interface::genDataScreen();
trane3 22:19b187e345c9 230 break;
trane3 22:19b187e345c9 231 case '6':
trane3 22:19b187e345c9 232 pc->printf("\nChoose New Value for the Atrial-Ventricular Delay Offset:");
trane3 22:19b187e345c9 233 value = getInput();
trane3 22:19b187e345c9 234 valInRange = generalData->chngAVdelayOffset(atof(value));
trane3 22:19b187e345c9 235 if(valInRange == 1){
trane3 22:19b187e345c9 236 pc->printf("\t%f",generalData->getAVdelayOffset());
trane3 22:19b187e345c9 237 }else{
trane3 22:19b187e345c9 238 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 239 }
trane3 22:19b187e345c9 240 interface::genDataScreen();
trane3 22:19b187e345c9 241 break;
trane3 22:19b187e345c9 242 case '7':
trane3 22:19b187e345c9 243 pc->printf("\nChoose New Value for the Rate Smoothing:");
trane3 22:19b187e345c9 244 value = getInput();
trane3 22:19b187e345c9 245 valInRange = generalData->chngRSmooth(atof(value));
trane3 22:19b187e345c9 246 if(valInRange == 1){
trane3 22:19b187e345c9 247 pc->printf("\t%f",generalData->getRSmooth());
trane3 22:19b187e345c9 248 }else{
trane3 22:19b187e345c9 249 pc->printf("\nThat value is not within range.");
trane3 22:19b187e345c9 250 }
trane3 22:19b187e345c9 251 interface::genDataScreen();
trane3 22:19b187e345c9 252 break;
trane3 22:19b187e345c9 253 default:
trane3 22:19b187e345c9 254 pc->printf("\nThat is not an option.\n");
trane3 22:19b187e345c9 255 interface::genDataScreen();
trane3 22:19b187e345c9 256 break;
trane3 22:19b187e345c9 257 }
trane3 22:19b187e345c9 258 }
trane3 22:19b187e345c9 259
trane3 22:19b187e345c9 260 char* interface::getInput(){
trane3 22:19b187e345c9 261 char buffer[5];
trane3 22:19b187e345c9 262 fgets (buffer,5,stdin);
trane3 22:19b187e345c9 263 return buffer;
trane3 22:19b187e345c9 264 }
trane3 22:19b187e345c9 265
trane3 22:19b187e345c9 266 char interface::getChar(){
trane3 22:19b187e345c9 267 while(true){
trane3 22:19b187e345c9 268 if(pc->readable()){
trane3 22:19b187e345c9 269 char command = pc->getc();
trane3 22:19b187e345c9 270 return command;
trane3 22:19b187e345c9 271 }
trane3 22:19b187e345c9 272 }
trane3 22:19b187e345c9 273 }
trane3 22:19b187e345c9 274 //****************************
trane3 22:19b187e345c9 275
trane3 22:19b187e345c9 276 //void interface::getAPulse(){ //TODO get this to work, the wait command has issues, see pulse.cpp . wait takes in seconds as argument
trane3 22:19b187e345c9 277 // pulse myPulse(*atr);
trane3 22:19b187e345c9 278 // myPulse.setWidth(1);
trane3 22:19b187e345c9 279 // myPulse.startPulse();
trane3 22:19b187e345c9 280 // }
trane3 22:19b187e345c9 281
trane3 22:19b187e345c9 282 //void interface::LEDon(AnalogOut* out){
trane3 22:19b187e345c9 283 // (*out) = 0;
trane3 22:19b187e345c9 284 //// (*pc).printf(led);
trane3 22:19b187e345c9 285 //}
trane3 22:19b187e345c9 286 //
trane3 22:19b187e345c9 287 //void interface::LEDoff(AnalogOut* out){
trane3 22:19b187e345c9 288 // (*out) = 1;
trane3 22:19b187e345c9 289 //}