ZigBee组播通信原理

来源:互联网 发布:dota地精工程师知乎 编辑:程序博客网 时间:2024/05/19 19:33


组播通信原理
组播通信:在Zigbee网络,模块可以分组来标记,发送的模块如果组号和网络里面标记模块的组号相对应,那么这些模块就可以
拿到这些无线数据包。


组播的特点:
1,分组中的编号是两个字节(即组号是两个字节)
2,组号必须和已经定义了的端点相关联。
   即:组都是和模块里已经定义了的端点相关联,如果我们说一个模块标记为组0x01,那么这个模块里面至少有一个定义了的
   端点与这个和组(0x01)相关联
 
3,发送模块必须指明发送给哪个组,哪个端点,簇编号,原则上,只要当接收模块的这三个参数匹配上了,才能拿到和处理这样
一个无线数据包。

4,组标记中,同一个模块下的定义的一个组,可以关联多个可用的端点,同一个端点也可以关联多个组。


代码示例:

#define SAMPLEAPP_FLASH_CLUSTERID    2        //簇编号#define SAMPLEAPP_FLASH_GROUP                 0x0001 //组编号afAddrType_t  SampleApp_Flash_DstAddr;    //组播// Setup for the flash command's destination address - Group 1SampleApp_Flash_DstAddr.addrMode          = (afAddrMode_t)afAddrGroup;//注意这里发送模式为组播SampleApp_Flash_DstAddr.endPoint          = SAMPLEAPP_ENDPOINT;SampleApp_Flash_DstAddr.addr.shortAddr    = SAMPLEAPP_FLASH_GROUP;//注意这里是接收模块的组编号endPointDesc_t SampleApp_epDesc;SampleApp_epDesc.endPoint   = SAMPLEAPP_ENDPOINT;//模块的端点SampleApp_epDesc.task_id    = &SampleApp_TaskID;//指明数据由接收方的哪一个任务来处理SampleApp_epDesc.simpleDesc = (SimpleDescriptionFormat_t *)&SampleApp_SimpleDesc;SampleApp_epDesc.latencyReq = noLatencyReqs;afRegister( &SampleApp_epDesc );//绑定aps_Group_t   SampleApp_Group;SampleApp_Group.ID = 0x0001; //接收模块的组编号osal_memcpy( SampleApp_Group.name, "Group 1", 7 );aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );//把组跟端点关联,一定要端点关联uint8         SampleApp_TransID = 0; //发送成功的帧条数,由底层负责更新uint8 buffer[3];uint16 flashTime = 856;//组播的数据buffer[0] = (uint8)(SampleAppFlashCounter++);buffer[1] = LO_UINT16( flashTime );buffer[2] = HI_UINT16( flashTime );if ( AF_DataRequest( &SampleApp_Flash_DstAddr,                     &SampleApp_epDesc,                     SAMPLEAPP_FLASH_CLUSTERID,                     3,                     buffer,                     &SampleApp_TransID,                     AF_DISCV_ROUTE,                     AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){}


代码很简单,有以下几点需要说明一下:

1,在使用上广播没有什么区别,仅仅是地址模式、地址内容不一样
2,可以调用aps_RemoveGroup方法解除关联。
2,协调器用到了组,要引入#include "aps_groups.h" 头文件。


0 0
原创粉丝点击