hci.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:17k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* 
  2.    BlueZ - Bluetooth protocol stack for Linux
  3.    Copyright (C) 2000-2001 Qualcomm Incorporated
  4.    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
  5.    This program is free software; you can redistribute it and/or modify
  6.    it under the terms of the GNU General Public License version 2 as
  7.    published by the Free Software Foundation;
  8.    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  9.    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  10.    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
  11.    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
  12.    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
  13.    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
  14.    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
  15.    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16.    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
  17.    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
  18.    SOFTWARE IS DISCLAIMED.
  19. */
  20. /*
  21.  *  $Id: hci.h,v 1.5 2002/06/27 17:29:30 maxk Exp $
  22.  */
  23. #ifndef __HCI_H
  24. #define __HCI_H
  25. #define HCI_MAX_ACL_SIZE 1024
  26. #define HCI_MAX_SCO_SIZE 255
  27. #define HCI_MAX_EVENT_SIZE 260
  28. #define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
  29. /* HCI dev events */
  30. #define HCI_DEV_REG 1
  31. #define HCI_DEV_UNREG   2
  32. #define HCI_DEV_UP 3
  33. #define HCI_DEV_DOWN 4
  34. /* HCI device types */
  35. #define HCI_VHCI 0
  36. #define HCI_USB 1
  37. #define HCI_PCCARD 2
  38. #define HCI_UART  3
  39. #define HCI_RS232  4
  40. /* HCI device flags */
  41. enum {
  42. HCI_UP,
  43. HCI_INIT,
  44. HCI_RUNNING,
  45. HCI_PSCAN,
  46. HCI_ISCAN,
  47. HCI_AUTH,
  48. HCI_ENCRYPT,
  49. HCI_INQUIRY,
  50. HCI_RAW
  51. };
  52. /* HCI ioctl defines */
  53. #define HCIDEVUP        _IOW('H', 201, int)
  54. #define HCIDEVDOWN      _IOW('H', 202, int)
  55. #define HCIDEVRESET     _IOW('H', 203, int)
  56. #define HCIDEVRESTAT    _IOW('H', 204, int)
  57. #define HCIGETDEVLIST   _IOR('H', 210, int)
  58. #define HCIGETDEVINFO   _IOR('H', 211, int)
  59. #define HCIGETCONNLIST  _IOR('H', 212, int)
  60. #define HCIGETCONNINFO  _IOR('H', 213, int)
  61. #define HCISETRAW       _IOW('H', 220, int)
  62. #define HCISETSCAN      _IOW('H', 221, int)
  63. #define HCISETAUTH      _IOW('H', 222, int)
  64. #define HCISETENCRYPT   _IOW('H', 223, int)
  65. #define HCISETPTYPE     _IOW('H', 224, int)
  66. #define HCISETLINKPOL   _IOW('H', 225, int)
  67. #define HCISETLINKMODE  _IOW('H', 226, int)
  68. #define HCISETACLMTU    _IOW('H', 227, int)
  69. #define HCISETSCOMTU    _IOW('H', 228, int)
  70. #define HCIINQUIRY      _IOR('H', 240, int)
  71. /* HCI timeouts */
  72. #define HCI_CONN_TIMEOUT  (HZ * 40)
  73. #define HCI_DISCONN_TIMEOUT  (HZ * 2)
  74. #define HCI_CONN_IDLE_TIMEOUT (HZ * 60)
  75. /* HCI Packet types */
  76. #define HCI_COMMAND_PKT 0x01
  77. #define HCI_ACLDATA_PKT  0x02
  78. #define HCI_SCODATA_PKT  0x03
  79. #define HCI_EVENT_PKT 0x04
  80. #define HCI_UNKNOWN_PKT 0xff
  81. /* HCI Packet types */
  82. #define HCI_DM1  0x0008
  83. #define HCI_DM3  0x0400
  84. #define HCI_DM5  0x4000
  85. #define HCI_DH1  0x0010
  86. #define HCI_DH3  0x0800
  87. #define HCI_DH5  0x8000
  88. #define HCI_HV1 0x0020
  89. #define HCI_HV2 0x0040
  90. #define HCI_HV3 0x0080
  91. #define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
  92. #define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
  93. /* ACL flags */
  94. #define ACL_CONT 0x01
  95. #define ACL_START 0x02
  96. #define ACL_ACTIVE_BCAST 0x04
  97. #define ACL_PICO_BCAST 0x08
  98. /* Baseband links */
  99. #define SCO_LINK 0x00
  100. #define ACL_LINK 0x01
  101. /* LMP features */
  102. #define LMP_3SLOT 0x01
  103. #define LMP_5SLOT 0x02
  104. #define LMP_ENCRYPT 0x04
  105. #define LMP_SOFFSET 0x08
  106. #define LMP_TACCURACY 0x10
  107. #define LMP_RSWITCH 0x20
  108. #define LMP_HOLD 0x40
  109. #define LMP_SNIF 0x80
  110. #define LMP_PARK 0x01
  111. #define LMP_RSSI 0x02
  112. #define LMP_QUALITY 0x04
  113. #define LMP_SCO 0x08
  114. #define LMP_HV2 0x10
  115. #define LMP_HV3 0x20
  116. #define LMP_ULAW 0x40
  117. #define LMP_ALAW 0x80
  118. #define LMP_CVSD 0x01
  119. #define LMP_PSCHEME 0x02
  120. #define LMP_PCONTROL 0x04
  121. /* Link policies */
  122. #define HCI_LP_RSWITCH 0x0001
  123. #define HCI_LP_HOLD 0x0002
  124. #define HCI_LP_SNIFF 0x0004
  125. #define HCI_LP_PARK 0x0008
  126. /* Link mode */
  127. #define HCI_LM_ACCEPT 0x8000
  128. #define HCI_LM_MASTER 0x0001
  129. #define HCI_LM_AUTH 0x0002
  130. #define HCI_LM_ENCRYPT 0x0004
  131. #define HCI_LM_TRUSTED 0x0008
  132. /* -----  HCI Commands ----- */
  133. /* OGF & OCF values */
  134. /* Informational Parameters */
  135. #define OGF_INFO_PARAM 0x04
  136. #define OCF_READ_LOCAL_VERSION 0x0001
  137. typedef struct {
  138. __u8  status;
  139. __u8  hci_ver;
  140. __u16 hci_rev;
  141. __u8  lmp_ver;
  142. __u16 manufacturer;
  143. __u16 lmp_subver;
  144. } __attribute__ ((packed)) read_local_version_rp;
  145. #define READ_LOCAL_VERSION_RP_SIZE 9
  146. #define OCF_READ_LOCAL_FEATURES 0x0003
  147. typedef struct {
  148. __u8 status;
  149. __u8 features[8];
  150. } __attribute__ ((packed)) read_local_features_rp;
  151. #define OCF_READ_BUFFER_SIZE 0x0005
  152. typedef struct {
  153. __u8  status;
  154. __u16  acl_mtu;
  155. __u8  sco_mtu;
  156. __u16  acl_max_pkt;
  157. __u16 sco_max_pkt;
  158. } __attribute__ ((packed)) read_buffer_size_rp;
  159. #define OCF_READ_BD_ADDR 0x0009
  160. typedef struct {
  161. __u8 status;
  162. bdaddr_t bdaddr;
  163. } __attribute__ ((packed)) read_bd_addr_rp;
  164. /* Host Controller and Baseband */
  165. #define OGF_HOST_CTL 0x03
  166. #define OCF_RESET 0x0003
  167. #define OCF_READ_AUTH_ENABLE 0x001F
  168. #define OCF_WRITE_AUTH_ENABLE 0x0020
  169. #define AUTH_DISABLED 0x00
  170. #define AUTH_ENABLED 0x01
  171. #define OCF_READ_ENCRYPT_MODE 0x0021
  172. #define OCF_WRITE_ENCRYPT_MODE 0x0022
  173. #define ENCRYPT_DISABLED 0x00
  174. #define ENCRYPT_P2P 0x01
  175. #define ENCRYPT_BOTH 0x02
  176. #define OCF_WRITE_CA_TIMEOUT   0x0016
  177. #define OCF_WRITE_PG_TIMEOUT   0x0018
  178. #define OCF_WRITE_SCAN_ENABLE  0x001A
  179. #define SCAN_DISABLED 0x00
  180. #define SCAN_INQUIRY 0x01
  181. #define SCAN_PAGE 0x02
  182. #define OCF_SET_EVENT_FLT 0x0005
  183. typedef struct {
  184. __u8  flt_type;
  185. __u8  cond_type;
  186. __u8  condition[0];
  187. } __attribute__ ((packed)) set_event_flt_cp;
  188. #define SET_EVENT_FLT_CP_SIZE 2
  189. /* Filter types */
  190. #define FLT_CLEAR_ALL 0x00
  191. #define FLT_INQ_RESULT 0x01
  192. #define FLT_CONN_SETUP 0x02
  193. /* CONN_SETUP Condition types */
  194. #define CONN_SETUP_ALLOW_ALL 0x00
  195. #define CONN_SETUP_ALLOW_CLASS 0x01
  196. #define CONN_SETUP_ALLOW_BDADDR 0x02
  197. /* CONN_SETUP Conditions */
  198. #define CONN_SETUP_AUTO_OFF 0x01
  199. #define CONN_SETUP_AUTO_ON 0x02
  200. #define OCF_CHANGE_LOCAL_NAME 0x0013
  201. typedef struct {
  202. __u8  name[248];
  203. } __attribute__ ((packed)) change_local_name_cp;
  204. #define CHANGE_LOCAL_NAME_CP_SIZE 248 
  205. #define OCF_READ_LOCAL_NAME 0x0014
  206. typedef struct {
  207. __u8 status;
  208. __u8  name[248];
  209. } __attribute__ ((packed)) read_local_name_rp;
  210. #define READ_LOCAL_NAME_RP_SIZE 249 
  211. #define OCF_READ_CLASS_OF_DEV 0x0023
  212. typedef struct {
  213. __u8 status;
  214. __u8  dev_class[3];
  215. } __attribute__ ((packed)) read_class_of_dev_rp;
  216. #define READ_CLASS_OF_DEV_RP_SIZE 4 
  217. #define OCF_WRITE_CLASS_OF_DEV 0x0024
  218. typedef struct {
  219. __u8  dev_class[3];
  220. } __attribute__ ((packed)) write_class_of_dev_cp;
  221. #define WRITE_CLASS_OF_DEV_CP_SIZE 3
  222. #define OCF_HOST_BUFFER_SIZE 0x0033
  223. typedef struct {
  224. __u16  acl_mtu;
  225. __u8  sco_mtu;
  226. __u16  acl_max_pkt;
  227. __u16 sco_max_pkt;
  228. } __attribute__ ((packed)) host_buffer_size_cp;
  229. #define HOST_BUFFER_SIZE_CP_SIZE 7
  230. /* Link Control */
  231. #define OGF_LINK_CTL 0x01 
  232. #define OCF_CREATE_CONN 0x0005
  233. typedef struct {
  234. bdaddr_t bdaddr;
  235. __u16  pkt_type;
  236. __u8  pscan_rep_mode;
  237. __u8  pscan_mode;
  238. __u16  clock_offset;
  239. __u8  role_switch;
  240. } __attribute__ ((packed)) create_conn_cp;
  241. #define CREATE_CONN_CP_SIZE 13
  242. #define OCF_ACCEPT_CONN_REQ 0x0009
  243. typedef struct {
  244. bdaddr_t bdaddr;
  245. __u8  role;
  246. } __attribute__ ((packed)) accept_conn_req_cp;
  247. #define ACCEPT_CONN_REQ_CP_SIZE 7
  248. #define OCF_REJECT_CONN_REQ 0x000a
  249. typedef struct {
  250. bdaddr_t bdaddr;
  251. __u8  reason;
  252. } __attribute__ ((packed)) reject_conn_req_cp;
  253. #define REJECT_CONN_REQ_CP_SIZE 7
  254. #define OCF_DISCONNECT 0x0006
  255. typedef struct {
  256. __u16  handle;
  257. __u8  reason;
  258. } __attribute__ ((packed)) disconnect_cp;
  259. #define DISCONNECT_CP_SIZE 3
  260. #define OCF_ADD_SCO 0x0007
  261. typedef struct {
  262. __u16  handle;
  263. __u16  pkt_type;
  264. } __attribute__ ((packed)) add_sco_cp;
  265. #define ADD_SCO_CP_SIZE 4
  266. #define OCF_INQUIRY 0x0001
  267. typedef struct {
  268. __u8  lap[3];
  269. __u8  length;
  270. __u8 num_rsp;
  271. } __attribute__ ((packed)) inquiry_cp;
  272. #define INQUIRY_CP_SIZE 5
  273. typedef struct {
  274. __u8     status;
  275. bdaddr_t bdaddr;
  276. } __attribute__ ((packed)) status_bdaddr_rp;
  277. #define STATUS_BDADDR_RP_SIZE 7
  278. #define OCF_LINK_KEY_REPLY 0x000B
  279. #define OCF_LINK_KEY_NEG_REPLY 0x000C
  280. typedef struct {
  281. bdaddr_t bdaddr;
  282. __u8     link_key[16];
  283. } __attribute__ ((packed)) link_key_reply_cp;
  284. #define LINK_KEY_REPLY_CP_SIZE 22
  285. #define OCF_PIN_CODE_REPLY 0x000D
  286. #define OCF_PIN_CODE_NEG_REPLY 0x000E
  287. typedef struct {
  288. bdaddr_t bdaddr;
  289. __u8  pin_len;
  290. __u8  pin_code[16];
  291. } __attribute__ ((packed)) pin_code_reply_cp;
  292. #define PIN_CODE_REPLY_CP_SIZE 23
  293. #define OCF_CHANGE_CONN_PTYPE 0x000F
  294. typedef struct {
  295. __u16  handle;
  296. __u16  pkt_type;
  297. } __attribute__ ((packed)) change_conn_ptype_cp;
  298. #define CHANGE_CONN_PTYPE_CP_SIZE 4
  299. #define OCF_AUTH_REQUESTED 0x0011
  300. typedef struct {
  301. __u16  handle;
  302. } __attribute__ ((packed)) auth_requested_cp;
  303. #define AUTH_REQUESTED_CP_SIZE 2
  304. #define OCF_SET_CONN_ENCRYPT 0x0013
  305. typedef struct {
  306. __u16  handle;
  307. __u8  encrypt;
  308. } __attribute__ ((packed)) set_conn_encrypt_cp;
  309. #define SET_CONN_ENCRYPT_CP_SIZE 3
  310. #define OCF_REMOTE_NAME_REQ 0x0019
  311. typedef struct {
  312. bdaddr_t bdaddr;
  313. __u8     pscan_rep_mode;
  314. __u8     pscan_mode;
  315. __u16    clock_offset;
  316. } __attribute__ ((packed)) remote_name_req_cp;
  317. #define REMOTE_NAME_REQ_CP_SIZE 10
  318. #define OCF_READ_REMOTE_FEATURES 0x001B
  319. typedef struct {
  320. __u16   handle;
  321. } __attribute__ ((packed)) read_remote_features_cp;
  322. #define READ_REMOTE_FEATURES_CP_SIZE 2
  323. #define OCF_READ_REMOTE_VERSION 0x001D
  324. typedef struct {
  325. __u16   handle;
  326. } __attribute__ ((packed)) read_remote_version_cp;
  327. #define READ_REMOTE_VERSION_CP_SIZE 2
  328. /* Link Policy */
  329. #define OGF_LINK_POLICY  0x02   
  330. #define OCF_ROLE_DISCOVERY 0x0009
  331. typedef struct {
  332. __u16 handle;
  333. } __attribute__ ((packed)) role_discovery_cp;
  334. #define ROLE_DISCOVERY_CP_SIZE 2
  335. typedef struct {
  336. __u8    status;
  337. __u16 handle;
  338. __u8    role;
  339. } __attribute__ ((packed)) role_discovery_rp;
  340. #define ROLE_DISCOVERY_RP_SIZE 4
  341. #define OCF_READ_LINK_POLICY 0x000C
  342. typedef struct {
  343. __u16 handle;
  344. } __attribute__ ((packed)) read_link_policy_cp;
  345. #define READ_LINK_POLICY_CP_SIZE 2
  346. typedef struct {
  347. __u8    status;
  348. __u16 handle;
  349. __u16   policy;
  350. } __attribute__ ((packed)) read_link_policy_rp;
  351. #define READ_LINK_POLICY_RP_SIZE 5
  352. #define OCF_SWITCH_ROLE 0x000B
  353. typedef struct {
  354. bdaddr_t bdaddr;
  355. __u8     role;
  356. } __attribute__ ((packed)) switch_role_cp;
  357. #define SWITCH_ROLE_CP_SIZE 7
  358. #define OCF_WRITE_LINK_POLICY 0x000D
  359. typedef struct {
  360. __u16 handle;
  361. __u16   policy;
  362. } __attribute__ ((packed)) write_link_policy_cp;
  363. #define WRITE_LINK_POLICY_CP_SIZE 4
  364. typedef struct {
  365. __u8    status;
  366. __u16 handle;
  367. } __attribute__ ((packed)) write_link_policy_rp;
  368. #define WRITE_LINK_POLICY_RP_SIZE 3
  369. /* Status params */
  370. #define OGF_STATUS_PARAM  0x05
  371. /* ---- HCI Events ---- */
  372. #define EVT_INQUIRY_COMPLETE  0x01
  373. #define EVT_INQUIRY_RESULT  0x02
  374. typedef struct {
  375. bdaddr_t bdaddr;
  376. __u8 pscan_rep_mode;
  377. __u8 pscan_period_mode;
  378. __u8 pscan_mode;
  379. __u8 dev_class[3];
  380. __u16 clock_offset;
  381. } __attribute__ ((packed)) inquiry_info;
  382. #define INQUIRY_INFO_SIZE 14
  383. #define EVT_CONN_COMPLETE  0x03
  384. typedef struct {
  385. __u8 status;
  386. __u16 handle;
  387. bdaddr_t bdaddr;
  388. __u8 link_type;
  389. __u8 encr_mode;
  390. } __attribute__ ((packed)) evt_conn_complete;
  391. #define EVT_CONN_COMPLETE_SIZE 13
  392. #define EVT_CONN_REQUEST 0x04
  393. typedef struct {
  394. bdaddr_t  bdaddr;
  395. __u8  dev_class[3];
  396. __u8 link_type;
  397. } __attribute__ ((packed)) evt_conn_request;
  398. #define EVT_CONN_REQUEST_SIZE 10
  399. #define EVT_DISCONN_COMPLETE 0x05
  400. typedef struct {
  401. __u8  status;
  402. __u16  handle;
  403. __u8  reason;
  404. } __attribute__ ((packed)) evt_disconn_complete;
  405. #define EVT_DISCONN_COMPLETE_SIZE 4
  406. #define EVT_AUTH_COMPLETE 0x06
  407. typedef struct {
  408. __u8  status;
  409. __u16  handle;
  410. } __attribute__ ((packed)) evt_auth_complete;
  411. #define EVT_AUTH_COMPLETE_SIZE 3
  412. #define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
  413. typedef struct {
  414. __u8   status;
  415. bdaddr_t bdaddr;
  416. __u8   name[248];
  417. } __attribute__ ((packed)) evt_remote_name_req_complete;
  418. #define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
  419. #define EVT_ENCRYPT_CHANGE 0x08
  420. typedef struct {
  421. __u8  status;
  422. __u16  handle;
  423. __u8 encrypt;
  424. } __attribute__ ((packed)) evt_encrypt_change;
  425. #define EVT_ENCRYPT_CHANGE_SIZE 5
  426. #define EVT_QOS_SETUP_COMPLETE 0x0D
  427. typedef struct {
  428. __u8 service_type;
  429. __u32 token_rate;
  430. __u32 peak_bandwidth;
  431. __u32 latency;
  432. __u32 delay_variation;
  433. } __attribute__ ((packed)) hci_qos;
  434. typedef struct {
  435. __u8 status;
  436. __u16 handle;
  437. hci_qos qos;
  438. } __attribute__ ((packed)) evt_qos_setup_complete;
  439. #define EVT_QOS_SETUP_COMPLETE_SIZE 20
  440. #define EVT_CMD_COMPLETE  0x0e
  441. typedef struct {
  442. __u8  ncmd;
  443. __u16  opcode;
  444. } __attribute__ ((packed)) evt_cmd_complete;
  445. #define EVT_CMD_COMPLETE_SIZE 3
  446. #define EVT_CMD_STATUS  0x0f
  447. typedef struct {
  448. __u8  status;
  449. __u8  ncmd;
  450. __u16  opcode;
  451. } __attribute__ ((packed)) evt_cmd_status;
  452. #define EVT_CMD_STATUS_SIZE 4
  453. #define EVT_NUM_COMP_PKTS 0x13
  454. typedef struct {
  455. __u8  num_hndl;
  456. /* variable length part */
  457. } __attribute__ ((packed)) evt_num_comp_pkts;
  458. #define EVT_NUM_COMP_PKTS_SIZE 1
  459. #define EVT_ROLE_CHANGE 0x12
  460. typedef struct {
  461. __u8   status;
  462. bdaddr_t bdaddr;
  463. __u8     role;
  464. } __attribute__ ((packed)) evt_role_change;
  465. #define EVT_ROLE_CHANGE_SIZE 1
  466. #define EVT_PIN_CODE_REQ        0x16
  467. typedef struct {
  468. bdaddr_t bdaddr;
  469. } __attribute__ ((packed)) evt_pin_code_req;
  470. #define EVT_PIN_CODE_REQ_SIZE 6
  471. #define EVT_LINK_KEY_REQ        0x17
  472. typedef struct {
  473. bdaddr_t bdaddr;
  474. } __attribute__ ((packed)) evt_link_key_req;
  475. #define EVT_LINK_KEY_REQ_SIZE 6
  476. #define EVT_LINK_KEY_NOTIFY 0x18
  477. typedef struct {
  478. bdaddr_t bdaddr;
  479. __u8  link_key[16];
  480. __u8  key_type;
  481. } __attribute__ ((packed)) evt_link_key_notify;
  482. #define EVT_LINK_KEY_NOTIFY_SIZE 23
  483. #define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
  484. typedef struct {
  485. __u8    status;
  486. __u16   handle;
  487. __u8    features[8];
  488. } __attribute__ ((packed)) evt_read_remote_features_complete;
  489. #define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
  490. #define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
  491. typedef struct {
  492. __u8    status;
  493. __u16   handle;
  494. __u8    lmp_ver;
  495. __u16   manufacturer;
  496. __u16   lmp_subver;
  497. } __attribute__ ((packed)) evt_read_remote_version_complete;
  498. #define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
  499. /* Internal events generated by BlueZ stack */
  500. #define EVT_STACK_INTERNAL 0xfd
  501. typedef struct {
  502. __u16   type;
  503. __u8  data[0];
  504. } __attribute__ ((packed)) evt_stack_internal;
  505. #define EVT_STACK_INTERNAL_SIZE 2
  506. #define EVT_SI_DEVICE   0x01
  507. typedef struct {
  508. __u16   event;
  509. __u16  dev_id;
  510. } __attribute__ ((packed)) evt_si_device;
  511. #define EVT_SI_DEVICE_SIZE 4
  512. #define EVT_SI_SECURITY 0x02
  513. typedef struct {
  514. __u16  event;
  515. __u16   proto;
  516. __u16   subproto;
  517. __u8    incomming;
  518. } __attribute__ ((packed)) evt_si_security;
  519. /* --------  HCI Packet structures  -------- */
  520. #define HCI_TYPE_LEN 1
  521. typedef struct {
  522. __u16  opcode; /* OCF & OGF */
  523. __u8  plen;
  524. } __attribute__ ((packed)) hci_command_hdr;
  525. #define HCI_COMMAND_HDR_SIZE  3
  526. typedef struct {
  527. __u8  evt;
  528. __u8  plen;
  529. } __attribute__ ((packed)) hci_event_hdr;
  530. #define HCI_EVENT_HDR_SIZE  2
  531. typedef struct {
  532. __u16  handle; /* Handle & Flags(PB, BC) */
  533. __u16  dlen;
  534. } __attribute__ ((packed)) hci_acl_hdr;
  535. #define HCI_ACL_HDR_SIZE  4
  536. typedef struct {
  537. __u16  handle;
  538. __u8  dlen;
  539. } __attribute__ ((packed)) hci_sco_hdr;
  540. #define HCI_SCO_HDR_SIZE  3
  541. /* Command opcode pack/unpack */
  542. #define cmd_opcode_pack(ogf, ocf) (__u16)((ocf & 0x03ff)|(ogf << 10))
  543. #define cmd_opcode_ogf(op) (op >> 10)
  544. #define cmd_opcode_ocf(op) (op & 0x03ff)
  545. /* ACL handle and flags pack/unpack */
  546. #define acl_handle_pack(h, f) (__u16)((h & 0x0fff)|(f << 12))
  547. #define acl_handle(h) (h & 0x0fff)
  548. #define acl_flags(h) (h >> 12)
  549. /* HCI Socket options */
  550. #define HCI_DATA_DIR 1
  551. #define HCI_FILTER 2
  552. #define HCI_TIME_STAMP 3
  553. /* HCI CMSG flags */
  554. #define HCI_CMSG_DIR 0x0001
  555. #define HCI_CMSG_TSTAMP 0x0002
  556. struct sockaddr_hci {
  557. sa_family_t    hci_family;
  558. unsigned short hci_dev;
  559. };
  560. #define HCI_DEV_NONE 0xffff
  561. struct hci_filter {
  562. __u32 type_mask;
  563. __u32 event_mask[2];
  564. __u16 opcode;
  565. };
  566. #define HCI_FLT_TYPE_BITS 31
  567. #define HCI_FLT_EVENT_BITS 63
  568. #define HCI_FLT_OGF_BITS 63
  569. #define HCI_FLT_OCF_BITS 127
  570. #if BITS_PER_LONG == 64
  571. static inline void hci_set_bit(int nr, void *addr)
  572. {
  573. *((__u32 *) addr + (nr >> 5)) |= ((__u32) 1 << (nr & 31));
  574. }
  575. static inline int hci_test_bit(int nr, void *addr)
  576. {
  577. return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
  578. }
  579. #else
  580. #define hci_set_bit set_bit
  581. #define hci_test_bit test_bit
  582. #endif
  583. /* Ioctl requests structures */
  584. struct hci_dev_stats {
  585. __u32 err_rx;
  586. __u32 err_tx;
  587. __u32 cmd_tx;
  588. __u32 evt_rx;
  589. __u32 acl_tx;
  590. __u32 acl_rx;
  591. __u32 sco_tx;
  592. __u32 sco_rx;
  593. __u32 byte_rx;
  594. __u32 byte_tx;
  595. };
  596. struct hci_dev_info {
  597. __u16 dev_id;
  598. char  name[8];
  599. bdaddr_t bdaddr;
  600. __u32 flags;
  601. __u8  type;
  602. __u8  features[8];
  603. __u32 pkt_type;
  604. __u32 link_policy;
  605. __u32 link_mode;
  606. __u16 acl_mtu;
  607. __u16 acl_pkts;
  608. __u16 sco_mtu;
  609. __u16 sco_pkts;
  610. struct hci_dev_stats stat;
  611. };
  612. struct hci_conn_info {
  613. __u16    handle;
  614. bdaddr_t bdaddr;
  615. __u8  type;
  616. __u8  out;
  617. __u16  state;
  618. __u32  link_mode;
  619. };
  620. struct hci_dev_req {
  621. __u16 dev_id;
  622. __u32 dev_opt;
  623. };
  624. struct hci_dev_list_req {
  625. __u16  dev_num;
  626. struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
  627. };
  628. struct hci_conn_list_req {
  629. __u16  dev_id;
  630. __u16  conn_num;
  631. struct hci_conn_info conn_info[0];
  632. };
  633. struct hci_conn_info_req {
  634. bdaddr_t bdaddr;
  635. __u8     type;
  636. struct   hci_conn_info conn_info[0];
  637. };
  638. struct hci_inquiry_req {
  639. __u16 dev_id;
  640. __u16 flags;
  641. __u8  lap[3];
  642. __u8  length;
  643. __u8  num_rsp;
  644. };
  645. #define IREQ_CACHE_FLUSH 0x0001
  646. struct hci_remotename_req {
  647. __u16 dev_id;
  648. __u16 flags;
  649. bdaddr_t bdaddr;
  650. __u8  name[248];
  651. };
  652. #endif /* __HCI_H */