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.

协调器如何在应用层处理路由器发送来的“update device command”命令?

Other Parts Discussed in Thread: Z-STACK, CC2538

协议栈:Z-Stack 3.0.1

处理器:CC2538

情况描述:网络中有一个协调器,一个路由器和一个终端节点,终端节点的父节点为路由器。当终端节点利用按键“恢复出厂设置”时,会广播范围为1的“Leave”命令。此时身为父节点的路由器收到“Leave”命令会发送一条“update device command”给协调器,我想在协调器的应用层利用这一条信息做终端节点的出网通知,可是找不到“update device command”命令的回调函数。找到的“ZDO_UpdateDeviceIndication()”也不能使用。

提出的问题:请问可以在协调器的应用层上处理“update device command”命令吗,如何处理?除了用这个方法实现子设备出网通知以外还有什么方法吗?

谢谢!

  • 这一次是封死的这是个回调函数,你可以在ZDO_UpdateDeviceIndication里面做你的功能,该函数提供extAddr和入网设备的状态(rejoin/newjoin/left).
  • 是啊,虽然看不到调用的地方,估计在APS层有调用,可是debug不到这个函数里面,实际测试了下发现协调器收到“update device command”命令后并没有回调到这个函数,请问是因为要在别的地方打开这个回调功能吗?
  • 这个函数是TC的通知,试着用 bdb_resetLocalAction();去恢复你的设备试一下。
  • 协调器要设置什么才能成为TC吗?我测试的情况如下:
    网络存在一个协调器一个路由器一个终端设备,终端设备父节点为路由器,终端设备通过按键调用bdb_resetLocalAction()将自己恢复出厂设置,此时终端设备会广播一个“Leave”命令,可是半径为1,路由器收到“Leave”命令后就发送“update device”命令给协调器。然而我协调器的ZDO_UpdateDeviceIndication()函数却没有被调用,是没有设置协调器为TC吗?如果是的话要设置哪个参数?
    谢谢!
  • Trust Center是协调器具备的管理Trust Center Link Key.

    这个无法进入情况你用例程试过吗?

    正常当你leave之后你的ZR应该发送UpdateDevice的命令两次。

    如果你用例程还有这个问题建议你post到

    Zigbee & Thread forum - Zigbee & Thread - TI E2E support forums

    e2e.ti.com

    我们的同时会帮你确认一下这个问题。

  • 测试过了,抓包有抓到路由器发送“update device command”给协调器,但是我的协调器是没有进入ZDO_UpdateDeviceIndication()函数。
  • 我近期不在公司无法给你测试,我在E2E发了帖子让我同事帮忙,你在下面的帖子描述你的细节以及抓包文件。
    e2e.ti.com/.../735588
  • 你同事还有在公司的并且还懂中文的么...我这个需求有点急...拜托了
  • After the coordinator receives that command from the router, the coordinator would call ZDApp_ProcessSecMsg. It will handle the update device command in the ZDO_UPDATE_DEVICE_IND case in ZDApp_ProcessSecMsg. Then you can add code in that case to call ZDO_UpdateDeviceIndication.