请教一下我现在想实现协调器上面通过一个按键来实现,终端和路由在一定的时间内可以加入协调器
//事件按键处理
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
VV:
1,如果NV_RESTORE开启了,路由和终端设备以前加过这个协调器,那么即便你Pertmitjoin禁止了,他们也能加进来的
2,uint8 NLME_PermitJoining = TRUE; 设置为FALSE
YANG Lu2:
回复 VV:
请问怎么阻止后续的router加入呢?我想一个协调器带动150个路由器,等150个加入后关闭加入功能,请问怎么关闭啊?
wukailei Like:
回复 VV:
谢谢你的回复,你的说法是OK的
VV:
回复 YANG Lu2:
@YANG
ZDP_MgmtPermitJoinReq
Aries Lord:
回复 VV:
补充一个,ZDP_MgmtPermitJoinReq是ZDO命令,因为使用的是广播地址,并不能作用于协调器本身,应该用NLME_PermitJoiningRequest和ZDSecMgrPermitJoining。
VV:
回复 Aries Lord:
谢谢Aries补充!
NLME_PermitJoiningRequest是让自己不允许其他设备加入,只是一个内部的操作,没有无线数据的交互
ZDP_MgmtPermitJoinReq发送命令给别人,让别的设备不允许其他设备加入。是通过无线数据让别的设备不允许加入。设备在收到ZDP_MgmtPermitJoinReq进行处理的时候,最后调用的也是NLME_PermitJoiningRequest来实现的。
YANG Lu2:
回复 Aries Lord:
谢谢您! 可不可以这么理解 当Router达到我要求的数目时,我直接在协调器里调用NLME_PermitJoiningRequest(0);就能阻止后续的路由器加入,对吗?
YANG Lu2:
回复 VV:
谢谢您!
哦,终于理解ZDP_MgmtPermitJoinReq的用法了。当路由器的数量达到150时,我在协调器的SerialApp.c内直接调用NLME_PermitJoiningRequest就能阻止后续的路由器加入了是吗?请问两个协调器会不会干扰?
Mr wang1:
回复 VV:
hi VV:
我想将NLME_PermitJoining设置为FALSE,为什么我搜索时,没有找到这个变量的定义呢,希望能告诉我一下这个变量的定义在哪个文件夹下。
谢谢!
shuming ye:
回复 Mr wang1:
NLME_PermitJoining估计被ti的定义在不开源的那部分了