hci.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:46k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /*
  2.  *
  3.  *  BlueZ - Bluetooth protocol stack for Linux
  4.  *
  5.  *  Copyright (C) 2000-2001  Qualcomm Incorporated
  6.  *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
  7.  *  Copyright (C) 2002-2008  Marcel Holtmann <marcel@holtmann.org>
  8.  *
  9.  *
  10.  *  This program is free software; you can redistribute it and/or modify
  11.  *  it under the terms of the GNU General Public License as published by
  12.  *  the Free Software Foundation; either version 2 of the License, or
  13.  *  (at your option) any later version.
  14.  *
  15.  *  This program is distributed in the hope that it will be useful,
  16.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  *  GNU General Public License for more details.
  19.  *
  20.  *  You should have received a copy of the GNU General Public License
  21.  *  along with this program; if not, write to the Free Software
  22.  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  23.  *
  24.  */
  25. #ifndef __HCI_H
  26. #define __HCI_H
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. #include <sys/socket.h>
  31. #define HCI_MAX_DEV 16
  32. #define HCI_MAX_ACL_SIZE 1024
  33. #define HCI_MAX_SCO_SIZE 255
  34. #define HCI_MAX_EVENT_SIZE 260
  35. #define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
  36. /* HCI dev events */
  37. #define HCI_DEV_REG 1
  38. #define HCI_DEV_UNREG 2
  39. #define HCI_DEV_UP 3
  40. #define HCI_DEV_DOWN 4
  41. #define HCI_DEV_SUSPEND 5
  42. #define HCI_DEV_RESUME 6
  43. /* HCI device types */
  44. #define HCI_VIRTUAL 0
  45. #define HCI_USB 1
  46. #define HCI_PCCARD 2
  47. #define HCI_UART 3
  48. #define HCI_RS232 4
  49. #define HCI_PCI 5
  50. #define HCI_SDIO 6
  51. /* HCI device flags */
  52. enum {
  53. HCI_UP,
  54. HCI_INIT,
  55. HCI_RUNNING,
  56. HCI_PSCAN,
  57. HCI_ISCAN,
  58. HCI_AUTH,
  59. HCI_ENCRYPT,
  60. HCI_INQUIRY,
  61. HCI_RAW,
  62. HCI_SECMGR
  63. };
  64. /* HCI ioctl defines */
  65. #define HCIDEVUP _IOW('H', 201, int)
  66. #define HCIDEVDOWN _IOW('H', 202, int)
  67. #define HCIDEVRESET _IOW('H', 203, int)
  68. #define HCIDEVRESTAT _IOW('H', 204, int)
  69. #define HCIGETDEVLIST _IOR('H', 210, int)
  70. #define HCIGETDEVINFO _IOR('H', 211, int)
  71. #define HCIGETCONNLIST _IOR('H', 212, int)
  72. #define HCIGETCONNINFO _IOR('H', 213, int)
  73. #define HCIGETAUTHINFO _IOR('H', 215, int)
  74. #define HCISETRAW _IOW('H', 220, int)
  75. #define HCISETSCAN _IOW('H', 221, int)
  76. #define HCISETAUTH _IOW('H', 222, int)
  77. #define HCISETENCRYPT _IOW('H', 223, int)
  78. #define HCISETPTYPE _IOW('H', 224, int)
  79. #define HCISETLINKPOL _IOW('H', 225, int)
  80. #define HCISETLINKMODE _IOW('H', 226, int)
  81. #define HCISETACLMTU _IOW('H', 227, int)
  82. #define HCISETSCOMTU _IOW('H', 228, int)
  83. #define HCISETSECMGR _IOW('H', 230, int)
  84. #define HCIINQUIRY _IOR('H', 240, int)
  85. #ifndef __NO_HCI_DEFS
  86. /* HCI Packet types */
  87. #define HCI_COMMAND_PKT 0x01
  88. #define HCI_ACLDATA_PKT 0x02
  89. #define HCI_SCODATA_PKT 0x03
  90. #define HCI_EVENT_PKT 0x04
  91. #define HCI_VENDOR_PKT 0xff
  92. /* HCI Packet types */
  93. #define HCI_2DH1 0x0002
  94. #define HCI_3DH1 0x0004
  95. #define HCI_DM1 0x0008
  96. #define HCI_DH1 0x0010
  97. #define HCI_2DH3 0x0100
  98. #define HCI_3DH3 0x0200
  99. #define HCI_DM3 0x0400
  100. #define HCI_DH3 0x0800
  101. #define HCI_2DH5 0x1000
  102. #define HCI_3DH5 0x2000
  103. #define HCI_DM5 0x4000
  104. #define HCI_DH5 0x8000
  105. #define HCI_HV1 0x0020
  106. #define HCI_HV2 0x0040
  107. #define HCI_HV3 0x0080
  108. #define HCI_EV3 0x0008
  109. #define HCI_EV4 0x0010
  110. #define HCI_EV5 0x0020
  111. #define HCI_2EV3 0x0040
  112. #define HCI_3EV3 0x0080
  113. #define HCI_2EV5 0x0100
  114. #define HCI_3EV5 0x0200
  115. #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
  116. #define ACL_PTYPE_MASK (HCI_DM1 | HCI_DH1 | HCI_DM3 | HCI_DH3 | HCI_DM5 | HCI_DH5)
  117. /* HCI Error codes */
  118. #define HCI_UNKNOWN_COMMAND 0x01
  119. #define HCI_NO_CONNECTION 0x02
  120. #define HCI_HARDWARE_FAILURE 0x03
  121. #define HCI_PAGE_TIMEOUT 0x04
  122. #define HCI_AUTHENTICATION_FAILURE 0x05
  123. #define HCI_PIN_OR_KEY_MISSING 0x06
  124. #define HCI_MEMORY_FULL 0x07
  125. #define HCI_CONNECTION_TIMEOUT 0x08
  126. #define HCI_MAX_NUMBER_OF_CONNECTIONS 0x09
  127. #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS 0x0a
  128. #define HCI_ACL_CONNECTION_EXISTS 0x0b
  129. #define HCI_COMMAND_DISALLOWED 0x0c
  130. #define HCI_REJECTED_LIMITED_RESOURCES 0x0d
  131. #define HCI_REJECTED_SECURITY 0x0e
  132. #define HCI_REJECTED_PERSONAL 0x0f
  133. #define HCI_HOST_TIMEOUT 0x10
  134. #define HCI_UNSUPPORTED_FEATURE 0x11
  135. #define HCI_INVALID_PARAMETERS 0x12
  136. #define HCI_OE_USER_ENDED_CONNECTION 0x13
  137. #define HCI_OE_LOW_RESOURCES 0x14
  138. #define HCI_OE_POWER_OFF 0x15
  139. #define HCI_CONNECTION_TERMINATED 0x16
  140. #define HCI_REPEATED_ATTEMPTS 0x17
  141. #define HCI_PAIRING_NOT_ALLOWED 0x18
  142. #define HCI_UNKNOWN_LMP_PDU 0x19
  143. #define HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a
  144. #define HCI_SCO_OFFSET_REJECTED 0x1b
  145. #define HCI_SCO_INTERVAL_REJECTED 0x1c
  146. #define HCI_AIR_MODE_REJECTED 0x1d
  147. #define HCI_INVALID_LMP_PARAMETERS 0x1e
  148. #define HCI_UNSPECIFIED_ERROR 0x1f
  149. #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20
  150. #define HCI_ROLE_CHANGE_NOT_ALLOWED 0x21
  151. #define HCI_LMP_RESPONSE_TIMEOUT 0x22
  152. #define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23
  153. #define HCI_LMP_PDU_NOT_ALLOWED 0x24
  154. #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED 0x25
  155. #define HCI_UNIT_LINK_KEY_USED 0x26
  156. #define HCI_QOS_NOT_SUPPORTED 0x27
  157. #define HCI_INSTANT_PASSED 0x28
  158. #define HCI_PAIRING_NOT_SUPPORTED 0x29
  159. #define HCI_TRANSACTION_COLLISION 0x2a
  160. #define HCI_QOS_UNACCEPTABLE_PARAMETER 0x2c
  161. #define HCI_QOS_REJECTED 0x2d
  162. #define HCI_CLASSIFICATION_NOT_SUPPORTED 0x2e
  163. #define HCI_INSUFFICIENT_SECURITY 0x2f
  164. #define HCI_PARAMETER_OUT_OF_RANGE 0x30
  165. #define HCI_ROLE_SWITCH_PENDING 0x32
  166. #define HCI_SLOT_VIOLATION 0x34
  167. #define HCI_ROLE_SWITCH_FAILED 0x35
  168. #define HCI_EIR_TOO_LARGE 0x36
  169. #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED 0x37
  170. #define HCI_HOST_BUSY_PAIRING 0x38
  171. /* ACL flags */
  172. #define ACL_CONT 0x01
  173. #define ACL_START 0x02
  174. #define ACL_ACTIVE_BCAST 0x04
  175. #define ACL_PICO_BCAST 0x08
  176. /* Baseband links */
  177. #define SCO_LINK 0x00
  178. #define ACL_LINK 0x01
  179. #define ESCO_LINK 0x02
  180. /* LMP features */
  181. #define LMP_3SLOT 0x01
  182. #define LMP_5SLOT 0x02
  183. #define LMP_ENCRYPT 0x04
  184. #define LMP_SOFFSET 0x08
  185. #define LMP_TACCURACY 0x10
  186. #define LMP_RSWITCH 0x20
  187. #define LMP_HOLD 0x40
  188. #define LMP_SNIFF 0x80
  189. #define LMP_PARK 0x01
  190. #define LMP_RSSI 0x02
  191. #define LMP_QUALITY 0x04
  192. #define LMP_SCO 0x08
  193. #define LMP_HV2 0x10
  194. #define LMP_HV3 0x20
  195. #define LMP_ULAW 0x40
  196. #define LMP_ALAW 0x80
  197. #define LMP_CVSD 0x01
  198. #define LMP_PSCHEME 0x02
  199. #define LMP_PCONTROL 0x04
  200. #define LMP_TRSP_SCO 0x08
  201. #define LMP_BCAST_ENC 0x80
  202. #define LMP_EDR_ACL_2M 0x02
  203. #define LMP_EDR_ACL_3M 0x04
  204. #define LMP_ENH_ISCAN 0x08
  205. #define LMP_ILACE_ISCAN 0x10
  206. #define LMP_ILACE_PSCAN 0x20
  207. #define LMP_RSSI_INQ 0x40
  208. #define LMP_ESCO 0x80
  209. #define LMP_EV4 0x01
  210. #define LMP_EV5 0x02
  211. #define LMP_AFH_CAP_SLV 0x08
  212. #define LMP_AFH_CLS_SLV 0x10
  213. #define LMP_EDR_3SLOT 0x80
  214. #define LMP_EDR_5SLOT 0x01
  215. #define LMP_SNIFF_SUBR 0x02
  216. #define LMP_PAUSE_ENC 0x04
  217. #define LMP_AFH_CAP_MST 0x08
  218. #define LMP_AFH_CLS_MST 0x10
  219. #define LMP_EDR_ESCO_2M 0x20
  220. #define LMP_EDR_ESCO_3M 0x40
  221. #define LMP_EDR_3S_ESCO 0x80
  222. #define LMP_EXT_INQ 0x01
  223. #define LMP_SIMPLE_PAIR 0x08
  224. #define LMP_ENCAPS_PDU 0x10
  225. #define LMP_ERR_DAT_REP 0x20
  226. #define LMP_NFLUSH_PKTS 0x40
  227. #define LMP_LSTO 0x01
  228. #define LMP_INQ_TX_PWR 0x02
  229. #define LMP_EXT_FEAT 0x80
  230. /* Link policies */
  231. #define HCI_LP_RSWITCH 0x0001
  232. #define HCI_LP_HOLD 0x0002
  233. #define HCI_LP_SNIFF 0x0004
  234. #define HCI_LP_PARK 0x0008
  235. /* Link mode */
  236. #define HCI_LM_ACCEPT 0x8000
  237. #define HCI_LM_MASTER 0x0001
  238. #define HCI_LM_AUTH 0x0002
  239. #define HCI_LM_ENCRYPT 0x0004
  240. #define HCI_LM_TRUSTED 0x0008
  241. #define HCI_LM_RELIABLE 0x0010
  242. #define HCI_LM_SECURE 0x0020
  243. /* -----  HCI Commands ----- */
  244. /* Link Control */
  245. #define OGF_LINK_CTL 0x01
  246. #define OCF_INQUIRY 0x0001
  247. typedef struct {
  248. uint8_t lap[3];
  249. uint8_t length; /* 1.28s units */
  250. uint8_t num_rsp;
  251. } __attribute__ ((packed)) inquiry_cp;
  252. #define INQUIRY_CP_SIZE 5
  253. typedef struct {
  254. uint8_t status;
  255. bdaddr_t bdaddr;
  256. } __attribute__ ((packed)) status_bdaddr_rp;
  257. #define STATUS_BDADDR_RP_SIZE 7
  258. #define OCF_INQUIRY_CANCEL 0x0002
  259. #define OCF_PERIODIC_INQUIRY 0x0003
  260. typedef struct {
  261. uint16_t max_period; /* 1.28s units */
  262. uint16_t min_period; /* 1.28s units */
  263. uint8_t lap[3];
  264. uint8_t length; /* 1.28s units */
  265. uint8_t num_rsp;
  266. } __attribute__ ((packed)) periodic_inquiry_cp;
  267. #define PERIODIC_INQUIRY_CP_SIZE 9
  268. #define OCF_EXIT_PERIODIC_INQUIRY 0x0004
  269. #define OCF_CREATE_CONN 0x0005
  270. typedef struct {
  271. bdaddr_t bdaddr;
  272. uint16_t pkt_type;
  273. uint8_t pscan_rep_mode;
  274. uint8_t pscan_mode;
  275. uint16_t clock_offset;
  276. uint8_t role_switch;
  277. } __attribute__ ((packed)) create_conn_cp;
  278. #define CREATE_CONN_CP_SIZE 13
  279. #define OCF_DISCONNECT 0x0006
  280. typedef struct {
  281. uint16_t handle;
  282. uint8_t reason;
  283. } __attribute__ ((packed)) disconnect_cp;
  284. #define DISCONNECT_CP_SIZE 3
  285. #define OCF_ADD_SCO 0x0007
  286. typedef struct {
  287. uint16_t handle;
  288. uint16_t pkt_type;
  289. } __attribute__ ((packed)) add_sco_cp;
  290. #define ADD_SCO_CP_SIZE 4
  291. #define OCF_CREATE_CONN_CANCEL 0x0008
  292. typedef struct {
  293. bdaddr_t bdaddr;
  294. } __attribute__ ((packed)) create_conn_cancel_cp;
  295. #define CREATE_CONN_CANCEL_CP_SIZE 6
  296. #define OCF_ACCEPT_CONN_REQ 0x0009
  297. typedef struct {
  298. bdaddr_t bdaddr;
  299. uint8_t role;
  300. } __attribute__ ((packed)) accept_conn_req_cp;
  301. #define ACCEPT_CONN_REQ_CP_SIZE 7
  302. #define OCF_REJECT_CONN_REQ 0x000A
  303. typedef struct {
  304. bdaddr_t bdaddr;
  305. uint8_t reason;
  306. } __attribute__ ((packed)) reject_conn_req_cp;
  307. #define REJECT_CONN_REQ_CP_SIZE 7
  308. #define OCF_LINK_KEY_REPLY 0x000B
  309. typedef struct {
  310. bdaddr_t bdaddr;
  311. uint8_t link_key[16];
  312. } __attribute__ ((packed)) link_key_reply_cp;
  313. #define LINK_KEY_REPLY_CP_SIZE 22
  314. #define OCF_LINK_KEY_NEG_REPLY 0x000C
  315. #define OCF_PIN_CODE_REPLY 0x000D
  316. typedef struct {
  317. bdaddr_t bdaddr;
  318. uint8_t pin_len;
  319. uint8_t pin_code[16];
  320. } __attribute__ ((packed)) pin_code_reply_cp;
  321. #define PIN_CODE_REPLY_CP_SIZE 23
  322. #define OCF_PIN_CODE_NEG_REPLY 0x000E
  323. #define OCF_SET_CONN_PTYPE 0x000F
  324. typedef struct {
  325. uint16_t  handle;
  326. uint16_t  pkt_type;
  327. } __attribute__ ((packed)) set_conn_ptype_cp;
  328. #define SET_CONN_PTYPE_CP_SIZE 4
  329. #define OCF_AUTH_REQUESTED 0x0011
  330. typedef struct {
  331. uint16_t  handle;
  332. } __attribute__ ((packed)) auth_requested_cp;
  333. #define AUTH_REQUESTED_CP_SIZE 2
  334. #define OCF_SET_CONN_ENCRYPT 0x0013
  335. typedef struct {
  336. uint16_t handle;
  337. uint8_t encrypt;
  338. } __attribute__ ((packed)) set_conn_encrypt_cp;
  339. #define SET_CONN_ENCRYPT_CP_SIZE 3
  340. #define OCF_CHANGE_CONN_LINK_KEY 0x0015
  341. typedef struct {
  342. uint16_t handle;
  343. } __attribute__ ((packed)) change_conn_link_key_cp;
  344. #define CHANGE_CONN_LINK_KEY_CP_SIZE 2
  345. #define OCF_MASTER_LINK_KEY 0x0017
  346. typedef struct {
  347. uint8_t key_flag;
  348. } __attribute__ ((packed)) master_link_key_cp;
  349. #define MASTER_LINK_KEY_CP_SIZE 1
  350. #define OCF_REMOTE_NAME_REQ 0x0019
  351. typedef struct {
  352. bdaddr_t bdaddr;
  353. uint8_t pscan_rep_mode;
  354. uint8_t pscan_mode;
  355. uint16_t clock_offset;
  356. } __attribute__ ((packed)) remote_name_req_cp;
  357. #define REMOTE_NAME_REQ_CP_SIZE 10
  358. #define OCF_REMOTE_NAME_REQ_CANCEL 0x001A
  359. typedef struct {
  360. bdaddr_t bdaddr;
  361. } __attribute__ ((packed)) remote_name_req_cancel_cp;
  362. #define REMOTE_NAME_REQ_CANCEL_CP_SIZE 6
  363. #define OCF_READ_REMOTE_FEATURES 0x001B
  364. typedef struct {
  365. uint16_t handle;
  366. } __attribute__ ((packed)) read_remote_features_cp;
  367. #define READ_REMOTE_FEATURES_CP_SIZE 2
  368. #define OCF_READ_REMOTE_EXT_FEATURES 0x001C
  369. typedef struct {
  370. uint16_t handle;
  371. uint8_t page_num;
  372. } __attribute__ ((packed)) read_remote_ext_features_cp;
  373. #define READ_REMOTE_EXT_FEATURES_CP_SIZE 3
  374. #define OCF_READ_REMOTE_VERSION 0x001D
  375. typedef struct {
  376. uint16_t handle;
  377. } __attribute__ ((packed)) read_remote_version_cp;
  378. #define READ_REMOTE_VERSION_CP_SIZE 2
  379. #define OCF_READ_CLOCK_OFFSET 0x001F
  380. typedef struct {
  381. uint16_t handle;
  382. } __attribute__ ((packed)) read_clock_offset_cp;
  383. #define READ_CLOCK_OFFSET_CP_SIZE 2
  384. #define OCF_READ_LMP_HANDLE 0x0020
  385. #define OCF_SETUP_SYNC_CONN 0x0028
  386. typedef struct {
  387. uint16_t handle;
  388. uint32_t tx_bandwith;
  389. uint32_t rx_bandwith;
  390. uint16_t max_latency;
  391. uint16_t voice_setting;
  392. uint8_t retrans_effort;
  393. uint16_t pkt_type;
  394. } __attribute__ ((packed)) setup_sync_conn_cp;
  395. #define SETUP_SYNC_CONN_CP_SIZE 17
  396. #define OCF_ACCEPT_SYNC_CONN_REQ 0x0029
  397. typedef struct {
  398. bdaddr_t bdaddr;
  399. uint32_t tx_bandwith;
  400. uint32_t rx_bandwith;
  401. uint16_t max_latency;
  402. uint16_t voice_setting;
  403. uint8_t retrans_effort;
  404. uint16_t pkt_type;
  405. } __attribute__ ((packed)) accept_sync_conn_req_cp;
  406. #define ACCEPT_SYNC_CONN_REQ_CP_SIZE 21
  407. #define OCF_REJECT_SYNC_CONN_REQ 0x002A
  408. typedef struct {
  409. bdaddr_t bdaddr;
  410. uint8_t reason;
  411. } __attribute__ ((packed)) reject_sync_conn_req_cp;
  412. #define REJECT_SYNC_CONN_REQ_CP_SIZE 7
  413. #define OCF_IO_CAPABILITY_REPLY 0x002B
  414. typedef struct {
  415. bdaddr_t bdaddr;
  416. uint8_t capability;
  417. uint8_t oob_data;
  418. uint8_t authentication;
  419. } __attribute__ ((packed)) io_capability_reply_cp;
  420. #define IO_CAPABILITY_REPLY_CP_SIZE 9
  421. #define OCF_USER_CONFIRM_REPLY 0x002C
  422. typedef struct {
  423. bdaddr_t bdaddr;
  424. } __attribute__ ((packed)) user_confirm_reply_cp;
  425. #define USER_CONFIRM_REPLY_CP_SIZE 6
  426. #define OCF_USER_CONFIRM_NEG_REPLY 0x002D
  427. #define OCF_USER_PASSKEY_REPLY 0x002E
  428. typedef struct {
  429. bdaddr_t bdaddr;
  430. uint32_t passkey;
  431. } __attribute__ ((packed)) user_passkey_reply_cp;
  432. #define USER_PASSKEY_REPLY_CP_SIZE 10
  433. #define OCF_USER_PASSKEY_NEG_REPLY 0x002F
  434. #define OCF_REMOTE_OOB_DATA_REPLY 0x0030
  435. typedef struct {
  436. bdaddr_t bdaddr;
  437. uint8_t hash[16];
  438. uint8_t randomizer[16];
  439. } __attribute__ ((packed)) remote_oob_data_reply_cp;
  440. #define REMOTE_OOB_DATA_REPLY_CP_SIZE 38
  441. #define OCF_REMOTE_OOB_DATA_NEG_REPLY 0x0033
  442. #define OCF_IO_CAPABILITY_NEG_REPLY 0x0034
  443. typedef struct {
  444. bdaddr_t bdaddr;
  445. uint8_t reason;
  446. } __attribute__ ((packed)) io_capability_neg_reply_cp;
  447. #define IO_CAPABILITY_NEG_REPLY_CP_SIZE 7
  448. /* Link Policy */
  449. #define OGF_LINK_POLICY 0x02
  450. #define OCF_HOLD_MODE 0x0001
  451. typedef struct {
  452. uint16_t handle;
  453. uint16_t max_interval;
  454. uint16_t min_interval;
  455. } __attribute__ ((packed)) hold_mode_cp;
  456. #define HOLD_MODE_CP_SIZE 6
  457. #define OCF_SNIFF_MODE 0x0003
  458. typedef struct {
  459. uint16_t handle;
  460. uint16_t max_interval;
  461. uint16_t min_interval;
  462. uint16_t attempt;
  463. uint16_t timeout;
  464. } __attribute__ ((packed)) sniff_mode_cp;
  465. #define SNIFF_MODE_CP_SIZE 10
  466. #define OCF_EXIT_SNIFF_MODE 0x0004
  467. typedef struct {
  468. uint16_t handle;
  469. } __attribute__ ((packed)) exit_sniff_mode_cp;
  470. #define EXIT_SNIFF_MODE_CP_SIZE 2
  471. #define OCF_PARK_MODE 0x0005
  472. typedef struct {
  473. uint16_t handle;
  474. uint16_t max_interval;
  475. uint16_t min_interval;
  476. } __attribute__ ((packed)) park_mode_cp;
  477. #define PARK_MODE_CP_SIZE 6
  478. #define OCF_EXIT_PARK_MODE 0x0006
  479. typedef struct {
  480. uint16_t handle;
  481. } __attribute__ ((packed)) exit_park_mode_cp;
  482. #define EXIT_PARK_MODE_CP_SIZE 2
  483. #define OCF_QOS_SETUP 0x0007
  484. typedef struct {
  485. uint8_t service_type; /* 1 = best effort */
  486. uint32_t token_rate; /* Byte per seconds */
  487. uint32_t peak_bandwidth; /* Byte per seconds */
  488. uint32_t latency; /* Microseconds */
  489. uint32_t delay_variation; /* Microseconds */
  490. } __attribute__ ((packed)) hci_qos;
  491. #define HCI_QOS_CP_SIZE 17
  492. typedef struct {
  493. uint16_t  handle;
  494. uint8_t  flags; /* Reserved */
  495. hci_qos  qos;
  496. } __attribute__ ((packed)) qos_setup_cp;
  497. #define QOS_SETUP_CP_SIZE (3 + HCI_QOS_CP_SIZE)
  498. #define OCF_ROLE_DISCOVERY 0x0009
  499. typedef struct {
  500. uint16_t handle;
  501. } __attribute__ ((packed)) role_discovery_cp;
  502. #define ROLE_DISCOVERY_CP_SIZE 2
  503. typedef struct {
  504. uint8_t status;
  505. uint16_t handle;
  506. uint8_t role;
  507. } __attribute__ ((packed)) role_discovery_rp;
  508. #define ROLE_DISCOVERY_RP_SIZE 4
  509. #define OCF_SWITCH_ROLE 0x000B
  510. typedef struct {
  511. bdaddr_t bdaddr;
  512. uint8_t role;
  513. } __attribute__ ((packed)) switch_role_cp;
  514. #define SWITCH_ROLE_CP_SIZE 7
  515. #define OCF_READ_LINK_POLICY 0x000C
  516. typedef struct {
  517. uint16_t handle;
  518. } __attribute__ ((packed)) read_link_policy_cp;
  519. #define READ_LINK_POLICY_CP_SIZE 2
  520. typedef struct {
  521. uint8_t  status;
  522. uint16_t handle;
  523. uint16_t policy;
  524. } __attribute__ ((packed)) read_link_policy_rp;
  525. #define READ_LINK_POLICY_RP_SIZE 5
  526. #define OCF_WRITE_LINK_POLICY 0x000D
  527. typedef struct {
  528. uint16_t handle;
  529. uint16_t policy;
  530. } __attribute__ ((packed)) write_link_policy_cp;
  531. #define WRITE_LINK_POLICY_CP_SIZE 4
  532. typedef struct {
  533. uint8_t  status;
  534. uint16_t handle;
  535. } __attribute__ ((packed)) write_link_policy_rp;
  536. #define WRITE_LINK_POLICY_RP_SIZE 3
  537. #define OCF_READ_DEFAULT_LINK_POLICY 0x000E
  538. #define OCF_WRITE_DEFAULT_LINK_POLICY 0x000F
  539. #define OCF_FLOW_SPECIFICATION 0x0010
  540. #define OCF_SNIFF_SUBRATING 0x0011
  541. typedef struct {
  542. uint16_t handle;
  543. uint16_t max_latency;
  544. uint16_t min_remote_timeout;
  545. uint16_t min_local_timeout;
  546. } __attribute__ ((packed)) sniff_subrating_cp;
  547. #define SNIFF_SUBRATING_CP_SIZE 8
  548. /* Host Controller and Baseband */
  549. #define OGF_HOST_CTL 0x03
  550. #define OCF_SET_EVENT_MASK 0x0001
  551. typedef struct {
  552. uint8_t mask[8];
  553. } __attribute__ ((packed)) set_event_mask_cp;
  554. #define SET_EVENT_MASK_CP_SIZE 8
  555. #define OCF_RESET 0x0003
  556. #define OCF_SET_EVENT_FLT 0x0005
  557. typedef struct {
  558. uint8_t flt_type;
  559. uint8_t cond_type;
  560. uint8_t condition[0];
  561. } __attribute__ ((packed)) set_event_flt_cp;
  562. #define SET_EVENT_FLT_CP_SIZE 2
  563. /* Filter types */
  564. #define FLT_CLEAR_ALL 0x00
  565. #define FLT_INQ_RESULT 0x01
  566. #define FLT_CONN_SETUP 0x02
  567. /* INQ_RESULT Condition types */
  568. #define INQ_RESULT_RETURN_ALL 0x00
  569. #define INQ_RESULT_RETURN_CLASS 0x01
  570. #define INQ_RESULT_RETURN_BDADDR 0x02
  571. /* CONN_SETUP Condition types */
  572. #define CONN_SETUP_ALLOW_ALL 0x00
  573. #define CONN_SETUP_ALLOW_CLASS 0x01
  574. #define CONN_SETUP_ALLOW_BDADDR 0x02
  575. /* CONN_SETUP Conditions */
  576. #define CONN_SETUP_AUTO_OFF 0x01
  577. #define CONN_SETUP_AUTO_ON 0x02
  578. #define OCF_FLUSH 0x0008
  579. #define OCF_READ_PIN_TYPE 0x0009
  580. typedef struct {
  581. uint8_t status;
  582. uint8_t pin_type;
  583. } __attribute__ ((packed)) read_pin_type_rp;
  584. #define READ_PIN_TYPE_RP_SIZE 2
  585. #define OCF_WRITE_PIN_TYPE 0x000A
  586. typedef struct {
  587. uint8_t pin_type;
  588. } __attribute__ ((packed)) write_pin_type_cp;
  589. #define WRITE_PIN_TYPE_CP_SIZE 1
  590. #define OCF_CREATE_NEW_UNIT_KEY 0x000B
  591. #define OCF_READ_STORED_LINK_KEY 0x000D
  592. typedef struct {
  593. bdaddr_t bdaddr;
  594. uint8_t read_all;
  595. } __attribute__ ((packed)) read_stored_link_key_cp;
  596. #define READ_STORED_LINK_KEY_CP_SIZE 7
  597. typedef struct {
  598. uint8_t status;
  599. uint16_t max_keys;
  600. uint16_t num_keys;
  601. } __attribute__ ((packed)) read_stored_link_key_rp;
  602. #define READ_STORED_LINK_KEY_RP_SIZE 5
  603. #define OCF_WRITE_STORED_LINK_KEY 0x0011
  604. typedef struct {
  605. uint8_t num_keys;
  606. /* variable length part */
  607. } __attribute__ ((packed)) write_stored_link_key_cp;
  608. #define WRITE_STORED_LINK_KEY_CP_SIZE 1
  609. typedef struct {
  610. uint8_t status;
  611. uint8_t num_keys;
  612. } __attribute__ ((packed)) write_stored_link_key_rp;
  613. #define READ_WRITE_LINK_KEY_RP_SIZE 2
  614. #define OCF_DELETE_STORED_LINK_KEY 0x0012
  615. typedef struct {
  616. bdaddr_t bdaddr;
  617. uint8_t delete_all;
  618. } __attribute__ ((packed)) delete_stored_link_key_cp;
  619. #define DELETE_STORED_LINK_KEY_CP_SIZE 7
  620. typedef struct {
  621. uint8_t status;
  622. uint16_t num_keys;
  623. } __attribute__ ((packed)) delete_stored_link_key_rp;
  624. #define DELETE_STORED_LINK_KEY_RP_SIZE 3
  625. #define OCF_CHANGE_LOCAL_NAME 0x0013
  626. typedef struct {
  627. uint8_t name[248];
  628. } __attribute__ ((packed)) change_local_name_cp;
  629. #define CHANGE_LOCAL_NAME_CP_SIZE 248 
  630. #define OCF_READ_LOCAL_NAME 0x0014
  631. typedef struct {
  632. uint8_t status;
  633. uint8_t name[248];
  634. } __attribute__ ((packed)) read_local_name_rp;
  635. #define READ_LOCAL_NAME_RP_SIZE 249 
  636. #define OCF_READ_CONN_ACCEPT_TIMEOUT 0x0015
  637. typedef struct {
  638. uint8_t status;
  639. uint16_t timeout;
  640. } __attribute__ ((packed)) read_conn_accept_timeout_rp;
  641. #define READ_CONN_ACCEPT_TIMEOUT_RP_SIZE 3
  642. #define OCF_WRITE_CONN_ACCEPT_TIMEOUT 0x0016
  643. typedef struct {
  644. uint16_t timeout;
  645. } __attribute__ ((packed)) write_conn_accept_timeout_cp;
  646. #define WRITE_CONN_ACCEPT_TIMEOUT_CP_SIZE 2
  647. #define OCF_READ_PAGE_TIMEOUT 0x0017
  648. typedef struct {
  649. uint8_t status;
  650. uint16_t timeout;
  651. } __attribute__ ((packed)) read_page_timeout_rp;
  652. #define READ_PAGE_TIMEOUT_RP_SIZE 3
  653. #define OCF_WRITE_PAGE_TIMEOUT 0x0018
  654. typedef struct {
  655. uint16_t timeout;
  656. } __attribute__ ((packed)) write_page_timeout_cp;
  657. #define WRITE_PAGE_TIMEOUT_CP_SIZE 2
  658. #define OCF_READ_SCAN_ENABLE 0x0019
  659. typedef struct {
  660. uint8_t status;
  661. uint8_t enable;
  662. } __attribute__ ((packed)) read_scan_enable_rp;
  663. #define READ_SCAN_ENABLE_RP_SIZE 2
  664. #define OCF_WRITE_SCAN_ENABLE 0x001A
  665. #define SCAN_DISABLED 0x00
  666. #define SCAN_INQUIRY 0x01
  667. #define SCAN_PAGE 0x02
  668. #define OCF_READ_PAGE_ACTIVITY 0x001B
  669. typedef struct {
  670. uint8_t status;
  671. uint16_t interval;
  672. uint16_t window;
  673. } __attribute__ ((packed)) read_page_activity_rp;
  674. #define READ_PAGE_ACTIVITY_RP_SIZE 5
  675. #define OCF_WRITE_PAGE_ACTIVITY 0x001C
  676. typedef struct {
  677. uint16_t interval;
  678. uint16_t window;
  679. } __attribute__ ((packed)) write_page_activity_cp;
  680. #define WRITE_PAGE_ACTIVITY_CP_SIZE 4
  681. #define OCF_READ_INQ_ACTIVITY 0x001D
  682. typedef struct {
  683. uint8_t status;
  684. uint16_t interval;
  685. uint16_t window;
  686. } __attribute__ ((packed)) read_inq_activity_rp;
  687. #define READ_INQ_ACTIVITY_RP_SIZE 5
  688. #define OCF_WRITE_INQ_ACTIVITY 0x001E
  689. typedef struct {
  690. uint16_t interval;
  691. uint16_t window;
  692. } __attribute__ ((packed)) write_inq_activity_cp;
  693. #define WRITE_INQ_ACTIVITY_CP_SIZE 4
  694. #define OCF_READ_AUTH_ENABLE 0x001F
  695. #define OCF_WRITE_AUTH_ENABLE 0x0020
  696. #define AUTH_DISABLED 0x00
  697. #define AUTH_ENABLED 0x01
  698. #define OCF_READ_ENCRYPT_MODE 0x0021
  699. #define OCF_WRITE_ENCRYPT_MODE 0x0022
  700. #define ENCRYPT_DISABLED 0x00
  701. #define ENCRYPT_P2P 0x01
  702. #define ENCRYPT_BOTH 0x02
  703. #define OCF_READ_CLASS_OF_DEV 0x0023
  704. typedef struct {
  705. uint8_t status;
  706. uint8_t dev_class[3];
  707. } __attribute__ ((packed)) read_class_of_dev_rp;
  708. #define READ_CLASS_OF_DEV_RP_SIZE 4 
  709. #define OCF_WRITE_CLASS_OF_DEV 0x0024
  710. typedef struct {
  711. uint8_t dev_class[3];
  712. } __attribute__ ((packed)) write_class_of_dev_cp;
  713. #define WRITE_CLASS_OF_DEV_CP_SIZE 3
  714. #define OCF_READ_VOICE_SETTING 0x0025
  715. typedef struct {
  716. uint8_t status;
  717. uint16_t voice_setting;
  718. } __attribute__ ((packed)) read_voice_setting_rp;
  719. #define READ_VOICE_SETTING_RP_SIZE 3
  720. #define OCF_WRITE_VOICE_SETTING 0x0026
  721. typedef struct {
  722. uint16_t voice_setting;
  723. } __attribute__ ((packed)) write_voice_setting_cp;
  724. #define WRITE_VOICE_SETTING_CP_SIZE 2
  725. #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027
  726. #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028
  727. #define OCF_READ_NUM_BROADCAST_RETRANS 0x0029
  728. #define OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A
  729. #define OCF_READ_HOLD_MODE_ACTIVITY 0x002B
  730. #define OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C
  731. #define OCF_READ_TRANSMIT_POWER_LEVEL 0x002D
  732. typedef struct {
  733. uint16_t handle;
  734. uint8_t type;
  735. } __attribute__ ((packed)) read_transmit_power_level_cp;
  736. #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
  737. typedef struct {
  738. uint8_t status;
  739. uint16_t handle;
  740. int8_t level;
  741. } __attribute__ ((packed)) read_transmit_power_level_rp;
  742. #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
  743. #define OCF_READ_SYNC_FLOW_ENABLE 0x002E
  744. #define OCF_WRITE_SYNC_FLOW_ENABLE 0x002F
  745. #define OCF_SET_CONTROLLER_TO_HOST_FC 0x0031
  746. #define OCF_HOST_BUFFER_SIZE 0x0033
  747. typedef struct {
  748. uint16_t acl_mtu;
  749. uint8_t sco_mtu;
  750. uint16_t acl_max_pkt;
  751. uint16_t sco_max_pkt;
  752. } __attribute__ ((packed)) host_buffer_size_cp;
  753. #define HOST_BUFFER_SIZE_CP_SIZE 7
  754. #define OCF_HOST_NUM_COMP_PKTS 0x0035
  755. typedef struct {
  756. uint8_t num_hndl;
  757. /* variable length part */
  758. } __attribute__ ((packed)) host_num_comp_pkts_cp;
  759. #define HOST_NUM_COMP_PKTS_CP_SIZE 1
  760. #define OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036
  761. typedef struct {
  762. uint8_t status;
  763. uint16_t handle;
  764. uint16_t timeout;
  765. } __attribute__ ((packed)) read_link_supervision_timeout_rp;
  766. #define READ_LINK_SUPERVISION_TIMEOUT_RP_SIZE 5
  767. #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037
  768. typedef struct {
  769. uint16_t handle;
  770. uint16_t timeout;
  771. } __attribute__ ((packed)) write_link_supervision_timeout_cp;
  772. #define WRITE_LINK_SUPERVISION_TIMEOUT_CP_SIZE 4
  773. typedef struct {
  774. uint8_t status;
  775. uint16_t handle;
  776. } __attribute__ ((packed)) write_link_supervision_timeout_rp;
  777. #define WRITE_LINK_SUPERVISION_TIMEOUT_RP_SIZE 3
  778. #define OCF_READ_NUM_SUPPORTED_IAC 0x0038
  779. #define MAX_IAC_LAP 0x40
  780. #define OCF_READ_CURRENT_IAC_LAP 0x0039
  781. typedef struct {
  782. uint8_t status;
  783. uint8_t num_current_iac;
  784. uint8_t lap[MAX_IAC_LAP][3];
  785. } __attribute__ ((packed)) read_current_iac_lap_rp;
  786. #define READ_CURRENT_IAC_LAP_RP_SIZE 2+3*MAX_IAC_LAP
  787. #define OCF_WRITE_CURRENT_IAC_LAP 0x003A
  788. typedef struct {
  789. uint8_t num_current_iac;
  790. uint8_t lap[MAX_IAC_LAP][3];
  791. } __attribute__ ((packed)) write_current_iac_lap_cp;
  792. #define WRITE_CURRENT_IAC_LAP_CP_SIZE 1+3*MAX_IAC_LAP
  793. #define OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B
  794. #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C
  795. #define OCF_READ_PAGE_SCAN_MODE 0x003D
  796. #define OCF_WRITE_PAGE_SCAN_MODE 0x003E
  797. #define OCF_SET_AFH_CLASSIFICATION 0x003F
  798. typedef struct {
  799. uint8_t map[10];
  800. } __attribute__ ((packed)) set_afh_classification_cp;
  801. #define SET_AFH_CLASSIFICATION_CP_SIZE 10
  802. typedef struct {
  803. uint8_t status;
  804. } __attribute__ ((packed)) set_afh_classification_rp;
  805. #define SET_AFH_CLASSIFICATION_RP_SIZE 1
  806. #define OCF_READ_INQUIRY_SCAN_TYPE 0x0042
  807. typedef struct {
  808. uint8_t status;
  809. uint8_t type;
  810. } __attribute__ ((packed)) read_inquiry_scan_type_rp;
  811. #define READ_INQUIRY_SCAN_TYPE_RP_SIZE 2
  812. #define OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043
  813. typedef struct {
  814. uint8_t type;
  815. } __attribute__ ((packed)) write_inquiry_scan_type_cp;
  816. #define WRITE_INQUIRY_SCAN_TYPE_CP_SIZE 1
  817. typedef struct {
  818. uint8_t status;
  819. } __attribute__ ((packed)) write_inquiry_scan_type_rp;
  820. #define WRITE_INQUIRY_SCAN_TYPE_RP_SIZE 1
  821. #define OCF_READ_INQUIRY_MODE 0x0044
  822. typedef struct {
  823. uint8_t status;
  824. uint8_t mode;
  825. } __attribute__ ((packed)) read_inquiry_mode_rp;
  826. #define READ_INQUIRY_MODE_RP_SIZE 2
  827. #define OCF_WRITE_INQUIRY_MODE 0x0045
  828. typedef struct {
  829. uint8_t mode;
  830. } __attribute__ ((packed)) write_inquiry_mode_cp;
  831. #define WRITE_INQUIRY_MODE_CP_SIZE 1
  832. typedef struct {
  833. uint8_t status;
  834. } __attribute__ ((packed)) write_inquiry_mode_rp;
  835. #define WRITE_INQUIRY_MODE_RP_SIZE 1
  836. #define OCF_READ_PAGE_SCAN_TYPE 0x0046
  837. #define OCF_WRITE_PAGE_SCAN_TYPE 0x0047
  838. #define OCF_READ_AFH_MODE 0x0048
  839. typedef struct {
  840. uint8_t status;
  841. uint8_t mode;
  842. } __attribute__ ((packed)) read_afh_mode_rp;
  843. #define READ_AFH_MODE_RP_SIZE 2
  844. #define OCF_WRITE_AFH_MODE 0x0049
  845. typedef struct {
  846. uint8_t mode;
  847. } __attribute__ ((packed)) write_afh_mode_cp;
  848. #define WRITE_AFH_MODE_CP_SIZE 1
  849. typedef struct {
  850. uint8_t status;
  851. } __attribute__ ((packed)) write_afh_mode_rp;
  852. #define WRITE_AFH_MODE_RP_SIZE 1
  853. #define OCF_READ_EXT_INQUIRY_RESPONSE 0x0051
  854. typedef struct {
  855. uint8_t status;
  856. uint8_t fec;
  857. uint8_t data[240];
  858. } __attribute__ ((packed)) read_ext_inquiry_response_rp;
  859. #define READ_EXT_INQUIRY_RESPONSE_RP_SIZE 242
  860. #define OCF_WRITE_EXT_INQUIRY_RESPONSE 0x0052
  861. typedef struct {
  862. uint8_t fec;
  863. uint8_t data[240];
  864. } __attribute__ ((packed)) write_ext_inquiry_response_cp;
  865. #define WRITE_EXT_INQUIRY_RESPONSE_CP_SIZE 241
  866. typedef struct {
  867. uint8_t status;
  868. } __attribute__ ((packed)) write_ext_inquiry_response_rp;
  869. #define WRITE_EXT_INQUIRY_RESPONSE_RP_SIZE 1
  870. #define OCF_REFRESH_ENCRYPTION_KEY 0x0053
  871. typedef struct {
  872. uint16_t handle;
  873. } __attribute__ ((packed)) refresh_encryption_key_cp;
  874. #define REFRESH_ENCRYPTION_KEY_CP_SIZE 2
  875. typedef struct {
  876. uint8_t status;
  877. } __attribute__ ((packed)) refresh_encryption_key_rp;
  878. #define REFRESH_ENCRYPTION_KEY_RP_SIZE 1
  879. #define OCF_READ_SIMPLE_PAIRING_MODE 0x0055
  880. typedef struct {
  881. uint8_t status;
  882. uint8_t mode;
  883. } __attribute__ ((packed)) read_simple_pairing_mode_rp;
  884. #define READ_SIMPLE_PAIRING_MODE_RP_SIZE 2
  885. #define OCF_WRITE_SIMPLE_PAIRING_MODE 0x0056
  886. typedef struct {
  887. uint8_t mode;
  888. } __attribute__ ((packed)) write_simple_pairing_mode_cp;
  889. #define WRITE_SIMPLE_PAIRING_MODE_CP_SIZE 1
  890. typedef struct {
  891. uint8_t status;
  892. } __attribute__ ((packed)) write_simple_pairing_mode_rp;
  893. #define WRITE_SIMPLE_PAIRING_MODE_RP_SIZE 1
  894. #define OCF_READ_LOCAL_OOB_DATA 0x0057
  895. typedef struct {
  896. uint8_t status;
  897. uint8_t hash[16];
  898. uint8_t randomizer[16];
  899. } __attribute__ ((packed)) read_local_oob_data_rp;
  900. #define READ_LOCAL_OOB_DATA_RP_SIZE 33
  901. #define OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL 0x0058
  902. typedef struct {
  903. uint8_t status;
  904. int8_t level;
  905. } __attribute__ ((packed)) read_inquiry_transmit_power_level_rp;
  906. #define READ_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 2
  907. #define OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL 0x0059
  908. typedef struct {
  909. int8_t level;
  910. } __attribute__ ((packed)) write_inquiry_transmit_power_level_cp;
  911. #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_CP_SIZE 1
  912. typedef struct {
  913. uint8_t status;
  914. } __attribute__ ((packed)) write_inquiry_transmit_power_level_rp;
  915. #define WRITE_INQUIRY_TRANSMIT_POWER_LEVEL_RP_SIZE 1
  916. #define OCF_READ_DEFAULT_ERROR_DATA_REPORTING 0x005A
  917. typedef struct {
  918. uint8_t status;
  919. uint8_t reporting;
  920. } __attribute__ ((packed)) read_default_error_data_reporting_rp;
  921. #define READ_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 2
  922. #define OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING 0x005B
  923. typedef struct {
  924. uint8_t reporting;
  925. } __attribute__ ((packed)) write_default_error_data_reporting_cp;
  926. #define WRITE_DEFAULT_ERROR_DATA_REPORTING_CP_SIZE 1
  927. typedef struct {
  928. uint8_t status;
  929. } __attribute__ ((packed)) write_default_error_data_reporting_rp;
  930. #define WRITE_DEFAULT_ERROR_DATA_REPORTING_RP_SIZE 1
  931. #define OCF_ENHANCED_FLUSH 0x005F
  932. typedef struct {
  933. uint16_t handle;
  934. uint8_t type;
  935. } __attribute__ ((packed)) enhanced_flush_cp;
  936. #define ENHANCED_FLUSH_CP_SIZE 3
  937. #define OCF_SEND_KEYPRESS_NOTIFY 0x0060
  938. typedef struct {
  939. bdaddr_t bdaddr;
  940. uint8_t type;
  941. } __attribute__ ((packed)) send_keypress_notify_cp;
  942. #define SEND_KEYPRESS_NOTIFY_CP_SIZE 7
  943. typedef struct {
  944. uint8_t status;
  945. } __attribute__ ((packed)) send_keypress_notify_rp;
  946. #define SEND_KEYPRESS_NOTIFY_RP_SIZE 1
  947. /* Informational Parameters */
  948. #define OGF_INFO_PARAM 0x04
  949. #define OCF_READ_LOCAL_VERSION 0x0001
  950. typedef struct {
  951. uint8_t status;
  952. uint8_t hci_ver;
  953. uint16_t hci_rev;
  954. uint8_t lmp_ver;
  955. uint16_t manufacturer;
  956. uint16_t lmp_subver;
  957. } __attribute__ ((packed)) read_local_version_rp;
  958. #define READ_LOCAL_VERSION_RP_SIZE 9
  959. #define OCF_READ_LOCAL_COMMANDS 0x0002
  960. typedef struct {
  961. uint8_t status;
  962. uint8_t commands[64];
  963. } __attribute__ ((packed)) read_local_commands_rp;
  964. #define READ_LOCAL_COMMANDS_RP_SIZE 65
  965. #define OCF_READ_LOCAL_FEATURES 0x0003
  966. typedef struct {
  967. uint8_t status;
  968. uint8_t features[8];
  969. } __attribute__ ((packed)) read_local_features_rp;
  970. #define READ_LOCAL_FEATURES_RP_SIZE 9
  971. #define OCF_READ_LOCAL_EXT_FEATURES 0x0004
  972. typedef struct {
  973. uint8_t page_num;
  974. } __attribute__ ((packed)) read_local_ext_features_cp;
  975. #define READ_LOCAL_EXT_FEATURES_CP_SIZE 1
  976. typedef struct {
  977. uint8_t status;
  978. uint8_t page_num;
  979. uint8_t max_page_num;
  980. uint8_t features[8];
  981. } __attribute__ ((packed)) read_local_ext_features_rp;
  982. #define READ_LOCAL_EXT_FEATURES_RP_SIZE 11
  983. #define OCF_READ_BUFFER_SIZE 0x0005
  984. typedef struct {
  985. uint8_t status;
  986. uint16_t acl_mtu;
  987. uint8_t sco_mtu;
  988. uint16_t acl_max_pkt;
  989. uint16_t sco_max_pkt;
  990. } __attribute__ ((packed)) read_buffer_size_rp;
  991. #define READ_BUFFER_SIZE_RP_SIZE 8
  992. #define OCF_READ_COUNTRY_CODE 0x0007
  993. #define OCF_READ_BD_ADDR 0x0009
  994. typedef struct {
  995. uint8_t status;
  996. bdaddr_t bdaddr;
  997. } __attribute__ ((packed)) read_bd_addr_rp;
  998. #define READ_BD_ADDR_RP_SIZE 7
  999. /* Status params */
  1000. #define OGF_STATUS_PARAM 0x05
  1001. #define OCF_READ_FAILED_CONTACT_COUNTER 0x0001
  1002. typedef struct {
  1003. uint8_t status;
  1004. uint16_t handle;
  1005. uint8_t counter;
  1006. } __attribute__ ((packed)) read_failed_contact_counter_rp;
  1007. #define READ_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1008. #define OCF_RESET_FAILED_CONTACT_COUNTER 0x0002
  1009. typedef struct {
  1010. uint8_t status;
  1011. uint16_t handle;
  1012. } __attribute__ ((packed)) reset_failed_contact_counter_rp;
  1013. #define RESET_FAILED_CONTACT_COUNTER_RP_SIZE 4
  1014. #define OCF_READ_LINK_QUALITY 0x0003
  1015. typedef struct {
  1016. uint8_t status;
  1017. uint16_t handle;
  1018. uint8_t link_quality;
  1019. } __attribute__ ((packed)) read_link_quality_rp;
  1020. #define READ_LINK_QUALITY_RP_SIZE 4
  1021. #define OCF_READ_RSSI 0x0005
  1022. typedef struct {
  1023. uint8_t status;
  1024. uint16_t handle;
  1025. int8_t rssi;
  1026. } __attribute__ ((packed)) read_rssi_rp;
  1027. #define READ_RSSI_RP_SIZE 4
  1028. #define OCF_READ_AFH_MAP 0x0006
  1029. typedef struct {
  1030. uint8_t status;
  1031. uint16_t handle;
  1032. uint8_t mode;
  1033. uint8_t map[10];
  1034. } __attribute__ ((packed)) read_afh_map_rp;
  1035. #define READ_AFH_MAP_RP_SIZE 14
  1036. #define OCF_READ_CLOCK 0x0007
  1037. typedef struct {
  1038. uint16_t handle;
  1039. uint8_t which_clock;
  1040. } __attribute__ ((packed)) read_clock_cp;
  1041. #define READ_CLOCK_CP_SIZE 3
  1042. typedef struct {
  1043. uint8_t status;
  1044. uint16_t handle;
  1045. uint32_t clock;
  1046. uint16_t accuracy;
  1047. } __attribute__ ((packed)) read_clock_rp;
  1048. #define READ_CLOCK_RP_SIZE 9
  1049. /* Testing commands */
  1050. #define OGF_TESTING_CMD 0x3e
  1051. #define OCF_READ_LOOPBACK_MODE 0x0001
  1052. #define OCF_WRITE_LOOPBACK_MODE 0x0002
  1053. #define OCF_ENABLE_DEVICE_UNDER_TEST_MODE 0x0003
  1054. #define OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE 0x0004
  1055. typedef struct {
  1056. uint8_t mode;
  1057. } __attribute__ ((packed)) write_simple_pairing_debug_mode_cp;
  1058. #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_CP_SIZE 1
  1059. typedef struct {
  1060. uint8_t status;
  1061. } __attribute__ ((packed)) write_simple_pairing_debug_mode_rp;
  1062. #define WRITE_SIMPLE_PAIRING_DEBUG_MODE_RP_SIZE 1
  1063. /* Vendor specific commands */
  1064. #define OGF_VENDOR_CMD 0x3f
  1065. /* ---- HCI Events ---- */
  1066. #define EVT_INQUIRY_COMPLETE 0x01
  1067. #define EVT_INQUIRY_RESULT 0x02
  1068. typedef struct {
  1069. bdaddr_t bdaddr;
  1070. uint8_t pscan_rep_mode;
  1071. uint8_t pscan_period_mode;
  1072. uint8_t pscan_mode;
  1073. uint8_t dev_class[3];
  1074. uint16_t clock_offset;
  1075. } __attribute__ ((packed)) inquiry_info;
  1076. #define INQUIRY_INFO_SIZE 14
  1077. #define EVT_CONN_COMPLETE 0x03
  1078. typedef struct {
  1079. uint8_t status;
  1080. uint16_t handle;
  1081. bdaddr_t bdaddr;
  1082. uint8_t link_type;
  1083. uint8_t encr_mode;
  1084. } __attribute__ ((packed)) evt_conn_complete;
  1085. #define EVT_CONN_COMPLETE_SIZE 13
  1086. #define EVT_CONN_REQUEST 0x04
  1087. typedef struct {
  1088. bdaddr_t bdaddr;
  1089. uint8_t dev_class[3];
  1090. uint8_t link_type;
  1091. } __attribute__ ((packed)) evt_conn_request;
  1092. #define EVT_CONN_REQUEST_SIZE 10
  1093. #define EVT_DISCONN_COMPLETE 0x05
  1094. typedef struct {
  1095. uint8_t status;
  1096. uint16_t handle;
  1097. uint8_t reason;
  1098. } __attribute__ ((packed)) evt_disconn_complete;
  1099. #define EVT_DISCONN_COMPLETE_SIZE 4
  1100. #define EVT_AUTH_COMPLETE 0x06
  1101. typedef struct {
  1102. uint8_t status;
  1103. uint16_t handle;
  1104. } __attribute__ ((packed)) evt_auth_complete;
  1105. #define EVT_AUTH_COMPLETE_SIZE 3
  1106. #define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
  1107. typedef struct {
  1108. uint8_t status;
  1109. bdaddr_t bdaddr;
  1110. uint8_t name[248];
  1111. } __attribute__ ((packed)) evt_remote_name_req_complete;
  1112. #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
  1113. #define EVT_ENCRYPT_CHANGE 0x08
  1114. typedef struct {
  1115. uint8_t status;
  1116. uint16_t handle;
  1117. uint8_t encrypt;
  1118. } __attribute__ ((packed)) evt_encrypt_change;
  1119. #define EVT_ENCRYPT_CHANGE_SIZE 5
  1120. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE 0x09
  1121. typedef struct {
  1122. uint8_t status;
  1123. uint16_t handle;
  1124. }  __attribute__ ((packed)) evt_change_conn_link_key_complete;
  1125. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE_SIZE 3
  1126. #define EVT_MASTER_LINK_KEY_COMPLETE 0x0A
  1127. typedef struct {
  1128. uint8_t status;
  1129. uint16_t handle;
  1130. uint8_t key_flag;
  1131. } __attribute__ ((packed)) evt_master_link_key_complete;
  1132. #define EVT_MASTER_LINK_KEY_COMPLETE_SIZE 4
  1133. #define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
  1134. typedef struct {
  1135. uint8_t status;
  1136. uint16_t handle;
  1137. uint8_t features[8];
  1138. } __attribute__ ((packed)) evt_read_remote_features_complete;
  1139. #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
  1140. #define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
  1141. typedef struct {
  1142. uint8_t status;
  1143. uint16_t handle;
  1144. uint8_t lmp_ver;
  1145. uint16_t manufacturer;
  1146. uint16_t lmp_subver;
  1147. } __attribute__ ((packed)) evt_read_remote_version_complete;
  1148. #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
  1149. #define EVT_QOS_SETUP_COMPLETE 0x0D
  1150. typedef struct {
  1151. uint8_t status;
  1152. uint16_t handle;
  1153. uint8_t flags; /* Reserved */
  1154. hci_qos qos;
  1155. } __attribute__ ((packed)) evt_qos_setup_complete;
  1156. #define EVT_QOS_SETUP_COMPLETE_SIZE (4 + HCI_QOS_CP_SIZE)
  1157. #define EVT_CMD_COMPLETE  0x0E
  1158. typedef struct {
  1159. uint8_t ncmd;
  1160. uint16_t opcode;
  1161. } __attribute__ ((packed)) evt_cmd_complete;
  1162. #define EVT_CMD_COMPLETE_SIZE 3
  1163. #define EVT_CMD_STATUS  0x0F
  1164. typedef struct {
  1165. uint8_t status;
  1166. uint8_t ncmd;
  1167. uint16_t opcode;
  1168. } __attribute__ ((packed)) evt_cmd_status;
  1169. #define EVT_CMD_STATUS_SIZE 4
  1170. #define EVT_HARDWARE_ERROR 0x10
  1171. typedef struct {
  1172. uint8_t code;
  1173. } __attribute__ ((packed)) evt_hardware_error;
  1174. #define EVT_HARDWARE_ERROR_SIZE 1
  1175. #define EVT_FLUSH_OCCURRED 0x11
  1176. typedef struct {
  1177. uint16_t handle;
  1178. } __attribute__ ((packed)) evt_flush_occured;
  1179. #define EVT_FLUSH_OCCURRED_SIZE 2
  1180. #define EVT_ROLE_CHANGE 0x12
  1181. typedef struct {
  1182. uint8_t status;
  1183. bdaddr_t bdaddr;
  1184. uint8_t role;
  1185. } __attribute__ ((packed)) evt_role_change;
  1186. #define EVT_ROLE_CHANGE_SIZE 8
  1187. #define EVT_NUM_COMP_PKTS 0x13
  1188. typedef struct {
  1189. uint8_t num_hndl;
  1190. /* variable length part */
  1191. } __attribute__ ((packed)) evt_num_comp_pkts;
  1192. #define EVT_NUM_COMP_PKTS_SIZE 1
  1193. #define EVT_MODE_CHANGE 0x14
  1194. typedef struct {
  1195. uint8_t status;
  1196. uint16_t handle;
  1197. uint8_t mode;
  1198. uint16_t interval;
  1199. } __attribute__ ((packed)) evt_mode_change;
  1200. #define EVT_MODE_CHANGE_SIZE 6
  1201. #define EVT_RETURN_LINK_KEYS 0x15
  1202. typedef struct {
  1203. uint8_t num_keys;
  1204. /* variable length part */
  1205. } __attribute__ ((packed)) evt_return_link_keys;
  1206. #define EVT_RETURN_LINK_KEYS_SIZE 1
  1207. #define EVT_PIN_CODE_REQ 0x16
  1208. typedef struct {
  1209. bdaddr_t bdaddr;
  1210. } __attribute__ ((packed)) evt_pin_code_req;
  1211. #define EVT_PIN_CODE_REQ_SIZE 6
  1212. #define EVT_LINK_KEY_REQ 0x17
  1213. typedef struct {
  1214. bdaddr_t bdaddr;
  1215. } __attribute__ ((packed)) evt_link_key_req;
  1216. #define EVT_LINK_KEY_REQ_SIZE 6
  1217. #define EVT_LINK_KEY_NOTIFY 0x18
  1218. typedef struct {
  1219. bdaddr_t bdaddr;
  1220. uint8_t link_key[16];
  1221. uint8_t key_type;
  1222. } __attribute__ ((packed)) evt_link_key_notify;
  1223. #define EVT_LINK_KEY_NOTIFY_SIZE 23
  1224. #define EVT_LOOPBACK_COMMAND 0x19
  1225. #define EVT_DATA_BUFFER_OVERFLOW 0x1A
  1226. typedef struct {
  1227. uint8_t link_type;
  1228. } __attribute__ ((packed)) evt_data_buffer_overflow;
  1229. #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
  1230. #define EVT_MAX_SLOTS_CHANGE 0x1B
  1231. typedef struct {
  1232. uint16_t handle;
  1233. uint8_t max_slots;
  1234. } __attribute__ ((packed)) evt_max_slots_change;
  1235. #define EVT_MAX_SLOTS_CHANGE_SIZE 3
  1236. #define EVT_READ_CLOCK_OFFSET_COMPLETE 0x1C
  1237. typedef struct {
  1238. uint8_t status;
  1239. uint16_t handle;
  1240. uint16_t clock_offset;
  1241. } __attribute__ ((packed)) evt_read_clock_offset_complete;
  1242. #define EVT_READ_CLOCK_OFFSET_COMPLETE_SIZE 5
  1243. #define EVT_CONN_PTYPE_CHANGED 0x1D
  1244. typedef struct {
  1245. uint8_t status;
  1246. uint16_t handle;
  1247. uint16_t ptype;
  1248. } __attribute__ ((packed)) evt_conn_ptype_changed;
  1249. #define EVT_CONN_PTYPE_CHANGED_SIZE 5
  1250. #define EVT_QOS_VIOLATION 0x1E
  1251. typedef struct {
  1252. uint16_t handle;
  1253. } __attribute__ ((packed)) evt_qos_violation;
  1254. #define EVT_QOS_VIOLATION_SIZE 2
  1255. #define EVT_PSCAN_REP_MODE_CHANGE 0x20
  1256. typedef struct {
  1257. bdaddr_t bdaddr;
  1258. uint8_t pscan_rep_mode;
  1259. } __attribute__ ((packed)) evt_pscan_rep_mode_change;
  1260. #define EVT_PSCAN_REP_MODE_CHANGE_SIZE 7
  1261. #define EVT_FLOW_SPEC_COMPLETE 0x21
  1262. typedef struct {
  1263. uint8_t status;
  1264. uint16_t handle;
  1265. uint8_t flags;
  1266. uint8_t direction;
  1267. hci_qos qos;
  1268. } __attribute__ ((packed)) evt_flow_spec_complete;
  1269. #define EVT_FLOW_SPEC_COMPLETE_SIZE (5 + HCI_QOS_CP_SIZE)
  1270. #define EVT_INQUIRY_RESULT_WITH_RSSI 0x22
  1271. typedef struct {
  1272. bdaddr_t bdaddr;
  1273. uint8_t pscan_rep_mode;
  1274. uint8_t pscan_period_mode;
  1275. uint8_t dev_class[3];
  1276. uint16_t clock_offset;
  1277. int8_t rssi;
  1278. } __attribute__ ((packed)) inquiry_info_with_rssi;
  1279. #define INQUIRY_INFO_WITH_RSSI_SIZE 14
  1280. typedef struct {
  1281. bdaddr_t bdaddr;
  1282. uint8_t pscan_rep_mode;
  1283. uint8_t pscan_period_mode;
  1284. uint8_t pscan_mode;
  1285. uint8_t dev_class[3];
  1286. uint16_t clock_offset;
  1287. int8_t rssi;
  1288. } __attribute__ ((packed)) inquiry_info_with_rssi_and_pscan_mode;
  1289. #define INQUIRY_INFO_WITH_RSSI_AND_PSCAN_MODE_SIZE 15
  1290. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE 0x23
  1291. typedef struct {
  1292. uint8_t status;
  1293. uint16_t handle;
  1294. uint8_t page_num;
  1295. uint8_t max_page_num;
  1296. uint8_t features[8];
  1297. } __attribute__ ((packed)) evt_read_remote_ext_features_complete;
  1298. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE_SIZE 13
  1299. #define EVT_SYNC_CONN_COMPLETE 0x2C
  1300. typedef struct {
  1301. uint8_t status;
  1302. uint16_t handle;
  1303. bdaddr_t bdaddr;
  1304. uint8_t link_type;
  1305. uint8_t trans_interval;
  1306. uint8_t retrans_window;
  1307. uint16_t rx_pkt_len;
  1308. uint16_t tx_pkt_len;
  1309. uint8_t air_mode;
  1310. } __attribute__ ((packed)) evt_sync_conn_complete;
  1311. #define EVT_SYNC_CONN_COMPLETE_SIZE 17
  1312. #define EVT_SYNC_CONN_CHANGED 0x2D
  1313. typedef struct {
  1314. uint8_t status;
  1315. uint16_t handle;
  1316. uint8_t trans_interval;
  1317. uint8_t retrans_window;
  1318. uint16_t rx_pkt_len;
  1319. uint16_t tx_pkt_len;
  1320. } __attribute__ ((packed)) evt_sync_conn_changed;
  1321. #define EVT_SYNC_CONN_CHANGED_SIZE 9
  1322. #define EVT_SNIFF_SUBRATING 0x2E
  1323. typedef struct {
  1324. uint8_t status;
  1325. uint16_t handle;
  1326. uint16_t max_tx_latency;
  1327. uint16_t max_rx_latency;
  1328. uint16_t min_remote_timeout;
  1329. uint16_t min_local_timeout;
  1330. } __attribute__ ((packed)) evt_sniff_subrating;
  1331. #define EVT_SNIFF_SUBRATING_SIZE 11
  1332. #define EVT_EXTENDED_INQUIRY_RESULT 0x2F
  1333. typedef struct {
  1334. bdaddr_t bdaddr;
  1335. uint8_t pscan_rep_mode;
  1336. uint8_t pscan_period_mode;
  1337. uint8_t dev_class[3];
  1338. uint16_t clock_offset;
  1339. int8_t rssi;
  1340. uint8_t data[240];
  1341. } __attribute__ ((packed)) extended_inquiry_info;
  1342. #define EXTENDED_INQUIRY_INFO_SIZE 254
  1343. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
  1344. typedef struct {
  1345. uint8_t status;
  1346. uint16_t handle;
  1347. } __attribute__ ((packed)) evt_encryption_key_refresh_complete;
  1348. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3
  1349. #define EVT_IO_CAPABILITY_REQUEST 0x31
  1350. typedef struct {
  1351. bdaddr_t bdaddr;
  1352. } __attribute__ ((packed)) evt_io_capability_request;
  1353. #define EVT_IO_CAPABILITY_REQUEST_SIZE 6
  1354. #define EVT_IO_CAPABILITY_RESPONSE 0x32
  1355. typedef struct {
  1356. bdaddr_t bdaddr;
  1357. uint8_t capability;
  1358. uint8_t oob_data;
  1359. uint8_t authentication;
  1360. } __attribute__ ((packed)) evt_io_capability_response;
  1361. #define EVT_IO_CAPABILITY_RESPONSE_SIZE 9
  1362. #define EVT_USER_CONFIRM_REQUEST 0x33
  1363. typedef struct {
  1364. bdaddr_t bdaddr;
  1365. uint32_t passkey;
  1366. } __attribute__ ((packed)) evt_user_confirm_request;
  1367. #define EVT_USER_CONFIRM_REQUEST_SIZE 10
  1368. #define EVT_USER_PASSKEY_REQUEST 0x34
  1369. typedef struct {
  1370. bdaddr_t bdaddr;
  1371. } __attribute__ ((packed)) evt_user_passkey_request;
  1372. #define EVT_USER_PASSKEY_REQUEST_SIZE 6
  1373. #define EVT_REMOTE_OOB_DATA_REQUEST 0x35
  1374. typedef struct {
  1375. bdaddr_t bdaddr;
  1376. } __attribute__ ((packed)) evt_remote_oob_data_request;
  1377. #define EVT_REMOTE_OOB_DATA_REQUEST_SIZE 6
  1378. #define EVT_SIMPLE_PAIRING_COMPLETE 0x36
  1379. typedef struct {
  1380. uint8_t status;
  1381. bdaddr_t bdaddr;
  1382. } __attribute__ ((packed)) evt_simple_pairing_complete;
  1383. #define EVT_SIMPLE_PAIRING_COMPLETE_SIZE 7
  1384. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED 0x38
  1385. typedef struct {
  1386. uint16_t handle;
  1387. uint16_t timeout;
  1388. } __attribute__ ((packed)) evt_link_supervision_timeout_changed;
  1389. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED_SIZE 4
  1390. #define EVT_ENHANCED_FLUSH_COMPLETE 0x39
  1391. typedef struct {
  1392. uint16_t handle;
  1393. } __attribute__ ((packed)) evt_enhanced_flush_complete;
  1394. #define EVT_ENHANCED_FLUSH_COMPLETE_SIZE 2
  1395. #define EVT_USER_PASSKEY_NOTIFY 0x3B
  1396. typedef struct {
  1397. bdaddr_t bdaddr;
  1398. uint32_t passkey;
  1399. } __attribute__ ((packed)) evt_user_passkey_notify;
  1400. #define EVT_USER_PASSKEY_NOTIFY_SIZE 10
  1401. #define EVT_KEYPRESS_NOTIFY 0x3C
  1402. typedef struct {
  1403. bdaddr_t bdaddr;
  1404. uint8_t type;
  1405. } __attribute__ ((packed)) evt_keypress_notify;
  1406. #define EVT_KEYPRESS_NOTIFY_SIZE 7
  1407. #define EVT_REMOTE_HOST_FEATURES_NOTIFY 0x3D
  1408. typedef struct {
  1409. bdaddr_t bdaddr;
  1410. uint8_t features[8];
  1411. } __attribute__ ((packed)) evt_remote_host_features_notify;
  1412. #define EVT_REMOTE_HOST_FEATURES_NOTIFY_SIZE 14
  1413. #define EVT_TESTING 0xFE
  1414. #define EVT_VENDOR 0xFF
  1415. /* Internal events generated by BlueZ stack */
  1416. #define EVT_STACK_INTERNAL 0xFD
  1417. typedef struct {
  1418. uint16_t type;
  1419. uint8_t data[0];
  1420. } __attribute__ ((packed)) evt_stack_internal;
  1421. #define EVT_STACK_INTERNAL_SIZE 2
  1422. #define EVT_SI_DEVICE 0x01
  1423. typedef struct {
  1424. uint16_t event;
  1425. uint16_t dev_id;
  1426. } __attribute__ ((packed)) evt_si_device;
  1427. #define EVT_SI_DEVICE_SIZE 4
  1428. #define EVT_SI_SECURITY 0x02
  1429. typedef struct {
  1430. uint16_t event;
  1431. uint16_t proto;
  1432. uint16_t subproto;
  1433. uint8_t incoming;
  1434. } __attribute__ ((packed)) evt_si_security;
  1435. /* --------  HCI Packet structures  -------- */
  1436. #define HCI_TYPE_LEN 1
  1437. typedef struct {
  1438. uint16_t opcode; /* OCF & OGF */
  1439. uint8_t plen;
  1440. } __attribute__ ((packed)) hci_command_hdr;
  1441. #define HCI_COMMAND_HDR_SIZE  3
  1442. typedef struct {
  1443. uint8_t evt;
  1444. uint8_t plen;
  1445. } __attribute__ ((packed)) hci_event_hdr;
  1446. #define HCI_EVENT_HDR_SIZE  2
  1447. typedef struct {
  1448. uint16_t handle; /* Handle & Flags(PB, BC) */
  1449. uint16_t dlen;
  1450. } __attribute__ ((packed)) hci_acl_hdr;
  1451. #define HCI_ACL_HDR_SIZE  4
  1452. typedef struct {
  1453. uint16_t handle;
  1454. uint8_t dlen;
  1455. } __attribute__ ((packed)) hci_sco_hdr;
  1456. #define HCI_SCO_HDR_SIZE  3
  1457. typedef struct {
  1458. uint16_t device;
  1459. uint16_t type;
  1460. uint16_t plen;
  1461. } __attribute__ ((packed)) hci_msg_hdr;
  1462. #define HCI_MSG_HDR_SIZE 6
  1463. /* Command opcode pack/unpack */
  1464. #define cmd_opcode_pack(ogf, ocf) (uint16_t)((ocf & 0x03ff)|(ogf << 10))
  1465. #define cmd_opcode_ogf(op) (op >> 10)
  1466. #define cmd_opcode_ocf(op) (op & 0x03ff)
  1467. /* ACL handle and flags pack/unpack */
  1468. #define acl_handle_pack(h, f) (uint16_t)((h & 0x0fff)|(f << 12))
  1469. #define acl_handle(h) (h & 0x0fff)
  1470. #define acl_flags(h) (h >> 12)
  1471. #endif /* _NO_HCI_DEFS */
  1472. /* HCI Socket options */
  1473. #define HCI_DATA_DIR 1
  1474. #define HCI_FILTER 2
  1475. #define HCI_TIME_STAMP 3
  1476. /* HCI CMSG flags */
  1477. #define HCI_CMSG_DIR 0x0001
  1478. #define HCI_CMSG_TSTAMP 0x0002
  1479. struct sockaddr_hci {
  1480. sa_family_t hci_family;
  1481. unsigned short hci_dev;
  1482. };
  1483. #define HCI_DEV_NONE 0xffff
  1484. struct hci_filter {
  1485. uint32_t type_mask;
  1486. uint32_t event_mask[2];
  1487. uint16_t opcode;
  1488. };
  1489. #define HCI_FLT_TYPE_BITS 31
  1490. #define HCI_FLT_EVENT_BITS 63
  1491. #define HCI_FLT_OGF_BITS 63
  1492. #define HCI_FLT_OCF_BITS 127
  1493. /* Ioctl requests structures */
  1494. struct hci_dev_stats {
  1495. uint32_t err_rx;
  1496. uint32_t err_tx;
  1497. uint32_t cmd_tx;
  1498. uint32_t evt_rx;
  1499. uint32_t acl_tx;
  1500. uint32_t acl_rx;
  1501. uint32_t sco_tx;
  1502. uint32_t sco_rx;
  1503. uint32_t byte_rx;
  1504. uint32_t byte_tx;
  1505. };
  1506. struct hci_dev_info {
  1507. uint16_t dev_id;
  1508. char     name[8];
  1509. bdaddr_t bdaddr;
  1510. uint32_t flags;
  1511. uint8_t  type;
  1512. uint8_t  features[8];
  1513. uint32_t pkt_type;
  1514. uint32_t link_policy;
  1515. uint32_t link_mode;
  1516. uint16_t acl_mtu;
  1517. uint16_t acl_pkts;
  1518. uint16_t sco_mtu;
  1519. uint16_t sco_pkts;
  1520. struct   hci_dev_stats stat;
  1521. };
  1522. struct hci_conn_info {
  1523. uint16_t handle;
  1524. bdaddr_t bdaddr;
  1525. uint8_t  type;
  1526. uint8_t  out;
  1527. uint16_t state;
  1528. uint32_t link_mode;
  1529. };
  1530. struct hci_dev_req {
  1531. uint16_t dev_id;
  1532. uint32_t dev_opt;
  1533. };
  1534. struct hci_dev_list_req {
  1535. uint16_t dev_num;
  1536. struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
  1537. };
  1538. struct hci_conn_list_req {
  1539. uint16_t dev_id;
  1540. uint16_t conn_num;
  1541. struct hci_conn_info conn_info[0];
  1542. };
  1543. struct hci_conn_info_req {
  1544. bdaddr_t bdaddr;
  1545. uint8_t  type;
  1546. struct hci_conn_info conn_info[0];
  1547. };
  1548. struct hci_auth_info_req {
  1549. bdaddr_t bdaddr;
  1550. uint8_t  type;
  1551. };
  1552. struct hci_inquiry_req {
  1553. uint16_t dev_id;
  1554. uint16_t flags;
  1555. uint8_t  lap[3];
  1556. uint8_t  length;
  1557. uint8_t  num_rsp;
  1558. };
  1559. #define IREQ_CACHE_FLUSH 0x0001
  1560. struct hci_remotename_req {
  1561. uint16_t dev_id;
  1562. uint16_t flags;
  1563. bdaddr_t bdaddr;
  1564. uint8_t  name[248];
  1565. };
  1566. #ifdef __cplusplus
  1567. }
  1568. #endif
  1569. #endif /* __HCI_H */