zephyr/subsys/bluetooth/mesh/settings.h
Pavel Vasilyev 1113c2efd4 Bluetooth: Mesh: Store device key candidate asynchronously
This allows to move flash operations from the context that triggered
storing device key candidate to the mesh settings work item that runs
on the system workqueue. This is required to for a case where the mesh
settings work item is running on a separate thread instead of the system
workqueue to unblock the system workqueue eventually.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2023-04-29 12:24:28 +02:00

57 lines
2.2 KiB
C

/*
* Copyright (c) 2018 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
/* Pending storage actions. */
enum bt_mesh_settings_flag {
BT_MESH_SETTINGS_RPL_PENDING,
BT_MESH_SETTINGS_NET_KEYS_PENDING,
BT_MESH_SETTINGS_APP_KEYS_PENDING,
BT_MESH_SETTINGS_NET_PENDING,
BT_MESH_SETTINGS_IV_PENDING,
BT_MESH_SETTINGS_SEQ_PENDING,
BT_MESH_SETTINGS_HB_PUB_PENDING,
BT_MESH_SETTINGS_CFG_PENDING,
BT_MESH_SETTINGS_MOD_PENDING,
BT_MESH_SETTINGS_VA_PENDING,
BT_MESH_SETTINGS_CDB_PENDING,
BT_MESH_SETTINGS_SRPL_PENDING,
BT_MESH_SETTINGS_SSEQ_PENDING,
BT_MESH_SETTINGS_COMP_PENDING,
BT_MESH_SETTINGS_DEV_KEY_CAND_PENDING,
BT_MESH_SETTINGS_FLAG_COUNT,
};
#ifdef CONFIG_BT_SETTINGS
#define BT_MESH_SETTINGS_DEFINE(_hname, _subtree, _set) \
static int pre_##_set(const char *name, size_t len_rd, settings_read_cb read_cb, \
void *cb_arg) \
{ \
if (!atomic_test_bit(bt_mesh.flags, BT_MESH_INIT)) { \
return 0; \
} \
return _set(name, len_rd, read_cb, cb_arg); \
} \
SETTINGS_STATIC_HANDLER_DEFINE(bt_mesh_##_hname, "bt/mesh/" _subtree, NULL, pre_##_set, \
NULL, NULL)
#else
/* Declaring non static settings handler helps avoid unnecessary ifdefs
* as well as unused function warning. Since the declared handler structure is
* unused, linker will discard it.
*/
#define BT_MESH_SETTINGS_DEFINE(_hname, _subtree, _set)\
const struct settings_handler settings_handler_bt_mesh_ ## _hname = {\
.h_set = _set, \
}
#endif
void bt_mesh_settings_init(void);
void bt_mesh_settings_store_schedule(enum bt_mesh_settings_flag flag);
void bt_mesh_settings_store_cancel(enum bt_mesh_settings_flag flag);
void bt_mesh_settings_store_pending(void);
int bt_mesh_settings_set(settings_read_cb read_cb, void *cb_arg,
void *out, size_t read_len);