Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -re4f4d7c87dc50fe7a166f26a903547315671fd17 -r27a68f930508638f2eb6265ebb381c8918cbc37b --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision e4f4d7c87dc50fe7a166f26a903547315671fd17) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 27a68f930508638f2eb6265ebb381c8918cbc37b) @@ -7,8 +7,8 @@ * * @file ModePreTreat.c * -* @author (last) Dara Navaei -* @date (last) 22-Feb-2022 +* @author (last) Darren Cox +* @date (last) 17-Mar-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -249,6 +249,41 @@ /*********************************************************************//** * @brief + * The verifySwitchStatus function checks Pump Track and Door switches are closed. + * Verify Syringe is installed if needed. + * Alarm is set if not. Alarms cleared by driver executives. + * @details Inputs: none + * @details Outputs: Alarm + * @return none + *************************************************************************/ +void verifySwitchStatus( void ) +{ + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); + F32 hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_SWITCHES_MONITOR ) != SW_CONFIG_ENABLE_VALUE ) +#endif + { + if ( STATE_OPEN == getSwitchStatus( FRONT_DOOR ) ) + { + activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); + } + + if ( STATE_OPEN == getSwitchStatus( PUMP_TRACK_SWITCH ) ) + { + activateAlarmNoData( ALARM_ID_PUMP_TRACK_LATCH_OPENED ); + } + } + + if ( ( FALSE == isSyringeDetected() ) && ( ( bolusVol > NEARLY_ZERO ) && ( hepRate > NEARLY_ZERO ) ) ) + { + activateAlarmNoData( ALARM_ID_HD_SYRINGE_PUMP_SYRINGE_REMOVED ); + } +} + +/*********************************************************************//** + * @brief * The signalUserConfirmInstallation function handles user confirmation of * disposable installation. * @details Inputs: none @@ -257,17 +292,60 @@ *************************************************************************/ void signalUserConfirmInstallation( void ) { + BOOL accepted = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; + + confirmInstallRequested = FALSE; + F32 bolusVol = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_BOLUS_VOLUME ); F32 hepRate = getTreatmentParameterF32( TREATMENT_PARAM_HEPARIN_DISPENSE_RATE ); - // Accept installation confirmation if we are in install state of pre-treatment mode and syringe is detected or Heparin not being used in this treatment. - if ( ( MODE_PRET == getCurrentOperationMode() ) && - ( HD_PRE_TREATMENT_CART_INSTALL_STATE == currentPreTreatmentState ) && - ( ( TRUE == isSyringeDetected() ) || ( ( bolusVol < NEARLY_ZERO ) && ( hepRate < NEARLY_ZERO ) ) ) ) + // Accept installation confirmation if we are in install state of pre-treatment mode and + // Door closed, Cartridge installed, syringe is detected or Heparin not being used in this treatment. + if ( ( MODE_PRET == getCurrentOperationMode() ) && ( HD_PRE_TREATMENT_CART_INSTALL_STATE == currentPreTreatmentState ) ) { - confirmInstallRequested = TRUE; + OPN_CLS_STATE_T frontDoor = getSwitchStatus( FRONT_DOOR ); + OPN_CLS_STATE_T pumpTrack = getSwitchStatus( PUMP_TRACK_SWITCH ); + +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_SWITCHES_MONITOR ) ) + { + frontDoor = STATE_CLOSED; + pumpTrack = STATE_CLOSED; + } +#endif + + if ( STATE_CLOSED == pumpTrack ) + { + if ( STATE_CLOSED == frontDoor ) + { + if ( ( TRUE == isSyringeDetected() ) || ( ( bolusVol < NEARLY_ZERO ) && ( hepRate < NEARLY_ZERO ) ) ) + { + // Everything is properly installed + accepted = TRUE; + confirmInstallRequested = TRUE; + } + else + { + rejReason = REQUEST_REJECT_REASON_SYRINGE_NOT_PRESENT; + } + } + else + { + rejReason = REQUEST_REJECT_REASON_DOOR_NOT_CLOSED; + } + } + else + { + rejReason = REQUEST_REJECT_REASON_PUMP_TRACK_NOT_CLOSED; + } } - // TODO - send a reject reason if not accepting confirmation + else + { + rejReason = REQUEST_REJECT_REASON_ACTION_DISABLED_IN_CURRENT_STATE; + } + + sendConsumableInstallCmdResponse( accepted, (U32) rejReason ); } /*********************************************************************//** @@ -607,11 +685,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_NO_CART_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -629,6 +702,14 @@ transitionToCartridgeInstallation(); } } + else + { + if ( ( NO_CART_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE <= getNoCartSelfTestsState() ) && + ( NO_CART_SELF_TESTS_STOPPED_STATE != getNoCartSelfTestsState() ) ) + { + verifySwitchStatus(); + } + } return state; } @@ -673,11 +754,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_SELF_TEST_DRY_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -695,6 +771,14 @@ transitionToPrime(); } } + else + { + if ( ( DRY_SELF_TESTS_WAIT_FOR_DOOR_CLOSE_STATE <= getDrySelfTestsState() ) && + ( DRY_SELF_TESTS_STOPPED_STATE != getDrySelfTestsState() ) ) + { + verifySwitchStatus(); + } + } return state; } @@ -711,11 +795,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_PRIME_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -734,6 +813,13 @@ transitionToPreTreatmentRecirc(); } } + else + { + if ( ( HD_PRIME_PAUSE != getPrimeState() ) ) + { + verifySwitchStatus(); + } + } return state; } @@ -750,11 +836,6 @@ { HD_PRE_TREATMENT_MODE_STATE_T state = HD_PRE_TREATMENT_RECIRCULATE_STATE; - if ( STATE_OPEN == getFPGADoorState() ) - { - activateAlarmNoData( ALARM_ID_CARTRIDGE_DOOR_OPENED ); - } - if ( TRUE == alarmActionResumeReceived ) { alarmActionResumeReceived = FALSE; @@ -763,6 +844,11 @@ execPreTreatmentRecirc(); + if ( PRE_TREATMENT_RECIRC_STOPPED_STATE != getPreTreatmentRecircState() ) + { + verifySwitchStatus(); + } + #ifndef _RELEASE_ if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) {