From 3abd9c364afc842ddc9a790b03f34bd7206e0965 Mon Sep 17 00:00:00 2001 From: Juha Heiskanen Date: Thu, 29 Dec 2022 14:00:00 +0200 Subject: [PATCH] net: lwm2m: LwM2M Object path equal API Added new API for check is 2 object path equal. Signed-off-by: Juha Heiskanen --- subsys/net/lib/lwm2m/lwm2m_observation.c | 14 +----------- subsys/net/lib/lwm2m/lwm2m_util.c | 27 ++++++++++++++++++++++++ subsys/net/lib/lwm2m/lwm2m_util.h | 1 + 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/subsys/net/lib/lwm2m/lwm2m_observation.c b/subsys/net/lib/lwm2m/lwm2m_observation.c index 6157df17ae6..b53590adc33 100644 --- a/subsys/net/lib/lwm2m/lwm2m_observation.c +++ b/subsys/net/lib/lwm2m/lwm2m_observation.c @@ -1468,18 +1468,6 @@ void lwm2m_engine_free_list(sys_slist_t *path_list, sys_slist_t *free_list) } } -static bool lwm2m_path_object_compare(struct lwm2m_obj_path *path, - struct lwm2m_obj_path *compare_path) -{ - if (path->level != compare_path->level || path->obj_id != compare_path->obj_id || - path->obj_inst_id != compare_path->obj_inst_id || - path->res_id != compare_path->res_id || - path->res_inst_id != compare_path->res_inst_id) { - return false; - } - return true; -} - void lwm2m_engine_path_list_init(sys_slist_t *lwm2m_path_list, sys_slist_t *lwm2m_free_list, struct lwm2m_obj_path_list path_object_buf[], uint8_t path_object_size) @@ -1519,7 +1507,7 @@ int lwm2m_engine_add_path_to_list(sys_slist_t *lwm2m_path_list, sys_slist_t *lwm /* Keep list Ordered by Object ID/ Object instance/ resource ID */ SYS_SLIST_FOR_EACH_CONTAINER(lwm2m_path_list, entry, node) { if (entry->path.level == LWM2M_PATH_LEVEL_NONE || - lwm2m_path_object_compare(&entry->path, &new_entry->path)) { + lwm2m_obj_path_equal(&entry->path, &new_entry->path)) { /* Already Root request at list or current path is at list */ sys_slist_append(lwm2m_free_list, &new_entry->node); return 0; diff --git a/subsys/net/lib/lwm2m/lwm2m_util.c b/subsys/net/lib/lwm2m/lwm2m_util.c index 5dc5ab0f697..986490ad1c1 100644 --- a/subsys/net/lib/lwm2m/lwm2m_util.c +++ b/subsys/net/lib/lwm2m/lwm2m_util.c @@ -551,3 +551,30 @@ int lwm2m_string_to_path(const char *pathstr, struct lwm2m_obj_path *path, return 0; } + +bool lwm2m_obj_path_equal(struct lwm2m_obj_path *a, struct lwm2m_obj_path *b) +{ + uint8_t level = a->level; + + if (a->level != b->level) { + return false; + } + + if (level >= LWM2M_PATH_LEVEL_OBJECT && (a->obj_id != b->obj_id)) { + return false; + } + + if (level >= LWM2M_PATH_LEVEL_OBJECT_INST && (a->obj_inst_id != b->obj_inst_id)) { + return false; + } + + if (level >= LWM2M_PATH_LEVEL_RESOURCE && (a->res_id != b->res_id)) { + return false; + } + + if (level >= LWM2M_PATH_LEVEL_RESOURCE_INST && (a->res_inst_id != b->res_inst_id)) { + return false; + } + + return true; +} diff --git a/subsys/net/lib/lwm2m/lwm2m_util.h b/subsys/net/lib/lwm2m/lwm2m_util.h index 3fda7a47e35..0f41ba7b172 100644 --- a/subsys/net/lib/lwm2m/lwm2m_util.h +++ b/subsys/net/lib/lwm2m/lwm2m_util.h @@ -33,4 +33,5 @@ int lwm2m_path_to_string(char *buf, size_t buf_size, struct lwm2m_obj_path *inpu int lwm2m_string_to_path(const char *pathstr, struct lwm2m_obj_path *path, char delim); +bool lwm2m_obj_path_equal(struct lwm2m_obj_path *a, struct lwm2m_obj_path *b); #endif /* LWM2M_UTIL_H_ */