15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * QEMU Bluetooth HCI helpers. 35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (C) 2007 OpenMoko, Inc. 55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Written by Andrzej Zaborowski <andrew@openedhand.com> 65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Useful definitions taken from BlueZ project's headers. 85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (C) 2000-2001 Qualcomm Incorporated 95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com> 105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Copyright (C) 2002-2006 Marcel Holtmann <marcel@holtmann.org> 115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * This program is free software; you can redistribute it and/or 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * modify it under the terms of the GNU General Public License as 145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * published by the Free Software Foundation; either version 2 of 155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * the License, or (at your option) any later version. 165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * This program is distributed in the hope that it will be useful, 185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * but WITHOUT ANY WARRANTY; without even the implied warranty of 195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * GNU General Public License for more details. 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * You should have received a copy of the GNU General Public License 23a25351325187eb8eff8b9b090acd8f2d7684c6ffDavid Turner * along with this program; if not, see <http://www.gnu.org/licenses/>. 245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* BD Address */ 275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t b[6]; 295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__((packed)) bdaddr_t; 305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BDADDR_ALL (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}) 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) 345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Copy, swap, convert BD Address */ 365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2) 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner return memcmp(ba1, ba2, sizeof(bdaddr_t)); 395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstatic inline void bacpy(bdaddr_t *dst, const bdaddr_t *src) 415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner{ 425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner memcpy(dst, src, sizeof(bdaddr_t)); 435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} 445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BAINIT(orig) { .b = { \ 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner (orig)->b[0], (orig)->b[1], (orig)->b[2], \ 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner (orig)->b[3], (orig)->b[4], (orig)->b[5], \ 485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}, } 495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* The twisted structures of a bluetooth environment */ 515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_device_s; 525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_scatternet_s; 535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_piconet_s; 545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_link_s; 555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_scatternet_s { 575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_device_s *slave; 585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_link_s { 615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_device_s *slave, *host; 625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; /* Master (host) side handle */ 635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t acl_interval; 645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner enum { 655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner acl_active, 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner acl_hold, 675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner acl_sniff, 685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner acl_parked, 695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } acl_mode; 705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_device_s { 735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int lt_addr; 745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bd_addr; 755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int mtu; 765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int setup; 775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_scatternet_s *net; 785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t key[16]; 805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int key_present; 815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t class[3]; 825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t reject_reason; 845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint64_t lmp_caps; 865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner const char *lmp_name; 875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_connection_request)(struct bt_link_s *link); 885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_connection_complete)(struct bt_link_s *link); 895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_disconnect_master)(struct bt_link_s *link); 905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_disconnect_slave)(struct bt_link_s *link); 915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_acl_data)(struct bt_link_s *link, const uint8_t *data, 925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int start, int len); 935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_acl_resp)(struct bt_link_s *link, const uint8_t *data, 945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int start, int len); 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*lmp_mode_change)(struct bt_link_s *link); 965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*handle_destroy)(struct bt_device_s *device); 985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_device_s *next; /* Next in the piconet/scatternet */ 995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int inquiry_scan; 1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int page_scan; 1025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clkoff; /* Note: Always little-endian */ 1045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 1055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt.c */ 1075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_device_init(struct bt_device_s *dev, struct bt_scatternet_s *net); 1085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_device_done(struct bt_device_s *dev); 1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt-hci.c */ 1115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct HCIInfo *bt_new_hci(struct bt_scatternet_s *net); 1125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt-vhci.c */ 1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_vhci_init(struct HCIInfo *info); 1155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt-hci-csr.c */ 1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum { 1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner csrhci_pin_reset, 1195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner csrhci_pin_wakeup, 1205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner __csrhci_pins, 1215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerqemu_irq *csrhci_pins_get(CharDriverState *chr); 1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerCharDriverState *uart_hci_init(qemu_irq wakeup); 1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt-l2cap.c */ 1265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_l2cap_device_s; 1275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_l2cap_conn_params_s; 1285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_l2cap_psm_s; 1295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_l2cap_device_init(struct bt_l2cap_device_s *dev, 1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_scatternet_s *net); 1315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_l2cap_device_done(struct bt_l2cap_device_s *dev); 1325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_l2cap_psm_register(struct bt_l2cap_device_s *dev, int psm, 1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int min_mtu, int (*new_channel)(struct bt_l2cap_device_s *dev, 1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_l2cap_conn_params_s *params)); 1355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_l2cap_device_s { 1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_device_s device; 1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct bt_l2cap_psm_s *first_psm; 1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_l2cap_conn_params_s { 1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* Input */ 1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t *(*sdu_out)(struct bt_l2cap_conn_params_s *chan, int len); 1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*sdu_submit)(struct bt_l2cap_conn_params_s *chan); 1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int remote_mtu; 1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* Output */ 1475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void *opaque; 1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*sdu_in)(void *opaque, const uint8_t *data, int len); 1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void (*close)(void *opaque); 1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_psm_predef { 1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_SDP = 0x0001, 1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_RFCOMM = 0x0003, 1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_TELEPHONY = 0x0005, 1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_TCS = 0x0007, 1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_BNEP = 0x000f, 1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_HID_CTRL = 0x0011, 1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_HID_INTR = 0x0013, 1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_UPNP = 0x0015, 1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_AVCTP = 0x0017, 1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BT_PSM_AVDTP = 0x0019, 1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt-sdp.c */ 1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bt_l2cap_sdp_init(struct bt_l2cap_device_s *dev); 1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* bt-hid.c */ 1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_device_s *bt_mouse_init(struct bt_scatternet_s *net); 1705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_device_s *bt_tablet_init(struct bt_scatternet_s *net); 1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct bt_device_s *bt_keyboard_init(struct bt_scatternet_s *net); 1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Link Management Protocol layer defines */ 1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define LLID_ACLU_CONT 0x1 1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define LLID_ACLU_START 0x2 1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define LLID_ACLC 0x3 1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_pdu_type { 1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_NAME_REQ = 0x0001, 1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_NAME_RES = 0x0002, 1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ACCEPTED = 0x0003, 1835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_NOT_ACCEPTED = 0x0004, 1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CLKOFFSET_REQ = 0x0005, 1855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CLKOFFSET_RES = 0x0006, 1865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_DETACH = 0x0007, 1875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_IN_RAND = 0x0008, 1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_COMB_KEY = 0x0009, 1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_UNIT_KEY = 0x000a, 1905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_AU_RAND = 0x000b, 1915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SRES = 0x000c, 1925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TEMP_RAND = 0x000d, 1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TEMP_KEY = 0x000e, 1945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CRYPT_MODE_REQ = 0x000f, 1955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CRYPT_KEY_SIZE_REQ = 0x0010, 1965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_START_ENCRYPT_REQ = 0x0011, 1975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_STOP_ENCRYPT_REQ = 0x0012, 1985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SWITCH_REQ = 0x0013, 1995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_HOLD = 0x0014, 2005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_HOLD_REQ = 0x0015, 2015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SNIFF_REQ = 0x0017, 2025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_UNSNIFF_REQ = 0x0018, 2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_LMP_PARK_REQ = 0x0019, 2045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SET_BCAST_SCAN_WND = 0x001b, 2055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_MODIFY_BEACON = 0x001c, 2065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_UNPARK_BD_ADDR_REQ = 0x001d, 2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_UNPARK_PM_ADDR_REQ = 0x001e, 2085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_INCR_POWER_REQ = 0x001f, 2095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_DECR_POWER_REQ = 0x0020, 2105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_MAX_POWER = 0x0021, 2115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_MIN_POWER = 0x0022, 2125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_AUTO_RATE = 0x0023, 2135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PREFERRED_RATE = 0x0024, 2145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_VERSION_REQ = 0x0025, 2155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_VERSION_RES = 0x0026, 2165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_FEATURES_REQ = 0x0027, 2175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_FEATURES_RES = 0x0028, 2185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_QUALITY_OF_SERVICE = 0x0029, 2195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_QOS_REQ = 0x002a, 2205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_RM_SCO_LINK_REQ = 0x002b, 2215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SCO_LINK_REQ = 0x002c, 2225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_MAX_SLOT = 0x002d, 2235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_MAX_SLOT_REQ = 0x002e, 2245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TIMING_ACCURACY_REQ = 0x002f, 2255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TIMING_ACCURACY_RES = 0x0030, 2265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SETUP_COMPLETE = 0x0031, 2275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_USE_SEMIPERM_KEY = 0x0032, 2285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_HOST_CONNECTION_REQ = 0x0033, 2295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SLOT_OFFSET = 0x0034, 2305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PAGE_MODE_REQ = 0x0035, 2315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PAGE_SCAN_MODE_REQ = 0x0036, 2325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SUPERVISION_TIMEOUT = 0x0037, 2335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TEST_ACTIVATE = 0x0038, 2345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TEST_CONTROL = 0x0039, 2355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CRYPT_KEY_MASK_REQ = 0x003a, 2365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CRYPT_KEY_MASK_RES = 0x003b, 2375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SET_AFH = 0x003c, 2385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ACCEPTED_EXT = 0x7f01, 2395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_NOT_ACCEPTED_EXT = 0x7f02, 2405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_FEATURES_REQ_EXT = 0x7f03, 2415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_FEATURES_RES_EXT = 0x7f04, 2425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PACKET_TYPE_TBL_REQ = 0x7f0b, 2435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ESCO_LINK_REQ = 0x7f0c, 2445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_RM_ESCO_LINK_REQ = 0x7f0d, 2455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CHANNEL_CLASS_REQ = 0x7f10, 2465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CHANNEL_CLASS = 0x7f11, 2475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Host Controller Interface layer defines */ 2505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum hci_packet_type { 2525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_COMMAND_PKT = 0x01, 2535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_ACLDATA_PKT = 0x02, 2545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_SCODATA_PKT = 0x03, 2555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_EVENT_PKT = 0x04, 2565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_VENDOR_PKT = 0xff, 2575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_packet_type { 2605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_2DH1 = 1 << 1, 2615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_3DH1 = 1 << 2, 2625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_DM1 = 1 << 3, 2635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_DH1 = 1 << 4, 2645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_2DH3 = 1 << 8, 2655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_3DH3 = 1 << 9, 2665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_DM3 = 1 << 10, 2675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_DH3 = 1 << 11, 2685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_2DH5 = 1 << 12, 2695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_3DH5 = 1 << 13, 2705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_DM5 = 1 << 14, 2715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_DH5 = 1 << 15, 2725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum sco_packet_type { 2755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_HV1 = 1 << 5, 2765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_HV2 = 1 << 6, 2775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_HV3 = 1 << 7, 2785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum ev_packet_type { 2815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_EV3 = 1 << 3, 2825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_EV4 = 1 << 4, 2835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_EV5 = 1 << 5, 2845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_2EV3 = 1 << 6, 2855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_3EV3 = 1 << 7, 2865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_2EV5 = 1 << 8, 2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_3EV5 = 1 << 9, 2885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum hci_error_code { 2915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_SUCCESS = 0x00, 2925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNKNOWN_COMMAND = 0x01, 2935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_NO_CONNECTION = 0x02, 2945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_HARDWARE_FAILURE = 0x03, 2955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_PAGE_TIMEOUT = 0x04, 2965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_AUTHENTICATION_FAILURE = 0x05, 2975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_PIN_OR_KEY_MISSING = 0x06, 2985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_MEMORY_FULL = 0x07, 2995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_CONNECTION_TIMEOUT = 0x08, 3005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_MAX_NUMBER_OF_CONNECTIONS = 0x09, 3015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_MAX_NUMBER_OF_SCO_CONNECTIONS = 0x0a, 3025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_ACL_CONNECTION_EXISTS = 0x0b, 3035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_COMMAND_DISALLOWED = 0x0c, 3045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_REJECTED_LIMITED_RESOURCES = 0x0d, 3055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_REJECTED_SECURITY = 0x0e, 3065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_REJECTED_PERSONAL = 0x0f, 3075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_HOST_TIMEOUT = 0x10, 3085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNSUPPORTED_FEATURE = 0x11, 3095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_INVALID_PARAMETERS = 0x12, 3105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_OE_USER_ENDED_CONNECTION = 0x13, 3115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_OE_LOW_RESOURCES = 0x14, 3125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_OE_POWER_OFF = 0x15, 3135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_CONNECTION_TERMINATED = 0x16, 3145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_REPEATED_ATTEMPTS = 0x17, 3155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_PAIRING_NOT_ALLOWED = 0x18, 3165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNKNOWN_LMP_PDU = 0x19, 3175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNSUPPORTED_REMOTE_FEATURE = 0x1a, 3185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_SCO_OFFSET_REJECTED = 0x1b, 3195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_SCO_INTERVAL_REJECTED = 0x1c, 3205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_AIR_MODE_REJECTED = 0x1d, 3215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_INVALID_LMP_PARAMETERS = 0x1e, 3225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNSPECIFIED_ERROR = 0x1f, 3235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNSUPPORTED_LMP_PARAMETER_VALUE = 0x20, 3245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_ROLE_CHANGE_NOT_ALLOWED = 0x21, 3255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LMP_RESPONSE_TIMEOUT = 0x22, 3265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LMP_ERROR_TRANSACTION_COLLISION = 0x23, 3275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LMP_PDU_NOT_ALLOWED = 0x24, 3285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_ENCRYPTION_MODE_NOT_ACCEPTED = 0x25, 3295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_UNIT_LINK_KEY_USED = 0x26, 3305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_QOS_NOT_SUPPORTED = 0x27, 3315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_INSTANT_PASSED = 0x28, 3325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_PAIRING_NOT_SUPPORTED = 0x29, 3335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_TRANSACTION_COLLISION = 0x2a, 3345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_QOS_UNACCEPTABLE_PARAMETER = 0x2c, 3355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_QOS_REJECTED = 0x2d, 3365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_CLASSIFICATION_NOT_SUPPORTED = 0x2e, 3375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_INSUFFICIENT_SECURITY = 0x2f, 3385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_PARAMETER_OUT_OF_RANGE = 0x30, 3395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_ROLE_SWITCH_PENDING = 0x32, 3405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_SLOT_VIOLATION = 0x34, 3415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_ROLE_SWITCH_FAILED = 0x35, 3425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum acl_flag_bits { 3455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ACL_CONT = 1 << 0, 3465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ACL_START = 1 << 1, 3475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ACL_ACTIVE_BCAST = 1 << 2, 3485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ACL_PICO_BCAST = 1 << 3, 3495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum baseband_link_type { 3525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SCO_LINK = 0x00, 3535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ACL_LINK = 0x01, 3545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits0 { 3575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_3SLOT = 1 << 0, 3585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_5SLOT = 1 << 1, 3595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ENCRYPT = 1 << 2, 3605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SOFFSET = 1 << 3, 3615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TACCURACY = 1 << 4, 3625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_RSWITCH = 1 << 5, 3635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_HOLD_MODE = 1 << 6, 3645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SNIFF_MODE = 1 << 7, 3655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits1 { 3685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PARK = 1 << 0, 3695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_RSSI = 1 << 1, 3705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_QUALITY = 1 << 2, 3715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SCO = 1 << 3, 3725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_HV2 = 1 << 4, 3735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_HV3 = 1 << 5, 3745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ULAW = 1 << 6, 3755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ALAW = 1 << 7, 3765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits2 { 3795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_CVSD = 1 << 0, 3805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PSCHEME = 1 << 1, 3815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_PCONTROL = 1 << 2, 3825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_TRSP_SCO = 1 << 3, 3835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_BCAST_ENC = 1 << 7, 3845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits3 { 3875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_ACL_2M = 1 << 1, 3885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_ACL_3M = 1 << 2, 3895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ENH_ISCAN = 1 << 3, 3905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ILACE_ISCAN = 1 << 4, 3915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ILACE_PSCAN = 1 << 5, 3925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_RSSI_INQ = 1 << 6, 3935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_ESCO = 1 << 7, 3945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 3955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 3965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits4 { 3975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EV4 = 1 << 0, 3985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EV5 = 1 << 1, 3995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_AFH_CAP_SLV = 1 << 3, 4005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_AFH_CLS_SLV = 1 << 4, 4015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_3SLOT = 1 << 7, 4025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 4035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits5 { 4055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_5SLOT = 1 << 0, 4065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_SNIFF_SUBR = 1 << 1, 4075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_AFH_CAP_MST = 1 << 3, 4085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_AFH_CLS_MST = 1 << 4, 4095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_ESCO_2M = 1 << 5, 4105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_ESCO_3M = 1 << 6, 4115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EDR_3S_ESCO = 1 << 7, 4125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 4135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits6 { 4155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EXT_INQ = 1 << 0, 4165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 4175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum lmp_feature_bits7 { 4195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LMP_EXT_FEAT = 1 << 7, 4205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 4215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum hci_link_policy { 4235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LP_RSWITCH = 1 << 0, 4245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LP_HOLD = 1 << 1, 4255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LP_SNIFF = 1 << 2, 4265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LP_PARK = 1 << 3, 4275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 4285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum hci_link_mode { 4305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_ACCEPT = 1 << 15, 4315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_MASTER = 1 << 0, 4325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_AUTH = 1 << 1, 4335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_ENCRYPT = 1 << 2, 4345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_TRUSTED = 1 << 3, 4355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_RELIABLE = 1 << 4, 4365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCI_LM_SECURE = 1 << 5, 4375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 4385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* HCI Commands */ 4405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Link Control */ 4425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_LINK_CTL 0x01 4435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_INQUIRY 0x0001 4455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lap[3]; 4475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t length; /* 1.28s units */ 4485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_rsp; 4495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) inquiry_cp; 4505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define INQUIRY_CP_SIZE 5 4515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 4545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 4555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) status_bdaddr_rp; 4565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define STATUS_BDADDR_RP_SIZE 7 4575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_INQUIRY_CANCEL 0x0002 4595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_PERIODIC_INQUIRY 0x0003 4615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_period; /* 1.28s units */ 4635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_period; /* 1.28s units */ 4645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lap[3]; 4655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t length; /* 1.28s units */ 4665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_rsp; 4675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) periodic_inquiry_cp; 4685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PERIODIC_INQUIRY_CP_SIZE 9 4695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_EXIT_PERIODIC_INQUIRY 0x0004 4715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_CREATE_CONN 0x0005 4735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 4755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t pkt_type; 4765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 4775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_mode; 4785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 4795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t role_switch; 4805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) create_conn_cp; 4815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CREATE_CONN_CP_SIZE 13 4825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_DISCONNECT 0x0006 4845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 4865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t reason; 4875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) disconnect_cp; 4885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define DISCONNECT_CP_SIZE 3 4895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_ADD_SCO 0x0007 4915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 4935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t pkt_type; 4945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) add_sco_cp; 4955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ADD_SCO_CP_SIZE 4 4965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 4975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_CREATE_CONN_CANCEL 0x0008 4985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 4995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 5005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) create_conn_cancel_cp; 5025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CREATE_CONN_CANCEL_CP_SIZE 6 5035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 5065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) create_conn_cancel_rp; 5085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CREATE_CONN_CANCEL_RP_SIZE 7 5095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_ACCEPT_CONN_REQ 0x0009 5115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t role; 5145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) accept_conn_req_cp; 5155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ACCEPT_CONN_REQ_CP_SIZE 7 5165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_REJECT_CONN_REQ 0x000A 5185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t reason; 5215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) reject_conn_req_cp; 5225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REJECT_CONN_REQ_CP_SIZE 7 5235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_LINK_KEY_REPLY 0x000B 5255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_key[16]; 5285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) link_key_reply_cp; 5295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define LINK_KEY_REPLY_CP_SIZE 22 5305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_LINK_KEY_NEG_REPLY 0x000C 5325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_PIN_CODE_REPLY 0x000D 5345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pin_len; 5375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pin_code[16]; 5385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) pin_code_reply_cp; 5395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PIN_CODE_REPLY_CP_SIZE 23 5405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_PIN_CODE_NEG_REPLY 0x000E 5425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SET_CONN_PTYPE 0x000F 5445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 5465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t pkt_type; 5475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) set_conn_ptype_cp; 5485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SET_CONN_PTYPE_CP_SIZE 4 5495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_AUTH_REQUESTED 0x0011 5515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 5535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) auth_requested_cp; 5545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AUTH_REQUESTED_CP_SIZE 2 5555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SET_CONN_ENCRYPT 0x0013 5575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 5595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t encrypt; 5605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) set_conn_encrypt_cp; 5615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SET_CONN_ENCRYPT_CP_SIZE 3 5625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_CHANGE_CONN_LINK_KEY 0x0015 5645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 5665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) change_conn_link_key_cp; 5675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CHANGE_CONN_LINK_KEY_CP_SIZE 2 5685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_MASTER_LINK_KEY 0x0017 5705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t key_flag; 5725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) master_link_key_cp; 5735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MASTER_LINK_KEY_CP_SIZE 1 5745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_REMOTE_NAME_REQ 0x0019 5765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 5795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_mode; 5805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 5815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) remote_name_req_cp; 5825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REMOTE_NAME_REQ_CP_SIZE 10 5835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_REMOTE_NAME_REQ_CANCEL 0x001A 5855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) remote_name_req_cancel_cp; 5885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6 5895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 5925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 5935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) remote_name_req_cancel_rp; 5945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REMOTE_NAME_REQ_CANCEL_RP_SIZE 7 5955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 5965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_REMOTE_FEATURES 0x001B 5975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 5985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 5995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_remote_features_cp; 6005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_REMOTE_FEATURES_CP_SIZE 2 6015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_REMOTE_EXT_FEATURES 0x001C 6035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t page_num; 6065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_remote_ext_features_cp; 6075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_REMOTE_EXT_FEATURES_CP_SIZE 3 6085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_REMOTE_VERSION 0x001D 6105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_remote_version_cp; 6135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_REMOTE_VERSION_CP_SIZE 2 6145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_CLOCK_OFFSET 0x001F 6165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_clock_offset_cp; 6195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_CLOCK_OFFSET_CP_SIZE 2 6205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LMP_HANDLE 0x0020 6225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_lmp_handle_cp; 6255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LMP_HANDLE_CP_SIZE 2 6265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 6295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lmp_handle; 6315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t reserved; 6325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_lmp_handle_rp; 6335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LMP_HANDLE_RP_SIZE 8 6345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SETUP_SYNC_CONN 0x0028 6365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t tx_bandwith; 6395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t rx_bandwith; 6405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_latency; 6415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t voice_setting; 6425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t retrans_effort; 6435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t pkt_type; 6445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) setup_sync_conn_cp; 6455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SETUP_SYNC_CONN_CP_SIZE 17 6465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_ACCEPT_SYNC_CONN_REQ 0x0029 6485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 6505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t tx_bandwith; 6515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t rx_bandwith; 6525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_latency; 6535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t voice_setting; 6545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t retrans_effort; 6555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t pkt_type; 6565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) accept_sync_conn_req_cp; 6575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21 6585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_REJECT_SYNC_CONN_REQ 0x002A 6605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 6625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t reason; 6635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) reject_sync_conn_req_cp; 6645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REJECT_SYNC_CONN_REQ_CP_SIZE 7 6655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Link Policy */ 6675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_LINK_POLICY 0x02 6685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_HOLD_MODE 0x0001 6705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_interval; 6735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_interval; 6745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) hold_mode_cp; 6755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HOLD_MODE_CP_SIZE 6 6765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SNIFF_MODE 0x0003 6785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_interval; 6815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_interval; 6825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t attempt; 6835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t timeout; 6845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) sniff_mode_cp; 6855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SNIFF_MODE_CP_SIZE 10 6865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_EXIT_SNIFF_MODE 0x0004 6885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) exit_sniff_mode_cp; 6915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EXIT_SNIFF_MODE_CP_SIZE 2 6925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 6935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_PARK_MODE 0x0005 6945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 6955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 6965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_interval; 6975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_interval; 6985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) park_mode_cp; 6995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PARK_MODE_CP_SIZE 6 7005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_EXIT_PARK_MODE 0x0006 7025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) exit_park_mode_cp; 7055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EXIT_PARK_MODE_CP_SIZE 2 7065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_QOS_SETUP 0x0007 7085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t service_type; /* 1 = best effort */ 7105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t token_rate; /* Byte per seconds */ 7115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t peak_bandwidth; /* Byte per seconds */ 7125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t latency; /* Microseconds */ 7135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t delay_variation; /* Microseconds */ 7145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) hci_qos; 7155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCI_QOS_CP_SIZE 17 7165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t flags; /* Reserved */ 7195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner hci_qos qos; 7205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) qos_setup_cp; 7215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE) 7225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_ROLE_DISCOVERY 0x0009 7245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) role_discovery_cp; 7275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ROLE_DISCOVERY_CP_SIZE 2 7285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 7305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t role; 7325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) role_discovery_rp; 7335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ROLE_DISCOVERY_RP_SIZE 4 7345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SWITCH_ROLE 0x000B 7365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 7385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t role; 7395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) switch_role_cp; 7405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SWITCH_ROLE_CP_SIZE 7 7415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LINK_POLICY 0x000C 7435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_link_policy_cp; 7465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LINK_POLICY_CP_SIZE 2 7475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 7495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t policy; 7515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_link_policy_rp; 7525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LINK_POLICY_RP_SIZE 5 7535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_LINK_POLICY 0x000D 7555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t policy; 7585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_link_policy_cp; 7595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_LINK_POLICY_CP_SIZE 4 7605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 7625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_link_policy_rp; 7645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_LINK_POLICY_RP_SIZE 3 7655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_DEFAULT_LINK_POLICY 0x000E 7675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_DEFAULT_LINK_POLICY 0x000F 7695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_FLOW_SPECIFICATION 0x0010 7715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SNIFF_SUBRATE 0x0011 7735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 7755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_remote_latency; 7765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_local_latency; 7775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_remote_timeout; 7785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_local_timeout; 7795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) sniff_subrate_cp; 7805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SNIFF_SUBRATE_CP_SIZE 10 7815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Host Controller and Baseband */ 7835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_HOST_CTL 0x03 7845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SET_EVENT_MASK 0x0001 7865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mask[8]; 7885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) set_event_mask_cp; 7895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SET_EVENT_MASK_CP_SIZE 8 7905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_RESET 0x0003 7925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 7935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SET_EVENT_FLT 0x0005 7945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 7955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t flt_type; 7965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t cond_type; 7975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t condition[0]; 7985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) set_event_flt_cp; 7995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SET_EVENT_FLT_CP_SIZE 2 8005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_filter_type { 8025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner FLT_CLEAR_ALL = 0x00, 8035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner FLT_INQ_RESULT = 0x01, 8045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner FLT_CONN_SETUP = 0x02, 8055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 8065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum inq_result_cond_type { 8075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner INQ_RESULT_RETURN_ALL = 0x00, 8085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner INQ_RESULT_RETURN_CLASS = 0x01, 8095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner INQ_RESULT_RETURN_BDADDR = 0x02, 8105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 8115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum conn_setup_cond_type { 8125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONN_SETUP_ALLOW_ALL = 0x00, 8135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONN_SETUP_ALLOW_CLASS = 0x01, 8145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONN_SETUP_ALLOW_BDADDR = 0x02, 8155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 8165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum conn_setup_cond { 8175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONN_SETUP_AUTO_OFF = 0x01, 8185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CONN_SETUP_AUTO_ON = 0x02, 8195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 8205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_FLUSH 0x0008 8225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 8245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) flush_cp; 8255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define FLUSH_CP_SIZE 2 8265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 8295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 8305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) flush_rp; 8315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define FLUSH_RP_SIZE 3 8325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_PIN_TYPE 0x0009 8345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 8365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pin_type; 8375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_pin_type_rp; 8385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_PIN_TYPE_RP_SIZE 2 8395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_PIN_TYPE 0x000A 8415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pin_type; 8435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_pin_type_cp; 8445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_PIN_TYPE_CP_SIZE 1 8455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_CREATE_NEW_UNIT_KEY 0x000B 8475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_STORED_LINK_KEY 0x000D 8495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 8515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t read_all; 8525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_stored_link_key_cp; 8535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_STORED_LINK_KEY_CP_SIZE 7 8545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 8565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_keys; 8575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t num_keys; 8585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_stored_link_key_rp; 8595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_STORED_LINK_KEY_RP_SIZE 5 8605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_STORED_LINK_KEY 0x0011 8625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_keys; 8645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* variable length part */ 8655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_stored_link_key_cp; 8665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_STORED_LINK_KEY_CP_SIZE 1 8675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 8695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_keys; 8705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_stored_link_key_rp; 8715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_WRITE_LINK_KEY_RP_SIZE 2 8725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_DELETE_STORED_LINK_KEY 0x0012 8745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 8765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t delete_all; 8775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) delete_stored_link_key_cp; 8785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define DELETE_STORED_LINK_KEY_CP_SIZE 7 8795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 8815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t num_keys; 8825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) delete_stored_link_key_rp; 8835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define DELETE_STORED_LINK_KEY_RP_SIZE 3 8845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_CHANGE_LOCAL_NAME 0x0013 8865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner char name[248]; 8885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) change_local_name_cp; 8895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CHANGE_LOCAL_NAME_CP_SIZE 248 8905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LOCAL_NAME 0x0014 8925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 8935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 8945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner char name[248]; 8955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_local_name_rp; 8965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LOCAL_NAME_RP_SIZE 249 8975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 8985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015 8995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 9015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t timeout; 9025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_conn_accept_timeout_rp; 9035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3 9045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016 9065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t timeout; 9085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_conn_accept_timeout_cp; 9095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2 9105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_PAGE_TIMEOUT 0x0017 9125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 9145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t timeout; 9155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_page_timeout_rp; 9165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_PAGE_TIMEOUT_RP_SIZE 3 9175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_PAGE_TIMEOUT 0x0018 9195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t timeout; 9215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_page_timeout_cp; 9225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_PAGE_TIMEOUT_CP_SIZE 2 9235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_SCAN_ENABLE 0x0019 9255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 9275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t enable; 9285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_scan_enable_rp; 9295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_SCAN_ENABLE_RP_SIZE 2 9305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_SCAN_ENABLE 0x001A 9325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t scan_enable; 9345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_scan_enable_cp; 9355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_SCAN_ENABLE_CP_SIZE 1 9365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum scan_enable_bits { 9385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SCAN_DISABLED = 0, 9395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SCAN_INQUIRY = 1 << 0, 9405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SCAN_PAGE = 1 << 1, 9415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 9425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_PAGE_ACTIVITY 0x001B 9445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 9465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t interval; 9475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t window; 9485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_page_activity_rp; 9495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_PAGE_ACTIVITY_RP_SIZE 5 9505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_PAGE_ACTIVITY 0x001C 9525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t interval; 9545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t window; 9555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_page_activity_cp; 9565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_PAGE_ACTIVITY_CP_SIZE 4 9575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_INQ_ACTIVITY 0x001D 9595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 9615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t interval; 9625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t window; 9635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_inq_activity_rp; 9645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_INQ_ACTIVITY_RP_SIZE 5 9655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_INQ_ACTIVITY 0x001E 9675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t interval; 9695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t window; 9705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_inq_activity_cp; 9715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_INQ_ACTIVITY_CP_SIZE 4 9725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_AUTH_ENABLE 0x001F 9745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_AUTH_ENABLE 0x0020 9765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AUTH_DISABLED 0x00 9785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AUTH_ENABLED 0x01 9795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_ENCRYPT_MODE 0x0021 9815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_ENCRYPT_MODE 0x0022 9835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ENCRYPT_DISABLED 0x00 9855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ENCRYPT_P2P 0x01 9865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ENCRYPT_BOTH 0x02 9875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_CLASS_OF_DEV 0x0023 9895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 9915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 9925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_class_of_dev_rp; 9935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_CLASS_OF_DEV_RP_SIZE 4 9945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 9955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_CLASS_OF_DEV 0x0024 9965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 9975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 9985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_class_of_dev_cp; 9995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_CLASS_OF_DEV_CP_SIZE 3 10005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_VOICE_SETTING 0x0025 10025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 10045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t voice_setting; 10055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_voice_setting_rp; 10065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_VOICE_SETTING_RP_SIZE 3 10075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_VOICE_SETTING 0x0026 10095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t voice_setting; 10115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_voice_setting_cp; 10125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_VOICE_SETTING_CP_SIZE 2 10135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027 10155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028 10175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_NUM_BROADCAST_RETRANS 0x0029 10195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A 10215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_HOLD_MODE_ACTIVITY 0x002B 10235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C 10255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D 10275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 10295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t type; 10305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_transmit_power_level_cp; 10315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3 10325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 10345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 10355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int8_t level; 10365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_transmit_power_level_rp; 10375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4 10385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_HOST_BUFFER_SIZE 0x0033 10405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t acl_mtu; 10425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t sco_mtu; 10435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t acl_max_pkt; 10445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t sco_max_pkt; 10455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) host_buffer_size_cp; 10465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HOST_BUFFER_SIZE_CP_SIZE 7 10475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_HOST_NUMBER_OF_COMPLETED_PACKETS 0x0035 10495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036 10515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 10535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 10545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t link_sup_to; 10555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_link_supervision_timeout_rp; 10565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5 10575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037 10595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 10615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t link_sup_to; 10625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_link_supervision_timeout_cp; 10635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4 10645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 10665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 10675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_link_supervision_timeout_rp; 10685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3 10695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_NUM_SUPPORTED_IAC 0x0038 10715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MAX_IAC_LAP 0x40 10735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_CURRENT_IAC_LAP 0x0039 10745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 10765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_current_iac; 10775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lap[MAX_IAC_LAP][3]; 10785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_current_iac_lap_rp; 10795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP 10805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_CURRENT_IAC_LAP 0x003A 10825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_current_iac; 10845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lap[MAX_IAC_LAP][3]; 10855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_current_iac_lap_cp; 10865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP 10875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B 10895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C 10915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_PAGE_SCAN_MODE 0x003D 10935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_PAGE_SCAN_MODE 0x003E 10955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 10965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_SET_AFH_CLASSIFICATION 0x003F 10975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 10985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t map[10]; 10995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) set_afh_classification_cp; 11005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SET_AFH_CLASSIFICATION_CP_SIZE 10 11015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) set_afh_classification_rp; 11045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SET_AFH_CLASSIFICATION_RP_SIZE 1 11055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_INQUIRY_SCAN_TYPE 0x0042 11075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t type; 11105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_inquiry_scan_type_rp; 11115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2 11125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043 11145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t type; 11165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_inquiry_scan_type_cp; 11175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1 11185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_inquiry_scan_type_rp; 11215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1 11225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_INQUIRY_MODE 0x0044 11245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mode; 11275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_inquiry_mode_rp; 11285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_INQUIRY_MODE_RP_SIZE 2 11295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_INQUIRY_MODE 0x0045 11315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mode; 11335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_inquiry_mode_cp; 11345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_INQUIRY_MODE_CP_SIZE 1 11355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_inquiry_mode_rp; 11385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_INQUIRY_MODE_RP_SIZE 1 11395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_PAGE_SCAN_TYPE 0x0046 11415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_PAGE_SCAN_TYPE 0x0047 11435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_AFH_MODE 0x0048 11455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mode; 11485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_afh_mode_rp; 11495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_AFH_MODE_RP_SIZE 2 11505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_AFH_MODE 0x0049 11525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mode; 11545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_afh_mode_cp; 11555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_AFH_MODE_CP_SIZE 1 11565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_afh_mode_rp; 11595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_AFH_MODE_RP_SIZE 1 11605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_EXT_INQUIRY_RESPONSE 0x0051 11625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t fec; 11655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[240]; 11665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_ext_inquiry_response_rp; 11675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242 11685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_WRITE_EXT_INQUIRY_RESPONSE 0x0052 11705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t fec; 11725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[240]; 11735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_ext_inquiry_response_cp; 11745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241 11755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) write_ext_inquiry_response_rp; 11785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1 11795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Informational Parameters */ 11815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_INFO_PARAM 0x04 11825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LOCAL_VERSION 0x0001 11845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t hci_ver; 11875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t hci_rev; 11885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lmp_ver; 11895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t manufacturer; 11905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t lmp_subver; 11915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_local_version_rp; 11925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LOCAL_VERSION_RP_SIZE 9 11935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 11945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LOCAL_COMMANDS 0x0002 11955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 11965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 11975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t commands[64]; 11985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_local_commands_rp; 11995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LOCAL_COMMANDS_RP_SIZE 65 12005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LOCAL_FEATURES 0x0003 12025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t features[8]; 12055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_local_features_rp; 12065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LOCAL_FEATURES_RP_SIZE 9 12075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LOCAL_EXT_FEATURES 0x0004 12095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t page_num; 12115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_local_ext_features_cp; 12125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LOCAL_EXT_FEATURES_CP_SIZE 1 12135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t page_num; 12165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t max_page_num; 12175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t features[8]; 12185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_local_ext_features_rp; 12195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LOCAL_EXT_FEATURES_RP_SIZE 11 12205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_BUFFER_SIZE 0x0005 12225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t acl_mtu; 12255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t sco_mtu; 12265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t acl_max_pkt; 12275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t sco_max_pkt; 12285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_buffer_size_rp; 12295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_BUFFER_SIZE_RP_SIZE 8 12305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_COUNTRY_CODE 0x0007 12325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t country_code; 12355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_country_code_rp; 12365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_COUNTRY_CODE_RP_SIZE 2 12375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_BD_ADDR 0x0009 12395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 12425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_bd_addr_rp; 12435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_BD_ADDR_RP_SIZE 7 12445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Status params */ 12465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_STATUS_PARAM 0x05 12475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_FAILED_CONTACT_COUNTER 0x0001 12495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t counter; 12535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_failed_contact_counter_rp; 12545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4 12555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_RESET_FAILED_CONTACT_COUNTER 0x0002 12575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) reset_failed_contact_counter_rp; 12615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4 12625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_LINK_QUALITY 0x0003 12645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_link_quality_cp; 12675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LINK_QUALITY_CP_SIZE 4 12685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_quality; 12735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_link_quality_rp; 12745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_LINK_QUALITY_RP_SIZE 4 12755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_RSSI 0x0005 12775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int8_t rssi; 12815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_rssi_rp; 12825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_RSSI_RP_SIZE 4 12835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_AFH_MAP 0x0006 12855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 12875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mode; 12895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t map[10]; 12905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_afh_map_rp; 12915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_AFH_MAP_RP_SIZE 14 12925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 12935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OCF_READ_CLOCK 0x0007 12945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 12955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 12965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t which_clock; 12975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_clock_cp; 12985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_CLOCK_CP_SIZE 3 12995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t clock; 13035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t accuracy; 13045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) read_clock_rp; 13055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define READ_CLOCK_RP_SIZE 9 13065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Testing commands */ 13085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_TESTING_CMD 0x3e 13095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Vendor specific commands */ 13115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OGF_VENDOR_CMD 0x3f 13125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* HCI Events */ 13145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_INQUIRY_COMPLETE 0x01 13165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_INQUIRY_RESULT 0x02 13185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_responses; 13205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 13215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 13225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_period_mode; 13235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_mode; 13245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 13255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 13265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) inquiry_info; 13275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define INQUIRY_INFO_SIZE 14 13285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CONN_COMPLETE 0x03 13305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 13345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_type; 13355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t encr_mode; 13365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_conn_complete; 13375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CONN_COMPLETE_SIZE 11 13385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CONN_REQUEST 0x04 13405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 13425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 13435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_type; 13445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_conn_request; 13455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CONN_REQUEST_SIZE 10 13465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_DISCONN_COMPLETE 0x05 13485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t reason; 13525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_disconn_complete; 13535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_DISCONN_COMPLETE_SIZE 4 13545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_AUTH_COMPLETE 0x06 13565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_auth_complete; 13605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_AUTH_COMPLETE_SIZE 3 13615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07 13635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 13665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner char name[248]; 13675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_remote_name_req_complete; 13685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255 13695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_ENCRYPT_CHANGE 0x08 13715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t encrypt; 13755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_encrypt_change; 13765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_ENCRYPT_CHANGE_SIZE 5 13775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09 13795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_change_conn_link_key_complete; 13835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3 13845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_MASTER_LINK_KEY_COMPLETE 0x0A 13865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t key_flag; 13905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_master_link_key_complete; 13915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4 13925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 13935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B 13945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 13955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 13965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 13975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t features[8]; 13985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_read_remote_features_complete; 13995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11 14005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C 14025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 14045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 14055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t lmp_ver; 14065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t manufacturer; 14075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t lmp_subver; 14085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_read_remote_version_complete; 14095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8 14105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_QOS_SETUP_COMPLETE 0x0D 14125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 14145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 14155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t flags; /* Reserved */ 14165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner hci_qos qos; 14175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_qos_setup_complete; 14185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE) 14195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CMD_COMPLETE 0x0E 14215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t ncmd; 14235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t opcode; 14245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_cmd_complete; 14255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CMD_COMPLETE_SIZE 3 14265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CMD_STATUS 0x0F 14285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 14305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t ncmd; 14315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t opcode; 14325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_cmd_status; 14335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CMD_STATUS_SIZE 4 14345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_HARDWARE_ERROR 0x10 14365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t code; 14385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_hardware_error; 14395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_HARDWARE_ERROR_SIZE 1 14405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_FLUSH_OCCURRED 0x11 14425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 14445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_flush_occured; 14455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_FLUSH_OCCURRED_SIZE 2 14465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_ROLE_CHANGE 0x12 14485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 14505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 14515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t role; 14525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_role_change; 14535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_ROLE_CHANGE_SIZE 8 14545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_NUM_COMP_PKTS 0x13 14565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_hndl; 14585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct { 14595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 14605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t num_packets; 14615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner } connection[0]; 14625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_num_comp_pkts; 14635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_NUM_COMP_PKTS_SIZE(num_hndl) (1 + 4 * (num_hndl)) 14645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_MODE_CHANGE 0x14 14665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 14685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 14695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t mode; 14705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t interval; 14715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_mode_change; 14725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_MODE_CHANGE_SIZE 6 14735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_RETURN_LINK_KEYS 0x15 14755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_keys; 14775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* variable length part */ 14785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_return_link_keys; 14795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_RETURN_LINK_KEYS_SIZE 1 14805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_PIN_CODE_REQ 0x16 14825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 14845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_pin_code_req; 14855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_PIN_CODE_REQ_SIZE 6 14865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_LINK_KEY_REQ 0x17 14885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 14905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_link_key_req; 14915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_LINK_KEY_REQ_SIZE 6 14925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 14935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_LINK_KEY_NOTIFY 0x18 14945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 14955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 14965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_key[16]; 14975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t key_type; 14985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_link_key_notify; 14995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_LINK_KEY_NOTIFY_SIZE 23 15005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_LOOPBACK_COMMAND 0x19 15025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_DATA_BUFFER_OVERFLOW 0x1A 15045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_type; 15065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_data_buffer_overflow; 15075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_DATA_BUFFER_OVERFLOW_SIZE 1 15085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_MAX_SLOTS_CHANGE 0x1B 15105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t max_slots; 15135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_max_slots_change; 15145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_MAX_SLOTS_CHANGE_SIZE 3 15155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C 15175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 15195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 15215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_read_clock_offset_complete; 15225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5 15235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CONN_PTYPE_CHANGED 0x1D 15255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 15275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t ptype; 15295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_conn_ptype_changed; 15305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_CONN_PTYPE_CHANGED_SIZE 5 15315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_QOS_VIOLATION 0x1E 15335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_qos_violation; 15365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_QOS_VIOLATION_SIZE 2 15375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_PSCAN_REP_MODE_CHANGE 0x20 15395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 15415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 15425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_pscan_rep_mode_change; 15435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7 15445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_FLOW_SPEC_COMPLETE 0x21 15465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 15485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t flags; 15505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t direction; 15515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner hci_qos qos; 15525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_flow_spec_complete; 15535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE) 15545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22 15565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_responses; 15585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 15595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 15605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_period_mode; 15615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 15625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 15635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int8_t rssi; 15645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) inquiry_info_with_rssi; 15655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define INQUIRY_INFO_WITH_RSSI_SIZE 15 15665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t num_responses; 15685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 15695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 15705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_period_mode; 15715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_mode; 15725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 15735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 15745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int8_t rssi; 15755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode; 15765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 16 15775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23 15795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 15815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t page_num; 15835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t max_page_num; 15845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t features[8]; 15855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_read_remote_ext_features_complete; 15865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13 15875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 15885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_SYNC_CONN_COMPLETE 0x2C 15895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 15905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 15915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 15925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 15935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t link_type; 15945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t trans_interval; 15955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t retrans_window; 15965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t rx_pkt_len; 15975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t tx_pkt_len; 15985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t air_mode; 15995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_sync_conn_complete; 16005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_SYNC_CONN_COMPLETE_SIZE 17 16015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_SYNC_CONN_CHANGED 0x2D 16035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 16045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 16055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 16065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t trans_interval; 16075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t retrans_window; 16085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t rx_pkt_len; 16095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t tx_pkt_len; 16105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_sync_conn_changed; 16115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_SYNC_CONN_CHANGED_SIZE 9 16125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_SNIFF_SUBRATE 0x2E 16145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 16155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t status; 16165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 16175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_remote_latency; 16185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t max_local_latency; 16195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_remote_timeout; 16205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t min_local_timeout; 16215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) evt_sniff_subrate; 16225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_SNIFF_SUBRATE_SIZE 11 16235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_EXTENDED_INQUIRY_RESULT 0x2F 16255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 16265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner bdaddr_t bdaddr; 16275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_rep_mode; 16285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t pscan_period_mode; 16295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dev_class[3]; 16305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t clock_offset; 16315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int8_t rssi; 16325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[240]; 16335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) extended_inquiry_info; 16345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EXTENDED_INQUIRY_INFO_SIZE 254 16355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_TESTING 0xFE 16375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define EVT_VENDOR 0xFF 16395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Command opcode pack/unpack */ 16415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10)) 16425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define cmd_opcode_ogf(op) (op >> 10) 16435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define cmd_opcode_ocf(op) (op & 0x03ff) 16445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* ACL handle and flags pack/unpack */ 16465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define acl_handle_pack(h, f) (uint16_t)(((h) & 0x0fff)|((f) << 12)) 16475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define acl_handle(h) ((h) & 0x0fff) 16485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define acl_flags(h) ((h) >> 12) 16495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* HCI Packet structures */ 16515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCI_COMMAND_HDR_SIZE 3 16525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCI_EVENT_HDR_SIZE 2 16535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCI_ACL_HDR_SIZE 4 16545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCI_SCO_HDR_SIZE 3 16555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct hci_command_hdr { 16575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t opcode; /* OCF & OGF */ 16585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t plen; 16595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)); 16605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct hci_event_hdr { 16625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t evt; 16635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t plen; 16645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)); 16655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct hci_acl_hdr { 16675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; /* Handle & Flags(PB, BC) */ 16685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t dlen; 16695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)); 16705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct hci_sco_hdr { 16725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t handle; 16735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t dlen; 16745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)); 16755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* L2CAP layer defines */ 16775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_lm_bits { 16795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_LM_MASTER = 1 << 0, 16805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_LM_AUTH = 1 << 1, 16815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_LM_ENCRYPT = 1 << 2, 16825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_LM_TRUSTED = 1 << 3, 16835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_LM_RELIABLE = 1 << 4, 16845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_LM_SECURE = 1 << 5, 16855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 16865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_cid_predef { 16885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CID_INVALID = 0x0000, 16895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CID_SIGNALLING= 0x0001, 16905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CID_GROUP = 0x0002, 16915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CID_ALLOC = 0x0040, 16925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 16935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 16945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* L2CAP command codes */ 16955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_cmd { 16965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_COMMAND_REJ = 1, 16975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONN_REQ, 16985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONN_RSP, 16995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_REQ, 17005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_RSP, 17015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_DISCONN_REQ, 17025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_DISCONN_RSP, 17035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_ECHO_REQ, 17045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_ECHO_RSP, 17055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_INFO_REQ, 17065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_INFO_RSP, 17075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 17085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_sar_bits { 17105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_SAR_NO_SEG = 0, 17115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_SAR_START, 17125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_SAR_END, 17135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_SAR_CONT, 17145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 17155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* L2CAP structures */ 17175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t len; 17195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t cid; 17205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[0]; 17215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_hdr; 17225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_HDR_SIZE 4 17235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t code; 17265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t ident; 17275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t len; 17285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_cmd_hdr; 17295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CMD_HDR_SIZE 4 17305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t reason; 17335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_cmd_rej; 17345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CMD_REJ_SIZE 2 17355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t dcid; 17385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t scid; 17395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_cmd_rej_cid; 17405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CMD_REJ_CID_SIZE 4 17415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* reject reason */ 17435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_rej_reason { 17445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_REJ_CMD_NOT_UNDERSTOOD = 0, 17455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_REJ_SIG_TOOBIG, 17465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_REJ_CID_INVAL, 17475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 17485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t psm; 17515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t scid; 17525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_conn_req; 17535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONN_REQ_SIZE 4 17545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t dcid; 17575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t scid; 17585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t result; 17595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t status; 17605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_conn_rsp; 17615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONN_RSP_SIZE 8 17625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* connect result */ 17645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_conn_res { 17655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CR_SUCCESS = 0, 17665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CR_PEND, 17675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CR_BAD_PSM, 17685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CR_SEC_BLOCK, 17695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CR_NO_MEM, 17705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 17715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* connect status */ 17735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_conn_stat { 17745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CS_NO_INFO = 0, 17755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CS_AUTHEN_PEND, 17765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CS_AUTHOR_PEND, 17775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 17785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t dcid; 17815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t flags; 17825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[0]; 17835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_conf_req; 17845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONF_REQ_SIZE(datalen) (4 + (datalen)) 17855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 17875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t scid; 17885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t flags; 17895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t result; 17905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[0]; 17915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_conf_rsp; 17925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONF_RSP_SIZE(datalen) (6 + datalen) 17935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 17945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_conf_res { 17955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_SUCCESS = 0, 17965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_UNACCEPT, 17975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_REJECT, 17985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_UNKNOWN, 17995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 18005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 18025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t type; 18035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t len; 18045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t val[0]; 18055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_conf_opt; 18065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONF_OPT_SIZE 2 18075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_conf_val { 18095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_MTU = 1, 18105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_FLUSH_TO, 18115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_QOS, 18125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_RFC, 18135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_RFC_MODE = L2CAP_CONF_RFC, 18145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 18155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 18175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t flags; 18185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t service_type; 18195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t token_rate; 18205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t token_bucket_size; 18215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t peak_bandwidth; 18225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t latency; 18235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint32_t delay_variation; 18245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_conf_opt_qos; 18255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONF_OPT_QOS_SIZE 22 18265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_conf_opt_qos_st { 18285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_QOS_NO_TRAFFIC = 0x00, 18295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_QOS_BEST_EFFORT, 18305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_CONF_QOS_GUARANTEED, 18315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 18325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_CONF_QOS_WILDCARD 0xffffffff 18345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_mode { 18365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_MODE_BASIC = 0, 18375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_MODE_RETRANS = 1, 18385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_MODE_FLOWCTL = 2, 18395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 18405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 18425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t dcid; 18435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t scid; 18445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_disconn_req; 18455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_DISCONN_REQ_SIZE 4 18465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 18485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t dcid; 18495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t scid; 18505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_disconn_rsp; 18515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_DISCONN_RSP_SIZE 4 18525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 18545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t type; 18555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_info_req; 18565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_INFO_REQ_SIZE 2 18575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct { 18595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t type; 18605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint16_t result; 18615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner uint8_t data[0]; 18625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} __attribute__ ((packed)) l2cap_info_rsp; 18635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define L2CAP_INFO_RSP_SIZE 4 18645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* info type */ 18665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_info_type { 18675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_IT_CL_MTU = 1, 18685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_IT_FEAT_MASK, 18695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 18705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* info result */ 18725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_l2cap_info_result { 18735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_IR_SUCCESS = 0, 18745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_IR_NOTSUPP, 18755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 18765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Service Discovery Protocol defines */ 18785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Note that all multibyte values in lower layer protocols (above in this file) 18795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * are little-endian while SDP is big-endian. */ 18805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 18815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Protocol UUIDs */ 18825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum sdp_proto_uuid { 18835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_UUID = 0x0001, 18845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UDP_UUID = 0x0002, 18855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner RFCOMM_UUID = 0x0003, 18865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCP_UUID = 0x0004, 18875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCS_BIN_UUID = 0x0005, 18885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner TCS_AT_UUID = 0x0006, 18895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner OBEX_UUID = 0x0008, 18905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IP_UUID = 0x0009, 18915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner FTP_UUID = 0x000a, 18925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HTTP_UUID = 0x000c, 18935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner WSP_UUID = 0x000e, 18945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BNEP_UUID = 0x000f, 18955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UPNP_UUID = 0x0010, 18965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HIDP_UUID = 0x0011, 18975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCRP_CTRL_UUID = 0x0012, 18985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCRP_DATA_UUID = 0x0014, 18995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCRP_NOTE_UUID = 0x0016, 19005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AVCTP_UUID = 0x0017, 19015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AVDTP_UUID = 0x0019, 19025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CMTP_UUID = 0x001b, 19035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UDI_UUID = 0x001d, 19045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MCAP_CTRL_UUID = 0x001e, 19055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MCAP_DATA_UUID = 0x001f, 19065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner L2CAP_UUID = 0x0100, 19075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 19085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 19105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Service class identifiers of standard services and service groups 19115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 19125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum service_class_id { 19135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SERVER_SVCLASS_ID = 0x1000, 19145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BROWSE_GRP_DESC_SVCLASS_ID = 0x1001, 19155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PUBLIC_BROWSE_GROUP = 0x1002, 19165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SERIAL_PORT_SVCLASS_ID = 0x1101, 19175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner LAN_ACCESS_SVCLASS_ID = 0x1102, 19185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner DIALUP_NET_SVCLASS_ID = 0x1103, 19195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IRMC_SYNC_SVCLASS_ID = 0x1104, 19205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner OBEX_OBJPUSH_SVCLASS_ID = 0x1105, 19215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner OBEX_FILETRANS_SVCLASS_ID = 0x1106, 19225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IRMC_SYNC_CMD_SVCLASS_ID = 0x1107, 19235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HEADSET_SVCLASS_ID = 0x1108, 19245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CORDLESS_TELEPHONY_SVCLASS_ID = 0x1109, 19255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AUDIO_SOURCE_SVCLASS_ID = 0x110a, 19265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AUDIO_SINK_SVCLASS_ID = 0x110b, 19275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AV_REMOTE_TARGET_SVCLASS_ID = 0x110c, 19285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner ADVANCED_AUDIO_SVCLASS_ID = 0x110d, 19295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AV_REMOTE_SVCLASS_ID = 0x110e, 19305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner VIDEO_CONF_SVCLASS_ID = 0x110f, 19315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner INTERCOM_SVCLASS_ID = 0x1110, 19325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner FAX_SVCLASS_ID = 0x1111, 19335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HEADSET_AGW_SVCLASS_ID = 0x1112, 19345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner WAP_SVCLASS_ID = 0x1113, 19355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner WAP_CLIENT_SVCLASS_ID = 0x1114, 19365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PANU_SVCLASS_ID = 0x1115, 19375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner NAP_SVCLASS_ID = 0x1116, 19385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner GN_SVCLASS_ID = 0x1117, 19395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner DIRECT_PRINTING_SVCLASS_ID = 0x1118, 19405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner REFERENCE_PRINTING_SVCLASS_ID = 0x1119, 19415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IMAGING_SVCLASS_ID = 0x111a, 19425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IMAGING_RESPONDER_SVCLASS_ID = 0x111b, 19435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IMAGING_ARCHIVE_SVCLASS_ID = 0x111c, 19445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner IMAGING_REFOBJS_SVCLASS_ID = 0x111d, 19455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HANDSFREE_SVCLASS_ID = 0x111e, 19465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HANDSFREE_AGW_SVCLASS_ID = 0x111f, 19475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner DIRECT_PRT_REFOBJS_SVCLASS_ID = 0x1120, 19485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner REFLECTED_UI_SVCLASS_ID = 0x1121, 19495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BASIC_PRINTING_SVCLASS_ID = 0x1122, 19505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PRINTING_STATUS_SVCLASS_ID = 0x1123, 19515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HID_SVCLASS_ID = 0x1124, 19525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCR_SVCLASS_ID = 0x1125, 19535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCR_PRINT_SVCLASS_ID = 0x1126, 19545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner HCR_SCAN_SVCLASS_ID = 0x1127, 19555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner CIP_SVCLASS_ID = 0x1128, 19565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner VIDEO_CONF_GW_SVCLASS_ID = 0x1129, 19575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UDI_MT_SVCLASS_ID = 0x112a, 19585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UDI_TA_SVCLASS_ID = 0x112b, 19595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner AV_SVCLASS_ID = 0x112c, 19605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SAP_SVCLASS_ID = 0x112d, 19615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PBAP_PCE_SVCLASS_ID = 0x112e, 19625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PBAP_PSE_SVCLASS_ID = 0x112f, 19635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PBAP_SVCLASS_ID = 0x1130, 19645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner PNP_INFO_SVCLASS_ID = 0x1200, 19655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner GENERIC_NETWORKING_SVCLASS_ID = 0x1201, 19665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner GENERIC_FILETRANS_SVCLASS_ID = 0x1202, 19675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner GENERIC_AUDIO_SVCLASS_ID = 0x1203, 19685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner GENERIC_TELEPHONY_SVCLASS_ID = 0x1204, 19695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UPNP_SVCLASS_ID = 0x1205, 19705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UPNP_IP_SVCLASS_ID = 0x1206, 19715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UPNP_PAN_SVCLASS_ID = 0x1300, 19725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UPNP_LAP_SVCLASS_ID = 0x1301, 19735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner UPNP_L2CAP_SVCLASS_ID = 0x1302, 19745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner VIDEO_SOURCE_SVCLASS_ID = 0x1303, 19755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner VIDEO_SINK_SVCLASS_ID = 0x1304, 19765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner VIDEO_DISTRIBUTION_SVCLASS_ID = 0x1305, 19775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MDP_SVCLASS_ID = 0x1400, 19785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MDP_SOURCE_SVCLASS_ID = 0x1401, 19795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner MDP_SINK_SVCLASS_ID = 0x1402, 19805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner APPLE_AGENT_SVCLASS_ID = 0x2112, 19815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 19825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 19835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 19845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Standard profile descriptor identifiers; note these 19855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * may be identical to some of the service classes defined above 19865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 19875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SDP_SERVER_PROFILE_ID SDP_SERVER_SVCLASS_ID 19885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BROWSE_GRP_DESC_PROFILE_ID BROWSE_GRP_DESC_SVCLASS_ID 19895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SERIAL_PORT_PROFILE_ID SERIAL_PORT_SVCLASS_ID 19905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define LAN_ACCESS_PROFILE_ID LAN_ACCESS_SVCLASS_ID 19915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define DIALUP_NET_PROFILE_ID DIALUP_NET_SVCLASS_ID 19925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define IRMC_SYNC_PROFILE_ID IRMC_SYNC_SVCLASS_ID 19935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OBEX_OBJPUSH_PROFILE_ID OBEX_OBJPUSH_SVCLASS_ID 19945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define OBEX_FILETRANS_PROFILE_ID OBEX_FILETRANS_SVCLASS_ID 19955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define IRMC_SYNC_CMD_PROFILE_ID IRMC_SYNC_CMD_SVCLASS_ID 19965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HEADSET_PROFILE_ID HEADSET_SVCLASS_ID 19975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CORDLESS_TELEPHONY_PROFILE_ID CORDLESS_TELEPHONY_SVCLASS_ID 19985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AUDIO_SOURCE_PROFILE_ID AUDIO_SOURCE_SVCLASS_ID 19995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AUDIO_SINK_PROFILE_ID AUDIO_SINK_SVCLASS_ID 20005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AV_REMOTE_TARGET_PROFILE_ID AV_REMOTE_TARGET_SVCLASS_ID 20015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define ADVANCED_AUDIO_PROFILE_ID ADVANCED_AUDIO_SVCLASS_ID 20025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AV_REMOTE_PROFILE_ID AV_REMOTE_SVCLASS_ID 20035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define VIDEO_CONF_PROFILE_ID VIDEO_CONF_SVCLASS_ID 20045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define INTERCOM_PROFILE_ID INTERCOM_SVCLASS_ID 20055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define FAX_PROFILE_ID FAX_SVCLASS_ID 20065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HEADSET_AGW_PROFILE_ID HEADSET_AGW_SVCLASS_ID 20075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WAP_PROFILE_ID WAP_SVCLASS_ID 20085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define WAP_CLIENT_PROFILE_ID WAP_CLIENT_SVCLASS_ID 20095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PANU_PROFILE_ID PANU_SVCLASS_ID 20105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define NAP_PROFILE_ID NAP_SVCLASS_ID 20115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define GN_PROFILE_ID GN_SVCLASS_ID 20125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define DIRECT_PRINTING_PROFILE_ID DIRECT_PRINTING_SVCLASS_ID 20135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REFERENCE_PRINTING_PROFILE_ID REFERENCE_PRINTING_SVCLASS_ID 20145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define IMAGING_PROFILE_ID IMAGING_SVCLASS_ID 20155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define IMAGING_RESPONDER_PROFILE_ID IMAGING_RESPONDER_SVCLASS_ID 20165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define IMAGING_ARCHIVE_PROFILE_ID IMAGING_ARCHIVE_SVCLASS_ID 20175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define IMAGING_REFOBJS_PROFILE_ID IMAGING_REFOBJS_SVCLASS_ID 20185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HANDSFREE_PROFILE_ID HANDSFREE_SVCLASS_ID 20195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HANDSFREE_AGW_PROFILE_ID HANDSFREE_AGW_SVCLASS_ID 20205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define DIRECT_PRT_REFOBJS_PROFILE_ID DIRECT_PRT_REFOBJS_SVCLASS_ID 20215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define REFLECTED_UI_PROFILE_ID REFLECTED_UI_SVCLASS_ID 20225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BASIC_PRINTING_PROFILE_ID BASIC_PRINTING_SVCLASS_ID 20235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PRINTING_STATUS_PROFILE_ID PRINTING_STATUS_SVCLASS_ID 20245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HID_PROFILE_ID HID_SVCLASS_ID 20255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCR_PROFILE_ID HCR_SCAN_SVCLASS_ID 20265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCR_PRINT_PROFILE_ID HCR_PRINT_SVCLASS_ID 20275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define HCR_SCAN_PROFILE_ID HCR_SCAN_SVCLASS_ID 20285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define CIP_PROFILE_ID CIP_SVCLASS_ID 20295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define VIDEO_CONF_GW_PROFILE_ID VIDEO_CONF_GW_SVCLASS_ID 20305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UDI_MT_PROFILE_ID UDI_MT_SVCLASS_ID 20315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UDI_TA_PROFILE_ID UDI_TA_SVCLASS_ID 20325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define AV_PROFILE_ID AV_SVCLASS_ID 20335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SAP_PROFILE_ID SAP_SVCLASS_ID 20345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PBAP_PCE_PROFILE_ID PBAP_PCE_SVCLASS_ID 20355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PBAP_PSE_PROFILE_ID PBAP_PSE_SVCLASS_ID 20365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PBAP_PROFILE_ID PBAP_SVCLASS_ID 20375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define PNP_INFO_PROFILE_ID PNP_INFO_SVCLASS_ID 20385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define GENERIC_NETWORKING_PROFILE_ID GENERIC_NETWORKING_SVCLASS_ID 20395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define GENERIC_FILETRANS_PROFILE_ID GENERIC_FILETRANS_SVCLASS_ID 20405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define GENERIC_AUDIO_PROFILE_ID GENERIC_AUDIO_SVCLASS_ID 20415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define GENERIC_TELEPHONY_PROFILE_ID GENERIC_TELEPHONY_SVCLASS_ID 20425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UPNP_PROFILE_ID UPNP_SVCLASS_ID 20435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UPNP_IP_PROFILE_ID UPNP_IP_SVCLASS_ID 20445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UPNP_PAN_PROFILE_ID UPNP_PAN_SVCLASS_ID 20455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UPNP_LAP_PROFILE_ID UPNP_LAP_SVCLASS_ID 20465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define UPNP_L2CAP_PROFILE_ID UPNP_L2CAP_SVCLASS_ID 20475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define VIDEO_SOURCE_PROFILE_ID VIDEO_SOURCE_SVCLASS_ID 20485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define VIDEO_SINK_PROFILE_ID VIDEO_SINK_SVCLASS_ID 20495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define VIDEO_DISTRIBUTION_PROFILE_ID VIDEO_DISTRIBUTION_SVCLASS_ID 20505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MDP_PROFILE_ID MDP_SVCLASS_ID 20515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MDP_SOURCE_PROFILE_ID MDP_SROUCE_SVCLASS_ID 20525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define MDP_SINK_PROFILE_ID MDP_SINK_SVCLASS_ID 20535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define APPLE_AGENT_PROFILE_ID APPLE_AGENT_SVCLASS_ID 20545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* Data Representation */ 20565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_sdp_data_type { 20575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_NIL = 0 << 3, 20585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_UINT = 1 << 3, 20595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_SINT = 2 << 3, 20605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_UUID = 3 << 3, 20615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_STRING = 4 << 3, 20625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_BOOL = 5 << 3, 20635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_SEQ = 6 << 3, 20645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_ALT = 7 << 3, 20655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DTYPE_URL = 8 << 3, 20665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 20675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_sdp_data_size { 20695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_1 = 0, 20705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_2, 20715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_4, 20725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_8, 20735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_16, 20745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_NEXT1, 20755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_NEXT2, 20765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_NEXT4, 20775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_DSIZE_MASK = SDP_DSIZE_NEXT4, 20785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 20795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_sdp_cmd { 20815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ERROR_RSP = 0x01, 20825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SVC_SEARCH_REQ = 0x02, 20835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SVC_SEARCH_RSP = 0x03, 20845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SVC_ATTR_REQ = 0x04, 20855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SVC_ATTR_RSP = 0x05, 20865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SVC_SEARCH_ATTR_REQ = 0x06, 20875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_SVC_SEARCH_ATTR_RSP = 0x07, 20885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 20895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_sdp_errorcode { 20915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_INVALID_VERSION = 0x0001, 20925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_INVALID_RECORD_HANDLE = 0x0002, 20935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_INVALID_SYNTAX = 0x0003, 20945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_INVALID_PDU_SIZE = 0x0004, 20955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_INVALID_CSTATE = 0x0005, 20965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 20975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 20985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* 20995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * String identifiers are based on the SDP spec stating that 21005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * "base attribute id of the primary (universal) language must be 0x0100" 21015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 21025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * Other languages should have their own offset; e.g.: 21035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * #define XXXLangBase yyyy 21045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * #define AttrServiceName_XXX 0x0000+XXXLangBase 21055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner */ 21065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SDP_PRIMARY_LANG_BASE 0x0100 21075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerenum bt_sdp_attribute_id { 21095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_RECORD_HANDLE = 0x0000, 21105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SVCLASS_ID_LIST = 0x0001, 21115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_RECORD_STATE = 0x0002, 21125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SERVICE_ID = 0x0003, 21135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_PROTO_DESC_LIST = 0x0004, 21145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_BROWSE_GRP_LIST = 0x0005, 21155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_LANG_BASE_ATTR_ID_LIST = 0x0006, 21165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SVCINFO_TTL = 0x0007, 21175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SERVICE_AVAILABILITY = 0x0008, 21185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_PFILE_DESC_LIST = 0x0009, 21195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_DOC_URL = 0x000a, 21205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_CLNT_EXEC_URL = 0x000b, 21215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_ICON_URL = 0x000c, 21225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_ADD_PROTO_DESC_LIST = 0x000d, 21235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SVCNAME_PRIMARY = SDP_PRIMARY_LANG_BASE + 0, 21255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SVCDESC_PRIMARY = SDP_PRIMARY_LANG_BASE + 1, 21265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SVCPROV_PRIMARY = SDP_PRIMARY_LANG_BASE + 2, 21275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_GROUP_ID = 0x0200, 21295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_IP_SUBNET = 0x0200, 21305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* SDP */ 21325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_VERSION_NUM_LIST = 0x0200, 21335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SVCDB_STATE = 0x0201, 21345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SERVICE_VERSION = 0x0300, 21365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_EXTERNAL_NETWORK = 0x0301, 21375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPPORTED_DATA_STORES_LIST = 0x0301, 21385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_FAX_CLASS1_SUPPORT = 0x0302, 21395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_REMOTE_AUDIO_VOLUME_CONTROL = 0x0302, 21405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_FAX_CLASS20_SUPPORT = 0x0303, 21415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPPORTED_FORMATS_LIST = 0x0303, 21425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_FAX_CLASS2_SUPPORT = 0x0304, 21435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_AUDIO_FEEDBACK_SUPPORT = 0x0305, 21445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_NETWORK_ADDRESS = 0x0306, 21455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_WAP_GATEWAY = 0x0307, 21465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_HOMEPAGE_URL = 0x0308, 21475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_WAP_STACK_TYPE = 0x0309, 21485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SECURITY_DESC = 0x030a, 21495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_NET_ACCESS_TYPE = 0x030b, 21505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_MAX_NET_ACCESSRATE = 0x030c, 21515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_IP4_SUBNET = 0x030d, 21525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_IP6_SUBNET = 0x030e, 21535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPPORTED_CAPABILITIES = 0x0310, 21545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPPORTED_FEATURES = 0x0311, 21555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPPORTED_FUNCTIONS = 0x0312, 21565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_TOTAL_IMAGING_DATA_CAPACITY = 0x0313, 21575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPPORTED_REPOSITORIES = 0x0314, 21585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* PnP Information */ 21605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SPECIFICATION_ID = 0x0200, 21615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_VENDOR_ID = 0x0201, 21625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_PRODUCT_ID = 0x0202, 21635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_VERSION = 0x0203, 21645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_PRIMARY_RECORD = 0x0204, 21655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_VENDOR_ID_SOURCE = 0x0205, 21665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 21675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner /* BT HID */ 21685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_DEVICE_RELEASE_NUMBER = 0x0200, 21695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_PARSER_VERSION = 0x0201, 21705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_DEVICE_SUBCLASS = 0x0202, 21715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_COUNTRY_CODE = 0x0203, 21725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_VIRTUAL_CABLE = 0x0204, 21735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_RECONNECT_INITIATE = 0x0205, 21745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_DESCRIPTOR_LIST = 0x0206, 21755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_LANG_ID_BASE_LIST = 0x0207, 21765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SDP_DISABLE = 0x0208, 21775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_BATTERY_POWER = 0x0209, 21785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_REMOTE_WAKEUP = 0x020a, 21795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_PROFILE_VERSION = 0x020b, 21805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_SUPERVISION_TIMEOUT = 0x020c, 21815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_NORMALLY_CONNECTABLE = 0x020d, 21825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner SDP_ATTR_BOOT_DEVICE = 0x020e, 21835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}; 2184