Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 1999-2012 Broadcom Corporation
      4  *
      5  *  Licensed under the Apache License, Version 2.0 (the "License");
      6  *  you may not use this file except in compliance with the License.
      7  *  You may obtain a copy of the License at:
      8  *
      9  *  http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  ******************************************************************************/
     18 
     19 /******************************************************************************
     20  *
     21  *  This file contains the Bluetooth Manager (BTM) API function external
     22  *  definitions.
     23  *
     24  ******************************************************************************/
     25 #ifndef BTM_BLE_API_H
     26 #define BTM_BLE_API_H
     27 
     28 #include "btm_api.h"
     29 #include "gki.h"
     30 
     31 #define CHNL_MAP_LEN    5
     32 typedef UINT8 tBTM_BLE_CHNL_MAP[CHNL_MAP_LEN];
     33 
     34 /* 0x00-0x04 only used for set advertising parameter command */
     35 #define BTM_BLE_CONNECT_EVT     0x00   /* 0x00-0x04 only used for set advertising
     36                                             parameter command */
     37 #define BTM_BLE_CONNECT_DIR_EVT 0x01   /* Connectable directed advertising */
     38 #define BTM_BLE_DISCOVER_EVT    0x02  /* Scannable undirected advertising */
     39 #define BTM_BLE_NON_CONNECT_EVT 0x03  /* Non connectable undirected advertising */
     40 #define BTM_BLE_CONNECT_LO_DUTY_DIR_EVT 0x04        /* Connectable low duty
     41                                                        cycle directed advertising  */
     42     /* 0x00 - 0x05 can be received on adv event type */
     43 #define BTM_BLE_SCAN_RSP_EVT    0x04
     44 #define BTM_BLE_SCAN_REQ_EVT    0x05
     45 #define BTM_BLE_UNKNOWN_EVT     0xff
     46 
     47 #define BTM_BLE_UNKNOWN_EVT     0xff
     48 
     49 typedef UINT32 tBTM_BLE_REF_VALUE;
     50 
     51 #define BTM_BLE_SCAN_MODE_PASS      0
     52 #define BTM_BLE_SCAN_MODE_ACTI      1
     53 #define BTM_BLE_SCAN_MODE_NONE      0xff
     54 typedef UINT8 tBTM_BLE_SCAN_MODE;
     55 
     56 #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0
     57 #define BTM_BLE_BATCH_SCAN_MODE_PASS  1
     58 #define BTM_BLE_BATCH_SCAN_MODE_ACTI  2
     59 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3
     60 
     61 typedef UINT8 tBTM_BLE_BATCH_SCAN_MODE;
     62 
     63 /* advertising channel map */
     64 #define BTM_BLE_ADV_CHNL_37    (0x01 << 0)
     65 #define BTM_BLE_ADV_CHNL_38    (0x01 << 1)
     66 #define BTM_BLE_ADV_CHNL_39    (0x01 << 2)
     67 typedef UINT8 tBTM_BLE_ADV_CHNL_MAP;
     68 
     69 /*d efault advertising channel map */
     70 #ifndef BTM_BLE_DEFAULT_ADV_CHNL_MAP
     71 #define BTM_BLE_DEFAULT_ADV_CHNL_MAP   (BTM_BLE_ADV_CHNL_37| BTM_BLE_ADV_CHNL_38| BTM_BLE_ADV_CHNL_39)
     72 #endif
     73 
     74 /* advertising filter policy */
     75 #define AP_SCAN_CONN_ALL           0x00        /* default */
     76 #define AP_SCAN_WL_CONN_ALL        0x01
     77 #define AP_SCAN_ALL_CONN_WL        0x02
     78 #define AP_SCAN_CONN_WL            0x03
     79 #define AP_SCAN_CONN_POLICY_MAX    0x04
     80 typedef UINT8   tBTM_BLE_AFP;
     81 
     82 /* default advertising filter policy */
     83 #ifndef BTM_BLE_DEFAULT_AFP
     84 #define BTM_BLE_DEFAULT_AFP   AP_SCAN_CONN_ALL
     85 #endif
     86 
     87 /* scanning filter policy */
     88 #define SP_ADV_ALL     0x00     /* accept adv pakt from all, directed adv pkt not directed to me is ignored */
     89 #define SP_ADV_WL      0x01     /* accept adv pakt from device in white list, directed adv pkt not directed to me is ignored */
     90 typedef UINT8   tBTM_BLE_SFP;
     91 
     92 #ifndef BTM_BLE_DEFAULT_SFP
     93 #define BTM_BLE_DEFAULT_SFP   SP_ADV_ALL
     94 #endif
     95 
     96 /* adv parameter boundary values */
     97 #define BTM_BLE_ADV_INT_MIN            0x0020
     98 #define BTM_BLE_ADV_INT_MAX            0x4000
     99 
    100 /* Full scan boundary values */
    101 #define BTM_BLE_ADV_SCAN_FULL_MIN      0x00
    102 #define BTM_BLE_ADV_SCAN_FULL_MAX      0x64
    103 
    104 /* Partial scan boundary values */
    105 #define BTM_BLE_ADV_SCAN_TRUNC_MIN      BTM_BLE_ADV_SCAN_FULL_MIN
    106 #define BTM_BLE_ADV_SCAN_TRUNC_MAX      BTM_BLE_ADV_SCAN_FULL_MAX
    107 
    108 /* Threshold values */
    109 #define BTM_BLE_ADV_SCAN_THR_MIN        BTM_BLE_ADV_SCAN_FULL_MIN
    110 #define BTM_BLE_ADV_SCAN_THR_MAX        BTM_BLE_ADV_SCAN_FULL_MAX
    111 
    112 /* connection parameter boundary values */
    113 #define BTM_BLE_SCAN_INT_MIN            0x0004
    114 #define BTM_BLE_SCAN_INT_MAX            0x4000
    115 #define BTM_BLE_SCAN_WIN_MIN            0x0004
    116 #define BTM_BLE_SCAN_WIN_MAX            0x4000
    117 #define BTM_BLE_CONN_INT_MIN            0x0006
    118 #define BTM_BLE_CONN_INT_MAX            0x0C80
    119 #define BTM_BLE_CONN_LATENCY_MAX        500
    120 #define BTM_BLE_CONN_SUP_TOUT_MIN       0x000A
    121 #define BTM_BLE_CONN_SUP_TOUT_MAX       0x0C80
    122 #define BTM_BLE_CONN_PARAM_UNDEF        0xffff      /* use this value when a specific value not to be overwritten */
    123 
    124 /* default connection parameters if not configured, use GAP recommend value for auto/selective connection */
    125 /* default scan interval */
    126 #ifndef BTM_BLE_SCAN_FAST_INT
    127 #define BTM_BLE_SCAN_FAST_INT    96    /* 30 ~ 60 ms (use 60)  = 96 *0.625 */
    128 #endif
    129 /* default scan window for background connection, applicable for auto connection or selective conenction */
    130 #ifndef BTM_BLE_SCAN_FAST_WIN
    131 #define BTM_BLE_SCAN_FAST_WIN   48      /* 30 ms = 48 *0.625 */
    132 #endif
    133 
    134 /* default scan paramter used in reduced power cycle (background scanning) */
    135 #ifndef BTM_BLE_SCAN_SLOW_INT_1
    136 #define BTM_BLE_SCAN_SLOW_INT_1    2048    /* 1.28 s   = 2048 *0.625 */
    137 #endif
    138 #ifndef BTM_BLE_SCAN_SLOW_WIN_1
    139 #define BTM_BLE_SCAN_SLOW_WIN_1   48      /* 30 ms = 48 *0.625 */
    140 #endif
    141 
    142 /* default scan paramter used in reduced power cycle (background scanning) */
    143 #ifndef BTM_BLE_SCAN_SLOW_INT_2
    144 #define BTM_BLE_SCAN_SLOW_INT_2    4096    /* 2.56 s   = 4096 *0.625 */
    145 #endif
    146 #ifndef BTM_BLE_SCAN_SLOW_WIN_2
    147 #define BTM_BLE_SCAN_SLOW_WIN_2   36      /* 22.5 ms = 36 *0.625 */
    148 #endif
    149 
    150 /* default connection interval min */
    151 #ifndef BTM_BLE_CONN_INT_MIN_DEF
    152 #define BTM_BLE_CONN_INT_MIN_DEF     24      /* recommended min: 30ms  = 24 * 1.25 */
    153 #endif
    154 /* default connectino interval max */
    155 #ifndef BTM_BLE_CONN_INT_MAX_DEF
    156 #define BTM_BLE_CONN_INT_MAX_DEF     40      /* recommended max: 50 ms = 56 * 1.25 */
    157 #endif
    158 /* default slave latency */
    159 #ifndef BTM_BLE_CONN_SLAVE_LATENCY_DEF
    160 #define BTM_BLE_CONN_SLAVE_LATENCY_DEF  0      /* 0 */
    161 #endif
    162 /* default supervision timeout */
    163 #ifndef BTM_BLE_CONN_TIMEOUT_DEF
    164 #define BTM_BLE_CONN_TIMEOUT_DEF    2000
    165 #endif
    166 
    167 #define BTM_BLE_DIR_CONN_FALLBACK_UNDIR         1
    168 #define BTM_BLE_DIR_CONN_FALLBACK_NO_ADV        2
    169 
    170 #ifndef BTM_BLE_DIR_CONN_FALLBACK
    171 #define BTM_BLE_DIR_CONN_FALLBACK   BTM_BLE_DIR_CONN_FALLBACK_UNDIR
    172 #endif
    173 
    174 #define BTM_CMAC_TLEN_SIZE          8                   /* 64 bits */
    175 #define BTM_BLE_AUTH_SIGN_LEN       12                   /* BLE data signature length 8 Bytes + 4 bytes counter*/
    176 typedef UINT8 BLE_SIGNATURE[BTM_BLE_AUTH_SIGN_LEN];         /* Device address */
    177 
    178 #ifndef BTM_BLE_HOST_SUPPORT
    179 #define BTM_BLE_HOST_SUPPORT		0x01
    180 #endif
    181 
    182 #ifndef BTM_BLE_SIMULTANEOUS_HOST
    183 #define BTM_BLE_SIMULTANEOUS_HOST	0x01
    184 #endif
    185 
    186 /* Appearance Values Reported with BTM_BLE_AD_TYPE_APPEARANCE */
    187 #define BTM_BLE_APPEARANCE_UKNOWN                  0x0000
    188 #define BTM_BLE_APPEARANCE_GENERIC_PHONE           0x0040
    189 #define BTM_BLE_APPEARANCE_GENERIC_COMPUTER        0x0080
    190 #define BTM_BLE_APPEARANCE_GENERIC_WATCH           0x00C0
    191 #define BTM_BLE_APPEARANCE_SPORTS_WATCH            0x00C1
    192 #define BTM_BLE_APPEARANCE_GENERIC_CLOCK           0x0100
    193 #define BTM_BLE_APPEARANCE_GENERIC_DISPLAY         0x0140
    194 #define BTM_BLE_APPEARANCE_GENERIC_REMOTE          0x0180
    195 #define BTM_BLE_APPEARANCE_GENERIC_EYEGLASSES      0x01C0
    196 #define BTM_BLE_APPEARANCE_GENERIC_TAG             0x0200
    197 #define BTM_BLE_APPEARANCE_GENERIC_KEYRING         0x0240
    198 #define BTM_BLE_APPEARANCE_GENERIC_MEDIA_PLAYER    0x0280
    199 #define BTM_BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 0x02C0
    200 #define BTM_BLE_APPEARANCE_GENERIC_THERMOMETER     0x0300
    201 #define BTM_BLE_APPEARANCE_THERMOMETER_EAR         0x0301
    202 #define BTM_BLE_APPEARANCE_GENERIC_HEART_RATE      0x0340
    203 #define BTM_BLE_APPEARANCE_HEART_RATE_BELT         0x0341
    204 #define BTM_BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE  0x0380
    205 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_ARM      0x0381
    206 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_WRIST    0x0382
    207 #define BTM_BLE_APPEARANCE_GENERIC_HID             0x03C0
    208 #define BTM_BLE_APPEARANCE_HID_KEYBOARD            0x03C1
    209 #define BTM_BLE_APPEARANCE_HID_MOUSE               0x03C2
    210 #define BTM_BLE_APPEARANCE_HID_JOYSTICK            0x03C3
    211 #define BTM_BLE_APPEARANCE_HID_GAMEPAD             0x03C4
    212 #define BTM_BLE_APPEARANCE_HID_DIGITIZER_TABLET    0x03C5
    213 #define BTM_BLE_APPEARANCE_HID_CARD_READER         0x03C6
    214 #define BTM_BLE_APPEARANCE_HID_DIGITAL_PEN         0x03C7
    215 #define BTM_BLE_APPEARANCE_HID_BARCODE_SCANNER     0x03C8
    216 #define BTM_BLE_APPEARANCE_GENERIC_GLUCOSE         0x0400
    217 #define BTM_BLE_APPEARANCE_GENERIC_WALKING         0x0440
    218 #define BTM_BLE_APPEARANCE_WALKING_IN_SHOE         0x0441
    219 #define BTM_BLE_APPEARANCE_WALKING_ON_SHOE         0x0442
    220 #define BTM_BLE_APPEARANCE_WALKING_ON_HIP          0x0443
    221 #define BTM_BLE_APPEARANCE_GENERIC_CYCLING         0x0480
    222 #define BTM_BLE_APPEARANCE_CYCLING_COMPUTER        0x0481
    223 #define BTM_BLE_APPEARANCE_CYCLING_SPEED           0x0482
    224 #define BTM_BLE_APPEARANCE_CYCLING_CADENCE         0x0483
    225 #define BTM_BLE_APPEARANCE_CYCLING_POWER           0x0484
    226 #define BTM_BLE_APPEARANCE_CYCLING_SPEED_CADENCE   0x0485
    227 #define BTM_BLE_APPEARANCE_GENERIC_PULSE_OXIMETER  0x0C40
    228 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 0x0C41
    229 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_WRIST    0x0C42
    230 #define BTM_BLE_APPEARANCE_GENERIC_WEIGHT          0x0C80
    231 #define BTM_BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS  0x1440
    232 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION 0x1441
    233 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV     0x1442
    234 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD         0x1443
    235 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV 0x1444
    236 
    237 
    238 /* Structure returned with Rand/Encrypt complete callback */
    239 typedef struct
    240 {
    241     UINT8   status;
    242     UINT8   param_len;
    243     UINT16  opcode;
    244     UINT8   param_buf[BT_OCTET16_LEN];
    245 } tBTM_RAND_ENC;
    246 
    247 /* General callback function for notifying an application that a synchronous
    248 ** BTM function is complete. The pointer contains the address of any returned data.
    249 */
    250 typedef void (tBTM_RAND_ENC_CB) (tBTM_RAND_ENC *p1);
    251 
    252 #define BTM_BLE_FILTER_TARGET_SCANNER       0x01
    253 #define BTM_BLE_FILTER_TARGET_ADVR          0x00
    254 
    255 #define BTM_BLE_POLICY_BLACK_ALL            0x00    /* relevant to both */
    256 #define BTM_BLE_POLICY_ALLOW_SCAN           0x01    /* relevant to advertiser */
    257 #define BTM_BLE_POLICY_ALLOW_CONN           0x02    /* relevant to advertiser */
    258 #define BTM_BLE_POLICY_WHITE_ALL            0x03    /* relevant to both */
    259 
    260 /* ADV data flag bit definition used for BTM_BLE_AD_TYPE_FLAG */
    261 #define BTM_BLE_LIMIT_DISC_FLAG         (0x01 << 0)
    262 #define BTM_BLE_GEN_DISC_FLAG           (0x01 << 1)
    263 #define BTM_BLE_BREDR_NOT_SPT           (0x01 << 2)
    264 /* 4.1 spec adv flag for simultaneous BR/EDR+LE connection support */
    265 #define BTM_BLE_DMT_CONTROLLER_SPT      (0x01 << 3)
    266 #define BTM_BLE_DMT_HOST_SPT            (0x01 << 4)
    267 #define BTM_BLE_NON_LIMIT_DISC_FLAG     (0x00 )         /* lowest bit unset */
    268 #define BTM_BLE_ADV_FLAG_MASK           (BTM_BLE_LIMIT_DISC_FLAG | BTM_BLE_BREDR_NOT_SPT | BTM_BLE_GEN_DISC_FLAG)
    269 #define BTM_BLE_LIMIT_DISC_MASK         (BTM_BLE_LIMIT_DISC_FLAG )
    270 
    271 #define BTM_BLE_AD_BIT_DEV_NAME        (0x00000001 << 0)
    272 #define BTM_BLE_AD_BIT_FLAGS           (0x00000001 << 1)
    273 #define BTM_BLE_AD_BIT_MANU            (0x00000001 << 2)
    274 #define BTM_BLE_AD_BIT_TX_PWR          (0x00000001 << 3)
    275 #define BTM_BLE_AD_BIT_INT_RANGE       (0x00000001 << 5)
    276 #define BTM_BLE_AD_BIT_SERVICE         (0x00000001 << 6)
    277 #define BTM_BLE_AD_BIT_SERVICE_SOL     (0x00000001 << 7)
    278 #define BTM_BLE_AD_BIT_SERVICE_DATA    (0x00000001 << 8)
    279 #define BTM_BLE_AD_BIT_SIGN_DATA       (0x00000001 << 9)
    280 #define BTM_BLE_AD_BIT_SERVICE_128SOL  (0x00000001 << 10)
    281 #define BTM_BLE_AD_BIT_APPEARANCE      (0x00000001 << 11)
    282 #define BTM_BLE_AD_BIT_PUBLIC_ADDR      (0x00000001 << 12)
    283 #define BTM_BLE_AD_BIT_RANDOM_ADDR       (0x00000001 << 13)
    284 #define BTM_BLE_AD_BIT_SERVICE_32        (0x00000001 << 4)
    285 #define BTM_BLE_AD_BIT_SERVICE_32SOL     (0x00000001 << 14)
    286 #define BTM_BLE_AD_BIT_PROPRIETARY     (0x00000001 << 15)
    287 #define BTM_BLE_AD_BIT_SERVICE_128      (0x00000001 << 16)      /*128-bit Service UUIDs*/
    288 
    289 typedef  UINT32  tBTM_BLE_AD_MASK;
    290 
    291 #define BTM_BLE_AD_TYPE_FLAG            HCI_EIR_FLAGS_TYPE                  /* 0x01 */
    292 #define BTM_BLE_AD_TYPE_16SRV_PART      HCI_EIR_MORE_16BITS_UUID_TYPE       /* 0x02 */
    293 #define BTM_BLE_AD_TYPE_16SRV_CMPL      HCI_EIR_COMPLETE_16BITS_UUID_TYPE   /* 0x03 */
    294 #define BTM_BLE_AD_TYPE_32SRV_PART      HCI_EIR_MORE_32BITS_UUID_TYPE       /* 0x04 */
    295 #define BTM_BLE_AD_TYPE_32SRV_CMPL      HCI_EIR_COMPLETE_32BITS_UUID_TYPE   /* 0x05 */
    296 #define BTM_BLE_AD_TYPE_128SRV_PART     HCI_EIR_MORE_128BITS_UUID_TYPE       /* 0x06 */
    297 #define BTM_BLE_AD_TYPE_128SRV_CMPL     HCI_EIR_COMPLETE_128BITS_UUID_TYPE   /* 0x07 */
    298 #define BTM_BLE_AD_TYPE_NAME_SHORT      HCI_EIR_SHORTENED_LOCAL_NAME_TYPE       /* 0x08 */
    299 #define BTM_BLE_AD_TYPE_NAME_CMPL       HCI_EIR_COMPLETE_LOCAL_NAME_TYPE        /* 0x09 */
    300 #define BTM_BLE_AD_TYPE_TX_PWR          HCI_EIR_TX_POWER_LEVEL_TYPE             /* 0x0A */
    301 #define BTM_BLE_AD_TYPE_DEV_CLASS       0x0D
    302 #define BTM_BLE_AD_TYPE_SM_TK           0x10
    303 #define BTM_BLE_AD_TYPE_SM_OOB_FLAG     0x11
    304 #define BTM_BLE_AD_TYPE_INT_RANGE       0x12
    305 #define BTM_BLE_AD_TYPE_SOL_SRV_UUID    0x14
    306 #define BTM_BLE_AD_TYPE_128SOL_SRV_UUID 0x15
    307 #define BTM_BLE_AD_TYPE_SERVICE_DATA    0x16
    308 #define BTM_BLE_AD_TYPE_PUBLIC_TARGET   0x17
    309 #define BTM_BLE_AD_TYPE_RANDOM_TARGET   0x18
    310 #define BTM_BLE_AD_TYPE_APPEARANCE      0x19
    311 #define BTM_BLE_AD_TYPE_ADV_INT         0x1a
    312 #define BTM_BLE_AD_TYPE_32SOL_SRV_UUID  0x1b
    313 #define BTM_BLE_AD_TYPE_32SERVICE_DATA  0x1c
    314 #define BTM_BLE_AD_TYPE_128SERVICE_DATA 0x1d
    315 
    316 #define BTM_BLE_AD_TYPE_MANU            HCI_EIR_MANUFACTURER_SPECIFIC_TYPE      /* 0xff */
    317 typedef UINT8   tBTM_BLE_AD_TYPE;
    318 
    319 /* adv tx power level */
    320 #define BTM_BLE_ADV_TX_POWER_MIN        0           /* minimum tx power */
    321 #define BTM_BLE_ADV_TX_POWER_LOW        1           /* low tx power     */
    322 #define BTM_BLE_ADV_TX_POWER_MID        2           /* middle tx power  */
    323 #define BTM_BLE_ADV_TX_POWER_UPPER      3           /* upper tx power   */
    324 #define BTM_BLE_ADV_TX_POWER_MAX        4           /* maximum tx power */
    325 typedef UINT8 tBTM_BLE_ADV_TX_POWER;
    326 
    327 /* adv tx power in dBm */
    328 typedef struct
    329 {
    330     UINT8 adv_inst_max;         /* max adv instance supported in controller */
    331     UINT8 rpa_offloading;
    332     UINT16 tot_scan_results_strg;
    333     UINT8 max_irk_list_sz;
    334     UINT8 filter_support;
    335     UINT8 max_filter;
    336     UINT8 energy_support;
    337     BOOLEAN values_read;
    338 }tBTM_BLE_VSC_CB;
    339 
    340 /* slave preferred connection interval range */
    341 typedef struct
    342 {
    343     UINT16  low;
    344     UINT16  hi;
    345 
    346 }tBTM_BLE_INT_RANGE;
    347 
    348 /* Service tag supported in the device */
    349 typedef struct
    350 {
    351     UINT8       num_service;
    352     BOOLEAN     list_cmpl;
    353     UINT16      *p_uuid;
    354 }tBTM_BLE_SERVICE;
    355 
    356 /* 32 bits Service supported in the device */
    357 typedef struct
    358 {
    359     UINT8       num_service;
    360     BOOLEAN     list_cmpl;
    361     UINT32      *p_uuid;
    362 }tBTM_BLE_32SERVICE;
    363 
    364 /* 128 bits Service supported in the device */
    365 typedef struct
    366 {
    367     BOOLEAN     list_cmpl;
    368     UINT8       uuid128[MAX_UUID_SIZE];
    369 }tBTM_BLE_128SERVICE;
    370 
    371 typedef struct
    372 {
    373     UINT8       len;
    374     UINT8      *p_val;
    375 }tBTM_BLE_MANU;
    376 
    377 
    378 typedef struct
    379 {
    380     tBT_UUID    service_uuid;
    381     UINT8       len;
    382     UINT8      *p_val;
    383 }tBTM_BLE_SERVICE_DATA;
    384 
    385 typedef struct
    386 {
    387     UINT8       adv_type;
    388     UINT8       len;
    389     UINT8       *p_val;     /* number of len byte */
    390 }tBTM_BLE_PROP_ELEM;
    391 
    392 typedef struct
    393 {
    394     UINT8                   num_elem;
    395     tBTM_BLE_PROP_ELEM      *p_elem;
    396 }tBTM_BLE_PROPRIETARY;
    397 
    398 typedef struct
    399 {
    400     tBTM_BLE_INT_RANGE      int_range;      /* slave prefered conn interval range */
    401     tBTM_BLE_MANU           *p_manu;           /* manufactuer data */
    402     tBTM_BLE_SERVICE        *p_services;       /* services */
    403     tBTM_BLE_128SERVICE     *p_services_128b;  /* 128 bits service */
    404     tBTM_BLE_32SERVICE      *p_service_32b;     /* 32 bits Service UUID */
    405     tBTM_BLE_SERVICE        *p_sol_services;    /* 16 bits services Solicitation UUIDs */
    406     tBTM_BLE_32SERVICE      *p_sol_service_32b;    /* List of 32 bit Service Solicitation UUIDs */
    407     tBTM_BLE_128SERVICE     *p_sol_service_128b;    /* List of 128 bit Service Solicitation UUIDs */
    408     tBTM_BLE_PROPRIETARY    *p_proprietary;
    409     tBTM_BLE_SERVICE_DATA   *p_service_data;    /* service data */
    410     UINT16                  appearance;
    411     UINT8                   flag;
    412     UINT8                   tx_power;
    413 }tBTM_BLE_ADV_DATA;
    414 
    415 #ifndef BTM_BLE_MULTI_ADV_MAX
    416 #define BTM_BLE_MULTI_ADV_MAX   10 /* controller returned adv_inst_max should be less
    417                                       than this number */
    418 #endif
    419 
    420 #define BTM_BLE_MULTI_ADV_INVALID   0
    421 
    422 #define BTM_BLE_MULTI_ADV_ENB_EVT           1
    423 #define BTM_BLE_MULTI_ADV_DISABLE_EVT       2
    424 #define BTM_BLE_MULTI_ADV_PARAM_EVT         3
    425 #define BTM_BLE_MULTI_ADV_DATA_EVT          4
    426 typedef UINT8 tBTM_BLE_MULTI_ADV_EVT;
    427 
    428 #define BTM_BLE_MULTI_ADV_DEFAULT_STD 0
    429 
    430 typedef struct
    431 {
    432     UINT16          adv_int_min;
    433     UINT16          adv_int_max;
    434     UINT8           adv_type;
    435     tBTM_BLE_ADV_CHNL_MAP channel_map;
    436     tBTM_BLE_AFP    adv_filter_policy;
    437     tBTM_BLE_ADV_TX_POWER tx_power;
    438 }tBTM_BLE_ADV_PARAMS;
    439 
    440 typedef struct
    441 {
    442     UINT8   *p_sub_code; /* dynamic array to store sub code */
    443     UINT8   *p_inst_id;  /* dynamic array to store instance id */
    444     UINT8   pending_idx;
    445     UINT8   next_idx;
    446 }tBTM_BLE_MULTI_ADV_OPQ;
    447 
    448 typedef void (tBTM_BLE_MULTI_ADV_CBACK)(tBTM_BLE_MULTI_ADV_EVT evt, UINT8 inst_id,
    449                 void *p_ref, tBTM_STATUS status);
    450 
    451 typedef struct
    452 {
    453     UINT8                       inst_id;
    454     UINT8                       adv_evt;
    455     BD_ADDR                     rpa;
    456     TIMER_LIST_ENT              raddr_timer_ent;
    457     tBTM_BLE_MULTI_ADV_CBACK    *p_cback;
    458     void                        *p_ref;
    459     UINT8                       index;
    460 }tBTM_BLE_MULTI_ADV_INST;
    461 
    462 typedef struct
    463 {
    464     UINT8 inst_index_queue[BTM_BLE_MULTI_ADV_MAX];
    465     int front;
    466     int rear;
    467 }tBTM_BLE_MULTI_ADV_INST_IDX_Q;
    468 
    469 typedef struct
    470 {
    471     tBTM_BLE_MULTI_ADV_INST *p_adv_inst; /* dynamic array to store adv instance */
    472     tBTM_BLE_MULTI_ADV_OPQ  op_q;
    473 }tBTM_BLE_MULTI_ADV_CB;
    474 
    475 typedef void (tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value);
    476 typedef void (tBTM_BLE_SCAN_REP_CBACK)(tBTM_BLE_REF_VALUE ref_value, UINT8 report_format,
    477                                        UINT8 num_records, UINT16 total_len,
    478                                        UINT8* p_rep_data, UINT8 status);
    479 typedef void (tBTM_BLE_SCAN_SETUP_CBACK)(UINT8 evt, tBTM_BLE_REF_VALUE ref_value, UINT8 status);
    480 
    481 #ifndef BTM_BLE_BATCH_SCAN_MAX
    482 #define BTM_BLE_BATCH_SCAN_MAX   5
    483 #endif
    484 
    485 #ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE
    486 #define BTM_BLE_BATCH_REP_MAIN_Q_SIZE  2
    487 #endif
    488 
    489 typedef enum
    490 {
    491     BTM_BLE_SCAN_INVALID_STATE=0,
    492     BTM_BLE_SCAN_ENABLE_CALLED=1,
    493     BTM_BLE_SCAN_ENABLED_STATE=2,
    494     BTM_BLE_SCAN_DISABLE_CALLED=3,
    495     BTM_BLE_SCAN_DISABLED_STATE=4
    496 }tBTM_BLE_BATCH_SCAN_STATE;
    497 
    498 enum
    499 {
    500     BTM_BLE_DISCARD_OLD_ITEMS,
    501     BTM_BLE_DISCARD_LOWER_RSSI_ITEMS
    502 };
    503 typedef UINT8 tBTM_BLE_DISCARD_RULE;
    504 
    505 typedef struct
    506 {
    507     UINT8   sub_code[BTM_BLE_BATCH_SCAN_MAX];
    508     tBTM_BLE_BATCH_SCAN_STATE cur_state[BTM_BLE_BATCH_SCAN_MAX];
    509     tBTM_BLE_REF_VALUE        ref_value[BTM_BLE_BATCH_SCAN_MAX];
    510     UINT8   pending_idx;
    511     UINT8   next_idx;
    512 }tBTM_BLE_BATCH_SCAN_OPQ;
    513 
    514 typedef struct
    515 {
    516     UINT8   rep_mode[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
    517     tBTM_BLE_REF_VALUE  ref_value[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
    518     UINT8   num_records[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
    519     UINT16  data_len[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
    520     UINT8   *p_data[BTM_BLE_BATCH_REP_MAIN_Q_SIZE];
    521     UINT8   pending_idx;
    522     UINT8   next_idx;
    523 }tBTM_BLE_BATCH_SCAN_REP_Q;
    524 
    525 typedef struct
    526 {
    527     tBTM_BLE_BATCH_SCAN_STATE      cur_state;
    528     tBTM_BLE_BATCH_SCAN_MODE scan_mode;
    529     UINT32                  scan_interval;
    530     UINT32                  scan_window;
    531     tBLE_ADDR_TYPE          addr_type;
    532     tBTM_BLE_DISCARD_RULE   discard_rule;
    533     tBTM_BLE_BATCH_SCAN_OPQ  op_q;
    534     tBTM_BLE_BATCH_SCAN_REP_Q main_rep_q;
    535     tBTM_BLE_SCAN_SETUP_CBACK     *p_setup_cback;
    536     tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback;
    537     tBTM_BLE_SCAN_REP_CBACK       *p_scan_rep_cback;
    538     tBTM_BLE_REF_VALUE             ref_value;
    539 }tBTM_BLE_BATCH_SCAN_CB;
    540 
    541 /* filter selection bit index  */
    542 #define BTM_BLE_PF_ADDR_FILTER          0
    543 #define BTM_BLE_PF_SRVC_DATA            1
    544 #define BTM_BLE_PF_SRVC_UUID            2
    545 #define BTM_BLE_PF_SRVC_SOL_UUID        3
    546 #define BTM_BLE_PF_LOCAL_NAME           4
    547 #define BTM_BLE_PF_MANU_DATA            5
    548 #define BTM_BLE_PF_SRVC_DATA_PATTERN    6
    549 #define BTM_BLE_PF_TYPE_ALL             7  /* when passed in payload filter type all, only clear action is applicable */
    550 #define BTM_BLE_PF_TYPE_MAX             8
    551 
    552 /* max number of filter spot for different filter type */
    553 #ifndef BTM_BLE_MAX_UUID_FILTER
    554 #define BTM_BLE_MAX_UUID_FILTER     8
    555 #endif
    556 #ifndef BTM_BLE_MAX_ADDR_FILTER
    557 #define BTM_BLE_MAX_ADDR_FILTER     8
    558 #endif
    559 #ifndef BTM_BLE_PF_STR_COND_MAX
    560 #define BTM_BLE_PF_STR_COND_MAX     4   /* apply to manu data , or local name */
    561 #endif
    562 #ifndef BTM_BLE_PF_STR_LEN_MAX
    563 #define BTM_BLE_PF_STR_LEN_MAX      29  /* match for first 29 bytes */
    564 #endif
    565 
    566 typedef UINT8   tBTM_BLE_PF_COND_TYPE;
    567 
    568 #define BTM_BLE_PF_LOGIC_OR              0
    569 #define BTM_BLE_PF_LOGIC_AND             1
    570 typedef UINT8 tBTM_BLE_PF_LOGIC_TYPE;
    571 
    572 #define BTM_BLE_PF_ENABLE       1
    573 #define BTM_BLE_PF_CONFIG       2
    574 typedef UINT8 tBTM_BLE_PF_ACTION;
    575 
    576 typedef UINT8 tBTM_BLE_PF_FILT_INDEX;
    577 
    578 typedef UINT8 tBTM_BLE_PF_AVBL_SPACE;
    579 
    580 #define BTM_BLE_PF_BRDCAST_ADDR_FILT  1
    581 #define BTM_BLE_PF_SERV_DATA_CHG_FILT 2
    582 #define BTM_BLE_PF_SERV_UUID          4
    583 #define BTM_BLE_PF_SERV_SOLC_UUID     8
    584 #define BTM_BLE_PF_LOC_NAME_CHECK    16
    585 #define BTM_BLE_PF_MANUF_NAME_CHECK  32
    586 #define BTM_BLE_PF_SERV_DATA_CHECK   64
    587 typedef UINT16 tBTM_BLE_PF_FEAT_SEL;
    588 
    589 #define BTM_BLE_PF_LIST_LOGIC_OR   1
    590 #define BTM_BLE_PF_LIST_LOGIC_AND  2
    591 typedef UINT16 tBTM_BLE_PF_LIST_LOGIC_TYPE;
    592 
    593 #define BTM_BLE_PF_FILT_LOGIC_OR   0
    594 #define BTM_BLE_PF_FILT_LOGIC_AND  1
    595 typedef UINT16 tBTM_BLE_PF_FILT_LOGIC_TYPE;
    596 
    597 typedef UINT8  tBTM_BLE_PF_RSSI_THRESHOLD;
    598 typedef UINT8  tBTM_BLE_PF_DELIVERY_MODE;
    599 typedef UINT16 tBTM_BLE_PF_TIMEOUT;
    600 typedef UINT8  tBTM_BLE_PF_TIMEOUT_CNT;
    601 
    602 typedef struct
    603 {
    604     tBTM_BLE_PF_FEAT_SEL feat_seln;
    605     tBTM_BLE_PF_LIST_LOGIC_TYPE logic_type;
    606     tBTM_BLE_PF_FILT_LOGIC_TYPE filt_logic_type;
    607     tBTM_BLE_PF_RSSI_THRESHOLD  rssi_high_thres;
    608     tBTM_BLE_PF_RSSI_THRESHOLD  rssi_low_thres;
    609     tBTM_BLE_PF_DELIVERY_MODE dely_mode;
    610     tBTM_BLE_PF_TIMEOUT found_timeout;
    611     tBTM_BLE_PF_TIMEOUT lost_timeout;
    612     tBTM_BLE_PF_TIMEOUT_CNT found_timeout_cnt;
    613 }tBTM_BLE_PF_FILT_PARAMS;
    614 
    615 enum
    616 {
    617     BTM_BLE_SCAN_COND_ADD,
    618     BTM_BLE_SCAN_COND_DELETE,
    619     BTM_BLE_SCAN_COND_CLEAR = 2
    620 };
    621 typedef UINT8 tBTM_BLE_SCAN_COND_OP;
    622 
    623 enum
    624 {
    625     BTM_BLE_FILT_ENABLE_DISABLE = 1,
    626     BTM_BLE_FILT_CFG            = 2,
    627     BTM_BLE_FILT_ADV_PARAM      = 3
    628 };
    629 
    630 typedef UINT8 tBTM_BLE_FILT_CB_EVT;
    631 
    632 /* BLE adv payload filtering config complete callback */
    633 typedef void (tBTM_BLE_PF_CFG_CBACK)(tBTM_BLE_PF_ACTION action, tBTM_BLE_SCAN_COND_OP cfg_op,
    634                                       tBTM_BLE_PF_AVBL_SPACE avbl_space, tBTM_STATUS status,
    635                                       tBTM_BLE_REF_VALUE ref_value);
    636 
    637 typedef void (tBTM_BLE_PF_CMPL_CBACK) (tBTM_BLE_PF_CFG_CBACK);
    638 
    639 /* BLE adv payload filtering status setup complete callback */
    640 typedef void (tBTM_BLE_PF_STATUS_CBACK) (UINT8 action, tBTM_STATUS status,
    641                                         tBTM_BLE_REF_VALUE ref_value);
    642 
    643 /* BLE adv payload filtering param setup complete callback */
    644 typedef void (tBTM_BLE_PF_PARAM_CBACK) (tBTM_BLE_PF_ACTION action_type,
    645                                         tBTM_BLE_PF_AVBL_SPACE avbl_space,
    646                                         tBTM_BLE_REF_VALUE ref_value, tBTM_STATUS status);
    647 
    648 typedef union
    649 {
    650       UINT16              uuid16_mask;
    651       UINT32              uuid32_mask;
    652       UINT8               uuid128_mask[LEN_UUID_128];
    653 }tBTM_BLE_PF_COND_MASK;
    654 
    655 typedef struct
    656 {
    657     tBLE_BD_ADDR            *p_target_addr;     /* target address, if NULL, generic UUID filter */
    658     tBT_UUID                uuid;           /* UUID condition */
    659     tBTM_BLE_PF_LOGIC_TYPE  cond_logic;    /* AND/OR */
    660     tBTM_BLE_PF_COND_MASK   *p_uuid_mask;           /* UUID mask */
    661 }tBTM_BLE_PF_UUID_COND;
    662 
    663 typedef struct
    664 {
    665     UINT8                   data_len;       /* <= 20 bytes */
    666     UINT8                   *p_data;
    667 }tBTM_BLE_PF_LOCAL_NAME_COND;
    668 
    669 typedef struct
    670 {
    671     UINT16                  company_id;     /* company ID */
    672     UINT8                   data_len;       /* <= 20 bytes */
    673     UINT8                   *p_pattern;
    674     UINT16                  company_id_mask; /* UUID value mask */
    675     UINT8                   *p_pattern_mask; /* Manufactuer data matching mask, same length as data pattern,
    676                                                 set to all 0xff, match exact data */
    677 }tBTM_BLE_PF_MANU_COND;
    678 
    679 typedef struct
    680 {
    681     UINT16                  uuid;     /* service ID */
    682     UINT8                   data_len;       /* <= 20 bytes */
    683     UINT8                   *p_pattern;
    684     UINT8                   *p_pattern_mask; /* Service data matching mask, same length as data pattern,
    685                                                 set to all 0xff, match exact data */
    686 }tBTM_BLE_PF_SRVC_PATTERN_COND;
    687 
    688 
    689 typedef union
    690 {
    691     tBLE_BD_ADDR                            target_addr;
    692     tBTM_BLE_PF_LOCAL_NAME_COND             local_name; /* lcoal name filtering */
    693     tBTM_BLE_PF_MANU_COND                   manu_data;  /* manufactuer data filtering */
    694     tBTM_BLE_PF_UUID_COND                   srvc_uuid;  /* service UUID filtering */
    695     tBTM_BLE_PF_UUID_COND                   solicitate_uuid;   /* solicitated service UUID filtering */
    696     tBTM_BLE_PF_SRVC_PATTERN_COND           srvc_data;      /* service data pattern */
    697 }tBTM_BLE_PF_COND_PARAM;
    698 
    699 typedef struct
    700 {
    701     UINT8   action_ocf[BTM_BLE_PF_TYPE_MAX];
    702     tBTM_BLE_REF_VALUE  ref_value[BTM_BLE_PF_TYPE_MAX];
    703     tBTM_BLE_PF_PARAM_CBACK  *p_filt_param_cback[BTM_BLE_PF_TYPE_MAX];
    704     tBTM_BLE_PF_CFG_CBACK *p_scan_cfg_cback[BTM_BLE_PF_TYPE_MAX];
    705     UINT8   cb_evt[BTM_BLE_PF_TYPE_MAX];
    706     UINT8   pending_idx;
    707     UINT8   next_idx;
    708 }tBTM_BLE_ADV_FILTER_ADV_OPQ;
    709 
    710 #define BTM_BLE_MAX_FILTER_COUNTER  (BTM_BLE_MAX_ADDR_FILTER + 1) /* per device filter + one generic filter indexed by 0 */
    711 
    712 #ifndef BTM_CS_IRK_LIST_MAX
    713 #define BTM_CS_IRK_LIST_MAX 0x20
    714 #endif
    715 
    716 typedef struct
    717 {
    718     BOOLEAN    in_use;
    719     BD_ADDR    bd_addr;
    720     UINT8      pf_counter[BTM_BLE_PF_TYPE_MAX]; /* number of filter indexed by tBTM_BLE_PF_COND_TYPE */
    721 }tBTM_BLE_PF_COUNT;
    722 
    723 typedef struct
    724 {
    725     BOOLEAN             enable;
    726     UINT8               op_type;
    727     tBTM_BLE_PF_COUNT   *p_addr_filter_count; /* per BDA filter array */
    728     tBLE_BD_ADDR        cur_filter_target;
    729     tBTM_BLE_PF_STATUS_CBACK *p_filt_stat_cback;
    730     tBTM_BLE_ADV_FILTER_ADV_OPQ  op_q;
    731 }tBTM_BLE_ADV_FILTER_CB;
    732 
    733 /* Sub codes */
    734 #define BTM_BLE_META_PF_ENABLE          0x00
    735 #define BTM_BLE_META_PF_FEAT_SEL        0x01
    736 #define BTM_BLE_META_PF_ADDR            0x02
    737 #define BTM_BLE_META_PF_UUID            0x03
    738 #define BTM_BLE_META_PF_SOL_UUID        0x04
    739 #define BTM_BLE_META_PF_LOCAL_NAME      0x05
    740 #define BTM_BLE_META_PF_MANU_DATA       0x06
    741 #define BTM_BLE_META_PF_SRVC_DATA       0x07
    742 #define BTM_BLE_META_PF_ALL             0x08
    743 
    744 /* These are the fields returned in each device adv packet.  It
    745 ** is returned in the results callback if registered.
    746 */
    747 typedef struct
    748 {
    749     UINT8               conn_mode;
    750     tBTM_BLE_AD_MASK    ad_mask;        /* mask of the valid adv data field */
    751     UINT8               flag;
    752     UINT8               tx_power_level;
    753     UINT8               remote_name_len;
    754     UINT8               *p_remote_name;
    755     tBTM_BLE_SERVICE    service;
    756 } tBTM_BLE_INQ_DATA;
    757 
    758 enum
    759 {
    760     BTM_BLE_CONN_NONE,
    761     BTM_BLE_CONN_AUTO,
    762     BTM_BLE_CONN_SELECTIVE
    763 };
    764 typedef UINT8   tBTM_BLE_CONN_TYPE;
    765 
    766 typedef void (tBTM_BLE_TRACK_ADV_CBACK)(int filt_index, tBLE_ADDR_TYPE addr_type, BD_ADDR bda,
    767                                         int adv_state, tBTM_BLE_REF_VALUE ref_value);
    768 
    769 typedef UINT8 tBTM_BLE_TRACK_ADV_EVT;
    770 
    771 typedef struct
    772 {
    773     tBTM_BLE_REF_VALUE             ref_value;
    774     tBTM_BLE_TRACK_ADV_CBACK *p_track_cback;
    775 }tBTM_BLE_ADV_TRACK_CB;
    776 
    777 enum
    778 {
    779     BTM_BLE_TRACK_ADV_ADD,
    780     BTM_BLE_TRACK_ADV_REMOVE
    781 };
    782 
    783 typedef UINT8 tBTM_BLE_TRACK_ADV_ACTION;
    784 
    785 #define BTM_BLE_MULTI_ADV_INVALID   0
    786 
    787 #define BTM_BLE_BATCH_SCAN_ENABLE_EVT     1
    788 #define BTM_BLE_BATCH_SCAN_CFG_STRG_EVT   2
    789 #define BTM_BLE_BATCH_SCAN_READ_REPTS_EVT 3
    790 #define BTM_BLE_BATCH_SCAN_THR_EVT        4
    791 #define BTM_BLE_BATCH_SCAN_PARAM_EVT      5
    792 #define BTM_BLE_BATCH_SCAN_DISABLE_EVT    6
    793 
    794 typedef UINT8 tBTM_BLE_BATCH_SCAN_EVT;
    795 
    796 typedef UINT32 tBTM_BLE_TX_TIME_MS;
    797 typedef UINT32 tBTM_BLE_RX_TIME_MS;
    798 typedef UINT32 tBTM_BLE_IDLE_TIME_MS;
    799 typedef UINT32 tBTM_BLE_ENERGY_USED;
    800 
    801 typedef void (tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time, tBTM_BLE_RX_TIME_MS rx_time,
    802                                           tBTM_BLE_IDLE_TIME_MS idle_time,
    803                                           tBTM_BLE_ENERGY_USED  energy_used,
    804                                           tBTM_STATUS status);
    805 
    806 typedef struct
    807 {
    808     tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback;
    809 }tBTM_BLE_ENERGY_INFO_CB;
    810 
    811 typedef BOOLEAN (tBTM_BLE_SEL_CBACK)(BD_ADDR random_bda,     UINT8 *p_remote_name);
    812 typedef void (tBTM_BLE_CTRL_FEATURES_CBACK)(tBTM_STATUS status);
    813 
    814 /* callback function for SMP signing algorithm, signed data in little endian order with tlen bits long */
    815 typedef void (tBTM_BLE_SIGN_CBACK)(void *p_ref_data, UINT8 *p_signing_data);
    816 typedef void (tBTM_BLE_VERIFY_CBACK)(void *p_ref_data, BOOLEAN match);
    817 /* random address set complete callback */
    818 typedef void (tBTM_BLE_RANDOM_SET_CBACK) (BD_ADDR random_bda);
    819 
    820 typedef void (tBTM_BLE_SCAN_REQ_CBACK)(BD_ADDR remote_bda, tBLE_ADDR_TYPE addr_type, UINT8 adv_evt);
    821 
    822 tBTM_BLE_SCAN_SETUP_CBACK bta_ble_scan_setup_cb;
    823 
    824 /*****************************************************************************
    825 **  EXTERNAL FUNCTION DECLARATIONS
    826 *****************************************************************************/
    827 #ifdef __cplusplus
    828 extern "C" {
    829 #endif
    830 /*******************************************************************************
    831 **
    832 ** Function         BTM_SecAddBleDevice
    833 **
    834 ** Description      Add/modify device.  This function will be normally called
    835 **                  during host startup to restore all required information
    836 **                  for a LE device stored in the NVRAM.
    837 **
    838 ** Parameters:      bd_addr          - BD address of the peer
    839 **                  bd_name          - Name of the peer device.  NULL if unknown.
    840 **                  dev_type         - Remote device's device type.
    841 **                  addr_type        - LE device address type.
    842 **
    843 ** Returns          TRUE if added OK, else FALSE
    844 **
    845 *******************************************************************************/
    846 BTM_API extern BOOLEAN BTM_SecAddBleDevice (BD_ADDR bd_addr, BD_NAME bd_name,
    847                                            tBT_DEVICE_TYPE dev_type, tBLE_ADDR_TYPE addr_type);
    848 
    849 /*******************************************************************************
    850 **
    851 ** Function         BTM_SecAddBleKey
    852 **
    853 ** Description      Add/modify LE device information.  This function will be
    854 **                  normally called during host startup to restore all required
    855 **                  information stored in the NVRAM.
    856 **
    857 ** Parameters:      bd_addr          - BD address of the peer
    858 **                  p_le_key         - LE key values.
    859 **                  key_type         - LE SMP key type.
    860 *
    861 ** Returns          TRUE if added OK, else FALSE
    862 **
    863 *******************************************************************************/
    864 BTM_API extern BOOLEAN BTM_SecAddBleKey (BD_ADDR bd_addr, tBTM_LE_KEY_VALUE *p_le_key,
    865                                          tBTM_LE_KEY_TYPE key_type);
    866 
    867 /*******************************************************************************
    868 **
    869 ** Function         BTM_BleSetAdvParams
    870 **
    871 ** Description      This function is called to set advertising parameters.
    872 **
    873 ** Parameters:       None.
    874 **
    875 ** Returns          void
    876 **
    877 *******************************************************************************/
    878 BTM_API extern tBTM_STATUS BTM_BleSetAdvParams(UINT16 adv_int_min, UINT16 adv_int_max,
    879                                 tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP chnl_map);
    880 
    881 /*******************************************************************************
    882 **
    883 ** Function         BTM_BleWriteAdvData
    884 **
    885 ** Description      This function is called to write advertising data.
    886 **
    887 ** Parameters:       None.
    888 **
    889 ** Returns          void
    890 **
    891 *******************************************************************************/
    892 BTM_API extern tBTM_STATUS BTM_BleWriteAdvData(tBTM_BLE_AD_MASK  data_mask,
    893                                                tBTM_BLE_ADV_DATA *p_data);
    894 
    895 /*******************************************************************************
    896 **
    897 ** Function         BTM_BleSetAdvParams
    898 **
    899 ** Description      This function is called to set advertising parameters.
    900 **
    901 ** Parameters       adv_int_min: minimum advertising interval
    902 **                  adv_int_max: maximum advertising interval
    903 **                  p_dir_bda: connectable direct initiator's LE device address
    904 **                  chnl_map: advertising channel map.
    905 **
    906 ** Returns          void
    907 **
    908 *******************************************************************************/
    909 BTM_API extern void BTM_BleReadAdvParams (UINT16 *adv_int_min, UINT16 *adv_int_max,
    910                             tBLE_BD_ADDR *p_dir_bda, tBTM_BLE_ADV_CHNL_MAP *p_chnl_map);
    911 
    912 /*******************************************************************************
    913 **
    914 ** Function         BTM_BleObtainVendorCapabilities
    915 **
    916 ** Description      This function is called to obatin vendor capabilties
    917 **
    918 ** Parameters       p_cmn_vsc_cb - Returns the vednor capabilities
    919 **
    920 ** Returns          void
    921 **
    922 *******************************************************************************/
    923 extern void BTM_BleObtainVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb);
    924 
    925 /*******************************************************************************
    926 **
    927 ** Function         BTM_BleSetScanParams
    928 **
    929 ** Description      This function is called to set Scan parameters.
    930 **
    931 ** Parameters       adv_int_min: minimum advertising interval
    932 **                  adv_int_max: maximum advertising interval
    933 **                  scan_type: scan mode.
    934 **
    935 ** Returns          void
    936 **
    937 *******************************************************************************/
    938 BTM_API extern void BTM_BleSetScanParams(UINT16 scan_interval, UINT16 scan_window,
    939                                          tBTM_BLE_SCAN_MODE scan_type);
    940 /*******************************************************************************
    941 **
    942 ** Function         BTM_BleGetVendorCapabilities
    943 **
    944 ** Description      This function reads local LE features
    945 **
    946 ** Parameters       p_cmn_vsc_cb : Locala LE capability structure
    947 **
    948 ** Returns          void
    949 **
    950 *******************************************************************************/
    951 BTM_API extern void BTM_BleGetVendorCapabilities(tBTM_BLE_VSC_CB *p_cmn_vsc_cb);
    952 /*******************************************************************************
    953 **
    954 ** Function         BTM_BleSetStorageConfig
    955 **
    956 ** Description      This function is called to setup storage configuration and setup callbacks.
    957 **
    958 ** Parameters       UINT8 batch_scan_full_max -Batch scan full maximum
    959                     UINT8 batch_scan_trunc_max - Batch scan truncated value maximum
    960                     UINT8 batch_scan_notify_threshold - Threshold value
    961                     tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback - Setup callback
    962                     tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback -Threshold callback
    963                     void *p_ref - Reference value
    964 **
    965 ** Returns          tBTM_STATUS
    966 **
    967 *******************************************************************************/
    968 BTM_API extern tBTM_STATUS BTM_BleSetStorageConfig(UINT8 batch_scan_full_max,
    969                                         UINT8 batch_scan_trunc_max,
    970                                         UINT8 batch_scan_notify_threshold,
    971                                         tBTM_BLE_SCAN_SETUP_CBACK *p_setup_cback,
    972                                         tBTM_BLE_SCAN_THRESHOLD_CBACK *p_thres_cback,
    973                                         tBTM_BLE_SCAN_REP_CBACK* p_cback,
    974                                         tBTM_BLE_REF_VALUE ref_value);
    975 
    976 /*******************************************************************************
    977 **
    978 ** Function         BTM_BleEnableBatchScan
    979 **
    980 ** Description      This function is called to enable batch scan
    981 **
    982 ** Parameters       tBTM_BLE_BATCH_SCAN_MODE scan_mode - Batch scan mode
    983                     UINT32 scan_interval -Scan interval
    984                     UINT32 scan_window - Scan window value
    985                     tBLE_ADDR_TYPE addr_type - Address type
    986                     tBTM_BLE_DISCARD_RULE discard_rule - Data discard rules
    987 **
    988 ** Returns          tBTM_STATUS
    989 **
    990 *******************************************************************************/
    991 BTM_API extern tBTM_STATUS BTM_BleEnableBatchScan(tBTM_BLE_BATCH_SCAN_MODE scan_mode,
    992                                         UINT32 scan_interval, UINT32 scan_window,
    993                                         tBTM_BLE_DISCARD_RULE discard_rule,
    994                                         tBLE_ADDR_TYPE addr_type,
    995                                         tBTM_BLE_REF_VALUE ref_value);
    996 
    997 /*******************************************************************************
    998 **
    999 ** Function         BTM_BleDisableBatchScan
   1000 **
   1001 ** Description      This function is called to disable batch scanning
   1002 **
   1003 ** Parameters       void
   1004 **
   1005 ** Returns          void
   1006 **
   1007 *******************************************************************************/
   1008 BTM_API extern tBTM_STATUS BTM_BleDisableBatchScan(tBTM_BLE_REF_VALUE ref_value);
   1009 
   1010 /*******************************************************************************
   1011 **
   1012 ** Function         BTM_BleReadScanReports
   1013 **
   1014 ** Description      This function is called to read batch scan reports
   1015 **
   1016 ** Parameters       tBTM_BLE_SCAN_MODE scan_mode - Scan mode report to be read out
   1017                     tBTM_BLE_SCAN_REP_CBACK* p_cback - Reports callback
   1018 **
   1019 ** Returns          tBTM_STATUS
   1020 **
   1021 *******************************************************************************/
   1022 BTM_API extern tBTM_STATUS BTM_BleReadScanReports(tBTM_BLE_SCAN_MODE scan_mode,
   1023                                                   tBTM_BLE_REF_VALUE ref_value);
   1024 
   1025 /*******************************************************************************
   1026 **
   1027 ** Function         BTM_BleTrackAdvertiser
   1028 **
   1029 ** Description      This function is called to read batch scan reports
   1030 **
   1031 ** Parameters       p_track_cback - Tracking callback
   1032 **                  ref_value - Reference value
   1033 **
   1034 ** Returns          tBTM_STATUS
   1035 **
   1036 *******************************************************************************/
   1037 BTM_API extern tBTM_STATUS BTM_BleTrackAdvertiser(tBTM_BLE_TRACK_ADV_CBACK *p_track_cback,
   1038                                                   tBTM_BLE_REF_VALUE ref_value);
   1039 
   1040 /*******************************************************************************
   1041 **
   1042 ** Function         BTM_BleWriteScanRsp
   1043 **
   1044 ** Description      This function is called to write LE scan response.
   1045 **
   1046 ** Parameters:      p_scan_rsp: scan response.
   1047 **
   1048 ** Returns          status
   1049 **
   1050 *******************************************************************************/
   1051 BTM_API extern tBTM_STATUS BTM_BleWriteScanRsp(tBTM_BLE_AD_MASK data_mask,
   1052                                                tBTM_BLE_ADV_DATA *p_data);
   1053 
   1054 /*******************************************************************************
   1055 **
   1056 ** Function         BTM_BleObserve
   1057 **
   1058 ** Description      This procedure keep the device listening for advertising
   1059 **                  events from a broadcast device.
   1060 **
   1061 ** Parameters       start: start or stop observe.
   1062 **
   1063 ** Returns          void
   1064 **
   1065 *******************************************************************************/
   1066 BTM_API extern tBTM_STATUS BTM_BleObserve(BOOLEAN start, UINT8 duration,
   1067                            tBTM_INQ_RESULTS_CB *p_results_cb, tBTM_CMPL_CB *p_cmpl_cb);
   1068 
   1069 
   1070 /*******************************************************************************
   1071 **
   1072 ** Function         BTM_GetDeviceIDRoot
   1073 **
   1074 ** Description      This function is called to read the local device identity
   1075 **                  root.
   1076 **
   1077 ** Returns          void
   1078 **                  the local device ER is copied into er
   1079 **
   1080 *******************************************************************************/
   1081 BTM_API extern void BTM_GetDeviceIDRoot (BT_OCTET16 ir);
   1082 
   1083 /*******************************************************************************
   1084 **
   1085 ** Function         BTM_GetDeviceEncRoot
   1086 **
   1087 ** Description      This function is called to read the local device encryption
   1088 **                  root.
   1089 **
   1090 ** Returns          void
   1091 **                  the local device ER is copied into er
   1092 **
   1093 *******************************************************************************/
   1094 BTM_API extern void BTM_GetDeviceEncRoot (BT_OCTET16 er);
   1095 
   1096 /*******************************************************************************
   1097 **
   1098 ** Function         BTM_GetDeviceDHK
   1099 **
   1100 ** Description      This function is called to read the local device DHK.
   1101 **
   1102 ** Returns          void
   1103 **                  the local device DHK is copied into dhk
   1104 **
   1105 *******************************************************************************/
   1106 BTM_API extern void BTM_GetDeviceDHK (BT_OCTET16 dhk);
   1107 
   1108 /*******************************************************************************
   1109 **
   1110 ** Function         BTM_SecurityGrant
   1111 **
   1112 ** Description      This function is called to grant security process.
   1113 **
   1114 ** Parameters       bd_addr - peer device bd address.
   1115 **                  res     - result of the operation BTM_SUCCESS if success.
   1116 **                            Otherwise, BTM_REPEATED_ATTEMPTS is too many attempts.
   1117 **
   1118 ** Returns          None
   1119 **
   1120 *******************************************************************************/
   1121 BTM_API extern void BTM_SecurityGrant(BD_ADDR bd_addr, UINT8 res);
   1122 
   1123 /*******************************************************************************
   1124 **
   1125 ** Function         BTM_BlePasskeyReply
   1126 **
   1127 ** Description      This function is called after Security Manager submitted
   1128 **                  passkey request to the application.
   1129 **
   1130 ** Parameters:      bd_addr      - Address of the device for which passkey was requested
   1131 **                  res          - result of the operation SMP_SUCCESS if success
   1132 **                  passkey - numeric value in the range of
   1133 **                  BTM_MIN_PASSKEY_VAL(0) - BTM_MAX_PASSKEY_VAL(999999(0xF423F)).
   1134 **
   1135 *******************************************************************************/
   1136 BTM_API extern void BTM_BlePasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey);
   1137 
   1138 /*******************************************************************************
   1139 **
   1140 ** Function         BTM_LeOobDataReply
   1141 **
   1142 ** Description      This function is called to provide the OOB data for
   1143 **                  SMP in response to BTM_LE_OOB_REQ_EVT
   1144 **
   1145 ** Parameters:      bd_addr     - Address of the peer device
   1146 **                  res         - result of the operation SMP_SUCCESS if success
   1147 **                  p_data      - simple pairing Randomizer  C.
   1148 **
   1149 *******************************************************************************/
   1150 BTM_API extern void BTM_BleOobDataReply(BD_ADDR bd_addr, UINT8 res, UINT8 len, UINT8 *p_data);
   1151 
   1152 
   1153 /*******************************************************************************
   1154 **
   1155 ** Function         BTM_BleDataSignature
   1156 **
   1157 ** Description      This function is called to sign the data using AES128 CMAC
   1158 **                  algorith.
   1159 **
   1160 ** Parameter        bd_addr: target device the data to be signed for.
   1161 **                  p_text: singing data
   1162 **                  len: length of the signing data
   1163 **                  signature: output parameter where data signature is going to
   1164 **                             be stored.
   1165 **
   1166 ** Returns          TRUE if signing sucessul, otherwise FALSE.
   1167 **
   1168 *******************************************************************************/
   1169 BTM_API extern BOOLEAN BTM_BleDataSignature (BD_ADDR bd_addr, UINT8 *p_text, UINT16 len,
   1170                                              BLE_SIGNATURE signature);
   1171 
   1172 /*******************************************************************************
   1173 **
   1174 ** Function         BTM_BleVerifySignature
   1175 **
   1176 ** Description      This function is called to verify the data signature
   1177 **
   1178 ** Parameter        bd_addr: target device the data to be signed for.
   1179 **                  p_orig:  original data before signature.
   1180 **                  len: length of the signing data
   1181 **                  counter: counter used when doing data signing
   1182 **                  p_comp: signature to be compared against.
   1183 
   1184 ** Returns          TRUE if signature verified correctly; otherwise FALSE.
   1185 **
   1186 *******************************************************************************/
   1187 BTM_API extern BOOLEAN BTM_BleVerifySignature (BD_ADDR bd_addr, UINT8 *p_orig,
   1188                                             UINT16 len, UINT32 counter,
   1189                                             UINT8 *p_comp);
   1190 
   1191 /*******************************************************************************
   1192 **
   1193 ** Function         BTM_ReadConnectionAddr
   1194 **
   1195 ** Description      This function is called to set the local device random address
   1196 **                  .
   1197 **
   1198 ** Returns          void
   1199 **
   1200 *******************************************************************************/
   1201 BTM_API extern void BTM_ReadConnectionAddr (BD_ADDR remote_bda, BD_ADDR local_conn_addr,
   1202                                             tBLE_ADDR_TYPE *p_addr_type);
   1203 
   1204 
   1205 
   1206 /*******************************************************************************
   1207 **
   1208 ** Function         BTM_ReadRemoteConnectionAddr
   1209 **
   1210 ** Description      This function is read the remote device address currently used
   1211 **                  .
   1212 **
   1213 ** Returns          void
   1214 **
   1215 *******************************************************************************/
   1216 BTM_API extern BOOLEAN BTM_ReadRemoteConnectionAddr(BD_ADDR pseudo_addr,
   1217                                                     BD_ADDR conn_addr,
   1218                                                     tBLE_ADDR_TYPE *p_addr_type);
   1219 
   1220 /*******************************************************************************
   1221 **
   1222 ** Function         BTM_BleLoadLocalKeys
   1223 **
   1224 ** Description      Local local identity key, encryption root or sign counter.
   1225 **
   1226 ** Parameters:      key_type: type of key, can be BTM_BLE_KEY_TYPE_ID, BTM_BLE_KEY_TYPE_ER
   1227 **                            or BTM_BLE_KEY_TYPE_COUNTER.
   1228 **                  p_key: pointer to the key.
   1229 *
   1230 ** Returns          non2.
   1231 **
   1232 *******************************************************************************/
   1233 BTM_API extern void BTM_BleLoadLocalKeys(UINT8 key_type, tBTM_BLE_LOCAL_KEYS *p_key);
   1234 
   1235 
   1236 /*******************************************************************************
   1237 **
   1238 ** Function         BTM_BleSetBgConnType
   1239 **
   1240 ** Description      This function is called to set BLE background connection
   1241 **                  procedure type. It can be auto connection, or selective connection.
   1242 **
   1243 ** Parameters       conn_type: it can be auto connection, or selective connection.
   1244 **                  p_select_cback: callback function when selective connection procedure
   1245 **                              is being used.
   1246 **
   1247 ** Returns          void
   1248 **
   1249 *******************************************************************************/
   1250 BTM_API extern BOOLEAN BTM_BleSetBgConnType(tBTM_BLE_CONN_TYPE   conn_type,
   1251                                     tBTM_BLE_SEL_CBACK   *p_select_cback);
   1252 
   1253 /*******************************************************************************
   1254 **
   1255 ** Function         BTM_BleUpdateBgConnDev
   1256 **
   1257 ** Description      This function is called to add or remove a device into/from
   1258 **                  background connection procedure. The background connection
   1259 *                   procedure is decided by the background connection type, it can be
   1260 *                   auto connection, or selective connection.
   1261 **
   1262 ** Parameters       add_remove: TRUE to add; FALSE to remove.
   1263 **                  remote_bda: device address to add/remove.
   1264 **
   1265 ** Returns          void
   1266 **
   1267 *******************************************************************************/
   1268 BTM_API extern BOOLEAN BTM_BleUpdateBgConnDev(BOOLEAN add_remove, BD_ADDR   remote_bda);
   1269 
   1270 /*******************************************************************************
   1271 **
   1272 ** Function         BTM_BleClearBgConnDev
   1273 **
   1274 ** Description      This function is called to clear the whitelist,
   1275 **                  end any pending whitelist connections,
   1276 *                   and reset the local bg device list.
   1277 **
   1278 ** Parameters       void
   1279 **
   1280 ** Returns          void
   1281 **
   1282 *******************************************************************************/
   1283 BTM_API extern void BTM_BleClearBgConnDev(void);
   1284 
   1285 /********************************************************
   1286 **
   1287 ** Function         BTM_BleSetPrefConnParams
   1288 **
   1289 ** Description      Set a peripheral's preferred connection parameters. When
   1290 **                  any of the value does not want to be updated while others
   1291 **                  do, use BTM_BLE_CONN_PARAM_UNDEF for the ones want to
   1292 **                  leave untouched.
   1293 **
   1294 ** Parameters:      bd_addr          - BD address of the peripheral
   1295 **                  min_conn_int     - minimum preferred connection interval
   1296 **                  max_conn_int     - maximum preferred connection interval
   1297 **                  slave_latency    - preferred slave latency
   1298 **                  supervision_tout - preferred supervision timeout
   1299 **
   1300 ** Returns          void
   1301 **
   1302 *******************************************************************************/
   1303 BTM_API extern  void BTM_BleSetPrefConnParams (BD_ADDR bd_addr,
   1304                                                UINT16 min_conn_int,  UINT16 max_conn_int,
   1305                                                UINT16 slave_latency, UINT16 supervision_tout);
   1306 
   1307 /******************************************************************************
   1308 **
   1309 ** Function         BTM_BleSetConnScanParams
   1310 **
   1311 ** Description      Set scan parameters used in BLE connection request
   1312 **
   1313 ** Parameters:      scan_interval    - scan interval
   1314 **                  scan_window      - scan window
   1315 **
   1316 ** Returns          void
   1317 **
   1318 *******************************************************************************/
   1319 BTM_API extern  void BTM_BleSetConnScanParams (UINT16 scan_interval, UINT16 scan_window);
   1320 
   1321 /******************************************************************************
   1322 **
   1323 ** Function         BTM_BleReadControllerFeatures
   1324 **
   1325 ** Description      Reads BLE specific controller features
   1326 **
   1327 ** Parameters:      tBTM_BLE_CTRL_FEATURES_CBACK : Callback to notify when features are read
   1328 **
   1329 ** Returns          void
   1330 **
   1331 *******************************************************************************/
   1332 BTM_API extern void BTM_BleReadControllerFeatures(tBTM_BLE_CTRL_FEATURES_CBACK  *p_vsc_cback);
   1333 
   1334 /*******************************************************************************
   1335 **
   1336 ** Function         BTM_CheckAdvData
   1337 **
   1338 ** Description      This function is called to get ADV data for a specific type.
   1339 **
   1340 ** Parameters       p_adv - pointer of ADV data
   1341 **                  type   - finding ADV data type
   1342 **                  p_length - return the length of ADV data not including type
   1343 **
   1344 ** Returns          pointer of ADV data
   1345 **
   1346 *******************************************************************************/
   1347 BTM_API extern  UINT8 *BTM_CheckAdvData( UINT8 *p_adv, UINT8 type, UINT8 *p_length);
   1348 
   1349 /*******************************************************************************
   1350 **
   1351 ** Function         BTM_ReadDevInfo
   1352 **
   1353 ** Description      This function is called to read the device/address type
   1354 **                  of BD address.
   1355 **
   1356 ** Parameter        remote_bda: remote device address
   1357 **                  p_dev_type: output parameter to read the device type.
   1358 **                  p_addr_type: output parameter to read the address type.
   1359 **
   1360 *******************************************************************************/
   1361 BTM_API extern void BTM_ReadDevInfo (BD_ADDR remote_bda, tBT_DEVICE_TYPE *p_dev_type,
   1362                                      tBLE_ADDR_TYPE *p_addr_type);
   1363 
   1364 /*******************************************************************************
   1365 **
   1366 ** Function         BTM_BleBroadcast
   1367 **
   1368 ** Description      This function is to start or stop broadcasting.
   1369 **
   1370 ** Parameters       start: start or stop broadcasting.
   1371 **
   1372 ** Returns          status.
   1373 **
   1374 *******************************************************************************/
   1375 BTM_API extern tBTM_STATUS BTM_BleBroadcast(BOOLEAN start);
   1376 
   1377 /*******************************************************************************
   1378 **
   1379 ** Function         BTM_RegisterScanReqEvt
   1380 **
   1381 ** Description      This function is called to register a scan request callback
   1382 **                  on the advertiser.
   1383 **
   1384 ** Parameters       p_scan_req_cback: scan request callback.  If NULL, remove the
   1385 **                                    registration.
   1386 **
   1387 ** Returns          void
   1388 **
   1389 *******************************************************************************/
   1390 BTM_API extern void BTM_RegisterScanReqEvt(tBTM_BLE_SCAN_REQ_CBACK *p_scan_req_cback);
   1391 
   1392 /*******************************************************************************
   1393 **
   1394 ** Function         BTM_BleConfigPrivacy
   1395 **
   1396 ** Description      This function is called to enable or disable the privacy in
   1397 **                  the local device.
   1398 **
   1399 ** Parameters       enable: TRUE to enable it; FALSE to disable it.
   1400 **
   1401 ** Returns          void
   1402 **
   1403 *******************************************************************************/
   1404 BTM_API extern void BTM_BleConfigPrivacy(BOOLEAN enable);
   1405 
   1406 /*******************************************************************************
   1407 **
   1408 ** Function         BTM_BleLocalPrivacyEnabled
   1409 **
   1410 ** Description        Checks if local device supports private address
   1411 **
   1412 ** Returns          Return TRUE if local privacy is enabled else FALSE
   1413 **
   1414 *******************************************************************************/
   1415 BTM_API extern BOOLEAN BTM_BleLocalPrivacyEnabled();
   1416 
   1417 /*******************************************************************************
   1418 **
   1419 ** Function          BTM_BleMaxMultiAdvInstanceCount
   1420 **
   1421 ** Description        Returns max number of multi adv instances  supported by controller
   1422 **
   1423 ** Returns          Max multi adv instance count
   1424 **
   1425 *******************************************************************************/
   1426 BTM_API extern UINT8  BTM_BleMaxMultiAdvInstanceCount();
   1427 
   1428 /*******************************************************************************
   1429 **
   1430 ** Function         BTM_BleSetConnMode
   1431 **
   1432 ** Description      This function is called to set BLE connectable mode for a
   1433 **                  peripheral device.
   1434 **
   1435 ** Parameters       directed: is directed connectable mode, or non-directed.
   1436 **                  p_dir_bda: connectable direct initiator's LE device address
   1437 **
   1438 ** Returns          void
   1439 **
   1440 *******************************************************************************/
   1441 BTM_API extern tBTM_STATUS BTM_BleSetConnMode(BOOLEAN directed);
   1442 
   1443 /*******************************************************************************
   1444 **
   1445 ** Function         BTM_BleTurnOnPrivacyOnRemote
   1446 **
   1447 ** Description      This function is called to enable or disable the privacy on the
   1448 **                  remote device.
   1449 **
   1450 ** Parameters       bd_addr: remote device address.
   1451 **                  privacy_on: TRUE to enable it; FALSE to disable it.
   1452 **
   1453 ** Returns          void
   1454 **
   1455 *******************************************************************************/
   1456 BTM_API extern void BTM_BleTurnOnPrivacyOnRemote(BD_ADDR bd_addr,
   1457                                                  BOOLEAN privacy_on);
   1458 
   1459 
   1460 /*******************************************************************************
   1461 **
   1462 ** Function         BTM_BleUpdateAdvWhitelist
   1463 **
   1464 ** Description      Add or remove device from advertising white list
   1465 **
   1466 ** Returns          void
   1467 **
   1468 *******************************************************************************/
   1469 BTM_API extern BOOLEAN BTM_BleUpdateAdvWhitelist(BOOLEAN add_remove, BD_ADDR emote_bda);
   1470 
   1471 /*******************************************************************************
   1472 **
   1473 ** Function         BTM_BleUpdateAdvFilterPolicy
   1474 **
   1475 ** Description      This function update the filter policy of advertiser.
   1476 **
   1477 ** Parameter        adv_policy: advertising filter policy
   1478 **
   1479 ** Return           void
   1480 *******************************************************************************/
   1481 BTM_API extern void BTM_BleUpdateAdvFilterPolicy(tBTM_BLE_AFP adv_policy);
   1482 
   1483 /*******************************************************************************
   1484 **
   1485 ** Function         BTM_BleReceiverTest
   1486 **
   1487 ** Description      This function is called to start the LE Receiver test
   1488 **
   1489 ** Parameter       rx_freq - Frequency Range
   1490 **               p_cmd_cmpl_cback - Command Complete callback
   1491 **
   1492 *******************************************************************************/
   1493 void BTM_BleReceiverTest(UINT8 rx_freq, tBTM_CMPL_CB *p_cmd_cmpl_cback);
   1494 
   1495 
   1496 /*******************************************************************************
   1497 **
   1498 ** Function         BTM_BleTransmitterTest
   1499 **
   1500 ** Description      This function is called to start the LE Transmitter test
   1501 **
   1502 ** Parameter       tx_freq - Frequency Range
   1503 **                       test_data_len - Length in bytes of payload data in each packet
   1504 **                       packet_payload - Pattern to use in the payload
   1505 **                       p_cmd_cmpl_cback - Command Complete callback
   1506 **
   1507 *******************************************************************************/
   1508 void BTM_BleTransmitterTest(UINT8 tx_freq, UINT8 test_data_len,
   1509                                  UINT8 packet_payload, tBTM_CMPL_CB *p_cmd_cmpl_cback);
   1510 
   1511 /*******************************************************************************
   1512 **
   1513 ** Function         BTM_BleTestEnd
   1514 **
   1515 ** Description      This function is called to stop the in-progress TX or RX test
   1516 **
   1517 ** Parameter       p_cmd_cmpl_cback - Command complete callback
   1518 **
   1519 *******************************************************************************/
   1520 void BTM_BleTestEnd(tBTM_CMPL_CB *p_cmd_cmpl_cback);
   1521 
   1522 /*******************************************************************************
   1523 **
   1524 ** Function         BTM_UseLeLink
   1525 **
   1526 ** Description      This function is to select the underneath physical link to use.
   1527 **
   1528 ** Returns          TRUE to use LE, FALSE use BR/EDR.
   1529 **
   1530 *******************************************************************************/
   1531 BTM_API extern BOOLEAN BTM_UseLeLink (BD_ADDR bd_addr);
   1532 
   1533 /*******************************************************************************
   1534 **
   1535 ** Function         BTM_BleStackEnable
   1536 **
   1537 ** Description      Enable/Disable BLE functionality on stack regarless controller
   1538 **                  capability.
   1539 **
   1540 ** Parameters:      enable: TRUE to enable, FALSE to disable.
   1541 **
   1542 ** Returns          TRUE if added OK, else FALSE
   1543 **
   1544 *******************************************************************************/
   1545 BTM_API extern tBTM_STATUS BTM_BleStackEnable (BOOLEAN enable);
   1546 
   1547 /*******************************************************************************/
   1548 /*                          Multi ADV API                                      */
   1549 /*******************************************************************************
   1550 **
   1551 ** Function         BTM_BleEnableAdvInstance
   1552 **
   1553 ** Description      This function enable a Multi-ADV instance with the specified
   1554 **                  adv parameters
   1555 **
   1556 ** Parameters       p_params: pointer to the adv parameter structure, set as default
   1557 **                            adv parameter when the instance is enabled.
   1558 **                  p_cback: callback function for the adv instance.
   1559 **                  p_ref:  reference data attach to the adv instance to be enabled.
   1560 **
   1561 ** Returns          status
   1562 **
   1563 *******************************************************************************/
   1564 BTM_API extern tBTM_STATUS BTM_BleEnableAdvInstance (tBTM_BLE_ADV_PARAMS *p_params,
   1565                                       tBTM_BLE_MULTI_ADV_CBACK *p_cback,
   1566                                       void *p_ref);
   1567 
   1568 /*******************************************************************************
   1569 **
   1570 ** Function         BTM_BleUpdateAdvInstParam
   1571 **
   1572 ** Description      This function update a Multi-ADV instance with the specififed
   1573 **                  adv parameters.
   1574 **
   1575 ** Parameters       inst_id: adv instance ID
   1576 **                  p_params: pointer to the adv parameter structure.
   1577 **
   1578 ** Returns          status
   1579 **
   1580 *******************************************************************************/
   1581 BTM_API extern tBTM_STATUS BTM_BleUpdateAdvInstParam (UINT8 inst_id, tBTM_BLE_ADV_PARAMS *p_params);
   1582 
   1583 /*******************************************************************************
   1584 **
   1585 ** Function         BTM_BleCfgAdvInstData
   1586 **
   1587 ** Description      This function configure a Multi-ADV instance with the specified
   1588 **                  adv data or scan response data.
   1589 **
   1590 ** Parameters       inst_id: adv instance ID
   1591 **                  is_scan_rsp: is this scacn response, if no set as adv data.
   1592 **                  data_mask: adv data mask.
   1593 **                  p_data: pointer to the adv data structure.
   1594 **
   1595 ** Returns          status
   1596 **
   1597 *******************************************************************************/
   1598 BTM_API extern tBTM_STATUS BTM_BleCfgAdvInstData (UINT8 inst_id, BOOLEAN is_scan_rsp,
   1599                                     tBTM_BLE_AD_MASK data_mask,
   1600                                     tBTM_BLE_ADV_DATA *p_data);
   1601 
   1602 /*******************************************************************************
   1603 **
   1604 ** Function         BTM_BleDisableAdvInstance
   1605 **
   1606 ** Description      This function disable a Multi-ADV instance.
   1607 **
   1608 ** Parameters       inst_id: adv instance ID
   1609 **
   1610 ** Returns          status
   1611 **
   1612 *******************************************************************************/
   1613 BTM_API extern tBTM_STATUS BTM_BleDisableAdvInstance (UINT8 inst_id);
   1614 
   1615 /*******************************************************************************
   1616 **
   1617 ** Function         BTM_BleAdvFilterParamSetup
   1618 **
   1619 ** Description      This function is called to setup the adv data payload filter
   1620 **                  condition.
   1621 **
   1622 ** Parameters       p_target: enabble the filter condition on a target device; if NULL
   1623 **                            enable the generic scan condition.
   1624 **                  enable: enable or disable the filter condition
   1625 **
   1626 ** Returns          void
   1627 **
   1628 *******************************************************************************/
   1629 BTM_API extern tBTM_STATUS BTM_BleAdvFilterParamSetup(int action,
   1630                                 tBTM_BLE_PF_FILT_INDEX filt_index,
   1631                                 tBTM_BLE_PF_FILT_PARAMS *p_filt_params,
   1632                                 tBLE_BD_ADDR *p_target, tBTM_BLE_PF_PARAM_CBACK *p_cmpl_cback,
   1633                                 tBTM_BLE_REF_VALUE ref_value);
   1634 
   1635 /*******************************************************************************
   1636 **
   1637 ** Function         BTM_BleCfgFilterCondition
   1638 **
   1639 ** Description      This function is called to configure the adv data payload filter
   1640 **                  condition.
   1641 **
   1642 ** Parameters       action: to read/write/clear
   1643 **                  cond_type: filter condition type.
   1644 **                  p_cond: filter condition paramter
   1645 **
   1646 ** Returns          tBTM_STATUS
   1647 **
   1648 *******************************************************************************/
   1649 BTM_API extern tBTM_STATUS BTM_BleCfgFilterCondition(tBTM_BLE_SCAN_COND_OP action,
   1650                                       tBTM_BLE_PF_COND_TYPE cond_type,
   1651                                       tBTM_BLE_PF_FILT_INDEX filt_index,
   1652                                       tBTM_BLE_PF_COND_PARAM *p_cond,
   1653                                       tBTM_BLE_PF_CFG_CBACK *p_cmpl_cback,
   1654                                       tBTM_BLE_REF_VALUE ref_value);
   1655 
   1656 /*******************************************************************************
   1657 **
   1658 ** Function         BTM_BleEnableDisableFilterFeature
   1659 **
   1660 ** Description      This function is called to enable or disable the APCF feature
   1661 **
   1662 ** Parameters       enable - TRUE - enables the APCF, FALSE - disables the APCF
   1663 **                       ref_value - Ref value
   1664 **
   1665 ** Returns          tBTM_STATUS
   1666 **
   1667 *******************************************************************************/
   1668 BTM_API extern tBTM_STATUS BTM_BleEnableDisableFilterFeature(UINT8 enable,
   1669                                                tBTM_BLE_PF_STATUS_CBACK *p_stat_cback,
   1670                                                tBTM_BLE_REF_VALUE ref_value);
   1671 
   1672 /*******************************************************************************
   1673 **
   1674 ** Function         BTM_BleGetEnergyInfo
   1675 **
   1676 ** Description      This function obtains the energy info
   1677 **
   1678 ** Parameters       p_ener_cback - Callback pointer
   1679 **
   1680 ** Returns          status
   1681 **
   1682 *******************************************************************************/
   1683 BTM_API extern tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback);
   1684 
   1685 #ifdef __cplusplus
   1686 }
   1687 #endif
   1688 
   1689 #endif
   1690