1 /******************************************************************************
2  *
3  *  Copyright (C) 2009-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 #ifndef BTIF_STORAGE_H
20 #define BTIF_STORAGE_H
21 
22 #include <hardware/bluetooth.h>
23 
24 #include "bt_target.h"
25 #include "bt_types.h"
26 
27 /*******************************************************************************
28 **  Constants & Macros
29 ********************************************************************************/
30 #define BTIF_STORAGE_FILL_PROPERTY(p_prop, t, l, p_v) \
31          (p_prop)->type = t;(p_prop)->len = l; (p_prop)->val = (p_v);
32 
33 /*******************************************************************************
34 **  Functions
35 ********************************************************************************/
36 
37 /*******************************************************************************
38 **
39 ** Function         btif_storage_get_adapter_property
40 **
41 ** Description      BTIF storage API - Fetches the adapter property->type
42 **                  from NVRAM and fills property->val.
43 **                  Caller should provide memory for property->val and
44 **                  set the property->val
45 **
46 ** Returns          BT_STATUS_SUCCESS if the fetch was successful,
47 **                  BT_STATUS_FAIL otherwise
48 **
49 *******************************************************************************/
50 bt_status_t btif_storage_get_adapter_property(bt_property_t *property);
51 
52 /*******************************************************************************
53 **
54 ** Function         btif_storage_set_adapter_property
55 **
56 ** Description      BTIF storage API - Stores the adapter property
57 **                  to NVRAM
58 **
59 ** Returns          BT_STATUS_SUCCESS if the store was successful,
60 **                  BT_STATUS_FAIL otherwise
61 **
62 *******************************************************************************/
63 bt_status_t btif_storage_set_adapter_property(bt_property_t *property);
64 
65 /*******************************************************************************
66 **
67 ** Function         btif_storage_get_remote_device_property
68 **
69 ** Description      BTIF storage API - Fetches the remote device property->type
70 **                  from NVRAM and fills property->val.
71 **                  Caller should provide memory for property->val and
72 **                  set the property->val
73 **
74 ** Returns          BT_STATUS_SUCCESS if the fetch was successful,
75 **                  BT_STATUS_FAIL otherwise
76 **
77 *******************************************************************************/
78 bt_status_t btif_storage_get_remote_device_property(bt_bdaddr_t *remote_bd_addr,
79                                                     bt_property_t *property);
80 
81 /*******************************************************************************
82 **
83 ** Function         btif_storage_set_remote_device_property
84 **
85 ** Description      BTIF storage API - Stores the remote device property
86 **                  to NVRAM
87 **
88 ** Returns          BT_STATUS_SUCCESS if the store was successful,
89 **                  BT_STATUS_FAIL otherwise
90 **
91 *******************************************************************************/
92 bt_status_t btif_storage_set_remote_device_property(bt_bdaddr_t *remote_bd_addr,
93                                                     bt_property_t *property);
94 
95 /*******************************************************************************
96 **
97 ** Function         btif_storage_add_remote_device
98 **
99 ** Description      BTIF storage API - Adds a newly discovered device to
100 **                  track along with the timestamp. Also, stores the various
101 **                  properties - RSSI, BDADDR, NAME (if found in EIR)
102 **
103 ** Returns          BT_STATUS_SUCCESS if successful,
104 **                  BT_STATUS_FAIL otherwise
105 **
106 *******************************************************************************/
107 bt_status_t btif_storage_add_remote_device(bt_bdaddr_t *remote_bd_addr,
108                                            uint32_t num_properties,
109                                            bt_property_t *properties);
110 
111 /*******************************************************************************
112 **
113 ** Function         btif_storage_add_bonded_device
114 **
115 ** Description      BTIF storage API - Adds the newly bonded device to NVRAM
116 **                  along with the link-key, Key type and Pin key length
117 **
118 ** Returns          BT_STATUS_SUCCESS if the store was successful,
119 **                  BT_STATUS_FAIL otherwise
120 **
121 *******************************************************************************/
122 bt_status_t btif_storage_add_bonded_device(bt_bdaddr_t *remote_bd_addr,
123                                            LINK_KEY link_key,
124                                            uint8_t key_type,
125                                            uint8_t pin_length);
126 
127 /*******************************************************************************
128 **
129 ** Function         btif_storage_remove_bonded_device
130 **
131 ** Description      BTIF storage API - Deletes the bonded device from NVRAM
132 **
133 ** Returns          BT_STATUS_SUCCESS if the deletion was successful,
134 **                  BT_STATUS_FAIL otherwise
135 **
136 *******************************************************************************/
137 bt_status_t btif_storage_remove_bonded_device(bt_bdaddr_t *remote_bd_addr);
138 
139 /*******************************************************************************
140 **
141 ** Function         btif_storage_remove_bonded_device
142 **
143 ** Description      BTIF storage API - Deletes the bonded device from NVRAM
144 **
145 ** Returns          BT_STATUS_SUCCESS if the deletion was successful,
146 **                  BT_STATUS_FAIL otherwise
147 **
148 *******************************************************************************/
149 bt_status_t btif_storage_load_bonded_devices(void);
150 
151 /*******************************************************************************
152 **
153 ** Function         btif_storage_read_hl_apps_cb
154 **
155 ** Description      BTIF storage API - Read HL application control block from NVRAM
156 **
157 ** Returns          BT_STATUS_SUCCESS if the operation was successful,
158 **                  BT_STATUS_FAIL otherwise
159 **
160 *******************************************************************************/
161 bt_status_t btif_storage_read_hl_apps_cb(char *value, int value_size);
162 
163 /*******************************************************************************
164 **
165 ** Function         btif_storage_write_hl_apps_cb
166 **
167 ** Description      BTIF storage API - Write HL application control block to NVRAM
168 **
169 ** Returns          BT_STATUS_SUCCESS if the operation was successful,
170 **                  BT_STATUS_FAIL otherwise
171 **
172 *******************************************************************************/
173 bt_status_t btif_storage_write_hl_apps_cb(char *value, int value_size);
174 
175 /*******************************************************************************
176 **
177 ** Function         btif_storage_read_hl_apps_cb
178 **
179 ** Description      BTIF storage API - Read HL application configuration from NVRAM
180 **
181 ** Returns          BT_STATUS_SUCCESS if the operation was successful,
182 **                  BT_STATUS_FAIL otherwise
183 **
184 *******************************************************************************/
185 bt_status_t btif_storage_read_hl_app_data(UINT8 app_idx, char *value, int value_size);
186 
187 /*******************************************************************************
188 **
189 ** Function         btif_storage_write_hl_app_data
190 **
191 ** Description      BTIF storage API - Write HL application configuration to NVRAM
192 **
193 ** Returns          BT_STATUS_SUCCESS if the operation was successful,
194 **                  BT_STATUS_FAIL otherwise
195 **
196 *******************************************************************************/
197 bt_status_t btif_storage_write_hl_app_data(UINT8 app_idx, char *value, int value_size);
198 
199 /*******************************************************************************
200 **
201 ** Function         btif_storage_read_hl_mdl_data
202 **
203 ** Description      BTIF storage API - Read HL application MDL configuration from NVRAM
204 **
205 ** Returns          BT_STATUS_SUCCESS if the operation was successful,
206 **                  BT_STATUS_FAIL otherwise
207 **
208 *******************************************************************************/
209 bt_status_t btif_storage_read_hl_mdl_data(UINT8 app_idx, char *value, int value_size);
210 
211 /*******************************************************************************
212 **
213 ** Function         btif_storage_write_hl_mdl_data
214 **
215 ** Description      BTIF storage API - Write HL application MDL configuration from NVRAM
216 **
217 ** Returns          BT_STATUS_SUCCESS if the operation was successful,
218 **                  BT_STATUS_FAIL otherwise
219 **
220 *******************************************************************************/
221 bt_status_t btif_storage_write_hl_mdl_data(UINT8 app_idx, char *value, int value_size);
222 
223 /*******************************************************************************
224 **
225 ** Function         btif_storage_add_hid_device_info
226 **
227 ** Description      BTIF storage API - Adds the hid information of bonded hid devices-to NVRAM
228 **
229 ** Returns          BT_STATUS_SUCCESS if the store was successful,
230 **                  BT_STATUS_FAIL otherwise
231 **
232 *******************************************************************************/
233 
234 bt_status_t btif_storage_add_hid_device_info(bt_bdaddr_t *remote_bd_addr,
235                                                     UINT16 attr_mask, UINT8 sub_class,
236                                                     UINT8 app_id, UINT16 vendor_id,
237                                                     UINT16 product_id, UINT16 version,
238                                                     UINT8 ctry_code, UINT16 ssr_max_latency,
239                                                     UINT16 ssr_min_tout, UINT16 dl_len, UINT8 *dsc_list);
240 
241 /*******************************************************************************
242 **
243 ** Function         btif_storage_load_bonded_hid_info
244 **
245 ** Description      BTIF storage API - Loads hid info for all the bonded devices from NVRAM
246 **                  and adds those devices  to the BTA_HH.
247 **
248 ** Returns          BT_STATUS_SUCCESS if successful, BT_STATUS_FAIL otherwise
249 **
250 *******************************************************************************/
251 bt_status_t btif_storage_load_bonded_hid_info(void);
252 
253 /*******************************************************************************
254 **
255 ** Function         btif_storage_remove_hid_info
256 **
257 ** Description      BTIF storage API - Deletes the bonded hid device info from NVRAM
258 **
259 ** Returns          BT_STATUS_SUCCESS if the deletion was successful,
260 **                  BT_STATUS_FAIL otherwise
261 **
262 *******************************************************************************/
263 bt_status_t btif_storage_remove_hid_info(bt_bdaddr_t *remote_bd_addr);
264 
265 /*******************************************************************************
266 **
267 ** Function         btif_storage_is_retricted_device
268 **
269 ** Description      BTIF storage API - checks if this device is a restricted device
270 **
271 ** Returns          TRUE  if the device is labled as restricted
272 **                  FALSE otherwise
273 **
274 *******************************************************************************/
275 BOOLEAN btif_storage_is_restricted_device(const bt_bdaddr_t *remote_bd_addr);
276 
277 #if (BLE_INCLUDED == TRUE)
278 bt_status_t btif_storage_add_ble_bonding_key( bt_bdaddr_t *remote_bd_addr,
279                                               char *key,
280                                               uint8_t key_type,
281                                               uint8_t key_length);
282 bt_status_t btif_storage_get_ble_bonding_key(bt_bdaddr_t *remote_bd_addr,
283                                              UINT8 key_type,
284                                              char *key_value,
285                                              int key_length);
286 
287 bt_status_t btif_storage_add_ble_local_key(char *key,
288                                            uint8_t key_type,
289                                            uint8_t key_length);
290 bt_status_t btif_storage_remove_ble_bonding_keys(bt_bdaddr_t *remote_bd_addr);
291 bt_status_t btif_storage_remove_ble_local_keys(void);
292 bt_status_t btif_storage_get_ble_local_key(UINT8 key_type,
293                                            char *key_value,
294                                            int key_len);
295 
296 bt_status_t btif_storage_get_remote_addr_type(bt_bdaddr_t *remote_bd_addr,
297                                               int *addr_type);
298 
299 bt_status_t btif_storage_set_remote_addr_type(bt_bdaddr_t *remote_bd_addr,
300                                               UINT8 addr_type);
301 
302 #endif
303 /*******************************************************************************
304 **
305 ** Function         btif_storage_get_remote_version
306 **
307 ** Description      Fetch remote version info on cached remote device
308 **
309 ** Returns          BT_STATUS_SUCCESS if found
310 **                  BT_STATUS_FAIL otherwise
311 **
312 *******************************************************************************/
313 
314 bt_status_t btif_storage_get_remote_version(const bt_bdaddr_t *remote_bd_addr,
315                                   bt_remote_version_t *p_ver);
316 
317 /******************************************************************************
318  * Exported for unit tests
319  *****************************************************************************/
320 size_t btif_split_uuids_string(const char *str, bt_uuid_t *p_uuid, size_t max_uuids);
321 
322 #endif /* BTIF_STORAGE_H */
323