【已同步-低功耗DP缓存需要面板修改】BK7231NL 低功耗传感器开发 DP下发收不到如何改
Posted: 2022年 Dec 14日 10:11
你好 我们WiFi低功耗传感器有个自定义DP需要下发,产品设计上是app设置后,需要用户按一下设备按键,就可以同步下发数据
但是,我们发下 下列函数 没有收到下发数据
VOID dev_obj_dp_cb(IN CONST TY_RECV_OBJ_DP_S *dp)
需要实现这个功能的话,如何做呢?谢谢
你好 我们WiFi低功耗传感器有个自定义DP需要下发,产品设计上是app设置后,需要用户按一下设备按键,就可以同步下发数据
但是,我们发下 下列函数 没有收到下发数据
VOID dev_obj_dp_cb(IN CONST TY_RECV_OBJ_DP_S *dp)
需要实现这个功能的话,如何做呢?谢谢
低功耗DP,需要应用主动通过如下API从云端拉取下来
Code: Select all
/**
* @brief Query dp for low power
*
* @param[in] dps: dp string
* @param[in] cnt: dp count
* @param[out] obj_dps: dp in object format
* @param[out] raw_dps: dp in raw format
*
* @note This API is used for quering dp for low power
*
* @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET sf_dp_low_power_query(IN CONST UCHAR_T *dps, IN CONST UINT_T cnt,
OUT TY_RECV_OBJ_DP_S **obj_dps, OUT TY_RECV_RAW_DP_S **raw_dps);
示例如下
Code: Select all
OPERATE_RET op_ret = OPRT_OK;
UCHAR_T dps = [1,3,4,6,7]; //想要从云端拉取的dp id列表,由应用决定
UINT_T cnt = CNTSOF(dps), i = 0;
TY_RECV_OBJ_DP_S *obj_dps = NULL;
TY_RECV_RAW_DP_S *raw_dps = NULL; //只会返回一个raw型dp
op_ret = sf_dp_low_power_query(dps, cnt, &obj_dps, &raw_dps);
if(op_ret != OPRT_OK) {
TAL_PR_ERR("sf_dp_low_power_query err:%d", op_ret );
return;
}
/*
* TODO:根据应用场景,处理返回的dp列表
* 与正常的dp指令,即DEV_OBJ_DP_CMD_CB以及DEV_RAW_DP_CMD_CB的处理类似
*/
if(obj_dps) {
for(i=0; i<obj_dps->dps_cnt; i++) {
TAL_PR_DEBUG("obj dpid:%d tp:%d", obj_dps->dps[i].dpid, obj_dps->dps[i].type);
}
}
if(raw_dps) {
TAL_PR_DEBUG("raw dpid:%d ", raw_dps->dpid);
}
if(obj_dps) {
Free(obj_dps), obj_dps = NULL;
}
if(raw_dps) {
Free(raw_dps), raw_dps= NULL;
}
好的 是否在按键唤醒后且wifi连接上的情况下 去调用?
一线长天 2022年 Dec 14日 10:19低功耗DP,需要应用主动通过如下API从云端拉取下来
Code: Select all
/** * @brief Query dp for low power * * @param[in] dps: dp string * @param[in] cnt: dp count * @param[out] obj_dps: dp in object format * @param[out] raw_dps: dp in raw format * * @note This API is used for quering dp for low power * * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h */ OPERATE_RET sf_dp_low_power_query(IN CONST UCHAR_T *dps, IN CONST UINT_T cnt, OUT TY_RECV_OBJ_DP_S **obj_dps, OUT TY_RECV_RAW_DP_S **raw_dps);
示例如下
Code: Select all
OPERATE_RET op_ret = OPRT_OK; UCHAR_T dps = [1,3,4,6,7]; //想要从云端拉取的dp id列表,由应用决定 UINT_T cnt = CNTSOF(dps); TY_RECV_OBJ_DP_S *obj_dps = NULL; TY_RECV_RAW_DP_S *raw_dps = NULL; //只会返回一个raw型dp op_ret = sf_dp_low_power_query(dps, cnt, &obj_dps, &raw_dps); /* * TODO:根据应用场景,处理返回的dp列表 * 与正常的dp指令,即DEV_OBJ_DP_CMD_CB以及DEV_RAW_DP_CMD_CB的处理类似 */ Free(obj_dps); Free(raw_dps);
我们这样写到的代码
结果返回的dpid是20,很奇怪,拿不到正确的值,有什么原因?
log发一下,看这好像是没获取到数据。这个功能好像是要面板也要处理的。
log就是上面哪些,监听下发是这个函数吗?或者是有其他方法?
APP端需要如何配合呢