如标题内容:如何让电池供电的终端节点只加入到路由器,而不加到协调器网络?希望能得到解答
user3514461:
补充下,就是让终端节点的父亲只能是路由器,而不是协调器
Susan Yang:
回复 user3514461:
可以先看一下TI的文档 Using the Direct Join Request Feature in Z-Stack
http://www.ti.com.cn/cn/lit/an/swru124a/swru124a.pdf
该文档是讲由B发起将某个已知节点A加为子节点
或者参考 http://zigbee-sh.cn/download.asp?id=23&language=cn
user3514461:
回复 Susan Yang:
非常感谢!!
user3514461:
回复 Susan Yang:
刚才看了susan yang指示的链接,因我使用的是ZStack-CC2530-2.5.1a协议栈,感觉资料不匹配!
链接处资料:
zAddrType_t ZAddr;ZAddr.addr.shortAddr = 0x796f;ZAddr.addrMode = Addr16Bit;ZDP_MgmtLeaveReq( &ZAddr, device_address, 0 );
//以上函数参数只有3个
而在ZStack-CC2530-2.5.1a栈中,
afStatus_t ZDP_MgmtLeaveReq( zAddrType_t *dstAddr, uint8 *IEEEAddr, uint8 RemoveChildren,
uint8 Rejoin, uint8 SecurityEnable )
参数有5个。
根据我的需求,终端节点只能加入到路由器,不加入到协调器。
所以:
1,在协调器上代码要这样做:DP_MgmtLeaveReq(&ZAddr, device_address,1,1,0)
2,在路由器上代码要这样:NLME_DirectJoinRequest( device_address, mac_cap );
不知路由器中这个代码是否必须?因为协调器请求终端离开,终端离开后,如果在周围有很多其它路由器,它一定会选择一个加入。
3,终端节点代码要修改:ZDApp.c 中
#if ( ZG_BUILD_RTRONLY_TYPE ) || ( ZG_BUILD_ENDDEVICE_TYPE )
//devStartModes_t devStartMode = MODE_JOIN; // Assume joining 原来默认的devStartModes_t devStartMode = MODE_RESUME; // if already "directly joined" to parent. Set to make the device do an Orphan scan 现在修改后要执行的的
#else // Set the default to coodinator devStartModes_t devStartMode = MODE_HARD;#endif
请赐教,谢谢!
user3514461:
回复 Susan Yang:
感觉文档不能很好解决问题,我的要求是,由B发起将某个子节点踢出,不让它加入自己,尽管很近!