This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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了,当然不允许入网了。