/** ******************************************************************************* * @FileName : mdc.h Message Distribution Center(MDC) implementation * @Author : GaoQiu * @CreateDate: 2020-05-18 * @Copyright : Copyright(C) GaoQiu * All Rights Reserved. ******************************************************************************* */ #ifndef MDC_H_ #define MDC_H_ #include "defs_types.h" #include "xqueue.h" /*! Max message handler define. */ #define MDC_MAX_MSG_HANDLER 8 /*! MDC Message Type define. */ #define MDC_MSG_TYPE_QUEUE 0x01 #define MDC_MSG_TYPE_EVENT 0x02 #define MDC_MSG_TYPE_TIMER 0x04 /*! SMP event type. */ #define SMP_EVT_PAIR_TIMEOUT 0 /*! LL event type. */ #define LL_EVT_RSP_TIMEOUT 0 #define LL_EVT_TX_HCI_EVT 1 #define LL_EVT_TX_HCI_ACL 2 typedef uint16_t MdcEventMask_t; typedef uint8_t MdcMsgId_t; typedef uint8_t MdcHandlerId_t; /*! MDC messgage header. */ typedef struct{ uint8_t event; uint8_t status; uint16_t param; }MdcMsgHdr_t; /*! Message Handler call-back type. */ typedef void (*MsgHandler_t)(MdcEventMask_t eventMask, MdcMsgHdr_t *msg); /*! Semaphore Call-back for supporting OS */ typedef int (*MdcSemphrGiveCback_t)(void); /** * @brief : Message Distribution Center(MDC) initialization. * @param : None. * @return: None. */ void MDC_Init(void); /** * @brief : Register Semaphore for supporting OS. * @param : cback * @return: None. */ void MDC_RegisterSemphrCback(MdcSemphrGiveCback_t cback); /** * @brief : Give Semaphore for supporting OS. * @param : None. * @return: None. */ void MDC_GiveSemphr(void); /** * @brief : Send event to MDC. * @param : handlerId handler id. * @param : event event mask. * @return: None. */ void MDC_SendEvent(MdcHandlerId_t handlerId, MdcEventMask_t event); /** * @brief : Send Timer ready event tp MDC. * @param : None. * @return: None. */ void MDC_TimerReady(void); /** * @brief : Send Queue event to MDC. * @param : None. * @return: None. */ void MDC_SendQueueMsg(MdcHandlerId_t handlerId, void *pMsg); /** * @brief : Get MDC's message queue. * @param : None. * @return: return MDC's message queue. */ queue_t *MDC_GetMsgQueue(void); /** * @brief : Add message handler. * @param : MsgHandler_t Pointer point to message handler. * @return: true if successfully or false. */ MdcHandlerId_t MDC_AddMsgHandler(MsgHandler_t handler); /** * @brief : start MDC * @param : None * @return: None. */ void MDC_Start(void); #endif /* MDC_H_ */