请教 ZDP_MgmtPermitJoinReq 用法!
请教一下我现在想实现协调器上面通过一个按键来实现,终端和路由在一定的时间内可以加入协调器
//事件按键处理
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 吗?