112d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg/*
212d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  BlueZ - Bluetooth protocol stack for Linux
312d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *
412d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  Copyright (C) 2010  Nokia Corporation
512d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  Copyright (C) 2010  Marcel Holtmann <marcel@holtmann.org>
612d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *
712d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *
812d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  This program is free software; you can redistribute it and/or modify
912d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  it under the terms of the GNU General Public License as published by
1012d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  the Free Software Foundation; either version 2 of the License, or
1112d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  (at your option) any later version.
1212d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *
1312d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  This program is distributed in the hope that it will be useful,
1412d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  but WITHOUT ANY WARRANTY; without even the implied warranty of
1512d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1612d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  GNU General Public License for more details.
1712d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *
1812d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  You should have received a copy of the GNU General Public License
1912d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  along with this program; if not, write to the Free Software
2012d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
2112d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg *
2212d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg */
2312d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg
24b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg#ifndef __packed
25b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg#define __packed __attribute__((packed))
26b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg#endif
27b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg
28da4ffa720909af4e07d80963c1444b29be7a9927Szymon Janc#define MGMT_INDEX_NONE			0xFFFF
29da4ffa720909af4e07d80963c1444b29be7a9927Szymon Janc
30fb91c88916485512033b8437686a5f2405d19a92Johan Hedbergstruct mgmt_hdr {
3112d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg	uint16_t opcode;
32da4ffa720909af4e07d80963c1444b29be7a9927Szymon Janc	uint16_t index;
3312d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg	uint16_t len;
3412d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg} __packed;
35da4ffa720909af4e07d80963c1444b29be7a9927Szymon Janc#define MGMT_HDR_SIZE	6
3612d02e7f2283d0b1511fc7be08579b3037f5c9a9Johan Hedberg
37fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_OP_READ_VERSION		0x0001
389a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_rp_read_version {
39b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg	uint8_t version;
40b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg	uint16_t revision;
41b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg} __packed;
42b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg
43fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_OP_READ_FEATURES		0x0002
449a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_rp_read_features {
4558e6c539e644ab0d85890a0369dcc0c3d06a99b1Johan Hedberg	uint8_t features[8];
4658e6c539e644ab0d85890a0369dcc0c3d06a99b1Johan Hedberg} __packed;
47c0882114c2f9008762f2b298dd511d349627b490Johan Hedberg
48fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_OP_READ_INDEX_LIST		0x0003
499a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_rp_read_index_list {
50c0882114c2f9008762f2b298dd511d349627b490Johan Hedberg	uint16_t num_controllers;
51c0882114c2f9008762f2b298dd511d349627b490Johan Hedberg	uint16_t index[0];
52c0882114c2f9008762f2b298dd511d349627b490Johan Hedberg} __packed;
53c0882114c2f9008762f2b298dd511d349627b490Johan Hedberg
54c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg/* Reserve one extra byte for names in management messages so that they
55c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg * are always guaranteed to be nul-terminated */
56c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg#define MGMT_MAX_NAME_LENGTH		(HCI_MAX_NAME_LENGTH + 1)
57c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg
58fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_OP_READ_INFO		0x0004
599a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_rp_read_info {
6058e6c539e644ab0d85890a0369dcc0c3d06a99b1Johan Hedberg	uint8_t type;
6124a34a8b1f8615ad79199efdb6fea479509464b4Johan Hedberg	uint8_t powered;
6214655825c95fd065afc41bfc1c810987bfb1a2c6Johan Hedberg	uint8_t connectable;
6324a34a8b1f8615ad79199efdb6fea479509464b4Johan Hedberg	uint8_t discoverable;
6424a34a8b1f8615ad79199efdb6fea479509464b4Johan Hedberg	uint8_t pairable;
6524a34a8b1f8615ad79199efdb6fea479509464b4Johan Hedberg	uint8_t sec_mode;
66b67a8a42e6ea9c2d2b0877ac3832de75ec4e00e5Johan Hedberg	bdaddr_t bdaddr;
6724a34a8b1f8615ad79199efdb6fea479509464b4Johan Hedberg	uint8_t dev_class[3];
6858e6c539e644ab0d85890a0369dcc0c3d06a99b1Johan Hedberg	uint8_t features[8];
698c442fd677490441b64b3509c1264460668d9367Johan Hedberg	uint16_t manufacturer;
708c442fd677490441b64b3509c1264460668d9367Johan Hedberg	uint8_t hci_ver;
718c442fd677490441b64b3509c1264460668d9367Johan Hedberg	uint16_t hci_rev;
72c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg	uint8_t name[MGMT_MAX_NAME_LENGTH];
7358e6c539e644ab0d85890a0369dcc0c3d06a99b1Johan Hedberg} __packed;
7458e6c539e644ab0d85890a0369dcc0c3d06a99b1Johan Hedberg
75fb88bd2992dc0e3d90a9aabacaefcfcfc3f9aba9Johan Hedbergstruct mgmt_mode {
76fb88bd2992dc0e3d90a9aabacaefcfcfc3f9aba9Johan Hedberg	uint8_t val;
7707481cab563a0db441075f7e786d442e0c576c32Johan Hedberg} __packed;
78fdd43acc2a2a151e380de5f02c291d804ec05419Johan Hedberg
79fb88bd2992dc0e3d90a9aabacaefcfcfc3f9aba9Johan Hedberg#define MGMT_OP_SET_POWERED		0x0005
80fb88bd2992dc0e3d90a9aabacaefcfcfc3f9aba9Johan Hedberg
81528432cc7aad7601c3d98157c9472e6a089232f8Johan Hedberg#define MGMT_OP_SET_DISCOVERABLE	0x0006
82528432cc7aad7601c3d98157c9472e6a089232f8Johan Hedberg
8314655825c95fd065afc41bfc1c810987bfb1a2c6Johan Hedberg#define MGMT_OP_SET_CONNECTABLE		0x0007
8414655825c95fd065afc41bfc1c810987bfb1a2c6Johan Hedberg
856964bd2dd54d5cce7ce2588b0dcd0a3530e6fba9Johan Hedberg#define MGMT_OP_SET_PAIRABLE		0x0008
866964bd2dd54d5cce7ce2588b0dcd0a3530e6fba9Johan Hedberg
87006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg#define MGMT_OP_ADD_UUID		0x0009
88006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedbergstruct mgmt_cp_add_uuid {
89a31b2bfb5f0880030844eaf27b8f95e04b107f9fJohan Hedberg	uint8_t uuid[16];
90006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg	uint8_t svc_hint;
91a31b2bfb5f0880030844eaf27b8f95e04b107f9fJohan Hedberg} __packed;
92a31b2bfb5f0880030844eaf27b8f95e04b107f9fJohan Hedberg
93a31b2bfb5f0880030844eaf27b8f95e04b107f9fJohan Hedberg#define MGMT_OP_REMOVE_UUID		0x000A
94006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedbergstruct mgmt_cp_remove_uuid {
95006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg	uint8_t uuid[16];
96006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg} __packed;
97006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg
98006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg#define MGMT_OP_SET_DEV_CLASS		0x000B
99006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedbergstruct mgmt_cp_set_dev_class {
100006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg	uint8_t major;
101006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg	uint8_t minor;
102006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg} __packed;
103006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg
104006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg#define MGMT_OP_SET_SERVICE_CACHE	0x000C
105006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedbergstruct mgmt_cp_set_service_cache {
106006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg	uint8_t enable;
107006301ab40fc71da92f593ddfb2dba70202bd061Johan Hedberg} __packed;
108a31b2bfb5f0880030844eaf27b8f95e04b107f9fJohan Hedberg
109b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedbergstruct mgmt_key_info {
110b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	bdaddr_t bdaddr;
111b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	uint8_t type;
112b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	uint8_t val[16];
113b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	uint8_t pin_len;
114b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg} __packed;
115b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg
116b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg#define MGMT_OP_LOAD_KEYS		0x000D
117b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedbergstruct mgmt_cp_load_keys {
118b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	uint8_t debug_keys;
119b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	uint16_t key_count;
120b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	struct mgmt_key_info keys[0];
121b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg} __packed;
122b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg
123b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg#define MGMT_OP_REMOVE_KEY		0x000E
124b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedbergstruct mgmt_cp_remove_key {
125b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	bdaddr_t bdaddr;
126b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	uint8_t disconnect;
127b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg} __packed;
128b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg
129cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedberg#define MGMT_OP_DISCONNECT		0x000F
130cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedbergstruct mgmt_cp_disconnect {
131cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedberg	bdaddr_t bdaddr;
132cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedberg} __packed;
133cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedbergstruct mgmt_rp_disconnect {
134cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedberg	bdaddr_t bdaddr;
135cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedberg} __packed;
136cc8588d684373cfbca2282e6ec761c2194fb0aedJohan Hedberg
1371e862b561c65fb0d6096cd93d2c9cfe11f0356bbJohan Hedberg#define MGMT_OP_GET_CONNECTIONS		0x0010
1381e862b561c65fb0d6096cd93d2c9cfe11f0356bbJohan Hedbergstruct mgmt_rp_get_connections {
1391e862b561c65fb0d6096cd93d2c9cfe11f0356bbJohan Hedberg	uint16_t conn_count;
1401e862b561c65fb0d6096cd93d2c9cfe11f0356bbJohan Hedberg	bdaddr_t conn[0];
1411e862b561c65fb0d6096cd93d2c9cfe11f0356bbJohan Hedberg} __packed;
1421e862b561c65fb0d6096cd93d2c9cfe11f0356bbJohan Hedberg
1438b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg#define MGMT_OP_PIN_CODE_REPLY		0x0011
1448b77225e7b850a0524703be5439023cfff23b16cJohan Hedbergstruct mgmt_cp_pin_code_reply {
1458b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg	bdaddr_t bdaddr;
1468b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg	uint8_t pin_len;
1478b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg	uint8_t pin_code[16];
1488b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg} __packed;
1498b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg
1508b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg#define MGMT_OP_PIN_CODE_NEG_REPLY	0x0012
1518b77225e7b850a0524703be5439023cfff23b16cJohan Hedbergstruct mgmt_cp_pin_code_neg_reply {
1528b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg	bdaddr_t bdaddr;
1538b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg} __packed;
1548b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg
1559634f5c410e761219037129f71c591459a854391Johan Hedberg#define MGMT_OP_SET_IO_CAPABILITY	0x0013
1569634f5c410e761219037129f71c591459a854391Johan Hedbergstruct mgmt_cp_set_io_capability {
1579634f5c410e761219037129f71c591459a854391Johan Hedberg	uint8_t io_capability;
1589634f5c410e761219037129f71c591459a854391Johan Hedberg} __packed;
1599634f5c410e761219037129f71c591459a854391Johan Hedberg
1601c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg#define MGMT_OP_PAIR_DEVICE		0x0014
1611c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedbergstruct mgmt_cp_pair_device {
1621c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg	bdaddr_t bdaddr;
1631c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg	uint8_t io_cap;
1641c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg} __packed;
1651c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedbergstruct mgmt_rp_pair_device {
1661c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg	bdaddr_t bdaddr;
1671c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg	uint8_t status;
1681c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg} __packed;
1691c93c6fa88016166faf1a3d4b0d72531393834f9Johan Hedberg
17050102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg#define MGMT_OP_USER_CONFIRM_REPLY	0x0015
17150102905d99a29d47377103c752f0dbe0ac71d03Johan Hedbergstruct mgmt_cp_user_confirm_reply {
17250102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg	bdaddr_t bdaddr;
17350102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg} __packed;
17450102905d99a29d47377103c752f0dbe0ac71d03Johan Hedbergstruct mgmt_rp_user_confirm_reply {
17550102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg	bdaddr_t bdaddr;
17650102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg	uint8_t status;
17750102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg} __packed;
17850102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg
17950102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg#define MGMT_OP_USER_CONFIRM_NEG_REPLY	0x0016
18050102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg
1813011a312a70317aafad3def09cc0754dc550f229Johan Hedberg#define MGMT_OP_SET_LOCAL_NAME		0x0017
1823011a312a70317aafad3def09cc0754dc550f229Johan Hedbergstruct mgmt_cp_set_local_name {
183c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg	uint8_t name[MGMT_MAX_NAME_LENGTH];
1843011a312a70317aafad3def09cc0754dc550f229Johan Hedberg} __packed;
1853011a312a70317aafad3def09cc0754dc550f229Johan Hedberg
186ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc#define MGMT_OP_READ_LOCAL_OOB_DATA	0x0018
187ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Jancstruct mgmt_rp_read_local_oob_data {
188ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc	uint8_t hash[16];
189ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc	uint8_t randomizer[16];
190ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc} __packed;
191ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc
192ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc#define MGMT_OP_ADD_REMOTE_OOB_DATA	0x0019
193ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Jancstruct mgmt_cp_add_remote_oob_data {
194ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc	bdaddr_t bdaddr;
195ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc	uint8_t hash[16];
196ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc	uint8_t randomizer[16];
197ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc} __packed;
198ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc
199ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc#define MGMT_OP_REMOVE_REMOTE_OOB_DATA	0x001A
200ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Jancstruct mgmt_cp_remove_remote_oob_data {
201ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc	bdaddr_t bdaddr;
202ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc} __packed;
203ca8ea935e97f51a5754163b57770631bd1731c3aSzymon Janc
204421efd407e93464d86e6c77ebf3e237001a30bfeJohan Hedberg#define MGMT_OP_START_DISCOVERY		0x001B
205421efd407e93464d86e6c77ebf3e237001a30bfeJohan Hedberg
206421efd407e93464d86e6c77ebf3e237001a30bfeJohan Hedberg#define MGMT_OP_STOP_DISCOVERY		0x001C
207421efd407e93464d86e6c77ebf3e237001a30bfeJohan Hedberg
208fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_EV_CMD_COMPLETE		0x0001
2099a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_ev_cmd_complete {
210b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg	uint16_t opcode;
211b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg	uint8_t data[0];
212b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg} __packed;
213b02a68367321b323db81823f43d7332e35ce96faJohan Hedberg
214fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_EV_CMD_STATUS		0x0002
2159a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_ev_cmd_status {
216ff489b4fe36d7de4f438df38cb446c7b3477ebdeJohan Hedberg	uint8_t status;
217ff489b4fe36d7de4f438df38cb446c7b3477ebdeJohan Hedberg	uint16_t opcode;
218ff489b4fe36d7de4f438df38cb446c7b3477ebdeJohan Hedberg} __packed;
219ff489b4fe36d7de4f438df38cb446c7b3477ebdeJohan Hedberg
220fb91c88916485512033b8437686a5f2405d19a92Johan Hedberg#define MGMT_EV_CONTROLLER_ERROR	0x0003
2219a404a4e6bc03afcd78f02ef5cd77e50f77cd012Johan Hedbergstruct mgmt_ev_controller_error {
222ff489b4fe36d7de4f438df38cb446c7b3477ebdeJohan Hedberg	uint8_t error_code;
223ff489b4fe36d7de4f438df38cb446c7b3477ebdeJohan Hedberg} __packed;
22449bedc0b8c58cac7a8198a7247fb6dfb37e29c42Johan Hedberg
22549bedc0b8c58cac7a8198a7247fb6dfb37e29c42Johan Hedberg#define MGMT_EV_INDEX_ADDED		0x0004
22649bedc0b8c58cac7a8198a7247fb6dfb37e29c42Johan Hedberg
22749bedc0b8c58cac7a8198a7247fb6dfb37e29c42Johan Hedberg#define MGMT_EV_INDEX_REMOVED		0x0005
2288582b8e4cdf85425a40696c2839c44417c798687Johan Hedberg
2298582b8e4cdf85425a40696c2839c44417c798687Johan Hedberg#define MGMT_EV_POWERED			0x0006
230528432cc7aad7601c3d98157c9472e6a089232f8Johan Hedberg
231528432cc7aad7601c3d98157c9472e6a089232f8Johan Hedberg#define MGMT_EV_DISCOVERABLE		0x0007
23214655825c95fd065afc41bfc1c810987bfb1a2c6Johan Hedberg
23314655825c95fd065afc41bfc1c810987bfb1a2c6Johan Hedberg#define MGMT_EV_CONNECTABLE		0x0008
2346964bd2dd54d5cce7ce2588b0dcd0a3530e6fba9Johan Hedberg
2356964bd2dd54d5cce7ce2588b0dcd0a3530e6fba9Johan Hedberg#define MGMT_EV_PAIRABLE		0x0009
236b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg
237b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg#define MGMT_EV_NEW_KEY			0x000A
238b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedbergstruct mgmt_ev_new_key {
2393caf142f55ddda127621779335d574e89788576dJohan Hedberg	uint8_t store_hint;
240b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg	struct mgmt_key_info key;
241b115f344441c31c642f360fa5ce7d2fc73c1cfb2Johan Hedberg} __packed;
24248908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg
24348908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg#define MGMT_EV_DEVICE_CONNECTED	0x000B
24448908574c4853023dfe402a120b58a7a7d1f56deJohan Hedbergstruct mgmt_ev_device_connected {
24548908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg	bdaddr_t bdaddr;
24648908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg} __packed;
24748908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg
24848908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg#define MGMT_EV_DEVICE_DISCONNECTED	0x000C
24948908574c4853023dfe402a120b58a7a7d1f56deJohan Hedbergstruct mgmt_ev_device_disconnected {
25048908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg	bdaddr_t bdaddr;
25148908574c4853023dfe402a120b58a7a7d1f56deJohan Hedberg} __packed;
252d6fda82e31fa3b6fbf74f695201ac0da3aff2757Johan Hedberg
253d6fda82e31fa3b6fbf74f695201ac0da3aff2757Johan Hedberg#define MGMT_EV_CONNECT_FAILED		0x000D
254d6fda82e31fa3b6fbf74f695201ac0da3aff2757Johan Hedbergstruct mgmt_ev_connect_failed {
255d6fda82e31fa3b6fbf74f695201ac0da3aff2757Johan Hedberg	bdaddr_t bdaddr;
256d6fda82e31fa3b6fbf74f695201ac0da3aff2757Johan Hedberg	uint8_t status;
257d6fda82e31fa3b6fbf74f695201ac0da3aff2757Johan Hedberg} __packed;
2588b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg
2598b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg#define MGMT_EV_PIN_CODE_REQUEST	0x000E
2608b77225e7b850a0524703be5439023cfff23b16cJohan Hedbergstruct mgmt_ev_pin_code_request {
2618b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg	bdaddr_t bdaddr;
262e6c56d4e712a70c40139e2e9e3b91fde858a482cWaldemar Rymarkiewicz	uint8_t secure;
2638b77225e7b850a0524703be5439023cfff23b16cJohan Hedberg} __packed;
26450102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg
26550102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg#define MGMT_EV_USER_CONFIRM_REQUEST	0x000F
26650102905d99a29d47377103c752f0dbe0ac71d03Johan Hedbergstruct mgmt_ev_user_confirm_request {
26750102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg	bdaddr_t bdaddr;
2682ad1015a1660a0e87e04adb7b7f5ef0d62e8fc23Johan Hedberg	uint8_t confirm_hint;
26950102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg	uint32_t value;
27050102905d99a29d47377103c752f0dbe0ac71d03Johan Hedberg} __packed;
271a20bb21f47db02155498d71c0bdd2095a56bdc2aJohan Hedberg
272a20bb21f47db02155498d71c0bdd2095a56bdc2aJohan Hedberg#define MGMT_EV_AUTH_FAILED		0x0010
273a20bb21f47db02155498d71c0bdd2095a56bdc2aJohan Hedbergstruct mgmt_ev_auth_failed {
274a20bb21f47db02155498d71c0bdd2095a56bdc2aJohan Hedberg	bdaddr_t bdaddr;
275a20bb21f47db02155498d71c0bdd2095a56bdc2aJohan Hedberg	uint8_t status;
276a20bb21f47db02155498d71c0bdd2095a56bdc2aJohan Hedberg} __packed;
2773011a312a70317aafad3def09cc0754dc550f229Johan Hedberg
2783011a312a70317aafad3def09cc0754dc550f229Johan Hedberg#define MGMT_EV_LOCAL_NAME_CHANGED	0x0011
2793011a312a70317aafad3def09cc0754dc550f229Johan Hedbergstruct mgmt_ev_local_name_changed {
280c76086fd596ac11a890cec157abcd4ce32b523a2Johan Hedberg	uint8_t name[MGMT_MAX_NAME_LENGTH];
2813011a312a70317aafad3def09cc0754dc550f229Johan Hedberg} __packed;
282cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg
283cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg#define MGMT_EV_DEVICE_FOUND		0x0012
284cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedbergstruct mgmt_ev_device_found {
285cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg	bdaddr_t bdaddr;
286cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg	uint8_t dev_class[3];
287cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg	int8_t rssi;
288cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg	uint8_t eir[HCI_MAX_EIR_LENGTH];
289cb6dd1222d84e3dd7d9c60afa9e7b5721ed03c02Johan Hedberg} __packed;
29056fe0673840b9f599bd0127b77c45124c37c5890Johan Hedberg
29156fe0673840b9f599bd0127b77c45124c37c5890Johan Hedberg#define MGMT_EV_REMOTE_NAME		0x0013
29256fe0673840b9f599bd0127b77c45124c37c5890Johan Hedbergstruct mgmt_ev_remote_name {
29356fe0673840b9f599bd0127b77c45124c37c5890Johan Hedberg	bdaddr_t bdaddr;
29456fe0673840b9f599bd0127b77c45124c37c5890Johan Hedberg	uint8_t name[MGMT_MAX_NAME_LENGTH];
29556fe0673840b9f599bd0127b77c45124c37c5890Johan Hedberg} __packed;
2966f7add54356eb162223d1a096dd1945bf32366f3Johan Hedberg
2976f7add54356eb162223d1a096dd1945bf32366f3Johan Hedberg#define MGMT_EV_DISCOVERING		0x0014
298