1 /**
2  ****************************************************************************************
3  *
4  * @file rwble_config.h
5  *
6  * @brief Configuration of the BLE protocol stack (max number of supported connections,
7  * type of partitioning, etc.)
8  *
9  * Copyright (C) RivieraWaves 2009-2015
10  *
11  *
12  ****************************************************************************************
13  */
14 
15 #ifndef RWBLE_CONFIG_H_
16 #define RWBLE_CONFIG_H_
17 
18 /**
19  ****************************************************************************************
20  * @addtogroup ROOT
21  * @{
22  * @name BLE stack configuration
23  * @{
24  ****************************************************************************************
25  */
26 
27 #include "rwip_config.h"
28 
29 
30 /******************************************************************************************/
31 /* -------------------------   COEXISTENCE SETUP      ------------------------------------*/
32 /******************************************************************************************/
33 
34 ///WLAN coex
35 #define RW_BLE_WLAN_COEX        RW_WLAN_COEX
36 ///WLAN test mode
37 #define RW_BLE_WLAN_COEX_TEST   RW_WLAN_COEX_TEST
38 
39 /// MWS Coexistence
40 #define RW_BLE_MWS_COEX         RW_MWS_COEX
41 ///WLAN test mode
42 #define RW_BLE_MWS_COEX_TEST    RW_MWS_COEX_TEST
43 
44 ///To let the HW using the default values set in the registers
45 #define RW_BLE_PTI_PRIO_AUTO    15
46 
47 
48 
49 /// PTI configuration index
50 enum rwble_pti_config_idx
51 {
52     BLE_PTI_CON_IDX,
53     BLE_PTI_ADV_IDX,
54     BLE_PTI_SCAN_IDX,
55     BLE_PTI_INIT_IDX,
56     BLE_PTI_IDX_MAX
57 };
58 
59 
60 /******************************************************************************************/
61 /* --------------------------   DEBUG SETUP       ----------------------------------------*/
62 /******************************************************************************************/
63 
64 /// Flag indicating if tester emulator is available or not
65 #if defined(CFG_BLE_TESTER)
66 /// Flag indicating if tester emulator is available or not
67 #define BLE_TESTER              1
68 #else // defined (CFG_BLE_TESTER)
69 #define BLE_TESTER              0
70 #endif // defined (CFG_BLE_TESTER)
71 
72 /// Flag indicating if debug mode is activated or not
73 #define BLE_DEBUG               RW_DEBUG
74 #define BLE_SWDIAG              RW_SWDIAG
75 
76 /// Flag indicating if Read/Write memory commands are supported or not
77 #define BLE_DEBUG_MEM           RW_DEBUG_MEM
78 
79 /// Flag indicating if Flash debug commands are supported or not
80 #define BLE_DEBUG_FLASH         RW_DEBUG_FLASH
81 
82 /// Flag indicating if NVDS feature is supported or not
83 #define BLE_DEBUG_NVDS          RW_DEBUG_NVDS
84 
85 /// Flag indicating if CPU stack profiling commands are supported or not
86 #define BLE_DEBUG_STACK_PROF    RW_DEBUG_STACK_PROF
87 
88 /******************************************************************************************/
89 /* -------------------------   BLE SETUP      --------------------------------------------*/
90 /******************************************************************************************/
91 
92 /// Exchange memory presence
93 #define BLE_EM_PRESENT              (BLE_EMB_PRESENT)
94 
95 #define BLE_TEST_MODE_SUPPORT       (1)
96 
97 /// Number of devices in the white list
98 #define BLE_WHITELIST_MAX           (BLE_CONNECTION_MAX + 2)
99 
100 /// Number of devices in the Resolution Address List
101 /// This have to be tuned according to the core frequency. Worst case is having in scan mode
102 /// all IRK and valid in resolving list and device receive a Direct Adv Report that contains
103 /// RPAs for InitA and AdvA
104 #define BLE_RESOL_ADDR_LIST_MAX     (3)
105 
106 /// Connection handle max
107 #define BLE_MAX_CONHDL              (BLE_CONNECTION_MAX)
108 
109 /// Number of devices capacity for the scan filtering
110 #if (BLE_CENTRAL || BLE_OBSERVER)
111 #define BLE_DUPLICATE_FILTER_MAX    (10)
112 #endif //(BLE_CENTRAL || BLE_OBSERVER)
113 
114 /** Size of the heap
115  * - For KE messages: (N+1) x 256
116  * - For LLC environment: N x 80 Bytes
117  * - For LLD events/intervals: (2N+1) x (80 + 16)
118  */
119 #if (BLE_CENTRAL || BLE_PERIPHERAL)
120     #define BLE_HEAP_MSG_SIZE               (256 * (BLE_CONNECTION_MAX+1) + 80 * (BLE_CONNECTION_MAX) + 96 * (2*BLE_CONNECTION_MAX+1))
121     /// Size required to allocate environment variable for one link
122     #define BLE_HEAP_ENV_SIZE               (sizeof(struct llc_env_tag) + 4)
123 #else
124     #define BLE_HEAP_MSG_SIZE               (256)
125     /// Size required to allocate environment variable for one link
126     #define BLE_HEAP_ENV_SIZE               (4)
127 #endif /* #if (BLE_CENTRAL || BLE_PERIPHERAL) */
128 
129 
130 /******************************************************************************************/
131 /* --------------------------   RADIO SETUP       ----------------------------------------*/
132 /******************************************************************************************/
133 /// Class of device
134 #define RF_CLASS1                            0
135 
136 /******************************************************************************************/
137 /* --------------------------   REGISTER SETUP       --------------------------------------*/
138 /******************************************************************************************/
139 
140 #define RW_BLE_CUST1_INST                    0
141 
142 /******************************************************************************************/
143 /* --------------------------   SCHEDULING SETUP       --------------------------------------*/
144 /******************************************************************************************/
145 
146 /// EA programming latency for only 1 activity
147 #define RWBLE_PROG_LATENCY_DFT         (2)
148 /// EA asap latency
149 #define RWBLE_ASAP_LATENCY             (2)
150 /// Instant value mask
151 #define RWBLE_INSTANT_MASK         (0x0000FFFF)
152 
153 /******************************************************************************************/
154 /* -----------------------   SUPPORTED HCI COMMANDS       --------------------------------*/
155 /******************************************************************************************/
156 
157 //byte0
158 #define BLE_CMDS_BYTE0      BLE_DISC_CMD
159 //byte2
160 #define BLE_CMDS_BYTE2      BLE_RD_REM_VERS_CMD
161 //byte5
162 #define BLE_CMDS_BYTE5      (BLE_SET_EVT_MSK_CMD | BLE_RESET_CMD)
163 //byte10
164 #define BLE_CMDS_BYTE10     (BLE_HL_NB_CMP_PKT_CMD | BLE_RD_TX_PWR_CMD\
165                             |BLE_HL_BUF_SIZE_CMD | BLE_SET_CTRL_TO_HL_FCTRL_CMD)
166 //byte14
167 #define BLE_CMDS_BYTE14     (BLE_RD_LOC_VERS_CMD | BLE_RD_LOC_SUP_FEAT_CMD\
168                             |BLE_RD_BUF_SIZE_CMD)
169 //byte15
170 #define BLE_CMDS_BYTE15     (BLE_RD_BD_ADDR_CMD | BLE_RD_RSSI_CMD)
171 #if !(BLE_QUALIF)
172 //byte22
173 #define BLE_CMDS_BYTE22     (BLE_SET_EVT_MSK_PG2_CMD)
174 #else
175 //byte22
176 #define BLE_CMDS_BYTE22     0
177 #endif
178 //byte25
179 #define BLE_CMDS_BYTE25     (BLE_LE_SET_EVT_MSK_CMD | BLE_LE_RD_BUF_SIZE_CMD\
180                             |BLE_LE_RD_LOC_SUP_FEAT_CMD | BLE_LE_SET_RAND_ADDR_CMD\
181                             |BLE_LE_SET_ADV_PARAM_CMD | BLE_LE_RD_ADV_TX_PWR_CMD\
182                             |BLE_LE_SET_ADV_DATA_CMD)
183 //byte26
184 #define BLE_CMDS_BYTE26     (BLE_LE_SET_SC_RSP_DATA_CMD | BLE_LE_SET_ADV_EN_CMD\
185                             |BLE_LE_SET_SC_PARAM_CMD | BLE_LE_SET_SC_EN_CMD\
186                             |BLE_LE_CREAT_CNX_CMD | BLE_LE_CREAT_CNX_CNL_CMD\
187                             |BLE_LE_RD_WL_SIZE_CMD | BLE_LE_CLEAR_WL_CMD)
188 //byte27
189 #define BLE_CMDS_BYTE27     (BLE_LE_ADD_DEV_WL_CMD | BLE_LE_REM_DEV_WL_CMD\
190                             |BLE_LE_CNX_UPDATE_CMD | BLE_LE_SET_HL_CH_CLASS_CMD\
191                             |BLE_LE_RD_CH_MAP_CMD | BLE_LE_RD_REM_USED_FEAT_CMD\
192                             |BLE_LE_ENCRYPT_CMD | BLE_LE_RAND_CMD)
193 //byte28
194 #define BLE_CMDS_BYTE28     (BLE_LE_START_ENC_CMD | BLE_LE_LTK_REQ_RPLY_CMD\
195                             |BLE_LE_LTK_REQ_NEG_RPLY_CMD | BLE_LE_RD_SUPP_STATES_CMD\
196                             |BLE_LE_RX_TEST_CMD | BLE_LE_TX_TEST_CMD\
197                             |BLE_LE_STOP_TEST_CMD)
198 #if !(BLE_QUALIF)
199 //byte32
200 #define BLE_CMDS_BYTE32     (BLE_RD_AUTH_PAYL_TO_CMD | BLE_WR_AUTH_PAYL_TO_CMD)
201 //byte33
202 #define BLE_CMDS_BYTE33     (BLE_LE_REM_CON_PARA_REQ_RPLY_CMD | BLE_LE_REM_CON_PARA_REQ_NEG_RPLY_CMD\
203                             | BLE_LE_SET_DATA_LEN_CMD | BLE_LE_RD_SUGGTED_DFT_DATA_LEN_CMD)
204 //byte34
205 #define BLE_CMDS_BYTE34     ( BLE_LE_WR_SUGGTED_DFT_DATA_LEN_CMD    \
206                              | BLE_LE_RD_LOC_P256_PUB_KEY_CMD       \
207                              | BLE_LE_GEN_DH_KEY_CMD                \
208                              | BLE_LE_ADD_DEV_TO_RESOLV_LIST_CMD    \
209                              | BLE_LE_REM_DEV_FROM_RESOLV_LIST_CMD  \
210                              | BLE_LE_CLEAR_RESOLV_LIST_CMD         \
211                              | BLE_LE_RD_RESOLV_LIST_SIZE_CMD       \
212                              | BLE_LE_RD_PEER_RESOLV_ADDR_CMD)
213 //byte35
214 #define BLE_CMDS_BYTE35     (  BLE_LE_RD_LOCAL_RESOLV_ADDR_CMD    \
215                              | BLE_LE_SET_ADDR_RESOL_CMD          \
216                              | BLE_LE_SET_RESOLV_PRIV_ADDR_TO_CMD \
217                              | BLE_LE_RD_MAX_DATA_LEN_CMD)
218 #else
219 //byte32
220 #define BLE_CMDS_BYTE32     0
221 //byte33
222 #define BLE_CMDS_BYTE33     0
223 //byte34
224 #define BLE_CMDS_BYTE34     0
225 //byte35
226 #define BLE_CMDS_BYTE35     0
227 #endif // BLE_QUALIF
228 
229 /******************************************************************************************/
230 /* -------   SUPPORTED VALUES FOR DATA LENGTH EXTENSION COMMANDS   -----------------------*/
231 /******************************************************************************************/
232 #define BLE_TESTMODE_MAX_OCTETS     (255)
233 //8 bits preamble
234 #define BLE_PREAMBLE_TIME         (8)
235 //32 bits Access Code
236 #define BLE_ACCESS_CODE_BIT_SIZE  (32)
237 //16 bits header
238 #define BLE_HEADER_BIT_SIZE       (16)
239 //32bits MIC
240 #define BLE_MIC_BIT_SIZE          (32)
241 //24 bits CRC
242 #define BLE_CRC_BIT_SIZE          (24)
243 //8 bits preamble
244 #define BLE_PREAMBLE_SIZE         (1)
245 //4 bytes Access Code
246 #define BLE_ACCESS_CODE_SIZE      (4)
247 //2 bytes header
248 #define BLE_HEADER_SIZE           (2)
249 //4 bytes MIC
250 #define BLE_MIC_SIZE              (4)
251 //3 bytes CRC
252 #define BLE_CRC_SIZE              (3)
253 
254 #define BLE_COMMON_BIT_SIZE       (BLE_ACCESS_CODE_BIT_SIZE + BLE_HEADER_BIT_SIZE + BLE_CRC_BIT_SIZE)
255 /******************************************************************************************/
256 /* --------------------------   DLE SETUP       ----------------------------------------*/
257 /******************************************************************************************/
258 
259 
260 
261 #define BLE_MIN_OCTETS  (27)
262 #define BLE_MIN_TIME    (328)
263 #if !(BLE_QUALIF)
264 #define BLE_MAX_OCTETS  (251)
265 #define BLE_MAX_TIME    (2120)
266 #else
267 #define BLE_MAX_OCTETS  (27)
268 #define BLE_MAX_TIME    (328)
269 #endif
270 // Max number of descriptor to be linked under IRQ context to avoid CPU overload
271 #define BLE_NB_MAX_CHUNKS   (10)
272 /******************************************************************************************/
273 /* --------------------------   PROCEDURE STARTUP ----------------------------------------*/
274 /******************************************************************************************/
275 
276 #define BLE_DLE_PROCEDURE   (1 << 0)
277 #define BLE_PHY_PROCEDURE   (1 << 1)
278 
279 /// @} BLE stack configuration
280 /// @} ROOT
281 
282 #endif // RWBLE_CONFIG_H_
283