1 /****************************************************************************** 2 * 3 * Copyright 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 #ifndef BTM_BLE_API_TYPES_H 20 #define BTM_BLE_API_TYPES_H 21 22 #include <base/functional/callback_forward.h> 23 #include <bluetooth/log.h> 24 #include <hardware/bt_common_types.h> 25 26 #include <cstdint> 27 #include <vector> 28 29 #include "stack/include/bt_octets.h" 30 #include "stack/include/btm_status.h" 31 #include "stack/include/hci_error_code.h" 32 #include "stack/include/ble_appearance.h" 33 #include "types/ble_address_with_type.h" 34 #include "types/raw_address.h" 35 36 #define CHNL_MAP_LEN 5 37 typedef uint8_t tBTM_BLE_CHNL_MAP[CHNL_MAP_LEN]; 38 39 enum : uint8_t { 40 /* 0x00-0x04 only used for set advertising parameter command */ 41 BTM_BLE_CONNECT_EVT = 0x00, 42 /* Connectable directed advertising */ 43 BTM_BLE_CONNECT_DIR_EVT = 0x01, 44 /* Scannable undirected advertising */ 45 BTM_BLE_DISCOVER_EVT = 0x02, 46 /* Non connectable undirected advertising */ 47 BTM_BLE_NON_CONNECT_EVT = 0x03, 48 /* Connectable low duty cycle directed advertising */ 49 BTM_BLE_CONNECT_LO_DUTY_DIR_EVT = 0x04, 50 }; 51 52 /* 0x00 - 0x04 can be received on adv event type */ 53 typedef enum : uint8_t { 54 BTM_BLE_ADV_IND_EVT = 0x00, 55 BTM_BLE_ADV_DIRECT_IND_EVT = 0x01, 56 BTM_BLE_ADV_SCAN_IND_EVT = 0x02, 57 BTM_BLE_ADV_NONCONN_IND_EVT = 0x03, 58 BTM_BLE_SCAN_RSP_EVT = 0x04, 59 } tBTM_BLE_EVT; 60 61 typedef uint32_t tBTM_BLE_REF_VALUE; 62 63 #define BTM_BLE_SCAN_MODE_PASS 0 64 #define BTM_BLE_SCAN_MODE_ACTI 1 65 #define BTM_BLE_SCAN_MODE_NONE 0xff 66 typedef uint8_t tBLE_SCAN_MODE; 67 68 #define BTM_BLE_BATCH_SCAN_MODE_DISABLE 0 69 #define BTM_BLE_BATCH_SCAN_MODE_PASS 1 70 #define BTM_BLE_BATCH_SCAN_MODE_ACTI 2 71 #define BTM_BLE_BATCH_SCAN_MODE_PASS_ACTI 3 72 73 typedef uint8_t tBTM_BLE_BATCH_SCAN_MODE; 74 75 /* advertising channel map */ 76 #define BTM_BLE_ADV_CHNL_37 (0x01 << 0) 77 #define BTM_BLE_ADV_CHNL_38 (0x01 << 1) 78 #define BTM_BLE_ADV_CHNL_39 (0x01 << 2) 79 typedef uint8_t tBTM_BLE_ADV_CHNL_MAP; 80 81 /*d efault advertising channel map */ 82 #ifndef BTM_BLE_DEFAULT_ADV_CHNL_MAP 83 #define BTM_BLE_DEFAULT_ADV_CHNL_MAP \ 84 (BTM_BLE_ADV_CHNL_37 | BTM_BLE_ADV_CHNL_38 | BTM_BLE_ADV_CHNL_39) 85 #endif 86 87 /* advertising filter policy */ 88 #define AP_SCAN_CONN_ALL 0x00 /* default */ 89 #define AP_SCAN_WL_CONN_ALL 0x01 90 #define AP_SCAN_ALL_CONN_WL 0x02 91 #define AP_SCAN_CONN_WL 0x03 92 #define AP_SCAN_CONN_POLICY_MAX 0x04 93 typedef uint8_t tBTM_BLE_AFP; 94 95 /* default advertising filter policy */ 96 #ifndef BTM_BLE_DEFAULT_AFP 97 #define BTM_BLE_DEFAULT_AFP AP_SCAN_CONN_ALL 98 #endif 99 100 /* scanning filter policy */ 101 /* 0: accept adv packet from all, directed adv pkt not directed */ 102 /* to local device is ignored */ 103 #define SP_ADV_ALL 0x00 104 105 typedef uint8_t tBTM_BLE_SFP; 106 107 #ifndef BTM_BLE_DEFAULT_SFP 108 #define BTM_BLE_DEFAULT_SFP SP_ADV_ALL 109 #endif 110 111 /* Full scan boundary values */ 112 #define BTM_BLE_ADV_SCAN_FULL_MIN 0x00 113 #define BTM_BLE_ADV_SCAN_FULL_MAX 0x64 114 115 /* Partial scan boundary values */ 116 #define BTM_BLE_ADV_SCAN_TRUNC_MAX BTM_BLE_ADV_SCAN_FULL_MAX 117 118 /* Threshold values */ 119 #define BTM_BLE_ADV_SCAN_THR_MAX BTM_BLE_ADV_SCAN_FULL_MAX 120 121 /* connection parameter boundary values */ 122 #define BTM_BLE_SCAN_INT_MIN 0x0004 123 #define BTM_BLE_SCAN_INT_MAX 0x4000 124 #define BTM_BLE_SCAN_WIN_MIN 0x0004 125 #define BTM_BLE_SCAN_WIN_MAX 0x4000 126 #define BTM_BLE_EXT_SCAN_INT_MAX 0x00FFFFFF 127 #define BTM_BLE_EXT_SCAN_WIN_MAX 0xFFFF 128 #define BTM_BLE_CONN_INT_MIN 0x0006 129 #define BTM_BLE_CONN_INT_MAX 0x0C80 130 #define BTM_BLE_CONN_LATENCY_MAX 500 131 #define BTM_BLE_CONN_SUP_TOUT_MIN 0x000A 132 #define BTM_BLE_CONN_SUP_TOUT_MAX 0x0C80 133 /* use this value when a specific value not to be overwritten */ 134 #define BTM_BLE_CONN_PARAM_UNDEF 0xffff 135 #define BTM_BLE_SCAN_PARAM_UNDEF 0xffff 136 137 /* default connection parameters if not configured, use GAP recommended value 138 * for auto/selective connection */ 139 /* default scan interval */ 140 #ifndef BTM_BLE_SCAN_FAST_INT 141 #define BTM_BLE_SCAN_FAST_INT 96 /* 30 ~ 60 ms (use 60) = 96 *0.625 */ 142 #endif 143 /* default scan window for background connection, applicable for auto connection 144 * or selective connection */ 145 #ifndef BTM_BLE_SCAN_FAST_WIN 146 #define BTM_BLE_SCAN_FAST_WIN 48 /* 30 ms = 48 *0.625 */ 147 #endif 148 149 /* default scan paramter used in reduced power cycle (background scanning) */ 150 #ifndef BTM_BLE_SCAN_SLOW_INT_1 151 #define BTM_BLE_SCAN_SLOW_INT_1 2048 /* 1.28 s = 2048 *0.625 */ 152 #endif 153 #ifndef BTM_BLE_SCAN_SLOW_WIN_1 154 #define BTM_BLE_SCAN_SLOW_WIN_1 48 /* 30 ms = 48 *0.625 */ 155 #endif 156 157 /* default scan paramter used in reduced power cycle (background scanning) */ 158 #ifndef BTM_BLE_SCAN_SLOW_INT_2 159 #define BTM_BLE_SCAN_SLOW_INT_2 4096 /* 2.56 s = 4096 *0.625 */ 160 #endif 161 #ifndef BTM_BLE_SCAN_SLOW_WIN_2 162 #define BTM_BLE_SCAN_SLOW_WIN_2 36 /* 22.5 ms = 36 *0.625 */ 163 #endif 164 165 /* default connection interval min */ 166 #ifndef BTM_BLE_CONN_INT_MIN_DEF 167 /* recommended min: 30ms = 24 * 1.25 */ 168 #ifndef BTM_BLE_CONN_INT_MIN_DEF 169 #define BTM_BLE_CONN_INT_MIN_DEF 24 170 #endif 171 #endif 172 173 /* default connectino interval max */ 174 #ifndef BTM_BLE_CONN_INT_MAX_DEF 175 /* recommended max: 50 ms = 56 * 1.25 */ 176 #ifndef BTM_BLE_CONN_INT_MAX_DEF 177 #define BTM_BLE_CONN_INT_MAX_DEF 40 178 #endif 179 #endif 180 181 /* default peripheral latency */ 182 #ifndef BTM_BLE_CONN_PERIPHERAL_LATENCY_DEF 183 #define BTM_BLE_CONN_PERIPHERAL_LATENCY_DEF 0 /* 0 */ 184 #endif 185 186 /* default supervision timeout */ 187 #ifndef BTM_BLE_CONN_TIMEOUT_DEF 188 #define BTM_BLE_CONN_TIMEOUT_DEF 500 189 #endif 190 191 /* minimum supervision timeout */ 192 #ifndef BTM_BLE_CONN_TIMEOUT_MIN_DEF 193 #define BTM_BLE_CONN_TIMEOUT_MIN_DEF 100 194 #endif 195 196 /* minimum acceptable connection interval */ 197 #ifndef BTM_BLE_CONN_INT_MIN_LIMIT 198 #define BTM_BLE_CONN_INT_MIN_LIMIT 0x0009 199 #endif 200 201 /* minimum acceptable connection interval when there is bonded Hearing Aid 202 * device */ 203 #ifndef BTM_BLE_CONN_INT_MIN_HEARINGAID 204 #define BTM_BLE_CONN_INT_MIN_HEARINGAID 0x0010 205 #endif 206 207 #define BTM_CMAC_TLEN_SIZE 8 /* 64 bits */ 208 #define BTM_BLE_AUTH_SIGN_LEN 12 /* BLE data signature length 8 Bytes + 4 bytes counter*/ 209 typedef uint8_t BLE_SIGNATURE[BTM_BLE_AUTH_SIGN_LEN]; /* Device address */ 210 211 #ifndef BTM_BLE_HOST_SUPPORT 212 #define BTM_BLE_HOST_SUPPORT 0x01 213 #endif 214 215 #ifndef BTM_BLE_SIMULTANEOUS_HOST 216 #define BTM_BLE_SIMULTANEOUS_HOST 0x01 217 #endif 218 219 /* Appearance Values Reported with BTM_BLE_AD_TYPE_APPEARANCE */ 220 #define BTM_BLE_APPEARANCE_UNKNOWN BLE_APPEARANCE_UNKNOWN 221 #define BTM_BLE_APPEARANCE_GENERIC_PHONE BLE_APPEARANCE_GENERIC_PHONE 222 #define BTM_BLE_APPEARANCE_GENERIC_COMPUTER BLE_APPEARANCE_GENERIC_COMPUTER 223 #define BTM_BLE_APPEARANCE_GENERIC_WATCH BLE_APPEARANCE_GENERIC_WATCH 224 #define BTM_BLE_APPEARANCE_SPORTS_WATCH BLE_APPEARANCE_SPORTS_WATCH 225 #define BTM_BLE_APPEARANCE_GENERIC_CLOCK BLE_APPEARANCE_GENERIC_CLOCK 226 #define BTM_BLE_APPEARANCE_GENERIC_DISPLAY BLE_APPEARANCE_GENERIC_DISPLAY 227 #define BTM_BLE_APPEARANCE_GENERIC_REMOTE BLE_APPEARANCE_GENERIC_REMOTE 228 #define BTM_BLE_APPEARANCE_GENERIC_EYEGLASSES BLE_APPEARANCE_GENERIC_EYEGLASSES 229 #define BTM_BLE_APPEARANCE_GENERIC_TAG BLE_APPEARANCE_GENERIC_TAG 230 #define BTM_BLE_APPEARANCE_GENERIC_KEYRING BLE_APPEARANCE_GENERIC_KEYRING 231 #define BTM_BLE_APPEARANCE_GENERIC_MEDIA_PLAYER BLE_APPEARANCE_GENERIC_MEDIA_PLAYER 232 #define BTM_BLE_APPEARANCE_GENERIC_BARCODE_SCANNER BLE_APPEARANCE_GENERIC_BARCODE_SCANNER 233 #define BTM_BLE_APPEARANCE_GENERIC_THERMOMETER BLE_APPEARANCE_GENERIC_THERMOMETER 234 #define BTM_BLE_APPEARANCE_THERMOMETER_EAR BLE_APPEARANCE_THERMOMETER_EAR 235 #define BTM_BLE_APPEARANCE_GENERIC_HEART_RATE BLE_APPEARANCE_GENERIC_HEART_RATE 236 #define BTM_BLE_APPEARANCE_HEART_RATE_BELT BLE_APPEARANCE_HEART_RATE_BELT 237 #define BTM_BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE 238 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_ARM BLE_APPEARANCE_BLOOD_PRESSURE_ARM 239 #define BTM_BLE_APPEARANCE_BLOOD_PRESSURE_WRIST BLE_APPEARANCE_BLOOD_PRESSURE_WRIST 240 #define BTM_BLE_APPEARANCE_GENERIC_HID BLE_APPEARANCE_GENERIC_HID 241 #define BTM_BLE_APPEARANCE_HID_KEYBOARD BLE_APPEARANCE_HID_KEYBOARD 242 #define BTM_BLE_APPEARANCE_HID_MOUSE BLE_APPEARANCE_HID_MOUSE 243 #define BTM_BLE_APPEARANCE_HID_JOYSTICK BLE_APPEARANCE_HID_JOYSTICK 244 #define BTM_BLE_APPEARANCE_HID_GAMEPAD BLE_APPEARANCE_HID_GAMEPAD 245 #define BTM_BLE_APPEARANCE_HID_DIGITIZER_TABLET BLE_APPEARANCE_HID_DIGITIZER_TABLET 246 #define BTM_BLE_APPEARANCE_HID_CARD_READER BLE_APPEARANCE_HID_CARD_READER 247 #define BTM_BLE_APPEARANCE_HID_DIGITAL_PEN BLE_APPEARANCE_HID_DIGITAL_PEN 248 #define BTM_BLE_APPEARANCE_HID_BARCODE_SCANNER BLE_APPEARANCE_HID_BARCODE_SCANNER 249 #define BTM_BLE_APPEARANCE_GENERIC_GLUCOSE BLE_APPEARANCE_GENERIC_GLUCOSE 250 #define BTM_BLE_APPEARANCE_GENERIC_WALKING BLE_APPEARANCE_GENERIC_WALKING 251 #define BTM_BLE_APPEARANCE_WALKING_IN_SHOE BLE_APPEARANCE_WALKING_IN_SHOE 252 #define BTM_BLE_APPEARANCE_WALKING_ON_SHOE BLE_APPEARANCE_WALKING_ON_SHOE 253 #define BTM_BLE_APPEARANCE_WALKING_ON_HIP BLE_APPEARANCE_WALKING_ON_HIP 254 #define BTM_BLE_APPEARANCE_GENERIC_CYCLING BLE_APPEARANCE_GENERIC_CYCLING 255 #define BTM_BLE_APPEARANCE_CYCLING_COMPUTER BLE_APPEARANCE_CYCLING_COMPUTER 256 #define BTM_BLE_APPEARANCE_CYCLING_SPEED BLE_APPEARANCE_CYCLING_SPEED 257 #define BTM_BLE_APPEARANCE_CYCLING_CADENCE BLE_APPEARANCE_CYCLING_CADENCE 258 #define BTM_BLE_APPEARANCE_CYCLING_POWER BLE_APPEARANCE_CYCLING_POWER 259 #define BTM_BLE_APPEARANCE_CYCLING_SPEED_CADENCE BLE_APPEARANCE_CYCLING_SPEED_CADENCE 260 #define BTM_BLE_APPEARANCE_GENERIC_WEARABLE_AUDIO_DEVICE \ 261 BLE_APPEARANCE_GENERIC_WEARABLE_AUDIO_DEVICE 262 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_EARBUD \ 263 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_EARBUD 264 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADSET \ 265 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADSET 266 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADPHONES \ 267 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_HEADPHONES 268 #define BTM_BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_NECK_BAND \ 269 BLE_APPEARANCE_WEARABLE_AUDIO_DEVICE_NECK_BAND 270 #define BTM_BLE_APPEARANCE_GENERIC_PULSE_OXIMETER BLE_APPEARANCE_GENERIC_PULSE_OXIMETER 271 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP 272 #define BTM_BLE_APPEARANCE_PULSE_OXIMETER_WRIST BLE_APPEARANCE_PULSE_OXIMETER_WRIST 273 #define BTM_BLE_APPEARANCE_GENERIC_WEIGHT BLE_APPEARANCE_GENERIC_WEIGHT 274 #define BTM_BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS \ 275 BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS 276 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION \ 277 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION 278 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV \ 279 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_AND_NAV 280 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD \ 281 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD 282 #define BTM_BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV \ 283 BLE_APPEARANCE_OUTDOOR_SPORTS_LOCATION_POD_AND_NAV 284 285 /* Structure returned with Rand/Encrypt complete callback */ 286 typedef struct { 287 uint8_t status; 288 uint8_t param_len; 289 uint16_t opcode; 290 uint8_t param_buf[OCTET16_LEN]; 291 } tBTM_RAND_ENC; 292 293 /* General callback function for notifying an application that a synchronous 294 * BTM function is complete. The pointer contains the address of any returned 295 * data. 296 */ 297 typedef void(tBTM_RAND_ENC_CB)(tBTM_RAND_ENC* p1); 298 299 /* ADV data flag bit definition used for BTM_BLE_AD_TYPE_FLAG */ 300 #define BTM_BLE_LIMIT_DISC_FLAG (0x01 << 0) 301 #define BTM_BLE_GEN_DISC_FLAG (0x01 << 1) 302 #define BTM_BLE_BREDR_NOT_SPT (0x01 << 2) 303 /* 4.1 spec adv flag for simultaneous BR/EDR+LE connection support */ 304 #define BTM_BLE_DMT_CONTROLLER_SPT (0x01 << 3) 305 #define BTM_BLE_DMT_HOST_SPT (0x01 << 4) 306 307 // TODO(jpawlowski): this should be removed with code that depend on it. 308 #define BTM_BLE_AD_BIT_FLAGS (0x00000001 << 1) 309 310 #define BTM_BLE_AD_TYPE_FLAG HCI_EIR_FLAGS_TYPE /* 0x01 */ 311 #define BTM_BLE_AD_TYPE_16SRV_CMPL \ 312 HCI_EIR_COMPLETE_16BITS_UUID_TYPE /* 0x03 \ 313 */ 314 #define BTM_BLE_AD_TYPE_SERVICE_DATA_TYPE HCI_EIR_SERVICE_DATA_TYPE /* 0x16 */ 315 #define BTM_BLE_AD_TYPE_APPEARANCE 0x19 316 #define BTM_BLE_AD_TYPE_RSI HCI_EIR_RSI_TYPE /* 0x2E */ 317 #define BTM_BLE_AD_TYPE_BROADCAST_NAME 0x30 318 319 /* Min/max Preferred number of payload octets that the local Controller 320 should include in a single Link Layer Data Channel PDU. */ 321 #define BTM_BLE_DATA_SIZE_MAX 0x00fb 322 #define BTM_BLE_DATA_SIZE_MIN 0x001b 323 324 /* Preferred maximum number of microseconds that the local Controller 325 should use to transmit a single Link Layer Data Channel PDU. */ 326 #define BTM_BLE_DATA_TX_TIME_MAX_LEGACY 0x0848 327 #define BTM_BLE_DATA_TX_TIME_MAX 0x4290 328 329 /* adv tx power in dBm */ 330 typedef struct { 331 uint8_t adv_inst_max; /* max adv instance supported in controller */ 332 uint8_t rpa_offloading; 333 uint16_t tot_scan_results_strg; 334 uint8_t max_irk_list_sz; 335 uint8_t filter_support; 336 uint8_t max_filter; 337 uint8_t energy_support; 338 bool values_read; 339 uint16_t version_supported; 340 uint16_t total_trackable_advertisers; 341 uint8_t extended_scan_support; 342 uint8_t debug_logging_supported; 343 uint8_t le_address_generation_offloading_support; 344 uint32_t a2dp_source_offload_capability_mask; 345 uint8_t quality_report_support; 346 uint32_t dynamic_audio_buffer_support; 347 uint16_t adv_filter_extended_features_mask; 348 uint8_t a2dp_offload_v2_support; 349 } tBTM_BLE_VSC_CB; 350 351 /* Stored the default/maximum/minimum buffer time for dynamic audio buffer. 352 * For A2DP offload usage, the unit is millisecond. 353 * For A2DP legacy usage, the unit is buffer queue size*/ 354 typedef struct { 355 uint16_t default_buffer_time; 356 uint16_t maximum_buffer_time; 357 uint16_t minimum_buffer_time; 358 } tBTM_BT_DYNAMIC_AUDIO_BUFFER_CB; 359 360 typedef void(tBTM_BLE_ADV_DATA_CMPL_CBACK)(tBTM_STATUS status); 361 362 #ifndef BTM_BLE_MULTI_ADV_MAX 363 #define BTM_BLE_MULTI_ADV_MAX \ 364 16 /* controller returned adv_inst_max should be less \ 365 than this number */ 366 #endif 367 368 typedef uint16_t tCONN_ID; 369 typedef uint8_t tGATT_IF; 370 typedef uint8_t tTCB_IDX; 371 372 inline constexpr tGATT_IF GATT_IF_INVALID = static_cast<tGATT_IF>(0); 373 // 0xF1 ~ 0xFF are reserved for special use cases. 374 inline constexpr tGATT_IF GATT_IF_MAX = static_cast<tGATT_IF>(0xf8); 375 /* connection manager doesn't generate its own IDs. Instead, all GATT clients 376 * use their gatt_if to identify against connection manager. When stack tries to 377 * create l2cap connection, it will use this fixed ID. */ 378 inline constexpr tGATT_IF CONN_MGR_ID_L2CAP = static_cast<tGATT_IF>(0xf9); 379 380 typedef enum : uint8_t { 381 BTM_BLE_DIRECT_CONNECTION = 0x00, 382 BTM_BLE_BKG_CONNECT_ALLOW_LIST = 0x01, 383 BTM_BLE_BKG_CONNECT_TARGETED_ANNOUNCEMENTS = 0x02, 384 } tBTM_BLE_CONN_TYPE; 385 386 typedef void(tBTM_BLE_SCAN_THRESHOLD_CBACK)(tBTM_BLE_REF_VALUE ref_value); 387 using tBTM_BLE_SCAN_REP_CBACK = 388 base::Callback<void(tBTM_STATUS /* status */, uint8_t /* report_format */, 389 uint8_t /* num_reports */, std::vector<uint8_t>)>; 390 391 #ifndef BTM_BLE_BATCH_SCAN_MAX 392 #define BTM_BLE_BATCH_SCAN_MAX 5 393 #endif 394 395 #ifndef BTM_BLE_BATCH_REP_MAIN_Q_SIZE 396 #define BTM_BLE_BATCH_REP_MAIN_Q_SIZE 2 397 #endif 398 399 typedef enum { 400 BTM_BLE_SCAN_INVALID_STATE = 0, 401 BTM_BLE_SCAN_ENABLE_CALLED = 1, 402 BTM_BLE_SCAN_ENABLED_STATE = 2, 403 BTM_BLE_SCAN_DISABLE_CALLED = 3, 404 BTM_BLE_SCAN_DISABLED_STATE = 4 405 } tBTM_BLE_BATCH_SCAN_STATE; 406 407 enum { BTM_BLE_DISCARD_OLD_ITEMS, BTM_BLE_DISCARD_LOWER_RSSI_ITEMS }; 408 typedef uint8_t tBTM_BLE_DISCARD_RULE; 409 410 typedef struct { 411 tBTM_BLE_BATCH_SCAN_STATE cur_state; 412 tBTM_BLE_BATCH_SCAN_MODE scan_mode; 413 uint32_t scan_interval; 414 uint32_t scan_window; 415 tBLE_ADDR_TYPE addr_type; 416 tBTM_BLE_DISCARD_RULE discard_rule; 417 tBTM_BLE_SCAN_THRESHOLD_CBACK* p_thres_cback; 418 tBTM_BLE_REF_VALUE ref_value; 419 } tBTM_BLE_BATCH_SCAN_CB; 420 421 /* filter selection bit index */ 422 #define BTM_BLE_PF_ADDR_FILTER 0 423 #define BTM_BLE_PF_SRVC_DATA 1 424 #define BTM_BLE_PF_SRVC_UUID 2 425 #define BTM_BLE_PF_SRVC_SOL_UUID 3 426 #define BTM_BLE_PF_LOCAL_NAME 4 427 #define BTM_BLE_PF_MANU_DATA 5 428 #define BTM_BLE_PF_SRVC_DATA_PATTERN 6 429 /* when passed in payload filter type all, only clear action is applicable */ 430 #define BTM_BLE_PF_TYPE_ALL 7 431 #define BTM_BLE_PF_TYPE_MAX 8 432 433 /* max number of filter spot for different filter type */ 434 #ifndef BTM_BLE_MAX_UUID_FILTER 435 #define BTM_BLE_MAX_UUID_FILTER 8 436 #endif 437 #ifndef BTM_BLE_MAX_ADDR_FILTER 438 #define BTM_BLE_MAX_ADDR_FILTER 8 439 #endif 440 #ifndef BTM_BLE_PF_STR_COND_MAX 441 #define BTM_BLE_PF_STR_COND_MAX 4 /* apply to manu data , or local name */ 442 #endif 443 #ifndef BTM_BLE_PF_STR_LEN_MAX 444 #define BTM_BLE_PF_STR_LEN_MAX 29 /* match for first 29 bytes */ 445 #endif 446 447 typedef uint8_t tBTM_BLE_PF_COND_TYPE; 448 449 #define BTM_BLE_PF_LOGIC_OR 0 450 #define BTM_BLE_PF_LOGIC_AND 1 451 typedef uint8_t tBTM_BLE_PF_LOGIC_TYPE; 452 453 #define BTM_BLE_PF_ENABLE 1 454 #define BTM_BLE_PF_CONFIG 2 455 456 typedef uint8_t tBTM_BLE_PF_FILT_INDEX; 457 458 enum { BTM_BLE_SCAN_COND_ADD, BTM_BLE_SCAN_COND_DELETE, BTM_BLE_SCAN_COND_CLEAR = 2 }; 459 typedef uint8_t tBTM_BLE_SCAN_COND_OP; 460 461 /* BLE adv payload filtering config complete callback */ 462 using tBTM_BLE_PF_CFG_CBACK = 463 base::Callback<void(uint8_t /* avbl_space */, tBTM_BLE_SCAN_COND_OP /* action */, 464 tBTM_STATUS /* btm_status */)>; 465 466 /* BLE adv payload filtering status setup complete callback */ 467 using tBTM_BLE_PF_STATUS_CBACK = 468 base::Callback<void(tBTM_BLE_SCAN_COND_OP /*action*/, tBTM_STATUS /* btm_status */)>; 469 470 /* BLE adv payload filtering param setup complete callback */ 471 using tBTM_BLE_PF_PARAM_CB = 472 base::Callback<void(uint8_t /* avbl_space */, tBTM_BLE_SCAN_COND_OP /* action */, 473 tBTM_STATUS /* btm_status */)>; 474 475 #ifndef BTM_CS_IRK_LIST_MAX 476 #define BTM_CS_IRK_LIST_MAX 0x20 477 #endif 478 479 typedef struct { 480 bool in_use; 481 RawAddress bd_addr; 482 uint8_t pf_counter[BTM_BLE_PF_TYPE_MAX]; /* number of filter indexed by 483 tBTM_BLE_PF_COND_TYPE */ 484 } tBTM_BLE_PF_COUNT; 485 486 typedef struct { 487 bool enable; 488 uint8_t op_type; 489 tBTM_BLE_PF_COUNT* p_addr_filter_count; /* per BDA filter array */ 490 tBLE_BD_ADDR cur_filter_target; 491 } tBTM_BLE_ADV_FILTER_CB; 492 493 /* Sub codes */ 494 #define BTM_BLE_META_PF_ENABLE 0x00 495 #define BTM_BLE_META_PF_FEAT_SEL 0x01 496 #define BTM_BLE_META_PF_ADDR 0x02 497 #define BTM_BLE_META_PF_UUID 0x03 498 #define BTM_BLE_META_PF_SOL_UUID 0x04 499 #define BTM_BLE_META_PF_LOCAL_NAME 0x05 500 #define BTM_BLE_META_PF_MANU_DATA 0x06 501 #define BTM_BLE_META_PF_SRVC_DATA 0x07 502 #define BTM_BLE_META_PF_ALL 0x08 503 504 #define ADV_INFO_PRESENT 0x00 505 #define NO_ADV_INFO_PRESENT 0x01 506 507 typedef btgatt_track_adv_info_t tBTM_BLE_TRACK_ADV_DATA; 508 509 typedef void(tBTM_BLE_TRACK_ADV_CBACK)(tBTM_BLE_TRACK_ADV_DATA* p_track_adv_data); 510 511 typedef struct { 512 tBTM_BLE_REF_VALUE ref_value; 513 tBTM_BLE_TRACK_ADV_CBACK* p_track_cback; 514 } tBTM_BLE_ADV_TRACK_CB; 515 516 typedef uint32_t tBTM_BLE_TX_TIME_MS; 517 typedef uint32_t tBTM_BLE_RX_TIME_MS; 518 typedef uint32_t tBTM_BLE_IDLE_TIME_MS; 519 typedef uint32_t tBTM_BLE_ENERGY_USED; 520 521 typedef void(tBTM_BLE_ENERGY_INFO_CBACK)(tBTM_BLE_TX_TIME_MS tx_time, tBTM_BLE_RX_TIME_MS rx_time, 522 tBTM_BLE_IDLE_TIME_MS idle_time, 523 tBTM_BLE_ENERGY_USED energy_used, tHCI_STATUS status); 524 525 typedef struct { 526 tBTM_BLE_ENERGY_INFO_CBACK* p_ener_cback; 527 } tBTM_BLE_ENERGY_INFO_CB; 528 529 typedef void(tBTM_BLE_CTRL_FEATURES_CBACK)(tHCI_STATUS status); 530 531 namespace std { 532 template <> 533 struct formatter<tBTM_BLE_CONN_TYPE> : enum_formatter<tBTM_BLE_CONN_TYPE> {}; 534 } // namespace std 535 536 #endif // BTM_BLE_API_TYPES_H 537