一、設備對話流程
二、發送數據函數
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
簇的概念
在一個規範下,又提出了簇的概念,簇是一個應用領域下的一個特定對象,例如:智能家居中有這個調光器就需要一些命令,如開燈、關燈、變亮、變暗等,實現這些操作需要不同的命令,多個操作命令的集合叫做簇
在設備簡單描述符中需要填充輸入簇和輸出簇,填充時需要注意:
消息發送方需要把命令放在輸出簇裏,那麼消息接收方需要把同樣的命令放在輸入簇裏,之前的設備間第一次對話,由於輸入輸出簇是一樣的,所以協調器和終端設備間也能正常通信。