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_API_TYPES_H
20 #define BTM_API_TYPES_H
21
22 #include <base/strings/stringprintf.h>
23 #include <cstdint>
24 #include <string>
25
26 #include "device/include/esco_parameters.h"
27 #include "internal_include/bt_target.h"
28 #include "stack/include/btm_status.h"
29 #include "stack/include/hcidefs.h"
30 #include "stack/include/smp_api_types.h"
31 #include "types/ble_address_with_type.h"
32 #include "types/bt_transport.h"
33
34 /* Device name of peer (may be truncated to save space in BTM database) */
35 typedef uint8_t tBTM_BD_NAME[BTM_MAX_REM_BD_NAME_LEN + 1];
36
37 /* Structure returned with Vendor Specific Command complete callback */
38 typedef struct {
39 uint16_t opcode;
40 uint16_t param_len;
41 uint8_t* p_param_buf;
42 } tBTM_VSC_CMPL;
43
44 /**************************************************
45 * Device Control and General Callback Functions
46 **************************************************/
47 /* Callback function for when a vendor specific event occurs. The length and
48 * array of returned parameter bytes are included. This asynchronous event
49 * is enabled/disabled by calling BTM_RegisterForVSEvents().
50 */
51 typedef void(tBTM_VS_EVT_CB)(uint8_t len, uint8_t* p);
52
53 /* General callback function for notifying an application that a synchronous
54 * BTM function is complete. The pointer contains the address of any returned
55 * data.
56 */
57 typedef void(tBTM_CMPL_CB)(void* p1);
58
59 /* VSC callback function for notifying an application that a synchronous
60 * BTM function is complete. The pointer contains the address of any returned
61 * data.
62 */
63 typedef void(tBTM_VSC_CMPL_CB)(tBTM_VSC_CMPL* p1);
64
65 /*****************************************************************************
66 * DEVICE DISCOVERY - Inquiry, Remote Name, Discovery, Class of Device
67 ****************************************************************************/
68 /*******************************
69 * Device Discovery Constants
70 *******************************/
71 /****************************
72 * minor device class field
73 ****************************/
74
75 /* 0x00 is used as unclassified for all minor device classes */
76 #define BTM_COD_MINOR_UNCLASSIFIED 0x00
77 #define BTM_COD_MINOR_CONFM_HANDSFREE 0x08
78 #define BTM_COD_MINOR_CAR_AUDIO 0x20
79 #define BTM_COD_MINOR_SET_TOP_BOX 0x24
80
81 /* minor device class field for Peripheral Major Class */
82 /* Bits 6-7 independently specify mouse, keyboard, or combo mouse/keyboard */
83 #define BTM_COD_MINOR_KEYBOARD 0x40
84 #define BTM_COD_MINOR_POINTING 0x80
85 /* Bits 2-5 OR'd with selection from bits 6-7 */
86 /* #define BTM_COD_MINOR_UNCLASSIFIED 0x00 */
87 #define BTM_COD_MINOR_JOYSTICK 0x04
88 #define BTM_COD_MINOR_GAMEPAD 0x08
89 #define BTM_COD_MINOR_REMOTE_CONTROL 0x0C
90 #define BTM_COD_MINOR_DIGITIZING_TABLET 0x14
91 #define BTM_COD_MINOR_CARD_READER 0x18 /* e.g. SIM card reader */
92 #define BTM_COD_MINOR_DIGITAL_PAN 0x1C
93
94 /* minor device class field for Imaging Major Class */
95 /* Bits 5-7 independently specify display, camera, scanner, or printer */
96 #define BTM_COD_MINOR_DISPLAY 0x10
97 /* Bits 2-3 Reserved */
98 /* #define BTM_COD_MINOR_UNCLASSIFIED 0x00 */
99
100 /* minor device class field for Wearable Major Class */
101 /* Bits 2-7 meaningful */
102 #define BTM_COD_MINOR_WRIST_WATCH 0x04
103 #define BTM_COD_MINOR_GLASSES 0x14
104
105 /* minor device class field for Health Major Class */
106 /* Bits 2-7 meaningful */
107 #define BTM_COD_MINOR_BLOOD_MONITOR 0x04
108 #define BTM_COD_MINOR_THERMOMETER 0x08
109 #define BTM_COD_MINOR_WEIGHING_SCALE 0x0C
110 #define BTM_COD_MINOR_GLUCOSE_METER 0x10
111 #define BTM_COD_MINOR_PULSE_OXIMETER 0x14
112 #define BTM_COD_MINOR_HEART_PULSE_MONITOR 0x18
113 #define BTM_COD_MINOR_STEP_COUNTER 0x20
114
115 /***************************
116 * major device class field
117 ***************************/
118 #define BTM_COD_MAJOR_COMPUTER 0x01
119 #define BTM_COD_MAJOR_PHONE 0x02
120 #define BTM_COD_MAJOR_AUDIO 0x04
121 #define BTM_COD_MAJOR_PERIPHERAL 0x05
122 #define BTM_COD_MAJOR_IMAGING 0x06
123 #define BTM_COD_MAJOR_WEARABLE 0x07
124 #define BTM_COD_MAJOR_HEALTH 0x09
125 #define BTM_COD_MAJOR_UNCLASSIFIED 0x1F
126
127 /***************************
128 * service class fields
129 ***************************/
130 #define BTM_COD_SERVICE_LMTD_DISCOVER 0x0020
131 #define BTM_COD_SERVICE_POSITIONING 0x0100
132 #define BTM_COD_SERVICE_NETWORKING 0x0200
133 #define BTM_COD_SERVICE_RENDERING 0x0400
134 #define BTM_COD_SERVICE_CAPTURING 0x0800
135 #define BTM_COD_SERVICE_OBJ_TRANSFER 0x1000
136 #define BTM_COD_SERVICE_AUDIO 0x2000
137 #define BTM_COD_SERVICE_TELEPHONY 0x4000
138 #define BTM_COD_SERVICE_INFORMATION 0x8000
139
140 /* class of device field macros */
141 #define BTM_COD_MINOR_CLASS(u8, pd) \
142 { (u8) = (pd)[2] & 0xFC; }
143 #define BTM_COD_MAJOR_CLASS(u8, pd) \
144 { (u8) = (pd)[1] & 0x1F; }
145 #define BTM_COD_SERVICE_CLASS(u16, pd) \
146 { \
147 (u16) = (pd)[0]; \
148 (u16) <<= 8; \
149 (u16) += (pd)[1] & 0xE0; \
150 }
151
152 /* to set the fields (assumes that format type is always 0) */
153 #define FIELDS_TO_COD(pd, mn, mj, sv) \
154 { \
155 (pd)[2] = mn; \
156 (pd)[1] = (mj) + ((sv)&BTM_COD_SERVICE_CLASS_LO_B); \
157 (pd)[0] = (sv) >> 8; \
158 }
159
160 /* the COD masks */
161 #define BTM_COD_MINOR_CLASS_MASK 0xFC
162 #define BTM_COD_MAJOR_CLASS_MASK 0x1F
163 #define BTM_COD_SERVICE_CLASS_LO_B 0x00E0
164 #define BTM_COD_SERVICE_CLASS_MASK 0xFFE0
165
166 /* BTM service definitions
167 * Used for storing EIR data to bit mask
168 */
169 enum {
170 BTM_EIR_UUID_SERVCLASS_SERVICE_DISCOVERY_SERVER,
171 /* BTM_EIR_UUID_SERVCLASS_BROWSE_GROUP_DESCRIPTOR, */
172 /* BTM_EIR_UUID_SERVCLASS_PUBLIC_BROWSE_GROUP, */
173 BTM_EIR_UUID_SERVCLASS_SERIAL_PORT,
174 BTM_EIR_UUID_SERVCLASS_LAN_ACCESS_USING_PPP,
175 BTM_EIR_UUID_SERVCLASS_DIALUP_NETWORKING,
176 BTM_EIR_UUID_SERVCLASS_IRMC_SYNC,
177 BTM_EIR_UUID_SERVCLASS_OBEX_OBJECT_PUSH,
178 BTM_EIR_UUID_SERVCLASS_OBEX_FILE_TRANSFER,
179 BTM_EIR_UUID_SERVCLASS_IRMC_SYNC_COMMAND,
180 BTM_EIR_UUID_SERVCLASS_HEADSET,
181 BTM_EIR_UUID_SERVCLASS_CORDLESS_TELEPHONY,
182 BTM_EIR_UUID_SERVCLASS_AUDIO_SOURCE,
183 BTM_EIR_UUID_SERVCLASS_AUDIO_SINK,
184 BTM_EIR_UUID_SERVCLASS_AV_REM_CTRL_TARGET,
185 /* BTM_EIR_UUID_SERVCLASS_ADV_AUDIO_DISTRIBUTION, */
186 BTM_EIR_UUID_SERVCLASS_AV_REMOTE_CONTROL,
187 /* BTM_EIR_UUID_SERVCLASS_VIDEO_CONFERENCING, */
188 BTM_EIR_UUID_SERVCLASS_INTERCOM,
189 BTM_EIR_UUID_SERVCLASS_FAX,
190 BTM_EIR_UUID_SERVCLASS_HEADSET_AUDIO_GATEWAY,
191 /* BTM_EIR_UUID_SERVCLASS_WAP, */
192 /* BTM_EIR_UUID_SERVCLASS_WAP_CLIENT, */
193 BTM_EIR_UUID_SERVCLASS_PANU,
194 BTM_EIR_UUID_SERVCLASS_NAP,
195 BTM_EIR_UUID_SERVCLASS_GN,
196 BTM_EIR_UUID_SERVCLASS_DIRECT_PRINTING,
197 /* BTM_EIR_UUID_SERVCLASS_REFERENCE_PRINTING, */
198 BTM_EIR_UUID_SERVCLASS_IMAGING,
199 BTM_EIR_UUID_SERVCLASS_IMAGING_RESPONDER,
200 BTM_EIR_UUID_SERVCLASS_IMAGING_AUTO_ARCHIVE,
201 BTM_EIR_UUID_SERVCLASS_IMAGING_REF_OBJECTS,
202 BTM_EIR_UUID_SERVCLASS_HF_HANDSFREE,
203 BTM_EIR_UUID_SERVCLASS_AG_HANDSFREE,
204 BTM_EIR_UUID_SERVCLASS_DIR_PRT_REF_OBJ_SERVICE,
205 /* BTM_EIR_UUID_SERVCLASS_REFLECTED_UI, */
206 BTM_EIR_UUID_SERVCLASS_BASIC_PRINTING,
207 BTM_EIR_UUID_SERVCLASS_PRINTING_STATUS,
208 BTM_EIR_UUID_SERVCLASS_HUMAN_INTERFACE,
209 BTM_EIR_UUID_SERVCLASS_CABLE_REPLACEMENT,
210 BTM_EIR_UUID_SERVCLASS_HCRP_PRINT,
211 BTM_EIR_UUID_SERVCLASS_HCRP_SCAN,
212 /* BTM_EIR_UUID_SERVCLASS_COMMON_ISDN_ACCESS, */
213 /* BTM_EIR_UUID_SERVCLASS_VIDEO_CONFERENCING_GW, */
214 /* BTM_EIR_UUID_SERVCLASS_UDI_MT, */
215 /* BTM_EIR_UUID_SERVCLASS_UDI_TA, */
216 /* BTM_EIR_UUID_SERVCLASS_VCP, */
217 BTM_EIR_UUID_SERVCLASS_SAP,
218 BTM_EIR_UUID_SERVCLASS_PBAP_PCE,
219 BTM_EIR_UUID_SERVCLASS_PBAP_PSE,
220 /* BTM_EIR_UUID_SERVCLASS_TE_PHONE_ACCESS, */
221 /* BTM_EIR_UUID_SERVCLASS_ME_PHONE_ACCESS, */
222 BTM_EIR_UUID_SERVCLASS_PHONE_ACCESS,
223 BTM_EIR_UUID_SERVCLASS_HEADSET_HS,
224 BTM_EIR_UUID_SERVCLASS_PNP_INFORMATION,
225 /* BTM_EIR_UUID_SERVCLASS_GENERIC_NETWORKING, */
226 /* BTM_EIR_UUID_SERVCLASS_GENERIC_FILETRANSFER, */
227 /* BTM_EIR_UUID_SERVCLASS_GENERIC_AUDIO, */
228 /* BTM_EIR_UUID_SERVCLASS_GENERIC_TELEPHONY, */
229 /* BTM_EIR_UUID_SERVCLASS_UPNP_SERVICE, */
230 /* BTM_EIR_UUID_SERVCLASS_UPNP_IP_SERVICE, */
231 /* BTM_EIR_UUID_SERVCLASS_ESDP_UPNP_IP_PAN, */
232 /* BTM_EIR_UUID_SERVCLASS_ESDP_UPNP_IP_LAP, */
233 /* BTM_EIR_UUID_SERVCLASS_ESDP_UPNP_IP_L2CAP, */
234 BTM_EIR_UUID_SERVCLASS_VIDEO_SOURCE,
235 BTM_EIR_UUID_SERVCLASS_VIDEO_SINK,
236 /* BTM_EIR_UUID_SERVCLASS_VIDEO_DISTRIBUTION */
237 /* BTM_EIR_UUID_SERVCLASS_HDP_PROFILE */
238 BTM_EIR_UUID_SERVCLASS_MESSAGE_ACCESS,
239 BTM_EIR_UUID_SERVCLASS_MESSAGE_NOTIFICATION,
240 BTM_EIR_UUID_SERVCLASS_HDP_SOURCE,
241 BTM_EIR_UUID_SERVCLASS_HDP_SINK,
242 BTM_EIR_MAX_SERVICES
243 };
244
245 /* search result in EIR of inquiry database */
246 #define BTM_EIR_FOUND 0
247 #define BTM_EIR_NOT_FOUND 1
248 #define BTM_EIR_UNKNOWN 2
249
250 typedef uint8_t tBTM_EIR_SEARCH_RESULT;
251
252 /* 0x01 */
253 #define BTM_EIR_FLAGS_TYPE HCI_EIR_FLAGS_TYPE
254 /* 0x02 */
255 #define BTM_EIR_MORE_16BITS_UUID_TYPE HCI_EIR_MORE_16BITS_UUID_TYPE
256 /* 0x03 */
257 #define BTM_EIR_COMPLETE_16BITS_UUID_TYPE HCI_EIR_COMPLETE_16BITS_UUID_TYPE
258 /* 0x04 */
259 #define BTM_EIR_MORE_32BITS_UUID_TYPE HCI_EIR_MORE_32BITS_UUID_TYPE
260 /* 0x05 */
261 #define BTM_EIR_COMPLETE_32BITS_UUID_TYPE HCI_EIR_COMPLETE_32BITS_UUID_TYPE
262 /* 0x06 */
263 #define BTM_EIR_MORE_128BITS_UUID_TYPE HCI_EIR_MORE_128BITS_UUID_TYPE
264 /* 0x07 */
265 #define BTM_EIR_COMPLETE_128BITS_UUID_TYPE HCI_EIR_COMPLETE_128BITS_UUID_TYPE
266 /* 0x08 */
267 #define BTM_EIR_SHORTENED_LOCAL_NAME_TYPE HCI_EIR_SHORTENED_LOCAL_NAME_TYPE
268 /* 0x09 */
269 #define BTM_EIR_COMPLETE_LOCAL_NAME_TYPE HCI_EIR_COMPLETE_LOCAL_NAME_TYPE
270 /* 0x0A */
271 #define BTM_EIR_TX_POWER_LEVEL_TYPE HCI_EIR_TX_POWER_LEVEL_TYPE
272
273 typedef enum : uint8_t {
274 BTM_BLE_SEC_NONE = 0,
275 /* encrypt the link using current key */
276 BTM_BLE_SEC_ENCRYPT = 1,
277 BTM_BLE_SEC_ENCRYPT_NO_MITM = 2,
278 BTM_BLE_SEC_ENCRYPT_MITM = 3,
279 } tBTM_BLE_SEC_ACT;
280
281 /*******************************************************************************
282 * BTM Services MACROS handle array of uint32_t bits for more than 32 services
283 ******************************************************************************/
284 /* Determine the number of uint32_t's necessary for services */
285 #define BTM_EIR_ARRAY_BITS 32 /* Number of bits in each array element */
286 #define BTM_EIR_SERVICE_ARRAY_SIZE \
287 (((uint32_t)BTM_EIR_MAX_SERVICES / BTM_EIR_ARRAY_BITS) + \
288 (((uint32_t)BTM_EIR_MAX_SERVICES % BTM_EIR_ARRAY_BITS) ? 1 : 0))
289
290 /* MACRO to set the service bit mask in a bit stream */
291 #define BTM_EIR_SET_SERVICE(p, service) \
292 (((uint32_t*)(p))[(((uint32_t)(service)) / BTM_EIR_ARRAY_BITS)] |= \
293 ((uint32_t)1 << (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS)))
294
295 /* MACRO to clear the service bit mask in a bit stream */
296 #define BTM_EIR_CLR_SERVICE(p, service) \
297 (((uint32_t*)(p))[(((uint32_t)(service)) / BTM_EIR_ARRAY_BITS)] &= \
298 ~((uint32_t)1 << (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS)))
299
300 /* MACRO to check the service bit mask in a bit stream */
301 #define BTM_EIR_HAS_SERVICE(p, service) \
302 ((((uint32_t*)(p))[(((uint32_t)(service)) / BTM_EIR_ARRAY_BITS)] & \
303 ((uint32_t)1 << (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS))) >> \
304 (((uint32_t)(service)) % BTM_EIR_ARRAY_BITS))
305
306 /* start of EIR in HCI buffer, 4 bytes = HCI Command(2) + Length(1) + FEC_Req(1)
307 */
308 #define BTM_HCI_EIR_OFFSET (BT_HDR_SIZE + 4)
309
310 /***************************
311 * Device Discovery Types
312 ***************************/
313 /* Definitions of the parameters passed to BTM_StartInquiry.
314 */
315 typedef struct /* contains the two device class condition fields */
316 {
317 DEV_CLASS dev_class;
318 DEV_CLASS dev_class_mask;
319 } tBTM_COD_COND;
320
321 constexpr uint8_t BLE_EVT_CONNECTABLE_BIT = 0;
322 constexpr uint8_t BLE_EVT_SCANNABLE_BIT = 1;
323 constexpr uint8_t BLE_EVT_DIRECTED_BIT = 2;
324 constexpr uint8_t BLE_EVT_SCAN_RESPONSE_BIT = 3;
325 constexpr uint8_t BLE_EVT_LEGACY_BIT = 4;
326
327 constexpr uint8_t PHY_LE_NO_PACKET = 0x00;
328 constexpr uint8_t PHY_LE_1M = 0x01;
329 constexpr uint8_t PHY_LE_2M = 0x02;
330 constexpr uint8_t PHY_LE_CODED = 0x04;
331
332 constexpr uint8_t NO_ADI_PRESENT = 0xFF;
333 constexpr uint8_t TX_POWER_NOT_PRESENT = 0x7F;
334
335 typedef struct {
336 uint8_t pcm_intf_rate; /* PCM interface rate: 0: 128kbps, 1: 256 kbps;
337 2:512 bps; 3: 1024kbps; 4: 2048kbps */
338 uint8_t frame_type; /* frame type: 0: short; 1: long */
339 uint8_t sync_mode; /* sync mode: 0: peripheral; 1: central */
340 uint8_t clock_mode; /* clock mode: 0: peripheral; 1: central */
341
342 } tBTM_SCO_PCM_PARAM;
343
344 /*****************************************************************************
345 * ACL CHANNEL MANAGEMENT
346 ****************************************************************************/
347 // NOTE: Moved to stack/include/acl_api_types.h
348
349 /*****************************************************************************
350 * SCO CHANNEL MANAGEMENT
351 ****************************************************************************/
352 /******************
353 * SCO Constants
354 ******************/
355
356 /* Define an invalid SCO index and an invalid HCI handle */
357 #define BTM_INVALID_SCO_INDEX 0xFFFF
358
359 /* Define an invalid SCO disconnect reason */
360 #define BTM_INVALID_SCO_DISC_REASON 0xFFFF
361
362 #define BTM_SCO_LINK_ONLY_MASK \
363 (ESCO_PKT_TYPES_MASK_HV1 | ESCO_PKT_TYPES_MASK_HV2 | ESCO_PKT_TYPES_MASK_HV3)
364
365 #define BTM_ESCO_LINK_ONLY_MASK \
366 (ESCO_PKT_TYPES_MASK_EV3 | ESCO_PKT_TYPES_MASK_EV4 | ESCO_PKT_TYPES_MASK_EV5)
367
368 /***************
369 * SCO Types
370 ***************/
371 #define BTM_LINK_TYPE_SCO HCI_LINK_TYPE_SCO
372 #define BTM_LINK_TYPE_ESCO HCI_LINK_TYPE_ESCO
373 typedef uint8_t tBTM_SCO_TYPE;
374
375 /*******************
376 * SCO Codec Types
377 *******************/
378 // TODO(google) This should use common definitions
379 #define BTM_SCO_CODEC_NONE 0x0000
380 #define BTM_SCO_CODEC_CVSD 0x0001
381 #define BTM_SCO_CODEC_MSBC 0x0002
382 typedef uint16_t tBTM_SCO_CODEC_TYPE;
383
384 /*******************
385 * SCO Voice Settings
386 *******************/
387 #define BTM_VOICE_SETTING_CVSD \
388 ((uint16_t)(HCI_INP_CODING_LINEAR | HCI_INP_DATA_FMT_2S_COMPLEMENT | \
389 HCI_INP_SAMPLE_SIZE_16BIT | HCI_AIR_CODING_FORMAT_CVSD))
390
391 #define BTM_VOICE_SETTING_TRANS \
392 ((uint16_t)(HCI_INP_CODING_LINEAR | HCI_INP_DATA_FMT_2S_COMPLEMENT | \
393 HCI_INP_SAMPLE_SIZE_16BIT | HCI_AIR_CODING_FORMAT_TRANSPNT))
394
395 /*******************
396 * SCO Data Status
397 *******************/
398 typedef uint8_t tBTM_SCO_DATA_FLAG;
399
400 /***************************
401 * SCO Callback Functions
402 ***************************/
403 typedef void(tBTM_SCO_CB)(uint16_t sco_inx);
404
405 /***************
406 * eSCO Types
407 ***************/
408 /* tBTM_ESCO_CBACK event types */
409 #define BTM_ESCO_CHG_EVT 1
410 #define BTM_ESCO_CONN_REQ_EVT 2
411 typedef uint8_t tBTM_ESCO_EVT;
412
413 /* Structure passed with SCO change command and events.
414 * Used by both Sync and Enhanced sync messaging
415 */
416 typedef struct {
417 uint16_t max_latency_ms;
418 uint16_t packet_types;
419 uint8_t retransmission_effort;
420 } tBTM_CHG_ESCO_PARAMS;
421
422 /* Returned by BTM_ReadEScoLinkParms() */
423 struct tBTM_ESCO_DATA {
424 uint16_t rx_pkt_len;
425 uint16_t tx_pkt_len;
426 RawAddress bd_addr;
427 uint8_t link_type; /* BTM_LINK_TYPE_SCO or BTM_LINK_TYPE_ESCO */
428 uint8_t tx_interval;
429 uint8_t retrans_window;
430 uint8_t air_mode;
431 };
432
433 typedef struct {
434 uint16_t sco_inx;
435 uint16_t rx_pkt_len;
436 uint16_t tx_pkt_len;
437 RawAddress bd_addr;
438 uint8_t hci_status;
439 uint8_t tx_interval;
440 uint8_t retrans_window;
441 } tBTM_CHG_ESCO_EVT_DATA;
442
443 typedef struct {
444 uint16_t sco_inx;
445 RawAddress bd_addr;
446 DEV_CLASS dev_class;
447 tBTM_SCO_TYPE link_type;
448 } tBTM_ESCO_CONN_REQ_EVT_DATA;
449
450 typedef union {
451 tBTM_CHG_ESCO_EVT_DATA chg_evt;
452 tBTM_ESCO_CONN_REQ_EVT_DATA conn_evt;
453 } tBTM_ESCO_EVT_DATA;
454
455 /***************************
456 * eSCO Callback Functions
457 ***************************/
458 typedef void(tBTM_ESCO_CBACK)(tBTM_ESCO_EVT event, tBTM_ESCO_EVT_DATA* p_data);
459
460 /*****************************************************************************
461 * SECURITY MANAGEMENT
462 ****************************************************************************/
463 /*******************************
464 * Security Manager Constants
465 *******************************/
466
467 typedef enum : uint8_t {
468 BTM_SEC_MODE_SERVICE = 2,
469 BTM_SEC_MODE_SP = 4,
470 BTM_SEC_MODE_SC = 6,
471 } tSECURITY_MODE;
472
security_mode_text(const tSECURITY_MODE & security_mode)473 inline std::string security_mode_text(const tSECURITY_MODE& security_mode) {
474 switch (security_mode) {
475 case BTM_SEC_MODE_SERVICE:
476 return std::string("service");
477 case BTM_SEC_MODE_SP:
478 return std::string("simple pairing");
479 case BTM_SEC_MODE_SC:
480 return std::string("secure connections only");
481 default:
482 return std::string("UNKNOWN[%hhu]", security_mode);
483 }
484 }
485
486 enum : uint16_t {
487 /* Nothing required */
488 BTM_SEC_NONE = 0x0000,
489 /* Inbound call requires authentication */
490 BTM_SEC_IN_AUTHENTICATE = 0x0002,
491 /* Inbound call requires encryption */
492 BTM_SEC_IN_ENCRYPT = 0x0004,
493 /* Outbound call requires authentication */
494 BTM_SEC_OUT_AUTHENTICATE = 0x0010,
495 /* Outbound call requires encryption */
496 BTM_SEC_OUT_ENCRYPT = 0x0020,
497 /* Secure Connections Only Mode */
498 BTM_SEC_MODE4_LEVEL4 = 0x0040,
499 /* Need to switch connection to be central */
500 BTM_SEC_FORCE_CENTRAL = 0x0100,
501 /* Need to switch connection to be central */
502 BTM_SEC_ATTEMPT_CENTRAL = 0x0200,
503 /* Need to switch connection to be peripheral */
504 BTM_SEC_FORCE_PERIPHERAL = 0x0400,
505 /* Try to switch connection to be peripheral */
506 BTM_SEC_ATTEMPT_PERIPHERAL = 0x0800,
507 /* inbound Do man in the middle protection */
508 BTM_SEC_IN_MITM = 0x1000,
509 /* outbound Do man in the middle protection */
510 BTM_SEC_OUT_MITM = 0x2000,
511 /* enforce a minimum of 16 digit for sec mode 2 */
512 BTM_SEC_IN_MIN_16_DIGIT_PIN = 0x4000,
513 };
514
515 /* Security Flags [bit mask] (BTM_GetSecurityFlags)
516 */
517 #define BTM_SEC_FLAG_AUTHENTICATED 0x02
518 #define BTM_SEC_FLAG_ENCRYPTED 0x04
519 #define BTM_SEC_FLAG_LKEY_KNOWN 0x10
520 #define BTM_SEC_FLAG_LKEY_AUTHED 0x20
521
522 /* Link Key types used to generate the new link key.
523 * returned in link key notification callback function
524 */
525 #define BTM_LKEY_TYPE_COMBINATION HCI_LKEY_TYPE_COMBINATION
526 #define BTM_LKEY_TYPE_REMOTE_UNIT HCI_LKEY_TYPE_REMOTE_UNIT
527 #define BTM_LKEY_TYPE_UNAUTH_COMB HCI_LKEY_TYPE_UNAUTH_COMB
528 #define BTM_LKEY_TYPE_AUTH_COMB HCI_LKEY_TYPE_AUTH_COMB
529 #define BTM_LKEY_TYPE_CHANGED_COMB HCI_LKEY_TYPE_CHANGED_COMB
530
531 #define BTM_LKEY_TYPE_UNAUTH_COMB_P_256 HCI_LKEY_TYPE_UNAUTH_COMB_P_256
532 #define BTM_LKEY_TYPE_AUTH_COMB_P_256 HCI_LKEY_TYPE_AUTH_COMB_P_256
533
534 /* "easy" requirements for LK derived from LTK */
535 #define BTM_LTK_DERIVED_LKEY_OFFSET 0x20
536 #define BTM_LKEY_TYPE_IGNORE \
537 0xff /* used when event is response from \
538 hci return link keys request */
539
540 typedef uint8_t tBTM_LINK_KEY_TYPE;
541
542 /* Protocol level security (BTM_SetSecurityLevel) */
543 #define BTM_SEC_PROTO_RFCOMM 3
544 #define BTM_SEC_PROTO_BNEP 5
545 #define BTM_SEC_PROTO_HID 6 /* HID */
546 #define BTM_SEC_PROTO_AVDT 7
547
548 #define BTM_SEC_SERVICE_HEADSET 8
549 #define BTM_SEC_SERVICE_HEADSET_AG 12
550 #define BTM_SEC_SERVICE_AG_HANDSFREE 29
551 #define BTM_SEC_SERVICE_RFC_MUX 42
552 #define BTM_SEC_SERVICE_HEARING_AID_LEFT 54
553 #define BTM_SEC_SERVICE_HEARING_AID_RIGHT 55
554 #define BTM_SEC_SERVICE_EATT 56
555
556 /* Update these as services are added */
557 #define BTM_SEC_SERVICE_FIRST_EMPTY 57
558
559 #ifndef BTM_SEC_MAX_SERVICES
560 #define BTM_SEC_MAX_SERVICES 75
561 #endif
562
563 /*******************************************************************************
564 * Security Services MACROS handle array of uint32_t bits for more than 32
565 * trusted services
566 ******************************************************************************/
567
568 enum {
569 BTM_SP_IO_REQ_EVT, /* received IO_CAPABILITY_REQUEST event */
570 BTM_SP_IO_RSP_EVT, /* received IO_CAPABILITY_RESPONSE event */
571 BTM_SP_CFM_REQ_EVT, /* received USER_CONFIRMATION_REQUEST event */
572 BTM_SP_KEY_NOTIF_EVT, /* received USER_PASSKEY_NOTIFY event */
573 BTM_SP_KEY_REQ_EVT, /* received USER_PASSKEY_REQUEST event */
574 BTM_SP_LOC_OOB_EVT, /* received result for READ_LOCAL_OOB_DATA command */
575 BTM_SP_RMT_OOB_EVT, /* received REMOTE_OOB_DATA_REQUEST event */
576 };
577 typedef uint8_t tBTM_SP_EVT;
578
579 enum : uint8_t {
580 BTM_IO_CAP_OUT = 0, /* DisplayOnly */
581 BTM_IO_CAP_IO = 1, /* DisplayYesNo */
582 BTM_IO_CAP_IN = 2, /* KeyboardOnly */
583 BTM_IO_CAP_NONE = 3, /* NoInputNoOutput */
584 BTM_IO_CAP_KBDISP = 4, /* Keyboard display */
585 BTM_IO_CAP_MAX = 5,
586 BTM_IO_CAP_UNKNOWN = 0xFF /* Unknown value */
587 };
588 typedef uint8_t tBTM_IO_CAP;
589
io_capabilities_text(const tBTM_IO_CAP & io_caps)590 inline std::string io_capabilities_text(const tBTM_IO_CAP& io_caps) {
591 switch (io_caps) {
592 case BTM_IO_CAP_OUT:
593 return std::string("Display only");
594 case BTM_IO_CAP_IO:
595 return std::string("Display yes-no");
596 case BTM_IO_CAP_IN:
597 return std::string("Keyboard Only");
598 case BTM_IO_CAP_NONE:
599 return std::string("No input or output");
600 case BTM_IO_CAP_KBDISP:
601 return std::string("Keyboard-Display");
602 default:
603 return base::StringPrintf("UNKNOWN[%hhu]", io_caps);
604 }
605 }
606
607 #define BTM_MAX_PASSKEY_VAL (999999)
608
609 typedef enum : uint8_t {
610 /* MITM Protection Not Required - Single Profile/non-bonding Numeric
611 * comparison with automatic accept allowed */
612 // NO_BONDING
613 BTM_AUTH_SP_NO = 0,
614 /* MITM Protection Required - Single Profile/non-bonding. Use IO Capabilities
615 * to determine authentication procedure */
616 // NO_BONDING_MITM_PROTECTION
617 BTM_AUTH_SP_YES = 1,
618 /* MITM Protection Not Required - All Profiles/dedicated bonding Numeric
619 * comparison with automatic accept allowed */
620 // DEDICATED_BONDING
621 BTM_AUTH_AP_NO = 2,
622 /* MITM Protection Required - All Profiles/dedicated bonding Use IO
623 * Capabilities to determine authentication procedure */
624 // DEDICATED_BONDING_MITM_PROTECTION
625 BTM_AUTH_AP_YES = 3,
626 /* MITM Protection Not Required - Single Profiles/general bonding Numeric
627 * comparison with automatic accept allowed */
628 // GENERAL_BONDING
629 BTM_AUTH_SPGB_NO = 4,
630 /* MITM Protection Required - Single Profiles/general bonding Use IO
631 * Capabilities to determine authentication procedure */
632 // GENERAL_BONDING_MITM_PROTECTION
633 BTM_AUTH_SPGB_YES = 5,
634 } tBTM_AUTH;
635
636 /* this bit is ORed with BTM_AUTH_SP_* when IO exchange for dedicated bonding */
637 #define BTM_AUTH_DD_BOND 2
638 #define BTM_AUTH_BONDS 6 /* the general/dedicated bonding bits */
639 #define BTM_AUTH_YN_BIT 1 /* this is the Yes or No bit */
640
641 #define BTM_BLE_INITIATOR_KEY_SIZE 15
642 #define BTM_BLE_RESPONDER_KEY_SIZE 15
643 #define BTM_BLE_MAX_KEY_SIZE 16
644
645 typedef uint8_t tBTM_AUTH_REQ;
646
647 enum {
648 BTM_OOB_NONE,
649 BTM_OOB_PRESENT_192,
650 BTM_OOB_PRESENT_256,
651 BTM_OOB_PRESENT_192_AND_256,
652 BTM_OOB_UNKNOWN
653 };
654
655 typedef uint8_t tBTM_OOB_DATA;
656
657 /* data type for BTM_SP_IO_REQ_EVT */
658 typedef struct {
659 RawAddress bd_addr; /* peer address */
660 tBTM_IO_CAP io_cap; /* local IO capabilities */
661 tBTM_OOB_DATA oob_data; /* OOB data present (locally) for the peer device */
662 tBTM_AUTH_REQ auth_req; /* Authentication required (for local device) */
663 bool is_orig; /* true, if local device initiated the SP process */
664 } tBTM_SP_IO_REQ;
665
666 /* data type for BTM_SP_IO_RSP_EVT */
667 typedef struct {
668 RawAddress bd_addr; /* peer address */
669 tBTM_IO_CAP io_cap; /* peer IO capabilities */
670 tBTM_OOB_DATA
671 oob_data; /* OOB data present at peer device for the local device */
672 tBTM_AUTH_REQ auth_req; /* Authentication required for peer device */
673 } tBTM_SP_IO_RSP;
674
675 /* data type for BTM_SP_CFM_REQ_EVT */
676 typedef struct {
677 RawAddress bd_addr; /* peer address */
678 DEV_CLASS dev_class; /* peer CoD */
679 tBTM_BD_NAME bd_name; /* peer device name */
680 uint32_t num_val; /* the numeric value for comparison. If just_works, do not
681 show this number to UI */
682 bool just_works; /* true, if "Just Works" association model */
683 tBTM_AUTH_REQ loc_auth_req; /* Authentication required for local device */
684 tBTM_AUTH_REQ rmt_auth_req; /* Authentication required for peer device */
685 tBTM_IO_CAP loc_io_caps; /* IO Capabilities of the local device */
686 tBTM_IO_CAP rmt_io_caps; /* IO Capabilities of the remot device */
687 } tBTM_SP_CFM_REQ;
688
689 /* data type for BTM_SP_KEY_REQ_EVT */
690 typedef struct {
691 RawAddress bd_addr; /* peer address */
692 DEV_CLASS dev_class; /* peer CoD */
693 tBTM_BD_NAME bd_name; /* peer device name */
694 } tBTM_SP_KEY_REQ;
695
696 /* data type for BTM_SP_KEY_NOTIF_EVT */
697 typedef struct {
698 RawAddress bd_addr; /* peer address */
699 DEV_CLASS dev_class; /* peer CoD */
700 tBTM_BD_NAME bd_name; /* peer device name */
701 uint32_t passkey; /* passkey */
702 } tBTM_SP_KEY_NOTIF;
703
704 /* data type for BTM_SP_LOC_OOB_EVT */
705 typedef struct {
706 tBTM_STATUS status; /* */
707 Octet16 c; /* Simple Pairing Hash C */
708 Octet16 r; /* Simple Pairing Randomnizer R */
709 } tBTM_SP_LOC_OOB;
710
711 /* data type for BTM_SP_RMT_OOB_EVT */
712 typedef struct {
713 RawAddress bd_addr; /* peer address */
714 DEV_CLASS dev_class; /* peer CoD */
715 tBTM_BD_NAME bd_name; /* peer device name */
716 } tBTM_SP_RMT_OOB;
717
718 typedef union {
719 tBTM_SP_IO_REQ io_req; /* BTM_SP_IO_REQ_EVT */
720 tBTM_SP_IO_RSP io_rsp; /* BTM_SP_IO_RSP_EVT */
721 tBTM_SP_CFM_REQ cfm_req; /* BTM_SP_CFM_REQ_EVT */
722 tBTM_SP_KEY_NOTIF key_notif; /* BTM_SP_KEY_NOTIF_EVT */
723 tBTM_SP_KEY_REQ key_req; /* BTM_SP_KEY_REQ_EVT */
724 tBTM_SP_LOC_OOB loc_oob; /* BTM_SP_LOC_OOB_EVT */
725 tBTM_SP_RMT_OOB rmt_oob; /* BTM_SP_RMT_OOB_EVT */
726 } tBTM_SP_EVT_DATA;
727
728 /* Simple Pairing Events. Called by the stack when Simple Pairing related
729 * events occur.
730 */
731 typedef tBTM_STATUS(tBTM_SP_CALLBACK)(tBTM_SP_EVT event,
732 tBTM_SP_EVT_DATA* p_data);
733
734 typedef void(tBTM_MKEY_CALLBACK)(const RawAddress& bd_addr, uint8_t status,
735 uint8_t key_flag);
736
737 /* Encryption enabled/disabled complete: Optionally passed with
738 * BTM_SetEncryption.
739 * Parameters are
740 * BD Address of remote
741 * optional data passed in by BTM_SetEncryption
742 * tBTM_STATUS - result of the operation
743 */
744 typedef void(tBTM_SEC_CALLBACK)(const RawAddress* bd_addr,
745 tBT_TRANSPORT trasnport, void* p_ref_data,
746 tBTM_STATUS result);
747 typedef tBTM_SEC_CALLBACK tBTM_SEC_CALLBACK;
748
749 /* Bond Cancel complete. Parameters are
750 * Result of the cancel operation
751 *
752 */
753 typedef void(tBTM_BOND_CANCEL_CMPL_CALLBACK)(tBTM_STATUS result);
754
755 /* LE related event and data structure */
756 /* received IO_CAPABILITY_REQUEST event */
757 #define BTM_LE_IO_REQ_EVT SMP_IO_CAP_REQ_EVT
758 /* security request event */
759 #define BTM_LE_SEC_REQUEST_EVT SMP_SEC_REQUEST_EVT
760 /* received USER_PASSKEY_NOTIFY event */
761 #define BTM_LE_KEY_NOTIF_EVT SMP_PASSKEY_NOTIF_EVT
762 /* received USER_PASSKEY_REQUEST event */
763 #define BTM_LE_KEY_REQ_EVT SMP_PASSKEY_REQ_EVT
764 /* OOB data request event */
765 #define BTM_LE_OOB_REQ_EVT SMP_OOB_REQ_EVT
766 /* Numeric Comparison request event */
767 #define BTM_LE_NC_REQ_EVT SMP_NC_REQ_EVT
768 /* Peer keypress notification recd event */
769 #define BTM_LE_PR_KEYPR_NOT_EVT SMP_PEER_KEYPR_NOT_EVT
770 /* SC OOB request event (both local and peer OOB data) can be expected in
771 * response */
772 #define BTM_LE_SC_OOB_REQ_EVT SMP_SC_OOB_REQ_EVT
773 /* SC OOB local data set is created (as result of SMP_CrLocScOobData(...)) */
774 #define BTM_LE_SC_LOC_OOB_EVT SMP_SC_LOC_OOB_DATA_UP_EVT
775 /* SMP complete event */
776 #define BTM_LE_COMPLT_EVT SMP_COMPLT_EVT
777 #define BTM_LE_LAST_FROM_SMP SMP_BR_KEYS_REQ_EVT
778 /* KEY update event */
779 #define BTM_LE_KEY_EVT (BTM_LE_LAST_FROM_SMP + 1)
780 #define BTM_LE_CONSENT_REQ_EVT SMP_CONSENT_REQ_EVT
781 typedef uint8_t tBTM_LE_EVT;
782
783 enum : uint8_t {
784 BTM_LE_KEY_NONE = 0,
785 BTM_LE_KEY_PENC = SMP_SEC_KEY_TYPE_ENC,
786 /* identity key of the peer device */
787 BTM_LE_KEY_PID = SMP_SEC_KEY_TYPE_ID,
788 /* peer SRK */
789 BTM_LE_KEY_PCSRK = SMP_SEC_KEY_TYPE_CSRK,
790 BTM_LE_KEY_PLK = SMP_SEC_KEY_TYPE_LK,
791 BTM_LE_KEY_LLK = (SMP_SEC_KEY_TYPE_LK << 4),
792 /* master role security information:div */
793 BTM_LE_KEY_LENC = (SMP_SEC_KEY_TYPE_ENC << 4),
794 /* master device ID key */
795 BTM_LE_KEY_LID = (SMP_SEC_KEY_TYPE_ID << 4),
796 /* local CSRK has been deliver to peer */
797 BTM_LE_KEY_LCSRK = (SMP_SEC_KEY_TYPE_CSRK << 4),
798 };
799 typedef uint8_t tBTM_LE_KEY_TYPE;
800
801 #define BTM_LE_AUTH_REQ_NO_BOND SMP_AUTH_NO_BOND /* 0 */
802 #define BTM_LE_AUTH_REQ_BOND SMP_AUTH_BOND /* 1 << 0 */
803 #define BTM_LE_AUTH_REQ_MITM SMP_AUTH_YN_BIT /* 1 << 2 */
804 typedef uint8_t tBTM_LE_AUTH_REQ;
805 #define BTM_LE_SC_SUPPORT_BIT SMP_SC_SUPPORT_BIT /* (1 << 3) */
806 #define BTM_LE_KP_SUPPORT_BIT SMP_KP_SUPPORT_BIT /* (1 << 4) */
807 #define BTM_LE_H7_SUPPORT_BIT SMP_H7_SUPPORT_BIT /* (1 << 5) */
808
809 #define BTM_LE_AUTH_REQ_SC_ONLY SMP_AUTH_SC_ENC_ONLY /* 00101000 */
810 #define BTM_LE_AUTH_REQ_SC_BOND SMP_AUTH_SC_GB /* 00101001 */
811 #define BTM_LE_AUTH_REQ_SC_MITM SMP_AUTH_SC_MITM_NB /* 00101100 */
812 #define BTM_LE_AUTH_REQ_SC_MITM_BOND SMP_AUTH_SC_MITM_GB /* 00101101 */
813 #define BTM_LE_AUTH_REQ_MASK SMP_AUTH_MASK /* 0x3D */
814
815 /* LE security level */
816 #define BTM_LE_SEC_NONE SMP_SEC_NONE
817 #define BTM_LE_SEC_UNAUTHENTICATE SMP_SEC_UNAUTHENTICATE /* 1 */
818 #define BTM_LE_SEC_AUTHENTICATED SMP_SEC_AUTHENTICATED /* 4 */
819 typedef uint8_t tBTM_LE_SEC;
820
821 typedef struct {
822 /* local IO capabilities */
823 tBTM_IO_CAP io_cap;
824 /* OOB data present (locally) for the peer device */
825 uint8_t oob_data;
826 /* Authentication request (for local device) containing bonding and MITM
827 * info */
828 tBTM_LE_AUTH_REQ auth_req;
829 uint8_t max_key_size; /* max encryption key size */
830 tBTM_LE_KEY_TYPE init_keys; /* keys to be distributed, bit mask */
831 tBTM_LE_KEY_TYPE resp_keys; /* keys to be distributed, bit mask */
832 } tBTM_LE_IO_REQ;
833
834 /* data type for tBTM_LE_COMPLT */
835 typedef struct {
836 uint8_t reason;
837 uint8_t sec_level;
838 bool is_pair_cancel;
839 bool smp_over_br;
840 } tBTM_LE_COMPLT;
841
842 /*****************************************************************************
843 * POWER MANAGEMENT
844 ****************************************************************************/
845 /****************************
846 * Power Manager Constants
847 ****************************/
848 /* BTM Power manager status codes */
849 enum : uint8_t {
850 BTM_PM_STS_ACTIVE = HCI_MODE_ACTIVE, // 0x00
851 BTM_PM_STS_HOLD = HCI_MODE_HOLD, // 0x01
852 BTM_PM_STS_SNIFF = HCI_MODE_SNIFF, // 0x02
853 BTM_PM_STS_PARK = HCI_MODE_PARK, // 0x03
854 BTM_PM_STS_SSR, /* report the SSR parameters in HCI_SNIFF_SUB_RATE_EVT */
855 BTM_PM_STS_PENDING, /* when waiting for status from controller */
856 BTM_PM_STS_ERROR /* when HCI command status returns error */
857 };
858 typedef uint8_t tBTM_PM_STATUS;
859
power_mode_status_text(tBTM_PM_STATUS status)860 inline std::string power_mode_status_text(tBTM_PM_STATUS status) {
861 switch (status) {
862 case BTM_PM_STS_ACTIVE:
863 return std::string("active");
864 case BTM_PM_STS_HOLD:
865 return std::string("hold");
866 case BTM_PM_STS_SNIFF:
867 return std::string("sniff");
868 case BTM_PM_STS_PARK:
869 return std::string("park");
870 case BTM_PM_STS_SSR:
871 return std::string("sniff_subrating");
872 case BTM_PM_STS_PENDING:
873 return std::string("pending");
874 case BTM_PM_STS_ERROR:
875 return std::string("error");
876 default:
877 return std::string("UNKNOWN");
878 }
879 }
880
881 /* BTM Power manager modes */
882 enum : uint8_t {
883 BTM_PM_MD_ACTIVE = HCI_MODE_ACTIVE, // 0x00
884 BTM_PM_MD_HOLD = HCI_MODE_HOLD, // 0x01
885 BTM_PM_MD_SNIFF = HCI_MODE_SNIFF, // 0x02
886 BTM_PM_MD_PARK = HCI_MODE_PARK, // 0x03
887 BTM_PM_MD_FORCE = 0x10, /* OR this to force ACL link to a certain mode */
888 BTM_PM_MD_UNKNOWN = 0xEF,
889 };
890 typedef uint8_t tBTM_PM_MODE;
891 #define HCI_TO_BTM_POWER_MODE(mode) (static_cast<tBTM_PM_MODE>(mode))
892
is_legal_power_mode(tBTM_PM_MODE mode)893 inline bool is_legal_power_mode(tBTM_PM_MODE mode) {
894 switch (mode & ~BTM_PM_MD_FORCE) {
895 case BTM_PM_MD_ACTIVE:
896 case BTM_PM_MD_HOLD:
897 case BTM_PM_MD_SNIFF:
898 case BTM_PM_MD_PARK:
899 return true;
900 default:
901 return false;
902 }
903 }
904
power_mode_text(tBTM_PM_MODE mode)905 inline std::string power_mode_text(tBTM_PM_MODE mode) {
906 std::string s = base::StringPrintf((mode & BTM_PM_MD_FORCE) ? "" : "forced:");
907 switch (mode & ~BTM_PM_MD_FORCE) {
908 case BTM_PM_MD_ACTIVE:
909 return s + std::string("active");
910 case BTM_PM_MD_HOLD:
911 return s + std::string("hold");
912 case BTM_PM_MD_SNIFF:
913 return s + std::string("sniff");
914 case BTM_PM_MD_PARK:
915 return s + std::string("park");
916 default:
917 return s + std::string("UNKNOWN");
918 }
919 }
920
921 #define BTM_PM_SET_ONLY_ID 0x80
922
923 /* Operation codes */
924 typedef enum : uint8_t {
925 /* The module wants to set the desired power mode */
926 BTM_PM_REG_SET = (1u << 0),
927 /* The module does not want to involve with PM anymore */
928 BTM_PM_DEREG = (1u << 2),
929 } tBTM_PM_REGISTER;
930
931 /************************
932 * Power Manager Types
933 ************************/
934 typedef struct {
935 uint16_t max = 0;
936 uint16_t min = 0;
937 uint16_t attempt = 0;
938 uint16_t timeout = 0;
939 tBTM_PM_MODE mode = BTM_PM_MD_ACTIVE; // 0
940 } tBTM_PM_PWR_MD;
941
942 /*************************************
943 * Power Manager Callback Functions
944 *************************************/
945 typedef void(tBTM_PM_STATUS_CBACK)(const RawAddress& p_bda,
946 tBTM_PM_STATUS status, uint16_t value,
947 tHCI_STATUS hci_status);
948
949 /************************
950 * Stored Linkkey Types
951 ************************/
952 #define BTM_CB_EVT_DELETE_STORED_LINK_KEYS 4
953
954 typedef struct {
955 uint8_t event;
956 uint8_t status;
957 uint16_t num_keys;
958
959 } tBTM_DELETE_STORED_LINK_KEY_COMPLETE;
960
961 /* ACL link on, SCO link ongoing, sniff mode */
962 #define BTM_CONTRL_ACTIVE 1
963 /* Scan state - paging/inquiry/trying to connect*/
964 #define BTM_CONTRL_SCAN 2
965 /* Idle state - page scan, LE advt, inquiry scan */
966 #define BTM_CONTRL_IDLE 3
967
968 typedef uint8_t tBTM_CONTRL_STATE;
969
970 // Bluetooth Quality Report - Report receiver
971 typedef void(tBTM_BT_QUALITY_REPORT_RECEIVER)(uint8_t len, uint8_t* p_stream);
972
973 struct tREMOTE_VERSION_INFO {
974 uint8_t lmp_version{0};
975 uint16_t lmp_subversion{0};
976 uint16_t manufacturer{0};
977 bool valid{false};
ToStringtREMOTE_VERSION_INFO978 std::string ToString() const {
979 return (valid) ? base::StringPrintf("%02hhu-%05hu-%05hu", lmp_version,
980 lmp_subversion, manufacturer)
981 : std::string("UNKNOWN");
982 }
983 };
984 using remote_version_info = tREMOTE_VERSION_INFO;
985
986 #endif // BTM_API_TYPES_H
987