Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion include/net/lwm2m.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,15 @@ int lwm2m_device_add_err(u8_t error_code);
#define RESULT_UPDATE_FAILED 8
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typos in commit message
s/applicaiton/application/
s/trasnition/transition/

#define RESULT_UNSUP_PROTO 9
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a typo in commit message s/btw/between/ ?


#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT)
void lwm2m_firmware_set_write_cb(lwm2m_engine_set_data_cb_t cb);
lwm2m_engine_set_data_cb_t lwm2m_firmware_get_write_cb(void);

#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT)
void lwm2m_firmware_set_update_cb(lwm2m_engine_exec_cb_t cb);
lwm2m_engine_exec_cb_t lwm2m_firmware_get_update_cb(void);
#endif
#endif

/* LWM2M Engine */

Expand Down Expand Up @@ -192,8 +198,26 @@ int lwm2m_engine_start(struct lwm2m_ctx *client_ctx,

/* LWM2M RD Client */

/* Client events */
enum lwm2m_rd_client_event {
LWM2M_RD_CLIENT_EVENT_NONE,
LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_FAILURE,
LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_COMPLETE,
LWM2M_RD_CLIENT_EVENT_REGISTRATION_FAILURE,
LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE,
LWM2M_RD_CLIENT_EVENT_REG_UPDATE_FAILURE,
LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE,
LWM2M_RD_CLIENT_EVENT_DEREGISTER_FAILURE,
LWM2M_RD_CLIENT_EVENT_DISCONNECT
};

/* Event callback */
typedef void (*lwm2m_ctx_event_cb_t)(struct lwm2m_ctx *ctx,
enum lwm2m_rd_client_event event);

int lwm2m_rd_client_start(struct lwm2m_ctx *client_ctx,
char *peer_str, u16_t peer_port,
const char *ep_name);
const char *ep_name,
lwm2m_ctx_event_cb_t event_cb);

#endif /* __LWM2M_H__ */
70 changes: 65 additions & 5 deletions samples/net/lwm2m_client/src/lwm2m-client.c
Original file line number Diff line number Diff line change
Expand Up @@ -147,12 +147,23 @@ static int device_factory_default_cb(u16_t obj_inst_id)
return 1;
}

#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT)
static int firmware_update_cb(u16_t obj_inst_id)
{
SYS_LOG_DBG("UPDATE");

/* TODO: kick off update process */

/* If success, set the update result as RESULT_SUCCESS.
* In reality, it should be set at function lwm2m_setup()
*/
lwm2m_engine_set_u8("5/0/3", STATE_IDLE);
lwm2m_engine_set_u8("5/0/5", RESULT_SUCCESS);
return 1;
}
#endif

#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT)
static int firmware_block_received_cb(u16_t obj_inst_id,
u8_t *data, u16_t data_len,
bool last_block, size_t total_size)
Expand All @@ -161,6 +172,7 @@ static int firmware_block_received_cb(u16_t obj_inst_id,
data_len, last_block);
return 1;
}
#endif

static int lwm2m_setup(void)
{
Expand Down Expand Up @@ -204,10 +216,12 @@ static int lwm2m_setup(void)

/* setup FIRMWARE object */

lwm2m_engine_register_post_write_callback("5/0/0",
firmware_block_received_cb);
#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT)
lwm2m_firmware_set_write_cb(firmware_block_received_cb);
lwm2m_engine_register_exec_callback("5/0/2", firmware_update_cb);
#endif
#if defined(CONFIG_LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT)
lwm2m_firmware_set_update_cb(firmware_update_cb);
#endif

/* setup TEMP SENSOR object */

Expand All @@ -227,6 +241,50 @@ static int lwm2m_setup(void)
return 0;
}

