net: lwm2m: introduce user-code callbacks for obj create/delete
LwM2M engine now supports optional resources that may need to be setup or torn down in user-based code during object instance creation / deletion. Let's provide callbacks that can be used for this purpose. Signed-off-by: Michael Scott <mike@foundries.io>
This commit is contained in:
parent
56e240e528
commit
538d3418fd
3 changed files with 57 additions and 0 deletions
|
@ -206,6 +206,10 @@ int lwm2m_engine_register_post_write_callback(char *path,
|
||||||
lwm2m_engine_set_data_cb_t cb);
|
lwm2m_engine_set_data_cb_t cb);
|
||||||
int lwm2m_engine_register_exec_callback(char *path,
|
int lwm2m_engine_register_exec_callback(char *path,
|
||||||
lwm2m_engine_user_cb_t cb);
|
lwm2m_engine_user_cb_t cb);
|
||||||
|
int lwm2m_engine_register_create_callback(u16_t obj_id,
|
||||||
|
lwm2m_engine_user_cb_t cb);
|
||||||
|
int lwm2m_engine_register_delete_callback(u16_t obj_id,
|
||||||
|
lwm2m_engine_user_cb_t cb);
|
||||||
|
|
||||||
/* resource data bit values */
|
/* resource data bit values */
|
||||||
#define LWM2M_RES_DATA_READ_ONLY 0
|
#define LWM2M_RES_DATA_READ_ONLY 0
|
||||||
|
|
|
@ -685,6 +685,7 @@ int lwm2m_create_obj_inst(u16_t obj_id, u16_t obj_inst_id,
|
||||||
struct lwm2m_engine_obj_inst **obj_inst)
|
struct lwm2m_engine_obj_inst **obj_inst)
|
||||||
{
|
{
|
||||||
struct lwm2m_engine_obj *obj;
|
struct lwm2m_engine_obj *obj;
|
||||||
|
int ret;
|
||||||
|
|
||||||
*obj_inst = NULL;
|
*obj_inst = NULL;
|
||||||
obj = get_engine_obj(obj_id);
|
obj = get_engine_obj(obj_id);
|
||||||
|
@ -718,6 +719,17 @@ int lwm2m_create_obj_inst(u16_t obj_id, u16_t obj_inst_id,
|
||||||
(*obj_inst)->obj = obj;
|
(*obj_inst)->obj = obj;
|
||||||
(*obj_inst)->obj_inst_id = obj_inst_id;
|
(*obj_inst)->obj_inst_id = obj_inst_id;
|
||||||
engine_register_obj_inst(*obj_inst);
|
engine_register_obj_inst(*obj_inst);
|
||||||
|
|
||||||
|
if (obj->user_create_cb) {
|
||||||
|
ret = obj->user_create_cb(obj_inst_id);
|
||||||
|
if (ret < 0) {
|
||||||
|
SYS_LOG_ERR("Error in user obj create %u/%u: %d",
|
||||||
|
obj_id, obj_inst_id, ret);
|
||||||
|
lwm2m_delete_obj_inst(obj_id, obj_inst_id);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_LWM2M_RD_CLIENT_SUPPORT
|
#ifdef CONFIG_LWM2M_RD_CLIENT_SUPPORT
|
||||||
engine_trigger_update();
|
engine_trigger_update();
|
||||||
#endif
|
#endif
|
||||||
|
@ -740,6 +752,15 @@ int lwm2m_delete_obj_inst(u16_t obj_id, u16_t obj_inst_id)
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (obj->user_delete_cb) {
|
||||||
|
ret = obj->user_delete_cb(obj_inst_id);
|
||||||
|
if (ret < 0) {
|
||||||
|
SYS_LOG_ERR("Error in user obj delete %u/%u: %d",
|
||||||
|
obj_id, obj_inst_id, ret);
|
||||||
|
/* don't return error */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
engine_unregister_obj_inst(obj_inst);
|
engine_unregister_obj_inst(obj_inst);
|
||||||
obj->instance_count--;
|
obj->instance_count--;
|
||||||
|
|
||||||
|
@ -1897,6 +1918,36 @@ int lwm2m_engine_register_exec_callback(char *pathstr,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int lwm2m_engine_register_create_callback(u16_t obj_id,
|
||||||
|
lwm2m_engine_user_cb_t cb)
|
||||||
|
{
|
||||||
|
struct lwm2m_engine_obj *obj = NULL;
|
||||||
|
|
||||||
|
obj = get_engine_obj(obj_id);
|
||||||
|
if (!obj) {
|
||||||
|
SYS_LOG_ERR("unable to find obj: %u", obj_id);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj->user_create_cb = cb;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lwm2m_engine_register_delete_callback(u16_t obj_id,
|
||||||
|
lwm2m_engine_user_cb_t cb)
|
||||||
|
{
|
||||||
|
struct lwm2m_engine_obj *obj = NULL;
|
||||||
|
|
||||||
|
obj = get_engine_obj(obj_id);
|
||||||
|
if (!obj) {
|
||||||
|
SYS_LOG_ERR("unable to find obj: %u", obj_id);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
obj->user_delete_cb = cb;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* generic data handlers */
|
/* generic data handlers */
|
||||||
|
|
||||||
static int lwm2m_read_handler(struct lwm2m_engine_obj_inst *obj_inst,
|
static int lwm2m_read_handler(struct lwm2m_engine_obj_inst *obj_inst,
|
||||||
|
|
|
@ -169,6 +169,8 @@ struct lwm2m_engine_obj {
|
||||||
/* object event callbacks */
|
/* object event callbacks */
|
||||||
lwm2m_engine_obj_create_cb_t create_cb;
|
lwm2m_engine_obj_create_cb_t create_cb;
|
||||||
lwm2m_engine_obj_delete_cb_t delete_cb;
|
lwm2m_engine_obj_delete_cb_t delete_cb;
|
||||||
|
lwm2m_engine_user_cb_t user_create_cb;
|
||||||
|
lwm2m_engine_user_cb_t user_delete_cb;
|
||||||
|
|
||||||
/* object member data */
|
/* object member data */
|
||||||
u16_t obj_id;
|
u16_t obj_id;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue