SCOPIA Mobile V3今朝在Apple App Store可免費。
在公理的事業(yè)中,弱者也能克服強者
疾苦,在人的成長過程中是多么高貴而又神秘莫測呀!沒有疾苦就沒有詩歌,每一首詩幾乎都是由一份興奮,一份和兩份疾苦所構成的!只有疾苦才干在生射中給你留下深深的印象。那萌發(fā)出冷氣的禱告的,潮濕的淚痕就是人們稱之為崇奉,和仁慈這三個高貴姊妹的母親。啊,疾苦,讓詩人都謳歌你吧!BindingTable
綁定表
1.綁定表存放的地位是內(nèi)存中預先定義的塊,若是編譯選項NV_RESTORE被激活,也能保存在Flash里。
2.綁定表放置在源節(jié)點(須要激活編譯選項REFLECTOR)。
3.綁定表的條目把須要發(fā)送的消息映射到它們的目標地址上。
4.綁定表中每個條目包含以下內(nèi)容:
5.綁定表條目布局體的定義
typedefstruct
{
uint16srcIdx;//源地址索引
uint8srcEP;//源端點
uint8dstGroupMode;//指定尋址模式
uint16dstIdx;//目標地址索引或者分組號
uint8dstEP;//目標端點
uint8numClusterIds;//在簇標識符表中簇標識符的個數(shù)
uint16clusterIdList[MAX_BINDING_CLUSTER_IDS];//簇標識符表
}BindingEntry_t;
SimpleDescription---Howtobinddevices
概述---如何綁定節(jié)點
綁定指的是兩個節(jié)點在應用層上建樹起來的一條邏輯鏈路。在同一個節(jié)點上可以建樹多個綁定辦事,分別對應不合種類的數(shù)據(jù)包。此外,綁定也容許有多個目標節(jié)點(一對多綁定)。
舉個例子,在一個燈光收集中,有多個開關和燈光設備,每一個開關可以把握一個或以上的燈光設備。在這種景象下,須要在每個開關中建樹綁定辦事。這使得開關中的應用辦事在不知道燈光設備確切的目標地址時,可以順利地向燈光設備發(fā)送數(shù)據(jù)包。
一旦在源節(jié)點上建樹了綁定,其應用辦事即可向目標節(jié)點發(fā)送數(shù)據(jù),而不需指定目標地址了(調(diào)用zb_SendDataRequest(),目標地址可用一個無效值0 xFFFE庖代)。如許,和談棧將會按照數(shù)據(jù)包的號令標識符,經(jīng)由過程自身的綁定表查找到所對應的目標設備地址。
在綁定表的條目中,有時會有多個目標端點。這使得和談棧主動地反復發(fā)送數(shù)據(jù)包到綁定表指定的各個目標地址。同時,若是在編譯目標文件時,編譯選項NV_RESTORE被打開,和談棧將會把綁定條目保存在非易失性存儲器里。是以當不測重啟(或者節(jié)點電池耗盡須要調(diào)換)等突發(fā)景象的產(chǎn)生時,節(jié)點能主動恢復到掉電前的工作狀況,而不須要用戶從頭設置綁定辦事。
設備設備綁定辦事,有兩種機制可供選擇。若是目標設備的擴大地址(64位地址)已知,可經(jīng)由過程調(diào)用zb_BindDeviceRequest()建樹綁定條目。若是目標設備的擴大地址未知,可實驗一個“按鍵”策略實現(xiàn)綁定。這時,目標設備將起首進入一個容許綁定的狀況,并經(jīng)由過程zb_AllowBindResponse()對配對懇求作出響應。然后,在源節(jié)點中履行zb_BindDeviceRequest()(目標地址設為無效)可實現(xiàn)綁定。
此外,應用節(jié)點外部的委托對象(凡是是調(diào)和器)也可實現(xiàn)綁定辦事。請重視,綁定辦事只能在“互補”設備之間建樹。那就是,只有分別在兩個節(jié)點的簡單描述布局體(simpledescriptorstructure)中,同時注冊了雷同的號令標識符(command_id)并且標的目標相反(一個屬于輸出指令“output”,另一個屬于輸入指令“input”),才干成功建樹綁定。
Thereare4waystobuildabindingtable:
建樹一個綁定表格有四種辦法可供選擇:
主動綁定
一、負責發(fā)送消息的設備在收集上廣播帶有如下參數(shù)的“小我通知布告”(PersonalAdvertisement):
(1)地址,設備文件標識符,叢聚合列表;
(2)描述符匹配懇求-ZDP_MatchDescReq()。
二、匹配的設備會作出響應。
三、由ZDO處理懲罰和驗證響應
四、負責發(fā)送消息的設備建樹綁定表并保存綁定記錄。
五、這種辦法有時也稱“辦事發(fā)明”,“主動找尋”或者“主動匹配”。
ZigBee設備對象綁定懇求-一種告訴目標設備建樹綁定記錄的委托對象,也稱幫助綁定。
任何一個設備或應用辦事,都能經(jīng)由過程無線信道向收集上的另一個設備發(fā)送一個ZDO消息,幫助其建樹一個綁定記錄。這稱為幫助綁定,在消息發(fā)向的設備上會建樹一個綁定條目。
委托綁定的申請:
任一個應用辦事,經(jīng)由過程向ZDP_BindReq()[definedinZDProfile.h]供給綁定記錄所須要的應用辦事進口參數(shù)(地址和端點)以及簇標識號(clusterID),即可啟動委托綁定的申請。第一個參數(shù)(消息發(fā)送目標地址)是綁定源節(jié)點的短地址(即保存綁定記錄的節(jié)點地址,這是因為ZDP需委托應用框架AF幫助實現(xiàn)綁定,若是節(jié)點本身是REFLECTOR,并且保存綁定記錄,則此消息發(fā)送的目標地址就是本地的AF,這與目標節(jié)點的地址DestinationAddrofReceivingdevice不合)。
重視事項:
確保[ZDConfig.h]中ZDO_BIND_UNBIND_REQUEST特點已經(jīng)打開!
你可以經(jīng)由過程ZDP_UnbindReq()(應用雷同參數(shù))來移除綁定記錄。
被懇求幫助綁定的目標設備會返回的ZDO申請綁定或者解除綁定的應答消息。此ZDO消息會被解析并經(jīng)由過程調(diào)用ZDApp_BindRsp()或ZDApp_UnbindRsp()告訴ZDApp.c此次懇求的成果。
對于申請綁定的應答消息,從調(diào)和器返回的狀況可能有ZDP_SUCCESS,ZDP_TABLE_FULLorZDP_NOT_SUPPORTED。
對于解除綁定的應答消息,從調(diào)和器返回的狀況可能有ZDP_SUCCESS,ZDP_NO_ENTRYorZDP_NOT_SUPPORTED。
綁定是由外部的設備創(chuàng)議(“外部”的意思是創(chuàng)議綁定的不是綁定的對象之一)。
外部設備應用法度以兩個應用辦事(地址和端點)和簇標識符作為參數(shù)調(diào)用ZDP_BindReq()創(chuàng)議綁定。第一個參數(shù)就是綁定記錄保存的設備地址。
確保編譯選項REFLECTOR已經(jīng)打開!
函數(shù)解析:
ZDP_BindReq()實際上是調(diào)用ZDP_BindUnbindReq()的一個宏。這一調(diào)用會產(chǎn)生并發(fā)送一個綁定的懇求,使得ZigBee調(diào)和器按照簇標識號clusterID對響應的應用辦事實驗綁定。
函數(shù)原型:
afStatus_tZDP_BindReq(zAddrType_t*dstAddr,byte*SourceAddr,byteSrcEPIntf,byteClusterID,byte*DestinationAddr
,byteDstEPIntf,byteSecuritySuite)
參數(shù)細節(jié):
DstAddr-消息發(fā)送地址(負責綁定的設備地址)
SourceAddr–源節(jié)點的64位IEEE地址
SrcEPIntf–源節(jié)點應用辦事的端點
ClusterID–須要綁定的簇標識符
DestinationAddr–目標節(jié)點的64位IEEE地址
DstEPIntf–目標節(jié)點應用辦事的端點
SecuritySuite-安然機制模式
返回值:afStatus_t–此函數(shù)須要借助AF發(fā)送(AF_DataRequest())生成的消息,是以返回值是AF狀況值。
ZigBee設備對象終端節(jié)點綁定懇求-兩個設備可向調(diào)和器告訴他們想建樹一個綁定表記錄。調(diào)和器經(jīng)由過程安排配對并分別在這兩個設備上建樹綁定表條目,也稱集中式綁定。
這一機制規(guī)定在指定的時限內(nèi),經(jīng)由過程按鍵或者其他類似動尷尬刁難指定的設備實驗綁定。在規(guī)定的時限內(nèi),調(diào)和器負責收集終端設備綁定懇求消息,然后按照雷同的設備文件標識號和簇標識號建樹響應的綁定表格條目。默認的終端節(jié)點綁按時限(APS_DEFAULT_MAXBINDING_TIME)是16秒(在nwk_globals.h中定義),若要批改可在f8wConfig.cfg中新增數(shù)值。
所有例子的應用辦事中都有一個響應按鍵事務的函數(shù)(例如,TransmitApp.c中的TransmitApp_HandleKeys())。這一響應函數(shù)調(diào)用ZDApp_SendEndDeviceBindReq()[在ZDApp.c中]收集該應用辦事端點的所有信息,然后再調(diào)用ZDP_EndDeviceBindReq()[在ZDProfile.c中]把信息發(fā)送給調(diào)和器?;蛘?,像SampleLight和SampleSwitch例程中,按鍵后直接調(diào)用ZDP_EndDeviceBindReq(),僅把與開關燈函數(shù)相干的簇標識號發(fā)送出去。
這一消息將會被調(diào)和器接管[ZDP_IncomingData()inZDProfile.c]和解析[ZDO_ProcessEndDeviceBindReq()inZDObject.c],然后讓回調(diào)函數(shù)ZDApp_EndDeviceBindReqCB()[inZDApp.c]調(diào)用ZDO_MatchEndDeviceBind()[ZDObject.c]處理懲罰這一懇求。
當調(diào)和器接管到第一個綁定懇求時,他會在必然的時限內(nèi)保存這一懇求并守候第二個懇求的呈現(xiàn)。(默認的最長時候間隔是16秒)。
一旦調(diào)和器接管到兩個須要匹配的終端設備綁定懇求時,它就會啟動綁定過程,為發(fā)出懇求的設備建樹源綁定條目。假設在ZDO終端設備綁定懇求中找到匹配,調(diào)和器將采取以下步調(diào):
1.調(diào)和器發(fā)送一個ZDO解除綁定懇求給第一個設備。終端設備綁定是一個切換過程,所以解除綁定懇求須要發(fā)送給第一個設備,以便移除一個已有的綁定條目。
2.守候ZDO解除綁定的應答,若是返回的狀況是ZDP_NO_ENTRY,調(diào)和器可以發(fā)送一個ZDO綁定懇求,在源設備(ZDP_EndDeviceBindReq()第一個參數(shù)指定的地址)中建樹綁定條目。假如此時返回的狀況是ZDP_SUCCESS,可持續(xù)處理懲罰第一個設備的簇標識符(解除綁定指令已經(jīng)移除了綁定條目,即已經(jīng)切換完成)。
3.守候ZDO綁定應答。收到今后,持續(xù)處理懲罰第一個設備的下一個簇標識符。
4.等第一個設備完成了今后,在第二個設備上實驗同樣的過程。
5.等第二個設備也完成了,調(diào)和器向兩個設備發(fā)送ZDO終端設備綁定應答消息。
重視打開編譯選項:REFLECTOR和ZDO_COORDINATOR
ZDApp_SendEndDeviceBindReq()
長處:
1.綁定信息保存在收集反射設備(例如調(diào)和器、路由器)中,可以節(jié)儉目標設備的內(nèi)存空間。
2.收集反射設備老是處于收集的狀況。所以,若是此中一個被綁定的節(jié)點廣播收集地址改變的消息,收集反射設備就可以即速更新響應的綁定表條目。如許,其他被綁定的節(jié)點即使處于休眠狀況(沒有收到該節(jié)點收集地址改變的消息),隨后向該節(jié)點(收集地址已改變)發(fā)送的消息,(在)收集反射設備(協(xié)助下)仍能準斷定位。
毛病:
1.一個與多個設備綁定的節(jié)點不克不及只向一個或若干個配對的設備發(fā)送消息。收集反射設備會向全部已綁定的設備本別發(fā)送單播消息。
2.發(fā)送消息的設備無法收到目標設備接管景象的布告。(沒有像AF_ACK_REQUEST標記位那樣返回接管景象的功能?。?/p>
3.所有的消息必須經(jīng)過收集反射設備傳輸,降落了收集的帶寬。
進一步解析:
與六個設備綁定的某個設備,向收集反射器發(fā)送一個消息后,會導致反射器發(fā)送六個單播消息。假設一個收集被分成兩個相等的地理區(qū)域A和B,收集反射器在兩區(qū)之間的中心。若是發(fā)送消息的設備在A區(qū)的深處,接管消息的(六個)設備在B區(qū)的深處,那么每次經(jīng)由過程綁定(向反射器)發(fā)送一個消息,A區(qū)的收集流量將會是對六個接管設備分別發(fā)送消息時的六分之一。(這是長處?。┑羰前l(fā)送和接管的設備都附近在一個區(qū)的深處(假設離反射器很遠),那么(此中一個設備經(jīng)由過程反射器的綁定功能想其他設備發(fā)送一個消息)該區(qū)的收集流量將會是對六個接管設備分別發(fā)送單跳消息的很多倍。(這是毛?。。?/p>
設備的應用辦事-設備上的一個應用辦事可以建樹或者保護一個綁定表。進入設備上綁定條目標另一種辦法是由應用辦事本身去經(jīng)管綁定表。
這意味著應用辦事經(jīng)由過程調(diào)用以下的綁定表經(jīng)管函數(shù),可以在本地進入或者移除綁定表的條目。
經(jīng)管綁定表應用的API:
bindAddEntry()–綁定表中加條目
bindRemoveEntry()–綁定表中移除條目
bindRemoveClusterIdFromList()–從一個已有的綁定表條目中移除一個簇標識符
bindAddClusterIdToList()–在一個已有的綁定表條目中參加一個簇標識符
bindRemoveDev()–移除某目標地址的所有條目
bindRemoveSrcDev()–移除某源地址的所有條目
bindUpdateAddr()–更新條目到新的地址
bindFindExisting()–查找一個綁定條目
bindIsClusterIDinList()–在綁定條目中查找一個已有的簇標識符
bindNumBoundTo()–某一地址(源地址或目標地址)綁定條目標個數(shù)
bindNumOfEntries()–綁定表條目標個數(shù)
bindCapacity()–容許的最大綁定條目數(shù)
BindWriteNV()–在NV中保存新的綁定表
WhichBindingMethodToUse?
我們應當選擇哪一種綁定體式格式?
Automatic
+nouserinteractionrequired
+notoolcost
-developmenttimeknowledge
-non-configurable
Assisted
+install-timedecisions(site-specificknowledge)
+analysis,maintenance,modification,visualization
canbeunderinstallerscontrol
-costoftool
Centralized
+allowsusertodecide
+costoftoolminimal
-few,ifany,configurableparameters
-requiresauserinterfaceoneachdevice
Application
+maximumflexibility
-youmustwriteallthecode
【編輯推薦】
MRMY