Zigbee共有五种通信方式,包括单播、广播、组播,MAC地址通信、绑定。
相关术语
Zigbee术语
一个设备有多个端点,一个端点对应一个应用,一个应用有多个属性和命令,相关的属性和命令归到一起形成簇,一个设备的这些应用一般属于同一类应用子集规范。
相关代码分析
xxApp.h文件中相关宏定义
#define TestApp_ENDPOINT 10 //端点号为10
#define TestApp_PROFID 0x0F04 //应用规范为0x0F04
#define TestApp_DEVICEID 0x0001 //由TI官方规定,不用考虑
#define TestApp_DEVICE_VERSION 0
#define TestApp_FLAGS 0
#define TestApp_MAX_CLUSTERS 1 //某端点多允许拥有的簇的个数最大值
#define TestApp_CLUSTERID 1 //簇ID为0X0001
xxApp.c文件中的相关常量
/* 簇ID的列表 */
const cId_t TestApp_ClusterList[TestApp_MAX_CLUSTERS] =
{
TestApp_CLUSTERID //0x0001
};
/* 简单描述符,对应用的描述 */
const SimpleDescriptionFormat_t TestApp_SimpleDesc =
{
TestApp_ENDPOINT, // int 端点号
TestApp_PROFID, // uint16 ProfId ID
TestApp_DEVICEID, // uint16 设备ID
TestApp_DEVICE_VERSION, // int 设备版本
TestApp_FLAGS, // int 程序标识
TestApp_MAX_CLUSTERS, // byte 输入命令数
(cId_t *)TestApp_ClusterList, // byte 输入命令列表地址
TestApp_MAX_CLUSTERS, // byte 输出命令数
(cId_t *)TestApp_ClusterList // byte 输出列表地址
};
各个通信模块的发送节点的相关程序
自身节点定义一个端点(任务)与应用层任务挂钩
void TestApp_Init( byte task_id )
{
TestApp_TaskID = task_id;
.............................
endPointDesc_t TestApp_epDesc; //定义一个端点描述符变量
TestApp_epDesc.endPoint = TestApp_ENDPOINT; //定义端点号为TestApp_ENDPOINT
TestApp_epDesc.task_id = &TestApp_TaskID; //将该端点与任务层挂钩
TestApp_epDesc.simpleDesc
= (SimpleDescriptionFormat_t *)&TestApp_SimpleDesc; //定义该任务的简单描述符
TestApp_epDesc.latencyReq = noLatencyReqs;
/* 这个函数必须要调用才能完成整个挂钩操作 */
afRegister( &TestApp_epDesc );
目标节点地址、端点、输入簇的配置
/* 通信地址模式 */
typedef enum
{
afAddrNotPresent = AddrNotPresent, //绑定
afAddr16Bit = Addr16Bit, //网络短地址(单播)
afAddr64Bit = Addr64Bit, //MAC地址通信
afAddrGroup = AddrGroup, //组播
afAddrBroadcast = AddrBroadcast //广播
} afAddrMode_t