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.

协调器可以指定子节点IEEE地址入网吗?

协调器可以指定子节点IEEE地址入网吗?

  • 只允许指定IEEE地址的子节点入网?推荐参考MAC地址白名单

  • 你好 有具体的文档吗?

  • 您可以参考之前论坛的置顶帖

    https://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/80933.aspx

    如何使用白名单功能?

    1,在tasksArr[]中,添加ZDE_event_loop,注意要先#include"ZDEnhanced.h",然后在osalInitTasks添加ZDE_Init( taskID++ ),ZDE_event_loop的顺序要与ZDE_Init相同。

    2,在你的Z-stack应用层任务中,用函数ZDE_RegisterJoinDeniedCB注册一个回调函数API_JoinDenied(函数名可以自己定义),然后这个函数实体如下

    1
    2
    3
    4
    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使用方法:

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