車乾的ZigBee學習筆記十——設備間第一次對話剖析

一、設備對話流程

在這裏插入圖片描述

二、發送數據函數

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

簇的概念

在一個規範下,又提出了簇的概念,簇是一個應用領域下的一個特定對象,例如:智能家居中有這個調光器就需要一些命令,如開燈、關燈、變亮、變暗等,實現這些操作需要不同的命令,多個操作命令的集合叫做簇

在設備簡單描述符中需要填充輸入簇和輸出簇,填充時需要注意:
消息發送方需要把命令放在輸出簇裏,那麼消息接收方需要把同樣的命令放在輸入簇裏,之前的設備間第一次對話,由於輸入輸出簇是一樣的,所以協調器和終端設備間也能正常通信。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章