Skip to content

Commit

Permalink
[nrf fromtree] net: lwm2m: LwM2M RD client start and stop update
Browse files Browse the repository at this point in the history
Added return code for for lwm2m_rd_client_start() & lwm2m_rd_client_stop().

lwm2m_rd_client_start() return -EINPROGRESS when start is in progress and
0 for success.

lwm2m_rd_client_stop() return -EPERM when context is unknown and
0 for success.

Signed-off-by: Juha Heiskanen <juha.heiskanen@nordicsemi.no>
(cherry picked from commit 4ab692b)
  • Loading branch information
Juha Heiskanen authored and mbolivar-nordic committed May 19, 2022
1 parent 8f43bd0 commit 19915ba
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 6 deletions.
9 changes: 7 additions & 2 deletions include/zephyr/net/lwm2m.h
Original file line number Diff line number Diff line change
Expand Up @@ -1179,8 +1179,11 @@ typedef void (*lwm2m_ctx_event_cb_t)(struct lwm2m_ctx *ctx,
* @param[in] observe_cb Observe callback function called when an observer was
* added or deleted, and when a notification was acked or
* has timed out
*
* @return 0 for success, -EINPROGRESS when client is already running
* or negative error codes in case of failure.
*/
void lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
int lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
uint32_t flags, lwm2m_ctx_event_cb_t event_cb,
lwm2m_observe_cb_t observe_cb);

Expand All @@ -1196,8 +1199,10 @@ void lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
* @param[in] event_cb Client event callback function
* @param[in] deregister True to deregister the client if registered.
* False to force close the connection.
*
* @return 0 for success or negative in case of error.
*/
void lwm2m_rd_client_stop(struct lwm2m_ctx *client_ctx,
int lwm2m_rd_client_stop(struct lwm2m_ctx *client_ctx,
lwm2m_ctx_event_cb_t event_cb, bool deregister);

/**
Expand Down
25 changes: 21 additions & 4 deletions subsys/net/lib/lwm2m/lwm2m_rd_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -1128,7 +1128,7 @@ static void lwm2m_rd_client_service(struct k_work *work)
k_mutex_unlock(&client.mutex);
}

void lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
int lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
uint32_t flags, lwm2m_ctx_event_cb_t event_cb,
lwm2m_observe_cb_t observe_cb)
{
Expand All @@ -1140,7 +1140,15 @@ void lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
"CONFIG_LWM2M_RD_CLIENT_SUPPORT_BOOTSTRAP.");

k_mutex_unlock(&client.mutex);
return;
return -ENOTSUP;
}

/* Check client idle state or socket is still active */

if (client.ctx && (client.engine_state != ENGINE_IDLE || client.ctx->sock_fd != -1)) {
LOG_WRN("Client is already running. state %d ", client.engine_state);
k_mutex_unlock(&client.mutex);
return -EINPROGRESS;
}

client.ctx = client_ctx;
Expand All @@ -1156,14 +1164,20 @@ void lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx, const char *ep_name,
LOG_INF("Start LWM2M Client: %s", log_strdup(client.ep_name));

k_mutex_unlock(&client.mutex);
return 0;
}

void lwm2m_rd_client_stop(struct lwm2m_ctx *client_ctx,
int lwm2m_rd_client_stop(struct lwm2m_ctx *client_ctx,
lwm2m_ctx_event_cb_t event_cb, bool deregister)
{
k_mutex_lock(&client.mutex, K_FOREVER);

client.ctx = client_ctx;
if (client.ctx != client_ctx) {
k_mutex_unlock(&client.mutex);
LOG_WRN("Cannot stop. Wrong context");
return -EPERM;
}

client.event_cb = event_cb;

if (sm_is_registered() && deregister) {
Expand All @@ -1179,6 +1193,7 @@ void lwm2m_rd_client_stop(struct lwm2m_ctx *client_ctx,
while (get_sm_state() != ENGINE_IDLE) {
k_sleep(K_MSEC(STATE_MACHINE_UPDATE_INTERVAL_MS / 2));
}
return 0;
}

void lwm2m_rd_client_update(void)
Expand Down Expand Up @@ -1246,6 +1261,8 @@ bool lwm2m_rd_client_is_registred(struct lwm2m_ctx *client_ctx)

static int lwm2m_rd_client_init(const struct device *dev)
{
client.ctx = NULL;
client.engine_state = ENGINE_IDLE;
k_mutex_init(&client.mutex);

return lwm2m_engine_add_service(lwm2m_rd_client_service,
Expand Down

0 comments on commit 19915ba

Please sign in to comment.