蓝牙HCI剖析(三)

来源:互联网 发布:python sql写入变量 编辑:程序博客网 时间:2024/05/21 06:16

HCI源码:

bt_hci.h

[cpp] view plain copy
  1. /* 
  2. * This file is part of the HCI protocal. 
  3. * Data  :20160506 
  4. * Author: zhongjun 
  5. * 
  6. */  
  7.   
  8. #ifndef BT_HCI_H_H  
  9. #define BT_HCI_H_H  
  10.   
  11. #include "bt_cfg.h"  
  12.   
  13. #ifdef DEBUG_BT_HCI  
  14. #define DEBUG(x) {printf x;}  
  15. #define BT_HCI_DEBUG(x) DEBUG(x)  
  16. #else  
  17. #define BT_HCI_DEBUG(x)   
  18. #endif  
  19.   
  20. #define TRANSPORT_UART  
  21. #define TRANSPORT_USBx  
  22. #define TRANSPORT_SDIOx  
  23.   
  24. #define SCAN_DISABLED       0x00  
  25. #define SCAN_INQUIRY        0x01  
  26. #define SCAN_PAGE       0x02  
  27.   
  28. /* ACL flags */  
  29. #define ACL_CONT        0x01  
  30. #define ACL_START       0x02  
  31. #define ACL_ACTIVE_BCAST    0x04  
  32. #define ACL_PICO_BCAST      0x08  
  33.   
  34. /* CMD/EVT/ACL/SCO types */  
  35. #define HCI_COMMAND_PKT     0x01  
  36. #define HCI_ACLDATA_PKT     0x02  
  37. #define HCI_SCODATA_PKT     0x03  
  38. #define HCI_EVENT_PKT       0x04  
  39. #define HCI_VENDOR_PKT      0xff  
  40.   
  41. /* HCI Packet types */  
  42. #define HCI_2DH1    0x0002  
  43. #define HCI_3DH1    0x0004  
  44. #define HCI_DM1     0x0008  
  45. #define HCI_DH1     0x0010  
  46. #define HCI_2DH3    0x0100  
  47. #define HCI_3DH3    0x0200  
  48. #define HCI_DM3     0x0400  
  49. #define HCI_DH3     0x0800  
  50. #define HCI_2DH5    0x1000  
  51. #define HCI_3DH5    0x2000  
  52. #define HCI_DM5     0x4000  
  53. #define HCI_DH5     0x8000  
  54.   
  55. #define HCI_HV1     0x0020  
  56. #define HCI_HV2     0x0040  
  57. #define HCI_HV3     0x0080  
  58.   
  59. #define HCI_EV3     0x0008  
  60. #define HCI_EV4     0x0010  
  61. #define HCI_EV5     0x0020  
  62. #define HCI_2EV3    0x0040  
  63. #define HCI_3EV3    0x0080  
  64. #define HCI_2EV5    0x0100  
  65. #define HCI_3EV5    0x0200  
  66.   
  67. /* HCI Error codes */  
  68. #define HCI_UNKNOWN_COMMAND         0x01  
  69. #define HCI_NO_CONNECTION           0x02  
  70. #define HCI_HARDWARE_FAILURE            0x03  
  71. #define HCI_PAGE_TIMEOUT            0x04  
  72. #define HCI_AUTHENTICATION_FAILURE      0x05  
  73. #define HCI_PIN_OR_KEY_MISSING          0x06  
  74. #define HCI_MEMORY_FULL             0x07  
  75. #define HCI_CONNECTION_TIMEOUT          0x08  
  76. #define HCI_MAX_NUMBER_OF_CONNECTIONS       0x09  
  77. #define HCI_MAX_NUMBER_OF_SCO_CONNECTIONS   0x0a  
  78. #define HCI_ACL_CONNECTION_EXISTS       0x0b  
  79. #define HCI_COMMAND_DISALLOWED          0x0c  
  80. #define HCI_REJECTED_LIMITED_RESOURCES      0x0d  
  81. #define HCI_REJECTED_SECURITY           0x0e  
  82. #define HCI_REJECTED_PERSONAL           0x0f  
  83. #define HCI_HOST_TIMEOUT            0x10  
  84. #define HCI_UNSUPPORTED_FEATURE         0x11  
  85. #define HCI_INVALID_PARAMETERS          0x12  
  86. #define HCI_OE_USER_ENDED_CONNECTION        0x13  
  87. #define HCI_OE_LOW_RESOURCES            0x14  
  88. #define HCI_OE_POWER_OFF            0x15  
  89. #define HCI_CONNECTION_TERMINATED       0x16  
  90. #define HCI_REPEATED_ATTEMPTS           0x17  
  91. #define HCI_PAIRING_NOT_ALLOWED         0x18  
  92. #define HCI_UNKNOWN_LMP_PDU         0x19  
  93. #define HCI_UNSUPPORTED_REMOTE_FEATURE      0x1a  
  94. #define HCI_SCO_OFFSET_REJECTED         0x1b  
  95. #define HCI_SCO_INTERVAL_REJECTED       0x1c  
  96. #define HCI_AIR_MODE_REJECTED           0x1d  
  97. #define HCI_INVALID_LMP_PARAMETERS      0x1e  
  98. #define HCI_UNSPECIFIED_ERROR           0x1f  
  99. #define HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20  
  100. #define HCI_ROLE_CHANGE_NOT_ALLOWED     0x21  
  101. #define HCI_LMP_RESPONSE_TIMEOUT        0x22  
  102. #define HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23  
  103. #define HCI_LMP_PDU_NOT_ALLOWED         0x24  
  104. #define HCI_ENCRYPTION_MODE_NOT_ACCEPTED    0x25  
  105. #define HCI_UNIT_LINK_KEY_USED          0x26  
  106. #define HCI_QOS_NOT_SUPPORTED           0x27  
  107. #define HCI_INSTANT_PASSED          0x28  
  108. #define HCI_PAIRING_NOT_SUPPORTED       0x29  
  109. #define HCI_TRANSACTION_COLLISION       0x2a  
  110. #define HCI_QOS_UNACCEPTABLE_PARAMETER      0x2c  
  111. #define HCI_QOS_REJECTED            0x2d  
  112. #define HCI_CLASSIFICATION_NOT_SUPPORTED    0x2e  
  113. #define HCI_INSUFFICIENT_SECURITY       0x2f  
  114. #define HCI_PARAMETER_OUT_OF_RANGE      0x30  
  115. #define HCI_ROLE_SWITCH_PENDING         0x32  
  116. #define HCI_SLOT_VIOLATION          0x34  
  117. #define HCI_ROLE_SWITCH_FAILED          0x35  
  118. #define HCI_EIR_TOO_LARGE           0x36  
  119. #define HCI_SIMPLE_PAIRING_NOT_SUPPORTED    0x37  
  120. #define HCI_HOST_BUSY_PAIRING           0x38  
  121.   
  122. /* Command opcode pack/unpack */  
  123. #define cmd_opcode_pack(ogf, ocf)   (uint16_t)((ocf & 0x03ff)|(ogf << 10))  
  124. #define cmd_opcode_ogf(op)      (op >> 10)  
  125. #define cmd_opcode_ocf(op)      (op & 0x03ff)  
  126. /* ACL handle and flags pack/unpack */  
  127. #define acl_handle_pack(h, f)   (uint16_t)((h & 0x0fff)|(f << 12))  
  128. #define acl_get_handle(h)       (h & 0x0fff)  
  129. #define acl_get_flags(h)        (h >> 12)  
  130.   
  131.   
  132. /* -----  HCI Commands ----- */  
  133. /* Link Control */  
  134. #define OGF_LINK_CTL        0x01  
  135. #define OCF_INQUIRY         0x0001  
  136. #define OCF_INQUIRY_CANCEL      0x0002  
  137. #define OCF_PERIODIC_INQUIRY        0x0003  
  138. #define OCF_EXIT_PERIODIC_INQUIRY   0x0004  
  139. #define OCF_CREATE_CONN         0x0005  
  140. #define OCF_DISCONNECT          0x0006  
  141. #define OCF_ADD_SCO         0x0007  
  142. #define OCF_CREATE_CONN_CANCEL      0x0008  
  143. #define OCF_ACCEPT_CONN_REQ     0x0009  
  144. #define OCF_REJECT_CONN_REQ     0x000A  
  145. #define OCF_LINK_KEY_REPLY      0x000B  
  146. #define OCF_LINK_KEY_NEG_REPLY      0x000C  
  147. #define OCF_PIN_CODE_REPLY      0x000D  
  148. #define OCF_PIN_CODE_NEG_REPLY      0x000E  
  149. #define OCF_SET_CONN_PTYPE      0x000F  
  150. #define OCF_AUTH_REQUESTED      0x0011  
  151. #define OCF_SET_CONN_ENCRYPT        0x0013  
  152. #define OCF_CHANGE_CONN_LINK_KEY    0x0015  
  153. #define OCF_MASTER_LINK_KEY     0x0017  
  154. #define OCF_REMOTE_NAME_REQ     0x0019  
  155. #define OCF_REMOTE_NAME_REQ_CANCEL  0x001A  
  156. #define OCF_READ_REMOTE_FEATURES    0x001B  
  157. #define OCF_READ_REMOTE_EXT_FEATURES    0x001C  
  158. #define OCF_READ_REMOTE_VERSION     0x001D  
  159. #define OCF_READ_CLOCK_OFFSET       0x001F  
  160. #define OCF_READ_LMP_HANDLE     0x0020  
  161. #define OCF_SETUP_SYNC_CONN     0x0028  
  162. #define OCF_ACCEPT_SYNC_CONN_REQ    0x0029  
  163. #define OCF_REJECT_SYNC_CONN_REQ    0x002A  
  164. #define OCF_IO_CAPABILITY_REPLY     0x002B  
  165. #define OCF_USER_CONFIRM_REPLY      0x002C  
  166. #define OCF_USER_CONFIRM_NEG_REPLY  0x002D  
  167. #define OCF_USER_PASSKEY_REPLY      0x002E  
  168. #define OCF_USER_PASSKEY_NEG_REPLY  0x002F  
  169. #define OCF_REMOTE_OOB_DATA_REPLY   0x0030  
  170. #define OCF_REMOTE_OOB_DATA_NEG_REPLY   0x0033  
  171. #define OCF_IO_CAPABILITY_NEG_REPLY 0x0034  
  172.   
  173. /* Link Policy */  
  174. #define OGF_LINK_POLICY     0x02  
  175. #define OCF_HOLD_MODE           0x0001  
  176. #define OCF_SNIFF_MODE          0x0003  
  177. #define OCF_EXIT_SNIFF_MODE     0x0004  
  178. #define OCF_PARK_MODE           0x0005  
  179. #define OCF_EXIT_PARK_MODE      0x0006  
  180. #define OCF_QOS_SETUP           0x0007  
  181. #define OCF_ROLE_DISCOVERY      0x0009  
  182. #define OCF_SWITCH_ROLE         0x000B  
  183. #define OCF_READ_LINK_POLICY        0x000C  
  184. #define OCF_WRITE_LINK_POLICY       0x000D  
  185. #define OCF_READ_DEFAULT_LINK_POLICY    0x000E  
  186. #define OCF_WRITE_DEFAULT_LINK_POLICY   0x000F  
  187. #define OCF_FLOW_SPECIFICATION      0x0010  
  188. #define OCF_SNIFF_SUBRATING     0x0011  
  189.   
  190. /* Host Controller and Baseband */  
  191. #define OGF_HOST_CTL        0x03  
  192. #define OCF_SET_EVENT_MASK      0x0001  
  193. #define OCF_RESET           0x0003  
  194. #define OCF_SET_EVENT_FLT       0x0005  
  195. #define OCF_FLUSH           0x0008  
  196. #define OCF_READ_PIN_TYPE       0x0009  
  197. #define OCF_WRITE_PIN_TYPE      0x000A  
  198. #define OCF_CREATE_NEW_UNIT_KEY     0x000B  
  199. #define OCF_READ_STORED_LINK_KEY    0x000D  
  200. #define OCF_WRITE_STORED_LINK_KEY   0x0011  
  201. #define OCF_DELETE_STORED_LINK_KEY  0x0012  
  202. #define OCF_CHANGE_LOCAL_NAME       0x0013  
  203. #define OCF_READ_LOCAL_NAME     0x0014  
  204. #define OCF_READ_CONN_ACCEPT_TIMEOUT    0x0015  
  205. #define OCF_WRITE_CONN_ACCEPT_TIMEOUT   0x0016  
  206. #define OCF_READ_PAGE_TIMEOUT       0x0017  
  207. #define OCF_WRITE_PAGE_TIMEOUT      0x0018  
  208. #define OCF_READ_SCAN_ENABLE        0x0019  
  209. #define OCF_WRITE_SCAN_ENABLE       0x001A  
  210. #define OCF_READ_PAGE_ACTIVITY      0x001B  
  211. #define OCF_WRITE_PAGE_ACTIVITY     0x001C  
  212. #define OCF_READ_INQ_ACTIVITY       0x001D  
  213. #define OCF_WRITE_INQ_ACTIVITY      0x001E  
  214. #define OCF_READ_AUTH_ENABLE        0x001F  
  215. #define OCF_WRITE_AUTH_ENABLE       0x0020  
  216. #define OCF_READ_ENCRYPT_MODE       0x0021  
  217. #define OCF_WRITE_ENCRYPT_MODE      0x0022  
  218. #define OCF_READ_CLASS_OF_DEV       0x0023  
  219. #define OCF_WRITE_CLASS_OF_DEV      0x0024  
  220. #define OCF_READ_VOICE_SETTING      0x0025  
  221. #define OCF_WRITE_VOICE_SETTING     0x0026  
  222. #define OCF_READ_AUTOMATIC_FLUSH_TIMEOUT    0x0027  
  223. #define OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT   0x0028  
  224. #define OCF_READ_NUM_BROADCAST_RETRANS  0x0029  
  225. #define OCF_WRITE_NUM_BROADCAST_RETRANS 0x002A  
  226. #define OCF_READ_HOLD_MODE_ACTIVITY 0x002B  
  227. #define OCF_WRITE_HOLD_MODE_ACTIVITY    0x002C  
  228. #define OCF_READ_TRANSMIT_POWER_LEVEL   0x002D  
  229. #define OCF_READ_SYNC_FLOW_ENABLE   0x002E  
  230. #define OCF_WRITE_SYNC_FLOW_ENABLE  0x002F  
  231. #define OCF_SET_CONTROLLER_TO_HOST_FC   0x0031  
  232. #define OCF_HOST_BUFFER_SIZE        0x0033  
  233. #define OCF_HOST_NUM_COMP_PKTS      0x0035  
  234. #define OCF_READ_LINK_SUPERVISION_TIMEOUT   0x0036  
  235. #define OCF_WRITE_LINK_SUPERVISION_TIMEOUT  0x0037  
  236. #define OCF_READ_NUM_SUPPORTED_IAC  0x0038  
  237. #define OCF_READ_CURRENT_IAC_LAP    0x0039  
  238. #define OCF_WRITE_CURRENT_IAC_LAP   0x003A  
  239. #define OCF_READ_PAGE_SCAN_PERIOD_MODE  0x003B  
  240. #define OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C  
  241. #define OCF_READ_PAGE_SCAN_MODE     0x003D  
  242. #define OCF_WRITE_PAGE_SCAN_MODE    0x003E  
  243. #define OCF_SET_AFH_CLASSIFICATION  0x003F  
  244. #define OCF_READ_INQUIRY_SCAN_TYPE  0x0042  
  245. #define OCF_WRITE_INQUIRY_SCAN_TYPE 0x0043  
  246. #define OCF_READ_INQUIRY_MODE       0x0044  
  247. #define OCF_WRITE_INQUIRY_MODE      0x0045  
  248. #define OCF_READ_PAGE_SCAN_TYPE     0x0046  
  249. #define OCF_WRITE_PAGE_SCAN_TYPE    0x0047  
  250. #define OCF_READ_AFH_MODE       0x0048  
  251. #define OCF_WRITE_AFH_MODE      0x0049  
  252. #define OCF_READ_EXT_INQUIRY_RESPONSE   0x0051  
  253. #define OCF_WRITE_EXT_INQUIRY_RESPONSE  0x0052  
  254. #define OCF_REFRESH_ENCRYPTION_KEY  0x0053  
  255. #define OCF_READ_SIMPLE_PAIRING_MODE    0x0055  
  256. #define OCF_WRITE_SIMPLE_PAIRING_MODE   0x0056  
  257. #define OCF_READ_LOCAL_OOB_DATA     0x0057  
  258. #define OCF_READ_INQUIRY_TRANSMIT_POWER_LEVEL   0x0058  
  259. #define OCF_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL  0x0059  
  260. #define OCF_READ_DEFAULT_ERROR_DATA_REPORTING   0x005A  
  261. #define OCF_WRITE_DEFAULT_ERROR_DATA_REPORTING  0x005B  
  262. #define OCF_ENHANCED_FLUSH      0x005F  
  263. #define OCF_SEND_KEYPRESS_NOTIFY    0x0060  
  264.   
  265. /* Informational Parameters */  
  266. #define OGF_INFO_PARAM      0x04  
  267. #define OCF_READ_LOCAL_VERSION      0x0001  
  268. #define OCF_READ_LOCAL_COMMANDS     0x0002  
  269. #define OCF_READ_LOCAL_FEATURES     0x0003  
  270. #define OCF_READ_LOCAL_EXT_FEATURES 0x0004  
  271. #define OCF_READ_BUFFER_SIZE        0x0005  
  272. #define OCF_READ_COUNTRY_CODE       0x0007  
  273. #define OCF_READ_BD_ADDR        0x0009  
  274.   
  275. /* Status params */  
  276. #define OGF_STATUS_PARAM    0x05  
  277. #define OCF_READ_FAILED_CONTACT_COUNTER     0x0001  
  278. #define OCF_RESET_FAILED_CONTACT_COUNTER    0x0002  
  279. #define OCF_READ_LINK_QUALITY       0x0003  
  280. #define OCF_READ_RSSI           0x0005  
  281. #define OCF_READ_AFH_MAP        0x0006  
  282. #define OCF_READ_CLOCK          0x0007  
  283.   
  284. /* Testing commands */  
  285. #define OGF_TESTING_CMD     0x06  
  286. #define OCF_READ_LOOPBACK_MODE          0x0001  
  287. #define OCF_WRITE_LOOPBACK_MODE         0x0002  
  288. #define OCF_ENABLE_DEVICE_UNDER_TEST_MODE   0x0003  
  289. #define OCF_WRITE_SIMPLE_PAIRING_DEBUG_MODE 0x0004  
  290.   
  291. /* Vendor specific commands */  
  292. #define OGF_VENDOR_CMD      0x3f  
  293.   
  294.   
  295. /* ---- HCI Events ---- */  
  296.   
  297. #define EVT_INQUIRY_COMPLETE        0x01  
  298. #define EVT_INQUIRY_RESULT      0x02  
  299. #define EVT_CONN_COMPLETE       0x03  
  300. #define EVT_CONN_REQUEST        0x04  
  301. #define EVT_DISCONN_COMPLETE        0x05  
  302. #define EVT_AUTH_COMPLETE       0x06  
  303. #define EVT_REMOTE_NAME_REQ_COMPLETE    0x07  
  304. #define EVT_ENCRYPT_CHANGE      0x08  
  305. #define EVT_CHANGE_CONN_LINK_KEY_COMPLETE   0x09  
  306. #define EVT_MASTER_LINK_KEY_COMPLETE        0x0A  
  307. #define EVT_READ_REMOTE_FEATURES_COMPLETE   0x0B  
  308. #define EVT_READ_REMOTE_VERSION_COMPLETE    0x0C  
  309. #define EVT_QOS_SETUP_COMPLETE      0x0D  
  310. #define EVT_CMD_COMPLETE        0x0E  
  311. #define EVT_CMD_STATUS          0x0F  
  312. #define EVT_HARDWARE_ERROR      0x10  
  313. #define EVT_FLUSH_OCCURRED      0x11  
  314. #define EVT_ROLE_CHANGE         0x12  
  315. #define EVT_NUM_COMP_PKTS       0x13  
  316. #define EVT_MODE_CHANGE         0x14  
  317. #define EVT_RETURN_LINK_KEYS        0x15  
  318. #define EVT_PIN_CODE_REQ        0x16  
  319. #define EVT_LINK_KEY_REQ        0x17  
  320. #define EVT_LINK_KEY_NOTIFY     0x18  
  321. #define EVT_LOOPBACK_COMMAND        0x19  
  322. #define EVT_DATA_BUFFER_OVERFLOW    0x1A  
  323. #define EVT_MAX_SLOTS_CHANGE        0x1B  
  324. #define EVT_READ_CLOCK_OFFSET_COMPLETE  0x1C  
  325. #define EVT_CONN_PTYPE_CHANGED      0x1D  
  326. #define EVT_QOS_VIOLATION       0x1E  
  327. #define EVT_PSCAN_REP_MODE_CHANGE   0x20  
  328. #define EVT_FLOW_SPEC_COMPLETE      0x21  
  329. #define EVT_INQUIRY_RESULT_WITH_RSSI    0x22  
  330. #define EVT_READ_REMOTE_EXT_FEATURES_COMPLETE   0x23  
  331. #define EVT_SYNC_CONN_COMPLETE      0x2C  
  332. #define EVT_SYNC_CONN_CHANGED       0x2D  
  333. #define EVT_SNIFF_SUBRATING     0x2E  
  334. #define EVT_EXTENDED_INQUIRY_RESULT 0x2F  
  335. #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30  
  336. #define EVT_IO_CAPABILITY_REQUEST   0x31  
  337. #define EVT_IO_CAPABILITY_RESPONSE  0x32  
  338. #define EVT_USER_CONFIRM_REQUEST    0x33  
  339. #define EVT_USER_PASSKEY_REQUEST    0x34  
  340. #define EVT_REMOTE_OOB_DATA_REQUEST 0x35  
  341. #define EVT_SIMPLE_PAIRING_COMPLETE 0x36  
  342. #define EVT_LINK_SUPERVISION_TIMEOUT_CHANGED    0x38  
  343. #define EVT_ENHANCED_FLUSH_COMPLETE 0x39  
  344. #define EVT_USER_PASSKEY_NOTIFY     0x3B  
  345. #define EVT_KEYPRESS_NOTIFY     0x3C  
  346. #define EVT_REMOTE_HOST_FEATURES_NOTIFY 0x3D  
  347.   
  348. #define HCI_COMMAND_HDR_SIZE 3  
  349. #define HCI_EVENT_HDR_SIZE 3  
  350. #define HCI_ACL_HDR_SIZE 4  
  351. #define HCI_SCO_HDR_SIZE 3  
  352. #pragma pack(1)  
  353. /*PDU HDR*/  
  354. typedef struct  
  355. {  
  356.   uint16_t opcode;  
  357.   uint8_t para_total_len;  
  358. }HCI_Command_HDR_Format;  
  359.   
  360. typedef struct  
  361. {  
  362.   uint8_t evecode;  
  363.   uint8_t para_total_len;  
  364. }HCI_Event_HDR_Format;  
  365.   
  366. typedef struct {  
  367.   uint16_t handle;      /* Handle & Flags(PB, BC) */  
  368.   uint16_t dlen;  
  369. }HCI_ACL_HDR_Format;  
  370.   
  371. typedef struct {  
  372.  uint16_t handle;  
  373.  uint8_t dlen;  
  374. }HCI_SCO_HDR_Format;  
  375.   
  376. /*DEATIL COMMAND PDU FORMAT*/  
  377. /* Link Control */  
  378. typedef struct  
  379. {  
  380.   HCI_Command_HDR_Format HDR;  
  381.   uint8_t lap[3];  
  382.   uint8_t inquiry_time;  
  383.   uint8_t num_limit;  
  384. }COM_Inquiay_Format;  
  385.   
  386. typedef struct  
  387. {  
  388.   HCI_Command_HDR_Format HDR;  
  389.   uint8_t BD_ADDR[6];  
  390.   uint16_t pkt_type;  
  391.   uint8_t pscan_rep_mode;  
  392.   uint8_t reserved;  
  393.   uint16_t clock_offset;  
  394.   uint8_t role_switch;  
  395. }COM_Create_Connect_Format;  
  396.   
  397. typedef struct  
  398. {  
  399.   HCI_Command_HDR_Format HDR;  
  400.   uint16_t con_handle;  
  401.   uint8_t reason;  
  402. }COM_Disconnect_Format;  
  403. /* Link Policy */  
  404. /* Host Controller and Baseband */  
  405. typedef struct  
  406. {  
  407.   HCI_Command_HDR_Format HDR;  
  408. }COM_Reset_Format;  
  409.   
  410. typedef struct   
  411. {  
  412.   uint8_t status;  
  413. }Reset_rsp_Format;  
  414.   
  415. typedef struct  
  416. {  
  417.   HCI_Command_HDR_Format HDR;  
  418.   uint8_t scan_enable;  
  419. }COM_Write_Scan_Enable_Format;  
  420.   
  421. typedef struct   
  422. {  
  423.   uint8_t status;  
  424. }Write_Scan_Enable_rsp_Format;  
  425. /* Informational Parameters */  
  426. typedef struct  
  427. {  
  428.   HCI_Command_HDR_Format HDR;  
  429. }COM_Read_Buffer_Size_Format;  
  430.   
  431. typedef struct  
  432. {  
  433.   uint8_t status;  
  434.   uint16_t acl_mtu;  
  435.   uint8_t sco_mtu;  
  436.   uint16_t acl_max_pkt;  
  437.   uint16_t sco_max_pkt;  
  438. }Read_Buffer_Size_rsp_Format;  
  439.   
  440. typedef struct  
  441. {  
  442.   HCI_Command_HDR_Format HDR;  
  443. }COM_Read_BD_ADDR_Format;  
  444.   
  445. typedef struct  
  446. {  
  447.   uint8_t status;  
  448.   uint8_t BD_ADDR[6];  
  449. }Read_BD_ADDR_rsp_Format;  
  450. /* Status params */  
  451. /* Testing commands */  
  452. /* Vendor specific commands */  
  453. /* Vendor specific commands */  
  454.   
  455. /*DEATIL EVENT PDU FORMAT*/  
  456. typedef struct {  
  457.   HCI_Event_HDR_Format HDR;  
  458.   uint8_t ncmd;  
  459.   uint16_t opcode;  
  460. }EVT_Com_Complete_HDR_Format;  
  461.   
  462. typedef struct {  
  463.   HCI_Event_HDR_Format HDR;  
  464.   uint8_t status;  
  465.   uint8_t ncmd;  
  466.   uint16_t opcode;  
  467. }EVT_CMD_Status_Format;  
  468.   
  469. typedef struct {  
  470.   HCI_Event_HDR_Format HDR;  
  471.   uint8_t ncmd;  
  472.   uint8_t bdaddr[6];  
  473.   uint8_t page_scan_mode;  
  474.   uint8_t reserved[2];  
  475.   uint8_t dev_class[3];  
  476.   uint16_t clock_offset;  
  477. }EVT_CMD_Inquiry_result_Format;  
  478.   
  479. typedef struct {  
  480.   HCI_Event_HDR_Format HDR;  
  481.   uint8_t status;  
  482.   uint16_t con_handle;  
  483.   uint8_t bdaddr[6];  
  484.   uint8_t link_type;  
  485.   uint8_t encryption_enabled;  
  486. }EVT_CMD_Connect_complete_Format;  
  487.   
  488. typedef struct {  
  489.   HCI_Event_HDR_Format HDR;  
  490.   uint8_t status;  
  491.   uint16_t con_handle;  
  492.   uint8_t reason;  
  493. }EVT_CMD_Disconnect_complete_Format;  
  494.   
  495. typedef struct {  
  496.   HCI_Event_HDR_Format HDR;  
  497.   uint8_t status;  
  498. }EVT_CMD_Inquiry_complete_Format;  
  499.   
  500.   
  501. #pragma pack ()  
  502.   
  503. /*HCI API*/  
  504. int hci_reset();  
  505. int hci_read_buffer_size();  
  506. int hci_write_scan_enable(uint8_t scan_enable);  
  507. int hci_read_bd_addr();  
  508. int hci_connect_req(uint8_t BD_ADDR[6],uint16_t pkt_type,uint8_t pscan_rep_mode,uint8_t allow_role_switch);  
  509. int hci_disconnect(uint16_t con_handle,uint8_t reason);  
  510. int hci_inquiry(uint8_t lap[3],uint8_t inquiry_time,uint8_t num_limit);  
  511. int hci_send_acl_data(uint16_t handle,uint8_t *acl_data,uint16_t acl_length);  
  512. int hci_send_cmd(uint8_t *PDU,uint32_t length);  
  513.   
  514. int hci_receive_pdu(uint8_t *PDU,uint32_t length);  
  515. int hci_parse_cmd(uint8_t *PDU,uint32_t length);  
  516. int hci_parse_evt(uint8_t *PDU,uint32_t length);  
  517. int hci_parse_acl(uint8_t *PDU,uint32_t length);  
  518. int hci_parse_sco(uint8_t *PDU,uint32_t length);  
  519. int hci_parse_evt_complete(uint8_t *PDU,uint32_t length);  
  520. int hci_parse_evt_cmd_status(uint8_t *PDU,uint32_t length);  
  521. int hci_parse_evt_inquiry_result(uint8_t *PDU,uint32_t length);  
  522. int hci_parse_evt_inquiry_complete(uint8_t *PDU,uint32_t length);  
  523. int hci_parse_evt_connect_complete(uint8_t *PDU,uint32_t length);  
  524. int hci_parse_evt_disconnect_complete(uint8_t *PDU,uint32_t length);  
  525. int hci_parse_reset_rsp(uint8_t *PDU,uint32_t length);  
  526. int hci_parse_read_buffer_size_rsp(uint8_t *PDU,uint32_t length);  
  527. int hci_parse_write_scan_enable_rsp(uint8_t *PDU,uint32_t length);  
  528. int hci_parse_read_BD_ADDR_rsp(uint8_t *PDU,uint32_t length);  
  529. #endif  

