This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

新年发福利,MAC地址白名单过滤解决方案最新版。(ZigBee智能家居必备)

Other Parts Discussed in Thread: CC2538, CC2530, Z-STACK

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