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