Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -r8910c1a21976afcc84fe1d9504916efbc192325d -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 8910c1a21976afcc84fe1d9504916efbc192325d) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -146,6 +146,14 @@ postState = handlePOSTStatus( testStatus ); break; + case POST_STATE_ALARM_AUDIO: +#ifdef DONT_SKIP_NV_POST + // Skip the rest of the POSTs + postState = POST_STATE_COMPLETED; + testStatus = SELF_TEST_STATUS_PASSED; +#endif + break; + case POST_STATE_ALARM_LAMP: #ifdef DONT_SKIP_NV_POST // Skip the rest of the POSTs Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r049175cd6c514657ede645412cab05ce707d002f -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 049175cd6c514657ede645412cab05ce707d002f) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -32,6 +32,7 @@ #include "SystemComm.h" #include "SystemCommMessages.h" #include "TaskGeneral.h" +#include "Timers.h" #ifdef EMC_TEST_BUILD // TODO - test code #include "FPGA.h" #endif @@ -43,7 +44,7 @@ // ********** private definitions ********** -#define DG_DISINFECTS_DATA_PUB_INTERVAL ( 4 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Mode chem disinfect data publish interval in counts. +#define DISINFECTS_DATA_PUB_INTERVAL ( 4 * MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< Disinfects data publish interval in counts. // ********** private data ********** @@ -54,10 +55,11 @@ static BOOL heatDisinfectStartReqReceived = FALSE; ///< Flag indicates user has requested initiation of heat disinfect mode. static BOOL chemDisinfectStartReqReceived = FALSE; ///< Flag indicates user has requested initiation of chemical disinfect mode. static U32 dataPublishCounter = 0; ///< Disinfects data publish counter. +static BOOL hasDisinfectCmdBeenSet = FALSE; ///< Flag indicates that a disinfect command has been set. // ********** private function prototypes ********** -static void publishDisinfectData( U32 disinfectSubModeState ); +static void publishDisinfectData( void ); /*********************************************************************//** * @brief @@ -68,10 +70,11 @@ *************************************************************************/ void initStandbyMode( void ) { - currentStandbyState = STANDBY_START_STATE; - treatStartReqReceived = FALSE; - flushStartReqReceived = FALSE; - dataPublishCounter = 0; + currentStandbyState = STANDBY_START_STATE; + treatStartReqReceived = FALSE; + flushStartReqReceived = FALSE; + dataPublishCounter = 0; + hasDisinfectCmdBeenSet = FALSE; } /*********************************************************************//** @@ -145,65 +148,71 @@ case STANDBY_WAIT_FOR_DISINFECT_STATE: if ( TRUE == flushStartReqReceived ) { - cmdStartDGFlush(); - currentStandbyState = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; + if ( FALSE == hasDisinfectCmdBeenSet ) + { + cmdStartDGFlush(); + hasDisinfectCmdBeenSet = TRUE; + } + else if ( DG_MODE_FLUS == getDGOpMode() ) + { + hasDisinfectCmdBeenSet = FALSE; + currentStandbyState = STANDBY_DG_FLUSH_IN_PROGRESS_STATE; + } } else if ( TRUE == heatDisinfectStartReqReceived ) { - cmdStartDGHeatDisinfect(); - currentStandbyState = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; + if ( FALSE == hasDisinfectCmdBeenSet ) + { + cmdStartDGHeatDisinfect(); + hasDisinfectCmdBeenSet = TRUE; + } + else if ( DG_MODE_HEAT == getDGOpMode() ) + { + hasDisinfectCmdBeenSet = FALSE; + currentStandbyState = STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE; + } } else if ( TRUE == chemDisinfectStartReqReceived ) { - cmdStartDGChemicalDisinfect(); - currentStandbyState = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; + if ( FALSE == hasDisinfectCmdBeenSet ) + { + cmdStartDGChemicalDisinfect(); + hasDisinfectCmdBeenSet = TRUE; + } + else if ( DG_MODE_CHEM == getDGOpMode() ) + { + hasDisinfectCmdBeenSet = FALSE; + currentStandbyState = STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE; + } } break; case STANDBY_DG_FLUSH_IN_PROGRESS_STATE: - { - DG_DISINFECT_UI_STATES_T state = getDGDisinfectsStates(); - U32 subModeState = state.flushUIState; - - publishDisinfectData( subModeState ); - - if( DG_MODE_STAN == getDGOpMode() ) + if ( getDGOpMode() != DG_MODE_FLUS ) { currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; } - } - break; + publishDisinfectData(); + break; case STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE: - { - DG_DISINFECT_UI_STATES_T state = getDGDisinfectsStates(); - U32 subModeState = state.heatDisinfectUIState; - - publishDisinfectData( subModeState ); - - if( DG_MODE_STAN == getDGOpMode() ) + if ( getDGOpMode() != DG_MODE_HEAT ) { currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; } - } - break; + publishDisinfectData(); + break; case STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE: - { - DG_DISINFECT_UI_STATES_T state = getDGDisinfectsStates(); - U32 subModeState = state.chemDisinfectUIState; - - publishDisinfectData( subModeState ); - - if( DG_MODE_STAN == getDGOpMode() ) + if ( getDGOpMode() != DG_MODE_CHEM ) { currentStandbyState = STANDBY_WAIT_FOR_TREATMENT_STATE; } - } - break; + publishDisinfectData(); + break; default: - // TODO - s/w fault + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_HD_STANDBY_INVALID_STATE, currentStandbyState ); currentStandbyState = STANDBY_START_STATE; break; } @@ -482,20 +491,34 @@ * @details Outputs: dataPublishCounter * @return: none *************************************************************************/ -static void publishDisinfectData( U32 disinfectSubModeState ) +static void publishDisinfectData( void ) { - if ( ++dataPublishCounter > DG_DISINFECTS_DATA_PUB_INTERVAL ) + if ( ++dataPublishCounter > DISINFECTS_DATA_PUB_INTERVAL ) { + DG_DISINFECT_UI_STATES_T state = getDGDisinfectsStates(); DISINFECTS_DATA_T data; - data.disinfectState = (U32)currentStandbyState; - data.disinfectSubModeState = disinfectSubModeState; + switch( currentStandbyState ) + { + case STANDBY_DG_FLUSH_IN_PROGRESS_STATE: + data.disinfectDGState = state.flushUIState; + break; + case STANDBY_DG_HEAT_DISINFECT_IN_PROGRESS_STATE: + data.disinfectDGState = state.heatDisinfectUIState; + break; + + case STANDBY_DG_CHEM_DISINFECT_IN_PROGRESS_STATE: + data.disinfectDGState = state.chemDisinfectUIState; + break; + } + + data.disinfectSubModeHDState = (U32)currentStandbyState; + broadcastDisinfectsData( &data ); dataPublishCounter = 0; } } - /**@}*/ Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -r049175cd6c514657ede645412cab05ce707d002f -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 049175cd6c514657ede645412cab05ce707d002f) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -34,8 +34,8 @@ /// DG disinfects data publish typedef struct { - U32 disinfectState; ///< DG disinfect state - U32 disinfectSubModeState; ///< DG disinfect sub mode state + U32 disinfectDGState; ///< DG disinfect state + U32 disinfectSubModeHDState; ///< HD disinfect sub mode state } DISINFECTS_DATA_T; // ********** public function prototypes ********** Index: firmware/App/Services/AlarmMgmt.h =================================================================== diff -u -r5b6e7cedbfced5d5ceff8d49fca6aacd04d7e037 -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision 5b6e7cedbfced5d5ceff8d49fca6aacd04d7e037) +++ firmware/App/Services/AlarmMgmt.h (.../AlarmMgmt.h) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -249,6 +249,7 @@ SW_FAULT_ID_HD_SYRINGE_INVALID_STATE, SW_FAULT_ID_MODE_POST_TREATMENT_INVALID_STATE, // 115 SW_FAULT_ID_POST_TREATMENT_RESERVOIR_MGMT_INVALID_STATE, + SW_FAULT_ID_HD_STANDBY_INVALID_STATE, NUM_OF_SW_FAULT_IDS } SW_FAULT_ID_T; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r049175cd6c514657ede645412cab05ce707d002f -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 049175cd6c514657ede645412cab05ce707d002f) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -1275,6 +1275,16 @@ handleDGCmdResp( message ); break; + case MSG_ID_DG_HEAT_DISINFECT_DATA: + handleHeatDisinfectUIStateReadingFromDG( message ); + break; + + case MSG_ID_DG_FLUSH_DATA: + break; + + case MSG_ID_DG_CHEM_DISINFECT_DATA: + break; + case MSG_ID_TESTER_LOGIN_REQUEST: handleTesterLogInRequest( message ); break; @@ -1307,10 +1317,6 @@ handleSetHDStandbyDisinfectSubmodeRequest( message ); break; - case MSG_ID_HD_DISINFECTS_UI_STATE_READINGS: - handleDisinfectUIStatesReadingFromDG( message ); - break; - default: // Unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r049175cd6c514657ede645412cab05ce707d002f -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 049175cd6c514657ede645412cab05ce707d002f) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -735,22 +735,81 @@ /*********************************************************************//** * @brief - * The handleDisinfectUIStatesReadingFromDG function handles the readings - * of the UI states of heat/chemical disinfect and flush modes. + * The handleFlushUIStateReadingFromDG function handles the readings of DG + * flush mode. * @details Inputs: none * @details Outputs: message handled * @param message a pointer to the message to handle * @return none *************************************************************************/ -void handleDisinfectUIStatesReadingFromDG( MESSAGE_T *message ) +void handleFlushUIStateReadingFromDG( MESSAGE_T *message ) { - if ( message->hdr.payloadLen == sizeof(DG_DISINFECT_UI_STATES_T) ) + if ( message->hdr.payloadLen == sizeof(MODE_FLUSH_DATA_T) ) { - DG_DISINFECT_UI_STATES_T payload; + MODE_FLUSH_DATA_T payload; + DG_DISINFECT_UI_STATES_T uiStates; - memcpy( &payload, message->payload, sizeof(DG_DISINFECT_UI_STATES_T) ); + memcpy( &payload, message->payload, sizeof(MODE_FLUSH_DATA_T) ); + + uiStates.heatDisinfectUIState = 0; + uiStates.chemDisinfectUIState = 0; + uiStates.flushUIState = payload.flushUIState; + + setDGDisinfectsStates( uiStates ); } } + +/*********************************************************************//** + * @brief + * The handleHeatDisinfectUIStateReadingFromDG function handles the readings + * of DG heat disinfect mode. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleHeatDisinfectUIStateReadingFromDG( MESSAGE_T *message ) +{ + if ( message->hdr.payloadLen == sizeof(MODE_HEAT_DISINFECT_DATA_T) ) + { + MODE_HEAT_DISINFECT_DATA_T payload; + DG_DISINFECT_UI_STATES_T uiStates; + + memcpy( &payload, message->payload, sizeof(MODE_HEAT_DISINFECT_DATA_T) ); + + uiStates.heatDisinfectUIState = payload.heatDisinfectUIState; + uiStates.chemDisinfectUIState = 0; + uiStates.flushUIState = 0; + + setDGDisinfectsStates( uiStates ); + } +} + +/*********************************************************************//** + * @brief + * The handleChemDisinfectUIStateReadingFromDG function handles the readings + * of DG chemical disinfect mode. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleChemDisinfectUIStateReadingFromDG( MESSAGE_T *message ) +{ + if ( message->hdr.payloadLen == sizeof(MODE_CHEMICAL_DISINFECT_DATA_T) ) + { + MODE_CHEMICAL_DISINFECT_DATA_T payload; + DG_DISINFECT_UI_STATES_T uiStates; + + memcpy( &payload, message->payload, sizeof(MODE_CHEMICAL_DISINFECT_DATA_T) ); + + uiStates.heatDisinfectUIState = 0; + uiStates.chemDisinfectUIState = payload.chemDisinfectUIState; + uiStates.flushUIState = 0; + + setDGDisinfectsStates( uiStates ); + } +} /*********************************************************************//** * @brief @@ -2400,7 +2459,7 @@ memcpy( payloadPtr, disinfectsData, sizeof( DISINFECTS_DATA_T ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED ); + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_2_UI, ACK_NOT_REQUIRED ); return result; } Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r049175cd6c514657ede645412cab05ce707d002f -rb7318644527939f0b8b01bd3999a9c187c64f40e --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 049175cd6c514657ede645412cab05ce707d002f) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision b7318644527939f0b8b01bd3999a9c187c64f40e) @@ -258,9 +258,15 @@ // MSG_ID_HD_SET_STANDBY_DISINFECT_SUB_MODE_RESPONSE BOOL handleSetHDStandbyDisinfectSubmodeResponse( BOOL accepted, U32 reason ); -// MSG_ID_HD_DISINFECTS_UI_STATE_READINGS -void handleDisinfectUIStatesReadingFromDG( MESSAGE_T *message ); +// MSG_ID_DG_FLUSH_DATA +void handleFlushUIStateReadingFromDG( MESSAGE_T *message ); +// MSG_ID_DG_HEAT_DISINFECT_DATA +void handleHeatDisinfectUIStateReadingFromDG( MESSAGE_T *message ); + +// MSG_ID_DG_CHEM_DISINFECT_DATA +void handleChemDisinfectUIStateReadingFromDG( MESSAGE_T *message ); + // *********** public DG command functions ********** // MSG_ID_SET_DG_DIALYSATE_TEMP_TARGETS