This changes the prototypes for mesh_config_model_binding_add() and mesh_config_model_binding_del() to take the element's address as input parameter instead of the element's index. The change aligns the API with other functions that handle storage of model states. --- mesh/mesh-config-json.c | 34 ++++++++++++++++++++++------------ mesh/mesh-config.h | 11 ++++++----- mesh/model.c | 7 ++----- 3 files changed, 30 insertions(+), 22 deletions(-) diff --git a/mesh/mesh-config-json.c b/mesh/mesh-config-json.c index cafa2fdd7..4fe05a802 100644 --- a/mesh/mesh-config-json.c +++ b/mesh/mesh-config-json.c @@ -835,11 +835,12 @@ bool mesh_config_app_key_del(struct mesh_config *cfg, uint16_t net_idx, return save_config(jnode, cfg->node_dir_path); } -bool mesh_config_model_binding_add(struct mesh_config *cfg, uint8_t ele_idx, - bool vendor, uint32_t mod_id, +bool mesh_config_model_binding_add(struct mesh_config *cfg, uint16_t ele_addr, + bool vendor, uint32_t mod_id, uint16_t app_idx) { json_object *jnode, *jmodel, *jstring, *jarray = NULL; + int ele_idx; char buf[5]; if (!cfg) @@ -847,6 +848,10 @@ bool mesh_config_model_binding_add(struct mesh_config *cfg, uint8_t ele_idx, jnode = cfg->jnode; + ele_idx = get_element_index(jnode, ele_addr); + if (ele_idx < 0) + return false; + jmodel = get_element_model(jnode, ele_idx, mod_id, vendor); if (!jmodel) return false; @@ -875,11 +880,12 @@ bool mesh_config_model_binding_add(struct mesh_config *cfg, uint8_t ele_idx, return save_config(jnode, cfg->node_dir_path); } -bool mesh_config_model_binding_del(struct mesh_config *cfg, uint8_t ele_idx, - bool vendor, uint32_t mod_id, +bool mesh_config_model_binding_del(struct mesh_config *cfg, uint8_t ele_addr, + bool vendor, uint32_t mod_id, uint16_t app_idx) { json_object *jnode, *jmodel, *jarray, *jarray_new; + int ele_idx; char buf[5]; if (!cfg) @@ -887,6 +893,10 @@ bool mesh_config_model_binding_del(struct mesh_config *cfg, uint8_t ele_idx, jnode = cfg->jnode; + ele_idx = get_element_index(jnode, ele_addr); + if (ele_idx < 0) + return false; + jmodel = get_element_model(jnode, ele_idx, mod_id, vendor); if (!jmodel) return false; @@ -1818,7 +1828,7 @@ bool mesh_config_net_key_set_phase(struct mesh_config *cfg, uint16_t idx, return save_config(jnode, cfg->node_dir_path); } -bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t addr, +bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor, struct mesh_config_pub *pub) { @@ -1831,7 +1841,7 @@ bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t addr, jnode = cfg->jnode; - ele_idx = get_element_index(jnode, addr); + ele_idx = get_element_index(jnode, ele_addr); if (ele_idx < 0) return false; @@ -1886,13 +1896,13 @@ fail: return false; } -static bool delete_model_property(json_object *jnode, uint16_t addr, +static bool delete_model_property(json_object *jnode, uint16_t ele_addr, uint32_t mod_id, bool vendor, const char *keyword) { json_object *jmodel; int ele_idx; - ele_idx = get_element_index(jnode, addr); + ele_idx = get_element_index(jnode, ele_addr); if (ele_idx < 0) return false; @@ -1915,7 +1925,7 @@ bool mesh_config_model_pub_del(struct mesh_config *cfg, uint16_t addr, return save_config(cfg->jnode, cfg->node_dir_path); } -bool mesh_config_model_sub_add(struct mesh_config *cfg, uint16_t addr, +bool mesh_config_model_sub_add(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor, struct mesh_config_sub *sub) { @@ -1928,7 +1938,7 @@ bool mesh_config_model_sub_add(struct mesh_config *cfg, uint16_t addr, jnode = cfg->jnode; - ele_idx = get_element_index(jnode, addr); + ele_idx = get_element_index(jnode, ele_addr); if (ele_idx < 0) return false; @@ -1966,7 +1976,7 @@ bool mesh_config_model_sub_add(struct mesh_config *cfg, uint16_t addr, return save_config(jnode, cfg->node_dir_path); } -bool mesh_config_model_sub_del(struct mesh_config *cfg, uint16_t addr, +bool mesh_config_model_sub_del(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor, struct mesh_config_sub *sub) { @@ -1979,7 +1989,7 @@ bool mesh_config_model_sub_del(struct mesh_config *cfg, uint16_t addr, jnode = cfg->jnode; - ele_idx = get_element_index(jnode, addr); + ele_idx = get_element_index(jnode, ele_addr); if (ele_idx < 0) return false; diff --git a/mesh/mesh-config.h b/mesh/mesh-config.h index cf1f8b299..595e53b3a 100644 --- a/mesh/mesh-config.h +++ b/mesh/mesh-config.h @@ -104,6 +104,7 @@ struct mesh_config_node { uint8_t dev_key[16]; uint8_t token[8]; }; + typedef void (*mesh_config_status_func_t)(void *user_data, bool result); typedef bool (*mesh_config_node_func_t)(struct mesh_config_node *node, const uint8_t uuid[16], @@ -136,10 +137,10 @@ bool mesh_config_write_relay_mode(struct mesh_config *cfg, uint8_t mode, bool mesh_config_write_ttl(struct mesh_config *cfg, uint8_t ttl); bool mesh_config_write_mode(struct mesh_config *cfg, const char *keyword, int value); -bool mesh_config_model_binding_add(struct mesh_config *cfg, uint8_t ele_idx, +bool mesh_config_model_binding_add(struct mesh_config *cfg, uint16_t ele_addr, bool vendor, uint32_t mod_id, uint16_t app_idx); -bool mesh_config_model_binding_del(struct mesh_config *cfg, uint8_t ele_idx, +bool mesh_config_model_binding_del(struct mesh_config *cfg, uint8_t ele_addr, bool vendor, uint32_t mod_id, uint16_t app_idx); bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t ele_addr, @@ -147,13 +148,13 @@ bool mesh_config_model_pub_add(struct mesh_config *cfg, uint16_t ele_addr, struct mesh_config_pub *pub); bool mesh_config_model_pub_del(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor); -bool mesh_config_model_sub_add(struct mesh_config *cfg, uint16_t addr, +bool mesh_config_model_sub_add(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor, struct mesh_config_sub *sub); -bool mesh_config_model_sub_del(struct mesh_config *cfg, uint16_t addr, +bool mesh_config_model_sub_del(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor, struct mesh_config_sub *sub); -bool mesh_config_model_sub_del_all(struct mesh_config *cfg, uint16_t addr, +bool mesh_config_model_sub_del_all(struct mesh_config *cfg, uint16_t ele_addr, uint32_t mod_id, bool vendor); bool mesh_config_app_key_add(struct mesh_config *cfg, uint16_t net_idx, uint16_t app_idx, const uint8_t key[16]); diff --git a/mesh/model.c b/mesh/model.c index a06b684a5..f4b856108 100644 --- a/mesh/model.c +++ b/mesh/model.c @@ -561,7 +561,6 @@ static int update_binding(struct mesh_node *node, uint16_t addr, uint32_t id, int status; struct mesh_model *mod; bool is_present, is_vendor; - uint8_t ele_idx; mod = find_model(node, addr, id, &status); if (!mod) { @@ -586,12 +585,10 @@ static int update_binding(struct mesh_node *node, uint16_t addr, uint32_t id, if (is_present && !unbind) return MESH_STATUS_SUCCESS; - ele_idx = (uint8_t) node_get_element_idx(node, addr); - if (unbind) { model_unbind_idx(node, mod, app_idx); if (!mesh_config_model_binding_del(node_config_get(node), - ele_idx, is_vendor, id, app_idx)) + addr, is_vendor, id, app_idx)) return MESH_STATUS_STORAGE_FAIL; return MESH_STATUS_SUCCESS; @@ -601,7 +598,7 @@ static int update_binding(struct mesh_node *node, uint16_t addr, uint32_t id, return MESH_STATUS_INSUFF_RESOURCES; if (!mesh_config_model_binding_add(node_config_get(node), - ele_idx, is_vendor, id, app_idx)) + addr, is_vendor, id, app_idx)) return MESH_STATUS_STORAGE_FAIL; model_bind_idx(node, mod, app_idx); -- 2.21.0