z-stack是ti推出的全功能zigbee協定棧,通過了zigbee聯盟的相容性平台測試,包含如下幾個元件。
1. hal,硬體抽象層
2. osal,作業系統抽象層
3. zigbee stack和ieee 802.15.4
4. user app
5. mt,通過序列槽與pc進行通訊的demo
api主要有以下幾個方面:
初始化
zb_systemreset
複位裝置,一般在寫入新配置後,重新開機裝置來啟用更新的資訊
zb_startrequest :
啟動zigbee協定棧與zb_startconfirm形成回調關系,回調就是startrequest請求發出後,處理結果的函數在startconfirm函數裡面。
配置
zb_readconfiguration : 從非易失性存儲器中獲得指定的配置資訊
zb_writeconfiguration:往非易失性存儲器中寫配置資訊
zb_getdeviceinfo :獲得裝置相關資訊
發現
zb_finddevicerequest
zb_binddevice: 建立或者移除一個綁定條目
zb_allowbind:
設定為一段指定時間(永久、不允許、一段時間)的允許綁定模式,與zb_binddevice配合使用。
zb_permitjoiningrequest 用來控制裝置加入請求
資料傳輸
zb_senddatarequest 發送資料
zb_senddataconfirm 響應資料的回調函數
如果要求ack回應,但是沒有收到ack回應的話,裝置會移除它已經建立的綁定表,嘗試着重新綁定。
zb_receivedataindication:當應用層收到資料時,被此函數異步通知調用
在zigbee中,綁定是在兩個裝置應用層之間的一個邏輯鍊路,一個裝置可以為每個資料包分布建立綁定關系,除此之外,綁定可以有多于一個的目的地。以燈泡控制為例子,每個開關可以控制一個或者多個燈泡。這種情況下,每個開關就要建立一個綁定,這允許應用發送資料包,而不需要知道實際目的位址。
zb_senddatarequest這個函數的第一個參數為目的位址,一般目的位址為0~0xfffd,綁定關系的發送目的位址為0xfffe,廣播發送位址為0xffff.
當以綁定模式發送資料時,實際的目的位址是在内部綁定表中查找獲得的。當在綁定表中有多個目的位址時,協定會自動發送一份資料拷貝給指定的目标。
如何配置裝置的綁定狀态呢?
1.如果目标裝置的mac位址已知,那麼zb_binddevice可被用來建立一個綁定項
2.如果目标裝置mac位址未知,待綁定的目标裝置執行zb_allowbindresponse來使其處于響應比對請求的狀态,要求綁定的裝置執行zb_allowbind來設定為允許綁定請求狀态。
兩個綁定裝置之間需要有相同的clusterid,不同的cluster方向才能完比對。
nv_restore編譯選項:從字面上可以猜測到,這個宏用來恢複已經存儲的資訊,既然是恢複,那麼肯定是比較重要的、掉電不能丢失的資訊,比如網絡資訊、綁定表資訊等等。