TI中文支持网
TI专业的中文技术问题搜集分享网站

在路由器上使用NLME_DirectJoinRequest()和ZDP_MgmtLeaveReq(),不能让已经加入到协调器上的终端节点退出协调器,为何?盼赐教!

有三个节点协调器A,路由器B,终端C,  上电后,终端C加入到了协调器A,现在我想让加入到协调器的终端节点C,退出协调器,加入到路由器B。

终端的IEEE地址:uint8  endieeeAddr[8]={0x00,0x12,0x4b,0x00,0x05,0x4f,0xd6,0xc4};

根据TI工程师提示的资料,在路由器B上某处触发如下代码:

byte mac_cap = CAPINFO_DEVICETYPE_RFD;  

NLME_DirectJoinRequest( endieeeAddr, mac_cap );

之后,在其它地方触发以下代码:

uint16 leaveaddr;  (这个变量保存的是终端节点C的短地址)

zAddrType_t Z_leaveADDr;

Z_leaveADDr.addr.shortAddr = leaveaddr;  
Z_leaveADDr.addrMode = Addr16Bit; ZDP_MgmtLeaveReq( &Z_leaveADDr, endieeeAddr, 1,1,0 );

另外, 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

按照以上3处修改,发现终端节点C始终在协调器A下面。为何啊?

user3514461:

补充下上面,那个路由器B上还增加了编译选项:

ZDO_MGMT_LEAVE_REQUESTZDO_MGMT_LEAVE_RESPONSE

但是,程序编译时,出现“隐式声明”错误,后来将改为编译选项:MT_ZDO_MGMT  (这个编译选项包括上面两个选项),编译就OK了。

此处问题,请TI工程帮忙看看!感谢万分!

x h:

回复 user3514461:

对于想让某个终端离开我是这么做的

srcid.addrMode=(afAddrMode_t) Addr16Bit; srcid.addr.shortAddr=pkt->srcAddr.addr.shortAddr; if (Leavecommand) ZDP_MgmtLeaveReq(&srcid,srcMAC,1,0,0);

终端的mac最好不要用过解析数据包里的source mac得到,直接让终端发自己的MAC协调器接受就好

可能是你的ZDP_MgmtLeaveReq选择了rejion

nicolas zhao4:

回复 x h:

请问ZDP_MgmtLeaveReq如何得知设备离开的状态信息,回调接口是哪个?

目前的问题是Rejoin参数赋0还是1终端都能加回网络,调用该接口还需要跟其他操作吗

赞(0)
未经允许不得转载:TI中文支持网 » 在路由器上使用NLME_DirectJoinRequest()和ZDP_MgmtLeaveReq(),不能让已经加入到协调器上的终端节点退出协调器,为何?盼赐教!
分享到: 更多 (0)