Thread 中讨论的其他器件:Z-stack、
工具与软件:
您好!
我使用的是来自 SimpleLink CC13xx/CC26xx SDK 版本7.40.00.77的 Z-Stack 的 CC2674P10微控制器。
在我的项目中、我将尝试实现从终端设备向协调器的报告。 我添加了 ZCL_cluster_ID_MS_electric_measurement = 0x0b04集群、具有几个可报告的属性。 我在终端设备和协调器之间创建了绑定、但我看不到协调器上发生了任何报告。
。 bdb_event_loop
、特别是在 bdb_RepReport
(从 bdb_reporting.c
)、我注意到我通过以下函数定期发送报告命令:
zcl_StackSendReportCmd(clusterEndpointItem->endpoint, &dstAddr, clusterEndpointItem->cluster, pReportCmd, ZCL_FRAME_SERVER_CLIENT_DIR, BDB_REPORTING_DISABLE_DEFAULT_RSP, zcl_getFrameCounter());
但是、协调器侧不接收任何内容。
进一步深入了解 AF_DataRequest
传递函数(IN af.c
)、我看到以下代码:
if (len > afDataReqMTU(&mtu)) { if (apsfSendFragmented) { stat = (*apsfSendFragmented)(&req); } else { stat = afStatus_INVALID_PARAMETER; } } else { stat = APSDE_DataReq(&req); }
当我计算电气测量仪表组的报告有效载荷大小(ZCL_cluster_ID_MS_electric_measurement)时、(即 ∑(所有可报告的属性数据类型的长度) +
(2 bytes for attribute ID + 1 byte for data type) * number of reportable attributes
) 它达到大约90字节。 。 afDataReqMTU(&mtu)
该函数返回的最大大小为82字节、因此它始终调用 (*apsfSendFragmented)(&req)
函数(其源代码我无法访问)、返回。 stat = 0x02 (ZInvalidParameter)
我怀疑这个问题可能与碎片有关。 我尝试了添加 ZIGBEE_FRAGMENTATION
但遗憾的是、问题仍然存在。
并减少可报告属性的数量、以保持以下大小 afDataReqMTU(&mtu)
、它通过 APSDE_DataReq(&req)
功能、一切都按预期工作、协调器成功收到报告消息。
我正在寻找一种解决方案、即使在邮件大小较大的情况下也能实现报告功能。 如何解决此分段问题或允许发送更大的报告消息?
非常感谢您提供任何帮助或建议!