有三个节点协调器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下面。为何啊?