版本2.5.1a.应用在协调器中,目的是把路由器移除网络。
相关代码如下:
zAddrType_t leaveid;uint8 *extaddr;extaddr=pkt->srcAddr.addr.extAddr;leaveid.addrMode=(afAddrMode_t) Addr16Bit;leaveid.addr.shortAddr=pkt->srcAddr.addr.shortAddr;ZDP_MgmtLeaveReq(&leaveid,extaddr,0,0,0);
返回值显示成功发送,但是节点未移除
XX1:
已定义 ZDO_MGMT_LEAVE_REQUEST ZDO_MGMT_LEAVE_RESPONSE
Jiancan Chen:
注意到你的厂地址和短地址都是从 pkt->srcAddr 获取,而pkt->srcAddr.addr 是一个union, 这意味这 长短地址两者最多只有一个是正确的,取决于 pkt->srcAddr.addrMode 。 所以你的代码的问题是,地址错误。 可以使用 地址查询API获取 已知短地址的长地址(或已知长地址查询短地址)。 参考
APSME_LookupExtAddr() APSME_ LookupNwkAddr ()
JACK xiao1:
回复 Jiancan Chen:
首先 是获取 节点的MAC和网络地址,这个完成后
其他需要注意的就是
#define ZDO_MGMT_LEAVE_REQUEST
#define ZDO_MGMT_LEAVE_RESPONSE
这2个定义 必须在协调器和节点都要定义才可以
x h:
回复 XX1:
ZDP_MgmtLeaveReq(&leaveid,extaddr,0,0,0);这个函数里的参数设置错了
ZDP_MgmtLeaveReq(&leaveid,extaddr,1,0,0);第三个参数是1才会移除子设备
@fn ZDP_MgmtLeaveReq * * @brief This builds and send a Mgmt_Leave_req message. * * @param dstAddr – destination address of the message * IEEEAddr – IEEE adddress of device that is removed * RemoveChildren – set to 1 to remove the children of the * device as well. 0 otherwise. * Rejoin – set to 1 if the removed device should rejoin afterwards. 0 otherwise. * * @return afStatus_t