Index: firmware/App/Controllers/PresOccl.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -59,20 +59,19 @@ #define VENOUS_PRESSURE_MIN_TEMP ( 0.0 ) ///< Minimum venous pressure sensor temperature. #define VENOUS_PRESSURE_MAX_TEMP ( 80.0 ) ///< Maximum venous pressure sensor temperature. -#define MIN_OCCLUSION_COUNTS ( 2000 ) ///< Minimum occlusion sensor reading for range check. - #define PSI_TO_MMHG ( 51.7149 ) ///< Conversion factor for converting PSI to mmHg. #define VENOUS_PRESSURE_NORMAL_OP 0 ///< Venous pressure status bits indicate normal operation. #define VENOUS_PRESSURE_CMD_MODE 1 ///< Venous pressure status bits indicate sensor in command mode. #define VENOUS_PRESSURE_STALE_DATA 2 ///< Venous pressure status bits indicate data is stale (no new data since last fpga read). #define VENOUS_PRESSURE_DIAG_CONDITION 3 ///< Venous pressure status bits diagnostic condition (alarm). -#define OCCLUSION_THRESHOLD_OFFSET 10000 ///< Threshold offset. Combined with initial reading after cartridge install, a threshold is derived above which an occlusion is detected. -#define OCCLUSION_CLEAR_THRESHOLD_OFFSET 6000 ///< Threshold offset. Combined with initial reading after cartridge install, a threshold is derived below which an occlusion is cleared. +#define OCCLUSION_THRESHOLD_OFFSET 4000 ///< Threshold offset. Combined with initial reading after cartridge install, a threshold is derived above which an occlusion is detected. +#define OCCLUSION_CLEAR_THRESHOLD_OFFSET 4000 ///< Threshold offset. Combined with initial reading after cartridge install, a threshold is derived below which an occlusion is cleared. #define CARTRIDGE_LOADED_THRESHOLD 5000 ///< Threshold above which a cartridge is considered loaded. -/// Occlusion sensors maximum pressure reading limit when cartridge is considered loaded. -#define OCCLUSION_CARTRIDGE_LOADED_PRESSURE_READING_MAX 20000 +#define MIN_OCCLUSION_COUNTS 2000 ///< Minimum occlusion sensor reading for range check. +#define MAX_OCCLUSION_COUNTS 32766 ///< Maximum occlusion sensor reading for range check. +#define OCCLUSION_CARTRIDGE_LOADED_PRESSURE_READING_MAX 26000 ///< Occlusion sensors maximum pressure reading limit when cartridge is considered loaded. #define EMPTY_SALINE_BAG_THRESHOLD_MMHG -300.0 ///< Threshold below which the saline bag is considered empty (in mmHg). TODO - get real threshold from Systems static const U32 EMPTY_SALINE_BAG_PERSISTENCE = ( 250 / TASK_GENERAL_INTERVAL ); ///< Time that saline bag looks empty before saying it is empty. @@ -173,7 +172,6 @@ initPersistentAlarm( ALARM_ID_VENOUS_PRESSURE_HIGH, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); - initPersistentAlarm( ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_BP_OCCLUSION_READ_TIMEOUT_ERROR, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_BP_OCCLUSION_SENSOR_ERROR, 0, PRES_ALARM_PERSISTENCE ); initPersistentAlarm( ALARM_ID_HD_ARTERIAL_PRESSURE_OUT_OF_RANGE, 0, PRES_ALARM_PERSISTENCE ); @@ -401,13 +399,6 @@ #endif } - // Check venous pressure sensor temperature - if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_VENOUS_PRESSURE_SENSOR_TEMP_OUT_OF_RANGE, - ( venTemp > VENOUS_PRESSURE_MAX_TEMP || venTemp < VENOUS_PRESSURE_MIN_TEMP ) ) ) - { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_VENOUS_PRESSURE_SENSOR_FAULT, venTemp ) - } - // Filter inline pressure readings filterInlinePressureReadings( getMeasuredArterialPressure(), getMeasuredVenousPressure() ); } @@ -555,11 +546,12 @@ *************************************************************************/ static void checkOcclusions( void ) { - U32 bpOccl = getMeasuredBloodPumpOcclusion(); + U32 bpOccl = getMeasuredBloodPumpOcclusion(); + BOOL outOfRange = ( bpOccl < MIN_OCCLUSION_COUNTS || bpOccl > MAX_OCCLUSION_COUNTS ? TRUE : FALSE ); #ifndef DISABLE_PRESSURE_CHECKS // Range check occlusion sensor - if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, bpOccl < MIN_OCCLUSION_COUNTS ) ) + if ( TRUE == isPersistentAlarmTriggered( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, outOfRange ) ) { SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_BP_OCCLUSION_OUT_OF_RANGE, bpOccl ); } @@ -570,7 +562,7 @@ signalBloodPumpHardStop(); // Stop pump immediately SET_ALARM_WITH_1_U32_DATA( ALARM_ID_OCCLUSION_BLOOD_PUMP, bpOccl ) } - else if ( bpOccl < ( OCCLUSION_CLEAR_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) + else if ( bpOccl <= ( OCCLUSION_CLEAR_THRESHOLD_OFFSET + bloodPumpOcclusionAfterCartridgeInstall ) ) { clearAlarmCondition( ALARM_ID_OCCLUSION_BLOOD_PUMP ); } Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -248,22 +248,13 @@ // Do not run syringe pump if no Heparin included in prescription or it was paused or if Heparin should be stopped at this stage of treatment if ( ( minRem > (F32)preStop ) && ( HEPARIN_STATE_STOPPED == currentHeparinState ) ) { - // If not done with bolus, start/resume bolus - if ( ( bolusVol > 0.0 ) && ( getSyringePumpVolumeDelivered() < bolusVol ) ) + if ( hepRate > 0.0 ) { - startHeparinBolus(); // TODO - check return status or have function trigger alarm if not successful + startHeparinContinuous(); // TODO - check return status } - // Otherwise, start/resume continuous delivery else { - if ( hepRate > 0.0 ) - { - startHeparinContinuous(); // TODO - check return status - } - else - { - setHeparinCompleted(); - } + setHeparinCompleted(); } } else Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -30,9 +30,11 @@ #include "ModeInitPOST.h" #include "NVDataMgmt.h" #include "OperationModes.h" +#include "reg_crc.h" #include "RTC.h" #include "SafetyShutdown.h" #include "SyringePump.h" +#include "system.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" #include "Valves.h" @@ -185,7 +187,7 @@ postState = handlePOSTStatus( testStatus ); break; - case POST_STATE_DIALYSATE_FLOW: + case POST_STATE_DIALYSATE_INLET_FLOW: testStatus = execDialInFlowTest(); postState = handlePOSTStatus( testStatus ); break; @@ -431,12 +433,16 @@ // when the event data can be sent if ( ++startPOSTDelayCounter > START_POST_DELAY_COUNT ) { + U32 resetReason = systemREG1->SYSESR | crcREG->PSA_SIGREGL1; // power-on reset bit preserved in an unused CRC register + + systemREG1->SYSESR = systemREG1->SYSESR; // clear reset bit(s) after logging event so subsequent resets can be properly identified as not being power-on resets. + sendUIVersionRequest(); // Send the startup event - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, systemREG1->SYSESR, systemREG1->GBLSTAT ) // log startup event w/ reset reason(s) bits - systemREG1->SYSESR &= ~((U32)0x00008000); // clear power-on reset bit after logging event so subsequent resets can be properly identified as not being power-on resets. - SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, systemREG1->DEV, 0x12345678 ) // log startup event w/ device ID bits + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, resetReason, systemREG1->GBLSTAT ) // log startup event w/ reset reason(s) bits + SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_STARTUP, systemREG1->DEV, 0x12345678 ) // log startup event w/ device ID bits + // Send the first submode change event. It is the mode Init and it does not start from a previous // mode previous and current are both published as Init SEND_EVENT_WITH_2_U32_DATA( HD_EVENT_OP_MODE_CHANGE, MODE_INIT, MODE_INIT ) Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -688,7 +688,6 @@ { if ( submodeCompleteTransitionTimeCounter++ >= SUBMODE_COMPLETE_UI_TRANSITION_TIME_COUNT ) { - setOcclusionInstallLevel(); // Record occlusion pressure level after a new cartridge is installed. submodeCompleteTransitionTimeCounter = 0; state = HD_PRE_TREATMENT_PRIME_STATE; transitionToPrime(); Index: firmware/App/Modes/SelfTests.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Modes/SelfTests.c (.../SelfTests.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -41,6 +41,7 @@ #define PUMP_RUN_SELF_TEST_TIME_MS ( 15 * MS_PER_SECOND ) ///< Self-test time to run pumps in ms. #define PUMP_SELF_TEST_FLOW_RATE_ML_MIN 100 ///< Self-test pump flow rate in mL/min. +#define SYRINGE_PUMP_OCCLUSION_CHECK_DELAY ( 3 * MS_PER_SECOND ) ///< Delay 3 seconds then check for syringe pump prime occlusion. #define BLOOD_PUMP_RUN_TIME_PRESSURE_SELF_TEST ( 5 * MS_PER_SECOND ) ///< Pressure self-test time to run blood pump in ms. #define NORMALIZED_PRESSURE_SELF_TEST_TIME ( 4 * MS_PER_SECOND ) ///< Time to wait for pressure to normalize in ms. @@ -62,8 +63,9 @@ #define WET_SELF_TEST_DISPLACEMENT_TIME_MS ( SEC_PER_MIN * MS_PER_SECOND ) ///< Time to displace dialysate in wet self-test in ms. #define RESERVOIR_SETTLE_TIME_MS ( 4 * MS_PER_SECOND ) ///< Time allotted for reservoir to settle in ms. -#define MAX_NO_CARTRIDGE_SELF_TEST_TIME 30 ///< Maximum no cartridge self-test time (in seconds). +#define MAX_NO_CARTRIDGE_SELF_TEST_TIME 30 ///< Maximum no cartridge self-test time (in seconds). #define MAX_DRY_SELF_TEST_TIME ( 3 * SEC_PER_MIN ) ///< Maximum dry self-test time (in seconds). +#define CARTRIDGE_INSERT_PRESSURE_SETTLE_TIME_MS ( 10 * MS_PER_SECOND ) ///< Time (in ms) required to wait for occlusion pressure to settle after cartridge insertion. #define SELF_TEST_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND ) ///< Interval (ms/task time) at which self-test time data is published on the CAN bus. @@ -112,6 +114,7 @@ static U32 selfTestStartTime; ///< Starting time of self-test (in ms). static U32 selfTestPreviousPublishDataTime; ///< Last time self-test time data is being published (in ms). +static U32 syringeOcclusionDelayStartTime; ///< Used to calculate the 1 second delay time before check for prime occlusion. static BOOL useHeparin; ///< Flag indicates the user of heparin. @@ -135,6 +138,7 @@ static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsState( SELF_TEST_STATUS_T *result ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestPressureSensorsNormalState( SELF_TEST_STATUS_T *result ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpPrimeState( void ); +static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpOcclusionDetectionState( void ); static DRY_SELF_TESTS_STATE_T handleDrySelfTestStoppedState( void ); static WET_SELF_TESTS_STATE_T handleWetSelfTestStartState( void ); @@ -161,6 +165,7 @@ { selfTestStartTime = 0; selfTestPreviousPublishDataTime = 0; + syringeOcclusionDelayStartTime = 0; } /*********************************************************************//** @@ -201,7 +206,16 @@ signalBloodPumpHardStop(); signalDialInPumpHardStop(); signalDialOutPumpHardStop(); - stopSyringePump(); + + if ( TRUE == isAlarmActive( ALARM_ID_HD_SYRINGE_PUMP_NOT_ENOUGH_HEPARIN_ALARM ) ) + { + retractSyringePump(); + } + else + { + stopSyringePump(); + } + setValvePosition( VDI, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( VDO, VALVE_POSITION_A_INSERT_EJECT ); setValvePosition( VBA, VALVE_POSITION_A_INSERT_EJECT ); @@ -378,12 +392,17 @@ switch ( currentDrySelfTestsState ) { case DRY_SELF_TESTS_START_STATE: + // Ensure occlusion sensor has time to settle after cartridge insertion before starting dry self-tests + if ( TRUE == didTimeout( selfTestStartTime, CARTRIDGE_INSERT_PRESSURE_SETTLE_TIME_MS ) ) + { + setOcclusionInstallLevel(); // Record occlusion pressure level after a new cartridge is installed. #ifdef SKIP_DRY_SELF_TESTS - // TODO: Remove once dry self-test is ready to use - currentDrySelfTestsState = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; + // TODO: Remove once dry self-test is ready to use + currentDrySelfTestsState = DRY_SELF_TESTS_SYRINGE_PUMP_PRIME_STATE; #else - currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; + currentDrySelfTestsState = DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE; #endif + } break; case DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE: @@ -422,6 +441,10 @@ currentDrySelfTestsState = handleDrySelfTestSyringePumpPrimeState(); break; + case DRY_SELF_TESTS_SYRINGE_PUMP_OCCLUSION_DETECTION_STATE: + currentDrySelfTestsState = handleDrySelfTestSyringePumpOcclusionDetectionState(); + break; + case DRY_SELF_TESTS_STOPPED_STATE: currentDrySelfTestsState = handleDrySelfTestStoppedState(); break; @@ -973,21 +996,28 @@ if ( TRUE == useHeparin ) { - if ( TRUE == isSyringePlungerFound() ) + if ( FALSE == isSyringePumpRunning() ) { - if ( TRUE == isSyringePumpPrimed() ) + if ( TRUE == isSyringePlungerFound() ) { - state = DRY_SELF_TESTS_COMPLETE_STATE; + if ( TRUE == isSyringePumpPrimed() ) + { + state = DRY_SELF_TESTS_SYRINGE_PUMP_OCCLUSION_DETECTION_STATE; + syringeOcclusionDelayStartTime = getMSTimerCount(); // Get the current time to check for occlusion after 3 seconds has elapsed + } + else + { + primeSyringePump(); + } } else { - primeSyringePump(); + if ( TRUE == isSyringePumpHome() ) + { + seekSyringePlunger(); + } } } - else - { - seekSyringePlunger(); - } } else { @@ -1005,6 +1035,33 @@ /*********************************************************************//** * @brief + * The handleDrySelfTestSyringePumpOcclusionDetectionState function handles + * occlusion detection after prime has completed. + * @details Inputs: none + * @details Outputs: none + * @return the next state of dry self-tests state machine + *************************************************************************/ +static DRY_SELF_TESTS_STATE_T handleDrySelfTestSyringePumpOcclusionDetectionState( void ) +{ + DRY_SELF_TESTS_STATE_T state = DRY_SELF_TESTS_SYRINGE_PUMP_OCCLUSION_DETECTION_STATE; + + if ( TRUE == didTimeout( syringeOcclusionDelayStartTime, SYRINGE_PUMP_OCCLUSION_CHECK_DELAY ) ) + { + checkForPrimeOcclusion(); + state = DRY_SELF_TESTS_COMPLETE_STATE; + } + + if ( TRUE == doesAlarmStatusIndicateStop() ) + { + state = DRY_SELF_TESTS_STOPPED_STATE; + setupForSelfTestsStop(); + } + + return state; +} + +/*********************************************************************//** + * @brief * The handleDrySelfTestStoppedState function handles the stopped dry self-tests * operation. * @details Inputs: none @@ -1070,8 +1127,16 @@ if ( FALSE == cmdResp.rejected ) { + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + setDialInPumpTargetFlowRate( DIP_FLOW_RATE_SETUP_ML_MIN, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); fmdIntegratedVolume = 0.0; + + if ( ( bolusVol > 0.0 ) && ( getSyringePumpVolumeDelivered() < bolusVol ) ) + { + startHeparinBolus(); // moved here from startHeparinPump() in Dialysis.c + } + state = WET_SELF_TESTS_SETUP_STATE; } } Index: firmware/App/Services/AlarmMgmtSWFaults.h =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/AlarmMgmtSWFaults.h (.../AlarmMgmtSWFaults.h) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -164,6 +164,7 @@ SW_FAULT_ID_PHANTOM_INTERRUPT, SW_FAULT_ID_UNEXPECTED_DMA_INTERRUPT, // 130 SW_FAULT_ID_INVALID_TREATMENT_RESERVOIR_MANAGEMENT_STATE, + SW_FAULT_ID_ILLEGAL_MEM_ACCESS, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -1609,8 +1609,8 @@ handleTestSyringePumpForceSensorCalibrateRequest( message ); break; - case MSG_ID_HD_FAN_RPM_ALARM_START_TIME_OFFSET_OVERRIDE: - handleTestFansRPMAlarmStartTimeOffsetOverrideRequest( message ); + case MSG_ID_HD_SYRINGE_PUMP_HEPRIN_BOLUS_TARGET_RATE_OVERRIDE: + handleTestSyringePumpHeprinBolusTargetRateOverrideRequest( message ); break; default: Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -5496,6 +5496,38 @@ } /*********************************************************************//** + * @brief + * The handleTestSyringePumpHeprinBolusTargetRateOverrideRequest function handles a + * request to override the syringe pump heprin bolus target rate. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestSyringePumpHeprinBolusTargetRateOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_PAYLOAD_T payload; + BOOL result = FALSE; + + // Verify payload length + if ( sizeof(TEST_OVERRIDE_PAYLOAD_T) == message->hdr.payloadLen ) + { + memcpy( &payload, message->payload, sizeof(TEST_OVERRIDE_PAYLOAD_T) ); + if ( FALSE == payload.reset ) + { + result = testSetHeprinBolusTargetRateOverride( payload.state.f32 ); + } + else + { + result = testResetHeprinBolusTargetRateOverride(); + } + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** * @brief * The handleSetHDSystemRecord function handles a request to set the HD * system data record. Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r61716bc97ecca8af1ec560333844a8cf602eccb0 -raa4db7d76566ad7473f896e543f71fdbbc921ea9 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 61716bc97ecca8af1ec560333844a8cf602eccb0) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision aa4db7d76566ad7473f896e543f71fdbbc921ea9) @@ -653,6 +653,9 @@ // MSG_ID_HD_SYRINGE_PUMP_MEASURED_RATE_OVERRIDE: void handleTestSyringePumpMeasuredRateOverrideRequest( MESSAGE_T *message ); +// MSG_ID_HD_SYRINGE_PUMP_HEPRIN_BOLUS_TARGET_RATE_OVERRIDE: +void handleTestSyringePumpHeprinBolusTargetRateOverrideRequest( MESSAGE_T *message ); + // MSG_ID_HD_SYRINGE_PUMP_MEASURED_FORCE_OVERRIDE: void handleTestSyringePumpMeasuredForceOverrideRequest( MESSAGE_T *message );