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