1 /* 2 * Copyright (C) 2015 BlueKitchen GmbH 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of the copyright holders nor the names of 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 4. Any redistribution, use, or modification is done solely for 17 * personal benefit and not for any commercial purpose or for 18 * monetary gain. 19 * 20 * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 24 * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 * SUCH DAMAGE. 32 * 33 * Please inquire about commercial licensing options at 34 * [email protected] 35 * 36 */ 37 38 /* 39 * bluetooth.h 40 * 41 * Numbers defined or derived from the official Bluetooth specification 42 */ 43 44 #ifndef __BLUETOOTH_H 45 #define __BLUETOOTH_H 46 47 #include <stdint.h> 48 49 /** 50 * HCI Transport 51 */ 52 53 /** 54 * packet types - used in BTstack and over the H4 UART interface 55 */ 56 #define HCI_COMMAND_DATA_PACKET 0x01 57 #define HCI_ACL_DATA_PACKET 0x02 58 #define HCI_SCO_DATA_PACKET 0x03 59 #define HCI_EVENT_PACKET 0x04 60 61 // packet header sizes 62 #define HCI_CMD_HEADER_SIZE 3 63 #define HCI_ACL_HEADER_SIZE 4 64 #define HCI_SCO_HEADER_SIZE 3 65 #define HCI_EVENT_HEADER_SIZE 2 66 67 /** 68 * HCI Layer 69 */ 70 71 // 72 // Error Codes 73 // 74 75 // from Bluetooth Core Specification 76 #define ERROR_CODE_UNKNOWN_HCI_COMMAND 0x01 77 #define ERROR_CODE_UNKNOWN_CONNECTION_IDENTIFIER 0x02 78 #define ERROR_CODE_HARDWARE_FAILURE 0x03 79 #define ERROR_CODE_PAGE_TIMEOUT 0x04 80 #define ERROR_CODE_AUTHENTICATION_FAILURE 0x05 81 #define ERROR_CODE_PIN_OR_KEY_MISSING 0x06 82 #define ERROR_CODE_MEMORY_CAPACITY_EXCEEDED 0x07 83 #define ERROR_CODE_CONNECTION_TIMEOUT 0x08 84 #define ERROR_CODE_CONNECTION_LIMIT_EXCEEDED 0x09 85 #define ERROR_CODE_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE_EXCEEDED 0x0A 86 #define ERROR_CODE_ACL_CONNECTION_ALREADY_EXISTS 0x0B 87 #define ERROR_CODE_COMMAND_DISALLOWED 0x0C 88 #define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES 0x0D 89 #define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_SECURITY_REASONS 0x0E 90 #define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR 0x0F 91 #define ERROR_CODE_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10 92 #define ERROR_CODE_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE 0x11 93 #define ERROR_CODE_INVALID_HCI_COMMAND_PARAMETERS 0x12 94 #define ERROR_CODE_REMOTE_USER_TERMINATED_CONNECTION 0x13 95 #define ERROR_CODE_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES 0x14 96 #define ERROR_CODE_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_POWER_OFF 0x15 97 #define ERROR_CODE_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16 98 #define ERROR_CODE_REPEATED_ATTEMPTS 0x17 99 #define ERROR_CODE_PAIRING_NOT_ALLOWED 0x18 100 #define ERROR_CODE_UNKNOWN_LMP_PDU 0x19 101 #define ERROR_CODE_UNSUPPORTED_REMOTE_FEATURE_UNSUPPORTED_LMP_FEATURE 0x1A 102 #define ERROR_CODE_SCO_OFFSET_REJECTED 0x1B 103 #define ERROR_CODE_SCO_INTERVAL_REJECTED 0x1C 104 #define ERROR_CODE_SCO_AIR_MODE_REJECTED 0x1D 105 #define ERROR_CODE_INVALID_LMP_PARAMETERS_INVALID_LL_PARAMETERS 0x1E 106 #define ERROR_CODE_UNSPECIFIED_ERROR 0x1F 107 #define ERROR_CODE_UNSUPPORTED_LMP_PARAMETER_VALUE_UNSUPPORTED_LL_PARAMETER_VALUE 0x20 108 #define ERROR_CODE_ROLE_CHANGE_NOT_ALLOWED 0x21 109 #define ERROR_CODE_LMP_RESPONSE_TIMEOUT_LL_RESPONSE_TIMEOUT 0x22 110 #define ERROR_CODE_LMP_ERROR_TRANSACTION_COLLISION 0x23 111 #define ERROR_CODE_LMP_PDU_NOT_ALLOWED 0x24 112 #define ERROR_CODE_ENCRYPTION_MODE_NOT_ACCEPTABLE 0x25 113 #define ERROR_CODE_LINK_KEY_CANNOT_BE_CHANGED 0x26 114 #define ERROR_CODE_REQUESTED_QOS_NOT_SUPPORTED 0x27 115 #define ERROR_CODE_INSTANT_PASSED 0x28 116 #define ERROR_CODE_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29 117 #define ERROR_CODE_DIFFERENT_TRANSACTION_COLLISION 0x2A 118 #define ERROR_CODE_RESERVED 0x2B 119 #define ERROR_CODE_QOS_UNACCEPTABLE_PARAMETER 0x2C 120 #define ERROR_CODE_QOS_REJECTED 0x2D 121 #define ERROR_CODE_CHANNEL_CLASSIFICATION_NOT_SUPPORTED 0x2E 122 #define ERROR_CODE_INSUFFICIENT_SECURITY 0x2F 123 #define ERROR_CODE_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30 124 // #define ERROR_CODE_RESERVED 125 #define ERROR_CODE_ROLE_SWITCH_PENDING 0x32 126 // #define ERROR_CODE_RESERVED 127 #define ERROR_CODE_RESERVED_SLOT_VIOLATION 0x34 128 #define ERROR_CODE_ROLE_SWITCH_FAILED 0x35 129 #define ERROR_CODE_EXTENDED_INQUIRY_RESPONSE_TOO_LARGE 0x36 130 #define ERROR_CODE_SECURE_SIMPLE_PAIRING_NOT_SUPPORTED_BY_HOST 0x37 131 #define ERROR_CODE_HOST_BUSY_PAIRING 0x38 132 #define ERROR_CODE_CONNECTION_REJECTED_DUE_TO_NO_SUITABLE_CHANNEL_FOUND 0x39 133 #define ERROR_CODE_CONTROLLER_BUSY 0x3A 134 #define ERROR_CODE_UNACCEPTABLE_CONNECTION_PARAMETERS 0x3B 135 #define ERROR_CODE_DIRECTED_ADVERTISING_TIMEOUT 0x3C 136 #define ERROR_CODE_CONNECTION_TERMINATED_DUE_TO_MIC_FAILURE 0x3D 137 #define ERROR_CODE_CONNECTION_FAILED_TO_BE_ESTABLISHED 0x3E 138 #define ERROR_CODE_MAC_CONNECTION_FAILED 0x3F 139 #define ERROR_CODE_COARSE_CLOCK_ADJUSTMENT_REJECTED_BUT_WILL_TRY_TO_ADJUST_USING_CLOCK_DRAGGING 0x40 140 141 // HCI roles 142 #define HCI_ROLE_MASTER 0 143 #define HCI_ROLE_SLAVE 1 144 145 // packet sizes (max payload) 146 #define HCI_ACL_DM1_SIZE 17 147 #define HCI_ACL_DH1_SIZE 27 148 #define HCI_ACL_2DH1_SIZE 54 149 #define HCI_ACL_3DH1_SIZE 83 150 #define HCI_ACL_DM3_SIZE 121 151 #define HCI_ACL_DH3_SIZE 183 152 #define HCI_ACL_DM5_SIZE 224 153 #define HCI_ACL_DH5_SIZE 339 154 #define HCI_ACL_2DH3_SIZE 367 155 #define HCI_ACL_3DH3_SIZE 552 156 #define HCI_ACL_2DH5_SIZE 679 157 #define HCI_ACL_3DH5_SIZE 1021 158 159 #define HCI_EVENT_PAYLOAD_SIZE 255 160 #define HCI_CMD_PAYLOAD_SIZE 255 161 162 #define LE_ADVERTISING_DATA_SIZE 31 163 164 /** 165 * Default INQ Mode 166 */ 167 #define HCI_INQUIRY_LAP 0x9E8B33L // 0x9E8B33: General/Unlimited Inquiry Access Code (GIAC) 168 169 /** 170 * SSP IO Capabilities 171 */ 172 #define SSP_IO_CAPABILITY_DISPLAY_ONLY 0 173 #define SSP_IO_CAPABILITY_DISPLAY_YES_NO 1 174 #define SSP_IO_CAPABILITY_KEYBOARD_ONLY 2 175 #define SSP_IO_CAPABILITY_NO_INPUT_NO_OUTPUT 3 176 #define SSP_IO_CAPABILITY_UNKNOWN 0xff 177 178 179 /** 180 * SSP Authentication Requirements, see IO Capability Request Reply Commmand 181 */ 182 183 // Numeric comparison with automatic accept allowed. 184 #define SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_NO_BONDING 0x00 185 186 // Use IO Capabilities to deter- mine authentication procedure 187 #define SSP_IO_AUTHREQ_MITM_PROTECTION_REQUIRED_NO_BONDING 0x01 188 189 // Numeric compar- ison with automatic accept allowed. 190 #define SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_DEDICATED_BONDING 0x02 191 192 // Use IO Capabilities to determine authentication procedure 193 #define SSP_IO_AUTHREQ_MITM_PROTECTION_REQUIRED_DEDICATED_BONDING 0x03 194 195 // Numeric Compari- son with automatic accept allowed. 196 #define SSP_IO_AUTHREQ_MITM_PROTECTION_NOT_REQUIRED_GENERAL_BONDING 0x04 197 198 // Use IO capabilities to determine authentication procedure. 199 #define SSP_IO_AUTHREQ_MITM_PROTECTION_REQUIRED_GENERAL_BONDING 0x05 200 201 202 // OGFs 203 #define OGF_LINK_CONTROL 0x01 204 #define OGF_LINK_POLICY 0x02 205 #define OGF_CONTROLLER_BASEBAND 0x03 206 #define OGF_INFORMATIONAL_PARAMETERS 0x04 207 #define OGF_STATUS_PARAMETERS 0x05 208 #define OGF_TESTING 0x06 209 #define OGF_LE_CONTROLLER 0x08 210 #define OGF_VENDOR 0x3f 211 212 213 // Events from host controller to host 214 215 /** 216 * @format 1 217 * @param status 218 */ 219 #define HCI_EVENT_INQUIRY_COMPLETE 0x01 220 // no format yet, can contain multiple results 221 222 /** 223 * @format 1B11132 224 * @param num_responses 225 * @param bd_addr 226 * @param page_scan_repetition_mode 227 * @param reserved1 228 * @param reserved2 229 * @param class_of_device 230 * @param clock_offset 231 */ 232 #define HCI_EVENT_INQUIRY_RESULT 0x02 233 234 /** 235 * @format 12B11 236 * @param status 237 * @param connection_handle 238 * @param bd_addr 239 * @param link_type 240 * @param encryption_enabled 241 */ 242 #define HCI_EVENT_CONNECTION_COMPLETE 0x03 243 /** 244 * @format B31 245 * @param bd_addr 246 * @param class_of_device 247 * @param link_type 248 */ 249 #define HCI_EVENT_CONNECTION_REQUEST 0x04 250 /** 251 * @format 121 252 * @param status 253 * @param connection_handle 254 * @param reason 255 */ 256 #define HCI_EVENT_DISCONNECTION_COMPLETE 0x05 257 /** 258 * @format 12 259 * @param status 260 * @param connection_handle 261 */ 262 #define HCI_EVENT_AUTHENTICATION_COMPLETE_EVENT 0x06 263 /** 264 * @format 1BN 265 * @param status 266 * @param bd_addr 267 * @param remote_name 268 */ 269 #define HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07 270 /** 271 * @format 121 272 * @param status 273 * @param connection_handle 274 * @param encryption_enabled 275 */ 276 #define HCI_EVENT_ENCRYPTION_CHANGE 0x08 277 /** 278 * @format 12 279 * @param status 280 * @param connection_handle 281 */ 282 #define HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09 283 /** 284 * @format 121 285 * @param status 286 * @param connection_handle 287 * @param key_flag 288 */ 289 #define HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0A 290 #define HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE 0x0B 291 #define HCI_EVENT_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C 292 #define HCI_EVENT_QOS_SETUP_COMPLETE 0x0D 293 294 /** 295 * @format 12R 296 * @param num_hci_command_packets 297 * @param command_opcode 298 * @param return_parameters 299 */ 300 #define HCI_EVENT_COMMAND_COMPLETE 0x0E 301 /** 302 * @format 112 303 * @param status 304 * @param num_hci_command_packets 305 * @param command_opcode 306 */ 307 #define HCI_EVENT_COMMAND_STATUS 0x0F 308 309 /** 310 * @format 121 311 * @param hardware_code 312 */ 313 #define HCI_EVENT_HARDWARE_ERROR 0x10 314 315 #define HCI_EVENT_FLUSH_OCCURED 0x11 316 317 /** 318 * @format 1B1 319 * @param status 320 * @param bd_addr 321 * @param role 322 */ 323 #define HCI_EVENT_ROLE_CHANGE 0x12 324 325 #define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13 326 #define HCI_EVENT_MODE_CHANGE_EVENT 0x14 327 #define HCI_EVENT_RETURN_LINK_KEYS 0x15 328 #define HCI_EVENT_PIN_CODE_REQUEST 0x16 329 #define HCI_EVENT_LINK_KEY_REQUEST 0x17 330 #define HCI_EVENT_LINK_KEY_NOTIFICATION 0x18 331 #define HCI_EVENT_DATA_BUFFER_OVERFLOW 0x1A 332 #define HCI_EVENT_MAX_SLOTS_CHANGED 0x1B 333 #define HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE 0x1C 334 #define HCI_EVENT_PACKET_TYPE_CHANGED 0x1D 335 336 /** 337 * @format 1B11321 338 * @param num_responses 339 * @param bd_addr 340 * @param page_scan_repetition_mode 341 * @param reserved 342 * @param class_of_device 343 * @param clock_offset 344 * @param rssi 345 */ 346 #define HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22 347 348 /** 349 * @format 1HB111221 350 * @param status 351 * @param handle 352 * @param bd_addr 353 * @param link_type 354 * @param transmission_interval 355 * @param retransmission_interval 356 * @param rx_packet_length 357 * @param tx_packet_length 358 * @param air_mode 359 */ 360 #define HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x2C 361 362 // TODO: serialize extended_inquiry_response and provide parser 363 /** 364 * @format 1B11321 365 * @param num_responses 366 * @param bd_addr 367 * @param page_scan_repetition_mode 368 * @param reserved 369 * @param class_of_device 370 * @param clock_offset 371 * @param rssi 372 */ 373 #define HCI_EVENT_EXTENDED_INQUIRY_RESPONSE 0x2F 374 375 /** 376 * @format 1H 377 * @param status 378 * @param handle 379 */ 380 #define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30 381 382 #define HCI_EVENT_IO_CAPABILITY_REQUEST 0x31 383 #define HCI_EVENT_IO_CAPABILITY_RESPONSE 0x32 384 #define HCI_EVENT_USER_CONFIRMATION_REQUEST 0x33 385 #define HCI_EVENT_USER_PASSKEY_REQUEST 0x34 386 #define HCI_EVENT_REMOTE_OOB_DATA_REQUEST 0x35 387 #define HCI_EVENT_SIMPLE_PAIRING_COMPLETE 0x36 388 389 #define HCI_EVENT_LE_META 0x3E 390 391 #define HCI_EVENT_VENDOR_SPECIFIC 0xFF 392 393 /** 394 * @format 11211B2221 395 * @param subevent_code 396 * @param status 397 * @param connection_handle 398 * @param role 399 * @param peer_address_type 400 * @param peer_address 401 * @param conn_interval 402 * @param conn_latency 403 * @param supervision_timeout 404 * @param master_clock_accuracy 405 */ 406 #define HCI_SUBEVENT_LE_CONNECTION_COMPLETE 0x01 407 #define HCI_SUBEVENT_LE_ADVERTISING_REPORT 0x02 408 #define HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE 0x03 409 #define HCI_SUBEVENT_LE_READ_REMOTE_USED_FEATURES_COMPLETE 0x04 410 #define HCI_SUBEVENT_LE_LONG_TERM_KEY_REQUEST 0x05 411 412 // last used HCI_EVENT in 2.1 is 0x3d 413 // last used HCI_EVENT in 4.1 is 0x57 414 415 /** 416 * L2CAP Layer 417 */ 418 419 #define L2CAP_HEADER_SIZE 4 420 421 #define L2CAP_SIG_ID_INVALID 0 422 423 // size of HCI ACL + L2CAP Header for regular data packets (8) 424 #define COMPLETE_L2CAP_HEADER (HCI_ACL_HEADER_SIZE + L2CAP_HEADER_SIZE) 425 426 // minimum signaling MTU 427 #define L2CAP_MINIMAL_MTU 48 428 #define L2CAP_DEFAULT_MTU 672 429 430 // Minimum/default MTU 431 #define L2CAP_LE_DEFAULT_MTU 23 432 433 // L2CAP Fixed Channel IDs 434 #define L2CAP_CID_SIGNALING 0x0001 435 #define L2CAP_CID_CONNECTIONLESS_CHANNEL 0x0002 436 #define L2CAP_CID_ATTRIBUTE_PROTOCOL 0x0004 437 #define L2CAP_CID_SIGNALING_LE 0x0005 438 #define L2CAP_CID_SECURITY_MANAGER_PROTOCOL 0x0006 439 440 // L2CAP Configuration Result Codes 441 #define L2CAP_CONF_RESULT_UNKNOWN_OPTIONS 0x0003 442 443 // L2CAP Reject Result Codes 444 #define L2CAP_REJ_CMD_UNKNOWN 0x0000 445 446 // Response Timeout eXpired 447 #define L2CAP_RTX_TIMEOUT_MS 10000 448 449 // Extended Response Timeout eXpired 450 #define L2CAP_ERTX_TIMEOUT_MS 120000 451 452 // Fixed PSM numbers 453 #define PSM_SDP 0x01 454 #define PSM_RFCOMM 0x03 455 #define PSM_BNEP 0x0F 456 #define PSM_HID_CONTROL 0x11 457 #define PSM_HID_INTERRUPT 0x13 458 459 /** 460 * SDP Protocl 461 */ 462 463 // PDU Types 464 typedef enum { 465 SDP_Invalid = 0, 466 SDP_ErrorResponse = 1, 467 SDP_ServiceSearchRequest, 468 SDP_ServiceSearchResponse, 469 SDP_ServiceAttributeRequest, 470 SDP_ServiceAttributeResponse, 471 SDP_ServiceSearchAttributeRequest, 472 SDP_ServiceSearchAttributeResponse 473 } SDP_PDU_ID_t; 474 475 // UNIVERSAL ATTRIBUTE DEFINITIONS 476 #define SDP_ServiceRecordHandle 0x0000 477 #define SDP_ServiceClassIDList 0x0001 478 #define SDP_ServiceRecordState 0x0002 479 #define SDP_ServiceID 0x0003 480 #define SDP_ProtocolDescriptorList 0x0004 481 #define SDP_BrowseGroupList 0x0005 482 #define SDP_LanguageBaseAttributeIDList 0x0006 483 #define SDP_ServiceInfoTimeToLive 0x0007 484 #define SDP_ServiceAvailability 0x0008 485 #define SDP_BluetoothProfileDescriptorList 0x0009 486 #define SDP_DocumentationURL 0x000a 487 #define SDP_ClientExecutableURL 0x000b 488 #define SDP_IconURL 0x000c 489 #define SDP_AdditionalProtocolDescriptorList 0x000d 490 #define SDP_SupportedFormatsList 0x0303 491 492 // SERVICE CLASSES 493 #define SDP_OBEXObjectPush 0x1105 494 #define SDP_OBEXFileTransfer 0x1106 495 #define SDP_PublicBrowseGroup 0x1002 496 #define SDP_HSP 0x1108 497 #define SDP_Headset_AG 0x1112 498 #define SDP_PANU 0x1115 499 #define SDP_NAP 0x1116 500 #define SDP_GN 0x1117 501 #define SDP_Handsfree 0x111E 502 #define SDP_HandsfreeAudioGateway 0x111F 503 #define SDP_Headset_HS 0x1131 504 #define SDP_GenericAudio 0x1203 505 506 507 // PROTOCOLS 508 #define SDP_SDPProtocol 0x0001 509 #define SDP_UDPProtocol 0x0002 510 #define SDP_RFCOMMProtocol 0x0003 511 #define SDP_OBEXProtocol 0x0008 512 #define SDP_L2CAPProtocol 0x0100 513 #define SDP_BNEPProtocol 0x000F 514 #define SDP_AVDTPProtocol 0x0019 515 516 // OFFSETS FOR LOCALIZED ATTRIBUTES - SDP_LanguageBaseAttributeIDList 517 #define SDP_Offest_ServiceName 0x0000 518 #define SDP_Offest_ServiceDescription 0x0001 519 #define SDP_Offest_ProviderName 0x0002 520 521 // OBEX 522 #define SDP_vCard_2_1 0x01 523 #define SDP_vCard_3_0 0x02 524 #define SDP_vCal_1_0 0x03 525 #define SDP_iCal_2_0 0x04 526 #define SDP_vNote 0x05 527 #define SDP_vMessage 0x06 528 #define SDP_OBEXFileTypeAny 0xFF 529 530 /** 531 * RFCOMM Protocol 532 */ 533 534 // Control field values bit no. 1 2 3 4 PF 6 7 8 535 #define BT_RFCOMM_SABM 0x3F // 1 1 1 1 1 1 0 0 536 #define BT_RFCOMM_UA 0x73 // 1 1 0 0 1 1 1 0 537 #define BT_RFCOMM_DM 0x0F // 1 1 1 1 0 0 0 0 538 #define BT_RFCOMM_DM_PF 0x1F // 1 1 1 1 1 0 0 0 539 #define BT_RFCOMM_DISC 0x53 // 1 1 0 0 1 0 1 0 540 #define BT_RFCOMM_UIH 0xEF // 1 1 1 1 0 1 1 1 541 #define BT_RFCOMM_UIH_PF 0xFF // 1 1 1 1 0 1 1 1 542 543 // Multiplexer message types 544 #define BT_RFCOMM_CLD_CMD 0xC3 545 #define BT_RFCOMM_FCON_CMD 0xA3 546 #define BT_RFCOMM_FCON_RSP 0xA1 547 #define BT_RFCOMM_FCOFF_CMD 0x63 548 #define BT_RFCOMM_FCOFF_RSP 0x61 549 #define BT_RFCOMM_MSC_CMD 0xE3 550 #define BT_RFCOMM_MSC_RSP 0xE1 551 #define BT_RFCOMM_NSC_RSP 0x11 552 #define BT_RFCOMM_PN_CMD 0x83 553 #define BT_RFCOMM_PN_RSP 0x81 554 #define BT_RFCOMM_RLS_CMD 0x53 555 #define BT_RFCOMM_RLS_RSP 0x51 556 #define BT_RFCOMM_RPN_CMD 0x93 557 #define BT_RFCOMM_RPN_RSP 0x91 558 #define BT_RFCOMM_TEST_CMD 0x23 559 #define BT_RFCOMM_TEST_RSP 0x21 560 561 // Line Status 562 #define LINE_STATUS_NO_ERROR 0x00 563 #define LINE_STATUS_OVERRUN_ERROR 0x03 564 #define LINE_STATUS_PARITY_ERORR 0x05 565 #define LINE_STATUS_FRAMING_ERROR 0x09 566 567 // Modem Status Flags 568 #define MODEM_STATUS_FC 0x02 569 #define MODEM_STATUS_RTC 0x04 570 #define MODEM_STATUS_RTR 0x08 571 #define MODEM_STATUS_IC 0x40 572 #define MODEM_STATUS_DV 0x80 573 574 typedef enum rpn_baud { 575 RPN_BAUD_2400 = 0, 576 RPN_BAUD_4800, 577 RPN_BAUD_7200, 578 RPN_BAUD_9600, 579 RPN_BAUD_19200, 580 RPN_BAUD_38400, 581 RPN_BAUD_57600, 582 RPN_BAUD_115200, 583 RPN_BAUD_230400 584 } rpn_baud_t; 585 586 typedef enum rpn_data_bits { 587 RPN_DATA_BITS_5 = 0, 588 RPN_DATA_BITS_6 = 0, 589 RPN_DATA_BITS_7 = 0, 590 RPN_DATA_BITS_8 = 0 591 } rpn_data_bits_t; 592 593 typedef enum rpn_stop_bits { 594 RPN_STOP_BITS_1_0 = 0, 595 RPN_STOP_BITS_1_5 596 } rpn_stop_bits_t; 597 598 typedef enum rpn_parity { 599 RPN_PARITY_NONE = 0, 600 RPN_PARITY_ODD = 1, 601 RPN_PARITY_EVEN = 3, 602 RPN_PARITY_MARK = 5, 603 RPN_PARITY_SPACE = 7, 604 } rpn_parity_t; 605 606 typedef enum rpn_flow_control { 607 RPN_FLOW_CONTROL_XONXOFF_ON_INPUT = 1 << 0, 608 RPN_FLOW_CONTROL_XONXOFF_ON_OUTPUT = 1 << 1, 609 RPN_FLOW_CONTROL_RTR_ON_INPUT = 1 << 2, 610 RPN_FLOW_CONTROL_RTR_ON_OUTPUT = 1 << 3, 611 RPN_FLOW_CONTROL_RTC_ON_INPUT = 1 << 4, 612 RPN_FLOW_CONTROL_RTC_ON_OUTPUT = 1 << 5, 613 } rpn_flow_control_t; 614 615 #define RPN_PARAM_MASK_0_BAUD 0x01 616 #define RPN_PARAM_MASK_0_DATA_BITS 0x02 617 #define RPN_PARAM_MASK_0_STOP_BITS 0x04 618 #define RPN_PARAM_MASK_0_PARITY 0x08 619 #define RPN_PARAM_MASK_0_PARITY_TYPE 0x10 620 #define RPN_PARAM_MASK_0_XON_CHAR 0x20 621 #define RPN_PARAM_MASK_0_XOFF_CHAR 0x40 622 #define RPN_PARAM_MASK_0_RESERVED 0x80 623 624 // @note: values are identical to rpn_flow_control_t 625 #define RPN_PARAM_MASK_1_XONOFF_ON_INPUT 0x01 626 #define RPN_PARAM_MASK_1_XONOFF_ON_OUTPUT 0x02 627 #define RPN_PARAM_MASK_1_RTR_ON_INPUT 0x04 628 #define RPN_PARAM_MASK_1_RTR_ON_OUTPUT 0x08 629 #define RPN_PARAM_MASK_1_RTC_ON_INPUT 0x10 630 #define RPN_PARAM_MASK_1_RTC_ON_OUTPUT 0x20 631 #define RPN_PARAM_MASK_1_RESERVED_0 0x40 632 #define RPN_PARAM_MASK_1_RESERVED_1 0x80 633 634 /** 635 * BNEP Protocol 636 */ 637 638 #ifndef ETHER_ADDR_LEN 639 #define ETHER_ADDR_LEN sizeof(bd_addr_t) 640 #endif 641 642 #ifndef ETHERTYPE_VLAN 643 #define ETHERTYPE_VLAN 0x8100 /* IEEE 802.1Q VLAN tag */ 644 #endif 645 646 #define BNEP_MTU_MIN 1691 647 648 #define BNEP_EXT_FLAG 0x80 649 #define BNEP_TYPE_MASK 0x7F 650 #define BNEP_TYPE(header) ((header) & BNEP_TYPE_MASK) 651 #define BNEP_HEADER_HAS_EXT(x) (((x) & BNEP_EXT_FLAG) == BNEP_EXT_FLAG) 652 653 /* BNEP packet types */ 654 #define BNEP_PKT_TYPE_GENERAL_ETHERNET 0x00 655 #define BNEP_PKT_TYPE_CONTROL 0x01 656 #define BNEP_PKT_TYPE_COMPRESSED_ETHERNET 0x02 657 #define BNEP_PKT_TYPE_COMPRESSED_ETHERNET_SOURCE_ONLY 0x03 658 #define BNEP_PKT_TYPE_COMPRESSED_ETHERNET_DEST_ONLY 0x04 659 660 /* BNEP control types */ 661 #define BNEP_CONTROL_TYPE_COMMAND_NOT_UNDERSTOOD 0x00 662 #define BNEP_CONTROL_TYPE_SETUP_CONNECTION_REQUEST 0x01 663 #define BNEP_CONTROL_TYPE_SETUP_CONNECTION_RESPONSE 0x02 664 #define BNEP_CONTROL_TYPE_FILTER_NET_TYPE_SET 0x03 665 #define BNEP_CONTROL_TYPE_FILTER_NET_TYPE_RESPONSE 0x04 666 #define BNEP_CONTROL_TYPE_FILTER_MULTI_ADDR_SET 0x05 667 #define BNEP_CONTROL_TYPE_FILTER_MULTI_ADDR_RESPONSE 0x06 668 669 /* BNEP extension header types */ 670 #define BNEP_EXT_HEADER_TYPE_EXTENSION_CONTROL 0x00 671 672 /* BNEP setup response codes */ 673 #define BNEP_RESP_SETUP_SUCCESS 0x0000 674 #define BNEP_RESP_SETUP_INVALID_DEST_UUID 0x0001 675 #define BNEP_RESP_SETUP_INVALID_SOURCE_UUID 0x0002 676 #define BNEP_RESP_SETUP_INVALID_SERVICE_UUID_SIZE 0x0003 677 #define BNEP_RESP_SETUP_CONNECTION_NOT_ALLOWED 0x0004 678 679 /* BNEP filter response codes */ 680 #define BNEP_RESP_FILTER_SUCCESS 0x0000 681 #define BNEP_RESP_FILTER_UNSUPPORTED_REQUEST 0x0001 682 #define BNEP_RESP_FILTER_ERR_INVALID_RANGE 0x0002 683 #define BNEP_RESP_FILTER_ERR_TOO_MANY_FILTERS 0x0003 684 #define BNEP_RESP_FILTER_ERR_SECURITY 0x0004 685 686 /** 687 * PAN Profile 688 */ 689 690 typedef enum { 691 PANU_UUID = 0x1115, 692 NAP_UUID = 0x1116, 693 GN_UUID = 0x1117 694 } bnep_service_uuid_t; 695 696 typedef enum { 697 BNEP_SECURITY_NONE = 0x0000, 698 BNEP_SECURITY_SERVICE_LEVEL_ENFORCED, 699 BNEP_SECURITY_802_1X 700 } security_description_t; 701 702 typedef enum { 703 PAN_NET_ACCESS_TYPE_PSTN = 0x0000, 704 PAN_NET_ACCESS_TYPE_ISDN, 705 PAN_NET_ACCESS_TYPE_DSL, 706 PAN_NET_ACCESS_TYPE_CABLE_MODEM, 707 PAN_NET_ACCESS_TYPE_10MB_ETHERNET, 708 PAN_NET_ACCESS_TYPE_100MB_ETHERNET, 709 PAN_NET_ACCESS_TYPE_4MB_TOKEN_RING, 710 PAN_NET_ACCESS_TYPE_16MB_TOKEN_RING, 711 PAN_NET_ACCESS_TYPE_100MB_TOKEN_RING, 712 PAN_NET_ACCESS_TYPE_FDDI, 713 PAN_NET_ACCESS_TYPE_GSM, 714 PAN_NET_ACCESS_TYPE_CDMA, 715 PAN_NET_ACCESS_TYPE_GPRS, 716 PAN_NET_ACCESS_TYPE_3G, 717 PAN_NET_ACCESS_TYPE_CELULAR, 718 PAN_NET_ACCESS_TYPE_OTHER = 0xFFFE, 719 PAN_NET_ACCESS_TYPE_NONE 720 } net_access_type_t; 721 722 /** 723 * ATT 724 */ 725 726 // Minimum/default MTU 727 #define ATT_DEFAULT_MTU 23 728 729 // MARK: Attribute PDU Opcodes 730 #define ATT_ERROR_RESPONSE 0x01 731 732 #define ATT_EXCHANGE_MTU_REQUEST 0x02 733 #define ATT_EXCHANGE_MTU_RESPONSE 0x03 734 735 #define ATT_FIND_INFORMATION_REQUEST 0x04 736 #define ATT_FIND_INFORMATION_REPLY 0x05 737 #define ATT_FIND_BY_TYPE_VALUE_REQUEST 0x06 738 #define ATT_FIND_BY_TYPE_VALUE_RESPONSE 0x07 739 740 #define ATT_READ_BY_TYPE_REQUEST 0x08 741 #define ATT_READ_BY_TYPE_RESPONSE 0x09 742 #define ATT_READ_REQUEST 0x0a 743 #define ATT_READ_RESPONSE 0x0b 744 #define ATT_READ_BLOB_REQUEST 0x0c 745 #define ATT_READ_BLOB_RESPONSE 0x0d 746 #define ATT_READ_MULTIPLE_REQUEST 0x0e 747 #define ATT_READ_MULTIPLE_RESPONSE 0x0f 748 #define ATT_READ_BY_GROUP_TYPE_REQUEST 0x10 749 #define ATT_READ_BY_GROUP_TYPE_RESPONSE 0x11 750 751 #define ATT_WRITE_REQUEST 0x12 752 #define ATT_WRITE_RESPONSE 0x13 753 754 #define ATT_PREPARE_WRITE_REQUEST 0x16 755 #define ATT_PREPARE_WRITE_RESPONSE 0x17 756 #define ATT_EXECUTE_WRITE_REQUEST 0x18 757 #define ATT_EXECUTE_WRITE_RESPONSE 0x19 758 759 #define ATT_HANDLE_VALUE_NOTIFICATION 0x1b 760 #define ATT_HANDLE_VALUE_INDICATION 0x1d 761 #define ATT_HANDLE_VALUE_CONFIRMATION 0x1e 762 763 764 #define ATT_WRITE_COMMAND 0x52 765 #define ATT_SIGNED_WRITE_COMMAND 0xD2 766 767 // MARK: ATT Error Codes 768 #define ATT_ERROR_INVALID_HANDLE 0x01 769 #define ATT_ERROR_READ_NOT_PERMITTED 0x02 770 #define ATT_ERROR_WRITE_NOT_PERMITTED 0x03 771 #define ATT_ERROR_INVALID_PDU 0x04 772 #define ATT_ERROR_INSUFFICIENT_AUTHENTICATION 0x05 773 #define ATT_ERROR_REQUEST_NOT_SUPPORTED 0x06 774 #define ATT_ERROR_INVALID_OFFSET 0x07 775 #define ATT_ERROR_INSUFFICIENT_AUTHORIZATION 0x08 776 #define ATT_ERROR_PREPARE_QUEUE_FULL 0x09 777 #define ATT_ERROR_ATTRIBUTE_NOT_FOUND 0x0a 778 #define ATT_ERROR_ATTRIBUTE_NOT_LONG 0x0b 779 #define ATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_SIZE 0x0c 780 #define ATT_ERROR_INVALID_ATTRIBUTE_VALUE_LENGTH 0x0d 781 #define ATT_ERROR_UNLIKELY_ERROR 0x0e 782 #define ATT_ERROR_INSUFFICIENT_ENCRYPTION 0x0f 783 #define ATT_ERROR_UNSUPPORTED_GROUP_TYPE 0x10 784 #define ATT_ERROR_INSUFFICIENT_RESOURCES 0x11 785 786 // MARK: Attribute Property Flags 787 #define ATT_PROPERTY_BROADCAST 0x01 788 #define ATT_PROPERTY_READ 0x02 789 #define ATT_PROPERTY_WRITE_WITHOUT_RESPONSE 0x04 790 #define ATT_PROPERTY_WRITE 0x08 791 #define ATT_PROPERTY_NOTIFY 0x10 792 #define ATT_PROPERTY_INDICATE 0x20 793 #define ATT_PROPERTY_AUTHENTICATED_SIGNED_WRITE 0x40 794 #define ATT_PROPERTY_EXTENDED_PROPERTIES 0x80 795 796 // MARK: Attribute Property Flag, BTstack extension 797 // value is asked from client 798 #define ATT_PROPERTY_DYNAMIC 0x100 799 // 128 bit UUID used 800 #define ATT_PROPERTY_UUID128 0x200 801 // Authentication required 802 #define ATT_PROPERTY_AUTHENTICATION_REQUIRED 0x400 803 // Authorization from user required 804 #define ATT_PROPERTY_AUTHORIZATION_REQUIRED 0x800 805 // Encryption key size stored in upper 4 bits, 0 == no encryption, encryption key size - 1 otherwise 806 807 // ATT Transaction Timeout of 30 seconds for Command/Response or Incidationc/Confirmation 808 #define ATT_TRANSACTION_TIMEOUT_MS 30000 809 810 #define ATT_TRANSACTION_MODE_NONE 0x0 811 #define ATT_TRANSACTION_MODE_ACTIVE 0x1 812 #define ATT_TRANSACTION_MODE_EXECUTE 0x2 813 #define ATT_TRANSACTION_MODE_CANCEL 0x3 814 815 // MARK: GATT UUIDs 816 #define GATT_PRIMARY_SERVICE_UUID 0x2800 817 #define GATT_SECONDARY_SERVICE_UUID 0x2801 818 #define GATT_INCLUDE_SERVICE_UUID 0x2802 819 #define GATT_CHARACTERISTICS_UUID 0x2803 820 #define GATT_CHARACTERISTIC_EXTENDED_PROPERTIES 0x2900 821 #define GATT_CHARACTERISTIC_USER_DESCRIPTION 0x2901 822 #define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION 0x2902 823 #define GATT_SERVER_CHARACTERISTICS_CONFIGURATION 0x2903 824 #define GATT_CHARACTERISTIC_PRESENTATION_FORMAT 0x2904 825 #define GATT_CHARACTERISTIC_AGGREGATE_FORMAT 0x2905 826 827 #define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NONE 0 828 #define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_NOTIFICATION 1 829 #define GATT_CLIENT_CHARACTERISTICS_CONFIGURATION_INDICATION 2 830 831 // GAP Service and Characteristics 832 #define GAP_SERVICE_UUID 0x1800 833 #define GAP_DEVICE_NAME_UUID 0x2a00 834 #define GAP_APPEARANCE_UUID 0x2a01 835 #define GAP_PERIPHERAL_PRIVACY_FLAG 0x2a02 836 #define GAP_RECONNECTION_ADDRESS_UUID 0x2a03 837 #define GAP_PERIPHERAL_PREFERRED_CONNECTION_PARAMETERS_UUID 0x2a04 838 839 /** 840 * SM - LE Security Manager 841 */ 842 // Bluetooth Spec definitions 843 typedef enum { 844 SM_CODE_PAIRING_REQUEST = 0X01, 845 SM_CODE_PAIRING_RESPONSE, 846 SM_CODE_PAIRING_CONFIRM, 847 SM_CODE_PAIRING_RANDOM, 848 SM_CODE_PAIRING_FAILED, 849 SM_CODE_ENCRYPTION_INFORMATION, 850 SM_CODE_MASTER_IDENTIFICATION, 851 SM_CODE_IDENTITY_INFORMATION, 852 SM_CODE_IDENTITY_ADDRESS_INFORMATION, 853 SM_CODE_SIGNING_INFORMATION, 854 SM_CODE_SECURITY_REQUEST 855 } SECURITY_MANAGER_COMMANDS; 856 857 // IO Capability Values 858 typedef enum { 859 IO_CAPABILITY_DISPLAY_ONLY = 0, 860 IO_CAPABILITY_DISPLAY_YES_NO, 861 IO_CAPABILITY_KEYBOARD_ONLY, 862 IO_CAPABILITY_NO_INPUT_NO_OUTPUT, 863 IO_CAPABILITY_KEYBOARD_DISPLAY, // not used by secure simple pairing 864 } io_capability_t; 865 866 // Authentication requirement flags 867 #define SM_AUTHREQ_NO_BONDING 0x00 868 #define SM_AUTHREQ_BONDING 0x01 869 #define SM_AUTHREQ_MITM_PROTECTION 0x04 870 871 // Key distribution flags used by spec 872 #define SM_KEYDIST_ENC_KEY 0X01 873 #define SM_KEYDIST_ID_KEY 0x02 874 #define SM_KEYDIST_SIGN 0x04 875 876 // Key distribution flags used internally 877 #define SM_KEYDIST_FLAG_ENCRYPTION_INFORMATION 0x01 878 #define SM_KEYDIST_FLAG_MASTER_IDENTIFICATION 0x02 879 #define SM_KEYDIST_FLAG_IDENTITY_INFORMATION 0x04 880 #define SM_KEYDIST_FLAG_IDENTITY_ADDRESS_INFORMATION 0x08 881 #define SM_KEYDIST_FLAG_SIGNING_IDENTIFICATION 0x10 882 883 // STK Generation Methods 884 #define SM_STK_GENERATION_METHOD_JUST_WORKS 0x01 885 #define SM_STK_GENERATION_METHOD_OOB 0x02 886 #define SM_STK_GENERATION_METHOD_PASSKEY 0x04 887 888 // Pairing Failed Reasons 889 #define SM_REASON_RESERVED 0x00 890 #define SM_REASON_PASSKEYT_ENTRY_FAILED 0x01 891 #define SM_REASON_OOB_NOT_AVAILABLE 0x02 892 #define SM_REASON_AUTHENTHICATION_REQUIREMENTS 0x03 893 #define SM_REASON_CONFIRM_VALUE_FAILED 0x04 894 #define SM_REASON_PAIRING_NOT_SUPPORTED 0x05 895 #define SM_REASON_ENCRYPTION_KEY_SIZE 0x06 896 #define SM_REASON_COMMAND_NOT_SUPPORTED 0x07 897 #define SM_REASON_UNSPECIFIED_REASON 0x08 898 #define SM_REASON_REPEATED_ATTEMPTS 0x09 899 // also, invalid parameters 900 // and reserved 901 902 903 #endif