Index: App/Services/SystemComm.c =================================================================== diff -u -ree310a2e5262c05bf0dc0eb0d84da0ee50bac7fe -r7d70e839bc71f6fc37da8cd12eecb374841882df --- App/Services/SystemComm.c (.../SystemComm.c) (revision ee310a2e5262c05bf0dc0eb0d84da0ee50bac7fe) +++ App/Services/SystemComm.c (.../SystemComm.c) (revision 7d70e839bc71f6fc37da8cd12eecb374841882df) @@ -16,14 +16,29 @@ * **************************************************************************/ +#include "can.h" + #include "Common.h" +#include "Buttons.h" +#include "CommBuffers.h" +#include "MsgQueues.h" #include "SystemComm.h" // ********** private definitions ********** +typedef enum Msg_IDs +{ + MSG_ID_TEST = 0, + MSG_ID_OFF_BUTTON_PRESS, + NUM_OF_MSG_IDS +} MSG_ID_T; + // ********** private data ********** +// ********** private function prototypes ********** + + /************************************************************************* * @brief initSystemComm * The initSystemComm function initializes the SystemComm module. @@ -35,6 +50,96 @@ *************************************************************************/ void initSystemComm( void ) { + } +/************************************************************************* + * @brief initSystemComm + * The initSystemComm function initializes the SystemComm module. + * @details + * Inputs : none + * Outputs : SystemComm module initialized. + * @param none + * @return none + *************************************************************************/ +void execSystemComm( void ) +{ + // TODO - this is ugly preliminary test code - nowhere near ready for code review + BOOL isThereMsgToXmit; + BOOL isThereMsgRcvd; + U08 data[sizeof(MESSAGE_WRAPPER_T)]; + U32 dataSize; + MESSAGE_WRAPPER_T msg; + // get next msg to transmit to UI + isThereMsgToXmit = getFromMsgQueue( MSG_Q_CAN_HD_2_UI, &msg ); + if ( TRUE == isThereMsgToXmit ) + { + U08 *dataPtr = data; + + memcpy( dataPtr, &(msg.msg.hdr), sizeof(MESSAGE_HEADER_T) ); + memcpy( dataPtr+sizeof(MESSAGE_HEADER_T), &(msg.msg.cargo), msg.msg.hdr.cargoLen ); + memcpy( dataPtr+(sizeof(MESSAGE_HEADER_T) + msg.msg.hdr.cargoLen), &(msg.crc), sizeof(U08) ); + + addToCommBuffer( COMM_BUFFER_CAN_HD_2_UI, dataPtr, MESSAGE_OVERHEAD_SIZE + msg.msg.hdr.cargoLen ); + } + + // actually transmit any pending messages + dataSize = getFromCommBuffer( COMM_BUFFER_CAN_HD_2_UI, data, sizeof(MESSAGE_WRAPPER_T) ); + if ( dataSize <= 8 ) + { + canTransmit( canREG1, canMESSAGE_BOX1, data ); + } + + // queue any received CAN messages + if ( FALSE != canIsRxMessageArrived( canREG1, canMESSAGE_BOX2 ) ) + { + MESSAGE_WRAPPER_T rcvMsg; + U08 *dataPtr = data; + + canGetData( canREG1, canMESSAGE_BOX2, data ); + blankMessageInWrapper( &rcvMsg ); + memcpy( &(rcvMsg.msg.hdr), dataPtr, sizeof(MESSAGE_HEADER_T) ); + memcpy( &(rcvMsg.msg.cargo), dataPtr+sizeof(MESSAGE_HEADER_T), rcvMsg.msg.hdr.cargoLen ); + memcpy( &(rcvMsg.crc), dataPtr+(sizeof(MESSAGE_HEADER_T)+rcvMsg.msg.hdr.cargoLen), sizeof(U08) ); + addToMsgQueue( MSG_Q_CAN_UI_2_HD, &rcvMsg ); + } + + // see if any messages received + isThereMsgRcvd = getFromMsgQueue( MSG_Q_CAN_UI_2_HD, &msg ); + if ( TRUE == isThereMsgRcvd ) + { + switch ( msg.msg.hdr.msgID ) + { + case MSG_ID_OFF_BUTTON_PRESS: + userConfirmOffButton(); + break; + default: + break; + } + } +} + +/************************************************************************* + * @brief sendOffButtonMsgToUI + * The sendOffButtonMsgToUI function constructs an off button msg to the UI \n + * and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : Off button msg constructed and queued. + * @param none + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendOffButtonMsgToUI( void ) +{ + BOOL result; + MESSAGE_WRAPPER_T msg; + + blankMessageInWrapper( &msg ); + msg.msg.hdr.msgID = MSG_ID_OFF_BUTTON_PRESS; + msg.msg.hdr.cargoLen = 0; + result = addToMsgQueue( MSG_Q_CAN_HD_2_UI, &msg ); + + return result; +} +