1 /*******************************************************************************
2  * @file  rsi_common.h
3  *******************************************************************************
4  * # License
5  * <b>Copyright 2024 Silicon Laboratories Inc. www.silabs.com</b>
6  *******************************************************************************
7  *
8  * SPDX-License-Identifier: Zlib
9  *
10  * The licensor of this software is Silicon Laboratories Inc.
11  *
12  * This software is provided 'as-is', without any express or implied
13  * warranty. In no event will the authors be held liable for any damages
14  * arising from the use of this software.
15  *
16  * Permission is granted to anyone to use this software for any purpose,
17  * including commercial applications, and to alter it and redistribute it
18  * freely, subject to the following restrictions:
19  *
20  * 1. The origin of this software must not be misrepresented; you must not
21  *    claim that you wrote the original software. If you use this software
22  *    in a product, an acknowledgment in the product documentation would be
23  *    appreciated but is not required.
24  * 2. Altered source versions must be plainly marked as such, and must not be
25  *    misrepresented as being the original software.
26  * 3. This notice may not be removed or altered from any source distribution.
27  *
28  ******************************************************************************/
29 
30 #ifndef RSI_COMMON_H
31 #define RSI_COMMON_H
32 
33 #include "sl_constants.h"
34 
35 #include "cmsis_os2.h"
36 #include "sl_si91x_status.h"
37 
38 #include <rsi_bt_common.h>
39 
40 #include "rsi_user.h"
41 #include "rsi_utils.h"
42 #include "rsi_common_apis.h"
43 
44 #include <string.h>
45 
46 /******************************************************
47  * *                      Macros
48  * ******************************************************/
49 //SL_PRINTF logging call
50 #ifndef SL_PRINTF
51 #define SL_PRINTF(...)
52 #endif
53 
54 #define IS_LITTLE_ENDIAN 0
55 #define IS_BIG_ENDIAN    1
56 
57 #define RSI_TRUE  1
58 #define RSI_FALSE 0
59 
60 // Max packet length of common command responses
61 //changed cmd len for crypto and PUF
62 #if defined(SLI_PUF_ENABLE) || (defined RSI_CRYPTO_ENABLE)
63 #define RSI_COMMON_CMD_LEN 1600
64 #else
65 #define RSI_COMMON_CMD_LEN 100
66 #endif
67 
68 // Max packet length of ssl rx packet
69 #define RSI_SSL_RECV_BUFFER_LENGTH 0
70 
71 // Max packet length of rx packet
72 #define RSI_DRIVER_RX_PKT_LEN 0
73 #define SIZE_OF_HEADROOM      0
74 
75 // Max packet length of BT COMMON tx packet
76 #define RSI_BT_COMMON_CMD_LEN (300 + SIZE_OF_HEADROOM)
77 #if ENCODER_IN_RS9116
78 #define RSI_BT_CLASSIC_CMD_LEN 4000
79 #else
80 #define RSI_BT_CLASSIC_CMD_LEN (1040 + SIZE_OF_HEADROOM)
81 #endif
82 #define RSI_BLE_CMD_LEN (300 + SIZE_OF_HEADROOM)
83 
84 #define RSI_DRIVER_POOL_SIZE sizeof(uint32_t) + ((((uint32_t)(sizeof(rsi_driver_cb_t))) + 3) & ~3)
85 
86 #define RSI_WAIT_TIME RSI_WAIT_FOREVER
87 
88 #define RSI_TX_EVENT_WAIT_TIME (30000 + TX_WAIT_TIME)
89 #define DEFAULT_TIMEOUT        RSI_TX_EVENT_WAIT_TIME
90 #define WAIT_TIMEOOUT          5000
91 
92 // Internal command timeout defines
93 #define RSI_BAND_RESPONSE_WAIT_TIME             ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
94 #define RSI_MAC_RESPONSE_WAIT_TIME              ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
95 #define RSI_DISCONNECT_RESPONSE_WAIT_TIME       ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
96 #define RSI_TRANSMIT_RESPONSE_WAIT_TIME         ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
97 #define RSI_RX_STATS_RESPONSE_WAIT_TIME         ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
98 #define RSI_WMM_RESPONSE_WAIT_TIME              ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
99 #define RSI_AUTO_CONFIG_RESPONSE_WAIT_TIME      ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
100 #define RSI_SOCK_CONFIG_RESPONSE_WAIT_TIME      ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
101 #define RSI_ANTENNA_SEL_RESPONSE_WAIT_TIME      ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
102 #define RSI_DEBUG_LOG_RESPONSE_WAIT_TIME        ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
103 #define RSI_GET_RAM_DUMP_RESPONSE_WAIT_TIME     ((1000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
104 #define RSI_FEATURE_FRAME_RESPONSE_WAIT_TIME    ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
105 #define RSI_UART_FLOW_CTRL_RESPONSE_WAIT_TIME   ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
106 #define RSI_PWRMODE_RESPONSE_WAIT_TIME          ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
107 #define RSI_PUF_START_RESPONSE_WAIT_TIME        ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
108 #define RSI_PUF_SET_RESPONSE_WAIT_TIME          ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
109 #define RSI_PUF_DIS_SET_RESPONSE_WAIT_TIME      ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
110 #define RSI_PUF_GET_RESPONSE_WAIT_TIME          ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
111 #define RSI_PUF_DIS_GET_RESPONSE_WAIT_TIME      ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
112 #define RSI_PUF_LOAD_RESPONSE_WAIT_TIME         ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
113 #define RSI_AES_ENCRYPT_RESPONSE_WAIT_TIME      ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
114 #define RSI_AES_DECRYPT_RESPONSE_WAIT_TIME      ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
115 #define RSI_AES_MAC_RESPONSE_WAIT_TIME          ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
116 #define RSI_PUF_INTR_RESPONSE_WAIT_TIME         ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
117 #define RSI_SEND_DATA_RESPONSE_WAIT_TIME        ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
118 #define RSI_SWITCH_PROTO_RESPONSE_WAIT_TIME     ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
119 #define RSI_RAW_DATA_RESPONSE_WAIT_TIME         ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
120 #define RSI_PUF_DIS_ENROLL_RESPONSE_WAIT_TIME   ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
121 #define RSI_PUF_ENROLL_RESPONSE_WAIT_TIME       ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
122 #define RSI_GAIN_TABLE_RESPONSE_WAIT_TIME       ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
123 #define RSI_GET_PROFILE_RESPONSE_WAIT_TIME      ((1000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
124 #define RSI_SET_PROFILE_RESPONSE_WAIT_TIME      ((1000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
125 #define RSI_EAP_RESPONSE_WAIT_TIME              ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
126 #define RSI_REGION_RESPONSE_WAIT_TIME           ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
127 #define RSI_REGION_AP_RESPONSE_WAIT_TIME        ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
128 #define RSI_DYNAMIC_RESPONSE_WAIT_TIME          ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
129 #define RSI_ROAMING_RESPONSE_WAIT_TIME          ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
130 #define RSI_MULTICAST_FIL_RESPONSE_WAIT_TIME    ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
131 #define RSI_HT_CAPS_RESPONSE_WAIT_TIME          ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
132 #define RSI_MULTICAST_RESPONSE_WAIT_TIME        ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
133 #define RSI_BCAST_RESPONSE_WAIT_TIME            ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
134 #define RSI_CARD_READY_WAIT_TIME                ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
135 #define RSI_INIT_RESPONSE_WAIT_TIME             ((3000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
136 #define RSI_WLAN_CONFIG_WAIT_TIME               ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
137 #define RSI_WLAN_GET_RANDOM_WAIT_TIME           ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
138 #define RSI_WLAN_RSSI_RESPONSE_WAIT_TIME        ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
139 #define RSI_WLAN_QUERY_NETWORK_PARAMS_WAIT_TIME ((200 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
140 #define RSI_WLAN_REQ_GET_CFG_WAIT_TIME          ((200 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
141 #define RSI_WLAN_CFG_SAVE_WAIT_TIME             ((1000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
142 #define RSI_BOARD_READY_WAIT_TIME               ((50000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
143 #define RSI_SET_SLEEP_TIMER_RESPONSE_WAIT_TIME  ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
144 #define RSI_DEINIT_RESPONSE_WAIT_TIME           ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
145 #define RSI_CERTIFICATE_RESPONSE_WAIT_TIME      ((1000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
146 #define RSI_REJOIN_RESPONSE_WAIT_TIME           ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
147 #define RSI_USER_SC_RESPONSE_WAIT_TIME          ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
148 #define RSI_WLAN_REQ_GET_STATS_WAIT_TIME        ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
149 #define RSI_AUTO_JOIN_RESPONSE_WAIT_TIME \
150   ((60000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT)) //! Here timeout should wait for init,scan and join commands
151 #define RSI_DELETE_PROFILE_RESPONSE_WAIT_TIME   ((1000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
152 #define RSI_IAP_RESPONSE_WAIT_TIME              ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
153 #define RSI_IAP_GET_CERT_RESPONSE_WAIT_TIME     ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
154 #define RSI_IAP_GEN_SIG_RESPONSE_WAIT_TIME      ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
155 #define RSI_TA_M4_COMMAND_RESPONSE_WAIT_TIME    ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
156 #define RSI_ADD_MFI_IE_RESPONSE_WAIT_TIME       ((500 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
157 #define RSI_FILTER_BROADCAST_RESPONSE_WAIT_TIME ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
158 #define RSI_SET_RTC_TIMER_RESPONSE_WAIT_TIME    ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
159 #ifdef RSI_ASSERT_API
160 #define RSI_ASSERT_RESPONSE_WAIT_TIME ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
161 #endif
162 #define RSI_WLAN_RADIO_RESPONSE_WAIT_TIME      ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
163 #define RSI_GET_RTC_TIMER_RESPONSE_WAIT_TIME   ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
164 #define RSI_WLAN_TCP_WINDOW_RESPONSE_WAIT_TIME ((5000 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
165 #define RSI_TIMEOUT_RESPONSE_WAIT_TIME         ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
166 #define RSI_SET_CONFIG_RESPONSE_WAIT_TIME      ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
167 #ifdef FW_LOGGING_ENABLE
168 #define RSI_DEVICE_LOG_RESPONSE_WAIT_TIME ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
169 #endif
170 // WIFI WAIT timeout defines
171 #define RSI_SCAN_RESPONSE_WAIT_TIME     ((10000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
172 #define RSI_JOIN_RESPONSE_WAIT_TIME     ((10000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
173 #define RSI_P2P_RESPONSE_WAIT_TIME      ((1000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
174 #define RSI_BGSCAN_RESPONSE_WAIT_TIME   ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
175 #define RSI_PING_RESPONSE_WAIT_TIME     ((60000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
176 #define RSI_WEP_RESPONSE_WAIT_TIME      ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
177 #define RSI_IPCONFV4_RESPONSE_WAIT_TIME ((20000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
178 #define RSI_IPCONFV6_RESPONSE_WAIT_TIME ((20000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
179 #define RSI_MDNSD_RESPONSE_WAIT_TIME \
180   ((250000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT)) //!Firmware max timeout value is 240 seconds
181 #define RSI_HTTP_RESPONSE_WAIT_TIME \
182   ((110000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT)) //!Firmware max timeout value is 100 seconds
183 #define RSI_AP_CONFIG_RESPONSE_WAIT_TIME        ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
184 #define RSI_FWUP_RESPONSE_WAIT_TIME             ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
185 #define RSI_MTYPE_RESPONSE_WAIT_TIME            ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
186 #define RSI_WP_LOAD_RESPONSE_WAIT_TIME          ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
187 #define RSI_JSON_LOAD_RESPONSE_WAIT_TIME        ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
188 #define RSI_WP_ERASE_RESPONSE_WAIT_TIME         ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
189 #define RSI_JSON_ERASE_RESPONSE_WAIT_TIME       ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
190 #define RSI_WP_CLEAR_ALL_RESPONSE_WAIT_TIME     ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
191 #define RSI_CONNECT_RESPONSE_WAIT_TIME          ((10000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
192 #define RSI_WPS_RESPONSE_WAIT_TIME              ((180000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
193 #define RSI_FREQ_OFFSET_WAIT_TIME               ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
194 #define RSI_CALIB_WRITE_WAIT_TIME               ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
195 #define RSI_SMTP_RESPONSE_WAIT_TIME             ((60000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
196 #define RSI_DNS_SERVER_ADD_RESPONSE_WAIT_TIME   ((150000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
197 #define RSI_FTP_RESPONSE_WAIT_TIME              ((120000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
198 #define RSI_OTA_FWUP_RESPONSE_WAIT_TIME         ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
199 #define RSI_CRYPTO_RESPONSE_WAIT_TIME           ((2000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
200 #define RSI_SOCKET_CREATE_RESPONSE_WAIT_TIME    ((100000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
201 #define RSI_CERT_RESPONSE_WAIT_TIME             ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
202 #define RSI_SCAN_WITH_BITMAP_RESPONSE_WAIT_TIME ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
203 #define RSI_DNS_QUERY_RESPONSE_WAIT_TIME        ((150000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
204 #define RSI_DNS_UPDATE_RESPONSE_WAIT_TIME       ((150000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
205 #define RSI_HOST_WP_SEND_RESPONSE_WAIT_TIME     ((200000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
206 #define RSI_POP3_RESPONSE_WAIT_TIME             ((60000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
207 #define RSI_HTTP_ABORT_RESPONSE_WAIT_TIME \
208   ((100000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT)) //!Firmware max timeout value is 100 seconds
209 #define RSI_HTTP_CLIENT_PUT_RESPONSE_WAIT_TIME \
210   ((100000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT)) //!Firmware max timeout value is 100 seconds
211 #define RSI_SNTP_RESPONSE_WAIT_TIME         ((100000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
212 #define RSI_EMB_MQTT_RESPONSE_WAIT_TIME     ((60000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
213 #define RSI_PSK_RESPONSE_WAIT_TIME          ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
214 #define RSI_SOCKET_CLOSE_RESPONSE_WAIT_TIME ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
215 #define RSI_WLAN_11AX_WAIT_TIME             ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
216 #define RSI_WLAN_TWT_RESPONSE_WAIT_TIME     ((5000 * WIFI_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
217 
218 // WIFI BLOCKED timeout defines
219 #define RSI_ACCEPT_RESPONSE_WAIT_TIME          (RSI_WAIT_FOREVER * WIFI_BLOCKED_TIMEOUT_SF)
220 #define RSI_SELECT_RESPONSE_WAIT_TIME          ((RSI_WAIT_FOREVER * WIFI_BLOCKED_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
221 #define RSI_SOCKET_RECVFROM_RESPONSE_WAIT_TIME ((RSI_WAIT_FOREVER * WIFI_BLOCKED_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
222 #define RSI_GPIO_WAIT_TIME                     10000
223 #define RSI_RX_EVENT_WAIT_TIME                 DEFAULT_TIMEOUT
224 #define RSI_COMMON_SEND_CMD_RESPONSE_WAIT_TIME ((250000 * WIFI_BLOCKED_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
225 #define RSI_WLAN_SEND_CMD_RESPONSE_WAIT_TIME   ((250000 * WIFI_BLOCKED_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
226 #define RSI_NWK_SEND_CMD_RESPONSE_WAIT_TIME    ((250000 * WIFI_BLOCKED_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
227 #define RSI_GPIO_CONFIG_RESP_WAIT_TIME         ((100 * WIFI_INTERNAL_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
228 
229 //BT/BLE command timeouts in ms
230 #define RSI_BT_COMMON_CMD_RESP_WAIT_TIME    ((500 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
231 #define RSI_BT_A2DP_CMD_RESP_WAIT_TIME      ((500 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
232 #define RSI_BT_A2DP_DATA_CMD_RESP_WAIT_TIME ((2000 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
233 #define RSI_BT_AVRCP_CMD_RESP_WAIT_TIME     ((200 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
234 #define RSI_BT_HFP_CMD_RESP_WAIT_TIME       ((500 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
235 #define RSI_BT_PBAP_CMD_RESP_WAIT_TIME      ((500 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
236 #define RSI_BT_HID_CMD_RESP_WAIT_TIME       ((500 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
237 #define RSI_BT_SPP_CMD_RESP_WAIT_TIME       ((500 * BT_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
238 
239 #define RSI_BLE_GAP_CMD_RESP_WAIT_TIME  ((500 * BLE_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
240 #define RSI_BLE_GATT_CMD_RESP_WAIT_TIME ((200 * BLE_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
241 
242 #define RSI_BT_BLE_CMD_MAX_RESP_WAIT_TIME ((2000 * BT_COMMON_WAIT_TIMEOUT_SF) + (DEFAULT_TIMEOUT))
243 
244 // Module type
245 typedef enum {
246   RSI_MODULE_TYPE_Q7   = 1,
247   RSI_MODULE_TYPE_SB   = 4,
248   RSI_MODULE_TYPE_M7DB = 5,
249   RSI_MODULE_TYPE_M4SB = 6,
250   RSI_MODULE_TYPE_WMS  = 10
251 } module_type;
252 
253 //Antenna Output power in dBm
254 #define RSI_MIN_OUTPUT_POWER_IN_DBM -8
255 #define RSI_MAX_OUTPUT_POWER_IN_DBM 15
256 
257 /******************************************************/
258 
259 /******************************************************
260  * *                    Constants
261  * ******************************************************/
262 /******************************************************
263  * *                   Enumerations
264  * ******************************************************/
265 // enumeration for states used in initial control block in driver
266 typedef enum rsi_device_state_e {
267   RSI_DEVICE_STATE_NONE = 0,
268   RSI_DRIVER_INIT_DONE,
269   RSI_DEVICE_INIT_DONE
270 } rsi_device_state_t;
271 
272 #define RSI_DMA_VALID      0
273 #define RSI_SKIP_DMA_VALID 1
274 //#define DEBUGOUT(...)
275 
276 #define BT_CMD 6
277 
278 /******************************************************
279  * *                 Type Definitions
280  * ******************************************************/
281 
282 /******************************************************
283  * *                    Structures
284  * ******************************************************/
285 
286 // driver control block structure
287 
288 /**
289  * @brief Structure representing the driver control block.
290  *
291  * This structure is used to define the parameters for the driver control block,
292  * including endianness, global Bluetooth callback, common Bluetooth callback,
293  * BLE callback, and device state.
294  */
295 typedef struct rsi_driver_cb_s {
296   /** Endianness */
297   uint8_t endian;
298 
299   /** Global Bluetooth callback */
300   rsi_bt_global_cb_t *bt_global_cb;
301   /** Common Bluetooth callback */
302   rsi_bt_cb_t *bt_common_cb;
303   /** BLE callback */
304   rsi_bt_cb_t *ble_cb;
305 
306 #if defined(SL_SI91X_PRINT_DBG_LOG)
307   /** Mutex for debug prints */
308   osMutexId_t debug_prints_mutex;
309 #endif
310 
311   /** Device state */
312   volatile rsi_device_state_t device_state;
313 } rsi_driver_cb_t;
314 
315 extern rsi_driver_cb_t *rsi_driver_cb;
316 
317 /******************************************************
318  * *                 Global Variables
319  * ******************************************************/
320 /******************************************************
321  * *               Function Declarations
322  * ******************************************************/
323 #endif
324