bt_hci.c

[cpp] view plain copy
  1. #include "bt_hci.h"  
  2.   
  3. int hci_reset()  
  4. {  
  5.   COM_Reset_Format PDU;  
  6.   PDU.HDR.opcode = cmd_opcode_pack(OGF_HOST_CTL,OCF_RESET);  
  7.   PDU.HDR.para_total_len = sizeof(COM_Reset_Format) - HCI_COMMAND_HDR_SIZE;  
  8.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Reset_Format));  
  9. }  
  10. int hci_read_buffer_size()  
  11. {  
  12.   COM_Read_Buffer_Size_Format PDU;  
  13.   PDU.HDR.opcode = cmd_opcode_pack(OGF_INFO_PARAM,OCF_READ_BUFFER_SIZE);  
  14.   PDU.HDR.para_total_len = sizeof(COM_Read_Buffer_Size_Format) - HCI_COMMAND_HDR_SIZE;  
  15.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Read_Buffer_Size_Format));  
  16. }  
  17. int hci_write_scan_enable(uint8_t scan_enable)  
  18. {  
  19.   COM_Write_Scan_Enable_Format PDU;  
  20.   PDU.HDR.opcode = cmd_opcode_pack(OGF_HOST_CTL,OCF_WRITE_SCAN_ENABLE);  
  21.   PDU.HDR.para_total_len = sizeof(COM_Write_Scan_Enable_Format) - HCI_COMMAND_HDR_SIZE;  
  22.   PDU.scan_enable = scan_enable;  
  23.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Write_Scan_Enable_Format));  
  24. }  
  25. int hci_read_bd_addr()  
  26. {  
  27.   COM_Read_BD_ADDR_Format PDU;  
  28.   PDU.HDR.opcode = cmd_opcode_pack(OGF_INFO_PARAM,OCF_READ_BD_ADDR);  
  29.   PDU.HDR.para_total_len = sizeof(COM_Read_BD_ADDR_Format) - HCI_COMMAND_HDR_SIZE;  
  30.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Read_BD_ADDR_Format));  
  31. }  
  32. int hci_connect_req(uint8_t BD_ADDR[6],uint16_t pkt_type,uint8_t pscan_rep_mode,uint8_t allow_role_switch)  
  33. {  
  34.   COM_Create_Connect_Format PDU;  
  35.   PDU.HDR.opcode = cmd_opcode_pack(OGF_LINK_CTL,OCF_CREATE_CONN);  
  36.   PDU.HDR.para_total_len = sizeof(COM_Create_Connect_Format) - HCI_COMMAND_HDR_SIZE;  
  37.   memcpy(PDU.BD_ADDR,BD_ADDR,6);  
  38.   PDU.pkt_type = pkt_type;  
  39.   PDU.pscan_rep_mode = pscan_rep_mode;  
  40.   PDU.reserved = 0;  
  41.   PDU.clock_offset = 0;  
  42.   PDU.role_switch = allow_role_switch;  
  43.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Create_Connect_Format));   
  44. }  
  45. int hci_disconnect(uint16_t con_handle,uint8_t reason)  
  46. {  
  47.   COM_Disconnect_Format PDU;  
  48.   PDU.HDR.opcode = cmd_opcode_pack(OGF_LINK_CTL,OCF_DISCONNECT);  
  49.   PDU.HDR.para_total_len = sizeof(COM_Disconnect_Format) - HCI_COMMAND_HDR_SIZE;  
  50.   PDU.con_handle = con_handle;  
  51.   PDU.reason = reason;  
  52.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Disconnect_Format));   
  53. }  
  54. int hci_inquiry(uint8_t lap[3],uint8_t inquiry_time,uint8_t num_limit)  
  55. {  
  56.   COM_Inquiay_Format PDU;  
  57.   PDU.HDR.opcode = cmd_opcode_pack(OGF_LINK_CTL,OCF_INQUIRY);  
  58.   PDU.HDR.para_total_len = sizeof(COM_Inquiay_Format) - HCI_COMMAND_HDR_SIZE;  
  59.   memcpy(PDU.lap,lap,3);  
  60.   PDU.inquiry_time = inquiry_time;  
  61.   PDU.num_limit = num_limit;  
  62.   hci_send_cmd((uint8_t *)&PDU,sizeof(COM_Inquiay_Format));  
  63. }  
  64. int hci_send_acl_data(uint16_t handle,uint8_t *acl_data,uint16_t acl_length)  
  65. {  
  66.     
  67. }  
  68. int hci_send_cmd(uint8_t *PDU,uint32_t length)  
  69. {  
  70.   int index = 0;  
  71. #if defined(TRANSPORT_UART)  
  72.   uint8_t HCI_PDU[length+1];  
  73.   HCI_PDU[0] = HCI_COMMAND_PKT;  
  74.   memcpy(HCI_PDU+1,PDU,length);  
  75.     
  76.   BT_HCI_DEBUG((">> SEDN HCI COMMAND:"));  
  77.   for(index = 0;index < length+1;index++)  
  78.   {  
  79.     BT_HCI_DEBUG(("0x%x ",HCI_PDU[index]));  
  80.   }  
  81.   BT_HCI_DEBUG(("\n"));  
  82.     
  83.   //NEED TO DO PASS THE DATA TO UART PORT  
  84. #elif defined(TRANSPORT_USB)  
  85.   //TODO  
  86. #elif defined(TRANSPORT_SDIO)  
  87.   //TODO  
  88. #endif  
  89. }  
  90.   
  91. int hci_receive_pdu(uint8_t *PDU,uint32_t length)  
  92. {  
  93. #if defined(TRANSPORT_UART)  
  94.   uint8_t pck_type = *PDU;  
  95.   switch(pck_type)  
  96.   {  
  97.     case HCI_COMMAND_PKT:  
  98.     {  
  99.       BT_HCI_DEBUG(("<< COMMAND:"));  
  100.       hci_parse_cmd(PDU+1,length-1);  
  101.       break;  
  102.     }  
  103.     case HCI_ACLDATA_PKT:  
  104.     {  
  105.       BT_HCI_DEBUG(("<< ACL:"));  
  106.       hci_parse_acl(PDU+1,length-1);  
  107.       break;  
  108.     }  
  109.     case HCI_SCODATA_PKT:  
  110.     {  
  111.       BT_HCI_DEBUG(("<< SCO:"));  
  112.       hci_parse_sco(PDU+1,length-1);  
  113.       break;  
  114.     }  
  115.     case HCI_EVENT_PKT:  
  116.     {  
  117.       BT_HCI_DEBUG(("<< HCI_EVENT_PKT:"));  
  118.       hci_parse_evt(PDU+1,length-1);  
  119.       break;  
  120.     }  
  121.     default:  
  122.     {  
  123.       BT_HCI_DEBUG(("WARNING:UNKNOW PDU\n"));  
  124.       break;  
  125.     }  
  126.   }  
  127. #elif defined(TRANSPORT_USB)  
  128.       
  129.   //TODO  
  130. #elif defined(TRANSPORT_SDIO)  
  131.   //TODO  
  132. #endif    
  133. }  
  134.   
  135. int hci_parse_cmd(uint8_t *PDU,uint32_t length)  
  136. {  
  137.   HCI_Command_HDR_Format *COM_PDU = (HCI_Command_HDR_Format *)PDU;  
  138. }  
  139. int hci_parse_evt(uint8_t *PDU,uint32_t length)  
  140. {  
  141.   HCI_Event_HDR_Format *EVT_PDU = (HCI_Event_HDR_Format *)PDU;  
  142.   switch(EVT_PDU->evecode)  
  143.   {  
  144.     case EVT_CMD_COMPLETE:  
  145.     {  
  146.       BT_HCI_DEBUG(("EVT_CMD_COMPLETE "));  
  147.       hci_parse_evt_complete(PDU,length);  
  148.       break;  
  149.     }  
  150.     case EVT_CMD_STATUS:  
  151.     {  
  152.       BT_HCI_DEBUG(("EVT_CMD_STATUS \n"));  
  153.       hci_parse_evt_cmd_status(PDU,length);  
  154.       break;  
  155.     }  
  156.     case EVT_INQUIRY_RESULT:  
  157.     {  
  158.       BT_HCI_DEBUG(("EVT_INQUIRY_RESULT"));  
  159.       hci_parse_evt_inquiry_result(PDU,length);  
  160.       break;  
  161.     }  
  162.     case EVT_INQUIRY_COMPLETE:  
  163.     {  
  164.       BT_HCI_DEBUG(("EVT_INQUIRY_COMPLETE"));  
  165.       hci_parse_evt_inquiry_complete(PDU,length);  
  166.       break;  
  167.     }  
  168.     case EVT_CONN_COMPLETE:  
  169.     {  
  170.       BT_HCI_DEBUG(("EVT_CONN_COMPLETE"));  
  171.       hci_parse_evt_connect_complete(PDU,length);  
  172.       break;  
  173.     }  
  174.     case EVT_DISCONN_COMPLETE:  
  175.     {  
  176.       BT_HCI_DEBUG(("EVT_DISCONN_COMPLETE"));  
  177.       hci_parse_evt_disconnect_complete(PDU,length);  
  178.       break;  
  179.     }  
  180.     default:  
  181.     {  
  182.       int index = 0;  
  183.       BT_HCI_DEBUG(("UNKNOW EVENT:"));  
  184.       for(index = 0;index < length;index++)  
  185.       {  
  186.     BT_HCI_DEBUG(("0x%02x ",PDU[index]));  
  187.       }  
  188.       BT_HCI_DEBUG(("\n"));  
  189.       break;  
  190.     }  
  191.   }  
  192. }  
  193. int hci_parse_acl(uint8_t *PDU,uint32_t length)  
  194. {  
  195.   HCI_ACL_HDR_Format *ACL_PDU = (HCI_ACL_HDR_Format *)PDU;  
  196. }  
  197. int hci_parse_sco(uint8_t *PDU,uint32_t length)  
  198. {  
  199.   HCI_SCO_HDR_Format *SCO_PDU = (HCI_SCO_HDR_Format *)PDU;  
  200. }  
  201. int hci_parse_evt_complete(uint8_t *PDU,uint32_t length)  
  202. {  
  203.   EVT_Com_Complete_HDR_Format *EVT_PDU = (EVT_Com_Complete_HDR_Format*)PDU;  
  204.   switch(cmd_opcode_ogf(EVT_PDU->opcode))  
  205.   {  
  206.     case OGF_LINK_CTL:  
  207.     {  
  208.       BT_HCI_DEBUG(("OGF_LINK_CTL\n"));  
  209.       break;  
  210.     }  
  211.     case OGF_LINK_POLICY:  
  212.     {  
  213.       BT_HCI_DEBUG(("OGF_LINK_POLICY\n"));  
  214.       break;  
  215.     }  
  216.     case OGF_HOST_CTL:  
  217.     {  
  218.       BT_HCI_DEBUG(("OGF_HOST_CTL\n"));  
  219.       switch(cmd_opcode_ocf(EVT_PDU->opcode))  
  220.       {  
  221.     case OCF_RESET:  
  222.     {  
  223.       hci_parse_reset_rsp((uint8_t *)EVT_PDU+sizeof(EVT_Com_Complete_HDR_Format),length-sizeof(EVT_Com_Complete_HDR_Format));  
  224.       break;  
  225.     }  
  226.     case OCF_WRITE_SCAN_ENABLE:  
  227.     {  
  228.       hci_parse_write_scan_enable_rsp((uint8_t *)EVT_PDU+sizeof(EVT_Com_Complete_HDR_Format),length-sizeof(EVT_Com_Complete_HDR_Format));  
  229.     }  
  230.     default:  
  231.     {  
  232.       break;  
  233.     }  
  234.       }  
  235.       break;  
  236.     }  
  237.     case OGF_INFO_PARAM:  
  238.     {  
  239.       BT_HCI_DEBUG(("OGF_INFO_PARAM\n"));  
  240.       switch(cmd_opcode_ocf(EVT_PDU->opcode))  
  241.       {  
  242.     case OCF_READ_BUFFER_SIZE:  
  243.     {  
  244.       hci_parse_read_buffer_size_rsp((uint8_t *)EVT_PDU+sizeof(EVT_Com_Complete_HDR_Format),length-sizeof(EVT_Com_Complete_HDR_Format));  
  245.       break;  
  246.     }  
  247.     case OCF_READ_BD_ADDR:  
  248.     {  
  249.       hci_parse_read_BD_ADDR_rsp((uint8_t *)EVT_PDU+sizeof(EVT_Com_Complete_HDR_Format),length-sizeof(EVT_Com_Complete_HDR_Format));  
  250.     }  
  251.     default:  
  252.     {  
  253.       break;  
  254.     }  
  255.       }  
  256.       break;  
  257.     }  
  258.     case OGF_STATUS_PARAM:  
  259.     {  
  260.       BT_HCI_DEBUG(("OGF_STATUS_PARAM\n"));  
  261.       break;  
  262.     }  
  263.     case OGF_TESTING_CMD:  
  264.     {  
  265.       BT_HCI_DEBUG(("OGF_TESTING_CMD\n"));  
  266.       break;  
  267.     }  
  268.     case OGF_VENDOR_CMD:  
  269.     {  
  270.       BT_HCI_DEBUG(("OGF_VENDOR_CMD\n"));  
  271.       break;  
  272.     }  
  273.     default:  
  274.     {  
  275.       break;  
  276.     }  
  277.   }  
  278.      
  279. }  
  280. int hci_parse_evt_cmd_status(uint8_t *PDU,uint32_t length)  
  281. {  
  282.   EVT_CMD_Status_Format *EVT_PDU = (EVT_CMD_Status_Format*)PDU;  
  283.     
  284. }  
  285. int hci_parse_evt_inquiry_result(uint8_t *PDU,uint32_t length)  
  286. {  
  287.   int index = 0;  
  288.   EVT_CMD_Inquiry_result_Format *EVT_PDU = (EVT_CMD_Inquiry_result_Format*)PDU;  
  289.   BT_HCI_DEBUG(("Inquiry rep num %d\n",EVT_PDU->ncmd));  
  290.   BT_HCI_DEBUG(("Inquiry ADDR:"));  
  291.   for(index = 0;index < 6;index++)  
  292.   {  
  293.     BT_HCI_DEBUG(("0x%02x ",EVT_PDU->bdaddr[index]));  
  294.   }  
  295.   BT_HCI_DEBUG(("\n"));  
  296.   BT_HCI_DEBUG(("Inquiry page_scan_mode %d\n",EVT_PDU->page_scan_mode));  
  297.   BT_HCI_DEBUG(("Inquiry COD:"));  
  298.   for(index = 0;index < 3;index++)  
  299.   {  
  300.     BT_HCI_DEBUG(("0x%02x ",EVT_PDU->dev_class[index]));  
  301.   }  
  302.   BT_HCI_DEBUG(("\n"));  
  303.   BT_HCI_DEBUG(("Inquiry clock_offset %d\n",EVT_PDU->clock_offset));  
  304. }  
  305. int hci_parse_evt_inquiry_complete(uint8_t *PDU,uint32_t length)  
  306. {  
  307.   EVT_CMD_Inquiry_complete_Format *EVT_PDU = (EVT_CMD_Inquiry_complete_Format *)PDU;  
  308.   BT_HCI_DEBUG(("status is %d\n",EVT_PDU->status));  
  309. }  
  310. int hci_parse_evt_connect_complete(uint8_t *PDU,uint32_t length)  
  311. {  
  312.   EVT_CMD_Connect_complete_Format *EVT_PDU = (EVT_CMD_Connect_complete_Format *)PDU;  
  313.   BT_HCI_DEBUG(("status is %d\n",EVT_PDU->status));  
  314.   BT_HCI_DEBUG(("con_handle is %d\n",EVT_PDU->con_handle));  
  315.   BT_HCI_DEBUG(("link_type is %d\n",EVT_PDU->link_type));  
  316. }  
  317. int hci_parse_evt_disconnect_complete(uint8_t *PDU,uint32_t length)  
  318. {  
  319.   EVT_CMD_Disconnect_complete_Format *EVT_PDU = (EVT_CMD_Disconnect_complete_Format *)PDU;  
  320.   BT_HCI_DEBUG(("status is %d\n",EVT_PDU->status));  
  321.   BT_HCI_DEBUG(("con_handle is %d\n",EVT_PDU->con_handle));  
  322.   BT_HCI_DEBUG(("reason is %d\n",EVT_PDU->reason));  
  323. }  
  324. int hci_parse_reset_rsp(uint8_t *PDU,uint32_t length)  
  325. {  
  326.   Reset_rsp_Format *RSP = (Reset_rsp_Format *)PDU;  
  327.   BT_HCI_DEBUG(("status is %d\n",RSP->status));  
  328. }  
  329. int hci_parse_read_buffer_size_rsp(uint8_t *PDU,uint32_t length)  
  330. {  
  331.   Read_Buffer_Size_rsp_Format *RSP = (Read_Buffer_Size_rsp_Format *)PDU;  
  332.   BT_HCI_DEBUG(("status is %d\n",RSP->status));  
  333.   BT_HCI_DEBUG(("acl_mtu is %d\n",RSP->acl_mtu));  
  334.   BT_HCI_DEBUG(("sco_mtu is %d\n",RSP->sco_mtu));  
  335.   BT_HCI_DEBUG(("acl_max_pkt is %d\n",RSP->acl_max_pkt));  
  336.   BT_HCI_DEBUG(("sco_max_pkt is %d\n",RSP->sco_max_pkt));  
  337. }  
  338. int hci_parse_write_scan_enable_rsp(uint8_t *PDU,uint32_t length)  
  339. {  
  340.   Write_Scan_Enable_rsp_Format *RSP = (Write_Scan_Enable_rsp_Format *)PDU;  
  341.   BT_HCI_DEBUG(("status is %d\n",RSP->status));  
  342. }  
  343. int hci_parse_read_BD_ADDR_rsp(uint8_t *PDU,uint32_t length)  
  344. {  
  345.   int index = 0;  
  346.   Read_BD_ADDR_rsp_Format *RSP = (Read_BD_ADDR_rsp_Format *)PDU;  
  347.   BT_HCI_DEBUG(("status is %d\n",RSP->status));  
  348.   BT_HCI_DEBUG(("ADDR:"));  
  349.   for(index = 0;index<6;index++)  
  350.   {  
  351.     BT_HCI_DEBUG(("0x%02x ",(RSP->BD_ADDR)[index]));  
  352.   }  
  353.   BT_HCI_DEBUG(("\n"));  
  354. }  

