xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/controller/src/ble_ll_supp_cmd.c (revision 042d53a763ad75cb1465103098bb88c245d95138)
1*042d53a7SEvalZero /*
2*042d53a7SEvalZero  * Licensed to the Apache Software Foundation (ASF) under one
3*042d53a7SEvalZero  * or more contributor license agreements.  See the NOTICE file
4*042d53a7SEvalZero  * distributed with this work for additional information
5*042d53a7SEvalZero  * regarding copyright ownership.  The ASF licenses this file
6*042d53a7SEvalZero  * to you under the Apache License, Version 2.0 (the
7*042d53a7SEvalZero  * "License"); you may not use this file except in compliance
8*042d53a7SEvalZero  * with the License.  You may obtain a copy of the License at
9*042d53a7SEvalZero  *
10*042d53a7SEvalZero  *  http://www.apache.org/licenses/LICENSE-2.0
11*042d53a7SEvalZero  *
12*042d53a7SEvalZero  * Unless required by applicable law or agreed to in writing,
13*042d53a7SEvalZero  * software distributed under the License is distributed on an
14*042d53a7SEvalZero  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15*042d53a7SEvalZero  * KIND, either express or implied.  See the License for the
16*042d53a7SEvalZero  * specific language governing permissions and limitations
17*042d53a7SEvalZero  * under the License.
18*042d53a7SEvalZero  */
19*042d53a7SEvalZero 
20*042d53a7SEvalZero #include <stdint.h>
21*042d53a7SEvalZero #include <string.h>
22*042d53a7SEvalZero 
23*042d53a7SEvalZero #include "nimble/ble.h"
24*042d53a7SEvalZero #include "nimble/nimble_opt.h"
25*042d53a7SEvalZero #include "nimble/hci_common.h"
26*042d53a7SEvalZero #include "controller/ble_ll.h"
27*042d53a7SEvalZero #include "controller/ble_ll_hci.h"
28*042d53a7SEvalZero 
29*042d53a7SEvalZero /* Octet 0 */
30*042d53a7SEvalZero #define BLE_SUPP_CMD_DISCONNECT             (1 << 5)
31*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_0             (BLE_SUPP_CMD_DISCONNECT)
32*042d53a7SEvalZero 
33*042d53a7SEvalZero /* Octet 5 */
34*042d53a7SEvalZero #define BLE_SUPP_CMD_SET_EVENT_MASK         (1 << 6)
35*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_5             (BLE_SUPP_CMD_SET_EVENT_MASK)
36*042d53a7SEvalZero 
37*042d53a7SEvalZero /* Octet 10 */
38*042d53a7SEvalZero #define BLE_SUPP_CMD_RD_TX_PWR              (0 << 2)
39*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_10            (BLE_SUPP_CMD_RD_TX_PWR)
40*042d53a7SEvalZero 
41*042d53a7SEvalZero /* Octet 14 */
42*042d53a7SEvalZero #define BLE_SUPP_CMD_RD_LOC_VER             (1 << 3)
43*042d53a7SEvalZero #define BLE_SUPP_CMD_RD_LOC_SUPP_FEAT       (1 << 5)
44*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_14            \
45*042d53a7SEvalZero (                                           \
46*042d53a7SEvalZero     BLE_SUPP_CMD_RD_LOC_VER         |       \
47*042d53a7SEvalZero     BLE_SUPP_CMD_RD_LOC_SUPP_FEAT           \
48*042d53a7SEvalZero )
49*042d53a7SEvalZero 
50*042d53a7SEvalZero /* Octet 15 */
51*042d53a7SEvalZero #define BLE_SUPP_CMD_RD_BD_ADDR             (1 << 1)
52*042d53a7SEvalZero #define BLE_SUPP_CMD_RD_RSSI                (1 << 5)
53*042d53a7SEvalZero 
54*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_15            \
55*042d53a7SEvalZero (                                           \
56*042d53a7SEvalZero     BLE_SUPP_CMD_RD_BD_ADDR         |       \
57*042d53a7SEvalZero     BLE_SUPP_CMD_RD_RSSI                    \
58*042d53a7SEvalZero )
59*042d53a7SEvalZero 
60*042d53a7SEvalZero /* Octet 25 */
61*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EV_MASK         (1 << 0)
62*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_BUF_SIZE         (1 << 1)
63*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_LOC_FEAT         (1 << 2)
64*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_RAND_ADDR       (1 << 4)
65*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADV_PARAMS      (1 << 5)
66*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADV_TX_PWR      (1 << 6)
67*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADV_DATA        (1 << 7)
68*042d53a7SEvalZero 
69*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_25            \
70*042d53a7SEvalZero (                                           \
71*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EV_MASK     |       \
72*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_BUF_SIZE     |       \
73*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_LOC_FEAT     |       \
74*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_RAND_ADDR   |       \
75*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_ADV_PARAMS  |       \
76*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_ADV_TX_PWR  |       \
77*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_ADV_DATA            \
78*042d53a7SEvalZero )
79*042d53a7SEvalZero 
80*042d53a7SEvalZero /* Octet 26 */
81*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_SCAN_RSP_DATA   (1 << 0)
82*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADV_ENABLE      (1 << 1)
83*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_SCAN_PARAMS     (1 << 2)
84*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_SCAN_ENABLE     (1 << 3)
85*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CREATE_CONN         (1 << 4)
86*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CREATE_CONN_CANCEL  (1 << 5)
87*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_WHITELIST_SIZE   (1 << 6)
88*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CLR_WHITELIST       (1 << 7)
89*042d53a7SEvalZero 
90*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_26            \
91*042d53a7SEvalZero (                                           \
92*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_SCAN_RSP_DATA   |   \
93*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_ADV_ENABLE      |   \
94*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_SCAN_PARAMS     |   \
95*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_SCAN_ENABLE     |   \
96*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CREATE_CONN         |   \
97*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CREATE_CONN_CANCEL  |   \
98*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_WHITELIST_SIZE   |   \
99*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CLR_WHITELIST           \
100*042d53a7SEvalZero )
101*042d53a7SEvalZero 
102*042d53a7SEvalZero /* Octet 27 */
103*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ADD_DEV_WHITELIST   (1 << 0)
104*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RMV_DEV_WHITELIST   (1 << 1)
105*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CONN_UPDATE         (1 << 2)
106*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_HOST_CHAN_CLASS (1 << 3)
107*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_CHAN_MAP         (1 << 4)
108*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_REM_USED_FEAT    (1 << 5)
109*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_ENCRYPTION) == 1)
110*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ENCRYPT             (1 << 6)
111*042d53a7SEvalZero #else
112*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ENCRYPT             (0 << 6)
113*042d53a7SEvalZero #endif
114*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RAND                (1 << 7)
115*042d53a7SEvalZero 
116*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_27            \
117*042d53a7SEvalZero (                                           \
118*042d53a7SEvalZero     BLE_SUPP_CMD_LE_ENCRYPT             |   \
119*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RAND                |   \
120*042d53a7SEvalZero     BLE_SUPP_CMD_LE_ADD_DEV_WHITELIST   |   \
121*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RMV_DEV_WHITELIST   |   \
122*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CONN_UPDATE         |   \
123*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_HOST_CHAN_CLASS |   \
124*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_CHAN_MAP         |   \
125*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_REM_USED_FEAT        \
126*042d53a7SEvalZero )
127*042d53a7SEvalZero 
128*042d53a7SEvalZero /* Octet 28 */
129*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LE_ENCRYPTION) == 1)
130*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_START_ENCRYPT       (1 << 0)
131*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_LTK_REQ_REPLY       (1 << 1)
132*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_LTK_REQ_NEG_REPLY   (1 << 2)
133*042d53a7SEvalZero #else
134*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_START_ENCRYPT       (0 << 0)
135*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_LTK_REQ_REPLY       (0 << 1)
136*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_LTK_REQ_NEG_REPLY   (0 << 2)
137*042d53a7SEvalZero #endif
138*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_READ_SUPP_STATES    (1 << 3)
139*042d53a7SEvalZero 
140*042d53a7SEvalZero #if MYNEWT_VAL(BLE_LL_DIRECT_TEST_MODE) == 0
141*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RX_TEST             (0 << 4)
142*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_TX_TEST             (0 << 5)
143*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_TEST_END            (0 << 6)
144*042d53a7SEvalZero #else
145*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RX_TEST             (1 << 4)
146*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_TX_TEST             (1 << 5)
147*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_TEST_END            (1 << 6)
148*042d53a7SEvalZero #endif
149*042d53a7SEvalZero 
150*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_28            \
151*042d53a7SEvalZero (                                           \
152*042d53a7SEvalZero     BLE_SUPP_CMD_LE_START_ENCRYPT       |   \
153*042d53a7SEvalZero     BLE_SUPP_CMD_LE_LTK_REQ_REPLY       |   \
154*042d53a7SEvalZero     BLE_SUPP_CMD_LE_LTK_REQ_NEG_REPLY   |   \
155*042d53a7SEvalZero     BLE_SUPP_CMD_LE_READ_SUPP_STATES    |   \
156*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RX_TEST             |   \
157*042d53a7SEvalZero     BLE_SUPP_CMD_LE_TX_TEST             |   \
158*042d53a7SEvalZero     BLE_SUPP_CMD_LE_TEST_END                \
159*042d53a7SEvalZero )
160*042d53a7SEvalZero 
161*042d53a7SEvalZero /* Octet 33 */
162*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REM_CONN_PRR        (1 << 4)
163*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REM_CONN_PRNR       (1 << 5)
164*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_DATA_LEN_EXT) == 1)
165*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_DATALEN         (1 << 6)
166*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_SUGG_DATALEN     (1 << 7)
167*042d53a7SEvalZero #else
168*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_DATALEN         (0 << 6)
169*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_SUGG_DATALEN     (0 << 7)
170*042d53a7SEvalZero #endif
171*042d53a7SEvalZero 
172*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_33            \
173*042d53a7SEvalZero (                                           \
174*042d53a7SEvalZero     BLE_SUPP_CMD_LE_REM_CONN_PRR        |   \
175*042d53a7SEvalZero     BLE_SUPP_CMD_LE_REM_CONN_PRNR       |   \
176*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_DATALEN         |   \
177*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_SUGG_DATALEN         \
178*042d53a7SEvalZero )
179*042d53a7SEvalZero 
180*042d53a7SEvalZero /* Octet 34 */
181*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_DATA_LEN_EXT) == 1)
182*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_WR_SUGG_DATALEN     (1 << 0)
183*042d53a7SEvalZero #else
184*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_WR_SUGG_DATALEN     (0 << 0)
185*042d53a7SEvalZero #endif
186*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_READ_LOCAL_P256_PK  (0 << 1)
187*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_GENERATE_DH_KEY     (0 << 2)
188*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1)
189*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ADD_RESOLV_LIST     (1 << 3)
190*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REMOVE_RESOLV_LIST  (1 << 4)
191*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CLEAR_RESOLV_LIST   (1 << 5)
192*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_RESOLV_SIZE      (1 << 6)
193*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_PEER_RESV_ADDR   (1 << 7)
194*042d53a7SEvalZero #else
195*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ADD_RESOLV_LIST     (0 << 3)
196*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REMOVE_RESOLV_LIST  (0 << 4)
197*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CLEAR_RESOLV_LIST   (0 << 5)
198*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_RESOLV_SIZE      (0 << 6)
199*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_PEER_RESV_ADDR   (0 << 7)
200*042d53a7SEvalZero #endif
201*042d53a7SEvalZero 
202*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_34            \
203*042d53a7SEvalZero (                                           \
204*042d53a7SEvalZero     BLE_SUPP_CMD_LE_WR_SUGG_DATALEN     |   \
205*042d53a7SEvalZero     BLE_SUPP_CMD_LE_READ_LOCAL_P256_PK  |   \
206*042d53a7SEvalZero     BLE_SUPP_CMD_LE_GENERATE_DH_KEY     |   \
207*042d53a7SEvalZero     BLE_SUPP_CMD_LE_ADD_RESOLV_LIST     |   \
208*042d53a7SEvalZero     BLE_SUPP_CMD_LE_REMOVE_RESOLV_LIST  |   \
209*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CLEAR_RESOLV_LIST   |   \
210*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_RESOLV_SIZE      |   \
211*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_PEER_RESV_ADDR       \
212*042d53a7SEvalZero )
213*042d53a7SEvalZero 
214*042d53a7SEvalZero /* Octet 35 */
215*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1)
216*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_LOCAL_RESV_ADDR  (1 << 0)
217*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADDR_RES_EN     (1 << 1)
218*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_RESV_ADDR_TMO   (1 << 2)
219*042d53a7SEvalZero #else
220*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_LOCAL_RESV_ADDR  (0 << 0)
221*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADDR_RES_EN     (0 << 1)
222*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_RESV_ADDR_TMO   (0 << 2)
223*042d53a7SEvalZero #endif
224*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_MAX_DATALEN      (1 << 3)
225*042d53a7SEvalZero #if (BLE_LL_BT5_PHY_SUPPORTED == 1)
226*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_READ_PHY            (1 << 4)
227*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_DEFAULT_PHY     (1 << 5)
228*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PHY             (1 << 6)
229*042d53a7SEvalZero #else
230*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_READ_PHY            (0 << 4)
231*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_DEFAULT_PHY     (0 << 5)
232*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PHY             (0 << 6)
233*042d53a7SEvalZero #endif
234*042d53a7SEvalZero 
235*042d53a7SEvalZero #if MYNEWT_VAL(BLE_LL_DIRECT_TEST_MODE) == 0
236*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ENHANCED_RX_TEST    (0 << 7)
237*042d53a7SEvalZero #else
238*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ENHANCED_RX_TEST    (1 << 7)
239*042d53a7SEvalZero #endif
240*042d53a7SEvalZero 
241*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_35            \
242*042d53a7SEvalZero (                                           \
243*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_LOCAL_RESV_ADDR  |   \
244*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_ADDR_RES_EN     |   \
245*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_RESV_ADDR_TMO   |   \
246*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_MAX_DATALEN      |   \
247*042d53a7SEvalZero     BLE_SUPP_CMD_LE_READ_PHY            |   \
248*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_DEFAULT_PHY     |   \
249*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_PHY             |   \
250*042d53a7SEvalZero     BLE_SUPP_CMD_LE_ENHANCED_RX_TEST        \
251*042d53a7SEvalZero )
252*042d53a7SEvalZero 
253*042d53a7SEvalZero /* Octet 36 */
254*042d53a7SEvalZero #if MYNEWT_VAL(BLE_LL_DIRECT_TEST_MODE) == 0
255*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ENHANCED_TX_TEST    (0 << 0)
256*042d53a7SEvalZero #else
257*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ENHANCED_TX_TEST    (1 << 0)
258*042d53a7SEvalZero #endif
259*042d53a7SEvalZero 
260*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) == 1)
261*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADVS_RAND_ADDR  (1 << 1)
262*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_ADV_PARAM   (1 << 2)
263*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_ADV_DATA    (1 << 3)
264*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_SCAN_RSP    (1 << 4)
265*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_ADV_ENABLE  (1 << 5)
266*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_MAX_ADV_DATA_LEN (1 << 6)
267*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_NUM_SUPP_ADVS    (1 << 7)
268*042d53a7SEvalZero #else
269*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_ADVS_RAND_ADDR  (0 << 1)
270*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_ADV_PARAM   (0 << 2)
271*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_ADV_DATA    (0 << 3)
272*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_SCAN_RSP    (0 << 4)
273*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_ADV_ENABLE  (0 << 5)
274*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_MAX_ADV_DATA_LEN (0 << 6)
275*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_NUM_SUPP_ADVS    (0 << 7)
276*042d53a7SEvalZero #endif
277*042d53a7SEvalZero 
278*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_36            \
279*042d53a7SEvalZero (                                           \
280*042d53a7SEvalZero     BLE_SUPP_CMD_LE_ENHANCED_TX_TEST    |   \
281*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_ADVS_RAND_ADDR  |   \
282*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EXT_ADV_PARAM   |   \
283*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EXT_ADV_DATA    |   \
284*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EXT_SCAN_RSP    |   \
285*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EXT_ADV_ENABLE  |   \
286*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_MAX_ADV_DATA_LEN |   \
287*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_NUM_SUPP_ADVS        \
288*042d53a7SEvalZero )
289*042d53a7SEvalZero 
290*042d53a7SEvalZero /* Octet 37 */
291*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) == 1)
292*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REMOVE_ADVS         (1 << 0)
293*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CLEAR_ADVS          (1 << 1)
294*042d53a7SEvalZero #else
295*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REMOVE_ADVS         (0 << 0)
296*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CLEAR_ADVS          (0 << 1)
297*042d53a7SEvalZero #endif
298*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PADV_PARAM      (0 << 2)
299*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PADV_DATA       (0 << 3)
300*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PADV_ENABLE     (0 << 4)
301*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_EXT_ADV) == 1)
302*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_SCAN_PARAM  (1 << 5)
303*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_SCAN_ENABLE (1 << 6)
304*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_EXT_CREATE_CONN     (1 << 7)
305*042d53a7SEvalZero #else
306*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_SCAN_PARAM  (0 << 5)
307*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_EXT_SCAN_ENABLE (0 << 6)
308*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_EXT_CREATE_CONN     (0 << 7)
309*042d53a7SEvalZero #endif
310*042d53a7SEvalZero 
311*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_37            \
312*042d53a7SEvalZero (                                           \
313*042d53a7SEvalZero     BLE_SUPP_CMD_LE_REMOVE_ADVS         |   \
314*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CLEAR_ADVS          |   \
315*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_PADV_PARAM      |   \
316*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_PADV_DATA       |   \
317*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_PADV_ENABLE     |   \
318*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EXT_SCAN_PARAM  |   \
319*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_EXT_SCAN_ENABLE |   \
320*042d53a7SEvalZero     BLE_SUPP_CMD_LE_EXT_CREATE_CONN         \
321*042d53a7SEvalZero )
322*042d53a7SEvalZero 
323*042d53a7SEvalZero /* Octet 38 */
324*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_PADV_CREATE_SYNC    (0 << 0)
325*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_PADV_CREATE_SYNC_C  (0 << 1)
326*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_PADV_TERMINATE_SYNC (0 << 2)
327*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_ADD_PADV_LIST       (0 << 3)
328*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_REMOVE_PADV_LIST    (0 << 4)
329*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_CLEAR_PADV_LIST     (0 << 5)
330*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_PADV_LIST_SIZE   (0 << 6)
331*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_TX_POWER         (0 << 7)
332*042d53a7SEvalZero 
333*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_38            \
334*042d53a7SEvalZero (                                           \
335*042d53a7SEvalZero     BLE_SUPP_CMD_LE_PADV_CREATE_SYNC    |   \
336*042d53a7SEvalZero     BLE_SUPP_CMD_LE_PADV_CREATE_SYNC_C  |   \
337*042d53a7SEvalZero     BLE_SUPP_CMD_LE_PADV_TERMINATE_SYNC |   \
338*042d53a7SEvalZero     BLE_SUPP_CMD_LE_ADD_PADV_LIST       |   \
339*042d53a7SEvalZero     BLE_SUPP_CMD_LE_REMOVE_PADV_LIST    |   \
340*042d53a7SEvalZero     BLE_SUPP_CMD_LE_CLEAR_PADV_LIST     |   \
341*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_PADV_LIST_SIZE   |   \
342*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_TX_POWER             \
343*042d53a7SEvalZero )
344*042d53a7SEvalZero 
345*042d53a7SEvalZero /* Octet 39 */
346*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_RD_RF_PATH_COMP     (0 << 0)
347*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_WR_RF_PATH_COMP     (0 << 1)
348*042d53a7SEvalZero #if (MYNEWT_VAL(BLE_LL_CFG_FEAT_LL_PRIVACY) == 1)
349*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PRIVACY_MODE    (1 << 2)
350*042d53a7SEvalZero #else
351*042d53a7SEvalZero #define BLE_SUPP_CMD_LE_SET_PRIVACY_MODE    (0 << 2)
352*042d53a7SEvalZero #endif
353*042d53a7SEvalZero 
354*042d53a7SEvalZero #define BLE_LL_SUPP_CMD_OCTET_39            \
355*042d53a7SEvalZero (                                           \
356*042d53a7SEvalZero     BLE_SUPP_CMD_LE_RD_RF_PATH_COMP     |   \
357*042d53a7SEvalZero     BLE_SUPP_CMD_LE_WR_RF_PATH_COMP     |   \
358*042d53a7SEvalZero     BLE_SUPP_CMD_LE_SET_PRIVACY_MODE        \
359*042d53a7SEvalZero )
360*042d53a7SEvalZero 
361*042d53a7SEvalZero /* Defines the array of supported commands */
362*042d53a7SEvalZero const uint8_t g_ble_ll_supp_cmds[BLE_LL_SUPP_CMD_LEN] =
363*042d53a7SEvalZero {
364*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_0,            /* Octet 0 */
365*042d53a7SEvalZero     0,
366*042d53a7SEvalZero     0,
367*042d53a7SEvalZero     0,
368*042d53a7SEvalZero     0,
369*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_5,
370*042d53a7SEvalZero     0,
371*042d53a7SEvalZero     0,
372*042d53a7SEvalZero     0,                                  /* Octet 8 */
373*042d53a7SEvalZero     0,
374*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_10,
375*042d53a7SEvalZero     0,
376*042d53a7SEvalZero     0,
377*042d53a7SEvalZero     0,
378*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_14,
379*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_15,
380*042d53a7SEvalZero     0,                                  /* Octet 16 */
381*042d53a7SEvalZero     0,
382*042d53a7SEvalZero     0,
383*042d53a7SEvalZero     0,
384*042d53a7SEvalZero     0,
385*042d53a7SEvalZero     0,
386*042d53a7SEvalZero     0,
387*042d53a7SEvalZero     0,
388*042d53a7SEvalZero     0,                                 /* Octet 24 */
389*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_25,
390*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_26,
391*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_27,
392*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_28,
393*042d53a7SEvalZero     0,
394*042d53a7SEvalZero     0,
395*042d53a7SEvalZero     0,
396*042d53a7SEvalZero     0,                                  /* Octet 32 */
397*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_33,
398*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_34,
399*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_35,
400*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_36,
401*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_37,
402*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_38,
403*042d53a7SEvalZero     BLE_LL_SUPP_CMD_OCTET_39,
404*042d53a7SEvalZero };
405