diff --git a/include/zephyr/net/lwm2m.h b/include/zephyr/net/lwm2m.h index 305861dda95..c60bcd5b1a8 100644 --- a/include/zephyr/net/lwm2m.h +++ b/include/zephyr/net/lwm2m.h @@ -1667,6 +1667,8 @@ int lwm2m_register_delete_callback(uint16_t obj_id, /** * @brief Set data buffer for a resource * + * @deprecated Use lwm2m_set_res_buf() instead. + * * Use this function to set the data buffer and flags for the specified LwM2M * resource. * @@ -1678,6 +1680,7 @@ int lwm2m_register_delete_callback(uint16_t obj_id, * * @return 0 for success or negative in case of error. */ +__deprecated int lwm2m_engine_set_res_buf(const char *pathstr, void *buffer_ptr, uint16_t buffer_len, uint16_t data_len, uint8_t data_flags); @@ -1687,7 +1690,24 @@ int lwm2m_engine_set_res_buf(const char *pathstr, void *buffer_ptr, uint16_t buf * Use this function to set the data buffer and flags for the specified LwM2M * resource. * - * @deprecated Use lwm2m_engine_set_res_buf() instead, so you can define buffer size and data size + * @param[in] path LwM2M path as a struct + * @param[in] buffer_ptr Data buffer pointer + * @param[in] buffer_len Length of buffer + * @param[in] data_len Length of existing data in the buffer + * @param[in] data_flags Data buffer flags (such as read-only, etc) + * + * @return 0 for success or negative in case of error. + */ +int lwm2m_set_res_buf(const struct lwm2m_obj_path *path, void *buffer_ptr, uint16_t buffer_len, + uint16_t data_len, uint8_t data_flags); + +/** + * @brief Set data buffer for a resource + * + * Use this function to set the data buffer and flags for the specified LwM2M + * resource. + * + * @deprecated Use lwm2m_set_res_buf() instead, so you can define buffer size and data size * separately. * * @param[in] pathstr LwM2M path string "obj/obj-inst/res(/res-inst)" @@ -1704,6 +1724,8 @@ int lwm2m_engine_set_res_data(const char *pathstr, void *data_ptr, uint16_t data /** * @brief Update data size for a resource * + * @deprecated Use lwm2m_set_res_data_len() instead. + * * Use this function to set the new size of data in the buffer if you write * to a buffer received by lwm2m_engine_get_res_buf(). * @@ -1711,11 +1733,26 @@ int lwm2m_engine_set_res_data(const char *pathstr, void *data_ptr, uint16_t data * @param[in] data_len Length of data * @return 0 for success or negative in case of error. */ +__deprecated int lwm2m_engine_set_res_data_len(const char *pathstr, uint16_t data_len); +/** + * @brief Update data size for a resource + * + * Use this function to set the new size of data in the buffer if you write + * to a buffer received by lwm2m_engine_get_res_buf(). + * + * @param[in] path LwM2M path as a struct + * @param[in] data_len Length of data + * @return 0 for success or negative in case of error. + */ +int lwm2m_set_res_data_len(const struct lwm2m_obj_path *path, uint16_t data_len); + /** * @brief Get data buffer for a resource * + * @deprecated Use lwm2m_get_res_buf() instead. + * * Use this function to get the data buffer information for the specified LwM2M * resource. * @@ -1732,6 +1769,7 @@ int lwm2m_engine_set_res_data_len(const char *pathstr, uint16_t data_len); * * @return 0 for success or negative in case of error. */ +__deprecated int lwm2m_engine_get_res_buf(const char *pathstr, void **buffer_ptr, uint16_t *buffer_len, uint16_t *data_len, uint8_t *data_flags); @@ -1741,7 +1779,29 @@ int lwm2m_engine_get_res_buf(const char *pathstr, void **buffer_ptr, uint16_t *b * Use this function to get the data buffer information for the specified LwM2M * resource. * - * @deprecated Use lwm2m_engine_get_res_buf() as it can tell you the size of the buffer as well. + * If you directly write into the buffer, you must use lwm2m_set_res_data_len() + * function to update the new size of the written data. + * + * All parameters, except for the pathstr, can be NULL if you don't want to read those values. + * + * @param[in] path LwM2M path as a struct + * @param[out] buffer_ptr Data buffer pointer + * @param[out] buffer_len Length of buffer + * @param[out] data_len Length of existing data in the buffer + * @param[out] data_flags Data buffer flags (such as read-only, etc) + * + * @return 0 for success or negative in case of error. + */ +int lwm2m_get_res_buf(const struct lwm2m_obj_path *path, void **buffer_ptr, uint16_t *buffer_len, + uint16_t *data_len, uint8_t *data_flags); + +/** + * @brief Get data buffer for a resource + * + * Use this function to get the data buffer information for the specified LwM2M + * resource. + * + * @deprecated Use lwm2m_get_res_buf() as it can tell you the size of the buffer as well. * * @param[in] pathstr LwM2M path string "obj/obj-inst/res(/res-inst)" * @param[out] data_ptr Data buffer pointer diff --git a/subsys/net/lib/lwm2m/lwm2m_registry.c b/subsys/net/lib/lwm2m/lwm2m_registry.c index 6e33d49bdc8..8e620dda25c 100644 --- a/subsys/net/lib/lwm2m/lwm2m_registry.c +++ b/subsys/net/lib/lwm2m/lwm2m_registry.c @@ -439,34 +439,27 @@ int path_to_objs(const struct lwm2m_obj_path *path, struct lwm2m_engine_obj_inst } /* User data setter functions */ -int lwm2m_engine_set_res_buf(const char *pathstr, void *buffer_ptr, uint16_t buffer_len, - uint16_t data_len, uint8_t data_flags) +int lwm2m_set_res_buf(const struct lwm2m_obj_path *path, void *buffer_ptr, uint16_t buffer_len, + uint16_t data_len, uint8_t data_flags) { - struct lwm2m_obj_path path; + int ret; struct lwm2m_engine_res_inst *res_inst = NULL; - int ret = 0; - /* translate path -> path_obj */ - ret = lwm2m_string_to_path(pathstr, &path, '/'); - if (ret < 0) { - return ret; - } - - if (path.level < LWM2M_PATH_LEVEL_RESOURCE) { + if (path->level < LWM2M_PATH_LEVEL_RESOURCE) { LOG_ERR("path must have at least 3 parts"); return -EINVAL; } k_mutex_lock(®istry_lock, K_FOREVER); /* look up resource obj */ - ret = path_to_objs(&path, NULL, NULL, NULL, &res_inst); + ret = path_to_objs(path, NULL, NULL, NULL, &res_inst); if (ret < 0) { k_mutex_unlock(®istry_lock); return ret; } if (!res_inst) { - LOG_ERR("res instance %d not found", path.res_inst_id); + LOG_ERR("res instance %d not found", path->res_inst_id); k_mutex_unlock(®istry_lock); return -ENOENT; } @@ -481,10 +474,34 @@ int lwm2m_engine_set_res_buf(const char *pathstr, void *buffer_ptr, uint16_t buf return ret; } +int lwm2m_engine_set_res_buf(const char *pathstr, void *buffer_ptr, uint16_t buffer_len, + uint16_t data_len, uint8_t data_flags) +{ + struct lwm2m_obj_path path; + int ret = 0; + + /* translate path -> path_obj */ + ret = lwm2m_string_to_path(pathstr, &path, '/'); + if (ret < 0) { + return ret; + } + + return lwm2m_set_res_buf(&path, buffer_ptr, buffer_len, data_len, data_flags); +} + int lwm2m_engine_set_res_data(const char *pathstr, void *data_ptr, uint16_t data_len, uint8_t data_flags) { - return lwm2m_engine_set_res_buf(pathstr, data_ptr, data_len, data_len, data_flags); + struct lwm2m_obj_path path; + int ret = 0; + + /* translate path -> path_obj */ + ret = lwm2m_string_to_path(pathstr, &path, '/'); + if (ret < 0) { + return ret; + } + + return lwm2m_set_res_buf(&path, data_ptr, data_len, data_len, data_flags); } static bool lwm2m_validate_time_resource_lenghts(uint16_t resource_length, uint16_t buf_length) @@ -959,7 +976,7 @@ int lwm2m_engine_set_time(const char *pathstr, time_t value) return lwm2m_set_time(&path, value); } -int lwm2m_engine_set_res_data_len(const char *pathstr, uint16_t data_len) +int lwm2m_set_res_data_len(const struct lwm2m_obj_path *path, uint16_t data_len) { int ret; void *buffer_ptr; @@ -967,19 +984,16 @@ int lwm2m_engine_set_res_data_len(const char *pathstr, uint16_t data_len) uint16_t old_len; uint8_t data_flags; - ret = lwm2m_engine_get_res_buf(pathstr, &buffer_ptr, &buffer_len, &old_len, &data_flags); + ret = lwm2m_get_res_buf(path, &buffer_ptr, &buffer_len, &old_len, &data_flags); if (ret) { return ret; } - return lwm2m_engine_set_res_buf(pathstr, buffer_ptr, buffer_len, data_len, data_flags); + return lwm2m_set_res_buf(path, buffer_ptr, buffer_len, data_len, data_flags); } -/* User data getter functions */ -int lwm2m_engine_get_res_buf(const char *pathstr, void **buffer_ptr, uint16_t *buffer_len, - uint16_t *data_len, uint8_t *data_flags) +int lwm2m_engine_set_res_data_len(const char *pathstr, uint16_t data_len) { struct lwm2m_obj_path path; - struct lwm2m_engine_res_inst *res_inst = NULL; int ret = 0; /* translate path -> path_obj */ @@ -988,21 +1002,31 @@ int lwm2m_engine_get_res_buf(const char *pathstr, void **buffer_ptr, uint16_t *b return ret; } - if (path.level < LWM2M_PATH_LEVEL_RESOURCE) { + return lwm2m_set_res_data_len(&path, data_len); +} +/* User data getter functions */ + +int lwm2m_get_res_buf(const struct lwm2m_obj_path *path, void **buffer_ptr, uint16_t *buffer_len, + uint16_t *data_len, uint8_t *data_flags) +{ + int ret; + struct lwm2m_engine_res_inst *res_inst = NULL; + + if (path->level < LWM2M_PATH_LEVEL_RESOURCE) { LOG_ERR("path must have at least 3 parts"); return -EINVAL; } k_mutex_lock(®istry_lock, K_FOREVER); /* look up resource obj */ - ret = path_to_objs(&path, NULL, NULL, NULL, &res_inst); + ret = path_to_objs(path, NULL, NULL, NULL, &res_inst); if (ret < 0) { k_mutex_unlock(®istry_lock); return ret; } if (!res_inst) { - LOG_ERR("res instance %d not found", path.res_inst_id); + LOG_ERR("res instance %d not found", path->res_inst_id); k_mutex_unlock(®istry_lock); return -ENOENT; } @@ -1024,10 +1048,34 @@ int lwm2m_engine_get_res_buf(const char *pathstr, void **buffer_ptr, uint16_t *b return 0; } +int lwm2m_engine_get_res_buf(const char *pathstr, void **buffer_ptr, uint16_t *buffer_len, + uint16_t *data_len, uint8_t *data_flags) +{ + struct lwm2m_obj_path path; + int ret = 0; + + /* translate path -> path_obj */ + ret = lwm2m_string_to_path(pathstr, &path, '/'); + if (ret < 0) { + return ret; + } + + return lwm2m_get_res_buf(&path, buffer_ptr, buffer_len, data_len, data_flags); +} + int lwm2m_engine_get_res_data(const char *pathstr, void **data_ptr, uint16_t *data_len, uint8_t *data_flags) { - return lwm2m_engine_get_res_buf(pathstr, data_ptr, NULL, data_len, data_flags); + struct lwm2m_obj_path path; + int ret = 0; + + /* translate path -> path_obj */ + ret = lwm2m_string_to_path(pathstr, &path, '/'); + if (ret < 0) { + return ret; + } + + return lwm2m_get_res_buf(&path, data_ptr, NULL, data_len, data_flags); } static int lwm2m_engine_get(const struct lwm2m_obj_path *path, void *buf, uint16_t buflen)