BLE shield
Fork of X_NUCLEO_IDB0XA1 by
Embed:
(wiki syntax)
Show/hide line numbers
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_ */
Generated on Tue Jul 12 2022 19:27:29 by 1.7.2