zigbee埠的理解

2022-05-09 20:54:54 字數 1906 閱讀 5207

在乙個終端上,可以有多個端點endpoint,這個概念是很重要的。

乙個節點可以有多個端點,0號endpoint是zigbee device object(zdo)用的乙個端點,255號是用作廣播。我們自己可以定義的是1-240這些端點。每個端點對應乙個任務taskid。因此,我們每增加乙個端點,就要給它配置乙個新任務taskid

舉乙個列子: 例子一:乙個無線節點(radio unit)a上有乙個溫濕度感測器,有乙個空調控制系統;另外乙個無線節點b則負責接收a發回的溫度資料,並通過一定的演算法來控制空調系統。我們不管b如何實現,只研究a如何實現。這種情況的乙個很規範的實現方式是:溫濕度感測器設定乙個endpoint,比如為10號;空調控制系統設定乙個endpoint,比如為20號。還要說明的是:還應該為每乙個endpoint建立乙個任務,這樣在註冊端點描述符的時候(呼叫afregister函式),就會向協議棧底層說明處理這個端點資料的任務是誰。這樣:當b想要獲取溫濕度的時候,他將會發出乙個包含a的短位址和10號端點的資訊,這個資訊到了a,協議棧會將這個訊息轉給10號端點所對應的task去處理,管理空調的20號端點根本就看不到這個訊息;類似地,如果b想要控制空調,他發出的資料報將包含a的短位址和20號端點資訊,a收到訊息後會發給20號端點的task去處理。(需要注意的是:在網路層面經常會有發給zdo的訊息,這時候資訊包的端點號就將是0號)。這種將不同功能分配到不同endpoint上的方法非常有利於任務的劃分,是一種很正規的方法。

例子二、乙個無線節點(radio uint)a上有4個led需要被控制,另外乙個無線節點b則有4個開關用來控制這4個led。這種情形的規範實現方式還是要為每乙個led設定乙個endpoint(允許的範圍內你任意指定,只要不重複),並為每個endpoint建立乙個task。這樣處理之後,b可以用同樣的命令來控制4個led,而不是每乙個led 用不同的命令,這種情況在public profile實際上是必須這麼做的。    上面兩個例子可能很多同學認為太麻煩,完全可以變通。變通的想法就是我所有的被控物件都落在乙個endpoint上,但是我發的資料報內容不同,接收端這個endpoint通過解析資料報的內容來判斷具體該做什麼,這種方式實際上完全可以實現,不過需要你自己規定一下資料報的格式,即第幾個位元組表示什麼。。。。。雖然這可以實現要求,但是我很不贊成這樣,一方面實際上是增加了你程式設計的複雜度,另一方面完全沒有了互聯的可能,尤其是當你用zcl的時候,這種方式就行不通了

afregister( endpointdesc_t *epdesc )這個函式用來註冊乙個新的端點到task,這樣當空中有這個端點的資料到來會直接傳送到對應的task。

傳入引數:

typedef struct

endpointdesc_t;

afstatus_t afregister( endpointdesc_t *epdesc )

//註冊端點描述符

eplist_t *afregisterextended( endpointdesc_t *epdesc, pdesccb descfn )

}return ep;

}typedef struct

eplist_t;

在實際工作中,afincomingdata( aps_frameformat_t *aff, zaddrtype_t *srcaddress, uint16 srcpanid,nlde_signal_t *sig, byte securityuse, uint32 timestamp )這個函式從aps層收到資料,在這個函式中判斷收到資料對應的端點號在端點鍊錶中能不能找到,如果不能找到則丟掉這包資料,如果能找到則把資料傳送的端點對應的task.

通過  afbuildmsgincoming( aff, epdesc, srcaddress, srcpanid, sig, securityuse, timestamp )這個函式建立osal的資料報到對應的任務,並且置位對應任務的sys_event_msg。

網路埠理解

這裡討論的是tcp ip協議中的埠,埠號的範圍從0到65535,比如用於瀏覽網頁服務的80埠,用於ftp服務的21埠等等。埠是由計算通訊協議tcp ip協議定義的。其中規定,用ip位址和埠作為套接字,它代表tcp鏈結的乙個連線端,一般稱為socket,具體來說,就是用 ip 埠 來定位一台主機中的程...

ZigBee傳輸方式和定址方式的理解

利用空閒時間做乙個總結 傳輸方式 直接傳輸 zigbee 協調器 路由器 終端節點之間相互傳輸。他們之間的資料直接轉移。間接傳輸 zigbee不直接把資料傳輸給某個目標節點,而是通過信標的方式,通知目標節點來提取。我的理解 目前尚不清楚直接 間接傳輸的區別,但是很明顯直接傳輸很普遍,但是間接傳輸的方...

對inout埠的理解

選線法與解碼法 verilog inout 雙向口使用和 對inout埠的理解 對於含有inout埠的模組內部而言,inout埠可以理解成從 映像暫存器 接收連續賦值的線。在定義乙個inout埠時,同時也要定義乙個暫存器作為inout埠的 映像暫存器 並將inout埠和這個 映像暫存器 用乙個三態門...