文档中心>物联网智能视频服务(消费版)

物模型模块

最近更新时间:2021-06-23 10:16:43

我的收藏
物模型部分分为属性类模型,行为类模型,事件类模型,属性包括可读写属性(ProWritable)、只读属性(ProReadonly),常量属性(ProConst),行为包括动作(Action),事件类包括事件触发(Event)。

功能介绍

物模型由用户声明好后生成相应的 .c 和 .h 文件,在编译时编入工程,根据用户功能需要,在设备初始化阶段注册不同物模型处理函数,SDK 在相应模型触发时回调,用户亦可调用物模型接口主动上传物模型数据,对于设备来说,支持接收 ProWritable 和 Action 类型模型数据,发送 ProReadonly 和 Event 类模型数据。

流程指引

注册下发消息回调 > 物模型初始化 > 发送物模型消息 > 物模型去初始化。

接口参考

该功能模块提供以下接口:
iv_dm_init:物模型初始化接口。
iv_dm_exit:物模型去初始化接口。
iv_dm_event_report: 事件上报接口
iv_dm_send_prowriteable_object_msg:设置物模型(带有结果通知的方式,仅限于 ProWriteable 对象)。

iv_dm_init

接口描述 物模型初始化,进行物模型模块资源申请,设备启动时调用。
int iv_dm_init(const iv_dm_init_parm_s *pstInitParm);
参数说明
参数名称
类型
描述
输入/输出
pstInitParm
iv_dm_init_parm_s *
初始化参数。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_dm_exit

接口描述接口描述 物模型去初始化,进行物模型模块资源释放,设备退出时调用。
int iv_dm_exit(void);
参数说明
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_dm_event_report

接口描述 上传用户自定义事件消息。
int iv_dm_event_report(const char *topic, uint8_t topic_len, const char *jsonstr, uint16_t jsonstr_len)
参数说明
参数名称
类型
描述
输入/输出
topic
const char *
事件标题字符串。
输入
topic_len
uint8_t
事件标题字符串长度,不包含‘\\0’。
输入
jsonstr
const char *
事件 JSON 描述字符串。
输入
jsonstr_len
uint16_t
事件 JSON 数据长度。
输入
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

iv_dm_send_prowriteable_object_msg

接口描述 发送设置物模型消息,并将结果通过回调的方式进行返回。仅限于 ProWriteable 对象,该接口设计用于传递产品的差异化默认值所用。在设备复位或绑定,上线后调用该接口进行物模型对象默认值的设置(eg:移动侦测默认开启/关闭)。
int iv_dm_send_prowriteable_object_msg(uint8_t* obj, uint8_t* val, int val_len, iv_dm_send_prowritable_cb cb,unsigned int* psession_id);
参数说明
参数名称
类型
描述
输入/输出
obj
uint8_t*
需要设置的物模型对象名称。
输入
val
uint8_t*
需要设置的物模型对象的值。
输入
val_len
int
需要设置的物模型对象值的长度。
输入
cb
iv_dm_send_prowritable_cb
设置结果回调函数。
输入
psession_id
unsigned int*
本次设置消息的会话序列号。
输出
返回值
返回值
描述
IV_ERR_NONE
成功。
IV_ERR_*
失败,对应相应错误码。

数据结构

iv_dm_init_parm_s

接口描述 物模型初始化参数结构。
typedef struct iv_dm_init_parm_s
{
int (* iv_dm_env_init_cb)(void);
}iv_dm_init_parm_s;
参数说明
成员名称
描述
取值
iv_dm_env_init_cb
物模型初始化参数函数回调
用户从控制台生成的物模型文件中的初始化函数 ivm_env_init()。

示例代码

1. 物模型初始化

int s32Ret = -1;
iv_dm_init_parm_s stInitParm;
stInitParm.iv_dm_env_init_cb = ivm_env_init;
s32Ret = iv_dm_init(&stInitParm);
if(s32Ret < 0)
{
GDB_INFO("iv_dm_init fail:%d\\n");
return;
}

2. 物模型去初始化

iv_dm_exit();

3. 通过物模型控制摄像头开关、发送摄像头开关状态

static unsigned char* dm_set_obj_name = "recodePlan";
int dm_set_resp_call_back(uint8_t *obj_name, int msg_id, uint32_t error_code)
{

if(strcmp(dm_set_obj_name,dm_set_obj_name) == 0)
{
GDB_INFO("%s msg id:%d,result:%d\\n",obj_name,msg_id,error_code);
}
else
{
GDB_INFO("%s msg id:%d unknow\\n",obj_name,msg_id);
}
}
/*
\\brief: 物模型对象更新结果回调测试
\\attention: 该函数简单的调用物模型防护计划
\\param: N/A
\\return: N/A
*/
int dm_test_set_prowriteable_response(void)
{
static int once = 0;
int ret = IV_ERR_NONE;
if(once == 0 && sys_get_online_status())
{
IVM_CDC_ProWritable_RecodePlan8 cdc_record_plan;
memset(&cdc_record_plan,0,sizeof(cdc_record_plan));
cdc_record_plan.t = time(NULL);
IVM_RecodePlan8* precord_plan = &cdc_record_plan.setVal;

if((ret = iv_dm_send_prowriteable_object_msg(dm_set_obj_name,&cdc_record_plan,sizeof(cdc_record_plan),dm_set_resp_call_back,NULL)) != IV_ERR_NONE)
{
GDB_ERR("iv_dm_send_prowriteable_object_msg err: %d\\n",ret);
}
once = 1;
}

}