以下内容为转载,尚未认证。
http://zyxmien.blog.163.com/blog/static/11772364201051251739998/
在TI ZigBee开发系统中提供的ZigBee2006协议栈在未修改前默认支持5级路由深度,每个路由器最多可连接20个节点(最多包括6个路由器节点)。
那用户如何修改协议栈来提高路由深度及连接节点呢?
打开ZigBee2006协议栈源代码,找到“NWK”中的nwk_globals.h及nwk_globals.c二个文件。
1)打开nwk_globals.h文件,可看到:
#if ( STACK_PROFILE_ID == HOME_CONTROLS )
#define MAX_NODE_DEPTH 5
#define NWK_MODE NWK_MODE_MESH
#define SECURITY_MODE SECURITY_RESIDENTIAL
#if ( SECURE != 0 )
#define USE_NWK_SECURITY 1 // true or false
#define SECURITY_LEVEL 5
#else
#define USE_NWK_SECURITY 0 // true or false
#define SECURITY_LEVEL 0
#endif
#elif ( STACK_PROFILE_ID == GENERIC_STAR )
#define MAX_NODE_DEPTH 5
#define NWK_MODE NWK_MODE_STAR
#define SECURITY_MODE SECURITY_RESIDENTIAL
#if ( SECURE != 0 )
#define USE_NWK_SECURITY 1 // true or false
#define SECURITY_LEVEL 5
#else
#define USE_NWK_SECURITY 0 // true or false
#define SECURITY_LEVEL 0
#endif
#elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
// define your own stack profile settings
#define MAX_NODE_DEPTH 5
#define NWK_MODE NWK_MODE_MESH
#define SECURITY_MODE SECURITY_RESIDENTIAL
#if ( SECURE != 0 )
#define USE_NWK_SECURITY 1 // true or false
#define SECURITY_LEVEL 5
#else
#define USE_NWK_SECURITY 0 // true or false
#define SECURITY_LEVEL 0
#endif
#endif
由MAX_NODE_DEPTH来定义路由深度。
2)再打开nwk_globals.C文件,可以看到:
#if defined ( RTR_NWK )
// change this if using a different stack profile...
// Cskip array
uint16 *Cskip;
#if ( STACK_PROFILE_ID == HOME_CONTROLS )
byte CskipRtrs[MAX_NODE_DEPTH+1] = {6,6,6,6,6,0};
byte CskipChldrn[MAX_NODE_DEPTH+1] = {20,20,20,20,20,0};
#elif ( STACK_PROFILE_ID == GENERIC_STAR )
byte CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
byte CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
#elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
byte CskipRtrs[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
byte CskipChldrn[MAX_NODE_DEPTH+1] = {5,5,5,5,5,0};
#endif // STACK_PROFILE_ID
#endif // RTR_NWK
修改CskipRtrs及CskipChldrn二个数组的数值即可。
如MAX_NODE_DEPTH=6,路由器最多可连接10个路由器,路由器最多可连接30个节点时。
修改为:
#if ( STACK_PROFILE_ID == HOME_CONTROLS )
byte CskipRtrs[MAX_NODE_DEPTH+1] = {10,10,10,10,10,10,0};
byte CskipChldrn[MAX_NODE_DEPTH+1] = {30,30,30,30,30,30,0};
#elif ( STACK_PROFILE_ID == GENERIC_STAR )
byte CskipRtrs[MAX_NODE_DEPTH+1] = {10,10,10,10,10,10,0};
byte CskipChldrn[MAX_NODE_DEPTH+1] = {10,10,10,10,10,10,0};
#elif ( STACK_PROFILE_ID == NETWORK_SPECIFIC )
byte CskipRtrs[MAX_NODE_DEPTH+1] = {10,10,10,10,10,10,0};
byte CskipChldrn[MAX_NODE_DEPTH+1] = {10,10,10,10,10,10,0};