zigbee组网函数的一些用法

时间:2024-02-16 11:44:58


1.NLME_PermitJoiningRequest(0) (1)值0x00:表示禁止加入网络  (2)值0x01-0xFE:表示允许链接的秒数 (3) 值0xff:表示启用网络

    同时此函数:是对于自己而言的只管本节点是否允许其他设备加入,管不了整个网络。所以多级组网或者设备很多的时候,不但协调器的Permit需要打开,下面Router的Permit也要打开,否则一旦设备和协调器之间无法直接通信,或者协调器直接挂载的设备数已经达到最大值,都会导致设备无法入网。同样,设备退网的时候,也需要将整个网络的Permit都关掉,不然的话,设备一退网,如果发入网请求的话,又会加回来,这就是有人说的设备退不了网的情况。(是让自己不允许其他设备加入,只是一个内部的操作,没有无线数据的交互)

2.

ZDP_MgmtPermitJoinReq:函数原型extern afStatus_t ZDP_MgmtPermitJoinReq( zAddrType_t *dstAddr,
                               byte duration,
                               byte TcSignificance,
                               byte SecurityEnable );

  是通过 地址 ,告诉某个设备 或者 所有路由    开启或者关闭 允许其他设备入网但是有一点要明确的是, 如果通信是加密的, 那么 就必须有一个trust center。 一般是协调器,因为我上面的通信是加密的, 关了协调器 就没有了 trust center,导致了 终端只能association  不能入网!(发送命令给别人,让别的设备不允许其他设备加入。是通过无线数据让别的设备不允许加入。设备在收到ZDP_MgmtPermitJoinReq进行处理的时候,最后调用的也是NLME_PermitJoiningRequest来实现的。

3.zigbee节点退出网络 NLME_LeaveReq()

离开网络分两种机制:(1)父节点发送离网请求要求子节点离网  ;(2)节点自己请求自己离网,并通知父节点和邻居节点

           NLME_LeaveReq_t leaveReq;
 
          osal_memset((uint8 *)&leaveReq,0,sizeof(NLME_LeaveReq_t));
 
          osal_memcpy(leaveReq.extAddr,NLME_GetExtAddr(),Z_EXTADDR_LEN);  //1.要使远程节点离开网络,应将NLME_LeaveReq_t参数的extAddr指针赋给远程节点64位IEEE地址。通过处理Device_annce消息
                                               //NLME_LeaveReq_t参数的extAddr参数为NULL,意思是当前自己离开网络,并通知父亲节点和周围的设备。
        req.removeChildren = FALSE;//是否移除子设备
        req.rejoin = TRUE;//是否重新加入网络,FALSE 设备不再加入网络
        req.silent = FALSE;
        NLME_LeaveReq(&req);

 

对于按键允许入网的一篇不错的博文:https://blog.csdn.net/nicole088/article/details/52458772