Index: firmware/App/HDCommon.h =================================================================== diff -u -r04f72c18f15a3d7ab960fccea7b99cf93fd9a409 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 04f72c18f15a3d7ab960fccea7b99cf93fd9a409) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -39,7 +39,7 @@ // #define TASK_TIMING_OUTPUT_ENABLED 1 // re-purposes alarm lamp pins for task timing #define SKIP_POST 1 // skip POST tests - all pass // #define LIMITED_NVDATA_CRC_CHECKS 1 // only perform POST CRC checks on nv-data records that are implemented so far -// #define DISABLE_ACCELS 1 // disable accelerometer POST and monitoring + #define DISABLE_ACCELS 1 // disable accelerometer POST and monitoring #define DISABLE_CRC_ERROR 1 // do not error on bad CRC for CAN messages #define DISABLE_ACK_ERRORS 1 // do not error on failure of other node(s) to ACK a message #define DISABLE_MOTOR_CURRENT_CHECKS 1 // do not error on HD pump current checks Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r04f72c18f15a3d7ab960fccea7b99cf93fd9a409 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 04f72c18f15a3d7ab960fccea7b99cf93fd9a409) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -43,6 +43,7 @@ static DIALYSIS_STATE_T currentDialysisState; ///< Current state of the dialysis sub-mode state machine. static UF_STATE_T currentUFState; ///< Current state of the ultrafiltration state machine. +static SALINE_BOLUS_STATE_T currentSalineBolusState; ///< Current state of the saline bolus state machine. static F32 refUFVolume; ///< Current reference volume for ultrafiltration (Where should we be w/r/t ultrafiltration). static F32 measUFVolume; ///< Current total measured volume for ultrafiltration (Where are we w/r/t ultrafiltration). @@ -64,7 +65,7 @@ // ********** private function prototypes ********** static DIALYSIS_STATE_T handleDialysisUltrafiltrationState( void ); -static DIALYSIS_STATE_T handleDialysisSolutionInfusionState( void ); +static DIALYSIS_STATE_T handleDialysisSalineBolusState( void ); static UF_STATE_T handleUFStartState( void ); static UF_STATE_T handleUFPausedState( void ); @@ -89,6 +90,7 @@ { currentDialysisState = DIALYSIS_START_STATE; currentUFState = UF_START_STATE; + currentSalineBolusState = SALINE_BOLUS_STATE_IDLE; refUFVolume = 0.0; measUFVolume = 0.0; @@ -168,12 +170,17 @@ *************************************************************************/ void startDialysis( void ) { + // set last UF timestamp so UF ref is resumed from this time lastUFTimeStamp = getMSTimerCount(); + // send dialysate outlet pump latest UF volumes setDialOutUFVolumes( refUFVolume, measUFVolume ); + // restart pumps setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialOutPumpTargetRate( setDialysateFlowRate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - Heparin pump + // tell DG to start heating dialysate + cmdStartDGTrimmerHeater(); } /*********************************************************************//** @@ -188,9 +195,13 @@ *************************************************************************/ void stopDialysis( void ) { + // stop pumps setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialInPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialOutPumpTargetRate( 0, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + // TODO - stop Heparin pump + // tell DG to stop heating dialysate + cmdStopDGTrimmerHeater(); } /*********************************************************************//** @@ -221,6 +232,19 @@ /*********************************************************************//** * @brief + * The getSalineBolusState function gets the current saline bolus state. + * @details + * Inputs : currentSalineBolusState + * Outputs : none + * @return currentSalineBolusState + *************************************************************************/ +SALINE_BOLUS_STATE_T getSalineBolusState( void ) +{ + return currentSalineBolusState; +} + +/*********************************************************************//** + * @brief * The getUltrafiltrationVolumeCollected function gets the current ultrafiltration * volume collected so far for current treatment. * @details @@ -360,7 +384,7 @@ break; case DIALYSIS_SALINE_BOLUS_STATE: - currentDialysisState = handleDialysisSolutionInfusionState(); + currentDialysisState = handleDialysisSalineBolusState(); break; default: @@ -417,11 +441,11 @@ * The handleDialysisSolutionInfusionState function handles the solution * infustion state of the Dialysis state machine. * @details - * Inputs : TBD - * Outputs : TBD + * Inputs : currentSalineBolusState + * Outputs : currentSalineBolusState * @return next Dialysis state. *************************************************************************/ -static DIALYSIS_STATE_T handleDialysisSolutionInfusionState( void ) +static DIALYSIS_STATE_T handleDialysisSalineBolusState( void ) { DIALYSIS_STATE_T result = DIALYSIS_SALINE_BOLUS_STATE; Index: firmware/App/Modes/Dialysis.h =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/Modes/Dialysis.h (.../Dialysis.h) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Modes/Dialysis.h (.../Dialysis.h) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -43,6 +43,7 @@ DIALYSIS_STATE_T getDialysisState( void ); UF_STATE_T getUltrafiltrationState( void ); +SALINE_BOLUS_STATE_T getSalineBolusState( void ); F32 getUltrafiltrationVolumeCollected( void ); BOOL pauseUF( void ); Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r04f72c18f15a3d7ab960fccea7b99cf93fd9a409 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 04f72c18f15a3d7ab960fccea7b99cf93fd9a409) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -298,13 +298,14 @@ } lastTreatmentTimeStamp = newTime; + // end treatment if treatment duration has been reached if ( CALC_ELAPSED_TREAT_TIME_IN_SECS() >= presTreatmentTimeSecs ) { result = TREATMENT_END_STATE; } + // otherwise, execute state machine for treatment dialysis sub-mode else { - // execute state machine for treatment dialysis sub-mode execDialysis(); } @@ -696,7 +697,7 @@ U32 timeRemaining = presTreatmentTimeSecs - elapsedTreatmentTimeInSecs; DIALYSIS_STATE_T dialysisState = getDialysisState(); UF_STATE_T uFState = getUltrafiltrationState(); - BOOL salineBolusInProgress = ( dialysisState == DIALYSIS_SALINE_BOLUS_STATE ? TRUE : FALSE ); + SALINE_BOLUS_STATE_T salineBolusInProgress = getSalineBolusState(); broadcastTreatmentTime( presTreatmentTimeSecs, elapsedTreatmentTimeInSecs, timeRemaining ); broadcastTreatmentState( currentTreatmentState, uFState, salineBolusInProgress ); Index: firmware/App/Modes/ModeTreatmentParams.c =================================================================== diff -u -r5eda37efda2d771de4f5cfb509adf05621a290c3 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision 5eda37efda2d771de4f5cfb509adf05621a290c3) +++ firmware/App/Modes/ModeTreatmentParams.c (.../ModeTreatmentParams.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -57,7 +57,7 @@ { CRITICAL_DATA_TYPE_U32, {.uInt=100}, {.uInt=500}, {.uInt=100} }, // TREATMENT_PARAM_BLOOD_FLOW { CRITICAL_DATA_TYPE_U32, {.uInt=100}, {.uInt=600}, {.uInt=100} }, // TREATMENT_PARAM_DIALYSATE_FLOW { CRITICAL_DATA_TYPE_U32, {.uInt=60}, {.uInt=480}, {.uInt=240} }, // TREATMENT_PARAM_TREATMENT_DURATION - { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=120}, {.uInt=0} }, // TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME + { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=480}, {.uInt=0} }, // TREATMENT_PARAM_HEPARIN_PRE_STOP_TIME { CRITICAL_DATA_TYPE_U32, {.uInt=100}, {.uInt=300}, {.uInt=100} }, // TREATMENT_PARAM_SALINE_BOLUS_VOLUME { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=2}, {.uInt=0} }, // TREATMENT_PARAM_ACID_CONCENTRATE { CRITICAL_DATA_TYPE_U32, {.uInt=0}, {.uInt=0}, {.uInt=0} }, // TREATMENT_PARAM_BICARB_CONCENTRATE @@ -67,7 +67,7 @@ { CRITICAL_DATA_TYPE_S32, {.sInt=-300}, {.sInt=200}, {.sInt=-300} }, // TREATMENT_PARAM_ART_PRESSURE_LOW_LIMIT { CRITICAL_DATA_TYPE_S32, {.sInt=-300}, {.sInt=200}, {.sInt=100} }, // TREATMENT_PARAM_ART_PRESSURE_HIGH_LIMIT { CRITICAL_DATA_TYPE_S32, {.sInt=-100}, {.sInt=600}, {.sInt=-100} }, // TREATMENT_PARAM_VEN_PRESSURE_LOW_LIMIT - { CRITICAL_DATA_TYPE_S32, {.sInt=-100}, {.sInt=600}, {.sInt=400} }, // TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT + { CRITICAL_DATA_TYPE_S32, {.sInt=100}, {.sInt=600}, {.sInt=400} }, // TREATMENT_PARAM_VEN_PRESSURE_HIGH_LIMIT { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=1.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_HEPARIN_DISPENSE_RATE { CRITICAL_DATA_TYPE_F32, {.sFlt=0.0}, {.sFlt=2.0}, {.sFlt=0.0} }, // TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME { CRITICAL_DATA_TYPE_F32, {.sFlt=35.0}, {.sFlt=38.0}, {.sFlt=37.0} }, // TREATMENT_PARAM_DIALYSATE_TEMPERATURE Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r5eda37efda2d771de4f5cfb509adf05621a290c3 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 5eda37efda2d771de4f5cfb509adf05621a290c3) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -1045,7 +1045,7 @@ * @param salineBolusState 1=saline bolus in progress, 0=not, 2=max bolus volume reached * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastTreatmentState( U32 subMode, U32 uFState, BOOL salineBolusState ) +BOOL broadcastTreatmentState( U32 subMode, U32 uFState, U32 salineBolusState ) { BOOL result; MESSAGE_T msg; Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r8dad6fab1c33602ad94908fd31b8b15153a9eb6e -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 8dad6fab1c33602ad94908fd31b8b15153a9eb6e) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -173,7 +173,7 @@ BOOL broadcastTreatmentTime( U32 secsTotTreatment, U32 secsElapsed, U32 secsRemaining ); // MSG_ID_TREATMENT_STATE -BOOL broadcastTreatmentState( U32 subMode, U32 uFState, BOOL salineBolusState ); +BOOL broadcastTreatmentState( U32 subMode, U32 uFState, U32 salineBolusState ); // MSG_ID_POWER_OFF_WARNING BOOL broadcastPowerOffWarning( void ); Index: firmware/source/sys_main.c =================================================================== diff -u -rc84daa1f07003427fc5cdde8f5651434478f7313 -rb0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11 --- firmware/source/sys_main.c (.../sys_main.c) (revision c84daa1f07003427fc5cdde8f5651434478f7313) +++ firmware/source/sys_main.c (.../sys_main.c) (revision b0b3522f2bd0b5b20ecbfd53c8f55b0e646ffa11) @@ -162,27 +162,35 @@ *************************************************************************/ static void initSoftware( void ) { - initAlarmMgmt(); + // initialize ms timer counter initTimers(); + // initialize alarm manager + initAlarmMgmt(); + // initialize drivers initCPLD(); initSafetyShutdown(); - initWatchdogMgmt(); - initInterrupts(); - initFPGA(); - initAlarmLamp(); - initButtons(); initInternalADC(); + initRTC(); + // initialize services initCommBuffers(); + initFPGA(); initMsgQueues(); + initNVDataMgmt(); initSystemComm(); + initWatchdogMgmt(); + // initialize monitors + initAccel(); + initButtons(); initPresOccl(); + // initialize controllers + initAlarmLamp(); initBloodFlow(); initDialInFlow(); initDialOutFlow(); - initAccel(); + // initialize modes initOperationModes(); - initRTC(); - initNVDataMgmt(); + // initialize async interrupt handlers + initInterrupts(); } /*************************************************************************