早上好、我正在尝试制作我的定制 CC2652P 器件(基于 ZR_genericapp 和 zed_genericapp)、以报告简单传感器端点的 AnalogInput 群集的"preseValue"属性、该属性位于器件内部的其他智能插头端点旁边。
我的器件连接到 Zigbee2Mqtt 实例、在该实例中、我开发了正确的自定义转换器以支持 ONOFF 和计量集群属性(不使用报告、只轮询和驱动)。
从 Z2M 前端来看,如果我发送的配置报告消息的最小报告间隔不为零(如图所示),则该报告工作正常。

但这不是我的应用的理想方案、在该方案中、我仅在更改属性时报告该属性。
几次前,Ryan 告诉我,使用图中的将最小和最大间隔设置为 NOPERIODIC 和 Nolimit (我在 bdb_interface.h 中看到都为零),只会在 Zstackapi_BdbRepedAttrValueReq ()触发时启用报告。

因此、我在 zcl_genericapp.c 任务中创建了一个周期性例程、该例程每5秒调用以下函数、以一个新的'RFID'值更新 preseValue 属性(我将使用该属性向我的服务器发送一个新的 RFID 标签、是)
void zclGenericApp_updateRFIDPresentValueAttribute(uint32_t rfid)
{
rfid_presentValue = rfid;
#ifdef BDB_REPORTING
zstack_bdbRepChangedAttrValueReq_t Req;
Req.attrID = ATTRID_IOV_BASIC_PRESENT_VALUE;
Req.cluster = ZCL_CLUSTER_ID_GENERAL_ANALOG_INPUT_BASIC;
Req.endpoint = RFID_ENDPOINT;
Zstackapi_bdbRepChangedAttrValueReq(appServiceTaskId, &Req);
#endif
}
问题是 Zstackapi_BdbRepChangedAttrValueReq 冻结了我的器件。
这仅在我从 Z2M 前端发送了配置报告消息后发生、如果我从未发送过该消息、而使报告处于禁用状态、则该函数仅通过而不报告任何内容、但不冻结。
我已经尝试调试该函数,现在我可以说它卡在"msgStatus = OsalPort_msgSend( stackServiceTaskId,(uint8_t*) pMsg );"
zstackapi.c.的第140行
如何继续?
衷心感谢您的帮助、我将不胜感激。
祝您愉快
Roberto