基于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使用方法基本同上,只是不需要输入路由器的地址。