1 /* gap.h - Bluetooth tester headers */ 2 3 /* 4 * Copyright (c) 2015-2016 Intel Corporation 5 * Copyright (c) 2022 Codecoup 6 * 7 * SPDX-License-Identifier: Apache-2.0 8 */ 9 10 #include <stddef.h> 11 #include <stdint.h> 12 13 #include <zephyr/bluetooth/addr.h> 14 15 /* GAP Service */ 16 /* commands */ 17 #define BTP_GAP_READ_SUPPORTED_COMMANDS 0x01 18 struct btp_gap_read_supported_commands_rp { 19 uint8_t data[0]; 20 } __packed; 21 22 #define BTP_GAP_READ_CONTROLLER_INDEX_LIST 0x02 23 struct btp_gap_read_controller_index_list_rp { 24 uint8_t num; 25 uint8_t index[]; 26 } __packed; 27 28 #define BTP_GAP_SETTINGS_POWERED 0 29 #define BTP_GAP_SETTINGS_CONNECTABLE 1 30 #define BTP_GAP_SETTINGS_FAST_CONNECTABLE 2 31 #define BTP_GAP_SETTINGS_DISCOVERABLE 3 32 #define BTP_GAP_SETTINGS_BONDABLE 4 33 #define BTP_GAP_SETTINGS_LINK_SEC_3 5 34 #define BTP_GAP_SETTINGS_SSP 6 35 #define BTP_GAP_SETTINGS_BREDR 7 36 #define BTP_GAP_SETTINGS_HS 8 37 #define BTP_GAP_SETTINGS_LE 9 38 #define BTP_GAP_SETTINGS_ADVERTISING 10 39 #define BTP_GAP_SETTINGS_SC 11 40 #define BTP_GAP_SETTINGS_DEBUG_KEYS 12 41 #define BTP_GAP_SETTINGS_PRIVACY 13 42 #define BTP_GAP_SETTINGS_CONTROLLER_CONFIG 14 43 #define BTP_GAP_SETTINGS_STATIC_ADDRESS 15 44 #define BTP_GAP_SETTINGS_SC_ONLY 16 45 #define BTP_GAP_SETTINGS_EXTENDED_ADVERTISING 17 46 47 #define BTP_GAP_READ_CONTROLLER_INFO 0x03 48 struct btp_gap_read_controller_info_rp { 49 bt_addr_t address; 50 uint32_t supported_settings; 51 uint32_t current_settings; 52 uint8_t cod[3]; 53 uint8_t name[249]; 54 uint8_t short_name[11]; 55 } __packed; 56 57 #define BTP_GAP_RESET 0x04 58 struct btp_gap_reset_rp { 59 uint32_t current_settings; 60 } __packed; 61 62 #define BTP_GAP_SET_POWERED 0x05 63 struct btp_gap_set_powered_cmd { 64 uint8_t powered; 65 } __packed; 66 struct btp_gap_set_powered_rp { 67 uint32_t current_settings; 68 } __packed; 69 70 #define BTP_GAP_SET_CONNECTABLE 0x06 71 struct btp_gap_set_connectable_cmd { 72 uint8_t connectable; 73 } __packed; 74 struct btp_gap_set_connectable_rp { 75 uint32_t current_settings; 76 } __packed; 77 78 #define BTP_GAP_SET_FAST_CONNECTABLE 0x07 79 struct btp_gap_set_fast_connectable_cmd { 80 uint8_t fast_connectable; 81 } __packed; 82 struct btp_gap_set_fast_connectable_rp { 83 uint32_t current_settings; 84 } __packed; 85 86 #define BTP_GAP_NON_DISCOVERABLE 0x00 87 #define BTP_GAP_GENERAL_DISCOVERABLE 0x01 88 #define BTP_GAP_LIMITED_DISCOVERABLE 0x02 89 90 #define BTP_GAP_SET_DISCOVERABLE 0x08 91 struct btp_gap_set_discoverable_cmd { 92 uint8_t discoverable; 93 } __packed; 94 struct btp_gap_set_discoverable_rp { 95 uint32_t current_settings; 96 } __packed; 97 98 #define BTP_GAP_SET_BONDABLE 0x09 99 struct btp_gap_set_bondable_cmd { 100 uint8_t bondable; 101 } __packed; 102 struct btp_gap_set_bondable_rp { 103 uint32_t current_settings; 104 } __packed; 105 106 #define BTP_GAP_ADDR_TYPE_IDENTITY 0 107 #define BTP_GAP_ADDR_TYPE_RESOLVABLE_PRIVATE 1 108 #define BTP_GAP_ADDR_TYPE_NON_RESOLVABLE_PRIVATE 2 109 110 #define BTP_GAP_START_ADVERTISING 0x0a 111 struct btp_gap_start_advertising_cmd { 112 uint8_t adv_data_len; 113 uint8_t scan_rsp_len; 114 uint8_t adv_sr_data[]; 115 /* 116 * This command is very unfortunate because it has two fields after variable 117 * data. Those needs to be handled explicitly by handler. 118 * uint32_t duration; 119 * uint8_t own_addr_type; 120 */ 121 } __packed; 122 struct btp_gap_start_advertising_rp { 123 uint32_t current_settings; 124 } __packed; 125 126 #define BTP_GAP_STOP_ADVERTISING 0x0b 127 struct btp_gap_stop_advertising_rp { 128 uint32_t current_settings; 129 } __packed; 130 131 #define BTP_GAP_DISCOVERY_FLAG_LE 0x01 132 #define BTP_GAP_DISCOVERY_FLAG_BREDR 0x02 133 #define BTP_GAP_DISCOVERY_FLAG_LIMITED 0x04 134 #define BTP_GAP_DISCOVERY_FLAG_LE_ACTIVE_SCAN 0x08 135 #define BTP_GAP_DISCOVERY_FLAG_LE_OBSERVE 0x10 136 #define BTP_GAP_DISCOVERY_FLAG_OWN_ID_ADDR 0x20 137 #define BTP_GAP_DISCOVERY_FLAG_USE_FILTER_LIST 0x40 138 139 #define BTP_GAP_START_DISCOVERY 0x0c 140 struct btp_gap_start_discovery_cmd { 141 uint8_t flags; 142 } __packed; 143 144 #define BTP_GAP_STOP_DISCOVERY 0x0d 145 146 #define BTP_GAP_CONNECT 0x0e 147 struct btp_gap_connect_cmd { 148 bt_addr_le_t address; 149 uint8_t own_addr_type; 150 } __packed; 151 152 #define BTP_GAP_DISCONNECT 0x0f 153 struct btp_gap_disconnect_cmd { 154 bt_addr_le_t address; 155 } __packed; 156 157 #define BTP_GAP_IO_CAP_DISPLAY_ONLY 0 158 #define BTP_GAP_IO_CAP_DISPLAY_YESNO 1 159 #define BTP_GAP_IO_CAP_KEYBOARD_ONLY 2 160 #define BTP_GAP_IO_CAP_NO_INPUT_OUTPUT 3 161 #define BTP_GAP_IO_CAP_KEYBOARD_DISPLAY 4 162 163 #define BTP_GAP_SET_IO_CAP 0x10 164 struct btp_gap_set_io_cap_cmd { 165 uint8_t io_cap; 166 } __packed; 167 168 #define BTP_GAP_PAIR 0x11 169 struct btp_gap_pair_cmd { 170 bt_addr_le_t address; 171 } __packed; 172 173 #define BTP_GAP_UNPAIR 0x12 174 struct btp_gap_unpair_cmd { 175 bt_addr_le_t address; 176 } __packed; 177 178 #define BTP_GAP_PASSKEY_ENTRY 0x13 179 struct btp_gap_passkey_entry_cmd { 180 bt_addr_le_t address; 181 uint32_t passkey; 182 } __packed; 183 184 #define BTP_GAP_PASSKEY_CONFIRM 0x14 185 struct btp_gap_passkey_confirm_cmd { 186 bt_addr_le_t address; 187 uint8_t match; 188 } __packed; 189 190 #define BTP_GAP_START_DIRECTED_ADV_HD BIT(0) 191 #define BTP_GAP_START_DIRECTED_ADV_OWN_ID BIT(1) 192 #define BTP_GAP_START_DIRECTED_ADV_PEER_RPA BIT(2) 193 194 #define BTP_GAP_START_DIRECTED_ADV 0x15 195 struct btp_gap_start_directed_adv_cmd { 196 bt_addr_le_t address; 197 uint16_t options; 198 } __packed; 199 struct btp_gap_start_directed_adv_rp { 200 uint32_t current_settings; 201 } __packed; 202 203 #define BTP_GAP_CONN_PARAM_UPDATE 0x16 204 struct btp_gap_conn_param_update_cmd { 205 bt_addr_le_t address; 206 uint16_t interval_min; 207 uint16_t interval_max; 208 uint16_t latency; 209 uint16_t timeout; 210 } __packed; 211 212 #define BTP_GAP_PAIRING_CONSENT 0x17 213 struct btp_gap_pairing_consent_cmd { 214 bt_addr_le_t address; 215 uint8_t consent; 216 } __packed; 217 218 #define BTP_GAP_OOB_LEGACY_SET_DATA 0x18 219 struct btp_gap_oob_legacy_set_data_cmd { 220 uint8_t oob_data[16]; 221 } __packed; 222 223 #define BTP_GAP_OOB_SC_GET_LOCAL_DATA 0x19 224 struct btp_gap_oob_sc_get_local_data_rp { 225 uint8_t rand[16]; 226 uint8_t conf[16]; 227 } __packed; 228 229 #define BTP_GAP_OOB_SC_SET_REMOTE_DATA 0x1a 230 struct btp_gap_oob_sc_set_remote_data_cmd { 231 uint8_t rand[16]; 232 uint8_t conf[16]; 233 } __packed; 234 235 #define BTP_GAP_SET_MITM 0x1b 236 struct btp_gap_set_mitm { 237 uint8_t mitm; 238 } __packed; 239 240 #define BTP_GAP_SET_FILTER_LIST 0x1c 241 struct btp_gap_set_filter_list { 242 uint8_t cnt; 243 bt_addr_le_t addr[]; 244 } __packed; 245 246 #define BTP_GAP_SET_PRIVACY 0x1d 247 #define BTP_GAP_SET_SC_ONLY 0x1e 248 #define BTP_GAP_SET_SC 0x1f 249 #define BTP_GAP_SET_MIN_ENC_KEY_SIZE 0x20 250 251 #define BTP_GAP_SET_EXTENDED_ADVERTISING 0x21 252 struct btp_gap_set_extended_advertising_cmd { 253 uint8_t settings; 254 } __packed; 255 struct btp_gap_set_extended_advertising_rp { 256 uint32_t current_settings; 257 } __packed; 258 259 #define BTP_GAP_PADV_CONFIGURE 0x22 260 /* bitmap of flags*/ 261 #define BTP_GAP_PADV_INCLUDE_TX_POWER BIT(0) 262 struct btp_gap_padv_configure_cmd { 263 uint8_t flags; 264 uint16_t interval_min; 265 uint16_t interval_max; 266 } __packed; 267 struct btp_gap_padv_configure_rp { 268 uint32_t current_settings; 269 } __packed; 270 271 #define BTP_GAP_PADV_START 0x23 272 struct btp_gap_padv_start_cmd { 273 uint8_t flags; 274 } __packed; 275 struct btp_gap_padv_start_rp { 276 uint32_t current_settings; 277 } __packed; 278 279 #define BTP_GAP_PADV_STOP 0x24 280 struct btp_gap_padv_stop_cmd { 281 } __packed; 282 struct btp_gap_padv_stop_rp { 283 uint32_t current_settings; 284 } __packed; 285 286 #define BTP_GAP_PADV_SET_DATA 0x25 287 struct btp_gap_padv_set_data_cmd { 288 uint16_t data_len; 289 uint8_t data[]; 290 } __packed; 291 292 #define BTP_GAP_PADV_CREATE_SYNC_FLAG_REPORTS_DISABLED 0x01 293 #define BTP_GAP_PADV_CREATE_SYNC_FLAG_FILTER_DUPLICATES 0x02 294 295 #define BTP_GAP_PADV_CREATE_SYNC 0x26 296 struct btp_gap_padv_create_sync_cmd { 297 bt_addr_le_t address; 298 uint8_t advertiser_sid; 299 uint16_t skip; 300 uint16_t sync_timeout; 301 uint8_t flags; 302 } __packed; 303 304 #define BTP_GAP_PADV_SYNC_TRANSFER_SET_INFO 0x27 305 struct btp_gap_padv_sync_transfer_set_info_cmd { 306 bt_addr_le_t address; 307 uint16_t service_data; 308 } __packed; 309 310 #define BTP_GAP_PADV_SYNC_TRANSFER_START 0x28 311 struct btp_gap_padv_sync_transfer_start_cmd { 312 uint16_t sync_handle; 313 bt_addr_le_t address; 314 uint16_t service_data; 315 } __packed; 316 317 #define BTP_GAP_PADV_SYNC_TRANSFER_RECV_FLAG_REPORTS_DISABLED 0x01 318 319 #define BTP_GAP_PADV_SYNC_TRANSFER_RECV 0x29 320 struct btp_gap_padv_sync_transfer_recv_cmd { 321 bt_addr_le_t address; 322 uint16_t skip; 323 uint16_t sync_timeout; 324 uint8_t flags; 325 } __packed; 326 327 #define BTP_GAP_PAIR_V2_MODE_1 0x01 328 #define BTP_GAP_PAIR_V2_MODE_2 0x02 329 #define BTP_GAP_PAIR_V2_MODE_3 0x03 330 #define BTP_GAP_PAIR_V2_MODE_4 0x04 331 #define BTP_GAP_PAIR_V2_MODE_ANY 0xFF 332 333 #define BTP_GAP_PAIR_V2_LEVEL_0 0x00 334 #define BTP_GAP_PAIR_V2_LEVEL_1 0x01 335 #define BTP_GAP_PAIR_V2_LEVEL_2 0x02 336 #define BTP_GAP_PAIR_V2_LEVEL_3 0x03 337 #define BTP_GAP_PAIR_V2_LEVEL_4 0x04 338 #define BTP_GAP_PAIR_V2_LEVEL_ANY 0xFF 339 340 #define BTP_GAP_PAIR_V2_FLAG_FORCE_PAIR BIT(0) 341 342 #define BTP_GAP_PAIR_V2 0x2A 343 struct btp_gap_pair_v2_cmd { 344 bt_addr_le_t address; 345 uint8_t mode; 346 uint8_t level; 347 uint8_t flags; 348 } __packed; 349 350 #define BTP_GAP_SET_RPA_TIMEOUT 0x30 351 struct btp_gap_set_rpa_timeout_cmd { 352 uint16_t rpa_timeout; 353 } __packed; 354 355 /* events */ 356 #define BTP_GAP_EV_NEW_SETTINGS 0x80 357 struct btp_gap_new_settings_ev { 358 uint32_t current_settings; 359 } __packed; 360 361 #define BTP_GAP_DEVICE_FOUND_FLAG_RSSI 0x01 362 #define BTP_GAP_DEVICE_FOUND_FLAG_AD 0x02 363 #define BTP_GAP_DEVICE_FOUND_FLAG_SD 0x04 364 365 #define BTP_GAP_EV_DEVICE_FOUND 0x81 366 struct btp_gap_device_found_ev { 367 bt_addr_le_t address; 368 int8_t rssi; 369 uint8_t flags; 370 uint16_t eir_data_len; 371 uint8_t eir_data[]; 372 } __packed; 373 374 #define BTP_GAP_EV_DEVICE_CONNECTED 0x82 375 struct btp_gap_device_connected_ev { 376 bt_addr_le_t address; 377 uint16_t interval; 378 uint16_t latency; 379 uint16_t timeout; 380 } __packed; 381 382 #define BTP_GAP_EV_DEVICE_DISCONNECTED 0x83 383 struct btp_gap_device_disconnected_ev { 384 bt_addr_le_t address; 385 } __packed; 386 387 #define BTP_GAP_EV_PASSKEY_DISPLAY 0x84 388 struct btp_gap_passkey_display_ev { 389 bt_addr_le_t address; 390 uint32_t passkey; 391 } __packed; 392 393 #define BTP_GAP_EV_PASSKEY_ENTRY_REQ 0x85 394 struct btp_gap_passkey_entry_req_ev { 395 bt_addr_le_t address; 396 } __packed; 397 398 #define BTP_GAP_EV_PASSKEY_CONFIRM_REQ 0x86 399 struct btp_gap_passkey_confirm_req_ev { 400 bt_addr_le_t address; 401 uint32_t passkey; 402 } __packed; 403 404 #define BTP_GAP_EV_IDENTITY_RESOLVED 0x87 405 struct btp_gap_identity_resolved_ev { 406 bt_addr_le_t address; 407 bt_addr_le_t identity_address; 408 } __packed; 409 410 #define BTP_GAP_EV_CONN_PARAM_UPDATE 0x88 411 struct btp_gap_conn_param_update_ev { 412 bt_addr_le_t address; 413 uint16_t interval; 414 uint16_t latency; 415 uint16_t timeout; 416 } __packed; 417 418 #define BTP_GAP_SEC_LEVEL_UNAUTH_ENC 0x01 419 #define BTP_GAP_SEC_LEVEL_AUTH_ENC 0x02 420 #define BTP_GAP_SEC_LEVEL_AUTH_SC 0x03 421 422 #define BTP_GAP_EV_SEC_LEVEL_CHANGED 0x89 423 struct btp_gap_sec_level_changed_ev { 424 bt_addr_le_t address; 425 uint8_t sec_level; 426 } __packed; 427 428 #define BTP_GAP_EV_PAIRING_CONSENT_REQ 0x8a 429 struct btp_gap_pairing_consent_req_ev { 430 bt_addr_le_t address; 431 } __packed; 432 433 #define BTP_GAP_EV_BOND_LOST 0x8b 434 struct btp_gap_bond_lost_ev { 435 bt_addr_le_t address; 436 } __packed; 437 438 #define BTP_GAP_EV_PAIRING_FAILED 0x8c 439 struct btp_gap_bond_pairing_failed_ev { 440 bt_addr_le_t address; 441 uint8_t reason; 442 } __packed; 443 444 #define BTP_GAP_EV_PERIODIC_SYNC_ESTABLISHED 0x8d 445 struct btp_gap_ev_periodic_sync_established_ev { 446 bt_addr_le_t address; 447 uint16_t sync_handle; 448 uint8_t status; 449 } __packed; 450 451 #define BTP_GAP_EV_PERIODIC_SYNC_LOST 0x8e 452 struct btp_gap_ev_periodic_sync_lost_ev { 453 uint16_t sync_handle; 454 uint8_t reason; 455 } __packed; 456 457 #define BTP_GAP_EV_PERIODIC_REPORT 0x8f 458 struct btp_gap_ev_periodic_report_ev { 459 uint16_t sync_handle; 460 uint8_t tx_power; 461 uint8_t rssi; 462 uint8_t cte_type; 463 uint8_t data_status; 464 uint8_t data_len; 465 uint8_t data[]; 466 } __packed; 467 468 #define BTP_GAP_EV_PERIODIC_TRANSFER_RECEIVED 0x90 469 struct btp_gap_ev_periodic_transfer_received_ev { 470 bt_addr_le_t adv_address; 471 uint16_t sync_handle; 472 uint8_t status; 473 bt_addr_le_t peer_address; 474 } __packed; 475 476 #define BTP_GAP_EV_ENCRYPTION_CHANGE 0x91 477 struct btp_gap_encryption_change_ev { 478 bt_addr_le_t address; 479 uint8_t enabled; 480 uint8_t key_size; 481 } __packed; 482 483 #if defined(CONFIG_BT_EXT_ADV) 484 struct bt_le_per_adv_param; 485 struct bt_le_per_adv_sync_param; 486 struct bt_le_adv_param; 487 struct bt_data; 488 struct bt_le_ext_adv *tester_gap_ext_adv_get(uint8_t ext_adv_idx); 489 struct bt_le_per_adv_sync *tester_gap_padv_get(void); 490 int tester_gap_create_adv_instance(struct bt_le_adv_param *param, uint8_t own_addr_type, 491 const struct bt_data *ad, size_t ad_len, 492 const struct bt_data *sd, size_t sd_len, 493 uint32_t *settings, struct bt_le_ext_adv **ext_adv); 494 int tester_gap_stop_ext_adv(struct bt_le_ext_adv *ext_adv); 495 int tester_gap_start_ext_adv(struct bt_le_ext_adv *ext_adv); 496 int tester_gap_padv_configure(struct bt_le_ext_adv *ext_adv, 497 const struct bt_le_per_adv_param *param); 498 int tester_gap_padv_set_data(struct bt_le_ext_adv *ext_adv, struct bt_data *per_ad, uint8_t ad_len); 499 int tester_gap_padv_start(struct bt_le_ext_adv *ext_adv); 500 int tester_gap_padv_stop(struct bt_le_ext_adv *ext_adv); 501 int tester_gap_padv_create_sync(struct bt_le_per_adv_sync_param *create_params); 502 int tester_gap_padv_stop_sync(void); 503 #endif /* defined(CONFIG_BT_EXT_ADV) */ 504