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.

[参考译文] CC2651P3:ZdoNwkAddrReq 和本地子节点

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1216294/cc2651p3-zdonwkaddrreq-and-local-child-nodes

器件型号:CC2651P3

我需要找到设备的 NWK 地址、该设备可以是路由器或终端设备(休眠与否)。 作为测试、我以协调器的身份运行本地节点、并将单个节点(休眠终端设备)加入到网络中。 我尝试使用 Zstackapi_ZdoNwkAddrReq ()来请求休眠终端器件的 NWK 地址。 由于终端设备是本地节点(协调器)的子节点、因此我应该会收到 包含终端设备 NWK 地址的事件 zstackmsg_Cmdids_ZDO_nwk_ADDR_RSP。 但是、协调器发送了一个 NWK_ADDR_REQ 无线广播、并且未生成  zstackmsg_CmdIDS_ZDO_NWK_ADDR_RSP 事件。

所以,我假设 Zstackapi_ZdoNWKAddrReq ()没有检查它自己的子表,而只是盲目地发出 NWK_addr_req 呢?

如果是这种情况、如何查找可能是本地节点的子节点、也可能是远程路由器的子节点的 NWK 地址? 我认为这是一项常见的要求、需要找到网络中某个节点的 NWK 地址。

我正在使用 SDK simplelink_cc13xx_cc26xx_sdk_6_40_00_13。

谢谢。
Andy

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

    Andy、您好!

    以下是 TI Z-Stack API 指南,其中  提供了 Zstackapi_ZdoNwkAddrReq ()的说明。   即使不使用 MT 命令,也可以参考监视和测试 API 说明。

    此消息将请求器件发送"Network Address Request"。 该消息发送一条广播消息、寻找一个具有已知64位 IEEE 地址的16位地址。 您必须订阅"ZDO 网络地址响应"才能收到对此消息的响应。

    您可以使用它来查找 IEEE 地址与请求匹配的路由器设备或这些路由器节点的子设备,并接收包含  路由器本身 及其关联设备的 NWK 地址的响应(子设备)。   如果 zdoCBREQ.has_nwkAddrRsp 和 zdoCBREQ.nwkAddrRsp 在 您的 zcl_*.c 应用程序文件的 SetupZStackCallback 中将 zstackmsg_CmdIDS_ZDO_nwk_ADDR_RSP 事件设置为 true,您将会捕获该事件。

    您可以从 zstackmsg_Cmdids_ZDO_NWK_ADDR_REQ->processZdoNWkAddrREQ->ZDP_NWkAddrREQ (位于 zdprofile.c 中)看到,如果(osal_ExtAddrEqual (saveExtAddr,IEEEAddress)= false,本地设备将根据请求的值检查自己的 IEEE 地址,如果仅将发送消息与网络匹配,而不发送消息本身匹配)。  您还可以使用 Zstackapi_sysNwkInfoReadReq () 来确定本地器件参数,并使用 assoc_list.h API (如 AssocMakeList)来生成本地关联表。  

    此致、
    Ryan

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

    您好、Ryan、

    我一直使用您参考的 API 文档。 我正在寻找一个 API、该 API 可以提供网络上某个设备的 NWK 地址(给定该设备的 IEEE 地址)。 任何需要与网络上其他器件通信的应用都需要我要查找的 API。 这是因为器件的 NWK 地址可能会发生变化(例如、由于地址冲突)、因此任何应用在器件发生变化时都必须能够为器件找到新的 NWK 地址。

    不幸的是(令人惊讶的)、目前似乎没有 API。  Zstackapi_ZdoNwkAddrReq ()将获取指定器件的 NWK 地址,如果指定器件不是本地节点的子节点。 由于 Zstackapi_ZdoNwkAddrReq ()仅适用于某些器件,因此它在一般情况下不有用。

    我认为、我需要做的就是创建一个可以执行如下操作的函数:

    1.首先尝试 AssocGetWithExt()以查看目标设备是否是本地节点的子设备。

    2.如果目标器件不是本地子器件,则发送 Zstackapi_ZdoNwkAddrReq ()

    我想任何支持 NWK 地址更改的应用(几乎是所有应用)都需要此功能。 因此、这很奇怪

    A)此功能尚不存在、和

    b) AssocGetWithExt()在任何地方都没有记录(我通过搜索代码找到它)。

    此致、
    Andy