Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -r95c81a7d81fa3e6534bcf2e35e1d9b1eba26e372 -r28d515e25f5f3b2c0bbff55abd68641927b6659c --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 95c81a7d81fa3e6534bcf2e35e1d9b1eba26e372) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 28d515e25f5f3b2c0bbff55abd68641927b6659c) @@ -29,6 +29,7 @@ #include "OperationModes.h" #include "Pressures.h" #include "StateTxBloodPrime.h" +#include "TreatmentEnd.h" #include "StateTxDialysis.h" #include "StateTxPaused.h" #include "StateTxRecirc.h" @@ -105,6 +106,8 @@ static U32 treatmentStartTimeStamp; ///< Treatment start timestamp for logging purpose. static U32 treatmentEndTimeStamp; ///< Treatment end timestamp for logging purpose. +static BOOL treatmentEndToRinsebackRequest; ///< Flag indicates treatment end sub-mode has requested transition to Rinseback. + // ********** private function prototypes ********** static void broadcastTreatmentSettingsRanges( void ); @@ -193,15 +196,10 @@ initBloodPrime(); initDialysis(); initTreatmentPaused(); -<<<<<<< HEAD -// initRinseback(); -// initTreatmentRecirc(); - initTreatmentEnd(); -======= + initRinseback(); initTreatmentRecirc(); -// initTreatmentEnd(); ->>>>>>> staging + initTreatmentEnd(); initFluidBolus(); // Started the treatment - set the start time in epoch @@ -525,7 +523,7 @@ resumeBlockedByAlarm = TRUE; } - // Check dialysate temperature during treatment mode (except end state where treatment is over, dialyzer is bypassed and temp is no longer an issue) +// Check dialysate temperature during treatment mode (except end state where treatment is over, dialyzer is bypassed and temp is no longer an issue) // if ( currentTreatmentState != TREATMENT_END_STATE ) // { // checkDialysateTemperature(); @@ -756,10 +754,16 @@ treatmentCompleted = TRUE; // sendLastTreatmentPeriodicData = TRUE; // treatmentEndTimeStamp = getRTCTimestamp(); - pauseDialysis(); - //requestNewOperationMode( MODE_STAN ); // TODO +// pauseDialysis(); + + /// CKOE + // stopDialysis(); transitionToTreatmentEnd(); + + //CKOE Do we need data to broadd cast here //SET_ALARM_WITH_1_U32_DATA( ALARM_ID_TD_END_OF_TREATMENT_WARNING, presTreatmentTimeSecs ); + // Trigger the low-priority End of Treatment alarm + activateAlarmNoData( ALARM_ID_TD_END_OF_TREATMENT ); result = TREATMENT_END_STATE; } // Otherwise, execute state machine for treatment dialysis sub-mode @@ -932,39 +936,34 @@ * @details \b Outputs: treatment end sub-mode executed. * @return next treatment mode state *************************************************************************/ + + static TREATMENT_STATE_T handleTreatmentEndState( void ) { TREATMENT_STATE_T result = TREATMENT_END_STATE; - // Handle final rinseback alarm response from user -// if ( TRUE == initiateRinsebackAlarmResponseRequest ) -// { -// signalTreatmentEndAlarmRinsebackUserAction(); -// } -// // Handle alarm response from user to end treatment w/o rinseback -// else if ( TRUE == endTreatmentAlarmResponseRequest ) -// { -// signalTreatmentEndAlarmEndTxUserAction(); -// } -// // End treatment state does not allow resume -// -// // Execute treatment end sub-mode -// execTreatmentEnd(); -// -// // Handle signals from treatment end sub-mode -// if ( TRUE == treatmentEndToRinsebackRequest ) -// { -// transitionToRinseback(); -// result = TREATMENT_RINSEBACK_STATE; -// } -// else if ( TRUE == endTreatmentRequest ) -// { -// requestNewOperationMode( MODE_POST ); -// } +// // Handle final rinseback alarm response from user + if ( TRUE == initiateRinsebackAlarmResponseRequest ) + { + signalTreatmentEndAlarmRinsebackUserAction(); + } + // Handle alarm response from user to end treatment w/o rinseback + else if ( TRUE == endTreatmentAlarmResponseRequest ) + { + //sendLastTreatmentPeriodicData = TRUE; TODO + requestNewOperationMode( MODE_POST ); + } + // End treatment state does not allow resume + // Execute treatment end sub-mode + execTreatmentEnd(); + if ( TRUE == treatmentEndToRinsebackRequest ) + { + transitionToRinseback(); + result = TREATMENT_RINSEBACK_STATE; + } return result; } - /*********************************************************************//** * @brief * The broadcastTreatmentTimeAndState function broadcasts treatment time and @@ -1027,7 +1026,7 @@ payload.txPausedState = getCurrentTreatmentPausedState(); payload.rinsebackState = getCurrentRinsebackState(); payload.txRecircState = getCurrentTreatmentRecircState(); - payload.txEndState = 0; // getCurrentTreatmentEndState(); + payload.txEndState = getCurrentTreatmentEndState(); payload.txFluidBolusState = getCurrentFluidBolusState(); payload.txHepState = 0; // broadcastData( MSG_ID_TD_TREATMENT_STATE_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)(&payload), sizeof( TREATMENT_STATE_DATA_T ) ); @@ -1213,7 +1212,7 @@ endTreatmentRequest = FALSE; rinsebackToRecircRequest = FALSE; bloodPrimeToDialysisRequest = FALSE; -// treatmentEndToRinsebackRequest = FALSE; // TODO: Declare & uncomment when end treat is implemented. + treatmentEndToRinsebackRequest = FALSE; recirculateToBloodPrimeRequest = FALSE; } @@ -1234,6 +1233,18 @@ /*********************************************************************//** * @brief + * The signalTreatmentEndToRinseback function signals that treatment end + * sub-mode wants to transition to the rinseback sub-mode. + * @details Inputs: none + * @details Outputs: treatmentEndToRinsebackRequest + * @return none + *************************************************************************/ +void signalTreatmentEndToRinseback( void ) +{ + treatmentEndToRinsebackRequest = TRUE; +} +/*********************************************************************//** + * @brief * The publishUltrafiltrationData function publishes the ultrafiltration data * at the set time interval. * @details \b Inputs: none