Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r766708fceb0bdf1af8c7897df29d4f5036bfd3db -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 766708fceb0bdf1af8c7897df29d4f5036bfd3db) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -954,6 +954,7 @@ BOOL result = TRUE; #ifndef DISABLE_3WAY_VALVES +#ifndef DISABLE_VALVE_ALARMS // Get the status of the valves from FPGA U16 status = getFPGAValvesStatus(); @@ -999,6 +1000,7 @@ } } #endif +#endif return result; } Index: firmware/App/HDCommon.h =================================================================== diff -u -r1c1a8d0528f19da5d94bdf75f687bbb1d1de6f0e -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 1c1a8d0528f19da5d94bdf75f687bbb1d1de6f0e) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -41,17 +41,17 @@ #define DISABLE_AIR_TRAP_LEVELING 1 // Disable air trap level control // #define DISABLE_3WAY_VALVES 1 // Disable 3-way valves // #define TST_3WAY_VALVES_ALWAYS_OPEN 1 // After POST and homing, open all 4 valves - #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_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 // #define DISABLE_PUMP_FLOW_CHECKS 1 // Do not error on HD pump flow checks // #define DISABLE_PUMP_SPEED_CHECKS 1 // Do not error on HD pump speed checks // #define DISABLE_PUMP_DIRECTION_CHECKS 1 // Do not error on HD pump direction checks // #define DISABLE_SALINE_BOLUS_CHECKS 1 // Do not error on HD saline bolus checks -// #define DISABLE_PRESSURE_CHECKS 1 // Do not error on HD pressure checks + #define DISABLE_PRESSURE_CHECKS 1 // Do not error on HD pressure checks // #define DISABLE_UF_ALARMS 1 // Do not error on HD ultrafiltration checks -// #define DISABLE_VALVE_ALARMS 1 // Do not error on HD valve position + #define DISABLE_VALVE_ALARMS 1 // Do not error on HD valve position // #define RUN_PUMPS_OPEN_LOOP 1 // BP and DPi pumps will be run open loop (no flow sensor feedback) // #define RAW_FLOW_SENSOR_DATA 1 // Test build will not filter flow sensor data // #define READ_FPGA_ASYNC_DATA 1 // Test build reads non-priority register page every other time Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r8fa91045469955886a4e09a248c22459af177245 -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 8fa91045469955886a4e09a248c22459af177245) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -184,7 +184,7 @@ *************************************************************************/ void transitionToDialysis( void ) { - startAirTrapControl(); // TODO - do we need to start this sooner? After prime? + startAirTrapControl(); // TODO - do we need to start this sooner? After prime? start/stop as needed depending on mode/sub-mode (e.g. dialysis, rinseback, prime, ...)? } /*********************************************************************//** Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r766708fceb0bdf1af8c7897df29d4f5036bfd3db -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 766708fceb0bdf1af8c7897df29d4f5036bfd3db) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -29,14 +29,14 @@ static BOOL treatStartReqReceived = FALSE; ///< Flag indicates user requests treatment begin. -static PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. +static HD_PRE_TREATMENT_MODE_STATE_T currentPreTreatmentState; ///< Current state of pre-treatment mode state machine. // ********** private function prototypes ********** -static PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); -static PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); -static PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); -static PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); +static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ); +static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ); +static HD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ); +static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ); /*********************************************************************//** * @brief @@ -47,7 +47,7 @@ *************************************************************************/ void initPreTreatmentMode( void ) { - currentPreTreatmentState = PRE_TREATMENT_START_STATE; + currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; } /*********************************************************************//** @@ -67,7 +67,7 @@ setAlarmUserActionEnabled( ALARM_USER_ACTION_RINSEBACK, FALSE ); setAlarmUserActionEnabled( ALARM_USER_ACTION_END_TREATMENT, TRUE ); - currentPreTreatmentState = PRE_TREATMENT_START_STATE; + currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; } /*********************************************************************//** @@ -82,46 +82,42 @@ // execute mode state machine switch ( currentPreTreatmentState ) { - case PRE_TREATMENT_START_STATE: + case HD_PRE_TREATMENT_START_STATE: cmdStartDG(); cmdSetDGDialysateTargetTemps( 39.0, 37.0 ); - currentPreTreatmentState = PRE_TREATMENT_WATER_SAMPLE_STATE; + currentPreTreatmentState = HD_PRE_TREATMENT_WATER_SAMPLE_STATE; break; - case PRE_TREATMENT_WATER_SAMPLE_STATE: - currentPreTreatmentState = PRE_TREATMENT_SELF_TEST_NO_CART_STATE; + case HD_PRE_TREATMENT_WATER_SAMPLE_STATE: + currentPreTreatmentState = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; break; - case PRE_TREATMENT_SELF_TEST_NO_CART_STATE: + case HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE: currentPreTreatmentState = handleSelfTestNoCartState(); break; - case PRE_TREATMENT_CART_INSTALL_STATE: - currentPreTreatmentState = PRE_TREATMENT_SELF_TEST_DRY_STATE; + case HD_PRE_TREATMENT_CART_INSTALL_STATE: + currentPreTreatmentState = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; break; - case PRE_TREATMENT_SELF_TEST_DRY_STATE: + case HD_PRE_TREATMENT_SELF_TEST_DRY_STATE: currentPreTreatmentState = handleSelfTestDryState(); break; - case PRE_TREATMENT_PRIME_STATE: + case HD_PRE_TREATMENT_PRIME_STATE: currentPreTreatmentState = handlePrimeState(); break; - case PRE_TREATMENT_SELF_TEST_WET_STATE: - currentPreTreatmentState = PRE_TREATMENT_RECIRC_STATE; + case HD_PRE_TREATMENT_RECIRCULATE_STATE: + currentPreTreatmentState = HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; break; - case PRE_TREATMENT_RECIRC_STATE: - currentPreTreatmentState = PRE_TREATMENT_PATIENT_CONNECTION_STATE; - break; - - case PRE_TREATMENT_PATIENT_CONNECTION_STATE: + case HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE: currentPreTreatmentState = handlePatientConnectionState(); break; default: - currentPreTreatmentState = PRE_TREATMENT_START_STATE; + currentPreTreatmentState = HD_PRE_TREATMENT_START_STATE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_INVALID_STATE, (U32)currentPreTreatmentState ); break; } @@ -172,7 +168,7 @@ * @details Outputs: home blood pump and dialysate pumps * @return current state (sub-mode) *************************************************************************/ -static PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ) +static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestNoCartState( void ) { // TODO: Prompt user to close door @@ -182,7 +178,7 @@ // TODO: Prompt user to open door - return PRE_TREATMENT_CART_INSTALL_STATE; + return HD_PRE_TREATMENT_CART_INSTALL_STATE; } /*********************************************************************//** @@ -192,14 +188,14 @@ * @details Outputs: transition to prime sub-mode when blood pump finished homing * @return current state (sub-mode) *************************************************************************/ -static PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ) +static HD_PRE_TREATMENT_MODE_STATE_T handleSelfTestDryState( void ) { - PRE_TREATMENT_MODE_STATE_T state = PRE_TREATMENT_CART_INSTALL_STATE; + HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_CART_INSTALL_STATE; if ( FALSE == isBloodPumpRunning() ) { transitionToPrime(); - state = PRE_TREATMENT_PRIME_STATE; + state = HD_PRE_TREATMENT_PRIME_STATE; } return state; @@ -212,15 +208,15 @@ * @details Outputs: transition to self test wet state after priming passed * @return current state (sub-mode) *************************************************************************/ -static PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ) +static HD_PRE_TREATMENT_MODE_STATE_T handlePrimeState( void ) { - PRE_TREATMENT_MODE_STATE_T state = PRE_TREATMENT_PRIME_STATE; + HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_PRIME_STATE; execPrime(); if ( TRUE == isPrimingPassed() ) { - state = PRE_TREATMENT_SELF_TEST_WET_STATE; + state = HD_PRE_TREATMENT_RECIRCULATE_STATE; } return state; @@ -234,14 +230,14 @@ * @details Outputs: requested mode transition to treatment mode * @return current state (sub-mode) *************************************************************************/ -static PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ) +static HD_PRE_TREATMENT_MODE_STATE_T handlePatientConnectionState( void ) { if ( TRUE == treatStartReqReceived ) { requestNewOperationMode( MODE_TREA ); } - return PRE_TREATMENT_PATIENT_CONNECTION_STATE; + return HD_PRE_TREATMENT_PATIENT_CONNECTION_STATE; } /**@}*/ Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r30f049651877229042e3f8700c8596e5b9a1e0f4 -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 30f049651877229042e3f8700c8596e5b9a1e0f4) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -223,11 +223,11 @@ currentTreatmentState = TREATMENT_DIALYSIS_STATE; break; - case TREATMENT_RINSEBACK_PAUSE_STATE: + case TREATMENT_RINSEBACK_STATE: // TODO - implement break; - case TREATMENT_RECIRC_PAUSE_STATE: + case TREATMENT_RECIRC_STATE: // TODO - implement break; @@ -291,26 +291,10 @@ // TODO - implement break; - case TREATMENT_RINSEBACK_PAUSE_STATE: - // TODO - implement - break; - - case TREATMENT_RECIRC_SETUP_STATE: - // TODO - implement - break; - case TREATMENT_RECIRC_STATE: // TODO - implement break; - case TREATMENT_RECIRC_PAUSE_STATE: - // TODO - implement - break; - - case TREATMENT_RECIRC_STOP_STATE: - // TODO - implement - break; - case TREATMENT_DIALYSIS_END_STATE: // TODO - implement break; Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rc7ffa13e306681a647ad25513a89250c6918e6a4 -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/Modes/Prime.c (.../Prime.c) (revision c7ffa13e306681a647ad25513a89250c6918e6a4) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -52,7 +52,7 @@ // ********** private data ********** -static PRE_TREATMENT_PRIME_STATE_T currentPrimeState; ///< Current state of the prime sub-mode state machine. +static HD_PRE_TREATMENT_PRIME_STATE_T currentPrimeState; ///< Current state of the prime sub-mode state machine. static PRIME_RESERVOIR_MGMT_STATE_T currentReservoirMgmtState; ///< Current reservoir management state. static BOOL isPrimeCompleted; ///< Status if prime sequence has been completed. @@ -66,11 +66,11 @@ static void execPreTreatmentReservoirMgmt( void ); static void purgeAirValvesBloodPumpControl( void ); -static PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ); -static PRE_TREATMENT_PRIME_STATE_T handlePrimePurgeAirState( void ); -static PRE_TREATMENT_PRIME_STATE_T handlePrimeCircBloodCircuitState( void ); -static PRE_TREATMENT_PRIME_STATE_T handlePrimeReservoirOneFillCompleteState( void ); -static PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateDialyzerState( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimePurgeAirState( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeCircBloodCircuitState( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeReservoirOneFillCompleteState( void ); +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateDialyzerState( void ); /*********************************************************************//** * @brief @@ -95,7 +95,7 @@ *************************************************************************/ void transitionToPrime( void ) { - currentPrimeState = PRIME_START_STATE; + currentPrimeState = HD_PRIME_START_STATE; currentReservoirMgmtState = PRIME_RESERVOIR_MGMT_START_STATE; isPrimeCompleted = FALSE; // TODO: set to false after integration with UI @@ -118,33 +118,33 @@ // execute prime sub-mode state machine switch ( currentPrimeState ) { - case PRIME_START_STATE: + case HD_PRIME_START_STATE: cmdSetDGActiveReservoir( DG_RESERVOIR_2 ); - currentPrimeState = PRIME_SALINE_SETUP_STATE; + currentPrimeState = HD_PRIME_SALINE_SETUP_STATE; break; - case PRIME_SALINE_SETUP_STATE: + case HD_PRIME_SALINE_SETUP_STATE: currentPrimeState = handlePrimeSalineSetupState(); break; - case PRIME_SALINE_PURGE_AIR_STATE: + case HD_PRIME_SALINE_PURGE_AIR_STATE: currentPrimeState = handlePrimePurgeAirState(); break; - case PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE: + case HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE: currentPrimeState = handlePrimeCircBloodCircuitState(); break; - case PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE: + case HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE: currentPrimeState = handlePrimeReservoirOneFillCompleteState(); break; - case PRIME_DIALYSATE_DIALYZER_STATE: + case HD_PRIME_DIALYSATE_DIALYZER_STATE: currentPrimeState = handlePrimeDialysateDialyzerState(); break; default: - currentPrimeState = PRIME_START_STATE; + currentPrimeState = HD_PRIME_START_STATE; SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_PRE_TREATMENT_PRIME_INVALID_STATE, (U32)currentReservoirMgmtState ); break; } @@ -277,15 +277,15 @@ * @details Outputs: control valves to purge air * @return current state *************************************************************************/ -static PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ) +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeSalineSetupState( void ) { - PRE_TREATMENT_PRIME_STATE_T state = PRIME_SALINE_SETUP_STATE; + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_SETUP_STATE; if ( TRUE == primeStartReqReceived ) { purgeAirValvesBloodPumpControl(); purgeAirTimeOutTimerCount = 0; - state = PRIME_SALINE_PURGE_AIR_STATE; + state = HD_PRIME_SALINE_PURGE_AIR_STATE; } return state; @@ -299,9 +299,9 @@ * @details Outputs: runs blood pump, control valves to trap air * @return current state *************************************************************************/ -static PRE_TREATMENT_PRIME_STATE_T handlePrimePurgeAirState( void ) +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimePurgeAirState( void ) { - PRE_TREATMENT_PRIME_STATE_T state = PRIME_SALINE_PURGE_AIR_STATE; + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_PURGE_AIR_STATE; if ( ++purgeAirTimeOutTimerCount > PURGE_AIR_TIME_OUT_COUNT ) { @@ -318,7 +318,7 @@ setBloodPumpTargetFlowRate( BLOOD_PUMP_FLOW_RATE_CIRC_BLOOD_CIRCUIT, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); noAirDetectedTimerCounter = 0; - state = PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE; + state = HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE; } return state; @@ -333,21 +333,21 @@ * @details Outputs: stop blood pump, control valves to purge air * @return current state *************************************************************************/ -static PRE_TREATMENT_PRIME_STATE_T handlePrimeCircBloodCircuitState( void ) +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeCircBloodCircuitState( void ) { - PRE_TREATMENT_PRIME_STATE_T state = PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE; + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_SALINE_CIRC_BLOOD_CIRCUIT_STATE; if ( AIR_TRAP_LEVEL_AIR == getAirTrapLevel( AIR_TRAP_LEVEL_SENSOR_LOWER ) ) { purgeAirValvesBloodPumpControl(); purgeAirTimeOutTimerCount = 0; - state = PRIME_SALINE_PURGE_AIR_STATE; + state = HD_PRIME_SALINE_PURGE_AIR_STATE; } if ( ++noAirDetectedTimerCounter > NO_AIR_DETECTED_COUNT ) { signalBloodPumpHardStop(); - state = PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; + state = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; } return state; @@ -361,13 +361,13 @@ * @details Outputs: none * @return current state *************************************************************************/ -static PRE_TREATMENT_PRIME_STATE_T handlePrimeReservoirOneFillCompleteState( void ) +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeReservoirOneFillCompleteState( void ) { - PRE_TREATMENT_PRIME_STATE_T state = PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; + HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_RESERVOIR_ONE_FILL_COMPLETE_STATE; if ( TRUE == reservoirFilledStatus[ DG_RESERVOIR_1 ] ) { - state = PRIME_DIALYSATE_DIALYZER_STATE; + state = HD_PRIME_DIALYSATE_DIALYZER_STATE; } return state; @@ -381,11 +381,11 @@ * @details Outputs: isPrimeCompleted * @return current state *************************************************************************/ -static PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateDialyzerState( void ) +static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateDialyzerState( void ) { // TODO: Add priming for dialysate circuit isPrimeCompleted = TRUE; - return PRIME_DIALYSATE_DIALYZER_STATE; + return HD_PRIME_DIALYSATE_DIALYZER_STATE; } /**@}*/ Index: firmware/App/Modes/Rinseback.c =================================================================== diff -u --- firmware/App/Modes/Rinseback.c (revision 0) +++ firmware/App/Modes/Rinseback.c (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -0,0 +1,85 @@ +/************************************************************************** +* +* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file Rinseback.c +* +* @author (last) Sean Nash +* @date (last) 14-Jan-2021 +* +* @author (original) Sean +* @date (original) 14-Jan-2021 +* +***************************************************************************/ + +#include "AirTrap.h" +#include "Buttons.h" +#include "ModeTreatment.h" +#include "OperationModes.h" +#include "Rinseback.h" +#include "Valves.h" + +/** + * @addtogroup Rinseback + * @{ + */ + +// ********** private data ********** + +static RINSEBACK_STATE_T rinsebackState; ///< Current state of the rinseback sub-mode. + +// ********** private function prototypes ********** + +/*********************************************************************//** + * @brief + * The initRinseback function initializes the Rinseback sub-mode module. + * @details Inputs: none + * @details Outputs: Rinseback sub-mode module initialized. + * @return none + *************************************************************************/ +void initRinseback( void ) +{ + rinsebackState = RINSEBACK_STOP_INIT_STATE; +} + +/*********************************************************************//** + * @brief + * The transitionToRinseback function prepares for transition to Rinseback + * sub-mode. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void transitionToRinseback( void ) +{ + initRinseback(); + + // Set valves to safe state + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); + setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); + // Reset saline bolus state in case alarm interrupted one + resetSalineBolus(); + // Stop air trap control + endAirTrapControl(); + // Should always have stopped alarm active in treatment stop sub-mode so that user can take action + activateAlarmNoData( ALARM_ID_TREATMENT_STOPPED_BY_USER ); +} + +/*********************************************************************//** + * @brief + * The execRinseback function executes the Rinseback sub-mode state machine. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void execRinseback( void ) +{ + // TODO - implement +} + +/**@}*/ Index: firmware/App/Modes/Rinseback.h =================================================================== diff -u --- firmware/App/Modes/Rinseback.h (revision 0) +++ firmware/App/Modes/Rinseback.h (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -0,0 +1,43 @@ +/************************************************************************** +* +* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file Rinseback.h +* +* @author (last) Sean Nash +* @date (last) 14-Jan-2021 +* +* @author (original) Sean +* @date (original) 14-Jan-2021 +* +***************************************************************************/ + +#ifndef __RINSEBACK_H__ +#define __RINSEBACK_H__ + +#include "HDCommon.h" +#include "HDDefs.h" + +/** + * @defgroup Rinseback Rinseback + * @brief Rinseback sub-mode of treatment mode. + * The rinseback state is where operational control goes when user chooses + * to do a blood rinseback (mid-treatment or end of treatment) in order to + * disconnect from the system. + * + * @addtogroup Rinseback + * @{ + */ + +// ********** private function prototypes ********** + +void initRinseback( void ); +void transitionToRinseback( void ); +void execRinseback( void ); + +/**@}*/ + +#endif Index: firmware/App/Modes/TreatmentRecirc.c =================================================================== diff -u --- firmware/App/Modes/TreatmentRecirc.c (revision 0) +++ firmware/App/Modes/TreatmentRecirc.c (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -0,0 +1,87 @@ +/************************************************************************** +* +* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file TreatmentRecirc.c +* +* @author (last) Sean Nash +* @date (last) 14-Jan-2021 +* +* @author (original) Sean +* @date (original) 14-Jan-2021 +* +***************************************************************************/ + +#include "AirTrap.h" +#include "Buttons.h" +#include "ModeTreatment.h" +#include "OperationModes.h" +#include "TreatmentRecirc.h" +#include "Valves.h" + +/** + * @addtogroup TreatmentRecirculate + * @{ + */ + +// ********** private data ********** + +static TREATMENT_RECIRC_STATE_T treatmentRecircState; ///< Current state of the treatment re-circulate sub-mode. + +// ********** private function prototypes ********** + +/*********************************************************************//** + * @brief + * The initTreatmentRecirc function initializes the Treatment Re-circulate sub-mode + * module. + * @details Inputs: none + * @details Outputs: Treatment Re-circulate sub-mode module initialized. + * @return none + *************************************************************************/ +void initTreatmentRecirc( void ) +{ + treatmentRecircState = TREATMENT_RECIRC_RECIRC_STATE; +} + +/*********************************************************************//** + * @brief + * The transitionToTreatmentRecirc function prepares for transition to treatment + * re-circulate sub-mode. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void transitionToTreatmentRecirc( void ) +{ + initTreatmentRecirc(); + + // Set valves to safe state + setValvePosition( VDI, VALVE_POSITION_C_CLOSE ); + setValvePosition( VDO, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBA, VALVE_POSITION_C_CLOSE ); + setValvePosition( VBV, VALVE_POSITION_C_CLOSE ); + // Reset saline bolus state in case alarm interrupted one + resetSalineBolus(); + // Stop air trap control + endAirTrapControl(); + // Should always have stopped alarm active in treatment stop sub-mode so that user can take action + activateAlarmNoData( ALARM_ID_TREATMENT_STOPPED_BY_USER ); +} + +/*********************************************************************//** + * @brief + * The execTreatmentRecirc function executes the Treatment circulate sub-mode + * state machine. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void execTreatmentRecirc( void ) +{ + // TODO - implement +} + +/**@}*/ Index: firmware/App/Modes/TreatmentRecirc.h =================================================================== diff -u --- firmware/App/Modes/TreatmentRecirc.h (revision 0) +++ firmware/App/Modes/TreatmentRecirc.h (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -0,0 +1,42 @@ +/************************************************************************** +* +* Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file TreatmentRecirc.h +* +* @author (last) Sean Nash +* @date (last) 14-Jan-2021 +* +* @author (original) Sean +* @date (original) 14-Jan-2021 +* +***************************************************************************/ + +#ifndef __TREATMENT_RECIRC_H__ +#define __TREATMENT_RECIRC_H__ + +#include "HDCommon.h" +#include "HDDefs.h" + +/** + * @defgroup TreatmentRecirculate TreatmentRecirculate + * @brief Treatment recirculate sub-mode of treatment mode. + * The treatment re-circulate state manages saline and dialysate re-circulation + * during patient breaks while patient is not connected to the system. + * + * @addtogroup TreatmentRecirculate + * @{ + */ + +// ********** private function prototypes ********** + +void initTreatmentRecirc( void ); +void transitionToTreatmentRecirc( void ); +void execTreatmentRecirc( void ); + +/**@}*/ + +#endif Index: firmware/App/Modes/TreatmentStop.h =================================================================== diff -u -rde5a0d43bdef611d963d11855bc958a8d8899a09 -rc539499ea2dee6d62194d573ac93b313d9e2936d --- firmware/App/Modes/TreatmentStop.h (.../TreatmentStop.h) (revision de5a0d43bdef611d963d11855bc958a8d8899a09) +++ firmware/App/Modes/TreatmentStop.h (.../TreatmentStop.h) (revision c539499ea2dee6d62194d573ac93b313d9e2936d) @@ -24,6 +24,9 @@ /** * @defgroup TreatmentStop TreatmentStop * @brief Treatment stop sub-mode of treatment mode. + * The treatment stop state is where operational control goes when an alarm + * stops (pauses) treatment. From this state the user may resume treatment, + * initiate a rinseback, or end the treatment. * * @addtogroup TreatmentStop * @{