基于IAR for 8051 8.30和ARM 7.30编译的白名单库。
其中.lib文件是CC2530用,.a文件是CC2538用的。
使用方法:
1,将文件解压
2,在你们自己的z-stack工程下,文件夹Components\stack\zdo,删除ZApp.c,ZDConfig.c,ZDApp.h,ZDConfig.h四个文件。
3,解压后的文件,全部拷入文件夹Components\stack\zdo。
4,IAR打开z-stack的工程,IAR工程下删除ZApp.c文件,并且根据工程类型(协调器,路由器,终端节点和全功能节点)添加Coord-ZOD.lib,Router-ZDO.lib,EndDevice-ZDO.lib,All-ZDO.lib。
5,重新编译你的z-stack工程。
如何使用白名单功能?
1,在tasksArr[]中,添加ZDE_event_loop,注意要先#include"ZDEnhanced.h",然后在osalInitTasks添加ZDE_Init( taskID++ ),ZDE_event_loop的顺序要与ZDE_Init相同。
2,在你的Z-stack应用层任务中,用函数ZDE_RegisterJoinDeniedCB注册一个回调函数API_JoinDenied(函数名可以自己定义),然后这个函数实体如下
void API_JoinDenied(uint16 parent,ZDE_JoinDenied_t denied) { }
这个函数的参数parent是当前有新节点正在通过网络地址为parent的路由加入网络,denied是一个结构体,其中的extAddr是新设备的MAC地址,capability是设备类型,0xE0为路由,0x00为终端,Rejoin如果为FALSE,则为Associate模式加入,如果为TRUE则为Rejoin Unsecured模式,而Rejoin Secured的设备是直接通过认证。在这个函数中,可以添加你的上位机与协调器之间的通讯代码,让协调器把正在试图加入网络的新设备的MAC地址告诉上位机。
如果上位机允许一个新设备加入网络,协调器则需要输入新设备的MAC地址,即白名单过滤通过。
如果是把白名单发给其它路由器,可以使用函数ZDE_JoinAcceptReq,输入给协调器直接使用函数ZDE_WhiteListInput即可。
ZDE_JoinAcceptReq使用方法:
zAddrType_t dest;ZDE_JoinAcceptReq_t accept;dest.addrMode = afAddr16Bit;dest.addr.shortAddr = parent; //发给路由器sAddrExtCpy(accept.extAddrs,denied.extAddr); //设备MAC地址accept.life = 60;//白名单超时,最大254秒ZDE_JoinAcceptReq(&dest, &accept, 0);
ZDE_WhiteListInput使用方法基本同上,只是不需要输入路由器的地址。
Albin Zhang:
手动点赞!谢谢分享!
BR. AZ
yun gao:
@Aries Lord,
您好,我想问下您是否尝试过在此方案的基础上加入查询节点是否在线的机制?即当我通过串口向协调器输入了多个需要入网的节点的MAC地址后,发送查询指令即可列出刚才所输入的所有MAC地址,并指示哪些MAC地址在线哪些不在线的功能。我目前的想法是将MAC地址录入到协调器的NV中,不设超时机制,只要在线节点数和所输入的MAC地址数相同就关闭入网功能,并每隔一段时间更新节点的在线情况。不知道您对于查询节点是否在线的机制有没更好的想法?可否一起交流一下?
Aries Lord:
回复 yun gao:
可以实现的,你需要注册zdo_device_annce这条cluster ID,在收到节点入网后就更新你的白名单数据库
yun gao:
回复 Aries Lord:
@Aries Lord,
您好,您觉得在NV中建立白名单数据库空间是否足够?还是再搭载一个单片机辅助建立会更好一点?
Aries Lord:
回复 yun gao:
白名单是动态的数据,默认存在协调器或者各个路由器的RAM中,每条白名单只有4分钟的生存时间,一旦白名单中的设备入网,就可以删除这条白名单。你用这个库,可以再增加一个静态的白名单,存在上位机或者外扩存储器中,再根据当前环境,将静态白名单的数据添加至动态白名单中。
wenjin zeng:
回复 Aries Lord:
你好 按照你的步骤移植 报错了
user1913824:
前辈您好,我是做智能家居相关的学生党,对白名单入网认证方比较感兴趣,前辈能否分享一下生成lib之前的源代码或者分享一下详细的实现步骤,谢谢,我的邮箱是:mhming@126.com
zozo:
回复 wenjin zeng:
哈哈,我也是哦,看来搬用别人的方法是么用的,还是自己把基本的搞懂才好,互勉哈
bo qin1:
你好,我最近在弄入网过滤,看了你的帖子,但是不懂这个(根据工程类型(协调器,路由器,终端节点和全功能节点)添加Coord-ZOD.lib,Router-ZDO.lib,EndDevice-ZDO.lib,All-ZDO.lib)是在哪里添加啊?然后看你了你的整个过程还是很模糊,希望大神你能分享一下详细的步骤。
jinghuan hao:
现在正在研究入网过滤。大神有没有,源代码,工程文件或者详细调试步骤?
学习下,邮箱:1047381010@qq.com
谢谢。