设备控制
设备指令下发链路图
说明
- 如上图为TuyaApp处于打开情况下,
设备指令下发回调
dp下发数据结构说明(obj类型)
数据结构 | 成员 | 说明 |
TY_RECV_OBJ_DP_S | cmd_tp | 指令类型 [√] DP_CMD_LAN, 局域网控制 [√] DP_CMD_MQ, 云端指令 [√] DP_CMD_TIMER, 设备定时 [√] DP_CMD_SCENE_LINKAGE, 场景联动 [√] DP_CMD_RELIABLE_TRANSFER, 可靠传输 |
dtt_tp | / | |
cid |
cid = NULL, 为网关或soc设备dp下发; cid != NULL,为子设备dp,cid为子设备id; |
|
mb_id | 群组ID | |
dps_cnt | 下发的dp值数量 | |
dps | dp值缓存首地址,为TY_OBJ_DP_S数据结构 |
dp值数据结构说明 见头文件 tuya_cloud_com_defs.h TY_OBJ_DP_S数据结构
__soc_dev_obj_dp_cmd_cb
/***********************************************************
* @Function:__soc_dev_obj_dp_cmd_cb
* @Desc: dp指令下发入口(obj类型)
* @Param: dp, dp下发数据结构 缓存首地址
* @Return: OPRT_OK: success Other: fail
***********************************************************/
VOID __soc_dev_obj_dp_cmd_cb(IN CONST TY_RECV_OBJ_DP_S *dp)
{
PR_DEBUG("SOC Rev DP Obj Cmd t1:%d t2:%d CNT:%u", dp->cmd_tp, dp->dtt_tp, dp->dps_cnt);
if(dp->cid != NULL) PR_ERR("soc not have cid.%s", dp->cid);
// 用户处理完成之后需要主动上报最新状态,这里简单起见,直接返回收到的数据,认为处理全部成功。
OPERATE_RET op_ret = dev_report_dp_json_async(dp->cid,dp->dps,dp->dps_cnt);
if(OPRT_OK != op_ret) {
PR_ERR("dev_report_dp_json_async op_ret:%d",op_ret);
}
}
dp下发数据结构说明(raw类型)
数据结构 | 成员 | 说明 |
TY_RECV_RAW_DP_S | cmd_tp | 指令类型 [√] DP_CMD_LAN, 局域网控制 [√] DP_CMD_MQ, 云端指令 [√] DP_CMD_TIMER, 设备定时 [√] DP_CMD_SCENE_LINKAGE, 场景联动 [√] DP_CMD_RELIABLE_TRANSFER, |
dtt_tp | / | |
cid |
cid = NULL, 为网关或soc设备dp下发; cid != NULL,为子设备dp,cid为子设备id; |
|
dp_id | 功能点编号 | |
mb_id | 群组ID | |
len | 下发的raw数据长度 | |
data | raw数据缓存首地址 |
__soc_dev_raw_dp_cmd_cb
/***********************************************************
* @Function:__gw_dev_raw_dp_cmd_cb
* @Desc: dp指令下发入口(raw类型)
* @Param: dp, dp下发数据结构 缓存首地址
* @Return: OPRT_OK: success Other: fail
***********************************************************/
VOID __soc_dev_raw_dp_cmd_cb(IN CONST TY_RECV_RAW_DP_S *dp)
{
PR_NOTICE("SOC Rev DP Raw Cmd t1:%d t2:%d dpid:%d len:%u", dp->cmd_tp, dp->dtt_tp, dp->dpid, dp->len);
if(dp->cid != NULL) PR_ERR("soc not have cid.%s", dp->cid);
//User TODO
//用户处理完成之后需要主动上报最新状态,这里简单起见,直接返回收到的数据,认为处理全部成功。
OPERATE_RET op_ret = dev_report_dp_raw_sync(dp->cid,dp->dpid,dp->data,dp->len,0);
if(OPRT_OK != op_ret) {
PR_ERR("dev_report_dp_json_async op_ret:%d",op_ret);
}
}