协议栈:Z-Stack 3.0.1
处理器:CC2538
情况描述:网络中有一个协调器,一个路由器和一个终端节点,终端节点的父节点为路由器。当终端节点利用按键“恢复出厂设置”时,会广播范围为1的“Leave”命令。此时身为父节点的路由器收到“Leave”命令会发送一条“update device command”给协调器,我想在协调器的应用层利用这一条信息做终端节点的出网通知,可是找不到“update device command”命令的回调函数。找到的“ZDO_UpdateDeviceIndication()”也不能使用。
提出的问题:请问可以在协调器的应用层上处理“update device command”命令吗,如何处理?除了用这个方法实现子设备出网通知以外还有什么方法吗?
谢谢!
Alvin Chen:
这一次是封死的这是个回调函数,你可以在ZDO_UpdateDeviceIndication里面做你的功能,该函数提供extAddr和入网设备的状态(rejoin/newjoin/left).
Jesse Huang:
回复 Alvin Chen:
是啊,虽然看不到调用的地方,估计在APS层有调用,可是debug不到这个函数里面,实际测试了下发现协调器收到“update device command”命令后并没有回调到这个函数,请问是因为要在别的地方打开这个回调功能吗?
Alvin Chen:
回复 Jesse Huang:
这个函数是TC的通知,试着用 bdb_resetLocalAction();去恢复你的设备试一下。
Jesse Huang:
回复 Alvin Chen:
协调器要设置什么才能成为TC吗?我测试的情况如下:
网络存在一个协调器一个路由器一个终端设备,终端设备父节点为路由器,终端设备通过按键调用bdb_resetLocalAction()将自己恢复出厂设置,此时终端设备会广播一个“Leave”命令,可是半径为1,路由器收到“Leave”命令后就发送“update device”命令给协调器。然而我协调器的ZDO_UpdateDeviceIndication()函数却没有被调用,是没有设置协调器为TC吗?如果是的话要设置哪个参数?
谢谢!
Alvin Chen:
回复 Jesse Huang:
Trust Center是协调器具备的管理Trust Center Link Key.
这个无法进入情况你用例程试过吗?
正常当你leave之后你的ZR应该发送UpdateDevice的命令两次。
如果你用例程还有这个问题建议你post到
我们的同时会帮你确认一下这个问题。
Jesse Huang:
回复 Alvin Chen:
测试过了,抓包有抓到路由器发送“update device command”给协调器,但是我的协调器是没有进入ZDO_UpdateDeviceIndication()函数。
Alvin Chen:
回复 Jesse Huang:
我近期不在公司无法给你测试,我在E2E发了帖子让我同事帮忙,你在下面的帖子描述你的细节以及抓包文件。
e2e.ti.com/…/735588
Jesse Huang:
回复 Alvin Chen:
你同事还有在公司的并且还懂中文的么…我这个需求有点急…拜托了