@@ -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