Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r22176ce95e49213c48454f34ddf5d29b8109f2cb -r439e62fe1d95d3e5398bd396e0955c1ac1ba1417 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 22176ce95e49213c48454f34ddf5d29b8109f2cb) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 439e62fe1d95d3e5398bd396e0955c1ac1ba1417) @@ -420,6 +420,34 @@ /*********************************************************************//** * @brief + * The testSetOperationMode function will transition to a given operation + * mode if the transition is legal. + * @details Inputs: none + * @details Outputs: modeRequest[] + * @param newMode ID of requested mode to transition to + * @return TRUE if request successful, FALSE if not + *************************************************************************/ +BOOL testSetOperationMode( DG_OP_MODE_T newMode ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + DG_OP_MODE_T check = MODE_TRANSITION_TABLE[ currentMode ][ newMode ]; + + // Is mode transition legal? + if ( check == newMode ) + { + requestNewOperationMode( newMode ); + result = TRUE; + } + } + + return result; +} + +/*********************************************************************//** + * @brief * The testSetDGOpModePublishIntervalOverride function overrides the * DG operation mode publish interval. * @details Inputs: none Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -r025612ad77fe630889a364586de54bffe5262d56 -r439e62fe1d95d3e5398bd396e0955c1ac1ba1417 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 025612ad77fe630889a364586de54bffe5262d56) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision 439e62fe1d95d3e5398bd396e0955c1ac1ba1417) @@ -46,6 +46,7 @@ DG_OP_MODE_T getCurrentOperationMode( void ); // get the current operation mode DG_OP_MODE_T getPreviousOperationMode( void ); // get the previous operation mode +BOOL testSetOperationMode( DG_OP_MODE_T newMode ); // Force transition to a given mode (if allowed) BOOL testSetDGOpModePublishIntervalOverride( U32 value ); BOOL testResetDGOpModePublishIntervalOverride( void ); Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r22176ce95e49213c48454f34ddf5d29b8109f2cb -r439e62fe1d95d3e5398bd396e0955c1ac1ba1417 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 22176ce95e49213c48454f34ddf5d29b8109f2cb) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 439e62fe1d95d3e5398bd396e0955c1ac1ba1417) @@ -837,6 +837,10 @@ handleDrainCmd( message ); break; + case MSG_ID_HD_OP_MODE: + handleSetHDOperationMode( message ); + break; + case MSG_ID_STARTING_STOPPING_TREATMENT_CMD: handleStartStopTreatmentMsg( message ); break; @@ -1185,8 +1189,8 @@ handleSetDGUsageInfoRecord( message ); break; - case MSG_ID_HD_OP_MODE: - handleSetHDOperationMode( message ); + case MSG_ID_DG_SET_OP_MODE_REQUEST: + handleTestSetOpModeRequest( message ); break; default: Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r22176ce95e49213c48454f34ddf5d29b8109f2cb -r439e62fe1d95d3e5398bd396e0955c1ac1ba1417 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 22176ce95e49213c48454f34ddf5d29b8109f2cb) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 439e62fe1d95d3e5398bd396e0955c1ac1ba1417) @@ -1336,6 +1336,31 @@ /*********************************************************************//** * @brief + * The handleTestSetOpModeRequest function handles a request to set the + * DG operation mode. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestSetOpModeRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + if ( message->hdr.payloadLen == sizeof(U32) ) + { + U32 mode; + + memcpy( &mode, message->payload, sizeof(U32) ); + result = testSetOperationMode( (DG_OP_MODE_T)mode ); + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @brief * The handleSetHDOperationMode function receives the HD operation modes data * publish message. * @details Inputs: none Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r22176ce95e49213c48454f34ddf5d29b8109f2cb -r439e62fe1d95d3e5398bd396e0955c1ac1ba1417 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 22176ce95e49213c48454f34ddf5d29b8109f2cb) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 439e62fe1d95d3e5398bd396e0955c1ac1ba1417) @@ -386,6 +386,9 @@ // MSG_ID_DG_SET_USAGE_INFO_RECORD void handleSetDGUsageInfoRecord( MESSAGE_T *message ); +// MSG_ID_DG_SET_OP_MODE_REQUEST +void handleTestSetOpModeRequest( MESSAGE_T *message ); + // MSG_ID_HD_OP_MODE BOOL handleSetHDOperationMode( MESSAGE_T *message );