1,由于我所搭建的整个网络是Mesh网络,不牵涉到低功耗的情况,所以网络中只有两种类型的设备:协调器和路由器即:1个协调器+N个路由器
2,为了防止协调器在掉电的情况下路由器去维持整个网络,这样协调器就不能再加入到原来的网络中,所以协调器和N个路由器都开启了:NV_INIT, NV_RESTORE
3,我在协调器中建立了一个关联表用于维护所有路由节点的网络短地址,这样协调器和路由器通信的时候都采用单播的方式通信。
下面是产生的几个问题描述:
(1)我在协调器和N个路由器都开启NV_INIT NV_RESTORE的情况下,再打开AES加密功能。设置-DSECURE=1 , zgPreConfigKeys = TRUE,协调器和路由器设置相同的defaultKey(在nwk_global.c中修改)。
1.1 但是出现加密后路由器和协调器通信出现断断续续的情况,有的时候数据能够收到,有的时候收不到?
1.2 重启路由器,路由器在上电加入网络出现收不到协调器发送过来的数据的情况。
1.3 如果把所有节点的NV_INIT NV_RESTORE选项去掉,加密通信是没有问题的,请问:这两个选项和加密设置不能共同设置吗?相互之间会影响?
(2) 所有的路由器都开启了NV_RESTORE选项,如果路由器A通过路由器B加入到协调器的网络中,即路由器B是路由器A的parent父节点。
2.1 如果此时路由器B掉线,那么路由器A在开启NV_RESTORE的情况下回去选择新的路由器C作为父节点吗?如果会那么路由器C会给A分配新的网络地址 吗?
2.2 如果路由器A更换了新的父亲节点,当原来的路由器B上电后,路由器B认为A节点还是自己的孩子节点,单播发送数据给路由A节点能收到吗?
2.3 协调器也并不知道路由器A节点更换了新的父亲节的,保留的还是原来的路由路径,那么通过协调器单播数据给路由器A节点的时候能收到吗?
2.4 我看网上说可以通过路由器A节点调用ZDApp_AnnounceNewAddress()函数向网络中的所有设备进行新的地址更新通知,网络中协调器和所有的路由器在收到A节点的Device announce这个消息后判断A节点已经更换了父节点,会删除associated device list里面A节点的地址。协调器收到A节点的Device announce判断A节点更换了父亲节的,会更新老的路由路径为新的路由路径。
请问具体的代码是如何实现的呢?可以详细给下代码吗?路由A的代码和其他路由的代码,还有协调器的相应处理代码。
谢谢!