zigbee协议栈中的广播通信方式

广播通讯实验

 

1、打开SampleApp.c对下图代码进行配置:

zigbee协议栈中的广播通信方式

如上图所示,在SDApp_DstAddr结构体中我们配置通信方式,其中我们要做一些改动,例如将SDApp_DstAddr.addrMode改为SDApp_DstAddr.addrMode=AddrBroadcast; 还要将SDApp_DstAddr.addr.addr.shortAddr改为oxffff; SDApp_DstAddr结构体是配置接收者的信息,而SDApp_epDesc结构体是配置自身设备的信息,最后我们将自身设备的信息进行注册。

在接收方中需要配置通信方式为广播通信方式、确定接收端点、配置网络地址为0xffff;在发送方我们主要配置发送端点、任务号及一些相关的发送信息即可。

2.假如我现在只用协调器做为发送数据的设备,其他设备为接收设备,那么在发送方和接收方的具体流程为:在设备入网的时候会触发以下应用层事件:

zigbee协议栈中的广播通信方式

如上图所示,这个事件会在一段时间后触发另一个应用层时间SDApp_SEND_MSG_EVT,由事件名可知,是可以出发发送函数的事件,所以在if条件语句当中,如果为协调器设备(发送方)则只保留DEV_ZB_COORD判断语句即可,反之则只去掉DEV_ZB_COORD判断语句。

3.对于发送方我们要寻找应用层事件值为SDApp_SEND_MSG_EVT部分的代码如下:

zigbee协议栈中的广播通信方式

进入到SDApp_SendTheMessage();代码如下:

zigbee协议栈中的广播通信方式

图中AF_DataRequest便是我们用来发送数据的函数,其中的参数分别是指:目标信息,发送方信息,发送的簇指令,发送的数据长度,即将要发送出去数据的首地址等等。

4.对于接受方我们则要寻要到afIcomingData函数中调用的afBuildMSGIncoming函数,在这个函数中有两个比较重要的地方为:

zigbee协议栈中的广播通信方式

zigbee协议栈中的广播通信方式

在这里我们可以看到这个函数把一个已经初始化的消息发送给了应用层比较重要的语句为Msgpkt->hdr.event=AF_INCOMING_MSG_CMD,而在他osal_msg_send函数中会调用一个函数去触发所对应层的消息事件,对于发送方我们要将AF_INCOMING_MSG_CMD中的接收函数注释掉。