diff mbox series

[BlueZ,1/2] mesh: Fix model ID prior to calling mesh config functions

Message ID 20200812190317.102140-1-inga.stotland@intel.com
State New
Headers show
Series [BlueZ,1/2] mesh: Fix model ID prior to calling mesh config functions | expand

Commit Message

Inga Stotland Aug. 12, 2020, 7:03 p.m. UTC
Model IDs for SIG defined models need to be stripped off SIG_VENDOR
value used for internal housekeeping prior to calling functions
that save new model state in node configuration.

Also, remove duplicate statements for model lookup in node config.
---
 mesh/mesh-config-json.c |  7 +------
 mesh/model.c            | 12 ++++++++----
 2 files changed, 9 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/mesh/mesh-config-json.c b/mesh/mesh-config-json.c
index a40f92c01..086d618b1 100644
--- a/mesh/mesh-config-json.c
+++ b/mesh/mesh-config-json.c
@@ -169,11 +169,6 @@  static json_object *get_element_model(json_object *jnode, int ele_idx,
 	size_t len;
 	char buf[9];
 
-	if (!vendor)
-		snprintf(buf, 5, "%4.4x", (uint16_t)mod_id);
-	else
-		snprintf(buf, 9, "%8.8x", mod_id);
-
 	if (!json_object_object_get_ex(jnode, "elements", &jelements))
 		return NULL;
 
@@ -189,7 +184,7 @@  static json_object *get_element_model(json_object *jnode, int ele_idx,
 		return NULL;
 
 	if (!vendor) {
-		snprintf(buf, 5, "%4.4x", mod_id);
+		snprintf(buf, 5, "%4.4x", (uint16_t)mod_id);
 		len = 4;
 	} else {
 		snprintf(buf, 9, "%8.8x", mod_id);
diff --git a/mesh/model.c b/mesh/model.c
index 23afb93a8..136edb194 100644
--- a/mesh/model.c
+++ b/mesh/model.c
@@ -628,6 +628,7 @@  static int update_binding(struct mesh_node *node, uint16_t addr, uint32_t id,
 						uint16_t app_idx, bool unbind)
 {
 	struct mesh_model *mod;
+	bool vendor;
 	int ele_idx = node_get_element_idx(node, addr);
 
 	if (ele_idx < 0)
@@ -651,11 +652,15 @@  static int update_binding(struct mesh_node *node, uint16_t addr, uint32_t id,
 	if (unbind ^ has_binding(mod->bindings, app_idx))
 		return MESH_STATUS_SUCCESS;
 
+	vendor = IS_VENDOR(id);
+	id = vendor ? id : MODEL_ID(id);
+
 	if (unbind) {
 		model_unbind_idx(node, ele_idx, mod, app_idx);
+
 		if (!mesh_config_model_binding_del(node_config_get(node),
-							addr, IS_VENDOR(id),
-							id, app_idx))
+							addr, vendor, id,
+								app_idx))
 			return MESH_STATUS_STORAGE_FAIL;
 
 		l_debug("Unbind key %4.4x to model %8.8x", app_idx, mod->id);
@@ -666,13 +671,12 @@  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), addr,
-						IS_VENDOR(id), id, app_idx))
+						vendor, id, app_idx))
 		return MESH_STATUS_STORAGE_FAIL;
 
 	model_bind_idx(node, ele_idx, mod, app_idx);
 
 	return MESH_STATUS_SUCCESS;
-
 }
 
 static struct mesh_virtual *add_virtual(const uint8_t *v)