net: lwm2m: Inteagrate LwM2M new API's
Remove local path to string and string to path functionality and use utility library API. Signed-off-by: Juha Heiskanen <juha.heiskanen@nordicsemi.no>
This commit is contained in:
parent
c95dd9a9c5
commit
0b38be9d3a
2 changed files with 11 additions and 138 deletions
|
@ -858,52 +858,6 @@ int do_read_op_json(struct lwm2m_message *msg, int content_format)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_path(const uint8_t *buf, uint16_t buflen,
|
|
||||||
struct lwm2m_obj_path *path)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
int pos = 0;
|
|
||||||
uint16_t val;
|
|
||||||
uint8_t c = 0U;
|
|
||||||
|
|
||||||
(void)memset(path, 0, sizeof(*path));
|
|
||||||
do {
|
|
||||||
val = 0U;
|
|
||||||
c = buf[pos];
|
|
||||||
/* we should get a value first - consume all numbers */
|
|
||||||
while (pos < buflen && isdigit(c)) {
|
|
||||||
val = val * 10U + (c - '0');
|
|
||||||
c = buf[++pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* slash will mote thing forward */
|
|
||||||
if (pos == 0 && c == '/') {
|
|
||||||
/* skip leading slashes */
|
|
||||||
pos++;
|
|
||||||
} else if (c == '/' || pos == buflen) {
|
|
||||||
LOG_DBG("Setting %u = %u", ret, val);
|
|
||||||
if (ret == 0) {
|
|
||||||
path->obj_id = val;
|
|
||||||
} else if (ret == 1) {
|
|
||||||
path->obj_inst_id = val;
|
|
||||||
} else if (ret == 2) {
|
|
||||||
path->res_id = val;
|
|
||||||
} else if (ret == 3) {
|
|
||||||
path->res_inst_id = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret++;
|
|
||||||
pos++;
|
|
||||||
} else {
|
|
||||||
LOG_ERR("Error: illegal char '%c' at pos:%d",
|
|
||||||
c, pos);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
} while (pos < buflen);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int do_write_op_json(struct lwm2m_message *msg)
|
int do_write_op_json(struct lwm2m_message *msg)
|
||||||
{
|
{
|
||||||
struct lwm2m_engine_obj_field *obj_field = NULL;
|
struct lwm2m_engine_obj_field *obj_field = NULL;
|
||||||
|
@ -998,15 +952,11 @@ int do_write_op_json(struct lwm2m_message *msg)
|
||||||
created = 0U;
|
created = 0U;
|
||||||
|
|
||||||
/* parse full_name into path */
|
/* parse full_name into path */
|
||||||
ret = parse_path(full_name, strlen(full_name),
|
ret = lwm2m_string_to_path(full_name, &msg->path, '/');
|
||||||
&msg->path);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if valid, use the return value as level */
|
|
||||||
msg->path.level = ret;
|
|
||||||
|
|
||||||
ret = lwm2m_get_or_create_engine_obj(msg, &obj_inst,
|
ret = lwm2m_get_or_create_engine_obj(msg, &obj_inst,
|
||||||
&created);
|
&created);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
|
|
@ -76,8 +76,6 @@ struct json_in_formatter_data {
|
||||||
/* some temporary buffer space for format conversions */
|
/* some temporary buffer space for format conversions */
|
||||||
static char json_buffer[TOKEN_BUF_LEN];
|
static char json_buffer[TOKEN_BUF_LEN];
|
||||||
|
|
||||||
static int parse_path(const uint8_t *buf, uint16_t buflen, struct lwm2m_obj_path *path);
|
|
||||||
|
|
||||||
static void json_add_char(struct lwm2m_input_context *in, struct json_in_formatter_data *fd)
|
static void json_add_char(struct lwm2m_input_context *in, struct json_in_formatter_data *fd)
|
||||||
{
|
{
|
||||||
if ((fd->json_flags & T_VALUE) ||
|
if ((fd->json_flags & T_VALUE) ||
|
||||||
|
@ -1101,50 +1099,6 @@ int do_read_op_senml_json(struct lwm2m_message *msg)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int parse_path(const uint8_t *buf, uint16_t buflen, struct lwm2m_obj_path *path)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
int pos = 0;
|
|
||||||
uint16_t val;
|
|
||||||
uint8_t c = 0U;
|
|
||||||
|
|
||||||
(void)memset(path, 0, sizeof(*path));
|
|
||||||
do {
|
|
||||||
val = 0U;
|
|
||||||
c = buf[pos];
|
|
||||||
/* we should get a value first - consume all numbers */
|
|
||||||
while (pos < buflen && isdigit(c)) {
|
|
||||||
val = val * 10U + (c - '0');
|
|
||||||
c = buf[++pos];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* slash will mote thing forward */
|
|
||||||
if (pos == 0 && c == '/') {
|
|
||||||
/* skip leading slashes */
|
|
||||||
pos++;
|
|
||||||
} else if (c == '/' || pos == buflen) {
|
|
||||||
LOG_DBG("Setting %u = %u", ret, val);
|
|
||||||
if (ret == LWM2M_PATH_LEVEL_NONE) {
|
|
||||||
path->obj_id = val;
|
|
||||||
} else if (ret == LWM2M_PATH_LEVEL_OBJECT) {
|
|
||||||
path->obj_inst_id = val;
|
|
||||||
} else if (ret == LWM2M_PATH_LEVEL_OBJECT_INST) {
|
|
||||||
path->res_id = val;
|
|
||||||
} else if (ret == LWM2M_PATH_LEVEL_RESOURCE) {
|
|
||||||
path->res_inst_id = val;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret++;
|
|
||||||
pos++;
|
|
||||||
} else {
|
|
||||||
LOG_ERR("Error: illegal char '%c' at pos:%d", c, pos);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} while (pos < buflen);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int lwm2m_senml_write_operation(struct lwm2m_message *msg, struct json_in_formatter_data *fd)
|
static int lwm2m_senml_write_operation(struct lwm2m_message *msg, struct json_in_formatter_data *fd)
|
||||||
{
|
{
|
||||||
struct lwm2m_engine_obj_field *obj_field = NULL;
|
struct lwm2m_engine_obj_field *obj_field = NULL;
|
||||||
|
@ -1210,32 +1164,6 @@ static int lwm2m_senml_write_operation(struct lwm2m_message *msg, struct json_in
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int senml_json_path_to_string(uint8_t *buf, size_t buf_len, struct lwm2m_obj_path *path,
|
|
||||||
uint8_t path_level)
|
|
||||||
{
|
|
||||||
int name_length;
|
|
||||||
|
|
||||||
if (path_level == LWM2M_PATH_LEVEL_NONE) {
|
|
||||||
name_length = snprintk(buf, buf_len, "/");
|
|
||||||
} else if (path_level == LWM2M_PATH_LEVEL_OBJECT) {
|
|
||||||
name_length = snprintk(buf, buf_len, "/%u/", path->obj_id);
|
|
||||||
} else if (path_level == LWM2M_PATH_LEVEL_OBJECT_INST) {
|
|
||||||
name_length = snprintk(buf, buf_len, "/%u/%u/", path->obj_id, path->obj_inst_id);
|
|
||||||
} else if (path_level == LWM2M_PATH_LEVEL_RESOURCE) {
|
|
||||||
name_length = snprintk(buf, buf_len, "/%u/%u/%u", path->obj_id, path->obj_inst_id,
|
|
||||||
path->res_id);
|
|
||||||
} else {
|
|
||||||
name_length = snprintk(buf, buf_len, "/%u/%u/%u/%u", path->obj_id,
|
|
||||||
path->obj_inst_id, path->res_id, path->res_inst_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name_length > 0) {
|
|
||||||
buf[name_length] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
return name_length;
|
|
||||||
}
|
|
||||||
|
|
||||||
int do_write_op_senml_json(struct lwm2m_message *msg)
|
int do_write_op_senml_json(struct lwm2m_message *msg)
|
||||||
{
|
{
|
||||||
struct json_in_formatter_data fd;
|
struct json_in_formatter_data fd;
|
||||||
|
@ -1259,7 +1187,7 @@ int do_write_op_senml_json(struct lwm2m_message *msg)
|
||||||
/* Re-load Base name and Name data from context block */
|
/* Re-load Base name and Name data from context block */
|
||||||
if (block_ctx->base_name_stored) {
|
if (block_ctx->base_name_stored) {
|
||||||
/* base name path generate to string */
|
/* base name path generate to string */
|
||||||
name_length = senml_json_path_to_string(base_name, sizeof(base_name),
|
name_length = lwm2m_path_to_string(base_name, sizeof(base_name),
|
||||||
&block_ctx->base_name_path,
|
&block_ctx->base_name_path,
|
||||||
block_ctx->base_name_path.level);
|
block_ctx->base_name_path.level);
|
||||||
|
|
||||||
|
@ -1271,19 +1199,18 @@ int do_write_op_senml_json(struct lwm2m_message *msg)
|
||||||
if (block_ctx->base_name_path.level >= LWM2M_PATH_LEVEL_RESOURCE &&
|
if (block_ctx->base_name_path.level >= LWM2M_PATH_LEVEL_RESOURCE &&
|
||||||
!block_ctx->full_name_true) {
|
!block_ctx->full_name_true) {
|
||||||
memcpy(full_name, base_name, MAX_RESOURCE_LEN + 1);
|
memcpy(full_name, base_name, MAX_RESOURCE_LEN + 1);
|
||||||
ret = parse_path(full_name, strlen(full_name), &resource_path);
|
ret = lwm2m_string_to_path(full_name, &resource_path, '/');
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto end_of_operation;
|
goto end_of_operation;
|
||||||
}
|
}
|
||||||
resource_path.level = ret;
|
|
||||||
path_valid = true;
|
path_valid = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block_ctx->full_name_true) {
|
if (block_ctx->full_name_true) {
|
||||||
/* full name path generate to string */
|
/* full name path generate to string */
|
||||||
name_length = senml_json_path_to_string(full_name, sizeof(full_name),
|
name_length = lwm2m_path_to_string(full_name, sizeof(full_name),
|
||||||
&block_ctx->base_name_path,
|
&block_ctx->base_name_path,
|
||||||
block_ctx->resource_path_level);
|
block_ctx->resource_path_level);
|
||||||
|
|
||||||
|
@ -1292,12 +1219,11 @@ int do_write_op_senml_json(struct lwm2m_message *msg)
|
||||||
goto end_of_operation;
|
goto end_of_operation;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = parse_path(full_name, strlen(full_name), &resource_path);
|
ret = lwm2m_string_to_path(full_name, &resource_path, '/');
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto end_of_operation;
|
goto end_of_operation;
|
||||||
}
|
}
|
||||||
resource_path.level = ret;
|
|
||||||
path_valid = true;
|
path_valid = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1328,13 +1254,12 @@ int do_write_op_senml_json(struct lwm2m_message *msg)
|
||||||
base_name[fd.value_len] = '\0';
|
base_name[fd.value_len] = '\0';
|
||||||
/* Relative name is optional - preinitialize full name with base name */
|
/* Relative name is optional - preinitialize full name with base name */
|
||||||
snprintk(full_name, sizeof(full_name), "%s", base_name);
|
snprintk(full_name, sizeof(full_name), "%s", base_name);
|
||||||
ret = parse_path(full_name, strlen(full_name), &resource_path);
|
ret = lwm2m_string_to_path(full_name, &resource_path, '/');
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
LOG_ERR("Relative name too long");
|
LOG_ERR("Relative name too long");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto end_of_operation;
|
goto end_of_operation;
|
||||||
}
|
}
|
||||||
resource_path.level = ret;
|
|
||||||
|
|
||||||
if (resource_path.level) {
|
if (resource_path.level) {
|
||||||
path_valid = true;
|
path_valid = true;
|
||||||
|
@ -1367,13 +1292,12 @@ int do_write_op_senml_json(struct lwm2m_message *msg)
|
||||||
|
|
||||||
/* combine base_name + name */
|
/* combine base_name + name */
|
||||||
snprintk(full_name, sizeof(full_name), "%s%s", base_name, name);
|
snprintk(full_name, sizeof(full_name), "%s%s", base_name, name);
|
||||||
ret = parse_path(full_name, strlen(full_name), &resource_path);
|
ret = lwm2m_string_to_path(full_name, &resource_path, '/');
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
LOG_ERR("Relative name too long");
|
LOG_ERR("Relative name too long");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto end_of_operation;
|
goto end_of_operation;
|
||||||
}
|
}
|
||||||
resource_path.level = ret;
|
|
||||||
|
|
||||||
if (block_ctx) {
|
if (block_ctx) {
|
||||||
/* Store Resource data Path to base name path but
|
/* Store Resource data Path to base name path but
|
||||||
|
@ -1511,11 +1435,10 @@ static uint8_t json_parse_composite_read_paths(struct lwm2m_message *msg,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (path_valid) {
|
if (path_valid) {
|
||||||
ret = parse_path(full_name, strlen(full_name), &path);
|
ret = lwm2m_string_to_path(full_name, &path, '/');
|
||||||
if (ret >= 0) {
|
if (ret == 0) {
|
||||||
path.level = ret;
|
if (lwm2m_engine_add_path_to_list(
|
||||||
if (lwm2m_engine_add_path_to_list(lwm_path_list, lwm_path_free_list,
|
lwm2m_path_list, lwm2m_path_free_list, &path) == 0) {
|
||||||
&path) == 0) {
|
|
||||||
valid_path_cnt++;
|
valid_path_cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue