文章發(fā)表于:2010-02-07 02:19
應(yīng)用框架(AF)
應(yīng)用框架層是應(yīng)用道APS層的OTA數(shù)據(jù)接口。此層也接收數(shù)據(jù)消息的終端多路復(fù)用器。AF為應(yīng)用提供以下功能:
·
·
哈哈,這里的函數(shù)應(yīng)該就是我們經(jīng)常要用到的函數(shù)了。
終端管理
每個(gè)設(shè)備都是Zigbee中的節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)有長地址和短地址,短地址被其他設(shè)備用來發(fā)送數(shù)據(jù)。每個(gè)節(jié)點(diǎn)又241個(gè)終端(0保留,1-240 可分配給應(yīng)用)。每個(gè)終端可以獨(dú)立設(shè)置地址;當(dāng)設(shè)備發(fā)送數(shù)據(jù)時(shí)必須指定目標(biāo)設(shè)備的短地址和接收終端。一個(gè)應(yīng)用必須注冊一個(gè)或多個(gè)終端用來接收或者發(fā)送數(shù)據(jù)。
簡單描述符-Simp
每個(gè)終端都必須有一個(gè)Zigbee簡單描述。這些描述對Zigbee網(wǎng)絡(luò)刻畫了這個(gè)終端,其他設(shè)備可以詢問這個(gè)終端以知道這個(gè)設(shè)備的類型。
typedef struct
{
} SimpleDescriptionFormat_t;
EndPoint – 終端號:1-240 這是節(jié)點(diǎn)的子地址,用來接收數(shù)據(jù)
AppProfId – 定義了這個(gè)終端上支持的Profile ID(剖面ID), ID最好遵循由ZigBee聯(lián)盟的分配。
AppDeviceId –終端支持的設(shè)備ID,ID最好遵循ZigBee聯(lián)盟的分配。
AppDevVer –此終端上設(shè)備執(zhí)行的設(shè)備描述的版本:0x00為Version 1.0.
Reserved – 保留
AppNumInClusters – 終端支持的輸入簇?cái)?shù)目
pAppInClusterList – 指向輸入Cluster ID列表的指針
AppNumOutClusters – 終端支持的輸出簇?cái)?shù)目
pAppOutClusterList – 指向輸出Cluster ID列表的指針
終端描述符-endPointDesc_t
節(jié)點(diǎn)中的每一個(gè)終端都必須有一個(gè)終端描述符
typedef struct
{
} endPointDesc_t;
task_id -任務(wù)ID指針,當(dāng)接收到消息時(shí),此任務(wù)ID將指示消息傳遞目的。接收到的消息是以O(shè)SAL消息形式包裝的,將發(fā)送到一個(gè)任務(wù)
simpleDesc
latencyReq
afStatus_t afRegister( endPointDesc_t *epDesc );
為設(shè)備注冊一個(gè)新的終端
epDesc
返回值:afStatus_t
epList_t *afRegisterExtended( endPointDesc_t *epDesc, pDescCB descFn );
在上面函數(shù)功能的基礎(chǔ)上增加了回調(diào)函數(shù),當(dāng)終端的簡單描述符被查詢時(shí)將調(diào)用此回調(diào)函數(shù)。這樣應(yīng)有就可以動(dòng)態(tài)改變簡單描述符而不用RAM/ROM來儲存描述符了。
descFn
epList
endPointDesc_t *afFindEndPointDesc( byte endPoint );
從一個(gè)終端找到終端描述符
endPoint
endPointDesc_t -指向終端描述符的指針,若失敗則為NULL
byte afFindSimpleDesc( SimpleDescriptionFormat_t **ppDesc, byte EP );
從一個(gè)終端找到終端描述符。若返回值非零則必須調(diào)用osal_mem_free()來釋放描述符的內(nèi)存占用。
ppDesc
EP –終端簡單描述符需要
uint8 afGetMatch( uint8 ep );
默認(rèn)情況下,設(shè)備將響應(yīng)ZDO匹配描述符請求。用這個(gè)函數(shù)來獲得ZDO匹配描述符應(yīng)答的設(shè)置。
ep
返回值:TRUE-允許響應(yīng),F(xiàn)ALSE-不允許或者終端未找到
uint8 afSetMatch( uint8 ep, uint8 action );
默認(rèn)情況下,設(shè)備將響應(yīng)ZDO匹配描述符??梢杂眠@個(gè)函數(shù)來改變這個(gè)行為,比如ep為1,action為FALSE,ZDO將不響應(yīng)終端1的ZDO匹配面述符請求。
ep
action
返回值:TRUE-成功,F(xiàn)ALSE-失敗或者終端未找到
byte afNumEndPoints( void );
查找已注冊的終端數(shù)目,返回此設(shè)備上已注冊的終端數(shù)目,包括終端0
void afEndPoints( byte *epBuf, byte skipZDO );
返回包含已注冊的終端的一個(gè)數(shù)組。
epBuf – 指向存放終端的數(shù)組,每個(gè)終端占一個(gè)字節(jié)
skipZDO -設(shè)置為TRUE,則不包含ZDO終端(終端0)
發(fā)送數(shù)據(jù)
afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,
dstAddr -目標(biāo)地址指針。
srcEP
cID
len
buf
transID -事務(wù)序列號指針。如果消息緩存發(fā)送,這個(gè)函數(shù)將增加這個(gè)數(shù)字
options
radius – 最大的跳數(shù),用默認(rèn)值A(chǔ)F_DEFAULT_RADIUS
afStatus_t – 成功則為ZSuccess(defined in ZComDef.h). 否則 Errors(defined in ZComDef.h)
uint8 afDataReqMTU( afDataReqMTU_t* fields );
找出基于輸入?yún)?shù)的最大可發(fā)送字節(jié)數(shù),返回能發(fā)送的最大字節(jié)數(shù)
fields