WXK
2024-12-16 78e84fcf264afd731cd66c807d9fcb690fe12126
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
 *******************************************************************************
 * @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_ */