关于ZDO_LeaveCnf的问题
时间:10-02
整理:3721RD
点击:
最近,在工程中,使用如下代码对Coordinator自身进行退网操作:
NLME_LeaveReq_t req;
req.extAddr = NULL;
req.rejoin = FALSE;
req.removeChildren = TRUE; /* true for the devices children to also leave */
req.silent = FALSE;
ret = NLME_LeaveReq(&req);
并按照文档的说法,在程序启动时注册回调函数
ZDO_RegisterForZdoCB(ZDO_LEAVE_CNF_CBID, Coordinator_Net_CloseNetworkConfirmed);
但在实际使用过程中,有的时候退网操作并不会触发该回调函数。经调试发现,出现这种情况的时候ZDO_LeaveCnf函数没有被执行,但ZDO_LeaveInd函数被执行了。
现在的问题是:
1.这算是BUG吗?
2.什么情况下,会只执行ZDO_LeaveInd,而不执行ZDO_LeaveCnf呢?
补充一下,并不是所有时候ZDO_LeaveCnf都不会执行,而是有些时候,概率在10%左右。
如果req.silent = TRUE,会有ZDO_LeaveCnf
如果req.silent = FALSE,会有ZDO_LeaveInd