Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -red21c935443549b87ab6665e76ce1d32d9867082 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision ed21c935443549b87ab6665e76ce1d32d9867082) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -25,6 +25,7 @@ #include "RotaryValve.h" #include "Switches.h" #include "SyringePump.h" +#include "Timers.h" #include "TubeSetAutoEject.h" #include "TxParams.h" #include "Valve3Way.h" @@ -40,7 +41,9 @@ static BOOL patientDisconnectionConfirmed; ///< Flag indicates user confirms patient disconnection. static BOOL patientDisconnectHandled; ///< Flag indicates patient disconnect actions have been handled static BOOL disposableRemovalConfirmed; ///< Flag indicates user confirms disposable removal. -static BOOL disinfectionConfirmed; ///< Flag indicates user confirms disinfection selection. +static DD_COMMAND_T selectedDisinfectionCommand; ///< Flag indicates user confirms disinfection selection. +static volatile U32 postTreatmentStateBroadcastTimer; ///< Timer counter for pending power off request. + static TD_POST_TREATMENT_STATE_T currentPostTreatmentState; ///< Current Post-Treatment sub-state // ********** private function prototypes ********** @@ -63,7 +66,7 @@ patientDisconnectionConfirmed = FALSE; patientDisconnectHandled = FALSE; disposableRemovalConfirmed = FALSE; - disinfectionConfirmed = FALSE; + selectedDisinfectionCommand = DD_CMD_NONE; currentPostTreatmentState = TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE; } @@ -97,50 +100,60 @@ **************************************************************************/ static void setPostTreatStateTransition( void ) { + // Disable air trap level control. resetAirTrap(); - resetBloodPumpRotorCount(); - resetPreLoadStatus(); - disableEjectorMotor(); - // Set valves to default positions - set3WayValveState( H13_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - set3WayValveState( H20_VALV, VALVE_3WAY_COMMON_TO_CLOSED_STATE ); - if ( VALVE_STATE_IDLE == getValveState( H1_VALV ) ) - { - setValvePosition( H1_VALV, VALVE_POSITION_A_INSERT_EJECT ); - } - if ( VALVE_STATE_IDLE == getValveState( H19_VALV ) ) - { - setValvePosition( H19_VALV, VALVE_POSITION_A_INSERT_EJECT ); - } - // Stop H12 air pump - setAirPumpState( AIR_PUMP_STATE_OFF, AIR_PUMP_MOTOR_OFF ); + // H12 Air Pump - Off. + setAirPumpState( AIR_PUMP_STATE_OFF, + AIR_PUMP_MOTOR_OFF ); + // H13 Air Trap Valve In - Closed. + set3WayValveState( H13_VALV, + VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + // H20 Air Trap Valve Out - Closed. + set3WayValveState( H20_VALV, + VALVE_3WAY_COMMON_TO_CLOSED_STATE ); + //H10 Heparin/Syringe Pump - Off. + stopSyringePump(); - signalBloodPumpHardStop(); - - // TODO: H10 syringe/heparin pump OFF - switch( currentPostTreatmentState ) + switch ( currentPostTreatmentState ) { case TD_POST_TREATMENT_PATIENT_DISCONNECTION_STATE: signalBloodPumpHardStop(); + disableEjectorMotor(); + //TODO check on valve positions + setValvePosition( H1_VALV, + VALVE_POSITION_C_CLOSE ); + setValvePosition( H19_VALV, + VALVE_POSITION_C_CLOSE ); break; case TD_POST_TREATMENT_AUTO_EJECT_STATE: signalBloodPumpHardStop(); break; case TD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE: - //TODO: actuator configuration; + signalBloodPumpHardStop(); + disableEjectorMotor(); + setValvePosition( H1_VALV, + VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H19_VALV, + VALVE_POSITION_A_INSERT_EJECT ); break; case TD_POST_TREATMENT_DISINFECTION_STATE: - //TODO: actuator configuration; + signalBloodPumpHardStop(); + disableEjectorMotor(); + setValvePosition( H1_VALV, + VALVE_POSITION_A_INSERT_EJECT ); + setValvePosition( H19_VALV, + VALVE_POSITION_A_INSERT_EJECT ); break; - default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, - SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1, - currentPostTreatmentState ); - break; + default: + SET_ALARM_WITH_2_U32_DATA( + ALARM_ID_TD_SOFTWARE_FAULT, + SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE1, + currentPostTreatmentState ); + break; } } @@ -188,6 +201,11 @@ currentPostTreatmentState ); break; } + if ( TRUE == didTimeout( postTreatmentStateBroadcastTimer, POST_TREATMENT_STATE_BROADCAST_INTERVAL_MS ) ) + { + postTreatmentStateBroadcastTimer = getMSTimerCount(); + //TODO: broadcast current state to UI + } if ( prevPostTreatmentState != currentPostTreatmentState) { @@ -312,15 +330,26 @@ { TD_POST_TREATMENT_STATE_T state = TD_POST_TREATMENT_DISINFECTION_STATE; - if ( TRUE == disinfectionConfirmed ) + switch ( selectedDisinfectionCommand ) { - disinfectionConfirmed = FALSE; - - /* - * TODO: - * Process the selected disinfection option and request the - * appropriate transition to Standby. - */ + case DD_CMD_NONE: + //TODO: transitionToStandbyMode + break; + case DD_CMD_START_FLUSH: + //TODO: Need to send info to DD + break; + case DD_CMD_START_DISINFECT_HEAT: + //TODO: Need to send info to DD + break; + case DD_CMD_START_DISINFECT_CITRIC_DD: + break; + case DD_CMD_START_DISINFECT_CITRIC_DD_IOFP: + break; + case DD_CMD_START_DISINFECT_SUBSTITUTION_PORT: + break; + default: + //TODO: do i need to set any alarm here + break; } return state; @@ -357,12 +386,12 @@ * The signalUserConfirmDisinfection signals Post-Treatment mode that * the user has confirmed the disinfection selection. * @details \b Inputs: none - * @details \b Outputs: disinfectionConfirmed + * @details \b Outputs: selectedDisinfectionCommand * @return none *************************************************************************/ -void signalUserConfirmDisinfection( void ) +void signalUserConfirmDisinfection( DD_COMMAND_T state ) { - disinfectionConfirmed = TRUE; + selectedDisinfectionCommand = state; } Index: firmware/App/Modes/ModePostTreat.h =================================================================== diff -u -ree2499c1609be043990ff01c0af98f3005022780 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Modes/ModePostTreat.h (.../ModePostTreat.h) (revision ee2499c1609be043990ff01c0af98f3005022780) +++ firmware/App/Modes/ModePostTreat.h (.../ModePostTreat.h) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -18,6 +18,7 @@ #ifndef __MODE_POST_TREATMENT_H__ #define __MODE_POST_TREATMENT_H__ +#include "DDDefs.h" #include "TDCommon.h" #include "TDDefs.h" @@ -29,6 +30,8 @@ * @{ */ +#define POST_TREATMENT_STATE_BROADCAST_INTERVAL_MS 1000 + // ********** public function prototypes ********** void initPostTreatmentMode( void ); // Initialize this module @@ -39,7 +42,7 @@ void signalUserConfirmPatientDisconnection( void ); void signalUserConfirmDisposableRemoval( void ); -void signalUserConfirmDisinfection( void ); +void signalUserConfirmDisinfection( DD_COMMAND_T state ); /**@}*/ Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r1fa3d19e3ca08af7cedbf481265989830dba2627 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 1fa3d19e3ca08af7cedbf481265989830dba2627) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -18,11 +18,14 @@ #include "AirTrap.h" #include "BloodFlow.h" #include "Buttons.h" +#include "DDDefs.h" #include "DDInterface.h" #include "Messaging.h" +#include "ModeInitPOST.h" +#include "ModePostTreat.h" #include "ModePreTreat.h" -#include "ModeTreatment.h" #include "ModeStandby.h" +#include "ModeTreatment.h" #include "OperationModes.h" #include "Switches.h" #include "SystemCommTD.h" @@ -40,18 +43,33 @@ #define USER_COMMAND_CANCEL 0 ///< Cancel treatment workflow command code. #define USER_COMMAND_INITIATE 1 ///< Initiate treatment workflow command code. +/// DD cleaning mode status data structure +typedef struct +{ + BOOL startCleaningMode; ///< Flag to indicate to start cleaning mode. + DD_COMMAND_T startRequestCmdID; ///< DD cleaning mode start request command ID. + ALARM_ID_T alarmID; ///< The informative alarm to trigger for each cleaning mode. + DD_OP_MODE_T ddOpMode; ///< DD operation mode. + BOOL sampleRqstTrgrd; ///< Flag to indicate the sample alarm has been triggered (for RO perm and chem flush). + GENERIC_CONFIRM_ID_T sampleRequestID; ///< Sample request pass/fail message status. + GENERIC_CONFIRM_ID_T stopRequestCmdID; ///< Stop DD cleaning request command ID +} DD_CLEANING_MODE_STATUS_T; + // ********** private data ********** static TD_STANDBY_STATE_T currentStandbyState; ///< Current state (sub-mode) of standby mode. static BOOL treatStartReqReceived; ///< Flag indicates user has requested initiation of a treatment. static BOOL homingInitiated; ///< Flag indicates actuators have been homed. static FLUID_TYPE_T fluidType; ///< Fluid type assigned based on user selection. static TREATMENT_TYPE_T modality; ///< Modality from the treatment initiation. +static DD_CLEANING_MODE_STATUS_T currentDDCleaningMode; ///< Current DD cleaning mode status. // ********** private function prototypes ********** static TD_STANDBY_STATE_T handleStandbyModeStartState( void ); static TD_STANDBY_STATE_T handleStandbyModeWaitForTreatmentState( void ); +static void setRequestedCleaningMode( DD_OP_MODE_T opMode, BOOL isHeatDisPassiveCool ); +static TD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ); /*********************************************************************//** * @brief @@ -143,6 +161,10 @@ currentStandbyState = handleStandbyModeWaitForTreatmentState(); break; + case STANDBY_WAIT_FOR_DISINFECT_STATE: + currentStandbyState = handleStandbyModeWaitForDisinfectState(); + break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_TD_SOFTWARE_FAULT, SW_FAULT_ID_MODE_STANDBY_INVALID_STATE, currentStandbyState ); currentStandbyState = STANDBY_START_STATE; @@ -293,6 +315,66 @@ /*********************************************************************//** * @brief + * The handleStandbyModeWaitForDisinfectState function handles wait for + * disinfect state. + * @details \b Inputs: flushStartReqReceived, heatDisinfectStartReqReceived, + * chemDisinfectStartReqReceived + * @details \b Outputs: none + * @return next state of the standby mode state machine + *************************************************************************/ +static TD_STANDBY_STATE_T handleStandbyModeWaitForDisinfectState( void ) +{ + TD_STANDBY_STATE_T state = STANDBY_WAIT_FOR_DISINFECT_STATE; + + if ( TRUE == currentDDCleaningMode.startCleaningMode ) + { + switch ( currentDDCleaningMode.ddOpMode ) + { + case DD_MODE_FLUS: + cmdStartDDFlush(); + break; + + case DD_MODE_HEAT: +// if ( DD_CMD_START_HEAT_DISINFECT_ACTIVE_COOL == currentDDCleaningMode.startRequestCmdID ) +// { +// //cmdStartDDHeatDisinfectActiveCool(); +// } +// else +// { +// //cmdStartDDHeatDisinfectPassiveCool(); +// } + break; + + case DD_MODE_HCOL: + //cmdStartDDActiveCool(); + break; + } + state = STANDBY_WAIT_FOR_DD_CLEANING_MODE_CMD_RESPONSE_STATE; + } + else + { + switch ( getDDOpMode() ) + { + case DD_MODE_FLUS: + case DD_MODE_HEAT: + // This is for the situations that any of the disinfect modes are started using the proxy commands while the HD + // is in this state of the Standby Mode. + setRequestedCleaningMode( getDDOpMode(), FALSE ); + state = STANDBY_WAIT_FOR_DD_CLEANING_MODE_TO_START_STATE; + currentDDCleaningMode.startCleaningMode = FALSE; + break; + + default: + // Do nothing we are not in the cleaning mode + break; + } + } + + return state; +} + +/*********************************************************************//** + * @brief * The setFluidType function sets the fluid type based on the user's * treatment selection from the home screen. * @details \b Inputs: none @@ -315,6 +397,77 @@ /*********************************************************************//** * @brief + * The setRequestedCleaningMode function sets the variables for the requested + * DD cleaning mode. + * @details \b Inputs: currentDDCleaningMode + * @details \b Outputs: none + * @param opMode DD operation mode that has been requested (i.e. heat disinfect) + * @param isHeatDisPassiveCool boolean flag to indicate whether this is a passive + * cool heat disinfect or not. + * @return none + *************************************************************************/ +static void setRequestedCleaningMode( DD_OP_MODE_T opMode, BOOL isHeatDisPassiveCool ) +{ + switch ( opMode ) + { + case DD_MODE_FLUS: + currentDDCleaningMode.startCleaningMode = TRUE; + currentDDCleaningMode.startRequestCmdID = DD_CMD_START_FLUSH; + currentDDCleaningMode.ddOpMode = DD_MODE_FLUS; + currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_DISINFECT_FLUSH; + currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_WATERFLUSH; + break; + +// case DD_MODE_HEAT: +// currentDDCleaningMode.startCleaningMode = TRUE; +// currentDDCleaningMode.startRequestCmdID = ( FALSE == isHeatDisPassiveCool ? DD_CMD_START_HEAT_DISINFECT_ACTIVE_COOL : DD_CMD_START_HEAT_DISINFECT_PASSIVE_COOL ); +// currentDDCleaningMode.ddOpMode = DD_MODE_HEAT; +// currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_DISINFECT_HEAT; +// currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_HEAT; +// break; +// +// case DD_MODE_CHEM: +// currentDDCleaningMode.startCleaningMode = TRUE; +// currentDDCleaningMode.startRequestCmdID = DD_CMD_START_CHEM_DISINFECT; +// currentDDCleaningMode.ddOpMode = DD_MODE_CHEM; +// currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_DISINFECT_CHEM; +// currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_CHEMICAL; +// break; +// +// case DD_MODE_CHFL: +// currentDDCleaningMode.startCleaningMode = TRUE; +// currentDDCleaningMode.startRequestCmdID = DD_CMD_START_CHEM_DISINFECT_FLUSH; +// currentDDCleaningMode.ddOpMode = DD_MODE_CHFL; +// currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_DISINFECT_CHEM_FLUSH; +// currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_CHEMICAL_FLUSH; +// break; +// +// case DD_MODE_HCOL: +// currentDDCleaningMode.startCleaningMode = FALSE; +// currentDDCleaningMode.startRequestCmdID = DD_CMD_START_ACTIVE_COOL; +// currentDDCleaningMode.ddOpMode = DD_MODE_HCOL; +// currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_DISINFECT_HEAT_COOL; +// currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_ACTIVE_COOL; +// break; +// +// case DD_MODE_ROPS: +// currentDDCleaningMode.startCleaningMode = TRUE; +// currentDDCleaningMode.startRequestCmdID = DD_CMD_START_RO_PERMEATE_SAMPLE; +// currentDDCleaningMode.ddOpMode = DD_MODE_ROPS; +// currentDDCleaningMode.sampleRqstTrgrd = FALSE; +// currentDDCleaningMode.alarmID = ALARM_ID_TD_RO_PERMEATE_SAMPLE; +// currentDDCleaningMode.stopRequestCmdID = GENERIC_CONFIRM_ID_DISINFECT_STOP_RO_PERMEATE_SAMPLE; +// break; + } +} + +/*********************************************************************//** + * @brief * The getFluidType function returns the current fluid type assigned * based on the user's treatment selection. * @details \b Inputs: none @@ -458,7 +611,48 @@ } } +/*********************************************************************//** + * @brief + * The signalUserInitiateFlushMode function handles user initiation of flush + * mode. + * @details \b Inputs: currentStandbyState + * @details \b Outputs: currentStandbyState + * @return TRUE if signal accepted, FALSE if not + *************************************************************************/ +BOOL signalUserInitiateFlushMode( void ) +{ + BOOL result = FALSE; + REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + UI_RESPONSE_PAYLOAD_T response; + memset( &response, 0, sizeof( UI_RESPONSE_PAYLOAD_T ) ); + if ( MODE_STAN == getCurrentOperationMode() ) + { + if ( ( STANDBY_WAIT_FOR_DISINFECT_STATE == currentStandbyState ) || ( STANDBY_WAIT_FOR_TREATMENT_STATE == currentStandbyState ) ) + { + if ( TRUE == isDDCommunicating() ) + { + setRequestedCleaningMode( DD_MODE_FLUS, FALSE ); + result = TRUE; + currentStandbyState = STANDBY_WAIT_FOR_DISINFECT_STATE; + rejReason = REQUEST_REJECT_REASON_NONE; + } + else + { + rejReason = REQUEST_REJECT_REASON_DD_COMM_LOST; + } + } + } + + // Respond to request to start treatment. + response.accepted = result; + response.rejectionReason = rejReason; + sendMessage( MSG_ID_TD_DISINFECT_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*) &response, sizeof( UI_RESPONSE_PAYLOAD_T ) ); + + return result; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -r8345f0415ce34f2f47afcbf613a00216769f51c6 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 8345f0415ce34f2f47afcbf613a00216769f51c6) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -47,6 +47,7 @@ BOOL signalUserInitiateTreatment( MESSAGE_T *message ); // User has initiated/cancelled treatment workflow void signalAlarmActionToStandbyMode( ALARM_ACTION_T action ); // Execute alarm action as appropriate for Standby mode +BOOL signalUserInitiateFlushMode( void ); void setFluidType( TREATMENT_TYPE_T modality ); // Set a specific fluid type FLUID_TYPE_T getFluidType( void ); // Get a specific fluid type Index: firmware/App/Services/DDInterface.c =================================================================== diff -u -r1b83a4555c4040a45cecfbea45b6570812ab281e -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision 1b83a4555c4040a45cecfbea45b6570812ab281e) +++ firmware/App/Services/DDInterface.c (.../DDInterface.c) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -15,6 +15,7 @@ * ***************************************************************************/ +#include "DDDefs.h" #include "DDInterface.h" #include "MessagePayloads.h" #include "Messaging.h" @@ -616,7 +617,8 @@ { dialysateDeliveryCmdSet.substitutionRate = qs; #ifndef TEST_UI_ONLY - sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); + sendMessage( MSG_ID_DD_GEN_DIALYSATE_REQUEST_DATA, COMM_BUFFER_OUT_CAN_TD_2_DD, + (U08*)(&dialysateDeliveryCmdSet), sizeof( DIALYSATE_DELIVERY_REQ_PAYLOAD_T ) ); #endif } else @@ -625,7 +627,25 @@ } } +/*********************************************************************//** + * @brief + * The cmdStartDDFlush function sends a start flush command message to + * the DD. + * @details \b Inputs: none + * @details \b Outputs: start flush mode command sent to DD. + * @return none + *************************************************************************/ +void cmdStartDDFlush( void ) +{ + UI_RESPONSE_PAYLOAD_T response; + memset( &response, 0, sizeof( UI_RESPONSE_PAYLOAD_T ) ); + response.accepted = TRUE; + ddCmdResp[ DD_CMD_START_FLUSH ].commandID = DD_CMD_NONE; + sendMessage( MSG_ID_TD_DD_FLUSH_REQUEST, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*) &response, sizeof( UI_RESPONSE_PAYLOAD_T ) ); +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/DDInterface.h =================================================================== diff -u -r9c833ef5623ce842267e284d958820ac0dc3a7fc -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision 9c833ef5623ce842267e284d958820ac0dc3a7fc) +++ firmware/App/Services/DDInterface.h (.../DDInterface.h) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -64,6 +64,7 @@ void cmdBypassDialyzer( BOOL bypass ); void cmdStopGenerateDialysate( void ); void cmdSubstitutionRate (F32 qs ); +void cmdStartDDFlush( void ); void handleDDCommandResponse( DD_CMD_RESPONSE_T *ddCmdRespPtr ); BOOL getDDCommandResponse( U32 commandID, DD_CMD_RESPONSE_T *cmdRespPtr ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -red21c935443549b87ab6665e76ce1d32d9867082 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision ed21c935443549b87ab6665e76ce1d32d9867082) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -142,6 +142,7 @@ { MSG_ID_FFU_SIGNAL_TD_UPDATE_AVAILABLE, &handleUpdateAvailable }, { MSG_ID_UI_FLUID_BOLUS_REQUEST, &handleFluidBolusRequest }, { MSG_ID_UI_GENERIC_CONFIRMATION_RESULT_RESPONSE, &handleUIConfirmationResponse }, + { MSG_ID_UI_DISINFECT_REQUEST, &handleUIDisinfectRequest }, { MSG_ID_UI_PATIENT_DISCONNECT_CONFIRM_REQUEST, &handlePatientDisconnectionConfirmCmd }, { MSG_ID_UI_POST_TREATMENT_DISPOSABLE_REMOVAL_CONFIRM_REQUEST, &handleDisposableRemovalConfirmCmd }, { MSG_ID_UI_POST_TREATMENT_DISINFECTION_SELECTION_REQUEST, &handleDisinfectionConfirmCmd }, @@ -560,14 +561,68 @@ /*********************************************************************//** * @brief + * The handleUIDisinfectRequest function handles a disinfect/flush user + * action command message from the UI. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL handleUIDisinfectRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 cmd; + + memcpy( &cmd, message->payload, sizeof(U32) ); + + if ( DD_DISINFECT_FLUSH_STATE == cmd ) // Command 0 = Flush + { + result = signalUserInitiateFlushMode(); + } +// else if ( DD_DISINFECT_HEAT_STATE_ACTIVE_COOL == cmd ) // Command 1 = Heat disinfect active cool +// { +// result = signalUserInitiateHeatDisinfectActiveCoolMode(); +// } +// else if ( DD_DISINFECT_CHEM_STATE == cmd ) // Command 2 = chemical disinfect +// { +// result = signalUserInitiateChemicalDisinfectMode(); +// } +// else if ( DD_DISINFECT_CHEM_FLUSH_STATE == cmd ) // Command 3 = chemical disinfect flush +// { +// result = signalUserInitiateChemicalDisinfectFlushMode(); +// } +// else if ( DD_DISINFECT_RO_PERMEATE_SAMPLE_STATE == cmd ) // Command 4 = RO permeate sample +// { +// result = signalUserInitiateROPermeateSampleMode(); +// } +// else if ( DD_DISINFECT_HEAT_STATE_PASSIVE_COOL == cmd ) // Command 5 = Heat disinfect passive coode +// { +// result = signalUserInitiateHeatDisinfectPassiveCoolMode(); +// } +// else if ( DD_DISINFECT_ACTIVE_COOL == cmd ) // Command 6 = Active cool +// { +// result = signalUserInitiateActiveCoolMode(); +// } + } + + sendAckResponseMsg( (MSG_ID_T)message->hdr.msgID, COMM_BUFFER_OUT_CAN_TD_2_UI, result ); + + return result; +} + +/*********************************************************************//** + * @brief * The handlePatientDisconnectionConfirmCmd function handles user * confirmation of patient disconnection. * @details \b Inputs: Patient disconnection confirmation message. * @details \b Outputs: Acceptance response and patient disconnection signal. * @param message Pointer to the message to handle. * @return TRUE if the confirmation is accepted, FALSE otherwise. *************************************************************************/ -static BOOL handlePatientDisconnectionConfirmCmd( MESSAGE_T *message ) +BOOL handlePatientDisconnectionConfirmCmd( MESSAGE_T *message ) { BOOL result = FALSE; BOOL modeValid = FALSE; @@ -596,7 +651,9 @@ } response.accepted = result; - sendMessage( MSG_ID_TD_PATIENT_DISCONNECT_CONFIRM_RESPONSE, COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)(&response), sizeof( UI_RESPONSE_PAYLOAD_T ) ); + sendMessage( MSG_ID_TD_PATIENT_DISCONNECT_CONFIRM_RESPONSE, + COMM_BUFFER_OUT_CAN_TD_2_UI, (U08*)(&response), + sizeof( UI_RESPONSE_PAYLOAD_T ) ); return result; } @@ -610,7 +667,7 @@ * @param message Pointer to the message to handle. * @return TRUE if the confirmation is accepted, FALSE otherwise. *************************************************************************/ -static BOOL handleDisposableRemovalConfirmCmd( MESSAGE_T *message ) +BOOL handleDisposableRemovalConfirmCmd( MESSAGE_T *message ) { BOOL result = FALSE; BOOL modeValid = FALSE; @@ -652,23 +709,24 @@ /*********************************************************************//** * @brief - * The handleDisinfectionConfirmCmd function handles user confirmation - * of the disinfection selection. - * @details \b Inputs: Disinfection confirmation message. - * @details \b Outputs: Acceptance response and disinfection confirmation signal. + * The handleDisinfectionConfirmCmd function handles user selection + * of the Post-Treatment disinfection operation. + * @details \b Inputs: Disinfection selection message. + * @details \b Outputs: Acceptance response and selected disinfection command. * @param message Pointer to the message to handle. - * @return TRUE if the confirmation is accepted, FALSE otherwise. + * @return TRUE if the selection is accepted, FALSE otherwise. *************************************************************************/ -static BOOL handleDisinfectionConfirmCmd( MESSAGE_T *message ) +BOOL handleDisinfectionConfirmCmd( MESSAGE_T *message ) { BOOL result = FALSE; BOOL modeValid = FALSE; TD_OP_MODE_T mode = getCurrentOperationMode(); UI_RESPONSE_PAYLOAD_T response; + DD_COMMAND_T command = DD_CMD_NONE; response.rejectionReason = REQUEST_REJECT_REASON_NONE; - if ( 0 == message->hdr.payloadLen ) + if ( sizeof( U32 ) == message->hdr.payloadLen ) { modeValid = ( MODE_POST == mode ) ? TRUE : FALSE; @@ -679,7 +737,8 @@ } else { - signalUserConfirmDisinfection(); + memcpy( &command , &message->payload[ 0 ], sizeof(U32) ); + signalUserConfirmDisinfection( command ); result = TRUE; } } Index: firmware/App/Services/Messaging.h =================================================================== diff -u -ree2499c1609be043990ff01c0af98f3005022780 -rbcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e --- firmware/App/Services/Messaging.h (.../Messaging.h) (revision ee2499c1609be043990ff01c0af98f3005022780) +++ firmware/App/Services/Messaging.h (.../Messaging.h) (revision bcc80fde38b8b94c64a7ad615f9ca3cb6e98c77e) @@ -144,6 +144,10 @@ BOOL handleTesterLogInRequest( MESSAGE_T *message ); BOOL handleUpdateAvailable( MESSAGE_T *message ); BOOL handleUIVersionResponse( MESSAGE_T *message ); +BOOL handleUIDisinfectRequest( MESSAGE_T *message ); +BOOL handlePatientDisconnectionConfirmCmd( MESSAGE_T *message ); +BOOL handleDisposableRemovalConfirmCmd( MESSAGE_T *message ); +BOOL handleDisinfectionConfirmCmd( MESSAGE_T *message ); // Test send message helper functions BOOL sendEvent( TD_EVENT_ID_T event, EVENT_DATA_T dat1, EVENT_DATA_T dat2 );