NLME_PermitJoiningRequest(0)是禁止新节点加入网络还是加入本节点
我在协调器中调用NLME_PermitJoiningRequest(0),那新节点是不能加入协调器但可以加入已存在的路由器? 还是不能加入整个网络?
通过路由器加网是没有问题的
正解。 NLME_PermitJoiningRequest只管本节点是否允许其他设备加入,管不了整个网络。所以多级组网或者设备很多的时候,不但协调器的Permit需要打开,下面Router的Permit也要打开,否则一旦设备和协调器之间无法直接通信,或者协调器直接挂载的设备数已经达到最大值,都会导致设备无法入网。同样,设备退网的时候,也需要将整个网络的Permit都关掉,不然的话,设备一退网,如果发入网请求的话,又会加回来,这就是有人说的设备退不了网的情况。
这个函数 只能允许 让 路由 器用吗?
我看 EZMODE的 函数实现中
开permitjoin 时是 这样的
// openers will broadcast permit joining
case EZMODE_STATE_OPENER:
zclEZModeOpener = 1;
// enable joining both locally and over-the-air
NLME_PermitJoiningRequest( (byte)(EZMODE_TIME / 1000) );
ZDP_MgmtPermitJoinReq( &dstAddr, (byte)(EZMODE_TIME / 1000), TRUE, FALSE);
.....
break;
为什么 要调用两条函数呢?
单独使用 NLME_PermitJoiningRequest 不可以吗?
ZDP_MgmtPermitJoinReq 又有什么 作用?
SampleSW 中 开permitjoin 的实现 又只用 ZDP_MgmtPermitJoinReq
另外参数的地址 代表什么 意思? 是本设备的地址 还是 允许设备的 地址?
zAddrType_t tmpAddr;
tmpAddr.addrMode = Addr16Bit;
tmpAddr.addr.shortAddr = NLME_GetShortAddr();
// toggle permit join
gPermitDuration = gPermitDuration ? 0 : 0xff;
// Trust Center significance is always true
ZDP_MgmtPermitJoinReq( &tmpAddr, gPermitDuration, TRUE, FALSE );
请问 一个入网后 的路由器 (关掉协调器后)调用该函数 可以 让 终端设备入网吗?
我尝试了一下, 结果ubiqua 抓不到任何信息。
终端设备 加入 路由之后 也为显示成功,只是发了association ,后面一直data request。。。。
然后显示了一堆 update device
但是这时我打开 协调器时, 终端设备 直接加入 协调器,
后面我把协调器 关闭, 路由保持不变, 终端设备 迅速的切换了一下, 也不会断网`~~~~
请问到底 如何让 路由 允许 其他设备入网?
NLME_PermitJoiningRequest是让协调器自己关掉入网。
ZDP_MgmtPermitJoinReq是让协调器关掉附件路由的入网,地址就是路由器的地址,一般发个广播就行
谢谢你!
你说对了
NLME_PermitJoiningRequest 是对于自己而言, 开启或者关闭 本地端 允许其他设备入网
ZDP_MgmtPermitJoinReq 是通过 地址 ,告诉某个设备 或者 所有路由 开启或者关闭 允许其他设备入网
但是有一点要明确的是, 如果通信是加密的, 那么 就必须有一个trust center。 一般是协调器,
因为我上面的通信是加密的, 关了协调器 就没有了 trust center,导致了 终端只能association 不能入网!
@Aries Lord你好,
我想请教向你一下,如何使用NLME_PermitJoiningRequest
是需要在应用层设置NLME_PermitJoining = FALSE;吗?但是这句话一直编译不对
如果不需要的话,我在应用层按键触发这添加了
void SampleApp_HandleKeys( uint8 shift, uint8 keys )
{
if ( keys & HAL_KEY_SW_1 )
{
NLME_PermitJoiningRequest(0);
}
结果是根本不用按下按键s1就无法组网,不知道这是怎么回事,是少了什么步骤吗?
希望能给我建议,在此先谢谢了!
NLME_PermitJoiningRequest的参数如果是0,就是disable了,当然不允许入网了。