微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 请教 ZDP_MgmtPermitJoinReq 用法!

请教 ZDP_MgmtPermitJoinReq 用法!

时间:10-02 整理:3721RD 点击:

请教一下我现在想实现协调器上面通过一个按键来实现,终端和路由在一定的时间内可以加入协调器

//事件按键处理
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 dstAddr;
    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);
    
  }

1、在协调器下载程序后我触发按键中断,LED_D2灯亮起,然后我给终端和路由上电可是我的路由和终端还是加到了

我的协调器里面了,请问一下是不是我哪里设置错了

2、还有我想协调器刚上电就不让终端和路由加入协调器

3、现在我的协调器里面我已经加了NV_RESTORE

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

2,uint8 NLME_PermitJoining = TRUE; 设置为FALSE

请问怎么阻止后续的router加入呢?我想一个协调器带动150个路由器,等150个加入后关闭加入功能,请问怎么关闭啊?

谢谢你的回复,你的说法是OK的

@YANG

ZDP_MgmtPermitJoinReq

补充一个,ZDP_MgmtPermitJoinReq是ZDO命令,因为使用的是广播地址,并不能作用于协调器本身,应该用NLME_PermitJoiningRequest和ZDSecMgrPermitJoining。

谢谢Aries补充!

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

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

谢谢您! 可不可以这么理解 当Router达到我要求的数目时,我直接在协调器里调用NLME_PermitJoiningRequest(0);就能阻止后续的路由器加入,对吗?

谢谢您!

哦,终于理解ZDP_MgmtPermitJoinReq的用法了。当路由器的数量达到150时,我在协调器的SerialApp.c内直接调用NLME_PermitJoiningRequest就能阻止后续的路由器加入了是吗?请问两个协调器会不会干扰?

hi VV: 

   我想将NLME_PermitJoining设置为FALSE,为什么我搜索时,没有找到这个变量的定义呢,希望能告诉我一下这个变量的定义在哪个文件夹下。

                                                                                                                                                                                                                                        谢谢!

NLME_PermitJoining估计被ti的定义在不开源的那部分了

如果被定义在不开源的部分了,那么我怎么控制,在开始的时候不允许设备入网呢,默认是设备可以入网,自己调用NLME_PermitJoiningRequest(),还是有宏定义可以解决这个问题?

uint8 NLME_PermitJoining = TRUE; 这个定义是要自己定义么,要在哪里定义呢?在协议栈里面没有搜到,我在zcl_samplesw.c里面重新定义时又报错重复定义了

这个变量默认是定义成NLME_PermitJoining = TRUE,在library文件里面定义了。

在应用层直接使用就可以了

请问在设备收到ZDP_MgmtPermitJoinReq指令后进行相应调用NLME_PermitJoiningRequest()这个过程是协议栈自动的么?还是要用户自己加入某个消息或者事件的处理函数呢?

协议栈自动的,

ZDO_ProcessMgmtPermitJoinReq( zdoIncomingMsg_t *inMsg )

VV

协议栈自动的,

ZDO_ProcessMgmtPermitJoinReq( zdoIncomingMsg_t *inMsg )

请教VV, 我在项目里没有找到这个函数的调用的地方,是封装起来了吗?

因为我目前遇到的问题是:协调器已经禁止入网,但是设备还是可以通过路由器入网。

查找Mgmt_Permit_Join_req这个原语    需要宏定义才会生效。   在options 预编辑一下就即可使用

你好,我发现代码里没有,是自己添加了才行的。

你说的在options预编译里面是增加一个 预定义变量吗?

定义 ZDO_MGMT_PERMIT_JOIN_REQUEST =1  吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top