1 /*
2  * Copyright (c) 2018 Intel Corporation
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <stddef.h>
8 #include <stdint.h>
9 
10 #include <zephyr/bluetooth/addr.h>
11 
12 #include <zephyr/settings/settings.h>
13 #include <common/bt_settings_commit.h>
14 
15 /* Max settings key length (with all components) */
16 #define BT_SETTINGS_KEY_MAX 36
17 
18 /* Base64-encoded string buffer size of in_size bytes */
19 #define BT_SETTINGS_SIZE(in_size) ((((((in_size) - 1) / 3) * 4) + 4) + 1)
20 
21 #define BT_SETTINGS_DEFINE(_hname, _subtree, _set, _commit)                                        \
22 	SETTINGS_STATIC_HANDLER_DEFINE_WITH_CPRIO(bt_##_hname, "bt/" _subtree, NULL, _set, _commit,\
23 						  NULL, BT_SETTINGS_CPRIO_1)
24 
25 
26 #define ID_DATA_LEN(array) (bt_dev.id_count * sizeof(array[0]))
27 
28 int bt_settings_store(const char *key, uint8_t id, const bt_addr_le_t *addr, const void *value,
29 		      size_t val_len);
30 int bt_settings_delete(const char *key, uint8_t id, const bt_addr_le_t *addr);
31 
32 void bt_testing_settings_store_hook(const char *key, const void *value, size_t val_len);
33 void bt_testing_settings_delete_hook(const char *key);
34 
35 /* Helpers for keys containing a bdaddr */
36 void bt_settings_encode_key(char *path, size_t path_size, const char *subsys,
37 			    const bt_addr_le_t *addr, const char *key);
38 int bt_settings_decode_key(const char *key, bt_addr_le_t *addr);
39 
40 void bt_settings_save_id(void);
41 
42 int bt_settings_init(void);
43 
44 int bt_settings_store_sc(uint8_t id, const bt_addr_le_t *addr, const void *value, size_t val_len);
45 int bt_settings_delete_sc(uint8_t id, const bt_addr_le_t *addr);
46 
47 int bt_settings_store_cf(uint8_t id, const bt_addr_le_t *addr, const void *value, size_t val_len);
48 int bt_settings_delete_cf(uint8_t id, const bt_addr_le_t *addr);
49 
50 int bt_settings_store_ccc(uint8_t id, const bt_addr_le_t *addr, const void *value, size_t val_len);
51 int bt_settings_delete_ccc(uint8_t id, const bt_addr_le_t *addr);
52 
53 int bt_settings_store_hash(const void *value, size_t val_len);
54 int bt_settings_delete_hash(void);
55 
56 int bt_settings_store_name(const void *value, size_t val_len);
57 int bt_settings_delete_name(void);
58 
59 int bt_settings_store_appearance(const void *value, size_t val_len);
60 int bt_settings_delete_appearance(void);
61 
62 int bt_settings_store_id(void);
63 int bt_settings_delete_id(void);
64 
65 int bt_settings_store_irk(void);
66 int bt_settings_delete_irk(void);
67 
68 int bt_settings_store_link_key(const bt_addr_le_t *addr, const void *value, size_t val_len);
69 int bt_settings_delete_link_key(const bt_addr_le_t *addr);
70 
71 int bt_settings_store_keys(uint8_t id, const bt_addr_le_t *addr, const void *value, size_t val_len);
72 int bt_settings_delete_keys(uint8_t id, const bt_addr_le_t *addr);
73