完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-4 08:53 编辑
很多同志对ZigBee的MAC地址白名单设计一直很困惑,其实不难,下面介绍一下本人针对ti的ZStack协议栈如何添加节点白名单的设计方法: 首先,在SampleApp.h中声明两个外部全局变量: extern uint8 extAddrsList[10][16]; //定义一个二维数组用于存储16字节的MAC地址,最多加入白名单的节点有10个 extern uint8 extAddrsListCnt; //加入节点计数 在Coordinate.c注册串口回调函数,添加如下代码: uint8 extAddrsList[10][16]; //全局变量定义 uint8 extAddrsListCnt=0; void uartRxCB( uint8 port, uint8 event )//串口回调函数 [ uint8 num,uartbuf[16]; num=HalUARTRead(0,uartbuf,16); if(num==16) [ osal_memcpy(extAddrsList[extAddrsListCnt++],uartbuf,16); //将串口读取的合法MAC地址添加到白名单列表中 //HalUARTWrite(0,uartbuf,16); HalLedSet ( HAL_LED_1, HAL_LED_MODE_TOGGLE ); ] afAddrType_t SampleApp_DstAddr; //定义目的发送地址类型 SampleApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; //设置地址模式为单播发送数据 SampleApp_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; //目的端口号 SampleApp_DstAddr.addr.shortAddr = 0xFFFF; //设置网络地址为全网广播模式]协调器组建网络后,上位机通过串口给协调器发送所要加入白名单节点的MAC地址,并将其添加到白名单记录中; 子节点请求入网时会发起一个AssoReq指令,该指令包含了该节点的MAC地址信息;协调器收到后,在ZDO层验证该地址是否在白名单记录中,若不在则返回一包拒绝信息,否则允许其加入网络,并修改子节点表的信息。具体设计思路是在Zstack协议栈ZDO层的ZDApp.c中修改ZStatus_t ZDO_JoinIndicationCB(uint16 ShortAddress, uint8 *ExtendedAddress,uint8 CapabilityFlags, uint8 type)函数,该函数可以直接接驳NWK层处理子节点请求入网的事件,在此加入白名单验证,不合法的地址直接返回ZFailure。修改后ZDO_JoinIndicationCB()函数核心代码如下: ZStatus_t ZDO_JoinIndicationCB(uint16 ShortAddress, uint8 *ExtendedAddress,uint8 CapabilityFlags, uint8 type) [ uint8 flag=0; //MAC地址白名单比对结果标志 uint8 buf[16]; //存储入网节点的MAC地址 To_string(buf,ExtendedAddress,8); //调用To_string函数使MAC地址以16进制形式存储在buf数组中 for(uint8 i=0;i if(osal_memcmp(buf,extAddrsList,16)==true) //比对成功则跳出执行下面的事件 [ flag=1; //比对成功flag置1 break; ] ] if(!flag) //若比对的结果不存在,则return ZFailure return ZFailure; …………….. ………… ] 到此,ZigBee的MAC地址白名单设计分享完毕。 |
|
相关推荐
2个回答
|
|
这也有个相关的。谢谢楼主的经验分享
http://www.deyisupport.com/question_answer/wireless_connectivity/zigbee/f/104/t/80933.aspx |
|
|
|
谢谢分享!
|
|
|
|
只有小组成员才能发言,加入小组>>
309 浏览 1 评论
513 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
754 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
641 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1113 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
226浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
181浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
46浏览 13评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
149浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
158浏览 12评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:06 , Processed in 1.164545 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号