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.

如何让电池供电的终端节点只加入到路由器,而不加到协调器网络?

Other Parts Discussed in Thread: Z-STACK

如标题内容:如何让电池供电的终端节点只加入到路由器,而不加到协调器网络?希望能得到解答

  • 补充下,就是让终端节点的父亲只能是路由器,而不是协调器

  • 可以先看一下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

  • 非常感谢!!

  • 刚才看了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

    请赐教,谢谢!

  • 感觉文档不能很好解决问题,我的要求是,由B发起将某个子节点踢出,不让它加入自己,尽管很近!