1 /**
2  ******************************************************************************
3  * @file    tl.h
4  * @author  MCD Application Team
5  * @brief   Header for tl module
6  ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18  */
19 
20 
21 /* Define to prevent recursive inclusion -------------------------------------*/
22 #ifndef __TL_H
23 #define __TL_H
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 
30 /* Includes ------------------------------------------------------------------*/
31 #include "stm32_wpan_common.h"
32 
33 /* Exported defines -----------------------------------------------------------*/
34 #define TL_BLECMD_PKT_TYPE             ( 0x01 )
35 #define TL_ACL_DATA_PKT_TYPE           ( 0x02 )
36 #define TL_BLEEVT_PKT_TYPE             ( 0x04 )
37 #define TL_OTCMD_PKT_TYPE              ( 0x08 )
38 #define TL_OTRSP_PKT_TYPE              ( 0x09 )
39 #define TL_CLICMD_PKT_TYPE             ( 0x0A )
40 #define TL_OTNOT_PKT_TYPE              ( 0x0C )
41 #define TL_OTACK_PKT_TYPE              ( 0x0D )
42 #define TL_CLINOT_PKT_TYPE             ( 0x0E )
43 #define TL_CLIACK_PKT_TYPE             ( 0x0F )
44 #define TL_SYSCMD_PKT_TYPE             ( 0x10 )
45 #define TL_SYSRSP_PKT_TYPE             ( 0x11 )
46 #define TL_SYSEVT_PKT_TYPE             ( 0x12 )
47 #define TL_CLIRESP_PKT_TYPE            ( 0x15 )
48 #define TL_M0CMD_PKT_TYPE              ( 0x16 )
49 #define TL_LOCCMD_PKT_TYPE             ( 0x20 )
50 #define TL_LOCRSP_PKT_TYPE             ( 0x21 )
51 #define TL_TRACES_APP_PKT_TYPE         ( 0x40 )
52 #define TL_TRACES_WL_PKT_TYPE          ( 0x41 )
53 
54 #define TL_CMD_HDR_SIZE                (4)
55 #define TL_EVT_HDR_SIZE                (3)
56 #define TL_EVT_CS_PAYLOAD_SIZE         (4)
57 
58 #define TL_BLEEVT_CC_OPCODE            (0x0E)
59 #define TL_BLEEVT_CS_OPCODE            (0x0F)
60 #define TL_BLEEVT_VS_OPCODE            (0xFF)
61 
62 #define TL_BLEEVT_CS_PACKET_SIZE       (TL_EVT_HDR_SIZE + sizeof(TL_CsEvt_t))
63 #define TL_BLEEVT_CS_BUFFER_SIZE       (sizeof(TL_PacketHeader_t) + TL_BLEEVT_CS_PACKET_SIZE)
64 
65 /* Exported types ------------------------------------------------------------*/
66 /**< Packet header */
67 typedef PACKED_STRUCT
68 {
69   uint32_t *next;
70   uint32_t *prev;
71 } TL_PacketHeader_t;
72 
73 /*******************************************************************************
74  * Event type
75  */
76 
77 /**
78  * This the payload of TL_Evt_t for a command status event
79  */
80 typedef PACKED_STRUCT
81 {
82   uint8_t   status;
83   uint8_t   numcmd;
84   uint16_t  cmdcode;
85 } TL_CsEvt_t;
86 
87 /**
88  * This the payload of TL_Evt_t for a command complete event
89  */
90 typedef PACKED_STRUCT
91 {
92   uint8_t   numcmd;
93   uint16_t  cmdcode;
94   uint8_t   payload[1];
95 } TL_CcEvt_t;
96 
97 /**
98  * This the payload of TL_Evt_t for an asynchronous event
99  */
100 typedef PACKED_STRUCT
101 {
102   uint16_t  subevtcode;
103   uint8_t   payload[1];
104 } TL_AsynchEvt_t;
105 
106 typedef PACKED_STRUCT
107 {
108   uint8_t   evtcode;
109   uint8_t   plen;
110   uint8_t   payload[1];
111 } TL_Evt_t;
112 
113 typedef PACKED_STRUCT
114 {
115   uint8_t   type;
116   TL_Evt_t  evt;
117 } TL_EvtSerial_t;
118 
119 /**
120  * This format shall be used for all events (asynchronous and command response) reported
121  * by the CPU2 except for the command response of a system command where the header is not there
122  * and the format to be used shall be TL_EvtSerial_t.
123  * Note: Be careful that the asynchronous events reported by the CPU2 on the system channel do
124  * include the header and shall use TL_EvtPacket_t format. Only the command response format on the
125  * system channel is different.
126  */
127 typedef PACKED_STRUCT
128 {
129   TL_PacketHeader_t  header;
130   TL_EvtSerial_t     evtserial;
131 } TL_EvtPacket_t;
132 
133 /*****************************************************************************************
134  * Command type
135  */
136 
137 typedef PACKED_STRUCT
138 {
139   uint16_t   cmdcode;
140   uint8_t   plen;
141   uint8_t   payload[255];
142 } TL_Cmd_t;
143 
144 typedef PACKED_STRUCT
145 {
146   uint8_t   type;
147   TL_Cmd_t  cmd;
148 } TL_CmdSerial_t;
149 
150 typedef PACKED_STRUCT
151 {
152   TL_PacketHeader_t  header;
153   TL_CmdSerial_t     cmdserial;
154 } TL_CmdPacket_t;
155 
156 /*****************************************************************************************
157  * HCI ACL DATA type
158  */
159 typedef PACKED_STRUCT
160 {
161   uint8_t   type;
162   uint16_t  handle;
163   uint16_t  length;
164   uint8_t   acl_data[1];
165 } TL_AclDataSerial_t;
166 
167 typedef PACKED_STRUCT
168 {
169   TL_PacketHeader_t  header;
170   TL_AclDataSerial_t   AclDataSerial;
171 } TL_AclDataPacket_t;
172 
173 typedef struct
174 {
175   uint8_t  *p_BleSpareEvtBuffer;
176   uint8_t  *p_SystemSpareEvtBuffer;
177   uint8_t  *p_AsynchEvtPool;
178   uint32_t AsynchEvtPoolSize;
179   uint8_t  *p_TracesEvtPool;
180   uint32_t TracesEvtPoolSize;
181 } TL_MM_Config_t;
182 
183 typedef struct
184 {
185   uint8_t *p_ThreadOtCmdRspBuffer;
186   uint8_t *p_ThreadCliRspBuffer;
187   uint8_t *p_ThreadNotAckBuffer;
188 } TL_TH_Config_t;
189 
190 typedef struct
191 {
192   uint8_t *p_LldTestsCliCmdRspBuffer;
193   uint8_t *p_LldTestsM0CmdBuffer;
194 } TL_LLD_tests_Config_t;
195 
196 typedef struct
197 {
198   uint8_t *p_BleLldCmdRspBuffer;
199   uint8_t *p_BleLldM0CmdBuffer;
200 } TL_BLE_LLD_Config_t;
201 
202 typedef struct
203 {
204   uint8_t *p_Mac_802_15_4_CmdRspBuffer;
205   uint8_t *p_Mac_802_15_4_NotAckBuffer;
206 } TL_MAC_802_15_4_Config_t;
207 
208 typedef struct
209 {
210   uint8_t *p_ZigbeeOtCmdRspBuffer;
211   uint8_t *p_ZigbeeNotAckBuffer;
212   uint8_t *p_ZigbeeNotifRequestBuffer;
213 } TL_ZIGBEE_Config_t;
214 
215 /**
216  * @brief Contain the BLE HCI Init Configuration
217  * @{
218  */
219 typedef struct
220 {
221   void (* IoBusEvtCallBack) ( TL_EvtPacket_t *phcievt );
222   void (* IoBusAclDataTxAck) ( void );
223   uint8_t *p_cmdbuffer;
224   uint8_t *p_AclDataBuffer;
225 } TL_BLE_InitConf_t;
226 
227 /**
228  * @brief Contain the SYSTEM HCI Init Configuration
229  * @{
230  */
231 typedef struct
232 {
233   void (* IoBusCallBackCmdEvt) (TL_EvtPacket_t *phcievt);
234   void (* IoBusCallBackUserEvt) (TL_EvtPacket_t *phcievt);
235   uint8_t *p_cmdbuffer;
236 } TL_SYS_InitConf_t;
237 
238 /* Exported constants --------------------------------------------------------*/
239 /* External variables --------------------------------------------------------*/
240 /* Exported macros -----------------------------------------------------------*/
241 /* Exported functions ------------------------------------------------------- */
242 
243 /******************************************************************************
244  * GENERAL
245  ******************************************************************************/
246 void TL_Enable( void );
247 void TL_Init( void );
248 
249 /******************************************************************************
250  * BLE
251  ******************************************************************************/
252 int32_t TL_BLE_Init( void* pConf );
253 int32_t TL_BLE_SendCmd( uint8_t* buffer, uint16_t size );
254 int32_t TL_BLE_SendAclData( uint8_t* buffer, uint16_t size );
255 
256 /******************************************************************************
257  * SYSTEM
258  ******************************************************************************/
259 int32_t TL_SYS_Init( void* pConf  );
260 int32_t TL_SYS_SendCmd( uint8_t* buffer, uint16_t size );
261 
262 /******************************************************************************
263  * THREAD
264  ******************************************************************************/
265 void TL_THREAD_Init( TL_TH_Config_t *p_Config );
266 void TL_OT_SendCmd( void );
267 void TL_CLI_SendCmd( void );
268 void TL_OT_CmdEvtReceived( TL_EvtPacket_t * Otbuffer );
269 void TL_THREAD_NotReceived( TL_EvtPacket_t * Notbuffer );
270 void TL_THREAD_SendAck ( void );
271 void TL_THREAD_CliSendAck ( void );
272 void TL_THREAD_CliNotReceived( TL_EvtPacket_t * Notbuffer );
273 
274 /******************************************************************************
275  * LLD TESTS
276  ******************************************************************************/
277 void TL_LLDTESTS_Init( TL_LLD_tests_Config_t *p_Config );
278 void TL_LLDTESTS_SendCliCmd( void );
279 void TL_LLDTESTS_ReceiveCliRsp( TL_CmdPacket_t * Notbuffer );
280 void TL_LLDTESTS_SendCliRspAck( void );
281 void TL_LLDTESTS_ReceiveM0Cmd( TL_CmdPacket_t * Notbuffer );
282 void TL_LLDTESTS_SendM0CmdAck( void );
283 
284 /******************************************************************************
285  * BLE LLD
286  ******************************************************************************/
287 void TL_BLE_LLD_Init( TL_BLE_LLD_Config_t *p_Config );
288 void TL_BLE_LLD_SendCliCmd( void );
289 void TL_BLE_LLD_ReceiveCliRsp( TL_CmdPacket_t * Notbuffer );
290 void TL_BLE_LLD_SendCliRspAck( void );
291 void TL_BLE_LLD_ReceiveM0Cmd( TL_CmdPacket_t * Notbuffer );
292 void TL_BLE_LLD_SendM0CmdAck( void );
293 void TL_BLE_LLD_SendCmd( void );
294 void TL_BLE_LLD_ReceiveRsp( TL_CmdPacket_t * Notbuffer );
295 void TL_BLE_LLD_SendRspAck( void );
296 /******************************************************************************
297  * MEMORY MANAGER
298  ******************************************************************************/
299 void TL_MM_Init( TL_MM_Config_t *p_Config );
300 void TL_MM_EvtDone( TL_EvtPacket_t * hcievt );
301 
302 /******************************************************************************
303  * TRACES
304  ******************************************************************************/
305 void TL_TRACES_Init( void );
306 void TL_TRACES_EvtReceived( TL_EvtPacket_t * hcievt );
307 
308 /******************************************************************************
309  * MAC 802.15.4
310  ******************************************************************************/
311 void TL_MAC_802_15_4_Init( TL_MAC_802_15_4_Config_t *p_Config );
312 void TL_MAC_802_15_4_SendCmd( void );
313 void TL_MAC_802_15_4_CmdEvtReceived( TL_EvtPacket_t * Otbuffer );
314 void TL_MAC_802_15_4_NotReceived( TL_EvtPacket_t * Notbuffer );
315 void TL_MAC_802_15_4_SendAck ( void );
316 
317 /******************************************************************************
318  * ZIGBEE
319  ******************************************************************************/
320 void TL_ZIGBEE_Init( TL_ZIGBEE_Config_t *p_Config );
321 void TL_ZIGBEE_SendM4RequestToM0( void );
322 void TL_ZIGBEE_SendM4AckToM0Notify ( void );
323 void TL_ZIGBEE_NotReceived( TL_EvtPacket_t * Notbuffer );
324 void TL_ZIGBEE_CmdEvtReceived( TL_EvtPacket_t * Otbuffer );
325 void TL_ZIGBEE_M0RequestReceived(TL_EvtPacket_t * Otbuffer );
326 void TL_ZIGBEE_SendM4AckToM0Request(void);
327 
328 #ifdef __cplusplus
329 } /* extern "C" */
330 #endif
331 
332 #endif /*__TL_H */
333 
334 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
335