Index: firmware/App/Controllers/DGInterface.c =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/Controllers/DGInterface.c (.../DGInterface.c) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -36,7 +36,6 @@ #define RESERVOIR_SETTLE_TIME_MS 5000 ///< Time (in ms) allotted for reservoir to settle (after fill, before drain). -#define SIZE_OF_SMALL_LOAD_CELL_AVG 8 ///< Small load cell moving average has 8 samples. #define SIZE_OF_LARGE_LOAD_CELL_AVG 32 ///< Large load cell moving average has 32 samples. /// States of the treatment reservoir management state machine. @@ -49,7 +48,7 @@ TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE, ///< Wait for fill to complete. TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE, ///< Wait a bit for filled reservoir to settle before getting baseline weight (volume). TREATMENT_RESERVOIR_MGMT_WAIT_FOR_RES_SWITCH_STATE, ///< Wait for active reservoir to be consumed and switch cmd given - then back to flush DG lines state. - TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE, ///< Wait for inactive reservoir to settle before getting final weight (volume) before starting to drain. + TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE, ///< Wait for inactive reservoir to settle before getting final weight (volume) before starting to drain. NUM_OF_TREATMENT_RESERVOIR_MGMT_STATES ///< Number of treatment reservoir mgmt. states. } TREATMENT_RESERVOIR_MGMT_STATE_T; @@ -78,16 +77,10 @@ /// Measured weight from load cells. static OVERRIDE_F32_T loadCellWeightInGrams[ NUM_OF_LOAD_CELLS ]; -/// Filtered (8 sample) weight of reservoirs. -static F32 smFilteredReservoirWeightInGrams[ NUM_OF_DG_RESERVOIRS ]; /// Filtered (32 sample) weight of reservoirs. static F32 lgFilteredReservoirWeightInGrams[ NUM_OF_DG_RESERVOIRS ]; // Load cell filtering data -/// Holds load cell samples for small load cell moving average. -static F32 smLoadCellReadings[ NUM_OF_DG_RESERVOIRS ][ SIZE_OF_SMALL_LOAD_CELL_AVG ]; -static U32 smLoadCellReadingsIdx = 0; ///< Index for next sample in small load cell rolling average sample array. -static F32 smLoadCellReadingsTotal[ NUM_OF_DG_RESERVOIRS ]; ///< Rolling total - used to calc small load cell moving average. /// Holds load cell samples for large load cell moving average. static F32 lgLoadCellReadings[ NUM_OF_DG_RESERVOIRS ][ SIZE_OF_LARGE_LOAD_CELL_AVG ]; static U32 lgLoadCellReadingsIdx = 0; ///< Index for next sample in large load cell rolling average sample array. @@ -145,12 +138,7 @@ // initialize reservoirs weights for ( i = 0; i < NUM_OF_DG_RESERVOIRS; i++ ) { - smFilteredReservoirWeightInGrams[ i ] = 0.0; lgFilteredReservoirWeightInGrams[ i ] = 0.0; - for ( j = 0; j < SIZE_OF_SMALL_LOAD_CELL_AVG; j++ ) - { - smLoadCellReadings[ i ][ j ] = 0.0; - } for ( j = 0; j < SIZE_OF_LARGE_LOAD_CELL_AVG; j++ ) { lgLoadCellReadings[ i ][ j ] = 0.0; @@ -165,9 +153,6 @@ dgCmdResp[ i ].rejectCode = DG_CMD_REQUEST_REJECT_REASON_NONE; } - smLoadCellReadingsIdx = 0; - smLoadCellReadingsTotal[ DG_RESERVOIR_1 ] = 0.0; - smLoadCellReadingsTotal[ DG_RESERVOIR_2 ] = 0.0; lgLoadCellReadingsIdx = 0; lgLoadCellReadingsTotal[ DG_RESERVOIR_1 ] = 0.0; lgLoadCellReadingsTotal[ DG_RESERVOIR_2 ] = 0.0; @@ -204,6 +189,19 @@ resMgmtTimer = 0; resUseTimer = getMSTimerCount(); resUseVolumeMl = 0.0; +} + +/*********************************************************************//** + * @brief + * The dialysisResumed function initializes the reservoir re-use timer + * when dialysis is started/resumed so that dialysate usage can be tracked. + * @details Inputs: none + * @details Outputs: resUseTimer + * @return none + *************************************************************************/ +void dialysisResumed( void ) +{ + resUseTimer = getMSTimerCount(); } /*********************************************************************//** @@ -220,22 +218,22 @@ U32 dgSubMode = getDGSubMode(); U32 msSinceLastVolumeCalc = calcTimeSince( resUseTimer ); F32 flowRateMlPerMs = (F32)getTargetDialInFlowRate() / (F32)( MS_PER_SECOND * SEC_PER_MIN ); - + // Calculate volume used from active reservoir - do not accumulate if saline bolus in progress if ( SALINE_BOLUS_STATE_IN_PROGRESS != getSalineBolusState() ) { resUseVolumeMl += ( flowRateMlPerMs * msSinceLastVolumeCalc ); // TODO - should this calc be done and kept by Dialysis sub-mode? } - resUseTimer = getMSTimerCount(); - + resUseTimer = getMSTimerCount(); + // Treatment reservoir mgmt. state machine switch ( currentTrtResMgmtState ) { case TREATMENT_RESERVOIR_MGMT_START_STATE: currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE; break; - case TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: + case TREATMENT_RESERVOIR_MGMT_FLUSH_DG_LINES_STATE: if ( DG_MODE_CIRC == dgOpMode ) { if ( DG_RECIRCULATE_MODE_STATE_RECIRC_WATER == dgSubMode ) @@ -256,7 +254,7 @@ case TREATMENT_RESERVOIR_MGMT_DRAIN_RESERVOIR_STATE: if ( DG_MODE_CIRC == dgOpMode ) { - currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE; + currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_WAIT_TO_FILL_STATE; } break; @@ -279,7 +277,7 @@ if ( DG_MODE_FILL == dgOpMode ) { currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE; - } + } break; case TREATMENT_RESERVOIR_MGMT_FILL_RESERVOIR_STATE: @@ -326,8 +324,8 @@ // Reset to start state to restart drain, fill, switch process. currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; } - break; - + break; + default: // TODO - s/w fault currentTrtResMgmtState = TREATMENT_RESERVOIR_MGMT_START_STATE; @@ -470,13 +468,13 @@ /*********************************************************************//** * @brief - * The getLoadCellWeightInGrams function gets the load cell weight. + * The getLoadCellWeight function gets the current load cell weight. * @details Inputs: loadCellWeightInGrams * @details Outputs: none * @param loadCellID ID of load cell to get * @return the current load cell weight in grams *************************************************************************/ -F32 getLoadCellWeightInGrams( LOAD_CELL_ID_T loadCellID ) +F32 getLoadCellWeight( LOAD_CELL_ID_T loadCellID ) { F32 result = 0.0; @@ -501,27 +499,6 @@ /*********************************************************************//** * @brief - * The getReservoirWeightSmallFilter function gets the load cell weight - * of the given reservoir after small (8 sample) filter applied. - * @details Inputs: lgFilteredReservoirWeightInGrams[] - * @details Outputs: none - * @param resID ID of reservoir to get filtered weight for - * @return the current filtered weight of the given reservoir in grams - *************************************************************************/ -F32 getReservoirWeightSmallFilter( DG_RESERVOIR_ID_T resID ) -{ - F32 result = 0.0; - - if ( resID < NUM_OF_DG_RESERVOIRS ) - { - result = smFilteredReservoirWeightInGrams[ resID ]; - } - - return result; -} - -/*********************************************************************//** - * @brief * The getReservoirWeightLargeFilter function gets the load cell weight * of the given reservoir after large (32 sample) filter applied. * @details Inputs: lgFilteredReservoirWeightInGrams[] @@ -697,16 +674,11 @@ for ( res = DG_RESERVOIR_1; res < NUM_OF_DG_RESERVOIRS; res++ ) { F32 wt = ( res == DG_RESERVOIR_1 ? res1Primary : res2Primary ); - smLoadCellReadingsTotal[ res ] -= smLoadCellReadings[ res ][ smLoadCellReadingsIdx ]; lgLoadCellReadingsTotal[ res ] -= lgLoadCellReadings[ res ][ lgLoadCellReadingsIdx ]; - smLoadCellReadings[ res ][ smLoadCellReadingsIdx ] = wt; lgLoadCellReadings[ res ][ lgLoadCellReadingsIdx ] = wt; - smLoadCellReadingsTotal[ res ] += wt; lgLoadCellReadingsTotal[ res ] += wt; - smFilteredReservoirWeightInGrams[ res ] = smLoadCellReadingsTotal[ res ] / (F32)SIZE_OF_SMALL_LOAD_CELL_AVG; lgFilteredReservoirWeightInGrams[ res ] = lgLoadCellReadingsTotal[ res ] / (F32)SIZE_OF_LARGE_LOAD_CELL_AVG; } - smLoadCellReadingsIdx = INC_WRAP( smLoadCellReadingsIdx, 0, SIZE_OF_SMALL_LOAD_CELL_AVG - 1 ); lgLoadCellReadingsIdx = INC_WRAP( lgLoadCellReadingsIdx, 0, SIZE_OF_LARGE_LOAD_CELL_AVG - 1 ); } Index: firmware/App/Controllers/DGInterface.h =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/Controllers/DGInterface.h (.../DGInterface.h) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -120,7 +120,8 @@ void execDGInterfaceMonitor( void ); void initTreatmentReservoirMgmt( void ); -void execTreatmentReservoirMgmt( void ); +void dialysisResumed( void ); +void execTreatmentReservoirMgmt( void ); DG_OP_MODE_T getDGOpMode( void ); U32 getDGSubMode( void ); @@ -131,8 +132,7 @@ U32 getDGROPumpPressureSetPt( void ); F32 getDGROPumpFlowRateMlMin( void ); U32 getDGDrainPumpRPMSetPt( void ); -F32 getLoadCellWeightInGrams( LOAD_CELL_ID_T loadCellID ); -F32 getReservoirWeightSmallFilter( DG_RESERVOIR_ID_T resID ); +F32 getLoadCellWeight( LOAD_CELL_ID_T loadCellID ); F32 getReservoirWeightLargeFilter( DG_RESERVOIR_ID_T resID ); void setDGOpMode( U32 opMode, U32 subMode ); Index: firmware/App/HDCommon.h =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -42,15 +42,15 @@ // #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_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_SYRINGE_PUMP 1 // Disable syringe pump functionality #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_UF_ALARMS 1 // Do not error on HD ultrafiltration checks #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 @@ -59,6 +59,7 @@ #define ALARMS_DEBUG 1 // Triggered alarms sent to debug UART #define SKIP_PRIMING 1 // Skip Pre-treatment Prime #define SKIP_WET_SELF_TESTS 1 // Skip Pre-treatment prime wet self-tests + #define SKIP_CALIBRATION_TESTS 1 // Skip calibration tests // #define V1_5_SYSTEM 1 // Build for v1.5 system #define SKIP_SAMPLE_WATER 1 // Skip pre-treatment sample water #define SKIP_CONSUMABLE_TESTS 1 // Skip pre-treatment consumable Self-tests Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -16,6 +16,7 @@ ***************************************************************************/ #include "AlarmMgmt.h" +#include "Buttons.h" #include "ConsumableSelfTest.h" #include "FPGA.h" #include "ModePreTreat.h" @@ -161,6 +162,13 @@ *************************************************************************/ U32 execPreTreatmentMode( void ) { + BOOL stop = isStopButtonPressed(); + + if ( TRUE == stop ) + { + activateAlarmNoData( ALARM_ID_TREATMENT_STOPPED_BY_USER ); + } + // execute mode state machine switch ( currentPreTreatmentState ) { Index: firmware/App/Modes/Prime.c =================================================================== diff -u -rba7a576375ad7bbfa0d5a879d82b8783e5182899 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Modes/Prime.c (.../Prime.c) (revision ba7a576375ad7bbfa0d5a879d82b8783e5182899) +++ firmware/App/Modes/Prime.c (.../Prime.c) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -525,7 +525,7 @@ { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_DIALYSATE_DIALYZER_STATE; - F32 const loadcellWeight = getReservoirWeightSmallFilter( DG_RESERVOIR_1 ); + F32 const loadcellWeight = getLoadCellWeight( LOAD_CELL_RESERVOIR_1_PRIMARY ); F32 const weightChange = fabs( 1.0 - ( previousLoadCellReading / loadcellWeight ) ); if ( weightChange < LOAD_CELL_VOLUME_NOISE_TOLERANCE ) @@ -609,7 +609,7 @@ static HD_PRE_TREATMENT_PRIME_STATE_T handlePrimeDialysateBypassState( void ) { HD_PRE_TREATMENT_PRIME_STATE_T state = HD_PRIME_DIALYSATE_BYPASS_STATE; - F32 const loadcellWeight = getReservoirWeightSmallFilter( DG_RESERVOIR_2 ); + F32 const loadcellWeight = getLoadCellWeight( LOAD_CELL_RESERVOIR_2_PRIMARY ); F32 const weightChange = fabs( 1.0 - ( previousLoadCellReading / loadcellWeight ) ); if ( weightChange < LOAD_CELL_VOLUME_NOISE_TOLERANCE ) Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -rfeaae35e827b3ffeb5d0de9df41ba2390d058849 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision feaae35e827b3ffeb5d0de9df41ba2390d058849) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -809,10 +809,6 @@ { state = DRY_SELF_TESTS_OCCLUSION_SENSORS_STATE; } - else - { - activateAlarmNoData( ALARM_ID_INSTALL_NEW_CARTRIDGE ); - } if ( TRUE == doesAlarmStatusIndicateStop() ) { Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -34,10 +34,9 @@ // ********** private definitions ********** /// Interval to control lamp and audio and to publish alarm status data. -#define ALARM_STATUS_PUBLISH_INTERVAL ( ALARM_LAMP_AND_AUDIO_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ) +static const U32 ALARM_STATUS_PUBLISH_INTERVAL = ( ALARM_LAMP_AND_AUDIO_CONTROL_INTERVAL_MS / TASK_GENERAL_INTERVAL ); #define ALARM_SILENCE_EXPIRES_IN_SECS (60) ///< Alarm silence expiration time in seconds. -#define ALARM_SILENCE_REQUESTED 1 ///< User cmd to request alarm silence (1=silence, 0=cancel silence). #define SUPERVISOR_ALARM_KEY 0xD2C3B4A5 ///< 32-bit key required for clear all alarms request. @@ -148,7 +147,8 @@ alarmStatus.noResume = FALSE; alarmStatus.noRinseback = FALSE; alarmStatus.noEndTreatment = FALSE; - alarmStatus.noNewTreatment = FALSE; + alarmStatus.noNewTreatment = FALSE; + alarmStatus.noDialRecirc = FALSE; alarmStatus.usrACKRequired = FALSE; } @@ -193,7 +193,12 @@ { // No need to do anything if alarm is already active if ( FALSE == alarmIsActive[ alarm ] ) - { + { + // If alarm status was that no alarms currently active, set this alarm as top alarm until status formally updated later + if ( ALARM_ID_NO_ALARM == alarmStatus.alarmTop ) + { + alarmStatus.alarmTop = alarm; + } // If alarms silenced, end silence due to new alarm alarmStatus.alarmsSilenced = FALSE; // If alarm is a fault, request transition to fault mode @@ -428,9 +433,9 @@ * @param cmd ID of user command (1=silence, 0=cancel silence) * @return none *************************************************************************/ -void signalAlarmSilence( U32 cmd ) +void signalAlarmSilence( ALARM_SILENCE_CMD_T cmd ) { - if ( ALARM_SILENCE_REQUESTED == cmd ) + if ( ALARM_SILENCE_CMD_START == cmd ) { if ( FALSE == alarmStatus.alarmsSilenced ) { @@ -543,6 +548,19 @@ /*********************************************************************//** * @brief + * The isDialysateRecircBlocked function determines whether any currently + * active alarm is blocking dialysate re-circulation. + * @details Inputs: alarmStatus + * @details Outputs: none + * @return TRUE if any active alarm prevents dialysate re-circulation, FALSE if not + *************************************************************************/ +BOOL isDialysateRecircBlocked( void ) +{ + return alarmStatus.noDialRecirc; +} + +/*********************************************************************//** + * @brief * The doesAlarmStatusIndicateStop function determines whether any currently * active alarm has stop property. * @details Inputs: alarmStatus @@ -642,7 +660,8 @@ { ALARM_PRIORITY_T highestPriority = ALARM_PRIORITY_NONE; ALARM_ID_T a; - BOOL faultsActive = FALSE; + BOOL faultsActive = FALSE; + BOOL dialysateRecircBlocked = FALSE; // Update FIFOs and sub-ranks per active alarms table - for alarm ranking purposes to determine "top" alarm for ( a = ALARM_ID_NO_ALARM; a < NUM_OF_ALARM_IDS; a++ ) @@ -680,14 +699,20 @@ if ( TRUE == ALARM_TABLE[ a ].alarmIsFault ) { faultsActive = TRUE; + } + // Track whether any active alarms prevent dialysate re-circulation so far + if ( TRUE == ALARM_TABLE[ a ].alarmNoDialysateRecirc ) + { + dialysateRecircBlocked = TRUE; } } } // Update alarm to display per highest priority FIFO alarmStatus.alarmsState = highestPriority; alarmStatus.alarmTop = alarmPriorityFIFO[ highestPriority ].alarmID; - alarmStatus.systemFault = faultsActive; + alarmStatus.systemFault = faultsActive; + alarmStatus.noDialRecirc = dialysateRecircBlocked; } /*********************************************************************//** Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rb8d74fc5b07d0e62d841b4c5a786b2be4e593c63 -r565ed0856be2fcf1443e3ec4cb8fe023b2c14db4 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision b8d74fc5b07d0e62d841b4c5a786b2be4e593c63) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 565ed0856be2fcf1443e3ec4cb8fe023b2c14db4) @@ -208,7 +208,7 @@ * @return none *************************************************************************/ void checkInFromUI( void ) -{ +{ if ( FALSE == uiDidCommunicate ) { // Start DG check-in timer when UI first communicates timeOfLastDGCheckIn = getMSTimerCount(); @@ -946,7 +946,7 @@ activateAlarmNoData( ALARM_ID_DG_COMM_TIMEOUT ); dgIsCommunicating = FALSE; } - } + } } /*********************************************************************//** @@ -1211,6 +1211,18 @@ handleUFVolumeSetRequest( message ); break; + case MSG_ID_UI_RINSEBACK_CMD: + handlRinsebackCmd( message ); + break; + + case MSG_ID_UI_RECIRC_CMD: + handleTreatmentRecircCmd( message ); + break; + + case MSG_ID_UI_TX_END_CMD: + handleTreatmentEndCmd( message ); + break; + case MSG_ID_UI_SAMPLE_WATER_CMD: handleSampleWaterCmd( message ); break; @@ -1303,6 +1315,10 @@ case MSG_ID_BLOOD_FLOW_SEND_INTERVAL_OVERRIDE: handleTestBloodFlowBroadcastIntervalOverrideRequest( message ); + break; + + case MSG_ID_TREATMENT_TIME_REMAINING_OVERRIDE: + handleTestTreatmentTimeRemainingOverrideRequest( message ); break; case MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE: @@ -1479,10 +1495,46 @@ handleTestDialOutPumpHomeRequest( message ); break; + case MSG_ID_HD_SET_OP_MODE_REQUEST: + handleTestSetOpModeRequest( message ); + break; + case MSG_ID_SUPER_CLEAR_ALARMS_CMD: handleTestSuperClearAlarmsRequest( message ); break; + case MSG_ID_HD_SYRINGE_PUMP_SEND_INTERVAL_OVERRIDE: + handleTestSyringePumpDataBroadcastIntervalOverrideRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_OPERATION_REQUEST: + handleTestSyringePumpOperationRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_MEASURED_RATE_OVERRIDE: + handleTestSyringePumpMeasuredRateOverrideRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_MEASURED_FORCE_OVERRIDE: + handleTestSyringePumpMeasuredForceOverrideRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_SYRINGE_DETECT_OVERRIDE: + handleTestSyringePumpMeasuredSyringeDetectOverrideRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_MEASURED_HOME_OVERRIDE: + handleTestSyringePumpMeasuredHomeOverrideRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_MEASURED_POSITION_OVERRIDE: + handleTestSyringePumpMeasuredPositionOverrideRequest( message ); + break; + + case MSG_ID_HD_SYRINGE_PUMP_MEASURED_VOLUME_OVERRIDE: + handleTestSyringePumpMeasuredVolumeOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break;