BLE shield

Fork of X_NUCLEO_IDB0XA1 by ST

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers hci_const.h Source File

hci_const.h

00001 /******************************************************************************
00002 *
00003 *  File Description 
00004 *  ---------------------
00005 * This file defines constants and functions for HCI layer.
00006 * See Bluetooth Core v 4.0, Vol. 2, Part E.
00007 * 
00008 *******************************************************************************/
00009 
00010 #ifndef __HCI_INTERNAL_H_
00011 #define __HCI_INTERNAL_H_
00012 
00013 #include "compiler.h"
00014 #include "hal_types.h"
00015 #include "clock.h"
00016 #include "link_layer.h"
00017 
00018 #include "hci.h"
00019 
00020 #define DEFAULT_TIMEOUT (CLOCK_SECOND/10)
00021 
00022 /**
00023  * Maximum payload of HCI commands that can be sent. Change this value if needed.
00024  * This value can be up to 255.
00025  */
00026 #define HCI_MAX_PAYLOAD_SIZE 128
00027 
00028 /* HCI Packet types */
00029 #define HCI_COMMAND_PKT     0x01
00030 #define HCI_ACLDATA_PKT     0x02
00031 #define HCI_SCODATA_PKT     0x03
00032 #define HCI_EVENT_PKT       0x04
00033 #define HCI_VENDOR_PKT      0xff
00034 
00035 typedef __packed struct _hci_uart_pckt{
00036   uint8_t type;
00037   uint8_t data[VARIABLE_SIZE];
00038 } PACKED hci_uart_pckt;
00039 #define HCI_HDR_SIZE 1
00040 
00041 typedef __packed struct _hci_command_hdr{
00042   uint16_t opcode;      /* OCF & OGF */
00043   uint8_t  plen;
00044 } PACKED hci_command_hdr;
00045 #define HCI_COMMAND_HDR_SIZE    3
00046 
00047 typedef __packed struct _hci_event_pckt{
00048   uint8_t evt;
00049   uint8_t plen;
00050   uint8_t data[VARIABLE_SIZE];
00051 } PACKED hci_event_pckt;
00052 #define HCI_EVENT_HDR_SIZE  2
00053 
00054 typedef __packed struct _hci_acl_hdr{
00055   uint16_t handle;      /* Handle & Flags(PB, BC) */
00056   uint16_t dlen;
00057 } PACKED hci_acl_hdr;
00058 #define HCI_ACL_HDR_SIZE    4
00059 
00060 /* Link Control */
00061 #define OGF_LINK_CTL            0x01
00062 
00063 #define OCF_DISCONNECT          0x0006
00064 typedef __packed struct _disconnect_cp{
00065   uint16_t handle;
00066   uint8_t  reason;
00067 } PACKED disconnect_cp;
00068 #define DISCONNECT_CP_SIZE      3
00069 
00070 /* Host Controller and Baseband */
00071 #define OGF_HOST_CTL            0x03
00072 
00073 #define OCF_SET_EVENT_MASK      0x0001
00074 #define OCF_RESET               0x0003
00075 
00076 #define OCF_READ_TRANSMIT_POWER_LEVEL   0x002D
00077 typedef __packed struct _read_transmit_power_level_cp{
00078   uint16_t handle;
00079   uint8_t  type;
00080 } PACKED read_transmit_power_level_cp;
00081 #define READ_TRANSMIT_POWER_LEVEL_CP_SIZE 3
00082 typedef __packed struct _read_transmit_power_level_rp{
00083   uint8_t  status;
00084   uint16_t handle;
00085   int8_t   level;
00086 } PACKED read_transmit_power_level_rp;
00087 #define READ_TRANSMIT_POWER_LEVEL_RP_SIZE 4
00088 
00089 #define OCF_SET_CONTROLLER_TO_HOST_FC   0x0031
00090 #define OCF_HOST_BUFFER_SIZE            0x0033
00091 #define OCF_HOST_NUM_COMP_PKTS          0x0035
00092 
00093 /* Informational Parameters */
00094 #define OGF_INFO_PARAM                  0x04
00095 
00096 #define OCF_READ_LOCAL_VERSION          0x0001
00097 typedef __packed struct _read_local_version_rp{
00098   uint8_t  status;
00099   uint8_t  hci_version;
00100   uint16_t hci_revision;
00101   uint8_t  lmp_pal_version;
00102   uint16_t manufacturer_name;
00103   uint16_t lmp_pal_subversion;
00104 } PACKED read_local_version_rp;
00105 #define READ_LOCAL_VERSION_RP_SIZE      9
00106 
00107 #define OCF_READ_LOCAL_COMMANDS         0x0002
00108 #define OCF_READ_LOCAL_FEATURES         0x0003
00109 
00110 #define OCF_READ_BD_ADDR                0x0009
00111 typedef __packed struct _read_bd_addr_rp{
00112   uint8_t status;
00113   tBDAddr bdaddr;
00114 } PACKED read_bd_addr_rp;
00115 #define READ_BD_ADDR_RP_SIZE            7
00116 
00117 /* Status params */
00118 #define OGF_STATUS_PARAM                0x05
00119 
00120 #define OCF_READ_RSSI                   0x0005
00121 typedef __packed struct _read_rssi_cp{
00122   uint16_t handle;
00123 } PACKED read_rssi_cp;
00124 #define READ_RSSI_CP_SIZE               2
00125 typedef __packed struct _read_rssi_rp{
00126   uint8_t  status;
00127   uint16_t handle;
00128   int8_t   rssi;
00129 } PACKED read_rssi_rp;
00130 #define READ_RSSI_RP_SIZE               4
00131 
00132 
00133 /* LE commands */
00134 #define OGF_LE_CTL                      0x08
00135 
00136 #define OCF_LE_SET_EVENT_MASK           0x0001
00137 typedef __packed struct _le_set_event_mask_cp{
00138   uint8_t mask[8];
00139 } PACKED le_set_event_mask_cp;
00140 #define LE_SET_EVENT_MASK_CP_SIZE       8
00141 
00142 #define OCF_LE_READ_BUFFER_SIZE         0x0002
00143 typedef __packed struct _le_read_buffer_size_rp{
00144   uint8_t  status;
00145   uint16_t pkt_len;
00146   uint8_t  max_pkt;
00147 } PACKED le_read_buffer_size_rp;
00148 #define LE_READ_BUFFER_SIZE_RP_SIZE     4
00149 
00150 #define OCF_LE_READ_LOCAL_SUPPORTED_FEATURES    0x0003
00151 typedef __packed struct _le_read_local_supported_features_rp{
00152   uint8_t status;
00153   uint8_t features[8];
00154 } PACKED le_read_local_supported_features_rp;
00155 #define LE_READ_LOCAL_SUPPORTED_FEATURES_RP_SIZE 9
00156 
00157 #define OCF_LE_SET_RANDOM_ADDRESS       0x0005
00158 typedef __packed struct _le_set_random_address_cp{
00159   tBDAddr bdaddr;
00160 } PACKED le_set_random_address_cp;
00161 #define LE_SET_RANDOM_ADDRESS_CP_SIZE 6
00162 
00163 #define OCF_LE_SET_ADV_PARAMETERS   0x0006
00164 typedef __packed struct _le_set_adv_parameters_cp{
00165   uint16_t min_interval;
00166   uint16_t max_interval;
00167   uint8_t  advtype;
00168   uint8_t  own_bdaddr_type;
00169   uint8_t  direct_bdaddr_type;
00170   tBDAddr  direct_bdaddr;
00171   uint8_t  chan_map;
00172   uint8_t  filter;
00173 } PACKED le_set_adv_parameters_cp;
00174 #define LE_SET_ADV_PARAMETERS_CP_SIZE 15
00175 
00176 #define OCF_LE_READ_ADV_CHANNEL_TX_POWER    0x0007
00177 typedef __packed struct _le_read_adv_channel_tx_power_rp{
00178   uint8_t status;
00179   int8_t  level;
00180 } PACKED le_read_adv_channel_tx_power_rp;
00181 #define LE_READ_ADV_CHANNEL_TX_POWER_RP_SIZE 2
00182 
00183 #define OCF_LE_SET_ADV_DATA     0x0008
00184 typedef __packed struct _le_set_adv_data_cp{
00185   uint8_t length;
00186   uint8_t data[31];
00187 } PACKED le_set_adv_data_cp;
00188 #define LE_SET_ADV_DATA_CP_SIZE 32
00189 
00190 #define OCF_LE_SET_SCAN_RESPONSE_DATA       0x0009
00191 typedef __packed struct _le_set_scan_response_data_cp{
00192   uint8_t length;
00193   uint8_t data[31];
00194 } PACKED le_set_scan_response_data_cp;
00195 #define LE_SET_SCAN_RESPONSE_DATA_CP_SIZE 32
00196 
00197 #define OCF_LE_SET_ADVERTISE_ENABLE     0x000A
00198 typedef __packed struct _le_set_advertise_enable_cp{
00199   uint8_t enable;
00200 } PACKED le_set_advertise_enable_cp;
00201 #define LE_SET_ADVERTISE_ENABLE_CP_SIZE 1
00202 
00203 #define OCF_LE_SET_SCAN_PARAMETERS      0x000B
00204 typedef __packed struct _le_set_scan_parameters_cp{
00205   uint8_t  type;
00206   uint16_t interval;
00207   uint16_t window;
00208   uint8_t  own_bdaddr_type;
00209   uint8_t  filter;
00210 } PACKED le_set_scan_parameters_cp;
00211 #define LE_SET_SCAN_PARAMETERS_CP_SIZE 7
00212 
00213 #define OCF_LE_SET_SCAN_ENABLE          0x000C
00214 typedef __packed struct _le_set_scan_enable_cp{
00215   uint8_t enable;
00216   uint8_t filter_dup;
00217 } PACKED le_set_scan_enable_cp;
00218 #define LE_SET_SCAN_ENABLE_CP_SIZE 2
00219 
00220 #define OCF_LE_CREATE_CONN          0x000D
00221 typedef __packed struct _le_create_connection_cp{
00222   uint16_t interval;
00223   uint16_t window;
00224   uint8_t  initiator_filter;
00225   uint8_t  peer_bdaddr_type;
00226   tBDAddr  peer_bdaddr;
00227   uint8_t  own_bdaddr_type;
00228   uint16_t min_interval;
00229   uint16_t max_interval;
00230   uint16_t latency;
00231   uint16_t supervision_timeout;
00232   uint16_t min_ce_length;
00233   uint16_t max_ce_length;
00234 } PACKED le_create_connection_cp;
00235 #define LE_CREATE_CONN_CP_SIZE 25
00236 
00237 #define OCF_LE_CREATE_CONN_CANCEL       0x000E
00238 
00239 #define OCF_LE_READ_WHITE_LIST_SIZE     0x000F
00240 typedef __packed struct _le_read_white_list_size_rp{
00241   uint8_t status;
00242   uint8_t size;
00243 } PACKED le_read_white_list_size_rp;
00244 #define LE_READ_WHITE_LIST_SIZE_RP_SIZE 2
00245 
00246 #define OCF_LE_CLEAR_WHITE_LIST         0x0010
00247 
00248 #define OCF_LE_ADD_DEVICE_TO_WHITE_LIST     0x0011
00249 typedef __packed struct _le_add_device_to_white_list_cp{
00250   uint8_t bdaddr_type;
00251   tBDAddr bdaddr;
00252 } PACKED le_add_device_to_white_list_cp;
00253 #define LE_ADD_DEVICE_TO_WHITE_LIST_CP_SIZE 7
00254 
00255 #define OCF_LE_REMOVE_DEVICE_FROM_WHITE_LIST    0x0012
00256 typedef __packed struct _le_remove_device_from_white_list_cp{
00257   uint8_t bdaddr_type;
00258   tBDAddr bdaddr;
00259 } PACKED le_remove_device_from_white_list_cp;
00260 #define LE_REMOVE_DEVICE_FROM_WHITE_LIST_CP_SIZE 7
00261 
00262 #define OCF_LE_CONN_UPDATE          0x0013
00263 typedef __packed struct _le_connection_update_cp{
00264   uint16_t handle;
00265   uint16_t min_interval;
00266   uint16_t max_interval;
00267   uint16_t latency;
00268   uint16_t supervision_timeout;
00269   uint16_t min_ce_length;
00270   uint16_t max_ce_length;
00271 } PACKED le_connection_update_cp;
00272 #define LE_CONN_UPDATE_CP_SIZE 14
00273 
00274 #define OCF_LE_SET_HOST_CHANNEL_CLASSIFICATION  0x0014
00275 typedef __packed struct _le_set_host_channel_classification_cp{
00276   uint8_t map[5];
00277 } PACKED le_set_host_channel_classification_cp;
00278 #define LE_SET_HOST_CHANNEL_CLASSIFICATION_CP_SIZE 5
00279 
00280 #define OCF_LE_READ_CHANNEL_MAP         0x0015
00281 typedef __packed struct _le_read_channel_map_cp{
00282   uint16_t handle;
00283 } PACKED le_read_channel_map_cp;
00284 #define LE_READ_CHANNEL_MAP_CP_SIZE 2
00285 
00286 typedef __packed struct _le_read_channel_map_rp{
00287   uint8_t  status;
00288   uint16_t handle;
00289   uint8_t  map[5];
00290 }  le_read_channel_map_rp;
00291 #define LE_READ_CHANNEL_MAP_RP_SIZE 8
00292 
00293 #define OCF_LE_READ_REMOTE_USED_FEATURES    0x0016
00294 typedef __packed struct _le_read_remote_used_features_cp{
00295   uint16_t handle;
00296 } PACKED le_read_remote_used_features_cp;
00297 #define LE_READ_REMOTE_USED_FEATURES_CP_SIZE 2
00298 
00299 #define OCF_LE_ENCRYPT              0x0017
00300 typedef __packed struct _le_encrypt_cp{
00301   uint8_t key[16];
00302   uint8_t plaintext[16];
00303 } PACKED le_encrypt_cp;
00304 #define LE_ENCRYPT_CP_SIZE 32
00305 
00306 typedef __packed struct _le_encrypt_rp{
00307   uint8_t status;
00308   uint8_t encdata[16];
00309 } PACKED le_encrypt_rp;
00310 #define LE_ENCRYPT_RP_SIZE 17
00311 
00312 #define OCF_LE_RAND             0x0018
00313 typedef __packed struct _le_rand_rp{
00314   uint8_t status;
00315   uint8_t random[8];
00316 } PACKED le_rand_rp;
00317 #define LE_RAND_RP_SIZE 9
00318 
00319 #define OCF_LE_START_ENCRYPTION         0x0019
00320 typedef __packed struct _le_start_encryption_cp{
00321   uint16_t handle;
00322   uint8_t  random[8];
00323   uint16_t diversifier;
00324   uint8_t  key[16];
00325 } PACKED le_start_encryption_cp;
00326 #define LE_START_ENCRYPTION_CP_SIZE 28
00327 
00328 #define OCF_LE_LTK_REPLY            0x001A
00329 typedef __packed struct _le_ltk_reply_cp{
00330   uint16_t handle;
00331   uint8_t  key[16];
00332 } PACKED le_ltk_reply_cp;
00333 #define LE_LTK_REPLY_CP_SIZE 18
00334 
00335 typedef __packed struct _le_ltk_reply_rp{
00336   uint8_t  status;
00337   uint16_t handle;
00338 } PACKED le_ltk_reply_rp;
00339 #define LE_LTK_REPLY_RP_SIZE 3
00340 
00341 #define OCF_LE_LTK_NEG_REPLY            0x001B
00342 typedef __packed struct _le_ltk_neg_reply_cp{
00343   uint16_t handle;
00344 } PACKED le_ltk_neg_reply_cp;
00345 #define LE_LTK_NEG_REPLY_CP_SIZE 2
00346 
00347 typedef __packed struct _le_ltk_neg_reply_rp{
00348   uint8_t  status;
00349   uint16_t handle;
00350 } PACKED le_ltk_neg_reply_rp;
00351 #define LE_LTK_NEG_REPLY_RP_SIZE 3
00352 
00353 #define OCF_LE_READ_SUPPORTED_STATES        0x001C
00354 typedef __packed struct _le_read_supported_states_rp{
00355   uint8_t status;
00356   uint8_t states[8];
00357 } PACKED le_read_supported_states_rp;
00358 #define LE_READ_SUPPORTED_STATES_RP_SIZE 9
00359 
00360 #define OCF_LE_RECEIVER_TEST            0x001D
00361 typedef __packed struct _le_receiver_test_cp{
00362   uint8_t frequency;
00363 } PACKED le_receiver_test_cp;
00364 #define LE_RECEIVER_TEST_CP_SIZE 1
00365 
00366 #define OCF_LE_TRANSMITTER_TEST         0x001E
00367 typedef __packed struct _le_transmitter_test_cp{
00368   uint8_t frequency;
00369   uint8_t length;
00370   uint8_t payload;
00371 } PACKED le_transmitter_test_cp;
00372 #define LE_TRANSMITTER_TEST_CP_SIZE 3
00373 
00374 #define OCF_LE_TEST_END             0x001F
00375 typedef __packed struct _le_test_end_rp{
00376   uint8_t  status;
00377   uint16_t num_pkts;
00378 } PACKED le_test_end_rp;
00379 #define LE_TEST_END_RP_SIZE 3
00380 
00381 /* Vendor specific commands */
00382 #define OGF_VENDOR_CMD      0x3f
00383 
00384 
00385 /*------------- Events -------------*/
00386 #define EVT_CONN_COMPLETE       0x03
00387 typedef __packed struct _evt_conn_complete{
00388   uint8_t  status;
00389   uint16_t handle;
00390   tBDAddr  bdaddr;
00391   uint8_t  link_type;
00392   uint8_t  encr_mode;
00393 } PACKED evt_conn_complete;
00394 #define EVT_CONN_COMPLETE_SIZE 13
00395 
00396 #define EVT_DISCONN_COMPLETE        0x05
00397 typedef __packed struct _evt_disconn_complete{
00398   uint8_t  status;
00399   uint16_t handle;
00400   uint8_t  reason;
00401 } PACKED evt_disconn_complete;
00402 #define EVT_DISCONN_COMPLETE_SIZE 4
00403 
00404 #define EVT_ENCRYPT_CHANGE      0x08
00405 typedef __packed struct _evt_encrypt_change{
00406   uint8_t  status;
00407   uint16_t handle;
00408   uint8_t  encrypt;
00409 } PACKED evt_encrypt_change;
00410 #define EVT_ENCRYPT_CHANGE_SIZE 5
00411 
00412 #define EVT_READ_REMOTE_VERSION_COMPLETE    0x0C
00413 
00414 #define EVT_CMD_COMPLETE        0x0E
00415 typedef __packed struct _evt_cmd_complete{
00416   uint8_t  ncmd;
00417   uint16_t opcode;
00418 } PACKED evt_cmd_complete;
00419 #define EVT_CMD_COMPLETE_SIZE 3
00420 
00421 #define EVT_CMD_STATUS          0x0F
00422 typedef __packed struct _evt_cmd_status{
00423   uint8_t  status;
00424   uint8_t  ncmd;
00425   uint16_t opcode;
00426 } PACKED evt_cmd_status;
00427 #define EVT_CMD_STATUS_SIZE 4
00428 
00429 #define EVT_HARDWARE_ERROR      0x10
00430 typedef __packed struct _evt_hardware_error{
00431   uint8_t code;
00432 } PACKED evt_hardware_error;
00433 #define EVT_HARDWARE_ERROR_SIZE 1
00434 
00435 #define EVT_NUM_COMP_PKTS       0x13
00436 typedef __packed struct _evt_num_comp_pkts{
00437   uint8_t num_hndl;
00438   /* variable length part */
00439 } PACKED evt_num_comp_pkts;
00440 #define EVT_NUM_COMP_PKTS_SIZE 1
00441 
00442 /* variable length part of evt_num_comp_pkts. */
00443 typedef __packed struct _evt_num_comp_pkts_param{
00444   uint16_t hndl;
00445   uint16_t num_comp_pkts;
00446 } PACKED evt_num_comp_pkts_param;
00447 #define EVT_NUM_COMP_PKTS_PARAM_SIZE 1
00448 
00449 #define EVT_DATA_BUFFER_OVERFLOW        0x1A
00450 typedef __packed struct _evt_data_buffer_overflow{
00451   uint8_t link_type;
00452 } PACKED evt_data_buffer_overflow;
00453 #define EVT_DATA_BUFFER_OVERFLOW_SIZE 1
00454 
00455 #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
00456 typedef __packed struct _evt_encryption_key_refresh_complete{
00457   uint8_t  status;
00458   uint16_t handle;
00459 } PACKED evt_encryption_key_refresh_complete;
00460 #define EVT_ENCRYPTION_KEY_REFRESH_COMPLETE_SIZE 3
00461 
00462 #define EVT_LE_META_EVENT   0x3E
00463 typedef __packed struct _evt_le_meta_event{
00464   uint8_t subevent;
00465   uint8_t data[VARIABLE_SIZE];
00466 } PACKED evt_le_meta_event;
00467 #define EVT_LE_META_EVENT_SIZE 1
00468 
00469 #define EVT_LE_CONN_COMPLETE    0x01
00470 typedef __packed struct _evt_le_connection_complete{
00471   uint8_t  status;
00472   uint16_t handle;
00473   uint8_t  role;
00474   uint8_t  peer_bdaddr_type;
00475   tBDAddr  peer_bdaddr;
00476   uint16_t interval;
00477   uint16_t latency;
00478   uint16_t supervision_timeout;
00479   uint8_t  master_clock_accuracy;
00480 } PACKED evt_le_connection_complete;
00481 #define EVT_LE_CONN_COMPLETE_SIZE 18
00482 
00483 #define EVT_LE_ADVERTISING_REPORT   0x02
00484 typedef __packed struct _le_advertising_info{
00485   uint8_t evt_type;
00486   uint8_t bdaddr_type;
00487   tBDAddr bdaddr;
00488   uint8_t data_length;
00489   uint8_t data_RSSI[VARIABLE_SIZE]; // RSSI is last octect (signed integer).
00490 } PACKED le_advertising_info;
00491 #define LE_ADVERTISING_INFO_SIZE 9
00492 
00493 #define EVT_LE_CONN_UPDATE_COMPLETE 0x03
00494 typedef __packed struct _evt_le_connection_update_complete{
00495   uint8_t  status;
00496   uint16_t handle;
00497   uint16_t interval;
00498   uint16_t latency;
00499   uint16_t supervision_timeout;
00500 } PACKED evt_le_connection_update_complete;
00501 #define EVT_LE_CONN_UPDATE_COMPLETE_SIZE 9
00502 
00503 #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE   0x04
00504 typedef __packed struct _evt_le_read_remote_used_features_complete{
00505   uint8_t  status;
00506   uint16_t handle;
00507   uint8_t  features[8];
00508 } PACKED evt_le_read_remote_used_features_complete;
00509 #define EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE 11
00510 
00511 #define EVT_LE_LTK_REQUEST  0x05
00512 typedef __packed struct _evt_le_long_term_key_request{
00513   uint16_t handle;
00514   uint8_t  random[8];
00515   uint16_t ediv;
00516 } PACKED evt_le_long_term_key_request;
00517 #define EVT_LE_LTK_REQUEST_SIZE 12
00518 
00519 /**
00520 * The event code in the @ref hci_event_pckt structure. If event code is EVT_VENDOR,
00521 * application can use @ref evt_blue_aci structure to parse the packet.
00522 */
00523 #define EVT_VENDOR  0xFF
00524 
00525 
00526 /* Command opcode pack/unpack */
00527 #define cmd_opcode_pack(ogf, ocf)   (uint16_t)((ocf & 0x03ff)|(ogf << 10))
00528 #define cmd_opcode_ogf(op)      (op >> 10)
00529 #define cmd_opcode_ocf(op)      (op & 0x03ff)
00530 
00531 
00532 struct hci_request {
00533   uint16_t ogf;
00534   uint16_t ocf;
00535   int      event;
00536   void     *cparam;
00537   int      clen;
00538   void     *rparam;
00539   int      rlen;
00540 };
00541 
00542 void hci_send_cmd(uint16_t ogf, uint16_t ocf, uint8_t plen, void *param);
00543 
00544 typedef enum {
00545   WAITING_TYPE,
00546   WAITING_OPCODE1,
00547   WAITING_OPCODE2,
00548   WAITING_EVENT_CODE,
00549   WAITING_HANDLE,
00550   WAITING_HANDLE_FLAG,
00551   WAITING_PARAM_LEN,
00552   WAITING_DATA_LEN1,
00553   WAITING_DATA_LEN2,
00554   WAITING_PAYLOAD
00555 }hci_state;
00556 
00557 typedef void (*hci_packet_complete_callback)(void *pckt, uint16_t len);
00558 
00559 /* HCI library functions. */
00560 void hci_init(void);
00561 
00562 int hci_send_req(struct hci_request *r, BOOL async);
00563 
00564 #endif /* __HCI_INTERNAL_H_ */