车干的ZigBee学习笔记十——设备间第一次对话剖析

Vevina ·
更新时间:2024-11-14
· 784 次阅读

一、设备对话流程

在这里插入图片描述

二、发送数据函数 AF_DataRequest( fAddrType_t *dstAddr, //目标设备地址 endPointDesc_t *srcEP, //端口描述符 uint16 cID, //命令号 uint16 len, //数据长度 uint8 *buf, //数据 uint8 *transID, //发送数据包序列号 uint8 options, //有效 位掩码的发送选项,一般设为AF_DISCV_ROUTE. uint8 radius //传送跳数或半径,一般设为AF_DEFAULT_RADIUS )

目标设备的地址,我们用地址结构体来表示

typedef struct { union { uint16 shortAddr; //网络地址,该地址是设备在加入网络时由协议栈分配的 ZLongAddr_t extAddr; //64位扩展地址,全球唯一 }addr; afAddrMode_t addrMode; //地址模式(广播,组播,单播) byte endPoint; //端口号,可供范围1~240 uint16 panId; //一个无线网络的网络号 }afAddrType_t; 三、发送模式结构体 typedef enum { afAddrNotPresent = AddrNotPresent, //当前地址不存在 afAddr16Bit = Addr16Bit, //用于单播 afAddr64Bit = Addr64Bit, //用于单播 afAddrGroup = AddrGroup, //用于组播 afAddrBroadcast = AddrBroadcast //用于组播 }afAddrMode_t; 四、端口描述符 typedef struct { byte endPoint; //端口号 byte *task_id; //指定哪一个任务 SimpleDescriptionFormat_t *simpleDesc; //设备简单描述符 afNetworkLatencyReq; //延时请求 }endPointDesc_t; 这里单独看一下设备简单描述符 typedef struct { byte EndPoint; //端口号 uint16 AppProfId; //规范号,一个规范定义一个应用领域,如,智能家居,工业厂房监控,商业楼宇自动化等 uint16 AppDeviceId; //设备类型ID byte Reserved:4; //保留位 byte AppNumInClusters; //输入簇的个数 cId_t *pAppInClusters; //输入簇的列表 byte AppNumOutClusters; //输出簇的个数 cId_t *pAppOutClusterList; //输出簇的列表 }SimpleDescriptionFormat_t;

可以看到上面有一个规范号,那么规范是什么呢?
规范:在ZigBee网络中进行数据收发都是建立在应用规范基础上,每个应用规范都有一个ID来标识,应用规范又可以分为公共规范和制造商特定规范,公共ID的范围是0x0000 —0x7FFF, 制造商特定规范ID的范围是0xbF00~0xFFFF

簇的概念

在一个规范下,又提出了簇的概念,簇是一个应用领域下的一个特定对象,例如:智能家居中有这个调光器就需要一些命令,如开灯、关灯、变亮、变暗等,实现这些操作需要不同的命令,多个操作命令的集合叫做簇

在设备简单描述符中需要填充输入簇和输出簇,填充时需要注意:
消息发送方需要把命令放在输出簇里,那么消息接收方需要把同样的命令放在输入簇里,之前的设备间第一次对话,由于输入输出簇是一样的,所以协调器和终端设备间也能正常通信。


作者:直到遇见你--



zigbee

需要 登录 后方可回复, 如果你还没有账号请 注册新账号