Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r4b750c76b15ab2a0d76c76b2d36997fe472e3693 -r22cab5beebd48faf29e78c5003b0bdd0a32748e8 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 4b750c76b15ab2a0d76c76b2d36997fe472e3693) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 22cab5beebd48faf29e78c5003b0bdd0a32748e8) @@ -1037,6 +1037,7 @@ BOOL noEndTreatment = FALSE; BOOL usrAckReq = FALSE; BOOL noMinimize = TRUE; + HD_OP_MODE_T currentMode = getCurrentOperationMode(); ALARM_ID_T a; // Determine alarm flags @@ -1093,8 +1094,9 @@ noEndTreatment = TRUE; } - // If in Treatment-Stop state, allow user to minimize the alarm window - if ( ( MODE_TREA == getCurrentOperationMode() ) && ( TREATMENT_STOP_STATE == getTreatmentState() ) ) + // If in Treatment-Stop state or Fault Mode, allow user to minimize the alarm window + if ( ( MODE_SERV == currentMode ) || + ( ( MODE_TREA == currentMode ) && ( TREATMENT_STOP_STATE == getTreatmentState() ) ) ) { noMinimize = FALSE; } Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r208ceefa8e8b1cc30feb93be771ced6d313e6995 -r22cab5beebd48faf29e78c5003b0bdd0a32748e8 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 208ceefa8e8b1cc30feb93be771ced6d313e6995) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 22cab5beebd48faf29e78c5003b0bdd0a32748e8) @@ -1137,33 +1137,14 @@ handleHDUsageInfoRequest( message ); break; - case MSG_ID_HD_STOP_RTC_CLOCK: - handleStopHDRTCClock( message ); - break; - case MSG_ID_DG_CONCENTRATE_MIXING_RATIOS_DATA: handleDGMixingRatios( message ); break; - case MSG_ID_HD_GET_USAGE_INFO_RECORD: - handleGetHDUsageInfoRecord( message ); + case MSG_ID_UI_REQUEST_SERVICE_MODE: + handleUIServiceModeRequest( message ); break; - case MSG_ID_HD_SET_USAGE_INFO_RECORD: - handleSetHDUsageInfoRecord( message ); - break; - - case MSG_ID_HD_SET_BLOOD_LEAK_2_EMB_MODE: - handleSetBloodLeak2EmbeddedMode( message ); - break; - - case MSG_ID_HD_SET_BLOOD_LEAK_EMB_MODE_COMMAND: - handleSetBloodEmbeddedModeCommand( message ); - break; - - case MSG_ID_HD_SET_BLOOD_LEAK_EMB_MODE_SET_POINT: - break; - // NOTE: this always must be the last case case MSG_ID_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); @@ -1653,6 +1634,29 @@ handleSetHDSoftwareConfigRecord( message ); break; + case MSG_ID_HD_STOP_RTC_CLOCK: + handleStopHDRTCClock( message ); + break; + + case MSG_ID_HD_GET_USAGE_INFO_RECORD: + handleGetHDUsageInfoRecord( message ); + break; + + case MSG_ID_HD_SET_USAGE_INFO_RECORD: + handleSetHDUsageInfoRecord( message ); + break; + + case MSG_ID_HD_SET_BLOOD_LEAK_2_EMB_MODE: + handleSetBloodLeak2EmbeddedMode( message ); + break; + + case MSG_ID_HD_SET_BLOOD_LEAK_EMB_MODE_COMMAND: + handleSetBloodEmbeddedModeCommand( message ); + break; + + case MSG_ID_HD_SET_BLOOD_LEAK_EMB_MODE_SET_POINT: + break; + default: // Unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r208ceefa8e8b1cc30feb93be771ced6d313e6995 -r22cab5beebd48faf29e78c5003b0bdd0a32748e8 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 208ceefa8e8b1cc30feb93be771ced6d313e6995) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 22cab5beebd48faf29e78c5003b0bdd0a32748e8) @@ -6995,7 +6995,6 @@ U32 currentMessage; U32 totalMessages; U32 payloadLength; - BOOL status = FALSE; U08* payloadPtr = message->payload; @@ -7019,6 +7018,72 @@ /*********************************************************************//** * @brief +* The handleUIServiceModeRequest function handles a request to enter service +* mode. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleUIServiceModeRequest( MESSAGE_T *message ) +{ + BOOL status = FALSE; + HD_OP_MODE_T currentMode = getCurrentOperationMode(); + REQUEST_REJECT_REASON_CODE_T reject; + + if ( 0 == message->hdr.payloadLen ) + { + if ( ( MODE_STAN == currentMode ) || ( MODE_FAUL == currentMode ) ) + { + status = TRUE; + requestNewOperationMode( MODE_SERV ); + reject = REQUEST_REJECT_REASON_NONE; + } + else + { + reject = REQUEST_REJECT_REASON_TREATMENT_IN_PROGRESS; + } + } + else + { + reject = REQUEST_REJECT_REASON_INVALID_REQUEST_FORMAT; + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); + sendUIServiceModeResponse( status, (U32)reject ); +} + +/*********************************************************************//** + * @brief + * The sendUIServiceModeResponse function sends out the HD response to a + * UI request to go to service mode. + * @details Inputs: none + * @details Outputs: Service mode request response msg constructed and queued + * @param accepted TRUE if request was accepted, FALSE if not + * @param rejCode Reject reason code explaining why request was rejected + * @return none + *************************************************************************/ +void sendUIServiceModeResponse( BOOL accepted, U32 rejCode ) +{ + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_RESPONSE_SERVICE_MODE_REQUEST; + msg.hdr.payloadLen = sizeof( BOOL ) + sizeof( U32 ); + + memcpy( payloadPtr, &accepted, sizeof( BOOL ) ); + payloadPtr += sizeof( BOOL ); + memcpy( payloadPtr, &rejCode, sizeof( U32 ) ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_REQUIRED ); +} + +/*********************************************************************//** +* @brief * The handleGetHDUsageInfoRecord function handles a request to get the HD * usage information record. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r208ceefa8e8b1cc30feb93be771ced6d313e6995 -r22cab5beebd48faf29e78c5003b0bdd0a32748e8 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 208ceefa8e8b1cc30feb93be771ced6d313e6995) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 22cab5beebd48faf29e78c5003b0bdd0a32748e8) @@ -422,6 +422,9 @@ // MSG_ID_HD_SET_SW_CONFIG_RECORD void handleSetHDSoftwareConfigRecord( MESSAGE_T *message ); +// MSG_ID_UI_REQUEST_SERVICE_MODE +void handleUIServiceModeRequest( MESSAGE_T *message ); +void sendUIServiceModeResponse( BOOL accepted, U32 rejCode ); #ifdef EMC_TEST_BUILD // MSG_ID_CAN_ERROR_COUNT