搜索
bottom↓
回复: 10

关于ZIGBEE使用NLME_PermitJoiningRequest()控制节点加入网络解答

[复制链接]

出0入85汤圆

发表于 2014-6-6 17:16:46 | 显示全部楼层 |阅读模式
本帖最后由 CK345 于 2014-6-6 17:17 编辑

问题1:我在使用协调器建立网络15分钟后,使用NLME_PermitJoiningRequest(0)函数禁止新节点加入网络,不知道使用NLME_PermitJoiningRequest(0)函数禁止节点加入是都正确?

问题2:使用NLME_PermitJoiningRequest(0)这个函数禁止节点加入网络后(15分钟后),我原来加入网络的节点在信号很弱的时候掉线了(离开网络),却再也不能自动连上协调器(不能回到网络)。要把协调器使用NLME_PermitJoiningRequest(0xff)函数允许节点加入才可以连上协调器,有没有可以让协调器不使用NLME_PermitJoiningRequest(0xff)函数就能让掉线的节点自动连上原来的协调器?也就是协调器不需要改软件,改节点的软件。

期盼解答,十分谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入16汤圆

发表于 2014-6-6 19:44:53 | 显示全部楼层
1, 用DP_MgmtPermitJoinReq来代替NLME_PermitJoiningRequest, 因为还需要处理security keys.
2, 所有节点信号弱不需要离开网络,但其可以选择信号强的节点作父节点重新加入. 由于新加入的节点选择其它路由节点作父节点, 故这个过程不需要协调器允许NLME层的permitjoining, 而是需要协调器打开security层的permitjoining 传keys给新加入的节点. 如果是rejoin, 则节点已经有keys就不需要协调器再传key了.

出0入85汤圆

 楼主| 发表于 2014-6-6 20:36:30 | 显示全部楼层
本帖最后由 CK345 于 2014-6-6 20:43 编辑
Elex 发表于 2014-6-6 19:44
1, 用DP_MgmtPermitJoinReq来代替NLME_PermitJoiningRequest, 因为还需要处理security keys.
2, 所有节点信 ...


你好,谢谢你的回复,刚才查了你说的这个函数DP_MgmtPermitJoinReq 协议栈里面没找到 我现在使用的版本是ZStack-CC2530-2.5.1a 你不是这个函数 ZDP_MgmtPermitJoinReq()
要是ZStack-CC2530-2.5.1a里面的ZNP程序建立协调器,网络中只有一个协调器和多个终端设备。现在我想让协调器上电建立网络之后就 调用ZDP_MgmtPermitJoinReq(&dstAddr, 0x00, 1, FALSE);来禁止任何设备加入网络。请问这个调用放在什么位置最合适?也就是说要绝对保证在建立网络之后没有任何设备能加入网络。

出0入16汤圆

发表于 2014-6-6 22:33:53 | 显示全部楼层
是ZDP_MgmtPermitJoinReq.
你使能NV_RESTORE就可以保存网络信息不用每次上电建立网络的.
网络状态是可以默认上电打开或关闭的,具体见全局变量NLME_PermitJoining初始值.
只有在需要增加设备的时候才打开网络,所有设备加入网络后就不需要再打开网络了.

出0入85汤圆

 楼主| 发表于 2014-6-7 12:32:23 | 显示全部楼层
本帖最后由 CK345 于 2014-6-7 12:59 编辑
Elex 发表于 2014-6-6 22:33
是ZDP_MgmtPermitJoinReq.
你使能NV_RESTORE就可以保存网络信息不用每次上电建立网络的.
网络状态是可以默 ...


//事件按键处理
void GenericApp_HandleKeys( uint8 shift, uint8 keys )
{
  (void)shift;  // Intentionally unreferenced parameter
  
  if ( keys & HAL_KEY_SW_6 )
  {
     //   LED_D2=~LED_D2;
  }

  if ( keys & HAL_KEY_SW_5 )
  {
   
   

   zAddrType_t destAddr;
    LED_D2=~LED_D2;
    // enable permit joining on all routers
/*
  dstAddr.addrMode = AddrBroadcast;
  dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVZCZR;            
  ZDP_MgmtPermitJoinReq(&dstAddr, 0xFF, 1, FALSE);            
*/

  // disable permit joining on all routers
  dstAddr.addrMode = AddrBroadcast;
  dstAddr.addr.shortAddr = NWK_BROADCAST_SHORTADDR_DEVZCZR;            
  ZDP_MgmtPermitJoinReq(&dstAddr, 0x00, 1, FALSE);
   
  }
我现在在协调器里面这么做,可以吗?还有我这是禁用路由的,要是禁用终端呢

出0入0汤圆

发表于 2014-6-23 08:41:27 | 显示全部楼层
不错的帖子,顶下!不过,牛人怎么没有回复了,还有楼主的问题解决了吗?能否分享下

出0入0汤圆

发表于 2014-10-29 18:50:47 | 显示全部楼层
1、uint8 NLME_PermitJoining = TRUE; 设置为FALSE (这个变量可能定义在协议的未开源部分了,应该属于一个全局变量,如果在用户程序的初始化部分将其设置为FALSE

       那么,协调器或者是路由器上电后就不允许设备的加入了)

2,如果NV_RESTORE开启了,路由和终端设备以前加过这个协调器,那么即便你Pertmitjoin禁止了,他们也能加进来的

3,NLME_PermitJoiningRequest是让自己不允许其他设备加入,只是一个内部的操作,没有无线数据的交互。  

  if ( keys & HAL_KEY_SW_1 )
  {
    NLME_PermitJoiningRequest(20); //按下按键则允许设备在20s内加入,如果是0则禁止加入
  }

ZDP_MgmtPermitJoinReq发送命令给别人,让别的设备不允许其他设备加入。是通过无线数据让别的设备不允许加入。设备在收到ZDP_MgmtPermitJoinReq进行处理的时候,最后调用的也是NLME_PermitJoiningRequest来实现的。

出0入85汤圆

 楼主| 发表于 2014-10-29 21:23:20 | 显示全部楼层
fiaanull 发表于 2014-6-23 08:41
不错的帖子,顶下!不过,牛人怎么没有回复了,还有楼主的问题解决了吗?能否分享下 ...

可以这么干,你试试就知道了

出0入0汤圆

发表于 2014-11-1 22:10:08 | 显示全部楼层
顶一下,不错的帖子!

出0入0汤圆

发表于 2014-11-12 15:06:48 | 显示全部楼层
Permit Join只能限制Associate Join模式,无法限制恶意的Rejoin模式

出0入0汤圆

发表于 2019-2-25 11:09:19 | 显示全部楼层
不错!试过可行
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 22:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表