bt_cfg.h

[cpp] view plain copy
  1. #ifndef BT_HCI_CFG_H  
  2. #define BT_HCI_CFG_H  
  3.   
  4. #include <stdlib.h>  
  5. #include <stdio.h>  
  6. #include <string.h>  
  7.   
  8. #define DEBUG_BT_HCI  
  9.   
  10. typedef unsigned char uint8_t;  
  11. typedef unsigned short uint16_t;  
  12. typedef unsigned int uint32_t;  
  13. typedef unsigned long long uint64_t;  
  14.   
  15.   
  16. //typedef  char int8_t;  
  17. typedef  short int16_t;  
  18. typedef  int int32_t;  
  19. typedef long long int64_t;  
  20.   
  21. #undef NULL   
  22. #if defined(__cplusplus)  
  23. #define NULL 0  
  24. #else  
  25. #define NULL ((void *)0)  
  26. #endif  
  27.   
  28. #endif  

main.c

[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include "bt_hci.h"  
  3. #include "memory_pool.h"  
  4.   
  5. void HDR_PAR_UNPAR_Test()  
  6. {  
  7.   uint16_t Reset_opcode_2 = 0x0c03;   
  8.   uint16_t Read_Buffer_Size = 0x1005;  
  9.   uint16_t acl_header = 0x204d;  
  10.   uint16_t handle = 0x004d;  
  11.   uint8_t flag = ACL_START;  
  12.     
  13.   printf("COMMAND HDR SIZE is %d\n",sizeof(HCI_Command_HDR_Format));  
  14.   printf("EVENT HDR SIZE is %d\n",sizeof(HCI_Event_HDR_Format));  
  15.   printf("ACL HDR SIZE is %d\n",sizeof(HCI_ACL_HDR_Format));  
  16.   printf("SCO HDR SIZE is %d\n",sizeof(HCI_SCO_HDR_Format));  
  17.     
  18.   printf("OGF is %d\n",cmd_opcode_ogf(Read_Buffer_Size));  
  19.   printf("OCF is %d\n",cmd_opcode_ocf(Read_Buffer_Size));  
  20.   printf("Rset opcode is 0x%04x\n",cmd_opcode_pack(3,3));  
  21.     
  22.   printf("HANDLE is 0x%04x\n",acl_get_handle(acl_header));  
  23.   printf("FLAG is %d\n",acl_get_flags(acl_header));  
  24.   printf("ACL HDR is 0x%04x\n",acl_handle_pack(handle,flag));  
  25. }  
  26. int main()  
  27. {  
  28.   BT_HCI_DEBUG(("HCI START\n"));  
  29.   uint8_t BD_ADDR[6] = {0x1,0x1,0x1,0x1,0x1,0x1};  
  30.   uint8_t inquiry_access[3] = {0x9e,0x8b,0x33};  
  31.   uint8_t receive_reset_complete_evt[7] = {0x4,0xe,0x4,0x1,0x3,0xc,0x0};  
  32.   uint8_t receive_read_buffer_size_complete_evt[14] = {0x4,0xe,0xb,0x1,0x5,0x10,0x0,0x80,0x01,0x40,0x04,0x00,0x08,0x00};  
  33.   uint8_t receive_write_scan_enable_complete_evt[7] = {0x4,0xe,0x4,0x1,0x1a,0xc,0x0};  
  34.   uint8_t receive_read_BD_ADDR_complete_evt[13] = {0x04,0x0e,0x0a,0x1,0x9,0x10,0x00,0x4e,0xa8,0x00,0x4e,0x49,0x4a};  
  35.   uint8_t receive_cmd_status_evt_inquiry[7] = {0x4,0xf,0x4,0x0,0x1,0x1,0x4};  
  36.   uint8_t receive_inquiry_result_evt[18] = {0x4,0x2,0xf,0x1,0x1,0x01,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x1,0x52,0x2e,0x0,0x0};  
  37.   uint8_t receive_inquiry_complete_evt[4] = {0x4,0x1,0x1,0x0};  
  38.   uint8_t receive_cmd_status_evt_connect[7] = {0x4,0xf,0x4,0x0,0x1,0x5,0x4};  
  39.   uint8_t receive_create_connect_complete_evt[14] = {0x4,0x3,0xb,0x0,0x29,0x0,0x5f,0x21,0xa3,0x60,0x10,0x0,0x1,0x0};  
  40.   uint8_t receive_cmd_status_evt_disconnect[7] = {0x4,0xf,0x4,0x0,0x1,0x6,0x4};  
  41.   uint8_t receive_cmd_disconnect_complete_evt[7] = {0x4,0x5,0x4,0x0,0x29,0x0,0x16};  
  42.   HDR_PAR_UNPAR_Test();  
  43.     
  44.   /*HCI TEST*/  
  45.   hci_reset();  
  46.   hci_receive_pdu(receive_reset_complete_evt,sizeof(receive_reset_complete_evt));  
  47.     
  48.   hci_read_buffer_size();  
  49.   hci_receive_pdu(receive_read_buffer_size_complete_evt,sizeof(receive_read_buffer_size_complete_evt));  
  50.     
  51.   hci_write_scan_enable(SCAN_INQUIRY|SCAN_PAGE);  
  52.   hci_receive_pdu(receive_write_scan_enable_complete_evt,sizeof(receive_write_scan_enable_complete_evt));  
  53.     
  54.   hci_read_bd_addr();  
  55.   hci_receive_pdu(receive_read_BD_ADDR_complete_evt,sizeof(receive_read_BD_ADDR_complete_evt));  
  56.     
  57.   hci_inquiry(inquiry_access,6,1);  
  58.   hci_receive_pdu(receive_cmd_status_evt_inquiry,sizeof(receive_cmd_status_evt_inquiry));  
  59.   hci_receive_pdu(receive_inquiry_result_evt,sizeof(receive_inquiry_result_evt));  
  60.   hci_receive_pdu(receive_inquiry_complete_evt,sizeof(receive_inquiry_complete_evt));  
  61.     
  62.   hci_connect_req(BD_ADDR,HCI_DM5|HCI_DH5|HCI_DM3|HCI_DH3|HCI_DH1|HCI_DM1,0,0);  
  63.   hci_receive_pdu(receive_cmd_status_evt_connect,sizeof(receive_cmd_status_evt_connect));  
  64.   hci_receive_pdu(receive_create_connect_complete_evt,sizeof(receive_create_connect_complete_evt));  
  65.     
  66.   hci_disconnect(0x0029,0x13);  
  67.   hci_receive_pdu(receive_cmd_status_evt_disconnect,sizeof(receive_cmd_status_evt_disconnect));  
  68.   hci_receive_pdu(receive_cmd_disconnect_complete_evt,sizeof(receive_cmd_disconnect_complete_evt));  
  69. }  
原创粉丝点击