1 /* 2 * Copyright (C) 2016 YunOS Project. All rights reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _HCI_API_ 18 #define _HCI_API_ 19 #include <stdint.h> 20 21 struct hci_debug_counter_t { 22 uint32_t acl_in_count; 23 uint32_t acl_out_count; 24 uint32_t hci_in_is_null_count; 25 uint32_t cmd_out_count; 26 uint32_t event_in_count; 27 uint32_t event_discard_count; 28 uint32_t event_in_is_null_count; 29 uint32_t att_in_count; 30 uint32_t att_out_count; 31 uint32_t hci_in_err_count; 32 }; 33 extern struct hci_debug_counter_t g_hci_debug_counter; 34 int hci_api_init(); 35 int hci_api_le_scan_enable(uint8_t enable, uint8_t filter_dup); 36 int hci_api_le_scan_param_set(uint8_t scan_type, uint16_t interval, uint16_t window, uint8_t addr_type, uint8_t filter_policy); 37 int hci_api_le_get_max_data_len(uint16_t *tx_octets, uint16_t *tx_time); 38 int hci_api_le_get_default_data_len(uint16_t *tx_octets, uint16_t *tx_time); 39 int hci_api_le_set_default_data_len(uint16_t tx_octets, uint16_t tx_time); 40 int hci_api_le_set_data_len(int16_t conn_handle, uint16_t tx_octets, uint16_t tx_time); 41 42 int hci_api_le_adv_enable(uint8_t enable); 43 int hci_api_le_set_random_addr(const uint8_t addr[6]); 44 int hci_api_le_create_conn(uint16_t scan_interval, 45 uint16_t scan_window, 46 uint8_t filter_policy, 47 uint8_t peer_addr_type, 48 const uint8_t peer_addr[6], 49 uint8_t own_addr_type, 50 uint16_t conn_interval_min, 51 uint16_t conn_interval_max, 52 uint16_t conn_latency, 53 uint16_t supervision_timeout, 54 uint16_t min_ce_len, 55 uint16_t max_ce_len); 56 int hci_api_set_host_buffer_size(uint16_t acl_mtu, uint8_t sco_mtu, 57 uint16_t acl_pkts, uint16_t sco_pkts); 58 int hci_api_set_host_flow_enable(uint8_t enable); 59 int hci_api_le_set_bdaddr(uint8_t bdaddr[6]); 60 int hci_api_reset(); 61 int hci_api_read_local_feature(uint8_t feature[8]); 62 int hci_api_read_local_version_info(uint8_t *hci_version, 63 uint8_t *lmp_version, 64 uint16_t *hci_revision, 65 uint16_t *lmp_subversion, 66 uint16_t *manufacturer); 67 int hci_api_read_bdaddr(uint8_t bdaddr[6]); 68 int hci_api_read_local_support_command(uint8_t supported_commands[64]); 69 int hci_api_le_set_event_mask(uint64_t mask); 70 int hci_api_le_read_local_feature(uint8_t feature[8]); 71 int hci_api_le_read_buffer_size_complete(uint16_t *le_max_len, uint8_t *le_max_num); 72 int hci_api_le_read_support_states(uint64_t *states); 73 int hci_api_le_read_rl_size(uint8_t *rl_size); 74 int hci_api_set_event_mask(uint64_t mask); 75 int hci_api_vs_init(); 76 int hci_api_le_set_ad_data(uint8_t len, uint8_t data[31]); 77 int hci_api_le_set_sd_data(uint8_t len, uint8_t data[31]); 78 int hci_api_le_adv_param(uint16_t min_interval, 79 uint16_t max_interval, 80 uint8_t type, 81 uint8_t own_addr_type, 82 uint8_t direct_addr_type, 83 uint8_t direct_addr[6], 84 uint8_t channel_map, 85 uint8_t filter_policy); 86 87 int hci_api_le_create_conn_cancel(); 88 int hci_api_le_read_remote_features(uint16_t conn_handle); 89 int hci_api_le_read_remote_version(uint16_t conn_handle); 90 91 int hci_api_le_disconnect(uint16_t conn_handle, uint8_t reason); 92 93 struct handle_count { 94 uint16_t handle; 95 uint16_t count; 96 }; 97 98 int hci_api_host_num_complete_packets(uint8_t num_handles, struct handle_count *phc); 99 100 int hci_api_le_conn_updata(uint16_t conn_handle, 101 uint16_t conn_interval_min, 102 uint16_t conn_interval_max, 103 uint16_t conn_latency, 104 uint16_t supervision_timeout, 105 uint16_t min_ce_len, 106 uint16_t max_ce_len); 107 108 int hci_api_le_start_encrypt(uint16_t conn_handle, 109 uint8_t rand[8], 110 uint8_t ediv[2], 111 uint8_t ltk[16]); 112 113 int hci_api_le_enctypt_ltk_req_reply(uint16_t conn_handle, uint8_t ltk[16]); 114 115 int hci_api_le_enctypt_ltk_req_neg_reply(uint16_t conn_handle); 116 117 int hci_api_le_rand(uint8_t random_data[8]); 118 119 int hci_api_le_enc(uint8_t key[16], uint8_t plaintext[16], uint8_t ciphertext[16]); 120 121 int hci_api_le_set_phy(uint16_t handle, 122 uint8_t all_phys, 123 uint8_t tx_phys, 124 uint8_t rx_phys, 125 uint16_t phy_opts); 126 127 int hci_api_le_conn_param_req_reply(uint16_t handle, 128 uint16_t interval_min, 129 uint16_t interval_max, 130 uint16_t latency, 131 uint16_t timeout, 132 uint16_t min_ce_len, 133 uint16_t max_ce_len); 134 135 136 int hci_api_le_conn_param_neg_reply(uint16_t handle, uint8_t reason); 137 138 int hci_api_le_add_dev_to_rl(uint8_t type, 139 uint8_t peer_id_addr[6], 140 uint8_t peer_irk[16], 141 uint8_t local_irk[16]); 142 143 int hci_api_le_remove_dev_from_rl(uint8_t type, const uint8_t peer_id_addr[6]); 144 145 int hci_api_le_clear_rl(); 146 147 148 int hci_api_le_set_addr_res_enable(uint8_t enable); 149 150 151 int hci_api_le_set_privacy_mode(uint8_t type, uint8_t id_addr[6], uint8_t mode); 152 153 154 155 int hci_api_le_gen_p256_pubkey(); 156 157 int hci_api_le_gen_dhkey(uint8_t remote_pk[64]); 158 int hci_api_read_buffer_size(uint16_t *acl_max_len, 159 uint8_t *sco_max_len, 160 uint16_t *acl_max_num, 161 uint16_t *sco_max_num); 162 int hci_api_le_write_host_supp(uint8_t le, uint8_t simul); 163 int hci_api_num_complete_packets(uint8_t num_handles, 164 uint16_t *handles, 165 uint16_t *counts); 166 int hci_api_white_list_size(uint8_t *size); 167 168 int hci_api_white_list_add(uint8_t peer_addr_type, uint8_t peer_addr[6]); 169 170 int hci_api_white_list_remove(uint8_t peer_addr_type, uint8_t peer_addr[6]); 171 172 int hci_api_white_list_clear(); 173 174 int hci_api_le_event_dhkey_complete(uint8_t status, uint8_t dhkey[32]); 175 176 int hci_api_le_event_pkey_complete(uint8_t status, uint8_t key[64]); 177 178 int hci_api_le_ext_adv_param_set (uint8_t handle, 179 uint16_t props, 180 uint32_t prim_min_interval, 181 uint32_t prim_max_interval, 182 uint8_t prim_channel_map, 183 uint8_t own_addr_type, 184 uint8_t peer_addr_type, 185 uint8_t peer_addr[6], 186 uint8_t filter_policy, 187 int8_t tx_power, 188 uint8_t prim_adv_phy, 189 uint8_t sec_adv_max_skip, 190 uint8_t sec_adv_phy, 191 uint8_t sid, 192 uint8_t scan_req_notify_enable, 193 int8_t *ret_txpower); 194 195 struct ext_adv_set_t { 196 uint8_t adv_handle; 197 uint16_t duration; 198 uint8_t max_ext_adv_evts; 199 }; 200 201 int hci_api_le_ext_adv_enable( uint8_t enable, uint16_t set_num, struct ext_adv_set_t adv_sets[]); 202 203 int hci_api_le_set_adv_random_addr(uint8_t handle, const uint8_t addr[6]); 204 205 int hci_api_le_ext_scan_enable(uint8_t enable,uint8_t filter_dup,uint16_t duration, uint16_t period); 206 207 struct ext_scan_param_t { 208 uint8_t type; 209 uint16_t interval; 210 uint16_t window; 211 }; 212 213 int hci_api_le_ext_scan_param_set(uint8_t own_addr_type,uint8_t filter_policy,uint8_t scan_phys, struct ext_scan_param_t params[]); 214 215 struct ext_conn_phy_params_t { 216 uint16_t scan_interval; 217 uint16_t scan_window; 218 uint16_t conn_interval_min; 219 uint16_t conn_interval_max; 220 uint16_t conn_latency; 221 uint16_t supervision_timeout; 222 uint16_t min_ce_len; 223 uint16_t max_ce_len; 224 }; 225 226 int hci_api_le_create_conn_ext(uint8_t filter_policy, 227 uint8_t own_addr_type, 228 uint8_t peer_addr_type, 229 uint8_t peer_addr[6], 230 uint8_t init_phys, 231 struct ext_conn_phy_params_t params[]); 232 233 int hci_api_le_read_phy(uint16_t conn_handle, uint8_t *tx_phy , uint8_t *rx_phy); 234 235 int hci_api_le_rpa_timeout_set(uint16_t timeout); 236 237 int hci_api_le_set_ext_ad_data(uint8_t handle, uint8_t op, uint8_t frag_pref, uint8_t len, uint8_t data[251]); 238 int hci_api_le_set_ext_sd_data(uint8_t handle, uint8_t op, uint8_t frag_pref, uint8_t len, uint8_t data[251]); 239 240 int hci_api_le_remove_adv_set(uint8_t handle); 241 242 int hci_api_le_set_host_chan_classif(uint8_t ch_map[5]); 243 244 #endif 245 246