Skip to content

Commit deebd3b

Browse files
LingaoMHaavardRei
authored andcommitted
[nrf fromtree] Bluetooth: Mesh: Refine Mesh store logic
Move flag&handler to structure, not only save some flash size but also make code more readable. Signed-off-by: Lingao Meng <[email protected]> (cherry picked from commit 664c087) Signed-off-by: Håvard Reierstad <[email protected]>
1 parent 353e3d3 commit deebd3b

File tree

3 files changed

+43
-79
lines changed

3 files changed

+43
-79
lines changed

subsys/bluetooth/mesh/rpl.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,3 +404,8 @@ void bt_mesh_rpl_pending_store(uint16_t addr)
404404
(void)memset(&replay_list[last - shift + 1], 0, sizeof(struct bt_mesh_rpl) * shift);
405405
}
406406
}
407+
408+
void bt_mesh_rpl_pending_store_all_nodes(void)
409+
{
410+
bt_mesh_rpl_pending_store(BT_MESH_ADDR_ALL_NODES);
411+
}

subsys/bluetooth/mesh/rpl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ bool bt_mesh_rpl_check(struct bt_mesh_net_rx *rx, struct bt_mesh_rpl **match, bo
2626
void bt_mesh_rpl_clear(void);
2727
void bt_mesh_rpl_update(struct bt_mesh_rpl *rpl,
2828
struct bt_mesh_net_rx *rx);
29+
void bt_mesh_rpl_pending_store_all_nodes(void);

subsys/bluetooth/mesh/settings.c

Lines changed: 37 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -184,86 +184,44 @@ static void store_pending(struct k_work *work)
184184
{
185185
LOG_DBG("");
186186

187-
if (atomic_test_and_clear_bit(pending_flags, BT_MESH_SETTINGS_RPL_PENDING)) {
188-
bt_mesh_rpl_pending_store(BT_MESH_ADDR_ALL_NODES);
189-
}
190-
191-
if (atomic_test_and_clear_bit(pending_flags,
192-
BT_MESH_SETTINGS_NET_KEYS_PENDING)) {
193-
bt_mesh_subnet_pending_store();
194-
}
195-
196-
if (atomic_test_and_clear_bit(pending_flags,
197-
BT_MESH_SETTINGS_APP_KEYS_PENDING)) {
198-
bt_mesh_app_key_pending_store();
199-
}
200-
201-
if (atomic_test_and_clear_bit(pending_flags,
202-
BT_MESH_SETTINGS_NET_PENDING)) {
203-
bt_mesh_net_pending_net_store();
204-
}
205-
206-
if (atomic_test_and_clear_bit(pending_flags,
207-
BT_MESH_SETTINGS_IV_PENDING)) {
208-
bt_mesh_net_pending_iv_store();
209-
}
210-
211-
if (atomic_test_and_clear_bit(pending_flags,
212-
BT_MESH_SETTINGS_SEQ_PENDING)) {
213-
bt_mesh_net_pending_seq_store();
214-
}
215-
216-
if (atomic_test_and_clear_bit(pending_flags,
217-
BT_MESH_SETTINGS_DEV_KEY_CAND_PENDING)) {
218-
bt_mesh_net_pending_dev_key_cand_store();
219-
}
220-
221-
if (atomic_test_and_clear_bit(pending_flags,
222-
BT_MESH_SETTINGS_HB_PUB_PENDING)) {
223-
bt_mesh_hb_pub_pending_store();
224-
}
225-
226-
if (atomic_test_and_clear_bit(pending_flags,
227-
BT_MESH_SETTINGS_CFG_PENDING)) {
228-
bt_mesh_cfg_pending_store();
229-
}
230-
231-
if (atomic_test_and_clear_bit(pending_flags,
232-
BT_MESH_SETTINGS_COMP_PENDING)) {
233-
bt_mesh_comp_data_pending_clear();
234-
}
235-
236-
if (atomic_test_and_clear_bit(pending_flags,
237-
BT_MESH_SETTINGS_MOD_PENDING)) {
238-
bt_mesh_model_pending_store();
239-
}
240-
241-
if (atomic_test_and_clear_bit(pending_flags,
242-
BT_MESH_SETTINGS_VA_PENDING)) {
243-
bt_mesh_va_pending_store();
244-
}
245-
246-
if (IS_ENABLED(CONFIG_BT_MESH_CDB) &&
247-
atomic_test_and_clear_bit(pending_flags,
248-
BT_MESH_SETTINGS_CDB_PENDING)) {
249-
bt_mesh_cdb_pending_store();
250-
}
251-
252-
if (IS_ENABLED(CONFIG_BT_MESH_OD_PRIV_PROXY_SRV) &&
253-
atomic_test_and_clear_bit(pending_flags,
254-
BT_MESH_SETTINGS_SRPL_PENDING)) {
255-
bt_mesh_srpl_pending_store();
256-
}
257-
258-
if (IS_ENABLED(CONFIG_BT_MESH_PROXY_SOLICITATION) &&
259-
atomic_test_and_clear_bit(pending_flags,
260-
BT_MESH_SETTINGS_SSEQ_PENDING)) {
261-
bt_mesh_sseq_pending_store();
262-
}
187+
static const struct {
188+
void (*handler)(void);
189+
} handlers[BT_MESH_SETTINGS_FLAG_COUNT] = {
190+
[BT_MESH_SETTINGS_RPL_PENDING] = { bt_mesh_rpl_pending_store_all_nodes },
191+
[BT_MESH_SETTINGS_NET_KEYS_PENDING] = { bt_mesh_subnet_pending_store },
192+
[BT_MESH_SETTINGS_APP_KEYS_PENDING] = { bt_mesh_app_key_pending_store },
193+
[BT_MESH_SETTINGS_NET_PENDING] = { bt_mesh_net_pending_net_store },
194+
[BT_MESH_SETTINGS_IV_PENDING] = { bt_mesh_net_pending_iv_store },
195+
[BT_MESH_SETTINGS_SEQ_PENDING] = { bt_mesh_net_pending_seq_store },
196+
[BT_MESH_SETTINGS_DEV_KEY_CAND_PENDING] = {
197+
bt_mesh_net_pending_dev_key_cand_store },
198+
[BT_MESH_SETTINGS_HB_PUB_PENDING] = { bt_mesh_hb_pub_pending_store },
199+
[BT_MESH_SETTINGS_CFG_PENDING] = { bt_mesh_cfg_pending_store },
200+
[BT_MESH_SETTINGS_COMP_PENDING] = { bt_mesh_comp_data_pending_clear },
201+
[BT_MESH_SETTINGS_MOD_PENDING] = { bt_mesh_model_pending_store },
202+
[BT_MESH_SETTINGS_VA_PENDING] = { bt_mesh_va_pending_store },
203+
[BT_MESH_SETTINGS_CDB_PENDING] = {
204+
IS_ENABLED(CONFIG_BT_MESH_CDB) ?
205+
bt_mesh_cdb_pending_store : NULL },
206+
[BT_MESH_SETTINGS_SRPL_PENDING] = {
207+
IS_ENABLED(CONFIG_BT_MESH_OD_PRIV_PROXY_SRV) ?
208+
bt_mesh_srpl_pending_store : NULL },
209+
[BT_MESH_SETTINGS_SSEQ_PENDING] = {
210+
IS_ENABLED(CONFIG_BT_MESH_PROXY_SOLICITATION) ?
211+
bt_mesh_sseq_pending_store : NULL },
212+
[BT_MESH_SETTINGS_BRG_PENDING] = {
213+
IS_ENABLED(CONFIG_BT_MESH_BRG_CFG_SRV) ?
214+
bt_mesh_brg_cfg_pending_store : NULL },
215+
};
216+
217+
for (int i = 0; i < ARRAY_SIZE(handlers); i++) {
218+
if (!handlers[i].handler) {
219+
continue;
220+
}
263221

264-
if (IS_ENABLED(CONFIG_BT_MESH_BRG_CFG_SRV) &&
265-
atomic_test_and_clear_bit(pending_flags, BT_MESH_SETTINGS_BRG_PENDING)) {
266-
bt_mesh_brg_cfg_pending_store();
222+
if (atomic_test_and_clear_bit(pending_flags, i)) {
223+
handlers[i].handler();
224+
}
267225
}
268226
}
269227

0 commit comments

Comments
 (0)