net: lwm2m: LwM2M Object path equal API

Added new API for check is 2 object path equal.

Signed-off-by: Juha Heiskanen <juha.heiskanen@nordicsemi.no>
This commit is contained in:
Juha Heiskanen 2022-12-29 14:00:00 +02:00 committed by Carles Cufí
commit 3abd9c364a
3 changed files with 29 additions and 13 deletions

View file

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

View file

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

View file

@ -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_ */