net: lib: lwm2m: Deprecate buffer set get API

Deprecate old API and make new API using path structs
instead of using old string reference based paths.

Signed-off-by: Jarno Lämsä <jarno.lamsa@nordicsemi.no>
This commit is contained in:
Jarno Lämsä 2023-01-05 09:44:19 +02:00 committed by Carles Cufí
commit 49cf96858f
2 changed files with 135 additions and 27 deletions

View file

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

View file

@ -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(&registry_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(&registry_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(&registry_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(&registry_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(&registry_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(&registry_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)