只有协调器和终端构成网络,终端处于低功耗。在协调器和终端都定义了:
#define ZDO_MGMT_LEAVE_REQUEST
#define ZDO_MGMT_LEAVE_RESPONSE
在协调器中使用删除节点命令
uint8 lex;
zAddrType_t leaveID;
leaveID.addrMode=(afAddrMode_t)Addr16Bit;
leaveID.addr.shortAddr=0;
for(lex=0;lex<8;lex++)
{
MyLIEEE[lex]=Addr2[lex+5];
} ZDP_MgmtLeaveReq(&leaveID,MyLIEEE,0,1,1);
不能删除节点。MyLIEEE就是节点的IEEE地址,在入网的时候记录的,断点调试和通过SmartRF Flash Programmer读出的一样。但是不能删除节点,求解答。
Tianhao Wang:
求解答
Tianhao Wang:
回复 Tianhao Wang:
求解答。
Tianhao Wang:
回复 Tianhao Wang:
求解答
Tianhao Wang:
回复 Tianhao Wang:
求解答
Tianhao Wang:
回复 Tianhao Wang:
求解答
wei shi5:
leaveID.addr.shortAddr=0;这个错了,看,这个为要删除的设备的地址
VV:
有看到空中的报文交互吗?
Tianhao Wang:
回复 VV:
由于公司这边测试有多台zigbee所以报文不好抓。
关于我对afStatus_t ZDP_MgmtLeaveReq( zAddrType_t *dstAddr, uint8 *IEEEAddr, uint8 RemoveChildren, uint8 Rejoin, uint8 SecurityEnable )函数的理解 uint8 *IEEEAddr应该是删除设备的地址
而 zAddrType_t *dstAddr应该是删除设备的父节点的信息,不知道这样理解有没有错
wei shi5:
回复 Tianhao Wang:
你都不成功肯定就错啦,你去看例程,
static void MT_ZdoMgmtLeaveRequest(uint8 *pBuf){ uint8 cmdId; uint8 retValue; zAddrType_t destAddr; uint8 *pIEEEAddr; uint8 removeChildren; uint8 rejoin;
/* parse header */ cmdId = pBuf[MT_RPC_POS_CMD1]; pBuf += MT_RPC_FRAME_HDR_SZ;
/* Destination Address */ destAddr.addrMode = Addr16Bit; destAddr.addr.shortAddr = osal_build_uint16( pBuf ); pBuf += 2;
/* IEEE address */ pIEEEAddr = pBuf; pBuf += Z_EXTADDR_LEN;
/* Rejoin if bit0 is set */ rejoin = ( *pBuf & 0x01 ) ? TRUE : FALSE;
/* Remove Children if bit1 is set */ removeChildren = ( *pBuf & 0x02 ) ? TRUE : FALSE;
retValue = (byte)ZDP_MgmtLeaveReq( &destAddr, pIEEEAddr, removeChildren, rejoin, 0);
MT_BuildAndSendZToolResponse(((uint8)MT_RPC_CMD_SRSP | (uint8)MT_RPC_SYS_ZDO), cmdId, 1, &retValue);}
这里面明显就写了是destAddr啊,不知道你是咋想的,父节点 ,父节点你随时都切掉掉的..
天空:
回复 Tianhao Wang:
可以参考如下:
NLME_LeaveReq_t req;
req.extAddr = extAddr; req.removeChildren = FALSE; req.rejoin = TRUE; req.silent = FALSE;
通过AddrMgrEntryGet(),找出相同IEEE地址的设备,然后用NLME_LeaveReq()删除即可。