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