Index: App/Services/SystemCommMessages.c =================================================================== diff -u -r83de6e3e3de4767fd50713e18b0bd75a06479fc7 -r9006ccb6526430282de51f5d3721975a0250d06e --- App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 83de6e3e3de4767fd50713e18b0bd75a06479fc7) +++ App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 9006ccb6526430282de51f5d3721975a0250d06e) @@ -16,9 +16,13 @@ * **************************************************************************/ +#include // for memcpy() + #include "Common.h" +#include "AlarmLamp.h" #include "Buttons.h" #include "MsgQueues.h" +#include "WatchdogMgmt.h" #include "SystemCommMessages.h" #include "SystemComm.h" @@ -35,9 +39,12 @@ // ********** private data ********** +static BOOL testerLoggedIn = FALSE; + // ********** private function prototypes ********** static U32 serializeMessage( MESSAGE_T msg, U08 *data ); +static BOOL sendTestAckResponseMsg( MSG_ID_T msgID, BOOL ack ); /************************************************************************* * @brief serializeMessage @@ -84,6 +91,10 @@ return msgSize; } +// *********************************************************************** +// ********************* MSG_ID_OFF_BUTTON_PRESS ************************* +// *********************************************************************** + /************************************************************************* * @brief sendOffButtonMsgToUI * The sendOffButtonMsgToUI function constructs an off button msg to the UI \n @@ -100,7 +111,6 @@ MESSAGE_T msg; U32 msgSize; U08 data[sizeof(MESSAGE_WRAPPER_T)+1+CAN_MESSAGE_CARGO_SIZE]; // must hold full (wrapped) message + sync + any CAN padding - U08 *dataPtr = data; // create a message record blankMessage( &msg ); @@ -111,7 +121,7 @@ msgSize = serializeMessage( msg, data ); // add serialized message data to appropriate comm buffer - result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_2_UI, dataPtr, msgSize ); + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_2_UI, data, msgSize ); return result; } @@ -134,3 +144,274 @@ userConfirmOffButton( cargo.confirmed ); } + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/************************************************************************* + * @brief sendDebugData + * The sendDebugData function sends debug data out to the PC port. + * @details + * Inputs : none + * Outputs : PC serial port + * @param dbgData : Pointer to debug data + * @param len : # of bytes of debug data + * @return TRUE if debug data was successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendDebugData( U08 *dbgData, U32 len ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[sizeof(MESSAGE_WRAPPER_T) + 1 + CAN_MESSAGE_CARGO_SIZE]; // must hold full (wrapped) message + sync + any CAN padding + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = 2; + msg.hdr.cargoLen = len; + memcpy( msg.cargo, dbgData, len ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_UART_PC, data, msgSize ); + + return result; +} + +/************************************************************************* + * @brief isTestingActivated + * The isTestingActivated function determines whether a tester has successfully \n + * logged in to activate testing functionality. + * @details + * Inputs : testerLoggedIn + * Outputs : none + * @param none + * @return TRUE if a tester has logged in to activate testing, FALSE if not + *************************************************************************/ +BOOL isTestingActivated( void ) +{ + return testerLoggedIn; +} + +/************************************************************************* + * @brief sendTestAckResponseMsg + * The sendTestAckResponseMsg function constructs a simple response \n + * message for a handled test message and queues it for transmit on the \n + * appropriate UART channel. + * @details + * Inputs : none + * Outputs : response message constructed and queued for transmit. + * @param msgID : ID of handled message that we are responding to + * @param ack : TRUE if test message was handled successfully, FALSE if not + * @return TRUE if response message successfully queued for transmit, FALSE if not + *************************************************************************/ +static BOOL sendTestAckResponseMsg( MSG_ID_T msgID, BOOL ack ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[PC_MESSAGE_PACKET_SIZE]; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = msgID; + msg.hdr.cargoLen = 1; + msg.cargo[0] = (U08)ack; + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_UART_PC, data, msgSize ); + + return result; +} + +/************************************************************************* + * @brief handleTesterLogInRequest + * The handleTesterLogInRequest function handles a request to login as a \n + * tester. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTesterLogInRequest( MESSAGE_T *message ) +{ + // verify pass code + // TODO - placeholder - how do we want to authenticate tester? + if ( ( 3 == message->hdr.cargoLen ) && ( 0x31 == message->cargo[0] ) && ( 0x32 == message->cargo[1] ) && ( 0x33 == message->cargo[2] ) ) + { + testerLoggedIn = TRUE; + } + else + { + testerLoggedIn = FALSE; + } + // respond to would be tester + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, testerLoggedIn ); +} + +/************************************************************************* + * @brief handleTestHDMessageRequest + * The handleTestHDMessageRequest function handles a request to add an \n + * HD message to the received message queue. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestHDMessageRequest( MESSAGE_T *message ) +{ + MESSAGE_WRAPPER_T hdMessage; + U32 msgLen = (U32)(message->hdr.cargoLen); + U08 *msgBytes = (U08*)(&(hdMessage)); + BOOL result; + + memcpy( msgBytes, message->cargo, msgLen ); + + // add HD message to received message queue + result = addToMsgQueue( MSG_Q_IN, &hdMessage ); + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/************************************************************************* + * @brief handleTestOffButtonStateOverrideRequest + * The handleTestOffButtonStateOverrideRequest function handles a request to \n + * override the state of the off button. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestOffButtonStateOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_CARGO_T cargo; + BOOL result = FALSE; + + // verify cargo length + if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) + { + memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); + + if ( FALSE == cargo.reset ) + { + result = testSetOffButtonStateOverride( (BUTTON_STATE_T)(cargo.state) ); + } + else + { + result = testResetOffButtonStateOverride(); + } + } + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/************************************************************************* + * @brief handleTestStopButtonStateOverrideRequest + * The handleTestStopButtonStateOverrideRequest function handles a request to \n + * override the stop button state. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestStopButtonStateOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_CARGO_T cargo; + BOOL result = FALSE; + + // verify cargo length + if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) + { + memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); + + if ( FALSE == cargo.reset ) + { + result = testSetStopButtonStateOverride( (BUTTON_STATE_T)(cargo.state) ); + } + else + { + result = testResetStopButtonStateOverride(); + } + } + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/************************************************************************* + * @brief handleTestAlarmLampPatternOverrideRequest + * The handleTestAlarmLampPatternOverrideRequest function handles a request to \n + * override the alarm lamp pattern. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestAlarmLampPatternOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_CARGO_T cargo; + BOOL result = FALSE; + + // verify cargo length + if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) + { + memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); + + if ( FALSE == cargo.reset ) + { + result = testSetCurrentLampPatternOverride( (LAMP_PATTERN_T)(cargo.state) ); + } + else + { + result = testResetCurrentLampPatternOverride(); + } + } + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/************************************************************************* + * @brief handleTestAlarmLampPatternOverrideRequest + * The handleTestAlarmLampPatternOverrideRequest function handles a request to \n + * override the alarm lamp pattern. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestWatchdogCheckInStateOverrideRequest( MESSAGE_T *message ) +{ + TEST_OVERRIDE_ARRAY_CARGO_T cargo; + BOOL result = FALSE; + + // verify cargo length + if ( sizeof(TEST_OVERRIDE_ARRAY_CARGO_T) == message->hdr.cargoLen ) + { + memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_ARRAY_CARGO_T) ); + + if ( FALSE == cargo.reset ) + { + result = testSetWatchdogTaskCheckInOverride( cargo.index, (BOOL)(cargo.state) ); + } + else + { + result = testResetWatchdogTaskCheckInOverride( cargo.index ); + } + } + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} +