我在帖子上看了关于ZDP_MgmtPermitJoinReq的使用方法,尝试了一下,但是发现没有想象中的结果,情况是这样的:
我有三个节点,协调器,路由器,终端,可以正常组网,路由器和终端都可以发送消息给协调器,我可以从串口打印出来的。现在我在协调器上添加这样的代码:
if ( keys & HAL_KEY_SW_1 )
{
zAddrType_t dstAddr;
dstAddr.addr.shortAddr = 0xfffc; // all routers (for PermitJoin) devices
dstAddr.addrMode = AddrBroadcast;
if(NLME_PermitJoining)
{
ZDP_MgmtPermitJoinReq(&dstAddr, 0, TRUE, FALSE);
NLME_PermitJoiningRequest(0); //下面按键
P1_0 = 1;
}
else
{
ZDP_MgmtPermitJoinReq(&dstAddr, 0xff, TRUE, FALSE);
NLME_PermitJoiningRequest(0xFF);
P1_0 = 0;
}
}
先给协调器和路由器上电,待它们正常组网,我再摁下协调器的按键,再给终端上电。按照道理,终端是不能入网的,但是情况相反,终端通过路由器入网了,还给协调器发送了消息。
我进一步探究,通过抓包软件发现,按键按下后,协调器广播了一条数据出来,但是对路由器进行打断查看NLME_PermitJoining变量,发现一直为0x01。我有两点猜测:
1、路由器没有收到Mgmt_Permit_Joining_req原语
2、路由器收到了Mgmt_Permit_Joining_req原语,但是因为某些条件没有改变NLME_PermitJoining的值
这究竟是怎么回事呢?