Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -378,4 +378,66 @@ return state; } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testValidateDDFaultChangeReq function validate whether request + * operation sub mode is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return TRUE if request is legal, FALSE if not + *************************************************************************/ +BOOL testValidateDDFaultChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_DD_FAULT_STATES ) + { + switch ( newSubMode ) + { + case DD_FAULT_STATE_START: + case DD_FAULT_DEENERGIZED_STATE: + case DD_FAULT_ENERGIZED_STATE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewDDFaultSubMode function request transition to a + * new operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return none + *************************************************************************/ +void testSignalNewDDFaultSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_DD_FAULT_STATES ) + { + faultState = (DD_FAULT_STATE_T)newSubMode; + + switch ( newSubMode ) + { + // Any of these state require no special handling + case DD_FAULT_STATE_START: + case DD_FAULT_DEENERGIZED_STATE: + case DD_FAULT_ENERGIZED_STATE: + default: + break; + } + } +} + /**@}*/ Index: firmware/App/Modes/ModeFault.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModeFault.h (.../ModeFault.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModeFault.h (.../ModeFault.h) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -41,6 +41,9 @@ void deenergizeActuators( BOOL parkPumps ); +BOOL testValidateDDFaultChangeReq( U32 newSubMode ); // Validate the requested fault sub mode transition is possible or not +void testSignalNewDDFaultSubMode( U32 newSubMode ); // Signal transition to new fault sub mode + /**@}*/ #endif Index: firmware/App/Modes/ModeGenDialysate.c =================================================================== diff -u -rb2e7c9194acd84783d2bbad64c5720410493e199 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision b2e7c9194acd84783d2bbad64c5720410493e199) +++ firmware/App/Modes/ModeGenDialysate.c (.../ModeGenDialysate.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -1300,4 +1300,71 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidateDDGenDialysateChangeReq function validate whether request + * operation sub mode is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return TRUE if request is legal, FALSE if not + *************************************************************************/ +BOOL testValidateDDGenDialysateChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_DD_GEND_MODE_STATES ) + { + switch ( newSubMode ) + { + // TODO add validate condition after checking with Vinay + case DD_GEND_STATE_START: + case DD_GEND_DIALYSATE_BYPASS_STATE: + case DD_GEND_DIALYSATE_DELIVERY_STATE: + case DD_GEND_ISOLATED_UF_STATE: + case DD_GEND_SPENT_CHAMBER_FILL_STATE: + case DD_GEND_BICARB_CHAMBER_FILL_STATE: + case DD_GEND_DIALYSATE_DELIVERY_PAUSE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewDDGenDialysateSubMode function request transition + * to a new operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return none + *************************************************************************/ +void testSignalNewDDGenDialysateSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_DD_GEND_MODE_STATES ) + { + genDialysateState = (DD_GEND_MODE_STATE_T)newSubMode; + + switch ( newSubMode ) + { + // TODO add logic after checking with Vinay + // Any of these state require no special handling + case DD_GEND_STATE_START: + case DD_GEND_DIALYSATE_BYPASS_STATE: + case DD_GEND_DIALYSATE_DELIVERY_STATE: + case DD_GEND_ISOLATED_UF_STATE: + case DD_GEND_SPENT_CHAMBER_FILL_STATE: + case DD_GEND_BICARB_CHAMBER_FILL_STATE: + case DD_GEND_DIALYSATE_DELIVERY_PAUSE: + default: + break; + } + setModeGenDStateTransition( genDialysateState ); + } +} + /**@}*/ Index: firmware/App/Modes/ModeGenDialysate.h =================================================================== diff -u -rb2e7c9194acd84783d2bbad64c5720410493e199 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision b2e7c9194acd84783d2bbad64c5720410493e199) +++ firmware/App/Modes/ModeGenDialysate.h (.../ModeGenDialysate.h) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -69,6 +69,8 @@ BOOL testDialGoodToDeliverStatusOverride( MESSAGE_T *message ); // To override the dialysate good to deliver status flag BOOL testGenDHydChamberFluidTempOverride( MESSAGE_T *message ); // Override the hydraulics chamber fluid temperature BOOL testGenDExecStateOverride( MESSAGE_T *message ); // Override the Gen dialysate execution state +BOOL testValidateDDGenDialysateChangeReq( U32 newSubMode ); // Validate the requested Gen dialysate sub mode transition is possible or not +void testSignalNewDDGenDialysateSubMode( U32 newSubMode ); // Signal transition to a new Gen dialysate sub mode /**@}*/ Index: firmware/App/Modes/ModePostGenDialysate.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModePostGenDialysate.c (.../ModePostGenDialysate.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModePostGenDialysate.c (.../ModePostGenDialysate.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -186,4 +186,60 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidateDDPostGenDialysateChangeReq function validate whether request + * operation sub mode is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return TRUE if request is legal, FALSE if not + *************************************************************************/ +BOOL testValidateDDPostGenDialysateChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_DD_POST_GEN_DIALYSATE_STATES ) + { + switch ( newSubMode ) + { + // TODO add validate condition after checking with Vinay + case DD_POST_GEN_DIALYSATE_STATE_START: + case DD_POST_GEN_DIALYSATE_STATE_COMPLETE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewDDPostGenDialysateSubMode function request transition + * to a new operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return none + *************************************************************************/ +void testSignalNewDDPostGenDialysateSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_DD_POST_GEN_DIALYSATE_STATES ) + { + postGenDialysateState = (DD_POST_GEN_DAILYSATE_STATE_T)newSubMode; + + switch ( newSubMode ) + { + // TODO add logic after checking with Vinay + // Any of these state require no special handling + case DD_POST_GEN_DIALYSATE_STATE_START: + case DD_POST_GEN_DIALYSATE_STATE_COMPLETE: + default: + break; + } + } +} + /**@}*/ Index: firmware/App/Modes/ModePostGenDialysate.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModePostGenDialysate.h (.../ModePostGenDialysate.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModePostGenDialysate.h (.../ModePostGenDialysate.h) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -45,6 +45,8 @@ DD_POST_GEN_DAILYSATE_STATE_T getCurrentPostGenDialysateState( void ); // get the current state of the post gen dialysate mode. BOOL testDDPostGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ); // post gen dialysate publish override request +BOOL testValidateDDPostGenDialysateChangeReq( U32 newSubMode ); // Validate the requested post gen dialysate sub mode transition is possible or not +void testSignalNewDDPostGenDialysateSubMode( U32 newSubMode ); // Signal transition to a new post gen dialysate sub mode /**@}*/ Index: firmware/App/Modes/ModePreGenDialysate.c =================================================================== diff -u -rd210786d6c7d75bb0b4d9e18efc40a01d85123fe -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision d210786d6c7d75bb0b4d9e18efc40a01d85123fe) +++ firmware/App/Modes/ModePreGenDialysate.c (.../ModePreGenDialysate.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -510,4 +510,65 @@ return result; } +/*********************************************************************//** + * @brief + * The testValidateDDPreGenDialysateChangeReq function validate whether request + * operation sub mode is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return TRUE if request is legal, FALSE if not + *************************************************************************/ +BOOL testValidateDDPreGenDialysateChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_DD_PRE_GEN_DIALYSATE_STATES ) + { + switch ( newSubMode ) + { + // TODO add validate condition after checking with Vinay + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: + case DD_PRE_GEN_WET_SELF_TEST: + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewDDPreGenDialysateSubMode function request transition + * to a new operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return none + *************************************************************************/ +void testSignalNewDDPreGenDialysateSubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_DD_PRE_GEN_DIALYSATE_STATES ) + { + preGenDialysateState = (DD_PRE_GEN_DIALYSATE_STATE_T)newSubMode; + + switch ( newSubMode ) + { + // TODO add logic after checking with Vinay + // Any of these state require no special handling + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: + case DD_PRE_GEN_WET_SELF_TEST: + case DD_PRE_GEN_DRY_BICART_INITIAL_FILL: + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + default: + break; + } + // TODO should setState handled separately for wet self state? + } +} + /**@}*/ Index: firmware/App/Modes/ModePreGenDialysate.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModePreGenDialysate.h (.../ModePreGenDialysate.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/ModePreGenDialysate.h (.../ModePreGenDialysate.h) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -47,6 +47,8 @@ BOOL requestDDPreGenStop( void ); // stop pregenerate dialysate delivery BOOL testDDPreGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ); // pre-gen dialysate publish override request +BOOL testValidateDDPreGenDialysateChangeReq( U32 newSubMode ); // Validate the requested pre-gen dialysate sub mode transition is possible or not +void testSignalNewDDPreGenDialysateSubMode( U32 newSubMode ); // Signal transition to a new pre-gen dialysate sub mode /**@}*/ Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r4ea05914616f25058c242b8300f83770438b01d0 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 4ea05914616f25058c242b8300f83770438b01d0) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -479,4 +479,58 @@ *************************************************************************/ +/*********************************************************************//** + * @brief + * The testValidateDDStandbyChangeReq function validate whether request + * operation sub mode is legal or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return TRUE if request is legal, FALSE if not + *************************************************************************/ +BOOL testValidateDDStandbyChangeReq( U32 newSubMode ) +{ + BOOL result = FALSE; + + if ( newSubMode < NUM_OF_DD_STANDBY_MODE_STATES ) + { + switch ( newSubMode ) + { + case DD_STANDBY_MODE_STATE_IDLE: + case DD_STANDBY_MODE_STATE_PAUSE: + default: + result = TRUE; + break; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testSignalNewDDStandbySubMode function request transition to a + * new operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param newSubMode the enumerated sub state of the mode + * @return none + *************************************************************************/ +void testSignalNewDDStandbySubMode( U32 newSubMode ) +{ + if ( newSubMode < NUM_OF_DD_STANDBY_MODE_STATES ) + { + standbyState = (DD_STANDBY_MODE_STATE_T)newSubMode; + + switch ( newSubMode ) + { + // Any of these state require no special handling + case DD_STANDBY_MODE_STATE_IDLE: + case DD_STANDBY_MODE_STATE_PAUSE: + default: + break; + } + } +} + /**@}*/ Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -rb569bc796c56acd5d94d468386f5f42c350cad65 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision b569bc796c56acd5d94d468386f5f42c350cad65) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -54,6 +54,9 @@ BOOL startDDHeatDisinfectActiveCool( void ); DD_STANDBY_MODE_STATE_T getCurrentStandbyState( void ); // get the current state of the standby mode. +BOOL testValidateDDStandbyChangeReq( U32 newSubMode ); // Validate the requested standby sub mode transition is possible or not +void testSignalNewDDStandbySubMode( U32 newSubMode ); // Signal transition to a new standby sub mode + /**@}*/ #endif Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -50,6 +50,8 @@ static OVERRIDE_U32_T ddOpModePublishInterval = { BROADCAST_DD_OP_MODE_INTERVAL, BROADCAST_DD_OP_MODE_INTERVAL, 0, 0 }; static U32 dataPublishCounter; ///< Interval counter used to determine when to broadcast operation mode. Initialize to 11 to stagger broadcast. static U32 currentSubState; ///< The currently active sub state. +static U32 testRequestedSubMode; ///< Requested operation sub mode from dialin. +static BOOL testChangeSubMode; ///< Flag to determine change operation sub mode request status. /// This matrix determines legal transitions from one mode to another. static const DD_OP_MODE_T MODE_TRANSITION_TABLE[ NUM_OF_DD_MODES - 1 ][ NUM_OF_DD_MODES - 1 ] = @@ -74,6 +76,8 @@ static U32 getDDOpModePublishInterval( void ); static void broadcastOperationMode( void ); static void sendOperationStatusEvent( void ); +static void testRequestNewDDOperationSubMode( void ); +static BOOL testValidateDDSubModeChangeRequest( DD_OP_MODE_T reqMode, U32 reqSubMode ); /*********************************************************************//** * @brief @@ -93,11 +97,13 @@ } // start in init mode - lastMode = DD_MODE_INIT; - currentMode = DD_MODE_INIT; - currentSubMode = 0; - currentSubState = NO_SUB_STATE; - dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; + lastMode = DD_MODE_INIT; + currentMode = DD_MODE_INIT; + currentSubMode = 0; + currentSubState = NO_SUB_STATE; + dataPublishCounter = DATA_PUBLISH_COUNTER_START_COUNT; + testRequestedSubMode = 0; + testChangeSubMode = FALSE; transitionToNewOperationMode( DD_MODE_INIT ); @@ -164,6 +170,13 @@ sendOperationStatusEvent(); } + // Is DD sub mode change request active? + if ( TRUE == testChangeSubMode ) + { + testChangeSubMode = FALSE; + testRequestNewDDOperationSubMode(); + } + // mode specific processing to be done continuously switch ( currentMode ) { @@ -585,4 +598,151 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetOperationSubMode function will transition to a given operation + * sub mode if the transition is legal. + * @details \b Inputs: none + * @details \b Outputs: request new sub mode function called + * @param message a pointer to the message to handle which includes the + * override value for the new mode and sub mode change. + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetOperationSubMode( MESSAGE_T *message ) +{ + OP_MODES_DATA_T payload; + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + if( sizeof(OP_MODES_DATA_T) == message->hdr.payloadLen ) + { + DD_OP_MODE_T reqMode; + U32 reqSubMode; + + memcpy( (U08*)(&payload), message->payload, sizeof( OP_MODES_DATA_T ) ); + + reqMode = (DD_OP_MODE_T)payload.currentMode; + reqSubMode = payload.currentSubMode; + + if ( reqMode < NUM_OF_DD_MODES ) + { + // verify if the requested submode transition is valid + result = testValidateDDSubModeChangeRequest( reqMode, reqSubMode ); + + //send mode change request only if the requested sub mode transition is valid + if ( TRUE == result ) + { + if ( currentMode != reqMode ) + { + requestNewOperationMode( reqMode ); + testRequestedSubMode = reqSubMode; + testChangeSubMode = TRUE; + } + // requested sub mode change only as the requested operation mode is current mode + else if ( currentSubMode != testRequestedSubMode ) + { + testRequestedSubMode = reqSubMode; + testChangeSubMode = TRUE; + } + } + + } + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testRequestNewDDOperationSubMode function requests transition to a new + * DD operation sub mode. + * @details \b Inputs: currentMode, testRequestedSubMode + * @details \b Outputs: none + * @return none + *************************************************************************/ +static void testRequestNewDDOperationSubMode( void ) +{ + switch ( currentMode ) + { + case DD_MODE_FAUL: + testSignalNewDDFaultSubMode( testRequestedSubMode ); + break; + + case DD_MODE_STAN: + testSignalNewDDStandbySubMode( testRequestedSubMode ); + break; + + case DD_MODE_PREG: + testSignalNewDDPreGenDialysateSubMode( testRequestedSubMode ); + break; + + case DD_MODE_GEND: + testSignalNewDDGenDialysateSubMode( testRequestedSubMode ); + break; + + case DD_MODE_POSG: + testSignalNewDDPostGenDialysateSubMode( testRequestedSubMode ); + break; + + case DD_MODE_SERV: + case DD_MODE_INIT: + case DD_MODE_HEAT: + case DD_MODE_HCOL: + case DD_MODE_ROPS: + default: + break; + } +} + +/*********************************************************************//** + * @brief + * The testValidateDDSubModeChangeRequest function validates transition + * request to a new DD operation sub mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @param reqMode DD operation mode enumeration + * @param reqSubMode operation sub mode requested + * @return TRUE if request is legal, FALSE if not. + *************************************************************************/ +static BOOL testValidateDDSubModeChangeRequest( DD_OP_MODE_T reqMode, U32 reqSubMode ) +{ + BOOL result = FALSE; + + switch ( reqMode ) + { + case DD_MODE_FAUL: + result = testValidateDDFaultChangeReq( reqSubMode ); + break; + + case DD_MODE_STAN: + result = testValidateDDStandbyChangeReq( reqSubMode ); + break; + + case DD_MODE_PREG: + result = testValidateDDPreGenDialysateChangeReq( reqSubMode ); + break; + + case DD_MODE_GEND: + result = testValidateDDGenDialysateChangeReq( reqSubMode ); + break; + + case DD_MODE_POSG: + result = testValidateDDPostGenDialysateChangeReq( reqSubMode ); + break; + + // No need to validate the request for the following modes as it is not supported + case DD_MODE_SERV: + case DD_MODE_INIT: + case DD_MODE_HEAT: + case DD_MODE_HCOL: + case DD_MODE_ROPS: + default: + break; + } + + return result; +} + /**@}*/ Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r830213bc6dcc1a684610caf78c79d55f2cb41e93 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 830213bc6dcc1a684610caf78c79d55f2cb41e93) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -63,6 +63,7 @@ BOOL testSetOperationMode( MESSAGE_T *message ); // Force transition to a given mode (if allowed) BOOL testDDOpModePublishIntervalOverride( MESSAGE_T *message ); // DD Opmode publish interval override +BOOL testSetOperationSubMode( MESSAGE_T *message ); // Set transition to operation sub mode (if valid) /**@}*/ Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r290cac3c0557c978647cef2972800dfe137dd662 -r5db64c182f58f16d6b4b9a5131a2913b4a156ccc --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 290cac3c0557c978647cef2972800dfe137dd662) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 5db64c182f58f16d6b4b9a5131a2913b4a156ccc) @@ -284,6 +284,7 @@ { MSG_ID_FP_RO_FILTERED_REJECTION_RATIO_OVERRIDE_REQUEST, &testRORejectionRatioFilteredOverride }, { MSG_ID_DD_BICART_DRAIN_REQUEST_OVERRIDE_REQUEST, &testDryBiCartDrainRequestOverride }, { MSG_ID_DD_BICART_CARTRIDGE_SELECT_OVERRIDE_REQUEST, &testDryBiCartTypeOverride }, + { MSG_ID_DD_SET_OPERATION_SUB_MODE_OVERRIDE_REQUEST, &testSetOperationSubMode }, }; /// Calculation for number of entries in the incoming message function handler look-up table.