my fork

Dependencies:   mbed

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