Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r4ac6a67ab2876d1f436704fe67a958e17d0b432a -r161a56481d1a194704b63a5fd55d4c5583fa94df --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 4ac6a67ab2876d1f436704fe67a958e17d0b432a) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 161a56481d1a194704b63a5fd55d4c5583fa94df) @@ -82,7 +82,6 @@ static U32 treatmentStateBroadcastTimerCtr; ///< Treatment state data broadcast timer counter used to schedule when to transmit data. static U32 treatmentParamsRangesBroadcastTimerCtr; ///< Treatment parameter ranges broadcast timer counter used to schedule when to transmit updated ranges. -static BOOL alarmStopSignalled; ///< Flag indicates an alarm w/ stop property was triggered. static BOOL resumeTreatmentAlarmResponseRequest; ///< Flag indicates user has requested treatment resume. static BOOL initiateRinsebackAlarmResponseRequest; ///< Flag indicates user has requested rinseback. static BOOL endTreatmentAlarmResponseRequest; ///< Flag indicates user has requested treatment end. @@ -137,6 +136,7 @@ presUFRate = 0.0; resetSignalFlags(); + resetAlarmSignalFlags(); pendingParamChangesTimer = 0; pendingUFVolumeChange = 0.0; @@ -169,7 +169,6 @@ *************************************************************************/ static void resetAlarmSignalFlags( void ) { - alarmStopSignalled = FALSE; resumeTreatmentAlarmResponseRequest = FALSE; initiateRinsebackAlarmResponseRequest = FALSE; endTreatmentAlarmResponseRequest = FALSE; @@ -280,7 +279,7 @@ switch( action ) { case ALARM_ACTION_STOP: - alarmStopSignalled = TRUE; + // Stop signal actively polled by mode/sub-mode/state break; case ALARM_ACTION_RESUME: @@ -479,8 +478,8 @@ setRinsebackIsCompleted( FALSE ); - // Handle alarm signals - if ( TRUE == alarmStopSignalled ) + // Handle alarm stoppage + if ( TRUE == doesAlarmStatusIndicateStop() ) { transitionToTreatmentStop(); result = TREATMENT_STOP_STATE; @@ -518,37 +517,33 @@ U32 newTime = getMSTimerCount(); U32 msSinceLast = calcTimeBetween( lastTreatmentTimeStamp, newTime ); - // Handle alarm signals - if ( TRUE == alarmStopSignalled ) + // Update treatment time (unless delivering a saline bolus) + if ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) { + treatmentTimeMS += msSinceLast; + } + lastTreatmentTimeStamp = newTime; + + // End treatment if treatment duration has been reached + if ( CALC_ELAPSED_TREAT_TIME_IN_SECS() >= presTreatmentTimeSecs ) + { stopDialysis(); - transitionToTreatmentStop(); - result = TREATMENT_STOP_STATE; + transitionToTreatmentEnd(); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_END_OF_DIALYSIS_TREATMENT_WARNING, presTreatmentTimeSecs ); + result = TREATMENT_END_STATE; } - // Execute dialysis sub-mode + // Otherwise, execute state machine for treatment dialysis sub-mode else { - // Update treatment time (unless delivering a saline bolus) - if ( getDialysisState() != DIALYSIS_SALINE_BOLUS_STATE ) + execTreatmentReservoirMgmt(); + execDialysis(); + // Handle alarm stoppage + if ( TRUE == doesAlarmStatusIndicateStop() ) { - treatmentTimeMS += msSinceLast; - } - lastTreatmentTimeStamp = newTime; - - // End treatment if treatment duration has been reached - if ( CALC_ELAPSED_TREAT_TIME_IN_SECS() >= presTreatmentTimeSecs ) - { stopDialysis(); - transitionToTreatmentEnd(); - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_END_OF_DIALYSIS_TREATMENT_WARNING, presTreatmentTimeSecs ); - result = TREATMENT_END_STATE; + transitionToTreatmentStop(); + result = TREATMENT_STOP_STATE; } - // Otherwise, execute state machine for treatment dialysis sub-mode - else - { - execTreatmentReservoirMgmt(); - execDialysis(); - } } return result; @@ -614,8 +609,8 @@ { TREATMENT_STATE_T result = TREATMENT_RINSEBACK_STATE; - // Handle alarm signals - if ( TRUE == alarmStopSignalled ) + // Handle alarm stoppage + if ( TRUE == doesAlarmStatusIndicateStop() ) { signalStopRinseback(); } @@ -655,8 +650,8 @@ { TREATMENT_STATE_T result = TREATMENT_RECIRC_STATE; - // Handle alarm signals - if ( TRUE == alarmStopSignalled ) + // Handle alarm stoppage + if ( TRUE == doesAlarmStatusIndicateStop() ) { signalStopTreatmentRecirc(); } @@ -691,8 +686,8 @@ { TREATMENT_STATE_T result = TREATMENT_END_STATE; - // Handle alarm user response signals - forward to treatment end sub-mode - if ( TRUE == alarmStopSignalled ) + // Handle alarm stoppage + if ( TRUE == doesAlarmStatusIndicateStop() ) { signalStopTreatmentEnd(); } @@ -1211,3 +1206,36 @@ treatmentParamsRangesBroadcastTimerCtr = 0; } } + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testSetTreatmentTimeRemainingOverride function overrides the + * treatment time remaining. + * @details Inputs: presTreatmentTimeSecs, currentTreatmentState + * @details Outputs: treatmentTimeMS + * @param value override treatment time remaining overridden to this (in sec) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetTreatmentTimeRemainingOverride( U32 value ) +{ + BOOL result = FALSE; + + if ( ( TRUE == isTestingActivated() ) && ( value < presTreatmentTimeSecs ) ) + { + if ( ( MODE_TREA == getCurrentOperationMode() ) && ( currentTreatmentState < TREATMENT_END_STATE ) ) + { + result = TRUE; + treatmentTimeMS = ( presTreatmentTimeSecs - value ) * MS_PER_SECOND; + } + } + + return result; +} + +/**@}*/