ZigBee简易串口透传(2)

2020-05-05 16:06

SampleApp_SPI_SendData_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_SPI_SendData_DstAddr.addr.shortAddr = 0xFFFF; }

else//其它设备类型则用单播 {

SampleApp_SPI_SendData_DstAddr.addrMode = (afAddrMode_t)Addr16Bit; SampleApp_SPI_SendData_DstAddr.endPoint = SAMPLEAPP_ENDPOINT; SampleApp_SPI_SendData_DstAddr.addr.shortAddr = 0x0000; }

if ( AF_DataRequest ( &SampleApp_SPI_SendData_DstAddr,

(endPointDesc_t *)&SampleApp_epDesc, SAMPLEAPP_FLASH_CLUSTERID, len, buf,

&SampleApp_TransID, 0,

AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ) {

osal_mem_free( rbuf ); //必须释放内存,不然造成溢出! } else {

osal_mem_free( rbuf ); //必须释放内存,不然造成溢出! } }

在函数SampleApp_SPI_SendData()中根据设备的类型确定了地址为广播地址还是单播地址,因为我们现在梳理的是协调器到路由器的数据流程,所示devStartMode == MODE_HARD,即将地址设置为广播地址,串口数据被以广播的形式发送到网络中的所有设备。

4、数据的接收

当协调器的串口接收到数据后将信息以广播的形式发送到网络中所有设备,网络中的路由器接收到来自空中的信息时会触发事件AF_INCOMING_MSG_CMD,具体程序如下。

程序代码

uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events ) {

if ( events & SYS_EVENT_MSG )//判断任务(一个任务可以有多个事件) {

while ( MSGpkt )//对比事件 {

switch ( MSGpkt->hdr.event ) {

case AF_INCOMING_MSG_CMD:

SampleApp_MessageMSGCB( MSGpkt ); break;

6

……

}

当触发事件AF_INCOMING_MSG_CMD时,协议中中调用了函数SampleApp_MessageMSGCB()对来自空中的信息包进行进一步的处理。

5、数据处理函数SampleApp_MessageMSGCB()

当路由器接收到来自协调器空中的信息后,触发事件AF_INCOMING_MSG_CMD并调用了函数SampleApp_MessageMSGCB()对其处理,函数SampleApp_MessageMSGCB()具体代码如下。

程序代码

void SampleApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) {

switch ( pkt->clusterId ) {

uint8 *pointer1;

case SAMPLEAPP_PERIODIC_CLUSTERID: break;

case SAMPLEAPP_FLASH_CLUSTERID:

pointer1=&pkt->cmd.Data[1]; //接收数据指针,指向数据

HalUARTWrite(0,pointer1,pkt->cmd.Data[0]);//cmd.Data[0]是数据的大小 break; } }

7


ZigBee简易串口透传(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:s版五年级下册课后练习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: