00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 typedef struct {
00030 uint8_t b[6];
00031 } __attribute__((packed)) bdaddr_t;
00032
00033 #define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
00034 #define BDADDR_ALL (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
00035 #define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
00036
00037
00038 static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
00039 {
00040 return memcmp(ba1, ba2, sizeof(bdaddr_t));
00041 }
00042 static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
00043 {
00044 memcpy(dst, src, sizeof(bdaddr_t));
00045 }
00046
00047 #define BAINIT(orig) { .b = { \
00048 (orig)->b[0], (orig)->b[1], (orig)->b[2], \
00049 (orig)->b[3], (orig)->b[4], (orig)->b[5], \
00050 }, }
00051
00052
00053 struct bt_device_s;
00054 struct bt_scatternet_s;
00055 struct bt_piconet_s;
00056 struct bt_link_s;
00057
00058 struct bt_scatternet_s {
00059 struct bt_device_s *slave;
00060 };
00061
00062 struct bt_link_s {
00063 struct bt_device_s *slave, *host;
00064 uint16_t handle;
00065 uint16_t acl_interval;
00066 enum {
00067 acl_active,
00068 acl_hold,
00069 acl_sniff,
00070 acl_parked,
00071 } acl_mode;
00072 };
00073
00074 struct bt_device_s {
00075 int lt_addr;
00076 bdaddr_t bd_addr;
00077 int mtu;
00078 int setup;
00079 struct bt_scatternet_s *net;
00080
00081 uint8_t key[16];
00082 int key_present;
00083 uint8_t class[3];
00084
00085 uint8_t reject_reason;
00086
00087 uint64_t lmp_caps;
00088 const char *lmp_name;
00089 void (*lmp_connection_request)(struct bt_link_s *link);
00090 void (*lmp_connection_complete)(struct bt_link_s *link);
00091 void (*lmp_disconnect_master)(struct bt_link_s *link);
00092 void (*lmp_disconnect_slave)(struct bt_link_s *link);
00093 void (*lmp_acl_data)(struct bt_link_s *link, const uint8_t *data,
00094 int start, int len);
00095 void (*lmp_acl_resp)(struct bt_link_s *link, const uint8_t *data,
00096 int start, int len);
00097 void (*lmp_mode_change)(struct bt_link_s *link);
00098
00099 void (*handle_destroy)(struct bt_device_s *device);
00100 struct bt_device_s *next;
00101
00102 int inquiry_scan;
00103 int page_scan;
00104
00105 uint16_t clkoff;
00106 };
00107
00108
00109 void bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net);
00110 void bt_device_done(struct bt_device_s *dev);
00111
00112
00113 struct HCIInfo *bt_new_hci(struct bt_scatternet_s *net);
00114
00115
00116 struct HCIInfo *bt_host_hci(const char *id);
00117
00118
00119 void bt_vhci_init(struct HCIInfo *info);
00120
00121
00122 enum {
00123 csrhci_pin_reset,
00124 csrhci_pin_wakeup,
00125 __csrhci_pins,
00126 };
00127 qemu_irq *csrhci_pins_get(CharDriverState *chr);
00128 CharDriverState *uart_hci_init(qemu_irq wakeup);
00129
00130
00131 struct bt_l2cap_device_s;
00132 struct bt_l2cap_conn_params_s;
00133 struct bt_l2cap_psm_s;
00134 void bt_l2cap_device_init(struct bt_l2cap_device_s *dev,
00135 struct bt_scatternet_s *net);
00136 void bt_l2cap_device_done(struct bt_l2cap_device_s *dev);
00137 void bt_l2cap_psm_register(struct bt_l2cap_device_s *dev, int psm,
00138 int min_mtu, int (*new_channel)(struct bt_l2cap_device_s *dev,
00139 struct bt_l2cap_conn_params_s *params));
00140
00141 struct bt_l2cap_device_s {
00142 struct bt_device_s device;
00143 struct bt_l2cap_psm_s *first_psm;
00144 };
00145
00146 struct bt_l2cap_conn_params_s {
00147
00148 uint8_t *(*sdu_out)(struct bt_l2cap_conn_params_s *chan, int len);
00149 void (*sdu_submit)(struct bt_l2cap_conn_params_s *chan);
00150 int remote_mtu;
00151
00152 void *opaque;
00153 void (*sdu_in)(void *opaque, const uint8_t *data, int len);
00154 void (*close)(void *opaque);
00155 };
00156
00157 enum bt_l2cap_psm_predef {
00158 BT_PSM_SDP = 0x0001,
00159 BT_PSM_RFCOMM = 0x0003,
00160 BT_PSM_TELEPHONY = 0x0005,
00161 BT_PSM_TCS = 0x0007,
00162 BT_PSM_BNEP = 0x000f,
00163 BT_PSM_HID_CTRL = 0x0011,
00164 BT_PSM_HID_INTR = 0x0013,
00165 BT_PSM_UPNP = 0x0015,
00166 BT_PSM_AVCTP = 0x0017,
00167 BT_PSM_AVDTP = 0x0019,
00168 };
00169
00170
00171 void bt_l2cap_sdp_init(struct bt_l2cap_device_s *dev);
00172
00173
00174 struct bt_device_s *bt_mouse_init(struct bt_scatternet_s *net);
00175 struct bt_device_s *bt_tablet_init(struct bt_scatternet_s *net);
00176 struct bt_device_s *bt_keyboard_init(struct bt_scatternet_s *net);
00177
00178
00179
00180 #define LLID_ACLU_CONT 0x1
00181 #define LLID_ACLU_START 0x2
00182 #define LLID_ACLC 0x3
00183
00184 enum lmp_pdu_type {
00185 LMP_NAME_REQ = 0x0001,
00186 LMP_NAME_RES = 0x0002,
00187 LMP_ACCEPTED = 0x0003,
00188 LMP_NOT_ACCEPTED = 0x0004,
00189 LMP_CLKOFFSET_REQ = 0x0005,
00190 LMP_CLKOFFSET_RES = 0x0006,
00191 LMP_DETACH = 0x0007,
00192 LMP_IN_RAND = 0x0008,
00193 LMP_COMB_KEY = 0x0009,
00194 LMP_UNIT_KEY = 0x000a,
00195 LMP_AU_RAND = 0x000b,
00196 LMP_SRES = 0x000c,
00197 LMP_TEMP_RAND = 0x000d,
00198 LMP_TEMP_KEY = 0x000e,
00199 LMP_CRYPT_MODE_REQ = 0x000f,
00200 LMP_CRYPT_KEY_SIZE_REQ = 0x0010,
00201 LMP_START_ENCRYPT_REQ = 0x0011,
00202 LMP_STOP_ENCRYPT_REQ = 0x0012,
00203 LMP_SWITCH_REQ = 0x0013,
00204 LMP_HOLD = 0x0014,
00205 LMP_HOLD_REQ = 0x0015,
00206 LMP_SNIFF_REQ = 0x0017,
00207 LMP_UNSNIFF_REQ = 0x0018,
00208 LMP_LMP_PARK_REQ = 0x0019,
00209 LMP_SET_BCAST_SCAN_WND = 0x001b,
00210 LMP_MODIFY_BEACON = 0x001c,
00211 LMP_UNPARK_BD_ADDR_REQ = 0x001d,
00212 LMP_UNPARK_PM_ADDR_REQ = 0x001e,
00213 LMP_INCR_POWER_REQ = 0x001f,
00214 LMP_DECR_POWER_REQ = 0x0020,
00215 LMP_MAX_POWER = 0x0021,
00216 LMP_MIN_POWER = 0x0022,
00217 LMP_AUTO_RATE = 0x0023,
00218 LMP_PREFERRED_RATE = 0x0024,
00219 LMP_VERSION_REQ = 0x0025,
00220 LMP_VERSION_RES = 0x0026,
00221 LMP_FEATURES_REQ = 0x0027,
00222 LMP_FEATURES_RES = 0x0028,
00223 LMP_QUALITY_OF_SERVICE = 0x0029,
00224 LMP_QOS_REQ = 0x002a,
00225 LMP_RM_SCO_LINK_REQ = 0x002b,
00226 LMP_SCO_LINK_REQ = 0x002c,
00227 LMP_MAX_SLOT = 0x002d,
00228 LMP_MAX_SLOT_REQ = 0x002e,
00229 LMP_TIMING_ACCURACY_REQ = 0x002f,
00230 LMP_TIMING_ACCURACY_RES = 0x0030,
00231 LMP_SETUP_COMPLETE = 0x0031,
00232 LMP_USE_SEMIPERM_KEY = 0x0032,
00233 LMP_HOST_CONNECTION_REQ = 0x0033,
00234 LMP_SLOT_OFFSET = 0x0034,
00235 LMP_PAGE_MODE_REQ = 0x0035,
00236 LMP_PAGE_SCAN_MODE_REQ = 0x0036,
00237 LMP_SUPERVISION_TIMEOUT = 0x0037,
00238 LMP_TEST_ACTIVATE = 0x0038,
00239 LMP_TEST_CONTROL = 0x0039,
00240 LMP_CRYPT_KEY_MASK_REQ = 0x003a,
00241 LMP_CRYPT_KEY_MASK_RES = 0x003b,
00242 LMP_SET_AFH = 0x003c,
00243 LMP_ACCEPTED_EXT = 0x7f01,
00244 LMP_NOT_ACCEPTED_EXT = 0x7f02,
00245 LMP_FEATURES_REQ_EXT = 0x7f03,
00246 LMP_FEATURES_RES_EXT = 0x7f04,
00247 LMP_PACKET_TYPE_TBL_REQ = 0x7f0b,
00248 LMP_ESCO_LINK_REQ = 0x7f0c,
00249 LMP_RM_ESCO_LINK_REQ = 0x7f0d,
00250 LMP_CHANNEL_CLASS_REQ = 0x7f10,
00251 LMP_CHANNEL_CLASS = 0x7f11,
00252 };
00253
00254
00255
00256 enum hci_packet_type {
00257 HCI_COMMAND_PKT = 0x01,
00258 HCI_ACLDATA_PKT = 0x02,
00259 HCI_SCODATA_PKT = 0x03,
00260 HCI_EVENT_PKT = 0x04,
00261 HCI_VENDOR_PKT = 0xff,
00262 };
00263
00264 enum bt_packet_type {
00265 HCI_2DH1 = 1 << 1,
00266 HCI_3DH1 = 1 << 2,
00267 HCI_DM1 = 1 << 3,
00268 HCI_DH1 = 1 << 4,
00269 HCI_2DH3 = 1 << 8,
00270 HCI_3DH3 = 1 << 9,
00271 HCI_DM3 = 1 << 10,
00272 HCI_DH3 = 1 << 11,
00273 HCI_2DH5 = 1 << 12,
00274 HCI_3DH5 = 1 << 13,
00275 HCI_DM5 = 1 << 14,
00276 HCI_DH5 = 1 << 15,
00277 };
00278
00279 enum sco_packet_type {
00280 HCI_HV1 = 1 << 5,
00281 HCI_HV2 = 1 << 6,
00282 HCI_HV3 = 1 << 7,
00283 };
00284
00285 enum ev_packet_type {
00286 HCI_EV3 = 1 << 3,
00287 HCI_EV4 = 1 << 4,
00288 HCI_EV5 = 1 << 5,
00289 HCI_2EV3 = 1 << 6,
00290 HCI_3EV3 = 1 << 7,
00291 HCI_2EV5 = 1 << 8,
00292 HCI_3EV5 = 1 << 9,
00293 };
00294
00295 enum hci_error_code {
00296 HCI_SUCCESS = 0x00,
00297 HCI_UNKNOWN_COMMAND = 0x01,
00298 HCI_NO_CONNECTION = 0x02,
00299 HCI_HARDWARE_FAILURE = 0x03,
00300 HCI_PAGE_TIMEOUT = 0x04,
00301 HCI_AUTHENTICATION_FAILURE = 0x05,
00302 HCI_PIN_OR_KEY_MISSING = 0x06,
00303 HCI_MEMORY_FULL = 0x07,
00304 HCI_CONNECTION_TIMEOUT = 0x08,
00305 HCI_MAX_NUMBER_OF_CONNECTIONS = 0x09,
00306 HCI_MAX_NUMBER_OF_SCO_CONNECTIONS = 0x0a,
00307 HCI_ACL_CONNECTION_EXISTS = 0x0b,
00308 HCI_COMMAND_DISALLOWED = 0x0c,
00309 HCI_REJECTED_LIMITED_RESOURCES = 0x0d,
00310 HCI_REJECTED_SECURITY = 0x0e,
00311 HCI_REJECTED_PERSONAL = 0x0f,
00312 HCI_HOST_TIMEOUT = 0x10,
00313 HCI_UNSUPPORTED_FEATURE = 0x11,
00314 HCI_INVALID_PARAMETERS = 0x12,
00315 HCI_OE_USER_ENDED_CONNECTION = 0x13,
00316 HCI_OE_LOW_RESOURCES = 0x14,
00317 HCI_OE_POWER_OFF = 0x15,
00318 HCI_CONNECTION_TERMINATED = 0x16,
00319 HCI_REPEATED_ATTEMPTS = 0x17,
00320 HCI_PAIRING_NOT_ALLOWED = 0x18,
00321 HCI_UNKNOWN_LMP_PDU = 0x19,
00322 HCI_UNSUPPORTED_REMOTE_FEATURE = 0x1a,
00323 HCI_SCO_OFFSET_REJECTED = 0x1b,
00324 HCI_SCO_INTERVAL_REJECTED = 0x1c,
00325 HCI_AIR_MODE_REJECTED = 0x1d,
00326 HCI_INVALID_LMP_PARAMETERS = 0x1e,
00327 HCI_UNSPECIFIED_ERROR = 0x1f,
00328 HCI_UNSUPPORTED_LMP_PARAMETER_VALUE = 0x20,
00329 HCI_ROLE_CHANGE_NOT_ALLOWED = 0x21,
00330 HCI_LMP_RESPONSE_TIMEOUT = 0x22,
00331 HCI_LMP_ERROR_TRANSACTION_COLLISION = 0x23,
00332 HCI_LMP_PDU_NOT_ALLOWED = 0x24,
00333 HCI_ENCRYPTION_MODE_NOT_ACCEPTED = 0x25,
00334 HCI_UNIT_LINK_KEY_USED = 0x26,
00335 HCI_QOS_NOT_SUPPORTED = 0x27,
00336 HCI_INSTANT_PASSED = 0x28,
00337 HCI_PAIRING_NOT_SUPPORTED = 0x29,
00338 HCI_TRANSACTION_COLLISION = 0x2a,
00339 HCI_QOS_UNACCEPTABLE_PARAMETER = 0x2c,
00340 HCI_QOS_REJECTED = 0x2d,
00341 HCI_CLASSIFICATION_NOT_SUPPORTED = 0x2e,
00342 HCI_INSUFFICIENT_SECURITY = 0x2f,
00343 HCI_PARAMETER_OUT_OF_RANGE = 0x30,
00344 HCI_ROLE_SWITCH_PENDING = 0x32,
00345 HCI_SLOT_VIOLATION = 0x34,
00346 HCI_ROLE_SWITCH_FAILED = 0x35,
00347 };
00348
00349 enum acl_flag_bits {
00350 ACL_CONT = 1 << 0,
00351 ACL_START = 1 << 1,
00352 ACL_ACTIVE_BCAST = 1 << 2,
00353 ACL_PICO_BCAST = 1 << 3,
00354 };
00355
00356 enum baseband_link_type {
00357 SCO_LINK = 0x00,
00358 ACL_LINK = 0x01,
00359 };
00360
00361 enum lmp_feature_bits0 {
00362 LMP_3SLOT = 1 << 0,
00363 LMP_5SLOT = 1 << 1,
00364 LMP_ENCRYPT = 1 << 2,
00365 LMP_SOFFSET = 1 << 3,
00366 LMP_TACCURACY = 1 << 4,
00367 LMP_RSWITCH = 1 << 5,
00368 LMP_HOLD_MODE = 1 << 6,
00369 LMP_SNIFF_MODE = 1 << 7,
00370 };
00371
00372 enum lmp_feature_bits1 {
00373 LMP_PARK = 1 << 0,
00374 LMP_RSSI = 1 << 1,
00375 LMP_QUALITY = 1 << 2,
00376 LMP_SCO = 1 << 3,
00377 LMP_HV2 = 1 << 4,
00378 LMP_HV3 = 1 << 5,
00379 LMP_ULAW = 1 << 6,
00380 LMP_ALAW = 1 << 7,
00381 };
00382
00383 enum lmp_feature_bits2 {
00384 LMP_CVSD = 1 << 0,
00385 LMP_PSCHEME = 1 << 1,
00386 LMP_PCONTROL = 1 << 2,
00387 LMP_TRSP_SCO = 1 << 3,
00388 LMP_BCAST_ENC = 1 << 7,
00389 };
00390
00391 enum lmp_feature_bits3 {
00392 LMP_EDR_ACL_2M = 1 << 1,
00393 LMP_EDR_ACL_3M = 1 << 2,
00394 LMP_ENH_ISCAN = 1 << 3,
00395 LMP_ILACE_ISCAN = 1 << 4,
00396 LMP_ILACE_PSCAN = 1 << 5,
00397 LMP_RSSI_INQ = 1 << 6,
00398 LMP_ESCO = 1 << 7,
00399 };
00400
00401 enum lmp_feature_bits4 {
00402 LMP_EV4 = 1 << 0,
00403 LMP_EV5 = 1 << 1,
00404 LMP_AFH_CAP_SLV = 1 << 3,
00405 LMP_AFH_CLS_SLV = 1 << 4,
00406 LMP_EDR_3SLOT = 1 << 7,
00407 };
00408
00409 enum lmp_feature_bits5 {
00410 LMP_EDR_5SLOT = 1 << 0,
00411 LMP_SNIFF_SUBR = 1 << 1,
00412 LMP_AFH_CAP_MST = 1 << 3,
00413 LMP_AFH_CLS_MST = 1 << 4,
00414 LMP_EDR_ESCO_2M = 1 << 5,
00415 LMP_EDR_ESCO_3M = 1 << 6,
00416 LMP_EDR_3S_ESCO = 1 << 7,
00417 };
00418
00419 enum lmp_feature_bits6 {
00420 LMP_EXT_INQ = 1 << 0,
00421 };
00422
00423 enum lmp_feature_bits7 {
00424 LMP_EXT_FEAT = 1 << 7,
00425 };
00426
00427 enum hci_link_policy {
00428 HCI_LP_RSWITCH = 1 << 0,
00429 HCI_LP_HOLD = 1 << 1,
00430 HCI_LP_SNIFF = 1 << 2,
00431 HCI_LP_PARK = 1 << 3,
00432 };
00433
00434 enum hci_link_mode {
00435 HCI_LM_ACCEPT = 1 << 15,
00436 HCI_LM_MASTER = 1 << 0,
00437 HCI_LM_AUTH = 1 << 1,
00438 HCI_LM_ENCRYPT = 1 << 2,
00439 HCI_LM_TRUSTED = 1 << 3,
00440 HCI_LM_RELIABLE = 1 << 4,
00441 HCI_LM_SECURE = 1 << 5,
00442 };
00443
00444
00445
00446
00447 #define OGF_LINK_CTL 0x01
00448
00449 #define OCF_INQUIRY 0x0001
00450 typedef struct {
00451 uint8_t lap[3];
00452 uint8_t length;
00453 uint8_t num_rsp;
00454 } __attribute__ ((packed)) inquiry_cp;
00455 #define INQUIRY_CP_SIZE 5
00456
00457 typedef struct {
00458 uint8_t status;
00459 bdaddr_t bdaddr;
00460 } __attribute__ ((packed)) status_bdaddr_rp;
00461 #define STATUS_BDADDR_RP_SIZE 7
00462
00463 #define OCF_INQUIRY_CANCEL 0x0002
00464
00465 #define OCF_PERIODIC_INQUIRY 0x0003
00466 typedef struct {
00467 uint16_t max_period;
00468 uint16_t min_period;
00469 uint8_t lap[3];
00470 uint8_t length;
00471 uint8_t num_rsp;
00472 } __attribute__ ((packed)) periodic_inquiry_cp;
00473 #define PERIODIC_INQUIRY_CP_SIZE 9
00474
00475 #define OCF_EXIT_PERIODIC_INQUIRY 0x0004
00476
00477 #define OCF_CREATE_CONN 0x0005
00478 typedef struct {
00479 bdaddr_t bdaddr;
00480 uint16_t pkt_type;
00481 uint8_t pscan_rep_mode;
00482 uint8_t pscan_mode;
00483 uint16_t clock_offset;
00484 uint8_t role_switch;
00485 } __attribute__ ((packed)) create_conn_cp;
00486 #define CREATE_CONN_CP_SIZE 13
00487
00488 #define OCF_DISCONNECT 0x0006
00489 typedef struct {
00490 uint16_t handle;
00491 uint8_t reason;
00492 } __attribute__ ((packed)) disconnect_cp;
00493 #define DISCONNECT_CP_SIZE 3
00494
00495 #define OCF_ADD_SCO 0x0007
00496 typedef struct {
00497 uint16_t handle;
00498 uint16_t pkt_type;
00499 } __attribute__ ((packed)) add_sco_cp;
00500 #define ADD_SCO_CP_SIZE 4
00501
00502 #define OCF_CREATE_CONN_CANCEL 0x0008
00503 typedef struct {
00504 uint8_t status;
00505 bdaddr_t bdaddr;
00506 } __attribute__ ((packed)) create_conn_cancel_cp;
00507 #define CREATE_CONN_CANCEL_CP_SIZE 6
00508
00509 typedef struct {
00510 uint8_t status;
00511 bdaddr_t bdaddr;
00512 } __attribute__ ((packed)) create_conn_cancel_rp;
00513 #define CREATE_CONN_CANCEL_RP_SIZE 7
00514
00515 #define OCF_ACCEPT_CONN_REQ 0x0009
00516 typedef struct {
00517 bdaddr_t bdaddr;
00518 uint8_t role;
00519 } __attribute__ ((packed)) accept_conn_req_cp;
00520 #define ACCEPT_CONN_REQ_CP_SIZE 7
00521
00522 #define OCF_REJECT_CONN_REQ 0x000A
00523 typedef struct {
00524 bdaddr_t bdaddr;
00525 uint8_t reason;
00526 } __attribute__ ((packed)) reject_conn_req_cp;
00527 #define REJECT_CONN_REQ_CP_SIZE 7
00528
00529 #define OCF_LINK_KEY_REPLY 0x000B
00530 typedef struct {
00531 bdaddr_t bdaddr;
00532 uint8_t link_key[16];
00533 } __attribute__ ((packed)) link_key_reply_cp;
00534 #define LINK_KEY_REPLY_CP_SIZE 22
00535
00536 #define OCF_LINK_KEY_NEG_REPLY 0x000C
00537
00538 #define OCF_PIN_CODE_REPLY 0x000D
00539 typedef struct {
00540 bdaddr_t bdaddr;
00541 uint8_t pin_len;
00542 uint8_t pin_code[16];
00543 } __attribute__ ((packed)) pin_code_reply_cp;
00544 #define PIN_CODE_REPLY_CP_SIZE 23
00545
00546 #define OCF_PIN_CODE_NEG_REPLY 0x000E
00547
00548 #define OCF_SET_CONN_PTYPE 0x000F
00549 typedef struct {
00550 uint16_t handle;
00551 uint16_t pkt_type;
00552 } __attribute__ ((packed)) set_conn_ptype_cp;
00553 #define SET_CONN_PTYPE_CP_SIZE 4
00554
00555 #define OCF_AUTH_REQUESTED 0x0011
00556 typedef struct {
00557 uint16_t handle;
00558 } __attribute__ ((packed)) auth_requested_cp;
00559 #define AUTH_REQUESTED_CP_SIZE 2
00560
00561 #define OCF_SET_CONN_ENCRYPT 0x0013
00562 typedef struct {
00563 uint16_t handle;
00564 uint8_t encrypt;
00565 } __attribute__ ((packed)) set_conn_encrypt_cp;
00566 #define SET_CONN_ENCRYPT_CP_SIZE 3
00567
00568 #define OCF_CHANGE_CONN_LINK_KEY 0x0015
00569 typedef struct {
00570 uint16_t handle;
00571 } __attribute__ ((packed)) change_conn_link_key_cp;
00572 #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
00573
00574 #define OCF_MASTER_LINK_KEY 0x0017
00575 typedef struct {
00576 uint8_t key_flag;
00577 } __attribute__ ((packed)) master_link_key_cp;
00578 #define MASTER_LINK_KEY_CP_SIZE 1
00579
00580 #define OCF_REMOTE_NAME_REQ 0x0019
00581 typedef struct {
00582 bdaddr_t bdaddr;
00583 uint8_t pscan_rep_mode;
00584 uint8_t pscan_mode;
00585 uint16_t clock_offset;
00586 } __attribute__ ((packed)) remote_name_req_cp;
00587 #define REMOTE_NAME_REQ_CP_SIZE 10
00588
00589 #define OCF_REMOTE_NAME_REQ_CANCEL 0x001A
00590 typedef struct {
00591 bdaddr_t bdaddr;
00592 } __attribute__ ((packed)) remote_name_req_cancel_cp;
00593 #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
00594
00595 typedef struct {
00596 uint8_t status;
00597 bdaddr_t bdaddr;
00598 } __attribute__ ((packed)) remote_name_req_cancel_rp;
00599 #define REMOTE_NAME_REQ_CANCEL_RP_SIZE 7
00600
00601 #define OCF_READ_REMOTE_FEATURES 0x001B
00602 typedef struct {
00603 uint16_t handle;
00604 } __attribute__ ((packed)) read_remote_features_cp;
00605 #define READ_REMOTE_FEATURES_CP_SIZE 2
00606
00607 #define OCF_READ_REMOTE_EXT_FEATURES 0x001C
00608 typedef struct {
00609 uint16_t handle;
00610 uint8_t page_num;
00611 } __attribute__ ((packed)) read_remote_ext_features_cp;
00612 #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
00613
00614 #define OCF_READ_REMOTE_VERSION 0x001D
00615 typedef struct {
00616 uint16_t handle;
00617 } __attribute__ ((packed)) read_remote_version_cp;
00618 #define READ_REMOTE_VERSION_CP_SIZE 2
00619
00620 #define OCF_READ_CLOCK_OFFSET 0x001F
00621 typedef struct {
00622 uint16_t handle;
00623 } __attribute__ ((packed)) read_clock_offset_cp;
00624 #define READ_CLOCK_OFFSET_CP_SIZE 2
00625
00626 #define OCF_READ_LMP_HANDLE 0x0020
00627 typedef struct {
00628 uint16_t handle;
00629 } __attribute__ ((packed)) read_lmp_handle_cp;
00630 #define READ_LMP_HANDLE_CP_SIZE 2
00631
00632 typedef struct {
00633 uint8_t status;
00634 uint16_t handle;
00635 uint8_t lmp_handle;
00636 uint32_t reserved;
00637 } __attribute__ ((packed)) read_lmp_handle_rp;
00638 #define READ_LMP_HANDLE_RP_SIZE 8
00639
00640 #define OCF_SETUP_SYNC_CONN 0x0028
00641 typedef struct {
00642 uint16_t handle;
00643 uint32_t tx_bandwith;
00644 uint32_t rx_bandwith;
00645 uint16_t max_latency;
00646 uint16_t voice_setting;
00647 uint8_t retrans_effort;
00648 uint16_t pkt_type;
00649 } __attribute__ ((packed)) setup_sync_conn_cp;
00650 #define SETUP_SYNC_CONN_CP_SIZE 17
00651
00652 #define OCF_ACCEPT_SYNC_CONN_REQ 0x0029
00653 typedef struct {
00654 bdaddr_t bdaddr;
00655 uint32_t tx_bandwith;
00656 uint32_t rx_bandwith;
00657 uint16_t max_latency;
00658 uint16_t voice_setting;
00659 uint8_t retrans_effort;
00660 uint16_t pkt_type;
00661 } __attribute__ ((packed)) accept_sync_conn_req_cp;
00662 #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
00663
00664 #define OCF_REJECT_SYNC_CONN_REQ 0x002A
00665 typedef struct {
00666 bdaddr_t bdaddr;
00667 uint8_t reason;
00668 } __attribute__ ((packed)) reject_sync_conn_req_cp;
00669 #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
00670
00671
00672 #define OGF_LINK_POLICY 0x02
00673
00674 #define OCF_HOLD_MODE 0x0001
00675 typedef struct {
00676 uint16_t handle;
00677 uint16_t max_interval;
00678 uint16_t min_interval;
00679 } __attribute__ ((packed)) hold_mode_cp;
00680 #define HOLD_MODE_CP_SIZE 6
00681
00682 #define OCF_SNIFF_MODE 0x0003
00683 typedef struct {
00684 uint16_t handle;
00685 uint16_t max_interval;
00686 uint16_t min_interval;
00687 uint16_t attempt;
00688 uint16_t timeout;
00689 } __attribute__ ((packed)) sniff_mode_cp;
00690 #define SNIFF_MODE_CP_SIZE 10
00691
00692 #define OCF_EXIT_SNIFF_MODE 0x0004
00693 typedef struct {
00694 uint16_t handle;
00695 } __attribute__ ((packed)) exit_sniff_mode_cp;
00696 #define EXIT_SNIFF_MODE_CP_SIZE 2
00697
00698 #define OCF_PARK_MODE 0x0005
00699 typedef struct {
00700 uint16_t handle;
00701 uint16_t max_interval;
00702 uint16_t min_interval;
00703 } __attribute__ ((packed)) park_mode_cp;
00704 #define PARK_MODE_CP_SIZE 6
00705
00706 #define OCF_EXIT_PARK_MODE 0x0006
00707 typedef struct {
00708 uint16_t handle;
00709 } __attribute__ ((packed)) exit_park_mode_cp;
00710 #define EXIT_PARK_MODE_CP_SIZE 2
00711
00712 #define OCF_QOS_SETUP 0x0007
00713 typedef struct {
00714 uint8_t service_type;
00715 uint32_t token_rate;
00716 uint32_t peak_bandwidth;
00717 uint32_t latency;
00718 uint32_t delay_variation;
00719 } __attribute__ ((packed)) hci_qos;
00720 #define HCI_QOS_CP_SIZE 17
00721 typedef struct {
00722 uint16_t handle;
00723 uint8_t flags;
00724 hci_qos qos;
00725 } __attribute__ ((packed)) qos_setup_cp;
00726 #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
00727
00728 #define OCF_ROLE_DISCOVERY 0x0009
00729 typedef struct {
00730 uint16_t handle;
00731 } __attribute__ ((packed)) role_discovery_cp;
00732 #define ROLE_DISCOVERY_CP_SIZE 2
00733 typedef struct {
00734 uint8_t status;
00735 uint16_t handle;
00736 uint8_t role;
00737 } __attribute__ ((packed)) role_discovery_rp;
00738 #define ROLE_DISCOVERY_RP_SIZE 4
00739
00740 #define OCF_SWITCH_ROLE 0x000B
00741 typedef struct {
00742 bdaddr_t bdaddr;
00743 uint8_t role;
00744 } __attribute__ ((packed)) switch_role_cp;
00745 #define SWITCH_ROLE_CP_SIZE 7
00746
00747 #define OCF_READ_LINK_POLICY 0x000C
00748 typedef struct {
00749 uint16_t handle;
00750 } __attribute__ ((packed)) read_link_policy_cp;
00751 #define READ_LINK_POLICY_CP_SIZE 2
00752 typedef struct {
00753 uint8_t status;
00754 uint16_t handle;
00755 uint16_t policy;
00756 } __attribute__ ((packed)) read_link_policy_rp;
00757 #define READ_LINK_POLICY_RP_SIZE 5
00758
00759 #define OCF_WRITE_LINK_POLICY 0x000D
00760 typedef struct {
00761 uint16_t handle;
00762 uint16_t policy;
00763 } __attribute__ ((packed)) write_link_policy_cp;
00764 #define WRITE_LINK_POLICY_CP_SIZE 4
00765 typedef struct {
00766 uint8_t status;
00767 uint16_t handle;
00768 } __attribute__ ((packed)) write_link_policy_rp;
00769 #define WRITE_LINK_POLICY_RP_SIZE 3
00770
00771 #define OCF_READ_DEFAULT_LINK_POLICY 0x000E
00772
00773 #define OCF_WRITE_DEFAULT_LINK_POLICY 0x000F
00774
00775 #define OCF_FLOW_SPECIFICATION 0x0010
00776
00777 #define OCF_SNIFF_SUBRATE 0x0011
00778 typedef struct {
00779 uint16_t handle;
00780 uint16_t max_remote_latency;
00781 uint16_t max_local_latency;
00782 uint16_t min_remote_timeout;
00783 uint16_t min_local_timeout;
00784 } __attribute__ ((packed)) sniff_subrate_cp;
00785 #define SNIFF_SUBRATE_CP_SIZE 10
00786
00787
00788 #define OGF_HOST_CTL 0x03
00789
00790 #define OCF_SET_EVENT_MASK 0x0001
00791 typedef struct {
00792 uint8_t mask[8];
00793 } __attribute__ ((packed)) set_event_mask_cp;
00794 #define SET_EVENT_MASK_CP_SIZE 8
00795
00796 #define OCF_RESET 0x0003
00797
00798 #define OCF_SET_EVENT_FLT 0x0005
00799 typedef struct {
00800 uint8_t flt_type;
00801 uint8_t cond_type;
00802 uint8_t condition[0];
00803 } __attribute__ ((packed)) set_event_flt_cp;
00804 #define SET_EVENT_FLT_CP_SIZE 2
00805
00806 enum bt_filter_type {
00807 FLT_CLEAR_ALL = 0x00,
00808 FLT_INQ_RESULT = 0x01,
00809 FLT_CONN_SETUP = 0x02,
00810 };
00811 enum inq_result_cond_type {
00812 INQ_RESULT_RETURN_ALL = 0x00,
00813 INQ_RESULT_RETURN_CLASS = 0x01,
00814 INQ_RESULT_RETURN_BDADDR = 0x02,
00815 };
00816 enum conn_setup_cond_type {
00817 CONN_SETUP_ALLOW_ALL = 0x00,
00818 CONN_SETUP_ALLOW_CLASS = 0x01,
00819 CONN_SETUP_ALLOW_BDADDR = 0x02,
00820 };
00821 enum conn_setup_cond {
00822 CONN_SETUP_AUTO_OFF = 0x01,
00823 CONN_SETUP_AUTO_ON = 0x02,
00824 };
00825
00826 #define OCF_FLUSH 0x0008
00827 typedef struct {
00828 uint16_t handle;
00829 } __attribute__ ((packed)) flush_cp;
00830 #define FLUSH_CP_SIZE 2
00831
00832 typedef struct {
00833 uint8_t status;
00834 uint16_t handle;
00835 } __attribute__ ((packed)) flush_rp;
00836 #define FLUSH_RP_SIZE 3
00837
00838 #define OCF_READ_PIN_TYPE 0x0009
00839 typedef struct {
00840 uint8_t status;
00841 uint8_t pin_type;
00842 } __attribute__ ((packed)) read_pin_type_rp;
00843 #define READ_PIN_TYPE_RP_SIZE 2
00844
00845 #define OCF_WRITE_PIN_TYPE 0x000A
00846 typedef struct {
00847 uint8_t pin_type;
00848 } __attribute__ ((packed)) write_pin_type_cp;
00849 #define WRITE_PIN_TYPE_CP_SIZE 1
00850
00851 #define OCF_CREATE_NEW_UNIT_KEY 0x000B
00852
00853 #define OCF_READ_STORED_LINK_KEY 0x000D
00854 typedef struct {
00855 bdaddr_t bdaddr;
00856 uint8_t read_all;
00857 } __attribute__ ((packed)) read_stored_link_key_cp;
00858 #define READ_STORED_LINK_KEY_CP_SIZE 7
00859 typedef struct {
00860 uint8_t status;
00861 uint16_t max_keys;
00862 uint16_t num_keys;
00863 } __attribute__ ((packed)) read_stored_link_key_rp;
00864 #define READ_STORED_LINK_KEY_RP_SIZE 5
00865
00866 #define OCF_WRITE_STORED_LINK_KEY 0x0011
00867 typedef struct {
00868 uint8_t num_keys;
00869
00870 } __attribute__ ((packed)) write_stored_link_key_cp;
00871 #define WRITE_STORED_LINK_KEY_CP_SIZE 1
00872 typedef struct {
00873 uint8_t status;
00874 uint8_t num_keys;
00875 } __attribute__ ((packed)) write_stored_link_key_rp;
00876 #define READ_WRITE_LINK_KEY_RP_SIZE 2
00877
00878 #define OCF_DELETE_STORED_LINK_KEY 0x0012
00879 typedef struct {
00880 bdaddr_t bdaddr;
00881 uint8_t delete_all;
00882 } __attribute__ ((packed)) delete_stored_link_key_cp;
00883 #define DELETE_STORED_LINK_KEY_CP_SIZE 7
00884 typedef struct {
00885 uint8_t status;
00886 uint16_t num_keys;
00887 } __attribute__ ((packed)) delete_stored_link_key_rp;
00888 #define DELETE_STORED_LINK_KEY_RP_SIZE 3
00889
00890 #define OCF_CHANGE_LOCAL_NAME 0x0013
00891 typedef struct {
00892 char name[248];
00893 } __attribute__ ((packed)) change_local_name_cp;
00894 #define CHANGE_LOCAL_NAME_CP_SIZE 248
00895
00896 #define OCF_READ_LOCAL_NAME 0x0014
00897 typedef struct {
00898 uint8_t status;
00899 char name[248];
00900 } __attribute__ ((packed)) read_local_name_rp;
00901 #define READ_LOCAL_NAME_RP_SIZE 249
00902
00903 #define OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015
00904 typedef struct {
00905 uint8_t status;
00906 uint16_t timeout;
00907 } __attribute__ ((packed)) read_conn_accept_timeout_rp;
00908 #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
00909
00910 #define OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016
00911 typedef struct {
00912 uint16_t timeout;
00913 } __attribute__ ((packed)) write_conn_accept_timeout_cp;
00914 #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
00915
00916 #define OCF_READ_PAGE_TIMEOUT 0x0017
00917 typedef struct {
00918 uint8_t status;
00919 uint16_t timeout;
00920 } __attribute__ ((packed)) read_page_timeout_rp;
00921 #define READ_PAGE_TIMEOUT_RP_SIZE 3
00922
00923 #define OCF_WRITE_PAGE_TIMEOUT 0x0018
00924 typedef struct {
00925 uint16_t timeout;
00926 } __attribute__ ((packed)) write_page_timeout_cp;
00927 #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
00928
00929 #define OCF_READ_SCAN_ENABLE 0x0019
00930 typedef struct {
00931 uint8_t status;
00932 uint8_t enable;
00933 } __attribute__ ((packed)) read_scan_enable_rp;
00934 #define READ_SCAN_ENABLE_RP_SIZE 2
00935
00936 #define OCF_WRITE_SCAN_ENABLE 0x001A
00937 typedef struct {
00938 uint8_t scan_enable;
00939 } __attribute__ ((packed)) write_scan_enable_cp;
00940 #define WRITE_SCAN_ENABLE_CP_SIZE 1
00941
00942 enum scan_enable_bits {
00943 SCAN_DISABLED = 0,
00944 SCAN_INQUIRY = 1 << 0,
00945 SCAN_PAGE = 1 << 1,
00946 };
00947
00948 #define OCF_READ_PAGE_ACTIVITY 0x001B
00949 typedef struct {
00950 uint8_t status;
00951 uint16_t interval;
00952 uint16_t window;
00953 } __attribute__ ((packed)) read_page_activity_rp;
00954 #define READ_PAGE_ACTIVITY_RP_SIZE 5
00955
00956 #define OCF_WRITE_PAGE_ACTIVITY 0x001C
00957 typedef struct {
00958 uint16_t interval;
00959 uint16_t window;
00960 } __attribute__ ((packed)) write_page_activity_cp;
00961 #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
00962
00963 #define OCF_READ_INQ_ACTIVITY 0x001D
00964 typedef struct {
00965 uint8_t status;
00966 uint16_t interval;
00967 uint16_t window;
00968 } __attribute__ ((packed)) read_inq_activity_rp;
00969 #define READ_INQ_ACTIVITY_RP_SIZE 5
00970
00971 #define OCF_WRITE_INQ_ACTIVITY 0x001E
00972 typedef struct {
00973 uint16_t interval;
00974 uint16_t window;
00975 } __attribute__ ((packed)) write_inq_activity_cp;
00976 #define WRITE_INQ_ACTIVITY_CP_SIZE 4
00977
00978 #define OCF_READ_AUTH_ENABLE 0x001F
00979
00980 #define OCF_WRITE_AUTH_ENABLE 0x0020
00981
00982 #define AUTH_DISABLED 0x00
00983 #define AUTH_ENABLED 0x01
00984
00985 #define OCF_READ_ENCRYPT_MODE 0x0021
00986
00987 #define OCF_WRITE_ENCRYPT_MODE 0x0022
00988
00989 #define ENCRYPT_DISABLED 0x00
00990 #define ENCRYPT_P2P 0x01
00991 #define ENCRYPT_BOTH 0x02
00992
00993 #define OCF_READ_CLASS_OF_DEV 0x0023
00994 typedef struct {
00995 uint8_t status;
00996 uint8_t dev_class[3];
00997 } __attribute__ ((packed)) read_class_of_dev_rp;
00998 #define READ_CLASS_OF_DEV_RP_SIZE 4
00999
01000 #define OCF_WRITE_CLASS_OF_DEV 0x0024
01001 typedef struct {
01002 uint8_t dev_class[3];
01003 } __attribute__ ((packed)) write_class_of_dev_cp;
01004 #define WRITE_CLASS_OF_DEV_CP_SIZE 3
01005
01006 #define OCF_READ_VOICE_SETTING 0x0025
01007 typedef struct {
01008 uint8_t status;
01009 uint16_t voice_setting;
01010 } __attribute__ ((packed)) read_voice_setting_rp;
01011 #define READ_VOICE_SETTING_RP_SIZE 3
01012
01013 #define OCF_WRITE_VOICE_SETTING 0x0026
01014 typedef struct {
01015 uint16_t voice_setting;
01016 } __attribute__ ((packed)) write_voice_setting_cp;
01017 #define WRITE_VOICE_SETTING_CP_SIZE 2
01018
01019 #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027
01020
01021 #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028
01022
01023 #define OCF_READ_NUM_BROADCAST_RETRANS 0x0029
01024
01025 #define OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A
01026
01027 #define OCF_READ_HOLD_MODE_ACTIVITY 0x002B
01028
01029 #define OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C
01030
01031 #define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D
01032 typedef struct {
01033 uint16_t handle;
01034 uint8_t type;
01035 } __attribute__ ((packed)) read_transmit_power_level_cp;
01036 #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
01037 typedef struct {
01038 uint8_t status;
01039 uint16_t handle;
01040 int8_t level;
01041 } __attribute__ ((packed)) read_transmit_power_level_rp;
01042 #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
01043
01044 #define OCF_HOST_BUFFER_SIZE 0x0033
01045 typedef struct {
01046 uint16_t acl_mtu;
01047 uint8_t sco_mtu;
01048 uint16_t acl_max_pkt;
01049 uint16_t sco_max_pkt;
01050 } __attribute__ ((packed)) host_buffer_size_cp;
01051 #define HOST_BUFFER_SIZE_CP_SIZE 7
01052
01053 #define OCF_HOST_NUMBER_OF_COMPLETED_PACKETS 0x0035
01054
01055 #define OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036
01056 typedef struct {
01057 uint8_t status;
01058 uint16_t handle;
01059 uint16_t link_sup_to;
01060 } __attribute__ ((packed)) read_link_supervision_timeout_rp;
01061 #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
01062
01063 #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037
01064 typedef struct {
01065 uint16_t handle;
01066 uint16_t link_sup_to;
01067 } __attribute__ ((packed)) write_link_supervision_timeout_cp;
01068 #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
01069 typedef struct {
01070 uint8_t status;
01071 uint16_t handle;
01072 } __attribute__ ((packed)) write_link_supervision_timeout_rp;
01073 #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
01074
01075 #define OCF_READ_NUM_SUPPORTED_IAC 0x0038
01076
01077 #define MAX_IAC_LAP 0x40
01078 #define OCF_READ_CURRENT_IAC_LAP 0x0039
01079 typedef struct {
01080 uint8_t status;
01081 uint8_t num_current_iac;
01082 uint8_t lap[MAX_IAC_LAP][3];
01083 } __attribute__ ((packed)) read_current_iac_lap_rp;
01084 #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
01085
01086 #define OCF_WRITE_CURRENT_IAC_LAP 0x003A
01087 typedef struct {
01088 uint8_t num_current_iac;
01089 uint8_t lap[MAX_IAC_LAP][3];
01090 } __attribute__ ((packed)) write_current_iac_lap_cp;
01091 #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
01092
01093 #define OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B
01094
01095 #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C
01096
01097 #define OCF_READ_PAGE_SCAN_MODE 0x003D
01098
01099 #define OCF_WRITE_PAGE_SCAN_MODE 0x003E
01100
01101 #define OCF_SET_AFH_CLASSIFICATION 0x003F
01102 typedef struct {
01103 uint8_t map[10];
01104 } __attribute__ ((packed)) set_afh_classification_cp;
01105 #define SET_AFH_CLASSIFICATION_CP_SIZE 10
01106 typedef struct {
01107 uint8_t status;
01108 } __attribute__ ((packed)) set_afh_classification_rp;
01109 #define SET_AFH_CLASSIFICATION_RP_SIZE 1
01110
01111 #define OCF_READ_INQUIRY_SCAN_TYPE 0x0042
01112 typedef struct {
01113 uint8_t status;
01114 uint8_t type;
01115 } __attribute__ ((packed)) read_inquiry_scan_type_rp;
01116 #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
01117
01118 #define OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043
01119 typedef struct {
01120 uint8_t type;
01121 } __attribute__ ((packed)) write_inquiry_scan_type_cp;
01122 #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
01123 typedef struct {
01124 uint8_t status;
01125 } __attribute__ ((packed)) write_inquiry_scan_type_rp;
01126 #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
01127
01128 #define OCF_READ_INQUIRY_MODE 0x0044
01129 typedef struct {
01130 uint8_t status;
01131 uint8_t mode;
01132 } __attribute__ ((packed)) read_inquiry_mode_rp;
01133 #define READ_INQUIRY_MODE_RP_SIZE 2
01134
01135 #define OCF_WRITE_INQUIRY_MODE 0x0045
01136 typedef struct {
01137 uint8_t mode;
01138 } __attribute__ ((packed)) write_inquiry_mode_cp;
01139 #define WRITE_INQUIRY_MODE_CP_SIZE 1
01140 typedef struct {
01141 uint8_t status;
01142 } __attribute__ ((packed)) write_inquiry_mode_rp;
01143 #define WRITE_INQUIRY_MODE_RP_SIZE 1
01144
01145 #define OCF_READ_PAGE_SCAN_TYPE 0x0046
01146
01147 #define OCF_WRITE_PAGE_SCAN_TYPE 0x0047
01148
01149 #define OCF_READ_AFH_MODE 0x0048
01150 typedef struct {
01151 uint8_t status;
01152 uint8_t mode;
01153 } __attribute__ ((packed)) read_afh_mode_rp;
01154 #define READ_AFH_MODE_RP_SIZE 2
01155
01156 #define OCF_WRITE_AFH_MODE 0x0049
01157 typedef struct {
01158 uint8_t mode;
01159 } __attribute__ ((packed)) write_afh_mode_cp;
01160 #define WRITE_AFH_MODE_CP_SIZE 1
01161 typedef struct {
01162 uint8_t status;
01163 } __attribute__ ((packed)) write_afh_mode_rp;
01164 #define WRITE_AFH_MODE_RP_SIZE 1
01165
01166 #define OCF_READ_EXT_INQUIRY_RESPONSE 0x0051
01167 typedef struct {
01168 uint8_t status;
01169 uint8_t fec;
01170 uint8_t data[240];
01171 } __attribute__ ((packed)) read_ext_inquiry_response_rp;
01172 #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
01173
01174 #define OCF_WRITE_EXT_INQUIRY_RESPONSE 0x0052
01175 typedef struct {
01176 uint8_t fec;
01177 uint8_t data[240];
01178 } __attribute__ ((packed)) write_ext_inquiry_response_cp;
01179 #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
01180 typedef struct {
01181 uint8_t status;
01182 } __attribute__ ((packed)) write_ext_inquiry_response_rp;
01183 #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
01184
01185
01186 #define OGF_INFO_PARAM 0x04
01187
01188 #define OCF_READ_LOCAL_VERSION 0x0001
01189 typedef struct {
01190 uint8_t status;
01191 uint8_t hci_ver;
01192 uint16_t hci_rev;
01193 uint8_t lmp_ver;
01194 uint16_t manufacturer;
01195 uint16_t lmp_subver;
01196 } __attribute__ ((packed)) read_local_version_rp;
01197 #define READ_LOCAL_VERSION_RP_SIZE 9
01198
01199 #define OCF_READ_LOCAL_COMMANDS 0x0002
01200 typedef struct {
01201 uint8_t status;
01202 uint8_t commands[64];
01203 } __attribute__ ((packed)) read_local_commands_rp;
01204 #define READ_LOCAL_COMMANDS_RP_SIZE 65
01205
01206 #define OCF_READ_LOCAL_FEATURES 0x0003
01207 typedef struct {
01208 uint8_t status;
01209 uint8_t features[8];
01210 } __attribute__ ((packed)) read_local_features_rp;
01211 #define READ_LOCAL_FEATURES_RP_SIZE 9
01212
01213 #define OCF_READ_LOCAL_EXT_FEATURES 0x0004
01214 typedef struct {
01215 uint8_t page_num;
01216 } __attribute__ ((packed)) read_local_ext_features_cp;
01217 #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
01218 typedef struct {
01219 uint8_t status;
01220 uint8_t page_num;
01221 uint8_t max_page_num;
01222 uint8_t features[8];
01223 } __attribute__ ((packed)) read_local_ext_features_rp;
01224 #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
01225
01226 #define OCF_READ_BUFFER_SIZE 0x0005
01227 typedef struct {
01228 uint8_t status;
01229 uint16_t acl_mtu;
01230 uint8_t sco_mtu;
01231 uint16_t acl_max_pkt;
01232 uint16_t sco_max_pkt;
01233 } __attribute__ ((packed)) read_buffer_size_rp;
01234 #define READ_BUFFER_SIZE_RP_SIZE 8
01235
01236 #define OCF_READ_COUNTRY_CODE 0x0007
01237 typedef struct {
01238 uint8_t status;
01239 uint8_t country_code;
01240 } __attribute__ ((packed)) read_country_code_rp;
01241 #define READ_COUNTRY_CODE_RP_SIZE 2
01242
01243 #define OCF_READ_BD_ADDR 0x0009
01244 typedef struct {
01245 uint8_t status;
01246 bdaddr_t bdaddr;
01247 } __attribute__ ((packed)) read_bd_addr_rp;
01248 #define READ_BD_ADDR_RP_SIZE 7
01249
01250
01251 #define OGF_STATUS_PARAM 0x05
01252
01253 #define OCF_READ_FAILED_CONTACT_COUNTER 0x0001
01254 typedef struct {
01255 uint8_t status;
01256 uint16_t handle;
01257 uint8_t counter;
01258 } __attribute__ ((packed)) read_failed_contact_counter_rp;
01259 #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
01260
01261 #define OCF_RESET_FAILED_CONTACT_COUNTER 0x0002
01262 typedef struct {
01263 uint8_t status;
01264 uint16_t handle;
01265 } __attribute__ ((packed)) reset_failed_contact_counter_rp;
01266 #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
01267
01268 #define OCF_READ_LINK_QUALITY 0x0003
01269 typedef struct {
01270 uint16_t handle;
01271 } __attribute__ ((packed)) read_link_quality_cp;
01272 #define READ_LINK_QUALITY_CP_SIZE 4
01273
01274 typedef struct {
01275 uint8_t status;
01276 uint16_t handle;
01277 uint8_t link_quality;
01278 } __attribute__ ((packed)) read_link_quality_rp;
01279 #define READ_LINK_QUALITY_RP_SIZE 4
01280
01281 #define OCF_READ_RSSI 0x0005
01282 typedef struct {
01283 uint8_t status;
01284 uint16_t handle;
01285 int8_t rssi;
01286 } __attribute__ ((packed)) read_rssi_rp;
01287 #define READ_RSSI_RP_SIZE 4
01288
01289 #define OCF_READ_AFH_MAP 0x0006
01290 typedef struct {
01291 uint8_t status;
01292 uint16_t handle;
01293 uint8_t mode;
01294 uint8_t map[10];
01295 } __attribute__ ((packed)) read_afh_map_rp;
01296 #define READ_AFH_MAP_RP_SIZE 14
01297
01298 #define OCF_READ_CLOCK 0x0007
01299 typedef struct {
01300 uint16_t handle;
01301 uint8_t which_clock;
01302 } __attribute__ ((packed)) read_clock_cp;
01303 #define READ_CLOCK_CP_SIZE 3
01304 typedef struct {
01305 uint8_t status;
01306 uint16_t handle;
01307 uint32_t clock;
01308 uint16_t accuracy;
01309 } __attribute__ ((packed)) read_clock_rp;
01310 #define READ_CLOCK_RP_SIZE 9
01311
01312
01313 #define OGF_TESTING_CMD 0x3e
01314
01315
01316 #define OGF_VENDOR_CMD 0x3f
01317
01318
01319
01320 #define EVT_INQUIRY_COMPLETE 0x01
01321
01322 #define EVT_INQUIRY_RESULT 0x02
01323 typedef struct {
01324 uint8_t num_responses;
01325 bdaddr_t bdaddr;
01326 uint8_t pscan_rep_mode;
01327 uint8_t pscan_period_mode;
01328 uint8_t pscan_mode;
01329 uint8_t dev_class[3];
01330 uint16_t clock_offset;
01331 } __attribute__ ((packed)) inquiry_info;
01332 #define INQUIRY_INFO_SIZE 14
01333
01334 #define EVT_CONN_COMPLETE 0x03
01335 typedef struct {
01336 uint8_t status;
01337 uint16_t handle;
01338 bdaddr_t bdaddr;
01339 uint8_t link_type;
01340 uint8_t encr_mode;
01341 } __attribute__ ((packed)) evt_conn_complete;
01342 #define EVT_CONN_COMPLETE_SIZE 11
01343
01344 #define EVT_CONN_REQUEST 0x04
01345 typedef struct {
01346 bdaddr_t bdaddr;
01347 uint8_t dev_class[3];
01348 uint8_t link_type;
01349 } __attribute__ ((packed)) evt_conn_request;
01350 #define EVT_CONN_REQUEST_SIZE 10
01351
01352 #define EVT_DISCONN_COMPLETE 0x05
01353 typedef struct {
01354 uint8_t status;
01355 uint16_t handle;
01356 uint8_t reason;
01357 } __attribute__ ((packed)) evt_disconn_complete;
01358 #define EVT_DISCONN_COMPLETE_SIZE 4
01359
01360 #define EVT_AUTH_COMPLETE 0x06
01361 typedef struct {
01362 uint8_t status;
01363 uint16_t handle;
01364 } __attribute__ ((packed)) evt_auth_complete;
01365 #define EVT_AUTH_COMPLETE_SIZE 3
01366
01367 #define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
01368 typedef struct {
01369 uint8_t status;
01370 bdaddr_t bdaddr;
01371 char name[248];
01372 } __attribute__ ((packed)) evt_remote_name_req_complete;
01373 #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
01374
01375 #define EVT_ENCRYPT_CHANGE 0x08
01376 typedef struct {
01377 uint8_t status;
01378 uint16_t handle;
01379 uint8_t encrypt;
01380 } __attribute__ ((packed)) evt_encrypt_change;
01381 #define EVT_ENCRYPT_CHANGE_SIZE 5
01382
01383 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09
01384 typedef struct {
01385 uint8_t status;
01386 uint16_t handle;
01387 } __attribute__ ((packed)) evt_change_conn_link_key_complete;
01388 #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
01389
01390 #define EVT_MASTER_LINK_KEY_COMPLETE 0x0A
01391 typedef struct {
01392 uint8_t status;
01393 uint16_t handle;
01394 uint8_t key_flag;
01395 } __attribute__ ((packed)) evt_master_link_key_complete;
01396 #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
01397
01398 #define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
01399 typedef struct {
01400 uint8_t status;
01401 uint16_t handle;
01402 uint8_t features[8];
01403 } __attribute__ ((packed)) evt_read_remote_features_complete;
01404 #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
01405
01406 #define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
01407 typedef struct {
01408 uint8_t status;
01409 uint16_t handle;
01410 uint8_t lmp_ver;
01411 uint16_t manufacturer;
01412 uint16_t lmp_subver;
01413 } __attribute__ ((packed)) evt_read_remote_version_complete;
01414 #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
01415
01416 #define EVT_QOS_SETUP_COMPLETE 0x0D
01417 typedef struct {
01418 uint8_t status;
01419 uint16_t handle;
01420 uint8_t flags;
01421 hci_qos qos;
01422 } __attribute__ ((packed)) evt_qos_setup_complete;
01423 #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
01424
01425 #define EVT_CMD_COMPLETE 0x0E
01426 typedef struct {
01427 uint8_t ncmd;
01428 uint16_t opcode;
01429 } __attribute__ ((packed)) evt_cmd_complete;
01430 #define EVT_CMD_COMPLETE_SIZE 3
01431
01432 #define EVT_CMD_STATUS 0x0F
01433 typedef struct {
01434 uint8_t status;
01435 uint8_t ncmd;
01436 uint16_t opcode;
01437 } __attribute__ ((packed)) evt_cmd_status;
01438 #define EVT_CMD_STATUS_SIZE 4
01439
01440 #define EVT_HARDWARE_ERROR 0x10
01441 typedef struct {
01442 uint8_t code;
01443 } __attribute__ ((packed)) evt_hardware_error;
01444 #define EVT_HARDWARE_ERROR_SIZE 1
01445
01446 #define EVT_FLUSH_OCCURRED 0x11
01447 typedef struct {
01448 uint16_t handle;
01449 } __attribute__ ((packed)) evt_flush_occured;
01450 #define EVT_FLUSH_OCCURRED_SIZE 2
01451
01452 #define EVT_ROLE_CHANGE 0x12
01453 typedef struct {
01454 uint8_t status;
01455 bdaddr_t bdaddr;
01456 uint8_t role;
01457 } __attribute__ ((packed)) evt_role_change;
01458 #define EVT_ROLE_CHANGE_SIZE 8
01459
01460 #define EVT_NUM_COMP_PKTS 0x13
01461 typedef struct {
01462 uint8_t num_hndl;
01463 struct {
01464 uint16_t handle;
01465 uint16_t num_packets;
01466 } connection[0];
01467 } __attribute__ ((packed)) evt_num_comp_pkts;
01468 #define EVT_NUM_COMP_PKTS_SIZE(num_hndl) (1 + 4 * (num_hndl))
01469
01470 #define EVT_MODE_CHANGE 0x14
01471 typedef struct {
01472 uint8_t status;
01473 uint16_t handle;
01474 uint8_t mode;
01475 uint16_t interval;
01476 } __attribute__ ((packed)) evt_mode_change;
01477 #define EVT_MODE_CHANGE_SIZE 6
01478
01479 #define EVT_RETURN_LINK_KEYS 0x15
01480 typedef struct {
01481 uint8_t num_keys;
01482
01483 } __attribute__ ((packed)) evt_return_link_keys;
01484 #define EVT_RETURN_LINK_KEYS_SIZE 1
01485
01486 #define EVT_PIN_CODE_REQ 0x16
01487 typedef struct {
01488 bdaddr_t bdaddr;
01489 } __attribute__ ((packed)) evt_pin_code_req;
01490 #define EVT_PIN_CODE_REQ_SIZE 6
01491
01492 #define EVT_LINK_KEY_REQ 0x17
01493 typedef struct {
01494 bdaddr_t bdaddr;
01495 } __attribute__ ((packed)) evt_link_key_req;
01496 #define EVT_LINK_KEY_REQ_SIZE 6
01497
01498 #define EVT_LINK_KEY_NOTIFY 0x18
01499 typedef struct {
01500 bdaddr_t bdaddr;
01501 uint8_t link_key[16];
01502 uint8_t key_type;
01503 } __attribute__ ((packed)) evt_link_key_notify;
01504 #define EVT_LINK_KEY_NOTIFY_SIZE 23
01505
01506 #define EVT_LOOPBACK_COMMAND 0x19
01507
01508 #define EVT_DATA_BUFFER_OVERFLOW 0x1A
01509 typedef struct {
01510 uint8_t link_type;
01511 } __attribute__ ((packed)) evt_data_buffer_overflow;
01512 #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
01513
01514 #define EVT_MAX_SLOTS_CHANGE 0x1B
01515 typedef struct {
01516 uint16_t handle;
01517 uint8_t max_slots;
01518 } __attribute__ ((packed)) evt_max_slots_change;
01519 #define EVT_MAX_SLOTS_CHANGE_SIZE 3
01520
01521 #define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C
01522 typedef struct {
01523 uint8_t status;
01524 uint16_t handle;
01525 uint16_t clock_offset;
01526 } __attribute__ ((packed)) evt_read_clock_offset_complete;
01527 #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
01528
01529 #define EVT_CONN_PTYPE_CHANGED 0x1D
01530 typedef struct {
01531 uint8_t status;
01532 uint16_t handle;
01533 uint16_t ptype;
01534 } __attribute__ ((packed)) evt_conn_ptype_changed;
01535 #define EVT_CONN_PTYPE_CHANGED_SIZE 5
01536
01537 #define EVT_QOS_VIOLATION 0x1E
01538 typedef struct {
01539 uint16_t handle;
01540 } __attribute__ ((packed)) evt_qos_violation;
01541 #define EVT_QOS_VIOLATION_SIZE 2
01542
01543 #define EVT_PSCAN_REP_MODE_CHANGE 0x20
01544 typedef struct {
01545 bdaddr_t bdaddr;
01546 uint8_t pscan_rep_mode;
01547 } __attribute__ ((packed)) evt_pscan_rep_mode_change;
01548 #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
01549
01550 #define EVT_FLOW_SPEC_COMPLETE 0x21
01551 typedef struct {
01552 uint8_t status;
01553 uint16_t handle;
01554 uint8_t flags;
01555 uint8_t direction;
01556 hci_qos qos;
01557 } __attribute__ ((packed)) evt_flow_spec_complete;
01558 #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
01559
01560 #define EVT_INQUIRY_RESULT_WITH_RSSI 0x22
01561 typedef struct {
01562 uint8_t num_responses;
01563 bdaddr_t bdaddr;
01564 uint8_t pscan_rep_mode;
01565 uint8_t pscan_period_mode;
01566 uint8_t dev_class[3];
01567 uint16_t clock_offset;
01568 int8_t rssi;
01569 } __attribute__ ((packed)) inquiry_info_with_rssi;
01570 #define INQUIRY_INFO_WITH_RSSI_SIZE 15
01571 typedef struct {
01572 uint8_t num_responses;
01573 bdaddr_t bdaddr;
01574 uint8_t pscan_rep_mode;
01575 uint8_t pscan_period_mode;
01576 uint8_t pscan_mode;
01577 uint8_t dev_class[3];
01578 uint16_t clock_offset;
01579 int8_t rssi;
01580 } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
01581 #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 16
01582
01583 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23
01584 typedef struct {
01585 uint8_t status;
01586 uint16_t handle;
01587 uint8_t page_num;
01588 uint8_t max_page_num;
01589 uint8_t features[8];
01590 } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
01591 #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
01592
01593 #define EVT_SYNC_CONN_COMPLETE 0x2C
01594 typedef struct {
01595 uint8_t status;
01596 uint16_t handle;
01597 bdaddr_t bdaddr;
01598 uint8_t link_type;
01599 uint8_t trans_interval;
01600 uint8_t retrans_window;
01601 uint16_t rx_pkt_len;
01602 uint16_t tx_pkt_len;
01603 uint8_t air_mode;
01604 } __attribute__ ((packed)) evt_sync_conn_complete;
01605 #define EVT_SYNC_CONN_COMPLETE_SIZE 17
01606
01607 #define EVT_SYNC_CONN_CHANGED 0x2D
01608 typedef struct {
01609 uint8_t status;
01610 uint16_t handle;
01611 uint8_t trans_interval;
01612 uint8_t retrans_window;
01613 uint16_t rx_pkt_len;
01614 uint16_t tx_pkt_len;
01615 } __attribute__ ((packed)) evt_sync_conn_changed;
01616 #define EVT_SYNC_CONN_CHANGED_SIZE 9
01617
01618 #define EVT_SNIFF_SUBRATE 0x2E
01619 typedef struct {
01620 uint8_t status;
01621 uint16_t handle;
01622 uint16_t max_remote_latency;
01623 uint16_t max_local_latency;
01624 uint16_t min_remote_timeout;
01625 uint16_t min_local_timeout;
01626 } __attribute__ ((packed)) evt_sniff_subrate;
01627 #define EVT_SNIFF_SUBRATE_SIZE 11
01628
01629 #define EVT_EXTENDED_INQUIRY_RESULT 0x2F
01630 typedef struct {
01631 bdaddr_t bdaddr;
01632 uint8_t pscan_rep_mode;
01633 uint8_t pscan_period_mode;
01634 uint8_t dev_class[3];
01635 uint16_t clock_offset;
01636 int8_t rssi;
01637 uint8_t data[240];
01638 } __attribute__ ((packed)) extended_inquiry_info;
01639 #define EXTENDED_INQUIRY_INFO_SIZE 254
01640
01641 #define EVT_TESTING 0xFE
01642
01643 #define EVT_VENDOR 0xFF
01644
01645
01646 #define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10))
01647 #define cmd_opcode_ogf(op) (op >> 10)
01648 #define cmd_opcode_ocf(op) (op & 0x03ff)
01649
01650
01651 #define acl_handle_pack(h, f) (uint16_t)(((h) & 0x0fff)|((f) << 12))
01652 #define acl_handle(h) ((h) & 0x0fff)
01653 #define acl_flags(h) ((h) >> 12)
01654
01655
01656 #define HCI_COMMAND_HDR_SIZE 3
01657 #define HCI_EVENT_HDR_SIZE 2
01658 #define HCI_ACL_HDR_SIZE 4
01659 #define HCI_SCO_HDR_SIZE 3
01660
01661 struct hci_command_hdr {
01662 uint16_t opcode;
01663 uint8_t plen;
01664 } __attribute__ ((packed));
01665
01666 struct hci_event_hdr {
01667 uint8_t evt;
01668 uint8_t plen;
01669 } __attribute__ ((packed));
01670
01671 struct hci_acl_hdr {
01672 uint16_t handle;
01673 uint16_t dlen;
01674 } __attribute__ ((packed));
01675
01676 struct hci_sco_hdr {
01677 uint16_t handle;
01678 uint8_t dlen;
01679 } __attribute__ ((packed));
01680
01681
01682
01683 enum bt_l2cap_lm_bits {
01684 L2CAP_LM_MASTER = 1 << 0,
01685 L2CAP_LM_AUTH = 1 << 1,
01686 L2CAP_LM_ENCRYPT = 1 << 2,
01687 L2CAP_LM_TRUSTED = 1 << 3,
01688 L2CAP_LM_RELIABLE = 1 << 4,
01689 L2CAP_LM_SECURE = 1 << 5,
01690 };
01691
01692 enum bt_l2cap_cid_predef {
01693 L2CAP_CID_INVALID = 0x0000,
01694 L2CAP_CID_SIGNALLING= 0x0001,
01695 L2CAP_CID_GROUP = 0x0002,
01696 L2CAP_CID_ALLOC = 0x0040,
01697 };
01698
01699
01700 enum bt_l2cap_cmd {
01701 L2CAP_COMMAND_REJ = 1,
01702 L2CAP_CONN_REQ,
01703 L2CAP_CONN_RSP,
01704 L2CAP_CONF_REQ,
01705 L2CAP_CONF_RSP,
01706 L2CAP_DISCONN_REQ,
01707 L2CAP_DISCONN_RSP,
01708 L2CAP_ECHO_REQ,
01709 L2CAP_ECHO_RSP,
01710 L2CAP_INFO_REQ,
01711 L2CAP_INFO_RSP,
01712 };
01713
01714 enum bt_l2cap_sar_bits {
01715 L2CAP_SAR_NO_SEG = 0,
01716 L2CAP_SAR_START,
01717 L2CAP_SAR_END,
01718 L2CAP_SAR_CONT,
01719 };
01720
01721
01722 typedef struct {
01723 uint16_t len;
01724 uint16_t cid;
01725 uint8_t data[0];
01726 } __attribute__ ((packed)) l2cap_hdr;
01727 #define L2CAP_HDR_SIZE 4
01728
01729 typedef struct {
01730 uint8_t code;
01731 uint8_t ident;
01732 uint16_t len;
01733 } __attribute__ ((packed)) l2cap_cmd_hdr;
01734 #define L2CAP_CMD_HDR_SIZE 4
01735
01736 typedef struct {
01737 uint16_t reason;
01738 } __attribute__ ((packed)) l2cap_cmd_rej;
01739 #define L2CAP_CMD_REJ_SIZE 2
01740
01741 typedef struct {
01742 uint16_t dcid;
01743 uint16_t scid;
01744 } __attribute__ ((packed)) l2cap_cmd_rej_cid;
01745 #define L2CAP_CMD_REJ_CID_SIZE 4
01746
01747
01748 enum bt_l2cap_rej_reason {
01749 L2CAP_REJ_CMD_NOT_UNDERSTOOD = 0,
01750 L2CAP_REJ_SIG_TOOBIG,
01751 L2CAP_REJ_CID_INVAL,
01752 };
01753
01754 typedef struct {
01755 uint16_t psm;
01756 uint16_t scid;
01757 } __attribute__ ((packed)) l2cap_conn_req;
01758 #define L2CAP_CONN_REQ_SIZE 4
01759
01760 typedef struct {
01761 uint16_t dcid;
01762 uint16_t scid;
01763 uint16_t result;
01764 uint16_t status;
01765 } __attribute__ ((packed)) l2cap_conn_rsp;
01766 #define L2CAP_CONN_RSP_SIZE 8
01767
01768
01769 enum bt_l2cap_conn_res {
01770 L2CAP_CR_SUCCESS = 0,
01771 L2CAP_CR_PEND,
01772 L2CAP_CR_BAD_PSM,
01773 L2CAP_CR_SEC_BLOCK,
01774 L2CAP_CR_NO_MEM,
01775 };
01776
01777
01778 enum bt_l2cap_conn_stat {
01779 L2CAP_CS_NO_INFO = 0,
01780 L2CAP_CS_AUTHEN_PEND,
01781 L2CAP_CS_AUTHOR_PEND,
01782 };
01783
01784 typedef struct {
01785 uint16_t dcid;
01786 uint16_t flags;
01787 uint8_t data[0];
01788 } __attribute__ ((packed)) l2cap_conf_req;
01789 #define L2CAP_CONF_REQ_SIZE(datalen) (4 + (datalen))
01790
01791 typedef struct {
01792 uint16_t scid;
01793 uint16_t flags;
01794 uint16_t result;
01795 uint8_t data[0];
01796 } __attribute__ ((packed)) l2cap_conf_rsp;
01797 #define L2CAP_CONF_RSP_SIZE(datalen) (6 + datalen)
01798
01799 enum bt_l2cap_conf_res {
01800 L2CAP_CONF_SUCCESS = 0,
01801 L2CAP_CONF_UNACCEPT,
01802 L2CAP_CONF_REJECT,
01803 L2CAP_CONF_UNKNOWN,
01804 };
01805
01806 typedef struct {
01807 uint8_t type;
01808 uint8_t len;
01809 uint8_t val[0];
01810 } __attribute__ ((packed)) l2cap_conf_opt;
01811 #define L2CAP_CONF_OPT_SIZE 2
01812
01813 enum bt_l2cap_conf_val {
01814 L2CAP_CONF_MTU = 1,
01815 L2CAP_CONF_FLUSH_TO,
01816 L2CAP_CONF_QOS,
01817 L2CAP_CONF_RFC,
01818 L2CAP_CONF_RFC_MODE = L2CAP_CONF_RFC,
01819 };
01820
01821 typedef struct {
01822 uint8_t flags;
01823 uint8_t service_type;
01824 uint32_t token_rate;
01825 uint32_t token_bucket_size;
01826 uint32_t peak_bandwidth;
01827 uint32_t latency;
01828 uint32_t delay_variation;
01829 } __attribute__ ((packed)) l2cap_conf_opt_qos;
01830 #define L2CAP_CONF_OPT_QOS_SIZE 22
01831
01832 enum bt_l2cap_conf_opt_qos_st {
01833 L2CAP_CONF_QOS_NO_TRAFFIC = 0x00,
01834 L2CAP_CONF_QOS_BEST_EFFORT,
01835 L2CAP_CONF_QOS_GUARANTEED,
01836 };
01837
01838 #define L2CAP_CONF_QOS_WILDCARD 0xffffffff
01839
01840 enum bt_l2cap_mode {
01841 L2CAP_MODE_BASIC = 0,
01842 L2CAP_MODE_RETRANS = 1,
01843 L2CAP_MODE_FLOWCTL = 2,
01844 };
01845
01846 typedef struct {
01847 uint16_t dcid;
01848 uint16_t scid;
01849 } __attribute__ ((packed)) l2cap_disconn_req;
01850 #define L2CAP_DISCONN_REQ_SIZE 4
01851
01852 typedef struct {
01853 uint16_t dcid;
01854 uint16_t scid;
01855 } __attribute__ ((packed)) l2cap_disconn_rsp;
01856 #define L2CAP_DISCONN_RSP_SIZE 4
01857
01858 typedef struct {
01859 uint16_t type;
01860 } __attribute__ ((packed)) l2cap_info_req;
01861 #define L2CAP_INFO_REQ_SIZE 2
01862
01863 typedef struct {
01864 uint16_t type;
01865 uint16_t result;
01866 uint8_t data[0];
01867 } __attribute__ ((packed)) l2cap_info_rsp;
01868 #define L2CAP_INFO_RSP_SIZE 4
01869
01870
01871 enum bt_l2cap_info_type {
01872 L2CAP_IT_CL_MTU = 1,
01873 L2CAP_IT_FEAT_MASK,
01874 };
01875
01876
01877 enum bt_l2cap_info_result {
01878 L2CAP_IR_SUCCESS = 0,
01879 L2CAP_IR_NOTSUPP,
01880 };
01881
01882
01883
01884
01885
01886
01887 enum sdp_proto_uuid {
01888 SDP_UUID = 0x0001,
01889 UDP_UUID = 0x0002,
01890 RFCOMM_UUID = 0x0003,
01891 TCP_UUID = 0x0004,
01892 TCS_BIN_UUID = 0x0005,
01893 TCS_AT_UUID = 0x0006,
01894 OBEX_UUID = 0x0008,
01895 IP_UUID = 0x0009,
01896 FTP_UUID = 0x000a,
01897 HTTP_UUID = 0x000c,
01898 WSP_UUID = 0x000e,
01899 BNEP_UUID = 0x000f,
01900 UPNP_UUID = 0x0010,
01901 HIDP_UUID = 0x0011,
01902 HCRP_CTRL_UUID = 0x0012,
01903 HCRP_DATA_UUID = 0x0014,
01904 HCRP_NOTE_UUID = 0x0016,
01905 AVCTP_UUID = 0x0017,
01906 AVDTP_UUID = 0x0019,
01907 CMTP_UUID = 0x001b,
01908 UDI_UUID = 0x001d,
01909 MCAP_CTRL_UUID = 0x001e,
01910 MCAP_DATA_UUID = 0x001f,
01911 L2CAP_UUID = 0x0100,
01912 };
01913
01914
01915
01916
01917 enum service_class_id {
01918 SDP_SERVER_SVCLASS_ID = 0x1000,
01919 BROWSE_GRP_DESC_SVCLASS_ID = 0x1001,
01920 PUBLIC_BROWSE_GROUP = 0x1002,
01921 SERIAL_PORT_SVCLASS_ID = 0x1101,
01922 LAN_ACCESS_SVCLASS_ID = 0x1102,
01923 DIALUP_NET_SVCLASS_ID = 0x1103,
01924 IRMC_SYNC_SVCLASS_ID = 0x1104,
01925 OBEX_OBJPUSH_SVCLASS_ID = 0x1105,
01926 OBEX_FILETRANS_SVCLASS_ID = 0x1106,
01927 IRMC_SYNC_CMD_SVCLASS_ID = 0x1107,
01928 HEADSET_SVCLASS_ID = 0x1108,
01929 CORDLESS_TELEPHONY_SVCLASS_ID = 0x1109,
01930 AUDIO_SOURCE_SVCLASS_ID = 0x110a,
01931 AUDIO_SINK_SVCLASS_ID = 0x110b,
01932 AV_REMOTE_TARGET_SVCLASS_ID = 0x110c,
01933 ADVANCED_AUDIO_SVCLASS_ID = 0x110d,
01934 AV_REMOTE_SVCLASS_ID = 0x110e,
01935 VIDEO_CONF_SVCLASS_ID = 0x110f,
01936 INTERCOM_SVCLASS_ID = 0x1110,
01937 FAX_SVCLASS_ID = 0x1111,
01938 HEADSET_AGW_SVCLASS_ID = 0x1112,
01939 WAP_SVCLASS_ID = 0x1113,
01940 WAP_CLIENT_SVCLASS_ID = 0x1114,
01941 PANU_SVCLASS_ID = 0x1115,
01942 NAP_SVCLASS_ID = 0x1116,
01943 GN_SVCLASS_ID = 0x1117,
01944 DIRECT_PRINTING_SVCLASS_ID = 0x1118,
01945 REFERENCE_PRINTING_SVCLASS_ID = 0x1119,
01946 IMAGING_SVCLASS_ID = 0x111a,
01947 IMAGING_RESPONDER_SVCLASS_ID = 0x111b,
01948 IMAGING_ARCHIVE_SVCLASS_ID = 0x111c,
01949 IMAGING_REFOBJS_SVCLASS_ID = 0x111d,
01950 HANDSFREE_SVCLASS_ID = 0x111e,
01951 HANDSFREE_AGW_SVCLASS_ID = 0x111f,
01952 DIRECT_PRT_REFOBJS_SVCLASS_ID = 0x1120,
01953 REFLECTED_UI_SVCLASS_ID = 0x1121,
01954 BASIC_PRINTING_SVCLASS_ID = 0x1122,
01955 PRINTING_STATUS_SVCLASS_ID = 0x1123,
01956 HID_SVCLASS_ID = 0x1124,
01957 HCR_SVCLASS_ID = 0x1125,
01958 HCR_PRINT_SVCLASS_ID = 0x1126,
01959 HCR_SCAN_SVCLASS_ID = 0x1127,
01960 CIP_SVCLASS_ID = 0x1128,
01961 VIDEO_CONF_GW_SVCLASS_ID = 0x1129,
01962 UDI_MT_SVCLASS_ID = 0x112a,
01963 UDI_TA_SVCLASS_ID = 0x112b,
01964 AV_SVCLASS_ID = 0x112c,
01965 SAP_SVCLASS_ID = 0x112d,
01966 PBAP_PCE_SVCLASS_ID = 0x112e,
01967 PBAP_PSE_SVCLASS_ID = 0x112f,
01968 PBAP_SVCLASS_ID = 0x1130,
01969 PNP_INFO_SVCLASS_ID = 0x1200,
01970 GENERIC_NETWORKING_SVCLASS_ID = 0x1201,
01971 GENERIC_FILETRANS_SVCLASS_ID = 0x1202,
01972 GENERIC_AUDIO_SVCLASS_ID = 0x1203,
01973 GENERIC_TELEPHONY_SVCLASS_ID = 0x1204,
01974 UPNP_SVCLASS_ID = 0x1205,
01975 UPNP_IP_SVCLASS_ID = 0x1206,
01976 UPNP_PAN_SVCLASS_ID = 0x1300,
01977 UPNP_LAP_SVCLASS_ID = 0x1301,
01978 UPNP_L2CAP_SVCLASS_ID = 0x1302,
01979 VIDEO_SOURCE_SVCLASS_ID = 0x1303,
01980 VIDEO_SINK_SVCLASS_ID = 0x1304,
01981 VIDEO_DISTRIBUTION_SVCLASS_ID = 0x1305,
01982 MDP_SVCLASS_ID = 0x1400,
01983 MDP_SOURCE_SVCLASS_ID = 0x1401,
01984 MDP_SINK_SVCLASS_ID = 0x1402,
01985 APPLE_AGENT_SVCLASS_ID = 0x2112,
01986 };
01987
01988
01989
01990
01991
01992 #define SDP_SERVER_PROFILE_ID SDP_SERVER_SVCLASS_ID
01993 #define BROWSE_GRP_DESC_PROFILE_ID BROWSE_GRP_DESC_SVCLASS_ID
01994 #define SERIAL_PORT_PROFILE_ID SERIAL_PORT_SVCLASS_ID
01995 #define LAN_ACCESS_PROFILE_ID LAN_ACCESS_SVCLASS_ID
01996 #define DIALUP_NET_PROFILE_ID DIALUP_NET_SVCLASS_ID
01997 #define IRMC_SYNC_PROFILE_ID IRMC_SYNC_SVCLASS_ID
01998 #define OBEX_OBJPUSH_PROFILE_ID OBEX_OBJPUSH_SVCLASS_ID
01999 #define OBEX_FILETRANS_PROFILE_ID OBEX_FILETRANS_SVCLASS_ID
02000 #define IRMC_SYNC_CMD_PROFILE_ID IRMC_SYNC_CMD_SVCLASS_ID
02001 #define HEADSET_PROFILE_ID HEADSET_SVCLASS_ID
02002 #define CORDLESS_TELEPHONY_PROFILE_ID CORDLESS_TELEPHONY_SVCLASS_ID
02003 #define AUDIO_SOURCE_PROFILE_ID AUDIO_SOURCE_SVCLASS_ID
02004 #define AUDIO_SINK_PROFILE_ID AUDIO_SINK_SVCLASS_ID
02005 #define AV_REMOTE_TARGET_PROFILE_ID AV_REMOTE_TARGET_SVCLASS_ID
02006 #define ADVANCED_AUDIO_PROFILE_ID ADVANCED_AUDIO_SVCLASS_ID
02007 #define AV_REMOTE_PROFILE_ID AV_REMOTE_SVCLASS_ID
02008 #define VIDEO_CONF_PROFILE_ID VIDEO_CONF_SVCLASS_ID
02009 #define INTERCOM_PROFILE_ID INTERCOM_SVCLASS_ID
02010 #define FAX_PROFILE_ID FAX_SVCLASS_ID
02011 #define HEADSET_AGW_PROFILE_ID HEADSET_AGW_SVCLASS_ID
02012 #define WAP_PROFILE_ID WAP_SVCLASS_ID
02013 #define WAP_CLIENT_PROFILE_ID WAP_CLIENT_SVCLASS_ID
02014 #define PANU_PROFILE_ID PANU_SVCLASS_ID
02015 #define NAP_PROFILE_ID NAP_SVCLASS_ID
02016 #define GN_PROFILE_ID GN_SVCLASS_ID
02017 #define DIRECT_PRINTING_PROFILE_ID DIRECT_PRINTING_SVCLASS_ID
02018 #define REFERENCE_PRINTING_PROFILE_ID REFERENCE_PRINTING_SVCLASS_ID
02019 #define IMAGING_PROFILE_ID IMAGING_SVCLASS_ID
02020 #define IMAGING_RESPONDER_PROFILE_ID IMAGING_RESPONDER_SVCLASS_ID
02021 #define IMAGING_ARCHIVE_PROFILE_ID IMAGING_ARCHIVE_SVCLASS_ID
02022 #define IMAGING_REFOBJS_PROFILE_ID IMAGING_REFOBJS_SVCLASS_ID
02023 #define HANDSFREE_PROFILE_ID HANDSFREE_SVCLASS_ID
02024 #define HANDSFREE_AGW_PROFILE_ID HANDSFREE_AGW_SVCLASS_ID
02025 #define DIRECT_PRT_REFOBJS_PROFILE_ID DIRECT_PRT_REFOBJS_SVCLASS_ID
02026 #define REFLECTED_UI_PROFILE_ID REFLECTED_UI_SVCLASS_ID
02027 #define BASIC_PRINTING_PROFILE_ID BASIC_PRINTING_SVCLASS_ID
02028 #define PRINTING_STATUS_PROFILE_ID PRINTING_STATUS_SVCLASS_ID
02029 #define HID_PROFILE_ID HID_SVCLASS_ID
02030 #define HCR_PROFILE_ID HCR_SCAN_SVCLASS_ID
02031 #define HCR_PRINT_PROFILE_ID HCR_PRINT_SVCLASS_ID
02032 #define HCR_SCAN_PROFILE_ID HCR_SCAN_SVCLASS_ID
02033 #define CIP_PROFILE_ID CIP_SVCLASS_ID
02034 #define VIDEO_CONF_GW_PROFILE_ID VIDEO_CONF_GW_SVCLASS_ID
02035 #define UDI_MT_PROFILE_ID UDI_MT_SVCLASS_ID
02036 #define UDI_TA_PROFILE_ID UDI_TA_SVCLASS_ID
02037 #define AV_PROFILE_ID AV_SVCLASS_ID
02038 #define SAP_PROFILE_ID SAP_SVCLASS_ID
02039 #define PBAP_PCE_PROFILE_ID PBAP_PCE_SVCLASS_ID
02040 #define PBAP_PSE_PROFILE_ID PBAP_PSE_SVCLASS_ID
02041 #define PBAP_PROFILE_ID PBAP_SVCLASS_ID
02042 #define PNP_INFO_PROFILE_ID PNP_INFO_SVCLASS_ID
02043 #define GENERIC_NETWORKING_PROFILE_ID GENERIC_NETWORKING_SVCLASS_ID
02044 #define GENERIC_FILETRANS_PROFILE_ID GENERIC_FILETRANS_SVCLASS_ID
02045 #define GENERIC_AUDIO_PROFILE_ID GENERIC_AUDIO_SVCLASS_ID
02046 #define GENERIC_TELEPHONY_PROFILE_ID GENERIC_TELEPHONY_SVCLASS_ID
02047 #define UPNP_PROFILE_ID UPNP_SVCLASS_ID
02048 #define UPNP_IP_PROFILE_ID UPNP_IP_SVCLASS_ID
02049 #define UPNP_PAN_PROFILE_ID UPNP_PAN_SVCLASS_ID
02050 #define UPNP_LAP_PROFILE_ID UPNP_LAP_SVCLASS_ID
02051 #define UPNP_L2CAP_PROFILE_ID UPNP_L2CAP_SVCLASS_ID
02052 #define VIDEO_SOURCE_PROFILE_ID VIDEO_SOURCE_SVCLASS_ID
02053 #define VIDEO_SINK_PROFILE_ID VIDEO_SINK_SVCLASS_ID
02054 #define VIDEO_DISTRIBUTION_PROFILE_ID VIDEO_DISTRIBUTION_SVCLASS_ID
02055 #define MDP_PROFILE_ID MDP_SVCLASS_ID
02056 #define MDP_SOURCE_PROFILE_ID MDP_SROUCE_SVCLASS_ID
02057 #define MDP_SINK_PROFILE_ID MDP_SINK_SVCLASS_ID
02058 #define APPLE_AGENT_PROFILE_ID APPLE_AGENT_SVCLASS_ID
02059
02060
02061 enum bt_sdp_data_type {
02062 SDP_DTYPE_NIL = 0 << 3,
02063 SDP_DTYPE_UINT = 1 << 3,
02064 SDP_DTYPE_SINT = 2 << 3,
02065 SDP_DTYPE_UUID = 3 << 3,
02066 SDP_DTYPE_STRING = 4 << 3,
02067 SDP_DTYPE_BOOL = 5 << 3,
02068 SDP_DTYPE_SEQ = 6 << 3,
02069 SDP_DTYPE_ALT = 7 << 3,
02070 SDP_DTYPE_URL = 8 << 3,
02071 };
02072
02073 enum bt_sdp_data_size {
02074 SDP_DSIZE_1 = 0,
02075 SDP_DSIZE_2,
02076 SDP_DSIZE_4,
02077 SDP_DSIZE_8,
02078 SDP_DSIZE_16,
02079 SDP_DSIZE_NEXT1,
02080 SDP_DSIZE_NEXT2,
02081 SDP_DSIZE_NEXT4,
02082 SDP_DSIZE_MASK = SDP_DSIZE_NEXT4,
02083 };
02084
02085 enum bt_sdp_cmd {
02086 SDP_ERROR_RSP = 0x01,
02087 SDP_SVC_SEARCH_REQ = 0x02,
02088 SDP_SVC_SEARCH_RSP = 0x03,
02089 SDP_SVC_ATTR_REQ = 0x04,
02090 SDP_SVC_ATTR_RSP = 0x05,
02091 SDP_SVC_SEARCH_ATTR_REQ = 0x06,
02092 SDP_SVC_SEARCH_ATTR_RSP = 0x07,
02093 };
02094
02095 enum bt_sdp_errorcode {
02096 SDP_INVALID_VERSION = 0x0001,
02097 SDP_INVALID_RECORD_HANDLE = 0x0002,
02098 SDP_INVALID_SYNTAX = 0x0003,
02099 SDP_INVALID_PDU_SIZE = 0x0004,
02100 SDP_INVALID_CSTATE = 0x0005,
02101 };
02102
02103
02104
02105
02106
02107
02108
02109
02110
02111 #define SDP_PRIMARY_LANG_BASE 0x0100
02112
02113 enum bt_sdp_attribute_id {
02114 SDP_ATTR_RECORD_HANDLE = 0x0000,
02115 SDP_ATTR_SVCLASS_ID_LIST = 0x0001,
02116 SDP_ATTR_RECORD_STATE = 0x0002,
02117 SDP_ATTR_SERVICE_ID = 0x0003,
02118 SDP_ATTR_PROTO_DESC_LIST = 0x0004,
02119 SDP_ATTR_BROWSE_GRP_LIST = 0x0005,
02120 SDP_ATTR_LANG_BASE_ATTR_ID_LIST = 0x0006,
02121 SDP_ATTR_SVCINFO_TTL = 0x0007,
02122 SDP_ATTR_SERVICE_AVAILABILITY = 0x0008,
02123 SDP_ATTR_PFILE_DESC_LIST = 0x0009,
02124 SDP_ATTR_DOC_URL = 0x000a,
02125 SDP_ATTR_CLNT_EXEC_URL = 0x000b,
02126 SDP_ATTR_ICON_URL = 0x000c,
02127 SDP_ATTR_ADD_PROTO_DESC_LIST = 0x000d,
02128
02129 SDP_ATTR_SVCNAME_PRIMARY = SDP_PRIMARY_LANG_BASE + 0,
02130 SDP_ATTR_SVCDESC_PRIMARY = SDP_PRIMARY_LANG_BASE + 1,
02131 SDP_ATTR_SVCPROV_PRIMARY = SDP_PRIMARY_LANG_BASE + 2,
02132
02133 SDP_ATTR_GROUP_ID = 0x0200,
02134 SDP_ATTR_IP_SUBNET = 0x0200,
02135
02136
02137 SDP_ATTR_VERSION_NUM_LIST = 0x0200,
02138 SDP_ATTR_SVCDB_STATE = 0x0201,
02139
02140 SDP_ATTR_SERVICE_VERSION = 0x0300,
02141 SDP_ATTR_EXTERNAL_NETWORK = 0x0301,
02142 SDP_ATTR_SUPPORTED_DATA_STORES_LIST = 0x0301,
02143 SDP_ATTR_FAX_CLASS1_SUPPORT = 0x0302,
02144 SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL = 0x0302,
02145 SDP_ATTR_FAX_CLASS20_SUPPORT = 0x0303,
02146 SDP_ATTR_SUPPORTED_FORMATS_LIST = 0x0303,
02147 SDP_ATTR_FAX_CLASS2_SUPPORT = 0x0304,
02148 SDP_ATTR_AUDIO_FEEDBACK_SUPPORT = 0x0305,
02149 SDP_ATTR_NETWORK_ADDRESS = 0x0306,
02150 SDP_ATTR_WAP_GATEWAY = 0x0307,
02151 SDP_ATTR_HOMEPAGE_URL = 0x0308,
02152 SDP_ATTR_WAP_STACK_TYPE = 0x0309,
02153 SDP_ATTR_SECURITY_DESC = 0x030a,
02154 SDP_ATTR_NET_ACCESS_TYPE = 0x030b,
02155 SDP_ATTR_MAX_NET_ACCESSRATE = 0x030c,
02156 SDP_ATTR_IP4_SUBNET = 0x030d,
02157 SDP_ATTR_IP6_SUBNET = 0x030e,
02158 SDP_ATTR_SUPPORTED_CAPABILITIES = 0x0310,
02159 SDP_ATTR_SUPPORTED_FEATURES = 0x0311,
02160 SDP_ATTR_SUPPORTED_FUNCTIONS = 0x0312,
02161 SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY = 0x0313,
02162 SDP_ATTR_SUPPORTED_REPOSITORIES = 0x0314,
02163
02164
02165 SDP_ATTR_SPECIFICATION_ID = 0x0200,
02166 SDP_ATTR_VENDOR_ID = 0x0201,
02167 SDP_ATTR_PRODUCT_ID = 0x0202,
02168 SDP_ATTR_VERSION = 0x0203,
02169 SDP_ATTR_PRIMARY_RECORD = 0x0204,
02170 SDP_ATTR_VENDOR_ID_SOURCE = 0x0205,
02171
02172
02173 SDP_ATTR_DEVICE_RELEASE_NUMBER = 0x0200,
02174 SDP_ATTR_PARSER_VERSION = 0x0201,
02175 SDP_ATTR_DEVICE_SUBCLASS = 0x0202,
02176 SDP_ATTR_COUNTRY_CODE = 0x0203,
02177 SDP_ATTR_VIRTUAL_CABLE = 0x0204,
02178 SDP_ATTR_RECONNECT_INITIATE = 0x0205,
02179 SDP_ATTR_DESCRIPTOR_LIST = 0x0206,
02180 SDP_ATTR_LANG_ID_BASE_LIST = 0x0207,
02181 SDP_ATTR_SDP_DISABLE = 0x0208,
02182 SDP_ATTR_BATTERY_POWER = 0x0209,
02183 SDP_ATTR_REMOTE_WAKEUP = 0x020a,
02184 SDP_ATTR_PROFILE_VERSION = 0x020b,
02185 SDP_ATTR_SUPERVISION_TIMEOUT = 0x020c,
02186 SDP_ATTR_NORMALLY_CONNECTABLE = 0x020d,
02187 SDP_ATTR_BOOT_DEVICE = 0x020e,
02188 };