/************************************************************************** * * Copyright (c) 2019-2023 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file SystemComm.h * * @author (last) Michael Garthwaite * @date (last) 09-Mar-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 * ***************************************************************************/ #ifndef __SYSTEM_COMM_H__ #define __SYSTEM_COMM_H__ #include "DGCommon.h" #include "CommBuffers.h" #include "MsgQueues.h" /** * @defgroup SystemComm SystemComm * @brief System communication module. Manages incoming and outgoing CAN frames. * * @addtogroup SystemComm * @{ */ // ********** public definitions ********** #define MESSAGE_SYNC_BYTE 0xA5 ///< Denali message syncronization byte. #define CAN_MESSAGE_PAYLOAD_SIZE 8 ///< CAN frame payload size (in bytes). #define MSG_ID_ACK_MESSAGE_THAT_REQUIRES_ACK 0xFFFF ///< Denali message ID for acknowledging received messages (when required). #define MSG_ACK_BIT 0x8000 ///< ACK bit in sequence number that indicates an ACK is required. #define MAX_MSG_SEQ_NO 0x7FFF ///< Maximum sequence number for Denali message (then wraps to 1). #define MIN_MSG_SEQ_NO 0x0001 ///< Minimum sequence number for Denali message. #define MAX_ACK_MSG_SIZE ( sizeof( MESSAGE_WRAPPER_T ) + 1 + CAN_MESSAGE_PAYLOAD_SIZE ) ///< Maximum size (in bytes) of Denali message including full (wrapped) message + sync + any CAN padding) typedef COMM_BUFFER_T CAN_MESSAGE_BOX_T; ///< the CAN comm buffers align with the active CAN message boxes // ********** public function prototypes ********** void initSystemComm( void ); void execSystemCommRx( void ); void execSystemCommTx( void ); void handleCANMsgInterrupt( CAN_MESSAGE_BOX_T srcCANBox ); BOOL isCANBoxForXmit( CAN_MESSAGE_BOX_T srcCANBox ); BOOL isCANBoxForRecv( CAN_MESSAGE_BOX_T srcCANBox ); BOOL isHDCommunicating( void ); BOOL isDGOnlyCANNode( void ); BOOL addMsgToPendingACKList( MESSAGE_T *msg, COMM_BUFFER_T channel, U08 *msgData, U32 len ); BOOL testSetHDCommunicationStatus( U32 value ); BOOL testResetHDCommuncationStatus( void ); BOOL testSetPendingACKOverride( U32 value ); BOOL testResetPendingACKOverride( void ); /**@}*/ #endif