static void rd_client_event(struct lwm2m_ctx *client,
enum lwm2m_rd_client_event client_event)
{
switch (client_event) {

case LWM2M_RD_CLIENT_EVENT_NONE:
/* do nothing */
break;

case LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_FAILURE:
SYS_LOG_DBG("Bootstrap failure!");
break;

case LWM2M_RD_CLIENT_EVENT_BOOTSTRAP_COMPLETE:
SYS_LOG_DBG("Bootstrap complete");
break;

case LWM2M_RD_CLIENT_EVENT_REGISTRATION_FAILURE:
SYS_LOG_DBG("Registration failure!");
break;

case LWM2M_RD_CLIENT_EVENT_REGISTRATION_COMPLETE:
SYS_LOG_DBG("Registration complete");
break;

case LWM2M_RD_CLIENT_EVENT_REG_UPDATE_FAILURE:
SYS_LOG_DBG("Registration update failure!");
break;

case LWM2M_RD_CLIENT_EVENT_REG_UPDATE_COMPLETE:
SYS_LOG_DBG("Registration update complete");
break;

case LWM2M_RD_CLIENT_EVENT_DEREGISTER_FAILURE:
SYS_LOG_DBG("Deregister failure!");
break;

case LWM2M_RD_CLIENT_EVENT_DISCONNECT:
SYS_LOG_DBG("Disconnected");
break;

}
}

void main(void)
{
int ret;
Expand All @@ -251,10 +309,12 @@ void main(void)

#if defined(CONFIG_NET_IPV6)
ret = lwm2m_rd_client_start(&client, CONFIG_NET_APP_PEER_IPV6_ADDR,
CONFIG_LWM2M_PEER_PORT, CONFIG_BOARD);
CONFIG_LWM2M_PEER_PORT, CONFIG_BOARD,
rd_client_event);
#elif defined(CONFIG_NET_IPV4)
ret = lwm2m_rd_client_start(&client, CONFIG_NET_APP_PEER_IPV4_ADDR,
CONFIG_LWM2M_PEER_PORT, CONFIG_BOARD);
CONFIG_LWM2M_PEER_PORT, CONFIG_BOARD,
rd_client_event);
#else
SYS_LOG_ERR("LwM2M client requires IPv4 or IPv6.");
ret = -EPROTONOSUPPORT;
Expand Down
40 changes: 36 additions & 4 deletions subsys/net/lib/lwm2m/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ menuconfig LWM2M
default n
select ZOAP
select NET_APP_CLIENT
select HTTP_PARSER_URL
help
This option adds logic for managing OMA LWM2M data

Expand Down Expand Up @@ -130,22 +131,53 @@ config LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT
bool "Firmware Update object pull support"
default y
depends on LWM2M_FIRMWARE_UPDATE_OBJ_SUPPORT
depends on (HTTP_PARSER || HTTP_PARSER_URL)
help
Include support for pulling a file from a remote server via
block transfer and "FIRMWARE PACKAGE URI" resource. This option
adds another UDP context and packet handling.

config LWM2M_FIRMWARE_UPDATE_PULL_COAP_BLOCK_SIZE
int "Firmware Update object pull CoAP block size"
depends on LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT
config LWM2M_COAP_BLOCK_SIZE
int "LWM2M CoAP block-wise transfer size"
default 256
default 64 if NET_L2_BT
default 64 if NET_L2_IEEE802154
range 16 1024
help
CoAP block size used by firmware pull when performing block-wise
CoAP block size used by LWM2M when performing block-wise
transfers. Possible values: 16, 32, 64, 128, 256, 512 and 1024.

config LWM2M_NUM_BLOCK1_CONTEXT
int "Maximum # of LWM2M block1 contexts"
default 3
help
This value sets up the maximum number of block1 contexts for
CoAP block-wise transfer we can handle at the same time.

config LWM2M_FIRMWARE_UPDATE_PULL_COAP_PROXY_SUPPORT
bool "Firmware Update object pull via CoAP-CoAP/HTTP proxy support"
depends on LWM2M_FIRMWARE_UPDATE_PULL_SUPPORT
default n
help
Include support for pulling firmware file via a CoAP-CoAP/HTTP proxy.

if LWM2M_FIRMWARE_UPDATE_PULL_COAP_PROXY_SUPPORT

config LWM2M_FIRMWARE_UPDATE_PULL_COAP_PROXY_ADDR
string "CoAP proxy network address"
help
Network address of the CoAP proxy server.

config LWM2M_FIRMWARE_UPDATE_PULL_COAP_PROXY_URI_PATH
string "CoAP URI path element used by the proxy"
default "coap2http"
help
CoAP URI path element exported by the CoAP proxy server.
Defaults to coap2http, which is the URI path used by the
Californium CoAP-HTTP proxy.

endif # LWM2M_FIRMWARE_UPDATE_PULL_COAP_PROXY_SUPPORT

config LWM2M_RW_JSON_SUPPORT
bool "support for JSON writer"
default y
Expand Down
Loading