Index: firmware/App/Services/TDInterface.c =================================================================== diff -u -re08f4a03a3528ab2835cbd379187e08a58cea62e -r008d18e14db9f73782072e42a71ff364915c5f83 --- firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision e08f4a03a3528ab2835cbd379187e08a58cea62e) +++ firmware/App/Services/TDInterface.c (.../TDInterface.c) (revision 008d18e14db9f73782072e42a71ff364915c5f83) @@ -611,6 +611,101 @@ /*********************************************************************//** * @brief + * The handleTDCommandRequest function handles a generic DD command + * request received from TD. + * @details \b Inputs: DD command request from TD. + * @details \b Outputs: Requested DD operation initiated and command + * response sent to TD. + * @param message Pointer to the received command request message. + * @return TRUE if the command is accepted, FALSE otherwise. + *************************************************************************/ +BOOL handleTDCommandRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + DD_COMMAND_T command = DD_CMD_NONE; + DD_CMD_RESPONSE_T response; + + response.commandID = DD_CMD_NONE; + response.rejected = TRUE; + response.rejectCode = DD_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + memcpy( &command, message->payload, sizeof( U32 ) ); + + response.commandID = (U32)command; + + if ( ( DD_CMD_NONE < command ) && + ( command < NUM_OF_DD_COMMANDS ) ) + { + response.rejectCode = DD_CMD_REQUEST_REJECT_REASON_INVALID_MODE; + + switch ( command ) + { + case DD_CMD_GOTO_POST_GENERATE: + if ( DD_MODE_GEND == getCurrentOperationMode() ) + { + requestNewOperationMode( DD_MODE_POSG ); + + result = TRUE; + } + break; + + case DD_CMD_GOTO_STANDBY: + if ( DD_MODE_POSG == getCurrentOperationMode() ) + { + requestNewOperationMode( DD_MODE_STAN ); + + result = TRUE; + } + break; + + case DD_CMD_START_DISINFECT_SKIP: + if ( DD_MODE_STAN == getCurrentOperationMode() ) + { + // Skip requires no DD mode transition. + result = TRUE; + } + break; + + case DD_CMD_START_DISINFECT_HEAT: + if ( DD_MODE_STAN == getCurrentOperationMode() ) + { + result = startDDHeatDisinfect(); + } + break; + + case DD_CMD_START_DISINFECT_FLUSH: + case DD_CMD_START_DISINFECT_HEAT_CITRIC: + case DD_CMD_START_DISINFECT_SUBSTITUTION_PORT: + response.rejectCode = + DD_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + break; + + default: + response.rejectCode = + DD_CMD_REQUEST_REJECT_REASON_INVALID_PARAMETER; + break; + } + + if ( TRUE == result ) + { + response.rejected = FALSE; + response.rejectCode = DD_CMD_REQUEST_REJECT_REASON_NONE; + } + } + } + + sendMessage( MSG_ID_DD_COMMAND_RESPONSE, + COMM_BUFFER_OUT_CAN_DD_2_TD, + (U08 *)&response, + sizeof( DD_CMD_RESPONSE_T ) ); + + return result; +} + +/*********************************************************************//** + * @brief * The handleTDRequestDDFlush function handles a DD flush request from TD. * @details \b Inputs: none * @details \b Outputs: DD flush request processed