物模型部分分为属性类模型,行为类模型,事件类模型,属性包括可读写属性(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;}}