This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2530:将属性写入基于 Z-Stack 1.22的器件

Guru**** 2611005 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/824270/cc2530-write-attributes-to-a-z-stack-1-22-based-device

器件型号:CC2530

你好

我尝试捕获固件中写入序列的数据。

我认为这将使我进入此代码部分:

if (Events & SYS_EVENT_MSG)
{
while (((MSGpkt=(afIncomingMSGPacket_t *) osal_msg_receive (zclZigUP_TaskID))))
{
evt = MSGpkt->HDR.EVENT;

开关(evt)
{
案例 ZCL_INVING_MSG:
//传入的 ZCL Foundation 命令/响应消息
//<-- 一个示例
zclZigUP_ProcessIncomingMsg((zclIncomingMsg_t *)MSGpkt);
中断;

实际上、我将进入周围循环函数、但 evt 变量始终为0xFD、ZCL_INGING_MSG 为0x34
因此、我不会进入 zclZigUP_ProcessIncomingMsg。

我不知道哪里出错了...
有人可以指导我、我可以在哪里读取发送到器件的属性值?

以下是 Wireshark 的日志:

39953   30917.726539   0x0000   0x583a   ZigBee HA   64   ZCL:写入属性、序列:15
39954   30917.728618         IEEE 802.15.4   16   采集
39955   30917.739220   0x583a   0x0000   ZigBee   56   APS:ACK、dst 端点:1、src 端点:8
39956   30917.741044         IEEE 802.15.4   16   采集
39957   30917.749348   0x583a   0x0000   ZigBee HA   62   ZCL:写入属性响应、序列:15

遗憾的是、没有示例应用展示如何处理对 ZigBee 终端节点的属性写入。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我假设您添加了"CASE ZCL_CMD_WRITE_RSP:..." 在 zclZigUP_ProcessIncomingMsg 中。 有关更多详细信息、请参阅 SampleLight 中的 zclSampleLight_ProcessIncomingMsg。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。

    问题是,我甚至不能去 zclZigUP_ProcessIncomingMsg

    因为

    当我将我的属性从 ZNP 发送到我的终端设备时、然后 evt

     switch( evt )

        {
    为0xFD
    但是
    ZCL_INCOMING_MSG
    为0x34
    因此、这没有有效的情况。
    对我来说、似乎出现了问题、原因0xFD 没有有效值...
    你怎么看?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您是否在项目中定义了 ZCL_WRITE?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我是这样做的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试在 zclProcessInWriteCmd 中设置断点、以查看它是否首先命中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我已经这么做了。

    设置断点的良好副作用是、它证明我已启用 ZCL_WRITE、否则我将无法设置此断点。

    您可以在下面看到断点。
    但不幸的是、我从未达到这个断点。

    在这里、当我尝试向它写入属性时、您可以看到 evt 的值。

    因此我得到一个事件、但具有一个奇怪的事件 ID。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我是说在 zclProcessInWriteCmd 内部设置断点、而不是在 zclZigUP_ProcessIncomingMsg 中设置断点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、抱歉、我认为将其设置为 zclProcessInWriteCmd 足够好了。

    我现在看到、我只有 zclProcessInWriteRspCmd、而不是 zclProcessInWriteCmd

    如果我使用 ctrl shift + f 搜索 zclProcessInWriteCmd、我唯一可以找到它的位置是:zcl.c

    我还无法在 zclProcessInWriteRspCmd 中设置断点

    但我不知道为什么。 即使我删除了#ifdef ZCL_WRITE -重新编译、我也无法在那里设置断点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尝试将优化级别设置为中或低以设置断点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我做到了。

    现在、我能够将断点设置为 zclProcessInWriteRspCmd
    但我想让我将一个设置为 zclProcessInWriteCmd 吗?

    断点从未命中...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我希望您在 zclProcessInWriteCmd 而不是 zclProcessInWriteRspCmd 上设置断点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但是我没有这个功能…

    在示例光开关等中也没有定义函数 zclProcessInWriteCmd。

    我是否必须自行定义它们?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    zclProcessInWriteCmd 位于 zcl.c 中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    该死的…

    为什么我没有找到这^^
    还可以。。。 现在它起作用了...

    我在那里有一个断点、并查看我的数据...

    非常感谢! 如果没有您的帮助、我会怎么做。

    现在、最后两个问题...

    属性 ID。 如果我想使用自定义功能/功能。 我是否可以为自定义函数选择属性 ID 的"范围"?

    实施功能的最佳方式是什么? 我是否应该将其重复写入 zcl.c 中、或者是否有更好的方法将其外包?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以检查 zcl 规格、并确保不使用规格已定义的范围。