The mesh settings.c module is a giant piece of code responsible for storing the mesh stack configuration. Such approach makes it difficult to control the data to be stored, breaks the stack modules' encapsulation by forcing them to reveal the internal kitchen, which leads to unpleasant issues such as #19799. This commit moves the responsibility of storing the configuration to corresponding modules while keeping control of the moment of storing the configuration and of starting the stack after the settingss loading is completed. This doesn't introduce any abstraction between the mesh settings.c and other modules as it will add more complexity and overhead than necessary for the actual task. Fixes #19850 Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
41 lines
918 B
C
41 lines
918 B
C
/*
|
|
* Copyright (c) 2020 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
static inline uint16_t bt_mesh_hb_pwr2(uint8_t val)
|
|
{
|
|
if (!val) {
|
|
return 0x0000;
|
|
} else if (val == 0xff || val == 0x11) {
|
|
return 0xffff;
|
|
} else {
|
|
return (1 << (val - 1));
|
|
}
|
|
}
|
|
|
|
static inline uint8_t bt_mesh_hb_log(uint32_t val)
|
|
{
|
|
if (!val) {
|
|
return 0x00;
|
|
} else if (val == 0xffff) {
|
|
return 0xff;
|
|
} else {
|
|
return 32 - __builtin_clz(val);
|
|
}
|
|
}
|
|
|
|
void bt_mesh_hb_init(void);
|
|
void bt_mesh_hb_start(void);
|
|
void bt_mesh_hb_suspend(void);
|
|
void bt_mesh_hb_resume(void);
|
|
|
|
int bt_mesh_hb_recv(struct bt_mesh_net_rx *rx, struct net_buf_simple *buf);
|
|
void bt_mesh_hb_feature_changed(uint16_t features);
|
|
|
|
uint8_t bt_mesh_hb_pub_set(struct bt_mesh_hb_pub *hb_pub);
|
|
uint8_t bt_mesh_hb_sub_set(uint16_t src, uint16_t dst, uint32_t period);
|
|
void bt_mesh_hb_sub_reset_count(void);
|
|
void bt_mesh_hb_pub_pending_store(void);
|