The current approach with storing RPL by timeout doesn't solve all issues as the node may loss power before the timer is fired. In addition to that this may wear out flash quickly if short timeout is used. This change adds an API to store the pending RPL entry upon user request. Additional Kconfig option allows to completely disable timer so that the whole storing relies on the user. The mesh stack still stays responsible for outdating RPL entries in case of IV Index update as this happens implicitly for the user. Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
44 lines
1.3 KiB
C
44 lines
1.3 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_FLAG_COUNT,
|
|
};
|
|
|
|
#ifdef CONFIG_BT_SETTINGS
|
|
#define BT_MESH_SETTINGS_DEFINE(_hname, _subtree, _set) \
|
|
SETTINGS_STATIC_HANDLER_DEFINE(bt_mesh_##_hname, "bt/mesh/" _subtree, \
|
|
NULL, _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);
|
|
int bt_mesh_settings_set(settings_read_cb read_cb, void *cb_arg,
|
|
void *out, size_t read_len);
|