Z-Stack 協定堆疊開發指南 - 資訊工程系

Z-Stack 協定堆疊開發指南 - 資訊工程系 Z-Stack 協定堆疊開發指南 - 資訊工程系

ie.ksu.edu.tw
from ie.ksu.edu.tw More from this publisher
12.07.2015 Views

Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.8.7 HalTimerStop()...................................................................................................... 504.8.8 HalTimerTick()...................................................................................................... 504.8.9 HalTimerInterruptEnable().................................................................................... 514.8.10 常 量 .................................................................................................................... 524.9 UART 服 務 ...................................................................................................................... 534.9.1 HalUARTInit () ..................................................................................................... 544.9.2 HalUARTOpen () .................................................................................................. 544.9.3 HalUARTClose ().................................................................................................. 564.9.4 HalUARTRead ()................................................................................................... 574.9.5 HalUARTWrite () .................................................................................................. 584.9.6 HalUARTIoctl ().................................................................................................... 584.9.7 HalUARTPoll()...................................................................................................... 604.9.8 Hal_UART_RxBuffLen()...................................................................................... 604.9.9 Hal_UART_TxBuffLen() ...................................................................................... 614.9.10 Hal_UART_FlowControlSet()............................................................................. 614.9.11 常 量 .................................................................................................................... 624.10 128×64 點 陣 字 元 / 圖 形 液 晶 顯 示 服 務 .......................................................................... 634.10.1 HalLcdInit()......................................................................................................... 634.10.2 LCM_Refresh() ................................................................................................... 644.10.3 GUI_ClearScreen().............................................................................................. 654.10.4 GUI_Point()......................................................................................................... 654.10.5 GUI_SetColor() ................................................................................................... 664.10.6 GUI_ExchangeColor()......................................................................................... 664.10.7 GUI_LoadBitmap() ............................................................................................. 674.10.8 GUI_LoadBitmapN() .......................................................................................... 674.10.9 GUI_PutHZ()....................................................................................................... 684.10.10 GUI_PutHZN().................................................................................................. 694.10.11 GUI_PutChar5_7() ............................................................................................ 694.10.12 GUI_PutString5_7() .......................................................................................... 704.10.13 GUI_PutNoString5_7() ..................................................................................... 705. 硬 體 抽 象 層 (HAL) 的 移 植 ................................................................................................... 725.1 HAL 組 件 資 料 夾 ............................................................................................................. 725.1.1 common 資 料 夾 .................................................................................................... 725.1.2 include 資 料 夾 ...................................................................................................... 735.1.3 target 資 料 夾 ......................................................................................................... 745.2 HAL 驅 動 編 譯 選 項 ......................................................................................................... 755.2.1 預 設 編 譯 選 項 ...................................................................................................... 755.2.2 編 譯 某 些 驅 動 ...................................................................................................... 755.2.3 不 編 譯 某 些 驅 動 .................................................................................................. 765.3 HAL 驅 動 定 制 ................................................................................................................. 775.3.1 修 改 已 存 在 的 HAL 驅 動 .................................................................................... 775.3.2 為 一 個 新 目 標 添 加 驅 動 ...................................................................................... 784華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統5.4 中 斷 服 務 行 程 ................................................................................................................. 795.4.1 HAL ISR 功 能 巨 集 ............................................................................................... 795.4.2 修 改 已 存 在 的 GPIO 中 斷 的 ISR........................................................................ 795.4.3 為 GPIO 中 斷 添 加 一 個 新 的 ISR........................................................................ 806. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 中 的 基 本 概 念 和 使 用 者 可 配 置 參 數 ............................................... 826.1 ZigBee .............................................................................................................................. 826.1.1 設 備 類 型 .............................................................................................................. 826.1.2 堆 疊 規 範 .............................................................................................................. 836.2 編 址 ................................................................................................................................. 846.2.1 位 址 類 型 .............................................................................................................. 846.2.2 網 路 位 址 分 配 ...................................................................................................... 846.2.3 在 Z-<strong>Stack</strong> 中 定 址 ................................................................................................ 856.2.4 重 要 設 備 位 址 ...................................................................................................... 876.3 綁 定 ................................................................................................................................. 876.3.1 建 立 一 個 綁 定 表 .................................................................................................. 876.4 路 由 ................................................................................................................................. 906.4.1 概 述 ...................................................................................................................... 906.4.2 路 由 協 定 .............................................................................................................. 906.4.3 表 格 儲 存 .............................................................................................................. 926.4.4 路 由 設 定 快 速 參 考 .............................................................................................. 926.5 ZDO 資 訊 請 求 ................................................................................................................. 936.6 便 攜 設 備 ......................................................................................................................... 946.7 端 到 端 確 認 ..................................................................................................................... 946.8 其 他 ................................................................................................................................. 946.8.1 配 置 頻 道 .............................................................................................................. 946.8.2 配 置 PAN ID 和 網 路 , 並 加 入 .......................................................................... 956.8.3 最 大 有 效 載 荷 容 量 .............................................................................................. 956.8.4 離 開 網 路 .............................................................................................................. 956.8.5 描 述 符 .................................................................................................................. 966.8.6 非 易 失 性 記 憶 體 選 項 .......................................................................................... 966.9 安 全 ................................................................................................................................. 976.9.1 概 述 ...................................................................................................................... 976.9.2 配 置 ...................................................................................................................... 976.9.3 網 路 存 取 控 制 ...................................................................................................... 986.9.4 密 鑰 更 新 .............................................................................................................. 986.9.5 快 速 參 考 .............................................................................................................. 987. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 API............................................................................................. 1017.1 層 概 述 ........................................................................................................................... 1017.1.1 ZDO..................................................................................................................... 1017.1.2 AF ........................................................................................................................ 1017.1.3 APS...................................................................................................................... 1017.1.4 NWK ................................................................................................................... 1015華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2 ZigBee 設 備 物 件 (ZDO) ........................................................................................... 1017.2.1 概 述 .................................................................................................................... 1027.2.2 ZDO 設 備 網 路 啟 動 ............................................................................................ 1027.2.3 ZDO 發 現 API .................................................................................................... 1037.2.4 ZDO 綁 定 API .................................................................................................... 1207.2.5 ZDO 管 理 API .................................................................................................... 1257.3 應 用 框 架 (AF).......................................................................................................... 1367.3.1 概 述 .................................................................................................................... 1367.4 應 用 支 援 子 層 ............................................................................................................... 1437.4.1 概 述 .................................................................................................................... 1437.4.2 綁 定 表 管 理 ........................................................................................................ 1437.4.3 組 表 管 理 ............................................................................................................ 1517.4.4 快 速 位 址 查 找 .................................................................................................... 1567.5 網 路 層 (NWK) ......................................................................................................... 1577.5.4.1 網 路 管 理 ......................................................................................................... 1587.5.4.2 位 址 管 理 ......................................................................................................... 1677.5.4.3 網 路 變 數 和 實 用 函 數 ..................................................................................... 1677.5.4.4 網 路 非 易 失 性 儲 存 ......................................................................................... 1728. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 應 用 實 例 ......................................................................................... 1738.1 簡 介 ............................................................................................................................... 1738.2 OSAL 任 務 ..................................................................................................................... 1748.2.1 初 始 化 ................................................................................................................ 1748.2.2 組 織 .................................................................................................................... 1748.2.3 系 統 服 務 ............................................................................................................ 1748.2.4 應 用 設 計 ............................................................................................................ 1748.2.5 強 制 性 方 法 ........................................................................................................ 1758.2.6 強 制 性 事 件 ........................................................................................................ 1768.3 網 路 形 成 ....................................................................................................................... 1768.3.1 自 動 開 始 ............................................................................................................ 1778.3.2 軟 體 開 始 ............................................................................................................ 1778.3.3 網 路 恢 復 ............................................................................................................ 1778.3.4 加 入 通 知 ............................................................................................................ 1778.4 設 備 綁 定 和 發 現 ........................................................................................................... 1788.4.1 綁 定 請 求 ( 手 動 綁 定 ) .................................................................................... 1788.4.2 匹 配 描 述 符 請 求 ( 自 動 尋 找 ) ........................................................................ 1788.5 GenericApp 應 用 實 例 .................................................................................................... 1798.5.1 簡 介 .................................................................................................................... 1798.5.2 程 式 流 程 ............................................................................................................ 1798.5.3 資 訊 流 程 ............................................................................................................ 1838.6 SerialApp 應 用 實 例 ....................................................................................................... 1858.6.1 簡 介 .................................................................................................................... 1858.6.2 按 鍵 功 能 分 配 .................................................................................................... 1866華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.7 TransmitApp 應 用 實 例 .................................................................................................. 1868.7.1 簡 介 .................................................................................................................... 1868.7.2 按 鍵 功 能 分 配 .................................................................................................... 1878.7.3 常 量 .................................................................................................................... 1878.7.4 運 行 資 訊 ............................................................................................................ 1878.7.5 注 意 .................................................................................................................... 1888.8 Home Automation 規 範 ................................................................................................. 1888.8.1 簡 介 .................................................................................................................... 1888.8.2 初 始 化 ................................................................................................................ 1888.8.3 Sample Light 應 用 .............................................................................................. 1888.8.4 Sample Switch 應 用 ............................................................................................ 1909. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 Simple API................................................................................. 1929.1 Simple API 是 什 麼 ?..................................................................................................... 1929.2 如 何 將 設 備 投 入 到 網 路 中 使 用 ? ............................................................................... 1929.3 如 何 綁 定 設 備 ?........................................................................................................... 1939.4 如 何 開 發 一 個 簡 單 的 私 有 應 用 規 範 ? ....................................................................... 1949.5 應 用 舉 例 ....................................................................................................................... 1959.6 API 參 考 指 南 ................................................................................................................. 1959.6.1 API 函 數 ........................................................................................................... 1959.6.2 回 調 函 數 ............................................................................................................ 2039.6.3 配 置 參 數 ............................................................................................................ 20710. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 編 譯 選 項 ................................................................................... 21410.1 使 用 Z-<strong>Stack</strong> 編 譯 選 項 .............................................................................................. 21410.1.1 選 擇 邏 輯 設 備 類 型 .......................................................................................... 21410.1.2 定 位 編 譯 選 項 .................................................................................................. 21410.1.3 使 用 編 譯 選 項 .................................................................................................. 21910.2 所 支 援 的 編 譯 選 項 和 定 義 ......................................................................................... 22010.2.1 通 用 編 譯 選 項 .................................................................................................. 22010.2.2 監 控 測 試 (MT) 編 譯 選 項 ............................................................................ 22310.2.3 ZigBee 設 備 物 件 (ZDO) 編 譯 選 項 .............................................................. 223附 錄 .............................................................................................................................................. 2241. 序侤1.1 目 的本 指 南 詳 細 描 述 了 如 何 佐 用 TI 公 司 發 佈但 的 Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 進 行 使 用 者 ZigBee7華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統應 用 的 開 發 。1.2 字 母 縮 寫 詞 和 定 義ADC Analog to Digital Converter 類詑 比 / 數 位 轉視 換 器赛AES Advanced Encryption Standard 高 階 加 密 標 準AF Application Framework 應 用 框頦 架AIB APS Information Base APS 訊 息韵 庫韧API Application Programming Interface 應 用 程 式 介 面APS Application Support Sub-Layer 應 用 支 援 子 層APSDE APS Data Entity APS 資 料頔 實蹴 體APSME APS Management Entity APS 管牤 理 實蹴 體ASDU APS Service Datagram Unit APS 服 務 資 料頔 單 元CAP Contention Access Period 競 爭 存 取 週 期CBC-MACCipher Block Chaining Message AuthenticationCode密 碼 防倸 護 鏈訿 訊 息韵 驗 證訥 程 式CCMEncryption using CTR with CBC-MAC計 數 器赛 模 式 和 密 碼 防倸 護 鏈訿 訊 息韵 驗證訥 程 式CD Carrier Detect 載跩 波 檢 測CoordinatorA full function device that accepts associations and 一 個鞄 接 受 關詉 聯 並 傳 輸 信 標 的 全 功transmits beacons能 設 備CSMA-CACarrier Sense Multiple Access with CollisionAvoidance避 免佊 衝 突 的 載跩 波 偵 聽 多 路跡 存 取CTR Counter mode encryption 計 數 器赛 模 式 加 密CTS Clear To Send 高 階 加 密 引 擎DSN Data Sequence Number 資 料頔 序侤 號DSR Data Set Ready 數 傳 機趙 就 緒犂DTR Data Terminal Ready 資 料頔 終 端牣 設 備 就 緒犂FFD Full Function Device 全 功 能 設 備GPIO General Purpose Input Output 通 用 目 的 輸 入 輸 出HAL Hardware Abstract Layer 硬 體 抽 象 層LQI Link Quality Indication 連 結 品 質賭 指 示MAC Medium Access Control 媒 體 存 取 控 制MCPS MAC Common Part Sublayer(data interface) MAC 公 共 部 分 子 層MIC Message integrity code 訊 息韵 完侖 整超 性 檢 測 碼MLMEMAC Sublayer Management Entity(managementinterface)MAC 子 層 管牤 理 實蹴 體 ( 管牤 理 介 面 )MSDU MAC Service Data Unit MAC 服 務 資 料頔 單 元MSG Message 訊 息韵NHLE Next Higher Layer Entity 下 一 個鞄 更俐 高 層 實蹴 體NWK Network 網牺 路跡8華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統OSAL Operating System Abstraction Layer 作伿 業 系倐 統 抽 象 層PAN Personal Area Network 個鞄 域 網牺PAN CoordinatorA coordinator that is the principal coordinator of a 一 個鞄 協 調 器赛 , 它 是 一 個鞄 PAN 的 主PAN要 協 調 器赛PC Personal Computer 個鞄 人 電踝 腦PHY Physical layer 物 理 層PIB PAN Information Base PAN 訊 息韵 庫韧RFD Reduced Function Device 簡 化 功 能 設 備RI Ring Indicator 振頄 鈴踍 指 示RSSI Received Signal Strength Indicator 接 收 信 號 強 度 指 示RTS Ready To Send 準 備 發 送SFD Start of Frame Delimiter 幀 開 始 定 界 符SPI Serial Port Interface 序侤 列 埠 介 面STARA network topology consisting of one masterdevice and multiple slave devices星 型 網牺ZDO ZigBee Device Object ZigBee 設 備 物 件1.3 定 義ZLocationZLocation-IZLocation-IICC2430/CC2431EM無 線 ZigBee 定 位 開 發 系倐 統無 線 ZigBee 定 位 開 發 系倐 統 I 型無 線 ZigBee 定 位 開 發 系倐 統 II 型CC2430 評 估 模 組 /CC2431 定 位 評 估 模 組 , 可 用 來 作伿 為RF 佈但 局侚 佈但 線 的 參 考 設 計 。9華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統CC2430EBCC243x-DebuggerGeneral Packet SnifferCC2430 評 估 板 ( 裝 配 有 CC2430/CC2431EM)專 為 支 援 TI CC2430/CC2431 晶 片 而 推 出 的 模 擬 器赛 / 除 錯器赛 , 可 與犕 IAR EW8051 集 成 開 發 環 境蹜 無 縫 連 接 , 具 有 程式 高 速 下 載跩 、 線 上 除 錯 、 中 斷 點 、 單 步俞 、 變 數 觀 察蹸 、 暫存 器赛 觀 察蹸 等 功 能 , 實蹴 現 對蹹 CC2430/CC2431 晶 片 系倐 統 的即佘 時頗 線 上 模 擬 、 除 錯 。具 有 USB 介 面 的 IEEE 802.15.4/ZigBee 協 定 分 析 儀猙 , 可以 全 面 解 碼 複 雜覮 的 ZigBee 協 定 封 包 並 加 速 除 錯 。為 了 後 續 描 述 適贅 用 於 CC2430/CC2431EM 和 CC2430EB, 我侷 們靽 做 如 下 定 義 :CC2430/CC2431EM 上 的 按 鍵 和 LED 定 義SW1 用 杜俖 邦倳 線 連 接 P2-14 和 P2-18( 即佘 拉 低佂 CC2430/CC2431 的 P0.5)功 SW2 用 杜俖 邦倳 線 連 接 P2-13 和 P2-18( 即佘 拉 低佂 CC2430/CC2431 的 P0.4)能 SW3 用 杜俖 邦倳 線 連 接 P2-10 和 P2-18( 即佘 拉 低佂 CC2430/CC2431 的 P0.0)按 SW4 用 杜俖 邦倳 線 連 接 P2-15 和 P2-18( 即佘 拉 低佂 CC2430/CC2431 的 P0.6)鍵 SW5 用 杜俖 邦倳 線 連 接 P2-3 和 P2-18( 即佘 拉 低佂 CC2430/CC2431 的 P2.0)SW6 按 下 KEY 鍵 ( 即佘 拉 低佂 CC2430/CC2431 的 P0.1)LEDD2 綠牷 色 ( 由 CC2430/CC2431 的 P1.0 控 制 , 低佂 電踝 位 點 亮 )D3 黃 色 ( 由 CC2430/CC2431 的 P1.1 控 制 , 低佂 電踝 位 點 亮 )CC2430EB( 裝 配 有 CC2430/CC2431EM) 上 的 按 鍵 和 LED 定 義SW1 按 下 CC2430EB 上 的 KEY3 鍵 ( 即佘 拉 低佂 CC2430/CC2431 的 P0.5)功能按鍵 SW5SW6D2LEDD3SW2 按 下 CC2430EB 上 的 KEY2 鍵 ( 即佘 拉 低佂 CC2430/CC2431 的 P0.4)SW3 按 下 CC2430EB 上 的 KEY1 鍵 ( 即佘 拉 低佂 CC2430/CC2431 的 P0.0)SW4 按 下 CC2430EB 上 的 KEY4 鍵 ( 即佘 拉 低佂 CC2430/CC2431 的 P0.6)用 杜俖 邦倳 線 連 接 CC2430EB 上 的 J3-5 和 CC2430/CC2431EM 上 的 P1-1( 即佘 拉低佂 CC2430/CC2431 的 P2.0)按 下 CC2430/CC2431EM 上 的 KEY 鍵 ( 即佘 拉 低佂 CC2430/CC2431 的 P0.1)CC2430/CC2431EM 上 的 D2 綠牷 色 ( 由 CC2430/CC2431 的 P1.0 控 制 , 低佂 電踝位 點 亮 )CC2430/CC2431EM 上 的 D3 黃 色 ( 由 CC2430/CC2431 的 P1.1 控 制 , 低佂 電踝位 點 亮 )1.4 給 開 發 者 的 建 議開 發 者 至 少 應 有 使 用 C 語犾 言借 進 行 51 單 晶 片 應 用 開 發 的 經 驗 , 對蹹 電踝 腦 網牺 路跡 體 系倐 結 構躬 有 一定 的 瞭 解 。 在 使 用 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 進 行 TI 公 司 發 佈但 的 Z-<strong>Stack</strong> 協 定 堆 疊v1.4.2 進 行 使 用 者 ZigBee 無 線 定 位 應 用 開 發 前 , 建 議 使 用 者 首靫 先 瞭 解 以 下 內 容韕 : 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 使 用 者 使 用 手 冊 》 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 實蹴 驗 指 導赫 書頟 》 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 CC2430/CC2431 使 用 者 指 南 》10華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 Z-<strong>Stack</strong> 定 位 開 發 指 南 》 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 IEEE 802.15.4 標 準 和 ZigBee 協 定 規 範 》本 指 南 以 及 上 述 資 料頔 隨 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 一 同 發 售 ( 總 共 6 本 , 供 華亨 科 技侻 使 用 者 內 部 使 用 ) 以 幫 助佔 開 發 者 快侳 速 進 入 ZigBee 無 線 定 位 應 用 開 發 領猅 域 。 由 於 我侷 們靽為 開 發 系倐 統 配 套鞽 了 大 量 的 資 料頔 , 使 用 者 不 可 能 短 時頗 間 全 部 看 完侖 ( 也 完侖 全 沒俯 有 必 要 ), 我侷 們靽 建議 使 用 者 按 以 下 方 法 使 用 配 套鞽 資 料頔 :1. 認狀 真 閱贠 讀 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 使 用 者 使 用 手 冊 》, 建 立 ZigBee 無線 定 位 應 用 開 發 環 境蹜 , 熟 悉 開 發 系倐 統 的 使 用 。2. 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 實蹴 驗 指 導赫 書頟 》 中 講 解 了 多 個鞄 ZigBee 應 用 實蹴驗 , 透 過跸 實蹴 驗 , 使 用 者 可 以 熟 悉 開 發 流 程 , 加 深 對蹹 ZigBee 應 用 的 認狀 識訤 , 激趦 發 對蹹 ZigBee技侻 術 的 興 趣賱 。3. 瞭 解 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 IEEE 802.15.4 標 準 和 ZigBee 協 定 規 範 》中 的 基 本 概 念 。 由 於 IEEE 802.15.4 標 準 和 ZigBee 協 定 規 範 的 內 容韕 豐覍 富 、 抽 象 概 念多 、 專 業 術 語犾 多 , 使 用 者 不 可 能 在 短 時頗 間 內 完侖 全 掌 握 。 使 用 者 應 該 瞭 解 其 中 最 基 本的 概 念 , 對蹹 很 多 抽 象 概 念 如 果 一 時頗 搞 不 懂 時頗 不 要 鑽 牛 角倞 尖 , 應 暫 時頗 跳跢 過跸 。4. 學赩 習 本 開 發 指 南 時頗 , 要 結 合 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 IEEE 802.15.4 標準 和 ZigBee 協 定 規 範 》 和 《 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 CC2430/2431 使 用者 指 南 》。 隨 著 對蹹 本 指 南 的 深 入 學赩 習 , 使 用 者 應 會 逐 漸軌 熟 悉 ZigBee 的 應 用 開 發 , 最初 學赩 習 ZigBee 技侻 術 時頗 的 很 多 疑牉 問 會 迎 刃 而 解 。 相 信 使 用 者 在 學赩 完侖 本 指 南 後 , 可 以較跨 輕狗 鬆觅 地 使 用 Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 進 行 使 用 者 ZigBee 無 線 定 位 應 用 開 發 。2. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 元 件2.1 安 裝 檔Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 有 兩 個鞄 安 裝 檔 : Z<strong>Stack</strong>-CC2430-1.4.2.exe(“ 核頤 心 安 裝 ” 檔 ) Z<strong>Stack</strong>-CC2430-1.4.2-1.1.0.exe(“ 全 部 安 裝 ” 檔 )“ 核頤 心 安 裝 ” 檔 包 含佳 Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 元 件 和 少 量 應 用 實蹴 例 ;“ 全 部 安 裝 ” 檔 包含佳 Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 元 件 、 豐覍 富 的 應 用 實蹴 例 和 工 具 。 建 議 開 發 者 採 用 “ 全 部 安 裝 ” 來進 行 安 裝 。11華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統6. 記 憶赲 體 分 配3.2 訊 息韵 管牤 理 API訊 息韵 管牤 理 API 為 任 務 間 或 不 同 處 理 環 境蹜 中 處 理 單 元 間 ( 例 如 , 中 斷 服 務 常 式 或 在 一 個鞄控 制 迴 圈 中 的 函 數 調 用 ) 的 訊 息韵 交 換 提 供 了 一 種牞 手 段 。 訊 息韵 管牤 理 API 中 的 函 數 致 能 一 個鞄 任務 分 配 或 釋 放 訊 息韵 緩 衝 區 , 發 送 命 令 訊 息韵 給 另 一 個鞄 任 務 並 接 收 回 應 訊 息韵 。3.2.1 osal_msg_allocate ( )3.2.1.1 描 述該 函 數 被 一 個鞄 任 務 調 用 來 分 配 一 個鞄 訊 息韵 緩 衝 區 , 該 任 務 / 函 數 將 填 寫 訊 息韵 並 透 過跸 調 用osal_msg_send() 函 數 來 將 訊 息韵 發 送 給 另 一 個鞄 任 務 。 如 果 緩 衝 區 不 能 被 分 配 ,msg_ptr 將 被置 位 NULL。注 意 : 不 要 混 淆 本 函 數 與犕 osal_mem_alloc() 函 數 , 本 函 數 被 用 來 分 配 一 個鞄 緩 衝 區 以 便在 兩 個鞄 任 務 之 間 發 送 訊 息韵 ( 使 用 osal_msg_send() 函 數 )。 使 用 osal_mem_alloc() 函 數 是 分配 記 憶赲 體 的 一 個鞄 區 塊 。3.2.1.2 函 數 原鞝 型byte *osal_msg_allocate( uint16 len )3.2.1.3 函 數 參 數len 是 訊 息韵 長 度 。3.2.1.4 函 數 返 回 值靹失 敗 。返 回 值靹 是 一 個鞄 指 向 為 訊 息韵 分 配 的 緩 衝 區 的 指 標 。 返 回 NULL 表 示 訊 息韵 緩 衝 區 分 配 操趀 作伿14華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.2.2 osal_msg_deallocate( )3.2.2.1 描 述該 函 數 被 用 來 釋 放 一 個鞄 訊 息韵 緩 衝 區 。 當 一 個鞄 任 務 ( 或 處 理 單 元 ) 在 它 已 經 完侖 成 對蹹 接 收 到的 訊 息韵 處 理 後 調 用 本 函 數 。3.2.2.2 函 數 原鞝 型byte osal_msg_deallocate( byte *msg_ptr )3.2.2.3 函 數 參 數msg_ptr 是 指 向 需猀 要 被 釋 放 的 訊 息韵 緩 衝 區 的 指 標 。3.2.2.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS釋 放 成 功INVALID_MSG_POINTER 無 效頒 的 訊 息韵 指 標MSG_BUFFER_NOT_AVAIL 緩 衝 區 在 排 隊 等 候鞅3.2.3 osal_msg_send( )3.2.3.1 描 述該 函 數 被 一 個鞄 任 務 調 用 來 發 送 一 個鞄 命 令 或 資 料頔 訊 息韵 給 另 一 個鞄 任 務 或 者 處 理 單 元 。destination_task 識訤 別低 字 欄 位 必 須 指 向 一 個鞄 有 效頒 的 系倐 統 任 務 。 當 調 用 osal_create_task ( ) 函 數 來開 始 一 個鞄 任 務 的 時頗 候鞅 任 務 識訤 別低 字 被 分 配 給 該 任 務 。 本 函 數 將 同 時頗 觸 發 目 標 任 務 事 件 列 表 中 的SYS_EVENT_MSG 事 件 。3.2.3.2 函 數 原鞝 型15華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統byte osal_msg_send( byte destination_task, byte *msg_ptr )3.2.3.3 函 數 參 數destination_task 是 接 收 訊 息韵 的 任 務 的 ID。msg_ptr 是 一 個鞄 指 向 包 含佳 訊 息韵 的 緩 衝 區 的 指 標 。 它 必 須 是 透 過跸 osal_msg_allocate () 函 數分 配 的 一 個鞄 有 效頒 的 緩 衝 區 的 指 標 。3.2.3.4 函 數 返 回 值靹函 數 返 回 值靹 是 一 個鞄 1 位 元 組 的 欄 位 , 它 表 示 函 數 的 操趀 作伿 結 果 。返 回 值靹 描 述ZSUCCESS訊 息韵 發 送 成 功INVALID_MSG_POINTER 無 效頒 的 訊 息韵 指 標INVALID_TASKDestination_task 無 效頒3.2.4 osal_msg_receive( )3.2.4.1 描 述本 函 數 被 一 個鞄 任 務 調 用 來 取 回 一 條 已 經 收 到 的 命 令 資 訊 。 調 用 該 函 數 的 任 務 必 須 在 處 理完侖 訊 息韵 後 使 用 osal_msg_deallocate() 函 數 來 釋 放 訊 息韵 緩 衝 區 。3.2.4.2 函 數 原鞝 型byte *osal_msg_receive( byte task_id )3.2.4.3 函 數 參 數task_id 是 調 用 該 函 數 的 任 務 ( 訊 息韵 被 發 往 給 它 ) 的 識訤 別低 字 。3.2.4.4 函 數 返 回 值靹NULL。函 數 返 回 值靹 是 一 個鞄 指 向 一 個鞄 包 含佳 訊 息韵 的 緩 衝 區 的 指 標 。 如 果 沒俯 有 接 收 到 訊 息韵 返 回 值靹 為16華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.3 任 務 同 步俞 API任 務 同 步俞 API 致 能 一 個鞄 任 務 去 等 待 事 件 的 發 生 並 返 回 控 制 。 任 務 同 步俞 API 中 的 函 數 可以 被 用 來 為 一 個鞄 任 務 設 定 事 件 , 並 在 任 何 事 件 被 觸 發 時頗 通 知 該 任 務 。3.3.1 osal_set_event( )3.3.1.1 描 述該 函 數 被 調 用 來 為 一 個鞄 任 務 設 定 事 件 標 記 。3.3.1.2 函 數 原鞝 型byte osal_set_event( byte task_id, UINT16 event_flag )3.3.1.3 函 數 參 數task_id 是 將 要 被 設 定 事 件 標 記 的 任 務 的 ID。event_flag 是 一 個鞄 2 位 元 組 的 點 陣 圖蹙 , 每俟 個鞄 位 元 定 義 一 個鞄 事 件 。 僅 有 一 個鞄 系倐 統 事 件(SYS_EVENT_MSG), 其 餘 事 件 / 位 被 接 收 任 務 定 義 。3.3.1.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS成 功INVALID_TASKDestination_task 無 效頒3.4 計 時頗 器赛 管牤 理 API計 時頗 器赛 管牤 理 API 致 能 內 部 (Z-<strong>Stack</strong>) 任 務 像踽 外 部 ( 應 用 級 ) 任 務 一 樣 對蹹 計 時頗 器赛 的 使 用 。計 時頗 器赛 管牤 理 API 中 提 供 了 一 些 函 數 去 啟 動 和 停 止 一 個鞄 計 時頗 器赛 。 計 時頗 器赛 可 以 被 設 定 成 1 毫 秒的 增猹 量 。17華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.4.1 osal_start_timer( )3.4.1.1 描 述該 函 數 被 調 用 來 啟 動 一 個鞄 計 時頗 器赛 。 當 計 時頗 器赛 到 期 時頗 , 該 特顠 定 事 件 對蹹 應 的 位 將 被 置 位 。 事件 將 被 在 調 用 osal_start_timer 函 數 的 任 務 中 被 觸 發 。 要 明 確 具 體 的 任 務 ID, 請 使 用osal_start_timerEx() 來 代 替 osal_start_timer() 函 數 。3.4.1.2 函 數 原鞝 型byte osal_start_timer(UINT16 event_id, UINT16 timeout_value);3.4.1.3 函 數 參 數event_id 是 一 個鞄 使 用 者 定 義 的 事 件 位 。 計 時頗 器赛 到 期 時頗 , 調 用 任 務 將 被 通 知 ( 事 件 )。timeout_value 是 計 時頗 器赛 事 件 被 觸 發 以 前 的 總 時頗 間 ( 以 毫 秒 為 單 位 )。3.4.1.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS計 時頗 器赛 啟 動 成 功NO_TIMER_AVAILABLE 無 法 啟 動 計 時頗 器赛3.4.2 osal_start_timerEx( )3.4.2.1 描 述該 函 數 與犕 osal_start_timer() 非 常 相 似 , 僅 增猹 加 了 一 個鞄 taskID. 參 數 。 這 允 許 調 用 者 給 另 一個鞄 任 務 設 定 計 時頗 器赛 。 建 議 使 用 osal_start_timerEx( ) 函 數 來 代 替 osal_start_timer() 函 數 。18華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.4.2.2 函 數 原鞝 型byte osal_start_timerEx( byte taskID, UINT16 event_id, UINT16 timeout_value);3.4.2.3 函 數 參 數taskId 是 當 計 時頗 器赛 到 期 時頗 獲 得 事 件 的 這 個鞄 任 務 的 ID。event_id 是 一 個鞄 使 用 者 定 義 的 事 件 位 。 計 時頗 器赛 到 期 時頗 , 調 用 任 務 將 被 通 知 ( 事 件 )。timeout_value 是 計 時頗 器赛 事 件 被 觸 發 以 前 的 總 時頗 間 ( 以 毫 秒 為 單 位 )。3.4.2.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS計 時頗 器赛 啟 動 成 功NO_TIMER_AVAILABLE 無 法 啟 動 計 時頗 器赛3.4.3 osal_stop_timer( )3.4.3.1 描 述該 函 數 被 調 用 來 停 止 一 個鞄 已 經 啟 動 的 計 時頗 器赛 。 如 果 成 功 , 該 函 數 為 調 用 任 務 取 消顆 計 時頗 器赛並 阻 止 與犕 該 計 時頗 器赛 相 關詉 的 事 件 被 觸 發 。 使 用 osal_stop_timer() 函 數 意 味 著 計 時頗 器赛 正 運跮 行 在 調用 osal_stop_timer() 函 數 的 任 務 的 上 下 文 環 境蹜 中 。 要 在 不 同 的 任 務 中 去 停 止 一 個鞄 計 時頗 器赛 , 請使 用 osal_stop_timerEx() 函 數 來 代 替 osal_stop_timer() 函 數 。3.4.3.2 函 數 原鞝 型byte osal_stop_timer( UINT16 event_id );3.4.3.3 函 數 參 數event_id 是 將 要 被 停 止 的 計 時頗 器赛 的 識訤 別低 字 。19華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.4.3.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS計 時頗 器赛 停 止 成 功INVALID_EVENT_ID 無 效頒 事 件3.4.4 osal_stop_timerEx( )3.4.4.1 描 述該 函 數 與犕 osal_stop_timer 函 數 相 似 , 僅 增猹 加 了 一 個鞄 task_id. 參 數 。3.4.4.2 函 數 原鞝 型byte osal_stop_timerEx( byte task_id, UINT16 event_id );3.4.4.3 函 數 參 數task_id 是 一 個鞄 任 務 的 ID, 停 止 計 時頗 器赛 就 是 為 這 個鞄 任 務 而 操趀 作伿 的 。event_id 是 將 要 被 停 止 的 計 時頗 器赛 的 識訤 別低 字 。3.4.4.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS計 時頗 器赛 停 止 成 功INVALID_EVENT_ID 無 效頒 事 件20華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.4.5 osal_GetSystemClock( )3.4.5.1 描 述該 函 數 被 調 用 來 讀 取 系倐 統 時頗 鐘 。3.4.5.2 函 數 原鞝 型uint32 osal_GetSystemClock( void );3.4.5.3 函 數 參 數無3.4.5.4 函 數 返 回 值靹以 毫 秒 為 單 位 的 系倐 統 時頗 鐘 。3.5 中 斷 管牤 理 API中 斷 管牤 理 API 致 能 一 個鞄 任 務 去 與犕 外 部 中 斷 進 行 介 面 。 中 斷 管牤 理 API 中 的 函 數 允 許 一 個鞄任 務 去 與犕 每俟 一 個鞄 中 斷 關詉 聯 一 個鞄 專 門 的 服 務 常 式 。 中 斷 可 以 被 致 能 或 禁 止 。 在 中 斷 服 務 常 式中 , 事 件 可 被 其 他 任 務 觸 發 。3.5.1 osal_int_enable( )3.5.1.1 描 述本 函 數 被 調 用 來 致 能 一 個鞄 中 斷 。 中 斷 一 旦 致 能 , 發 生 中 斷 時頗 , 與犕 該 中 斷 相 關詉 聯 的 服 務 常式 將 被 調 用 。3.5.1.2 函 數 原鞝 型byte osal_int_enable( byte interrupt_id )21華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.5.1.3 函 數 參 數interrupt_id 將 被 致 能 的 中 斷 的 識訤 別低 字 。3.5.1.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS中 斷 致 能 成 功INVALID_INTERRUPT_ID 無 效頒 中 斷3.5.2 osal_int_disable( )3.5.2.1 描 述本 函 數 被 調 用 來 禁 止 一 個鞄 中 斷 。 當 一 個鞄 被 禁 止 的 中 斷 發 生 時頗 , 與犕 該 中 斷 相 關詉 聯 的 服 務 常式 將 不 被 調 用 。3.5.2.2 函 數 原鞝 型byte osal_int_disable( byte interrupt_id )3.5.2.3 函 數 參 數interrupt_id 將 被 禁 止 的 中 斷 的 識訤 別低 字 。3.5.2.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS中 斷 禁 止 成 功INVALID_INTERRUPT_ID 無 效頒 中 斷22華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.6 任 務 管牤 理 API任 務 管牤 理 API 被 用 來 在 作伿 業 系倐 統 抽 象 層 (OSAL) 系倐 統 中 添 加 和 管牤 理 任 務 。3.6.1 osal_init_system()3.6.1.1 描 述本 函 數 初 始 化 作伿 業 系倐 統 抽 象 層 (OSAL) 系倐 統 。 在 啟 動 過跸 程 中 , 該 函 數 必 須 在 使 用 其 他任 何 OSAL 函 數 之 前 被 調 用 。3.6.1.2 函 數 原鞝 型byte osal_init_system( void )3.6.1.3 函 數 參 數無3.6.1.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。ZSUCCESS返 回 值靹 描 述成 功3.6.2 osal_start_system()3.6.2.1 描 述該 函 數 是 任 務 系倐 統 中 的 主 迴 圈 函 數 。 它 查 看 所 有 的 任 務 事 件 並 為 具 有 事 件 的 任 務 調 用 事件 處 理 函 數 。 如 果 特顠 殊頻 任 務 有 事 件 , 該 函 數 將 為 這 個鞄 任 務 調 用 事 件 處 理 常 式 來 處 理 這 些 事件 。 相 對蹹 應 任 務 的 事 件 處 理 常 式 每俟 次 只 處 理 一 個鞄 事 件 。 在 一 個鞄 事 件 被 處 理 後 , 其 餘 的 事 件 將被 返 回 到 主 迴 圈 中 等 待 下 一 次 處 理 。 如 果 沒俯 有 事 件 ( 對蹹 所 有 任 務 而 言借 ), 本 函 數 將 使 處 理 器赛進 入 睡牔 眠 模 式 。23華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.6.2.2 函 數 原鞝 型void osal_start_system( void )3.6.2.3 函 數 參 數無3.6.2.4 函 數 返 回 值靹無3.6.3 osal_self()3.6.3.1 描 述本 函 數 返 回 目 前 調 用 任 務 的 任 務 ID。 如 果 調 用 是 來 自 一 個鞄 中 斷 服 務 行 程 則 該 函 數 返 回錯 誤狃 結 果 。3.6.3.2 函 數 原鞝 型byte osal_self( void )3.6.3.3 參 數 細 節無3.6.3.4 返 回 值靹目 前 任 務 的 任 務 ID。24華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.6.4 osalTaskAdd ()3.6.4.1 描 述本 函 數 添 加 一 個鞄 任 務 到 OSAL 系倐 統 。 一 個鞄 任 務 由 2 個鞄 函 數 組 成 — 初 始 化 和 訊 息韵 處 理 。訊 息韵 處 理 函 數 接 收 事 件 , 然 後 處 理 它 們靽 中 的 一 個鞄 並 返 回 到 主 迴 圈 中 的 剩 餘 部 分 。3.6.4.2 函 數 原鞝 型/** 任 務 初 始 化 函 數 原鞝 型*/typedef void (*pTaskInitFn)( unsigned char task_id );/** 事 件 處 理 函 數 原鞝 型*/typedef unsigned short (*pTaskEventHandlerFn)( unsigned char task_id,unsigned short event );void osalTaskAdd( const pTaskInitFn pfnInit,const pTaskEventHandlerFn pfnEventProcessor,const byte taskPriority);3.6.4.3 參 數 細 節pfnInit 指 向 任 務 初 始 化 函 數 的 指 標pfnEventProcessor 指 向 任 務 的 事 件 處 理 函 數 的 指 標taskPriority 任 務 的 優 先 順 序侤 。 可 取 以 下 值靹 :優 先 順 序侤值靹OSAL_TASK_PRIORITY_LOW 50OSAL_TASK_PRIORITY_MED 130OSAL_TASK_PRIORITY_HIGH 2303.6.4.4 返 回 值靹無25華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.7 記 憶赲 體 管牤 理 API記 憶赲 體 管牤 理 API 是 一 個鞄 簡 單 的 記 憶赲 體 分 配 系倐 統 。 記 憶赲 體 管牤 理 API 中 的 函 數 允 許 動 態躊 記憶赲 體 分 配 。3.7.1 osal_mem_alloc()3.7.1.1 描 述本 函 數 是 一 個鞄 簡 單 的 記 憶赲 體 分 配 函 數 , 它 返 回 一 個鞄 指 向 一 個鞄 緩 衝 區 的 指 標 ( 如 果 成 功 )。3.7.1.2 函 數 原鞝 型void *osal_mem_alloc( uint16 size );3.7.1.3 函 數 參 數size 希侣 望 獲 得 的 緩 衝 區 的 位 元 組 數 量 。3.7.1.4 函 數 返 回 值靹一 個鞄 無 效頒 指 標 ( 應 該 被 分 配 給 一 個鞄 預踣 期 的 緩 衝 區 類詑 型 ) 指 向 新 分 配 的 緩 衝 區 。 若 返 回NULL 指 標 , 表 示 沒俯 有 足倦 夠 的 記 憶赲 體 來 分 配 。3.7.2 osal_mem_free()3.7.2.1 描 述本 函 數 釋 放 已 被 分 配 的 記 憶赲 體 以 便 再 次 使 用 。 本 函 數 只 能 在 記 憶赲 體 已 經 被 使 用osal_mem_alloc() 函 數 分 配 過跸 的 情 況 下 工 作伿 。3.7.2.2 函 數 原鞝 型void osal_mem_free( void *ptr );26華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.7.2.3 函 數 參 數ptr 指 向 準 備 被 釋 放 的 緩 衝 區 的 指 標 。 該 緩 衝 區 先 前 必 須 已 經 被 分 配 ( 使 用osal_mem_alloc() 函 數 )。3.7.2.4 函 數 返 回 值靹無3.8 電踝 源 管牤 理 API本 節 描 述 了 作伿 業 系倐 統 抽 象 層 (OSAL) 的 電踝 源 管牤 理 系倐 統 。 該 系倐 統 為 應 用 / 任 務 提 供 了 一 種牞方 式 : 當 安 全 地 關詉 閉 了 接 收 器赛 和 外 部 硬 體 並 且 使 處 理 器赛 處 於 睡牔 眠 狀 態躊 時頗 去 通 知 作伿 業 系倐 統 抽 象層 (OSAL)。有 2 個鞄 函 數 來 控 制 電踝 源 管牤 理 。 第 一 個鞄 ,osal_pwrmgr_device() 函 數 被 調 用 來 設 定 設 備 的 等級 模 式 ( 節 電踝 模 式 或 非 節 電踝 模 式 )。 然 後 是 任 務 電踝 源 狀 態躊 , 每俟 一 個鞄 任 務 可 以 透 過跸 調 用osal_pwrmgr_task_state( PWRMGR_HOLD ) 來 阻 止 電踝 源 管牤 理 使 用 節 電踝 模 式 。 如 果 一 個鞄 任 務“ 控 制 ” 了 電踝 源 管牤 理 , 將 需猀 要 透 過跸 調 用 osal_pwrmgr_task_state( PWRMGR_CONSERVE ) 來允 許 電踝 源 管牤 理 在 節 電踝 模 式 下 繼 續 工 作伿 。預踣 設 情 況 下 , 當 任 務 被 初 始 化 時頗 , 每俟 一 個鞄 任 務 的 電踝 源 狀 態躊 被 設 定 為PWRMGR_CONSERVE, 因 此 如 果 一 個鞄 任 務 不 想 阻 止 節 電踝 模 式 ( 狀 態躊 不 改俌 變 ) 那倴 就 不 需猀 要除 錯 用 osal_pwrmgr_task_state() 函 數 。電踝 源 管牤 理 在 進 入 節 電踝 模 式 之 前 將 查 看 設 備 模 式 和 所 有 任 務 的 電踝 源 狀 態躊 集 合 。3.8.1 osal_pwrmgr_device()3.8.1.1 描 述本 函 數 在 上 電踝 時頗 或 者 要 求俠 更俐 換 電踝 源 ( 例 如 , 協 調 器赛 背 面 的 電踝 池 ) 時頗 被 調 用 。本 函 數 設 定 設 備 的 電踝 源 管牤 理 的 全 部 開 / 關詉 狀 態躊 。 本 函 數 應 當 被 一 個鞄 中 央 控 制 實蹴 體 ( 例 如ZDO) 調 用 。3.8.1.2 函 數 原鞝 型void osal_pwrmgr_state( byte pwrmgr_device );27華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.8.1.3 函 數 參 數pwrmgr_device 改俌 變 或 設 定 電踝 源 節 電踝 模 式類詑 型 描 述PWRMGR_ALWAYS_ON 選 擇赾 該 類詑 型 將 沒俯 有 節 電踝 模 式 , 設 備 由 電踝 源 供 電踝PWRMGR_BATTERY 打 開 節 電踝 模 式3.8.1.4 函 數 返 回 值靹無3.8.2 osal_pwrmgr_task_state()3.8.2.1 描 述本 函 數 被 每俟 一 個鞄 任 務 調 用 進 入 一 個鞄 狀 態躊 不 管牤 該 任 務 是 否佞 想 節 電踝 。 任 務 將 調 用 本 函 數 來 決俩定 是 否佞 它 想 讓 作伿 業 系倐 統 抽 象 層 (OSAL) 節 電踝 或 不 節 電踝 。 預踣 設 情 況 下 , 當 一 個鞄 任 務 被 建 立 後 ,它 自 己 的 電踝 源 狀 態躊 被 設 定 為 節 電踝 , 如 果 這 個鞄 任 務 希侣 望 一 直 保 持 節 電踝 , 它 不 需猀 要 調 用 本 函 數 。3.8.2.2 函 數 原鞝 型byte osal_pwrmgr_task_state( byte task_id, byte state );3.8.2.3 函 數 參 數state 改俌 變 一 個鞄 任 務 的 電踝 源 狀 態躊類詑 型 描 述PWRMGR_CONSERVE打 開 節 電踝 模 式 , 所 有 任 務 必 須 同 意 。 這 是 一 個鞄 任務 初 始 化 時頗 的 預踣 設 狀 態躊 。PWRMGR_HOLD關詉 閉 節 電踝 模 式3.8.2.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。28華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹 描 述ZSUCCESS成 功INVALID_TASK無 效頒 任 務3.9 非 易 失 性 記 憶赲 體 API本 節 描 述 了 作伿 業 系倐 統 抽 象 層 (OSAL) 的 非 易 失 性 (NV) 記 憶赲 體 系倐 統 。 該 系倐 統 為 應 用提 供 了 一 個鞄 將 資 訊 持 久 地 保 存 在 設 備 的 記 憶赲 體 中 的 方 式 。 它 也 被 協 定 堆 疊 用 來 持 久 地 儲 存ZigBee 規 範 要 求俠 的 必 要 專 案頥 。NV 函 數 被 設 計 用 來 讀 和 寫 使 用 者 自 定 義 的 專 案頥 ( 由 任 意 資 料頔類詑 型 例 如 結 構躬 體 或 資 料頔 組 成 )。 透 過跸 設 定 恰 當 的 偏 移 位 址佼 和 長 度 , 使 用 者 可 以 讀 或 寫 一 個鞄 完侖整超 的 專 案頥 或 者 專 案頥 的 一 個鞄 單 元 。 非 易 失 性 記 憶赲 體 API 與犕 NV 儲 存 介 質賭 無 關詉 , 可 以 在 flash 或EEPROM 上 實蹴 施 。每俟 一 個鞄 NV 項 目 有 一 個鞄 唯 一 的 ID。 應 用 有 一 個鞄 特顠 定 的 ID 值靹 範 圍 , 其 中 的 某 些 ID 值靹 被保 留 或 被 協 定 堆 疊 或 開 發 平 台 所 用 。 如 果 你佀 的 應 用 建 立 了 它 自 己 的 NV 項 目 , 它 必 須 從 應 用值靹 範 圍 內 選 擇赾 一 個鞄 ID, 見倝 下 表 。值靹 用 戶0x0000保 留0x0001~0x0020作伿 業 系倐 統 抽 象 層0x0021~0x0040網牺 路跡 層0x0041~0x0060應 用 支 援 子 層0x0061~0x0080安 全0x0081~0x00A0ZigBee 設 備 物 件0x00A1~0x0200保 留0x0201~0x0FFF應 用0x1000~0xFFFF保 留當 使 用 非 易 失 性 記 憶赲 體 API 時頗 需猀 要 認狀 真 考 慮 以 下 幾 點 :1. 它 們靽 都 是 阻 塞 函 數 , 一 個鞄 操趀 作伿 可 能 需猀 要 數 毫 秒 才 能 完侖 成 , 尤 其 是 針 對蹹 NV 的 寫 操趀 作伿 。另 外 , 中 斷 可 能 被 禁 止 數 毫 秒 。 最 好 是 在 當 它 不 與犕 其 他 時頗 間 關詉 鍵 性 操趀 作伿 衝 突 時頗 執 行 這 些 函數 。 例 如 , 寫 NV 項 目 的 一 個鞄 好 時頗 機趙 是 當 接 收 器赛 關詉 閉 的 時頗 候鞅 。2. 不 要 頻 繁 地 進 行 NV 寫 操趀 作伿 。 它 耗 時頗 耗 電踝 , 並 且 大 多 數 flash 設 備 都 有 一 個鞄 迴 圈 清 除的 次 數 限 制 。3. 如 果 一 個鞄 或 多 個鞄 NV 專 案頥 的 結 構躬 發 生 改俌 變 , 特顠 別低 是 當 從 Z-<strong>Stack</strong> 的 一 個鞄 版 本 升 級 到 另一 個鞄 版 本 , 清 除 和 重 新 初 始 化 NV 記 憶赲 體 是 必 要 的 。 否佞 則 , 在 已 改俌 變 的 NV 項 目 上 進 行 讀 和寫 操趀 作伿 將 會 失 敗 或 產 生 錯 誤狃 的 結 果 。29華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.9.1 osal_nv_item_init()3.9.1.1 描 述在 NV 中 初 始 化 一 個鞄 項 目 。 該 函 數 檢 查 NV 中 的 一 個鞄 專 案頥 是 否佞 存 在 。 如 果 它 不 存 在 , 它將 被 建 立 和 用 函 數 參 數 傳 遞狟 的 資 料頔 初 始 化 。在 調 用 osal_nv_read() 或 osal_nv_write() 函 數 之 前 , 本 函 數 必 須 被 每俟 一 個鞄 專 案頥 調 用 。3.9.1.2 函 數 原鞝 型byte osal_nv_item_init( uint16 id, uint16 len, void *buf );3.9.1.3 函 數 參 數id 使 用 者 自 己 定 義 項 目 ID。len 專 案頥 長 度 ( 以 位 元 組 為 單 位 )。*buf 指 向 專 案頥 初 始 化 資 料頔 的 指 標 。 若 沒俯 有 初 始 化 資 料頔 , 被 設 為 NULL。3.9.1.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS成 功NV_ITEM_UNINIT成 功 但伽 專 案頥 不 存 在NV_OPER_FAILED操趀 作伿 失 敗3.9.2 osal_nv_read()3.9.2.1 描 述從 NV 讀 取 資 料頔 。 本 函 數 可 以 被 用 來 從 NV 讀 取 一 個鞄 實蹴 體 專 案頥 或 讀 取 透 過跸 偏 移 索 引 到 專案頥 中 的 一 個鞄 單 元 。 讀 取 的 資 料頔 被 複 製犸 到 *buf。30華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統3.9.2.2 函 數 原鞝 型byte osal_nv_read( uint16 id, uint16 offset, uint16 len, void *buf );3.9.2.3 函 數 參 數id 使 用 者 自 定 義 項 目 ID。offset 專 案頥 在 記 憶赲 體 中 的 偏 移 ( 以 位 元 組 為 單 位 )。len 專 案頥 長 度 ( 以 位 元 組 為 單 位 )。*buf 資 料頔 將 被 讀 取 到 該 緩 衝 區 。3.9.2.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS成 功NV_ITEM_UNINIT項 目 未 被 初 始 化NV_OPER_FAILED操趀 作伿 失 敗3.9.3 osal_nv_write()3.9.3.1 描 述寫 資 料頔 到 NV。 本 函 數 可 以 被 用 來 寫 一 個鞄 實蹴 體 專 案頥 到 NV 或 者 寫 一 個鞄 透 過跸 偏 移 索 引 到 專案頥 中 的 一 個鞄 單 元 到 NV。3.9.3.2 函 數 原鞝 型byte osal_nv_write( uint16 id, uint16 offset, uint16 len, void *buf );3.9.3.3 函 數 參 數id 使 用 者 自 定 義 項 目 ID。offset 專 案頥 在 記 憶赲 體 中 的 偏 移 ( 以 位 元 組 為 單 位 )。len 專 案頥 長 度 ( 以 位 元 組 為 單 位 )。31華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統*buf 資 料頔 將 被 寫 入 到 該 緩 衝 區 。3.9.3.4 函 數 返 回 值靹函 數 返 回 值靹 表 示 函 數 操趀 作伿 的 結 果 。返 回 值靹 描 述ZSUCCESS成 功NV_ITEM_UNINIT項 目 未 被 初 始 化NV_OPER_FAILED操趀 作伿 失 敗3.9.4 osal_offsetof()3.9.4.1 描 述這 個鞄 巨 集 計 算牨 結 構躬 體 中 一 個鞄 單 元 在 記 憶赲 體 中 的 偏 移 量 ( 以 位 元 組 為 單 位 )。 對蹹 於 被 NVAPI 函 數 使 用 的 offset 參 數 的 計 算牨 是 非 常 有 用 的 。3.9.4.2 函 數 原鞝 型osal_offsetof(type, member)3.9.4.3 函 數 參 數type 結 構躬 類詑 型member 結 構躬 成 員鞬32華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4. 硬 體 抽 象 層 (HAL)API4.1 概 述硬 體 抽 象 層 (HAL) 是 提 供 硬 體 服 務 的 層 , 它 遮贆 罩 了 很 多 硬 體 相 關詉 細 節 , 這 樣 使 使 用者 可 以 更俐 專 注 於 他 們靽 的 應 用 ( 而 不 必 詳 細 瞭 解 硬 體 底 層 細 節 )。HAL 的 主 要 內 容韕 是 驅 動 服務 , 用 來 控 制 LED、LCD、ADC、KEY、 計 時頗 器赛 和 UART。 這 些 服 務 被 抽 象 為 簡 單 的 API函 數 , 使 用 者 可 以 使 用 這 些 API 函 數 來 獲 得 服 務 而 不 必 擔趃 心 在 GPIO 級 建 立 這 些 服 務 。4.2 函 數 調 用4.2.1 初 始 化 函 數 調 用這 些 函 數 調 用 被 用 來 初 始 化 一 個鞄 服 務 和 / 或 為 一 個鞄 特顠 定 平 台 資 料頔 設 定 可 選 參 數 。 初 始 化函 數 通 常 在 設 備 上 電踝 的 初 始 階 段 被 調 用 。4.2.2 服 務 存 取 函 數 調 用這 些 函 數 調 用 可 以 直 接 存 取 硬 體 暫 存 器赛 來 獲 得 / 設 定 硬 體 ( 如 ADC) 的 特顠 定 值靹 , 或 者 控制 硬 體 元 件 ( 如 LED)。4.2.3 回 調 函 數 調 用33華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統這 些 函 數 必 須 被 應 用 執 行 , 它 們靽 被 用 來 傳 遞狟 事 件 給 更俐 高 層 。 這 些 事 件 由 硬 體 ( 中 斷 , 計數 器赛 , 計 時頗 器赛 ...) 或 透 過跸 查 詢 機趙 制 產 生 。 透 過跸 回 調 函 數 參 數 ( 例 如 一 個鞄 資 料頔 指 標 ) 的 資 料頔 存取 只 對蹹 該 函 數 的 執 行 有 效頒 , 當 該 函 數 返 回 時頗 不 應 當 被 認狀 為 是 有 效頒 的 。 如 果 這 些 函 數 在 中 斷 的上 下 文 環 境蹜 中 執 行 , 這 必 須 高 效頒 並 且 不 執 行 CPU 密 集 操趀 作伿 或 不 使 用 臨 界 區 。4.3 服 務HAL 為 MAC 和 更俐 高 層 提 供 計 時頗 器赛 、GPIO、LEDs、 按 鍵 / 開 關詉 、USART 和 ADC 服 務 。 服務 中 的 所 有 特顠 性 並 不 一 定 適贅 用 於 每俟 一 個鞄 平 台 。 每俟 一 個鞄 服 務 中 的 特顠 性 可 透 過跸 初 始 化 函 數 為 不 同平 台 配 置 。4.4 ADC 服 務該 服 務 支 援 在 8 個鞄 通 道跰 (0~7) 上 進 行 8、10、12 和 14 位 類詑 比 轉視 換 。4.4.1 HalAdcInit()4.4.1.1 描 述該 ADC 初 始 化 函 數 在 啟 動 時頗 只 被 調 用 一 次 。 該 函 數 必 須 在 任 何 其 他 ADC 函 數 被 調 用 以前 被 調 用 。 該 函 數 致 能 ADC 按 所 需猀 和 可 選 的 參 數 被 初 始 化 。4.4.1.2 函 數 原鞝 型void HalAdcInit (void);4.4.1.3 參 數 細 節無4.4.1.4 返 回 值靹無34華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.4.2 HalAdcRead ()4.4.2.1 描 述該 函 數 讀 取 並 返 回 在 指 定 通 道跰 和 解 析 度 的 ADC 轉視 換 值靹 。4.4.2.2 函 數 原鞝 型uint16 HalAdcRead (uint8 channel,uint8 resolution);4.4.2.3 參 數 細 節channel — 輸 入 通 道跰 ( 查 看 4.4.3.1 小 節 )resolution — 轉視 換 的 解 析 度 ( 查 看 4.4.3.2 小 節 )4.4.2.4 返 回 值靹返 回 指 定 通 道跰 和 解 析 度 的 16 位 元 轉視 換 值靹 。4.4.3 常 量4.4.3.1 通 道跰參 數 描 述HAL_ADC_CHANNEL_0 輸 入 通 道跰 0HAL_ADC_CHANNEL_1 輸 入 通 道跰 1HAL_ADC_CHANNEL_2 輸 入 通 道跰 2HAL_ADC_CHANNEL_3 輸 入 通 道跰 3HAL_ADC_CHANNEL_4 輸 入 通 道跰 4HAL_ADC_CHANNEL_5 輸 入 通 道跰 5HAL_ADC_CHANNEL_6 輸 入 通 道跰 635華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統HAL_ADC_CHANNEL_7 輸 入 通 道跰 74.4.3.2 解 析 度參 數 描 述HAL_ADC_RESOLUTION_8HAL_ADC_RESOLUTION_10HAL_ADC_RESOLUTION_12HAL_ADC_RESOLUTION_148 位 解 析 度10 位 解 析 度12 位 解 析 度14 位 解 析 度4.5 LED 服 務該 服 務 允 許 使 用 不 同 方 式 控 制 LED。LED 服 務 支 援 點 亮 、 熄軝 滅 、 狀 態躊 轉視 換 、 閃 爍觰 和 按 指定 參 數 閃 爍觰 。 並 不 是 所 有 平 台 都 支 援 這 些 模 式 。4.5.1 HalLedInit()4.5.1.1 描 述該 LED 初 始 化 函 數 在 啟 動 時頗 只 被 調 用 一 次 。 該 函 數 必 須 在 任 何 其 他 LED 函 數 被 調 用 以 前被 調 用 。 該 函 數 致 能 LED 按 所 需猀 和 可 選 的 參 數 被 初 始 化 。4.5.1.2 函 數 原鞝 型void HalLEDInit (void);4.5.1.3 參 數 細 節無4.5.1.4 返 回 值靹無36華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.5.2 HalLedSet()4.5.2.1 描 述該 函 數 將 設 定 指 定 的 LED 點 亮 、 熄軝 滅 、 狀 態躊 轉視 換 、 閃 爍觰 和 按 指 定 參 數 閃 爍觰 。 如 果 使 用 閃爍觰 和 指 定 參 數 閃 爍觰 模 式 , 一 套鞽 預踣 設 的 參 數 將 被 使 用 。 要 定 制 這 些 參 數 ,HalLedBlink() 必 須 被使 用 。4.5.2.2 函 數 原鞝 型void HalLedSet (uint8 led, uint8 mode);4.5.2.3 參 數 細 節led — 指 定 LED 的 位 遮贆 罩 ( 查 看 4.5.7.1 小 節 )mode — LED 的 模 式 ( 查 看 4.5.7.2 小 節 )4.5.2.4 返 回 值靹無4.5.3 HalLedBlink()4.5.3.1 描 述該 函 數 將 基 於 所 提 供 的 參 數 閃 爍觰 指 定 的 LED。4.5.3.2 函 數 原鞝 型void HalLedBlink (uint8 leds,uint8 numBlinks,uint8 percent,uint16 period);37華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.5.3.3 參 數 細 節leds — 指 定 LED 的 位 遮贆 罩 ( 查 看 4.5.7.1 小 節 )numBlinks — LED 將 要 閃 爍觰 的 次 數percent — 一 個鞄 點 亮 / 熄軝 滅 週 期 中 點 亮 狀 態躊 所 占 的 百 分 比period — 一 個鞄 點 亮 / 熄軝 滅 週 期 ( 以 毫 秒 為 單 位 )4.5.3.4 返 回 值靹無4.5.4 HalLedGetState()4.5.4.1 描 述該 函 數 返 回 LED 的 目 前 狀 態躊 。4.5.4.2 函 數 原鞝 型uint8 HalLedGetState (void);4.5.4.3 參 數 細 節無4.5.4.4 返 回 值靹包 含佳 LED 目 前 狀 態躊 的 8 位 元 值靹 。 每俟 一 位 元 指 示 相 應 LED 的 狀 態躊 。4.5.5 HalLedEnterSleep()4.5.5.1 描 述該 函 數 儲 存 LED 的 目 前 狀 態躊 並 關詉 閉 所 有 的 LED 以 便 節 電踝 。 它 同 時頗 還 設 定 一 個鞄 全 局侚 狀 態躊 變38華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統數 來 指 示 已 經 進 入 睡牔 眠 模 式 。 在 睡牔 眠 模 式 下 , 這 個鞄 全 局侚 狀 態躊 變 數 將 阻 止 處 理 LED 的 中 斷 。4.5.5.2 函 數 原鞝 型void HalLedEnterSleep (void);4.5.5.3 參 數 細 節無4.5.5.4 返 回 值靹無4.5.6 HalLedExitSleep()4.5.6.1 描 述該 函 數 將 恢 復 在 進 入 睡牔 眠 模 式 以 前 的 LED 的 狀 態躊 。4.5.6.2 函 數 原鞝 型void HalLedExitSleep (void);4.5.6.3 參 數 細 節無4.5.6.4 返 回 值靹無39華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.5.7 常 量4.5.7.1 LEDLED 描 述HAL_LED_1HAL_LED_2HAL_LED_3HAL_LED_4HAL_LED_ALLLED1LED2LED3LED4所 有 的 LED4.5.7.2 模 式模 式 描 述HAL_LED_MODE_OFFHAL_LED_MODE_ONHAL_LED_MODE_BLINKHAL_LED_MODE_FLASHHAL_LED_MODE_TOGGLE熄軝 滅 LED點 亮 LED按 指 定 參 數 閃 爍觰 LED閃 爍觰 LED轉視 換 LED 狀 態躊4.6 按 鍵 服 務該 服 務 提 供 按 鍵 、 開 關詉 和 搖 桿 的 服 務 。 服 務 可 採 用 查 詢 或 中 斷 方 式 。 為 了 讓 服 務 通 知 按鍵 / 開 關詉 / 搖 桿 的 狀 態躊 給 應 用 , 一 個鞄 回 調 函 數 必 須 被 註 冊 。4.6.1 HalKeyInit()4.6.1.1 描 述該 初 始 化 函 數 在 啟 動 時頗 只 被 調 用 一 次 。 該 函 數 必 須 在 任 何 其 他 使 用 按 鍵 / 開 關詉 / 搖 桿 的 函數 被 調 用 以 前 被 調 用 。 該 函 數 致 能 按 鍵 / 開 關詉 / 搖 桿 按 所 需猀 和 可 選 的 參 數 被 初 始 化 。40華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.6.1.2 函 數 原鞝 型void HalKeyInit (void *init);4.6.1.3 參 數 細 節無4.6.1.4 返 回 值靹無4.6.2 HalKeyConfig()4.6.2.1 描 述該 函 數 被 用 來 配 置 按 鍵 / 開 關詉 / 搖 桿 服 務 採 用 查 詢 或 中 斷 方 式 。 它 同 時頗 為 服 務 設 定 一 個鞄 回調 函 數 。 如 果 不 使 用 中 斷 , 在 100ms 後 自 動 啟 動 查 詢 , 按 鍵 / 開 關詉 / 搖 桿 被 每俟 100ms 查 詢 一 次 。如 果 使 用 中 斷 , 一 個鞄 中 斷 服 務 程 式 將 處 理 該 事 件 。 在 中 斷 出 現 以 後 有 一 個鞄 25ms 的 延 時頗 , 這是 為 了 鍵 盤 防倸 抖侺 動 。4.6.2.2 函 數 原鞝 型void HalKeyConfig (bool interruptEnable,halKeyCBack_t *cback);4.6.2.3 參 數 細 節interruptEnable — TRUE 或 FALSE。 致 能 或 禁 止 中 斷 。 如 果 中 斷 被 禁 止 , 按 鍵 / 開 關詉 /搖 桿 將 被 查 詢 。 否佞 則 , 按 鍵 / 開 關詉 / 搖 桿 採 用 中 斷 方 式 。cback — 當 一 個鞄 按 鍵 、 開 關詉 或 搖 桿 被 啟 動 時頗 該 回 調 出 現 。 如 果 被 設 定 為 NULL, 事 件將 不 會 被 處 理 。typedef void (halGpioCback_t) (uint8 key, uint8 state);key — 當 被 觸 發 時頗 引 起 回 調 的 按 鍵 / 開 關詉 / 搖 桿 ( 查 看 4.6.8.1 小 節 )41華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統state — 引 起 回 調 的 按 鍵 / 開 關詉 / 搖 桿 的 目 前 狀 態躊 ( 查 看 4.6.8.3 小 節 )4.6.2.4 返 回 值靹無4.6.3 HalKeyRead()4.6.3.1 描 述該 函 數 被 用 來 讀 取 按 鍵 / 開 關詉 / 搖 桿 的 目 前 狀 態躊 。 如 果 按 鍵 服 務 被 設 定 為 查 詢 方 式 , 該 函數 將 被 HAL 驅 動 任 務 每俟 100ms 調 用 一 次 。 如 果 按 鍵 服 務 被 設 定 為 中 斷 方 式 , 該 函 數 將 在 中 斷出 現 25ms 後 由 HAL 驅 動 任 務 調 用 。 如 果 一 個鞄 回 調 在 HalKeyConfig() 中 註 冊 , 該 回 調 將 被 發 送回 給 應 用 並 帶 有 按 鍵 的 新 狀 態躊 。 否佞 則 , 沒俯 有 更俐 進 一 步俞 的 動 作伿 。4.6.3.2 函 數 原鞝 型uint8 HalKeyRead ( void );4.6.3.3 參 數 細 節無4.6.3.4 返 回 值靹返 回 按 鍵 狀 態躊 的 位 元 遮贆 罩 ( 查 看 4.6.8.1 小 節 )4.6.4 HalKeyEnterSleep()4.6.4.1 描 述該 函 數 設 定 一 個鞄 用 於 指 示 已 進 入 睡牔 眠 模 式 的 全 局侚 狀 態躊 變 數 。 在 睡牔 眠 模 式 下 , 這 個鞄 全 局侚 狀態躊 變 數 將 阻 止 處 理 按 鍵 的 中 斷 。42華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.6.4.2 函 數 原鞝 型void HalKeyEnterSleep (void);4.6.4.3 參 數 細 節無4.6.4.4 返 回 值靹無4.6.5 HalKeyExitSleep()4.6.5.1 描 述該 函 數 設 定 一 個鞄 用 於 指 示 已 退 出 睡牔 眠 模 式 的 全 局侚 狀 態躊 變 數 。 它 還 處 理 由 按 鍵 中 斷 儲 存 的那倴 些 按 鍵 。4.6.5.2 函 數 原鞝 型void HalKeyExitSleep (void);4.6.5.3 參 數 細 節無4.6.5.4 返 回 值靹無43華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.6.6 HalKeyPoll()4.6.6.1 描 述該 函 數 被 HAL 驅 動 內 部 使 用 。4.6.6.2 函 數 原鞝 型void HalKeyPoll ( void );4.6.6.3 參 數 細 節無4.6.6.4 返 回 值靹無4.6.7 HalKeyPressed()4.6.7.1 描 述該 函 數 被 HAL 睡牔 眠 內 部 使 用 。4.6.7.2 函 數 原鞝 型bool HalKeyPressed( void );4.6.7.3 參 數 細 節無4.6.7.4 返 回 值靹44華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統無4.6.8 常 量4.6.8.1 按 鍵按 鍵 描 述HAL_KEY_SW_1 按 鍵 1 被 按 下HAL_KEY_SW_2 按 鍵 2 被 按 下HAL_KEY_SW_3 按 鍵 3 被 按 下HAL_KEY_SW_4 按 鍵 4 被 按 下HAL_KEY_SW_5 按 鍵 5 被 按 下HAL_KEY_SW_6 按 鍵 6 被 按 下4.6.8.2 搖 桿按 鍵 描 述HAL_KEY_UP搖 桿 上HAL_KEY_RIGHT 搖 桿 右HAL_KEY_CENTER 搖 桿 中 心HAL_KEY_LEFT 搖 桿 左HAL_KEY_DOWN 搖 桿 下4.6.8.3 狀 態躊狀 態躊 描 述HAL_KEY_STATE_NORMAL 按 鍵 被 正 常 按 下HAL_KEY_STATE_SHIFT 按 鍵 是 shift 鍵 並 被 按 下4.7 睡牔 眠 服 務該 服 務 是 節 電踝 機趙 制 的 一 部 分 。 當 POWER_SAVING 符 號 被 編 譯 時頗 ,OSAL 使 用 這 些 函 數來 實蹴 行 低佂 功 耗 。45華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.7.1 HalSleep()4.7.1.1 描 述該 函 數 透 過跸 OSAL 介 面 從 OSAL 任 務 迴 圈 中 被 調 用 , 用 來 設 定 MAC 的 低佂 功 耗 模 式 。4.7.1.2 函 數 原鞝 型void halSleep(uint16 osal_timeout);4.7.1.3 參 數 細 節osal_timeout — 下 一 個鞄 OSAL 計 時頗 器赛 逾跻 時頗 時頗 間 。 它 將 被 用 來 確 定 MAC 需猀 要 多 長 時頗 間 睡牔眠 或 喚 醒 。4.7.1.4 返 回 值靹無4.7.2 HalSleepWait()4.7.2.1 描 述該 函 數 執 行 一 個鞄 阻 塞 等 待 。4.7.2.2 函 數 原鞝 型void halSleepWait(uint16 duration);4.7.2.3 參 數 細 節duration — 阻 塞 時頗 間 ( 以 微 秒 為 單 位 )46華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.7.2.4 返 回 值靹無4.8 計 時頗 器赛 服 務該 服 務 支 援 最 高 4 個鞄 硬 體 計 時頗 器赛 :2 個鞄 8 位 計 時頗 器赛 和 2 個鞄 16 位 計 時頗 器赛 。4.8.1 操趀 作伿 模 式計 時頗 器赛 服 務 支 援 正 常 和 CTC(Clear Timer on Compare) 模 式 。 在 正 常 模 式 下 , 計 時頗 器赛 /計 數 器赛 總 是 增猹 加 , 並 且 不 執 行 計 時頗 器赛 / 計 數 器赛 清 除 。 當 計 時頗 器赛 / 計 數 器赛 超 過跸 它 的 最 大 值靹 時頗 , 它僅 僅 只 是 超 出 並 且 再 次 從 零踟 開 始 重 新 啟 動 。 在 CTC 模 式 下 , 當 計 時頗 器赛 / 計 數 器赛 與犕 給 定 值靹 匹 配時頗 , 它 將 被 清 為 零踟 。4.8.2 通 道跰對蹹 於 16 位 元 計 時頗 器赛 , 計 時頗 器赛 服 務 有 最 多 3 個鞄 輸 出 比 較跨 通 道跰 和 1 個鞄 輸 入 捕項 獲 通 道跰 或 溢 出 通 道跰模 式 。 對蹹 於 8 位 元 計 時頗 器赛 , 計 時頗 器赛 服 務 有 1 個鞄 輸 出 捕項 獲 通 道跰 或 溢 出 通 道跰 模 式 。4.8.3 中 斷 / 通 道跰 模 式計 時頗 器赛 服 務 支 援 3 個鞄 中 斷 源 , 溢 出 、 比 較跨 輸 出 和 輸 入 捕項 獲 。 然 而 , 只 有 16 位 元 計 時頗 器赛 支援 輸 入 捕項 獲 。4.8.4 HalTimerInit ()4.8.4.1 描 述該 計 時頗 器赛 初 始 化 函 數 在 啟 動 時頗 只 被 調 用 一 次 。 該 函 數 必 須 在 任 何 其 他 計 時頗 器赛 函 數 被 調 用以 前 被 調 用 。 該 函 數 致 能 硬 體 計 時頗 器赛 按 所 需猀 和 可 選 的 參 數 被 初 始 化 。4.8.4.2 函 數 原鞝 型void HalTimerInit (void);47華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.8.4.3 參 數 細 節無4.8.4.4 返 回 值靹無4.8.5 HalTimerConfig()4.8.5.1 描 述該 函 數 允 許 通 道跰 被 配 置 為 不 同 模 式 。4.8.5.2 函 數 原鞝 型halTimerStatus_t HalTimerConfig ( uint8 timerId,uint8 opMode,uint8 channel,uint8 channelMode,bool intEnable,halTimerCBack_t cback);4.8.5.3 參 數 細 節timerId — HAL_TIMER_X, 計 時頗 器赛 識訤 別低 字 。 不 同 處 理 器赛 支 援 不 同 數 量 的 計 時頗 器赛 ( 查看 4.8.10.1 小 節 )。節 )。opMode — 操趀 作伿 模 式 , 可 以 為 正 常 或 CTC( 查 看 4.8.10.4 小 節 )。channel — 被 配 置 的 通 道跰 ( 查 看 4.8.10.2 小 節 )。channelMode — 通 道跰 模 式 , 輸 入 捕項 獲 模 式 , 比 較跨 輸 出 模 式 或 溢 出 模 式 ( 查 看 4.8.10.3 小intEnable — TRUE 或 FALSE, 致 能 / 禁 止 中 斷 。cback — 指 向 回 調 函 數 的 指 標 。 每俟 當 有 一 個鞄 中 斷 出 現 時頗 , 回 調 函 數 被 用 來 通 知 應 用 。typedef void (halTimerCback_t) (uint8 timerId,48華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統uint8 channel,uint8 channelMode);timerId — HAL_TIMER_X, 計 時頗 器赛 識訤 別低 字 。 不 同 處 理 器赛 支 援 不 同 數 量 的 計 時頗器赛 ( 查 看 4.8.10.1 小 節 )。channel — 發 生 中 斷 的 通 道跰 ( 查 看 4.8.10.2 小 節 )。channelMode — 事 件 的 中 斷 源 。4.8.5.4 返 回 值靹配 置 狀 態躊 ( 查 看 4.8.10.6 小 節 )。4.8.6 HalTimerStart ()4.8.6.1 描 述該 函 數 啟 動 計 時頗 器赛 / 計 數 器赛 , 操趀 作伿 模 式 、 通 道跰 、 通 道跰 模 式 、 預踣 先 分 頻 由 HalTimerConfig()提 供 。 換 句 話 說狄 ,HalTimerConfig() 必 須 在 HalTimerStart() 被 調 用 之 前 被 調 用 。 在 查 詢 模 式 ,計 時頗 器赛 tick 由 HAL 驅 動 任 務 透 過跸 調 用 HalTimerTick() 來 更俐 新 。 在 中 斷 模 式 , 計 時頗 器赛 tick 在 每俟 次一 個鞄 中 斷 出 現 時頗 被 中 斷 更俐 新 。4.8.6.2 函 數 原鞝 型uint8 HalTimerStart ( uint8 timerId, uint32 timePerTick );4.8.6.3 參 數 細 節timerId — HAL_TIMER_X, 計 時頗 器赛 識訤 別低 字 。 不 同 處 理 器赛 支 援 不 同 數 量 的 計 時頗 器赛 ( 查看 4.8.10.1 小 節 )。timerPerTick — 每俟 個鞄 tick 的 微 秒 數 量4.8.6.4 返 回 值靹如 果 計 時頗 器赛 服 務 沒俯 有 被 配 置 ,HAL_TIMER_NOT_CONFIGURED 將 被 返 回 。 否佞 則 ,HAL_TIMER_OK 將 被 返 回 ( 查 看 4.8.10.6 小 節 )。49華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.8.7 HalTimerStop()4.8.7.1 描 述該 函 數 被 調 用 來 停 止 一 個鞄 計 時頗 器赛 / 計 數 器赛 。4.8.7.2 函 數 原鞝 型uint8 HalTimerStop (uint8 timerId);4.8.7.3 參 數 細 節timerId — HAL_TIMER_X, 將 被 停 止 的 計 時頗 器赛 的 識訤 別低 字 ( 查 看 4.8.10.1 小 節 )。4.8.7.4 返 回 值靹如 果 timerId 無 效頒 ,HAL_TIMER_INVALID_ID 將 被 返 回 。 否佞 則 ,HAL_TIMER_OK 將 被返 回 ( 查 看 4.8.10.6 小 節 )。4.8.8 HalTimerTick()4.8.8.1 描 述當 為 了 給 一 個鞄 應 用 建 立 一 個鞄 tick 而 禁 止 中 斷 時頗 , 該 函 數 被 HAL 驅 動 任 務 調 用 。 要 使 用HalTimerTick(), 在 調 用 它 之 前 , 計 時頗 器赛 服 務 必 須 透 過跸 使 用 HalTimerConfig() 並 且 intEnable 設定 為 FALSE 被 配 置 。 在 每俟 個鞄 tick, 使 用 所 提 供 的 回 調 函 數 ,HalTimerTick() 將 發 送 給 應 用 。tick 的 週 期 用 HalTimerConfig() 提 供 的 資 訊 來 設 定 。4.8.8.2 函 數 原鞝 型void HalTimerTick (void);4.8.8.3 參 數 細 節50華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統無4.8.8.4 返 回 值靹無4.8.9 HalTimerInterruptEnable()4.8.9.1 描 述該 函 數 將 致 能 , 禁 止 指 定 timerId 和 channelMode 的 計 時頗 器赛 中 斷 。4.8.9.2 函 數 原鞝 型uint8 HalTimerInterruptEnable ( uint8 timerId,uint8 channelMode,bool enable );4.8.9.3 參 數 細 節timerId — HAL_TIMER_X, 計 時頗 器赛 識訤 別低 字 。 不 同 處 理 器赛 支 援 不 同 數 量 的 計 時頗 器赛 ( 查看 4.8.10.1 小 節 )。channelMode — 通 道跰 模 式 , 輸 入 捕項 獲 模 式 , 比 較跨 輸 出 模 式 或 溢 出 模 式 ( 查 看 4.8.10.3 小節 )。enable — TRUE 或 FALSE。4.8.9.4 返 回 值靹如 果 timerId 無 效頒 ,HAL_TIMER_INVALID_ID 將 被 返 回 。 否佞 則 ,HAL_TIMER_OK 將 被返 回 ( 查 看 4.8.10.6 小 節 )。51華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.8.10 常 量4.8.10.1 計 時頗 器赛 識訤 別低 字標 識訤 符 描 述HAL_TIMER_0 8 位 元 計 時頗 器赛 識訤 別低 字HAL_TIMER_116 位 元 計 時頗 器赛 識訤 別低 字 — 這 是 MAC 計 時頗 器赛 並 不 被 HAL 支援HAL_TIMER_2 8 位 元 計 時頗 器赛 識訤 別低 字HAL_TIMER_3 16 位 元 計 時頗 器赛 識訤 別低 字4.8.10.2 通 道跰通 道跰 描 述HAL_TIMER_CHANNEL_SINGLE 單 通 道跰 計 時頗 器赛HAL_TIMER_CHANNEL_A 計 時頗 器赛 通 道跰 AHAL_TIMER_CHANNEL_B 計 時頗 器赛 通 道跰 BHAL_TIMER_CHANNEL_C 計 時頗 器赛 通 道跰 C4.8.10.3 通 道跰 模 式通 道跰 模 式 描 述HAL_TIMER_CH_MODE_INPUT_CAPTURE 輸 入 捕項 獲 模 式HAL_TIMER_CH_MODE_OUTPUT_COMPARE 比 較跨 輸 出 模 式HAL_TIMER_CH_MODE_OVERFLOW溢 位 模 式4.8.10.4 操趀 作伿 模 式操趀 作伿 模 式 描 述在 正 常 模 式 , 不 提 供 計 數 器赛 清 除 。HAL_TIMER_MODE_NORMAL 如 果 計 數 器赛 超 過跸 了 最 大 值靹 , 它 將 再次 從 零踟 重 新 啟 動 。在 CTC 模 式 , 當 計 數 器赛 與犕 給 定 值靹 匹HAL_TIMER_MODE_CTC配 時頗 , 計 數 器赛 將 被 清 為 零踟 。52華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.8.10.5 預踣 分 頻預踣 分 頻 -8 位 描 述HAL_TIMER_8_TC_STO 無 時頗 鐘 , 計 時頗 器赛 停 止 。HAL_TIMER_8_TC_DIV1 Clock 不 預踣 先 分 頻HAL_TIMER_8_TC_DIV8 Clock 8 分 頻HAL_TIMER_8_TC_DIV32 Clock 32 分 頻HAL_TIMER_8_TC_DIV64 Clock 64 分 頻HAL_TIMER_8_TC_DIV128 Clock 128 分 頻HAL_TIMER_8_TC_DIV256 Clock 256 分 頻HAL_TIMER_8_TC_DIV1024 Clock 1024 分 頻預踣 分 頻 -16 位 描 述HAL_TIMER_16_TC_STO 無 clock, 計 時頗 器赛 停 止 。HAL_TIMER_16_TC_DIV1 Clock 不 預踣 分 頻HAL_TIMER_16_TC_DIV8 Clock 8 分 頻HAL_TIMER_16_TC_DIV64 Clock 64 分 頻HAL_TIMER_16_TC_DIV256 Clock 256 分 頻HAL_TIMER_16_TC_DIV1024 Clock 1024 分 頻HAL_TIMER_16_TC_EXTFE外 部 clock(T2), 下 降源HAL_TIMER_16_TC_EXTRE外 部 clock(T2), 上 升源4.8.10.6 狀 態躊狀 態躊 描 述HAL_TIMER_OKOK 狀 態躊HAL_TIMER_NOT_OKNOT OK 狀 態躊HAL_TIMER_PARAMS_ERROR 參 數 不 匹 配 或 不 正 確HAL_TIMER_NOT_CONFIGURED 計 時頗 器赛 未 配 置HAL_TIMER_INVALID_ID無 效頒 計 時頗 器赛 識訤 別低 字HAL_TIMER_INVALID_CH_MODE 無 效頒 通 道跰 模 式HAL_TIMER_INVALID_OP_MODE 無 效頒 操趀 作伿 模 式4.9 UART 服 務該 服 務 配 置 UART 中 的 許 多 設 定 , 例 如 串 列 傳 輸 速 率 、 流 量 控 制 、CTS、RTS、DSR、53華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統DTR、CD、RI 等 等 。4.9.1 HalUARTInit ()4.9.1.1 描 述該 UART 初 始 化 函 數 在 啟 動 時頗 只 被 調 用 一 次 。 該 函 數 必 須 在 任 何 其 他 UART 函 數 被 調 用以 前 被 調 用 。 該 函 數 致 能 UART 按 所 需猀 和 可 選 的 參 數 被 初 始 化 。4.9.1.2 函 數 原鞝 型void HalUARTInit (void);4.9.1.3 參 數 細 節無4.9.1.4 返 回 值靹無4.9.2 HalUARTOpen ()4.9.2.1 描 述理 。該 函 數 打 開 一 個鞄 基 於 所 提 供 配 置 的 埠 。 一 個鞄 回 調 函 數 也 被 註 冊 以 便 事 件 可 以 被 正 確 處4.9.2.2 函 數 原鞝 型uint8 HalUARTOpen (uint8 port,halUARTCfg_t *config);54華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.9.2.3 參 數 細 節port — 指 定 將 被 打 開 的 埠 ( 查 看 4.9.11.1 小 節 )。config — 包 含佳 被 用 來 配 置 埠 的 資 訊 的 結 構躬typedef struct{boolconfigured;uint16 baudRate;boolflowControl;uint16 flowControlThreshold;uint8idleTimeout;uint16 rx;uint16 tx;boolintEnable;uint32 rxChRvdTime;halUARTCBack_t callBackFunc;}halUARTCfg_t;config.configured — 當 埠 被 正 確 設 定 並 準 備 被 使 用 時頗 由 該 成 員鞬 設 定 。config.baudRate — 被 打 開 埠 的 串 列 傳 輸 速 率 ( 查 看 4.9.11.1 小 節 )。config.flowControl — UART 流 量 控 制 制 可 被 設 定 為 TRUE 或 FALSE。TRUE 值靹 將 致 能 流量 控 制 ,FALSE 值靹 將 禁 止 流 量 控 制 。config.flowControlThreshold — 在 Rx 緩 衝 區 達跲 到 maxRxBufSize 值靹 前 所 剩 餘 的 位 元 組數 量 。 當 Rx 緩 衝 區 達跲 到 該 值靹 (maxRxBufSize - flowControlThreshold) 並 且 流 量 控 制 被 致 能時頗 , 一 個鞄 回 調 將 被 發 回 HAL_UART_RX_ABOUT_FULL 事 件 給 應 用 。config.idleTimeout — Rx 逾跻 時頗 週 期 ( 以 毫 秒 為 單 位 )。 如 果 Rx 緩 衝 區 在 idleTimout 內 沒俯有 獲 得 新 資 料頔 , 一 個鞄 回 調 將 被 發 回 HAL_UART_RX_TIMEOUT 事 件 給 應 用 。 應 用 可 選 擇赾 從Rx 緩 衝 區 中 讀 取 全 部 或 部 分 。config.rx — 包 含佳 被 用 來 操趀 縱 Rx 緩 衝 區 的 halUARTBufControl_t 結 構躬config.tx — 包 含佳 被 用 來 操趀 縱 Tx 緩 衝 區 的 halUARTBufControl_t 結 構躬typedef struct{uint16 bufferHead;55華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統uint16 bufferTail;uint16 maxBufSize;uint8 *pBuffer;}halUARTBufControl_t;bufferHead — 包 含佳 Rx/Tx 緩 衝 區 起 始 位 置 的 索 引 。bufferTail — 包 含佳 Rx/Tx 緩 衝 區 結 束俑 位 置 的 索 引 。maxBufSize — Rx/Tx 緩 衝 區 的 最 大 值靹 。 當 達跲 到 該 值靹 時頗 ,HAL_UART_RX_FULL或 HAL_UART_TX_FULL 將 被 作伿 為 一 個鞄 事 件 透 過跸 回 調 系倐 統 發 回 給 應 用 。*pBuffer — 指 向 包 含佳 Rx 資 料頔 的 緩 衝 區 的 指 標 。config.intEnable — 致 能 / 禁 止 中 斷 。 它 可 被 設 定 為 TRUE 或 FALSE。TRUE 值靹 將 致 能 中斷 ,FALSE 值靹 將 禁 止 中 斷 。callBackFunc — 當 有 一 個鞄 事 件 ( 例 如 Tx 完侖 成 ,Rx 就 緒犂 ...) 時頗 , 該 回 調 被 調 用 。void HalUARTCback (uint8 port, uint8 event);port — 指 定 具 有 事 件 的 串 列 埠 ( 查 看 4.9.11.1 小 節 )event — 引 起 回 調 的 事 件 ( 查 看 4.9.11.6 小 節 )4.9.2.4 返 回 值靹函 數 調 用 的 狀 態躊 ( 查 看 4.9.11.5 小 節 )。4.9.3 HalUARTClose ()4.9.3.1 描 述該 函 數 關詉 閉 一 個鞄 給 定 的 埠 。 這 允 許 設 定 被 重 配 置 並 重 新 打 開 埠 或 者 僅 僅 是 為 了 節 電踝 而 關詉閉 UART。4.9.3.2 函 數 原鞝 型void HalUARTClose (uint8 port);4.9.3.3 參 數 細 節port — 指 定 被 關詉 閉 的 串 列 埠 ( 查 看 4.9.11.1 小 節 )56華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.9.3.4 返 回 值靹無4.9.4 HalUARTRead ()4.9.4.1 描 述該 函 數 讀 取 UART 緩 衝 區 中 的 資 料頔 。 該 緩 衝 區 必 須 透 過跸 使 用 OSAL 的 osal_mem_alloc() 來被 應 用 分 配 。 該 緩 衝 區 以 後 可 透 過跸 使 用 OSAL 的 osal_mem_free() 來 被 應 用 釋 放 。 被 讀 取 的 位元 組 數 由 應 用 決俩 定 。 如 果 所 請 求俠 的 長 度 大 於 Rx 緩 衝 區 長 度 , 所 請 求俠 的 長 度 將 被 調 整超 到 Rx 緩衝 區 長 度 並 且 整超 個鞄 緩 衝 區 將 被 返 回 。 如 果 所 請 求俠 的 長 度 小 於 Rx 緩 衝 區 長 度 , 那倴 麼猕 僅 返 回 所請 求俠 長 度 。Rx 緩 衝 區 在 所 請 求俠 長 度 被 發 回 後 將 被 更俐 新 。 如 果 該 函 數 執 行 成 功 , 返 回 值靹 是 所讀 取 資 料頔 的 長 度 , 否佞 則 返 回 0。4.9.4.2 函 數 原鞝 型uint16 HalUARTRead (uint8 port,uint8 *buf,uint16 length);4.9.4.3 參 數 細 節port — 指 定 資 料頔 將 被 讀 取 的 串 列 埠 ( 查 看 4.9.11.1 小 節 )。buf — 指 向 資 料頔 緩 衝 區 的 指 標 。 該 緩 衝 區 必 須 透 過跸 使 用 OSAL 的 osal_mem_alloc() 來 被應 用 分 配 。 該 緩 衝 區 以 後 可 透 過跸 使 用 OSAL 的 osal_mem_free() 來 被 應 用 釋 放 。length — 所 請 求俠 的 長 度 。4.9.4.4 返 回 值靹返 回 所 讀 取 的 資 料頔 長 度 , 否佞 則 為 0。57華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.9.5 HalUARTWrite ()4.9.5.1 描 述該 函 數 寫 一 個鞄 指 定 長 度 的 緩 衝 區 到 一 個鞄 指 定 串 列 埠 。 該 函 數 將 檢 查 Tx 緩 衝 區 是 否佞 是 滿軈的 或 不 存 在 。 如 果 Tx 緩 衝 區 不 是 滿軈 的 , 資 料頔 將 被 載跩 入 到 緩 衝 區 , 然 後 被 發 送 給 Tx 資 料頔 暫 存器赛 。 如 果 Tx 緩 衝 區 是 滿軈 的 , 該 函 數 將 發 送 一 個鞄 回 調 HAL_UART_TX_FULL 並 返 回 0。 否佞 則 ,所 發 送 的 資 料頔 長 度 將 被 返 回 。4.9.5.2 函 數 原鞝 型uint16 HalUARTWrite (uint8 port,uint8 *buf,uint16 length);4.9.5.3 參 數 細 節port — 指 定 資 料頔 將 被 寫 入 的 串 列 埠 ( 查 看 4.9.11.1 小 節 )。buf — 指 向 資 料頔 緩 衝 區 的 指 標 。 該 緩 衝 區 必 須 透 過跸 使 用 OSAL 的 osal_mem_alloc() 來 被應 用 分 配 。 該 緩 衝 區 以 後 可 透 過跸 使 用 OSAL 的 osal_mem_free() 來 被 應 用 釋 放 。length — 資 料頔 長 度 。4.9.5.4 返 回 值靹返 回 被 成 功 寫 入 的 資 料頔 長 度 , 否佞 則 為 0。4.9.6 HalUARTIoctl ()4.9.6.1 描 述該 函 數 被 用 來 在 埠 上 執 行 操趀 作伿 , 例 如 GET/SET,FLUSH 操趀 作伿 等 等 。4.9.6.2 函 數 原鞝 型58華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統uint8 HalUARTIoctl (uint8 port,uint8 cmd,halUARTIoctl *ioctl);4.9.6.3 參 數 細 節port — 指 定 資 料頔 將 被 讀 取 的 串 列 埠 ( 查 看 4.9.11.1 小 節 )。cmd — 可 選 的 命 令命 令 描 述HAL_UART_IOCTL_SET SET 操趀 作伿 — 使 用 該 操趀 作伿 為 UART 設 定 新 設 定HAL_UART_IOCTL_GET GET 操趀 作伿 — 使 用 該 操趀 作伿 獲 得 UART 目 前 設 定HAL_UART_IOCTL_FLUSH FLUSH 操趀 作伿 — 使 用 該 操趀 作伿 重 置 UART 目 前 設 定ioctl — 與犕 命 令 有 關詉 的 聯 合 體 參 數typedef union{bool paramCTS;bool paramRTS;bool paramDSR;bool paramDTR;bool paramCD;bool paramRI;uint16 baudRate;bool flowControl;bool flushControl;} halUARTIoctl;signals — CTS,RTS,DSR,DTR,CD 和 RI 的 新 設 定 。baudRate — 所 給 定 埠 的 串 列 傳 輸 速 率 新 值靹 ( 查 看 4.9.11.2 小 節 )。flowControl — UART 流 量 控 制 , 可 被 設 定 為 TRUE 或 FALSE。TRUE 值靹 將 致 能 流 量控 制 ,FALSE 值靹 將 禁 止 流 量 控 制 。flushControl — UART 清 除 控 制 , 可 被 設 定 為 TRUE 或 FALSE。TRUE 值靹 將 停 止 操趀作伿 並 清 除 資 料頔 。59華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.9.6.4 返 回 值靹函 數 調 用 狀 態躊 ( 查 看 4.9.11.5 小 節 )。4.9.7 HalUARTPoll()4.9.7.1 描 述該 函 數 為 UART 類詑 比 查 詢 機趙 制 。4.9.7.2 函 數 原鞝 型void HalUARTPoll (void);4.9.7.3 參 數 細 節無4.9.7.4 返 回 值靹無4.9.8 Hal_UART_RxBuffLen()4.9.8.1 描 述該 函 數 返 回 目 前 在 Rx 緩 衝 區 中 的 位 元 組 數 量 。4.9.8.2 函 數 原鞝 型uint16 Hal_UART_RxBufLen (uint8 port);4.9.8.3 參 數 細 節60華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統port — 指 定 將 被 讀 取 長 度 的 序侤 列 埠 ( 查 看 4.9.11.1 小 節 )4.9.8.4 返 回 值靹Rx 緩 衝 區 容韕 量 的 16 位 元 值靹 。4.9.9 Hal_UART_TxBuffLen()4.9.9.1 描 述該 函 數 返 回 目 前 在 Tx 緩 衝 區 中 的 位 元 組 數 量 。4.9.9.2 函 數 原鞝 型uint16 Hal_UART_TxBufLen (uint8 port);4.9.9.3 參 數 細 節port — 指 定 將 被 讀 取 長 度 的 序侤 列 埠 ( 查 看 4.9.11.1 小 節 )。4.9.9.4 返 回 值靹Tx 緩 衝 區 容韕 量 的 16 位 元 值靹 。4.9.10 Hal_UART_FlowControlSet()4.9.10.1 描 述該 函 數 致 能 / 禁 止 UART 的 流 量 控 制 。4.9.10.2 函 數 原鞝 型void Hal_UART_SetFlowControl(uint8 port,uint8 status);61華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.9.10.3 參 數 細 節port — 指 定 將 被 設 定 流 量 控 制 的 序侤 列 埠 ( 查 看 4.9.11.1 小 節 )。status — TRUE 或 FALSE。 致 能 或 禁 止 流 量 控 制 。4.9.10.4 返 回 值靹無4.9.11 常 量4.9.11.1 UART 埠端牣 口 描 述HAL_UART_PORT_1 UART 埠 1HAL_UART_PORT_2 UART 埠 24.9.11.2 串 列 傳 輸 速 率參 數 描 述HAL_UART_BR_1200 串 列 傳 輸 速 率 為 1200bpsHAL_UART_BR_2400 串 列 傳 輸 速 率 為 2400bpsHAL_UART_BR_4800 串 列 傳 輸 速 率 為 4800bpsHAL_UART_BR_9600 串 列 傳 輸 速 率 為 9600bpsHAL_UART_BR_19200 串 列 傳 輸 速 率 為 19200bpsHAL_UART_BR_31250串 列 傳 輸 速 率 為312500bpsHAL_UART_BR_38400 串 列 傳 輸 速 率 為 38400bpsHAL_UART_BR_57600 串 列 傳 輸 速 率 為 57600bpsHAL_UART_BR_115200串 列 傳 輸 速 率 為115200bps4.9.11.3 校頣 驗參 數 描 述HAL_UART_NO_PARITY無 校頣 驗62華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統HAL_UART_ODD_PARITYHAL_UART_EVEN_PARITY偶 校頣 驗奇 校頣 驗4.9.11.4 停 止 位參 數 描 述HAL_UART_ONE_STOP_BIT 1 個鞄 停 止 位 元HAL_UART_TWO_STOP_BITS 2 個鞄 停 止 位 元4.9.11.5 狀 態躊參 數 描 述HAL_UART_SUCCESS成 功HAL_UART_MEM_FAIL 記 憶赲 體 分 配 失 敗HAL_UART_BAUDRATE_ERROR 串 列 傳 輸 速 率 錯 誤狃4.9.11.6 回 調 事 件事 件 描 述HAL_UART_RX_FULLRx 緩 衝 區 滿軈HAL_UART_RX_ABOUT_FULL Rx 緩 衝 區 達跲 到 maxRxBufSize - flowControlThresholdHAL_UART_RX_TIMEOUTRx 空 閒 時頗 間 逾跻 時頗HAL_UART_TX_FULLTx 緩 衝 區 滿軈4.10 128×64 點 陣 字 元 / 圖蹙 形侫 液 晶 顯 示 服 務種牞 功 能 。該 服 務 提 供 在 CC2430EB 所 配 套鞽 的 LCD(SO12864FPD-13ASBE(3S)) 上 進 行 顯 示 的 各4.10.1 HalLcdInit()4.10.1.1 描 述該 初 始 化 函 數 在 啟 動 時頗 只 被 調 用 一 次 。 該 函 數 必 須 在 任 何 其 他 顯 示 函 數 被 調 用 以 前 被 調用 。 該 函 數 致 能 128×64 點 陣 字 元 / 圖蹙 形侫 液 晶 按 所 需猀 和 可 選 的 參 數 被 初 始 化 。63華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.1.2 函 數 原鞝 型voidHalLcdInit(void);4.10.1.3 參 數 細 節無4.10.1.4 返 回 值靹無4.10.2 LCM_Refresh()4.10.2.1 描 述該 函 數 將 顯 示 緩 衝 區 中 的 資 料頔 刷 新 到 LCD。 注 意 : 使 用 者 的 繪訋 圖蹙 工 作伿 是 在 顯 示 緩 衝 區中 進 行 的 , 若 要 使 LCD 上 有 相 應 變 化 , 應 該 使 用 該 函 數 來 刷 新 。4.10.2.2 函 數 原鞝 型void GUI_LCM_Refresh(void);4.10.2.3 參 數 細 節無4.10.2.4 返 回 值靹無64華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.3 GUI_ClearScreen()4.10.3.1 描 述清 除 顯 示 緩 衝 區 。4.10.3.2 函 數 原鞝 型void GUI_ClearScreen(void);4.10.3.3 參 數 細 節無4.10.3.4 返 回 值靹無4.10.4 GUI_Point()4.10.4.1 描 述在 LCD 指 定 位 置 對蹹 應 的 顯 示 緩 衝 區 畫 點 。4.10.4.2 函 數 原鞝 型uint8 GUI_Point(uint8 x, uint8 y, uint8 color);4.10.4.3 參 數 細 節x — 指 定 點 橫趐 坐侁 標 (0~127)。y — 指 定 點 縱 坐侁 標 (0~63)。color — 對蹹 於 黑 白 色 或 藍 白 色 LCM, 為 0 時頗 圖蹙 元 點 滅 , 為 1 時頗 圖蹙 元 點 亮 。65華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.4.4 返 回 值靹範 圍 。返 回 值靹 為 1 時頗 表 示 操趀 作伿 成 功 , 為 0 時頗 表 示 操趀 作伿 失 敗 。 操趀 作伿 失 敗 原鞝 因 是 指 定 位 址佼 超 出 有 效頒4.10.5 GUI_SetColor()4.10.5.1 描 述設 定 顯 示 色 及 背 景 色 。 用 於 ASCII 字 元 、 漢軇 字 和 圖蹙 形侫 顯 示 。 注 意 : 要 顯 示 ASCII 字 元 、漢軇 字 和 圖蹙 形侫 之 前 , 必 須 先 調 用 該 函 數 。4.10.5.2 函 數 原鞝 型void GUI_SetColor(uint8 color1, uint8 color2);4.10.5.3 參 數 細 節color1 — 顯 示 色 。 對蹹 於 黑 白 色 或 藍 白 色 LCM, 為 0 時頗 圖蹙 元 點 滅 , 為 1 時頗 圖蹙 元 點 亮 。color2 — 背 景 色 。 對蹹 於 黑 白 色 或 藍 白 色 LCM, 為 0 時頗 圖蹙 元 點 滅 , 為 1 時頗 圖蹙 元 點 亮 。4.10.5.4 返 回 值靹無4.10.6 GUI_ExchangeColor()4.10.6.1 描 述交 換 前 景 色 ( 顯 示 色 ) 與犕 背 景 色 。 用 於 反 相 顯 示 。4.10.6.2 函 數 原鞝 型void GUI_ExchangeColor(void);66華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.6.3 參 數 細 節無4.10.6.4 返 回 值靹無4.10.7 GUI_LoadBitmap()4.10.7.1 描 述顯 示 單 色 圖蹙 形侫 資 料頔 ( 點 陣 圖蹙 )。4.10.7.2 函 數 原鞝 型void GUI_LoadBitmap(uint8 x, uint8 y, uint8 *dat, uint8 hno, uint8 lno);4.10.7.3 參 數 細 節x — 點 陣 圖蹙 左 頂 點 橫趐 坐侁 標 。y — 點 陣 圖蹙 左 頂 點 縱 坐侁 標 。dat — 指 向 點 陣 圖蹙 資 料頔 的 指 標 。( 點 陣 圖蹙 資 料頔 : 橫趐 向 取 模 , 位 元 組 順 序侤 。)hno — 點 陣 圖蹙 橫趐 向 點 數 。lno — 點 陣 圖蹙 縱 向 點 數 。4.10.7.4 返 回 值靹無4.10.8 GUI_LoadBitmapN()4.10.8.1 描 述顯 示 單 色 圖蹙 形侫 資 料頔 ( 點 陣 圖蹙 ), 反 色 顯 示 。67華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.8.2 函 數 原鞝 型void GUI_LoadBitmapN(uint8 x, uint8 y, uint8 *dat, uint8 hno, uint8 lno);4.10.8.3 參 數 細 節x — 點 陣 圖蹙 左 頂 點 橫趐 坐侁 標 。y — 點 陣 圖蹙 左 頂 點 縱 坐侁 標 。dat — 指 向 點 陣 圖蹙 資 料頔 的 指 標 。( 點 陣 圖蹙 資 料頔 : 橫趐 向 取 模 , 位 元 組 順 序侤 。)hno — 點 陣 圖蹙 橫趐 向 點 數 。lno — 點 陣 圖蹙 縱 向 點 數 。4.10.8.4 返 回 值靹無4.10.9 GUI_PutHZ()4.10.9.1 描 述顯 示 漢軇 字 。4.10.9.2 函 數 原鞝 型void GUI_PutHZ(uint8 x, uint8 y, uint8 *dat, uint8 hno, uint8 lno);4.10.9.3 參 數 細 節x — 漢軇 字 左 頂 點 橫趐 坐侁 標 。y — 漢軇 字 左 頂 點 縱 坐侁 標 。dat — 指 向 漢軇 字 資 料頔 的 指 標 。( 點 陣 圖蹙 資 料頔 : 橫趐 向 取 模 , 位 元 組 順 序侤 。)hno — 漢軇 字 橫趐 向 點 數 。lno — 漢軇 字 縱 向 點 數 。68華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.9.4 返 回 值靹無4.10.10 GUI_PutHZN()4.10.10.1 描 述顯 示 漢軇 字 , 反 色 顯 示 。4.10.10.2 函 數 原鞝 型void GUI_PutHZN(uint8 x, uint8 y, uint8 *dat, uint8 hno, uint8 lno);4.10.10.3 參 數 細 節x — 漢軇 字 左 頂 點 橫趐 坐侁 標 。y — 漢軇 字 左 頂 點 縱 坐侁 標 。dat — 指 向 漢軇 字 資 料頔 的 指 標 。( 點 陣 圖蹙 資 料頔 : 橫趐 向 取 模 , 位 元 組 順 序侤 。)hno — 漢軇 字 橫趐 向 點 數 。lno — 漢軇 字 縱 向 點 數 。4.10.10.4 返 回 值靹無4.10.11 GUI_PutChar5_7()4.10.11.1 描 述顯 示 5*7 字 體 ASCII 碼 , 顯 示 值靹 為 20H-7FH( 若 為 其 他 值靹 , 則 顯 示 “”)。4.10.11.2 函 數 原鞝 型uint8 GUI_PutChar5_7(uint8 x, uint8 y, uint8 ch);69華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統4.10.11.3 參 數 細 節x — 顯 示 起 點 橫趐 坐侁 標 。y — 顯 示 起 點 縱 坐侁 標 。ch — 要 顯 示 的 ASCII 碼 值靹 。4.10.11.4 返 回 值靹返 回 值靹 為 1 時頗 表 示 操趀 作伿 成 功 , 為 0 時頗 表 示 操趀 作伿 失 敗 。4.10.12 GUI_PutString5_7()4.10.12.1 描 述顯 示 5*7 字 體 ASCII 碼 字 串 ( 沒俯 有 自 動 換 行 功 能 )。4.10.12.2 函 數 原鞝 型void GUI_PutString5_7(uint8 x, uint8 y, char *str);4.10.12.3 參 數 細 節x — 顯 示 起 點 橫趐 坐侁 標 。y — 顯 示 起 點 縱 坐侁 標 。str — 要 顯 示 的 ASCII 碼 字 串 。4.10.12.4 返 回 值靹無4.10.13 GUI_PutNoString5_7()4.10.13.1 描 述顯 示 5*7 字 體 ASCII 碼 字 串 ( 沒俯 有 自 動 換 行 功 能 ), 若 顯 示 的 字 元 個鞄 數 大 於 指 定 個鞄 數 , 則70華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統只 顯 示 指 定 個鞄 數 的 字 元 。4.10.13.2 函 數 原鞝 型void GUI_PutNoString5_7(uint8 x, uint8 y, char *str, uint8 no);4.10.13.3 參 數 細 節x — 顯 示 起 點 橫趐 坐侁 標 。y — 顯 示 起 點 縱 坐侁 標 。str — 要 顯 示 的 ASCII 碼 字 串 。no — 最 大 顯 示 字 元 的 個鞄 數 。4.10.13.4 返 回 值靹無71華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統5. 硬 體 抽 象 層 (HAL) 的 移 植本 節 介 紹 如 何 進 行 硬 體 抽 象 層 (HAL) 的 移 植 以 適贅 應 開 發 者 的 目 標 板 。5.1 HAL 組 件 資 料頔 夾侅HAL 組 件 資 料頔 夾侅 包 含佳 HAL 驅 動 和 HAL 相 關詉 檔 , 它 位 於 “...\Components\hal”。HAL 組件 資 料頔 夾侅 中 包 含佳 3 個鞄 不 同 的 資 料頔 夾侅 :commonincludetarget5.1.1 common 資 料頔 夾侅common 資 料頔 夾侅 中 包 含佳 兩 個鞄 檔 案頥 :hal_assert.c 和 hal_driver.c。5.1.1.1 hal_assert.c該 檔 案頥 包 含佳 了 被 用 來 除 錯 和 / 或 校頣 驗 資 料頔 的 巨 集 。 這 些 巨 集 被 MAC( 高 / 低佂 級 ) 和 HAL72華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統驅 動 使 用 。HAL_ASSERT ()該 巨 集 ( 在 hal_assert.h 中 定 義 ) 在 除 錯 過跸 程 中 使 用 。 給 定 的 運跮 算牨 式 必 須 取 值靹 為 “true”否佞 則 將 出 現 一 個鞄 致 命 錯 誤狃 。 從 這 裡 , 調 用 堆 疊 特顠 性 的 除 錯 器赛 可 以 找俁 准鞔 問 題覹 出 現 在 哪鞯 里倷 。 為 了優 化 性 能 和 最 小 化 程 式 容韕 量 , 可 以 禁 止 該 特顠 性 。 要 禁 止 該 特顠 性 , 在 專 案頥 級 定 義 預踣 處 理 符 號HALNODEBUG。HAL_ASSERT_SIZE ()該 巨 集 把便 第 一 個鞄 參 數 的 容韕 量 和 第 二 個鞄 參 數 的 整超 型 值靹 作伿 比 較跨 。 如 果 它 們靽 不 匹 配 , 一 個鞄 負 數組 容韕 量 的 編 譯 時頗 錯 誤狃 將 出 現 ( 即佘 使 gnu 阻 止 負 數 組 容韕 量 )。 該 比 較跨 是 透 過跸 為 一 個鞄 陣 列 建 立 一個鞄 自 定 義 類詑 型 來 完侖 成 。 該 檢 查 不 建 立 變 數 也 不 消顆 耗 記 憶赲 體 。 建 立 的 類詑 型 只 被 用 來 檢 查 並 不 被其 他 任 何 程 式 使 用 。5.1.1.2 hal_driver.c該 檔 案頥 包 含佳 所 有 HAL 驅 動 的 初 始 化 和 事 件 處 理 行 程 。 在 該 檔 案頥 中 ,HAL 驅 動 的 相 關詉 事件 被 處 理 。 該 檔 還 包 含佳 驅 動 的 查 詢 機趙 制 , 例 如 計 時頗 器赛 和 UART 的 查 詢 機趙 制 。Hal_Init ()該 函 數 被 osalTaskAdd () 調 用 來 在 OSAL 中 註 冊 HAL 驅 動 作伿 為 一 個鞄 任 務 。 這 將 允 許 HAL驅 動 訊 息韵 和 事 件 被 OSAL 相 應 的 處 理 。 使 用 者 可 以 在 此 函 數 中 添 加 非 硬 體 相 關詉 的 初 始 化 ,當 HAL 驅 動 任 務 被 建 立 時頗 , 這 些 將 由 OSAL 初 始 化 。HalDriverInit ()該 函 數 被 main() 函 數 調 用 來 初 始 化 驅 動 的 硬 體 。 使 用 者 可 以 在 此 函 數 中 添 加 硬 體 相 關詉 的初 始 化 , 在 程 式 的 開 始 , 這 些 初 始 化 將 被 完侖 成 。Hal_ProcessEvent ()該 函 數 被 註 冊 到 OSAL 來 處 理 來 自 於 驅 動 的 ( 例 如 按 鍵 、LED 和 Power Saving 等 )HAL相 關詉 事 件 。 使 用 者 可 以 在 此 函 數 中 添 加 自 己 的 HAL 相 關詉 事 件 。 事 件 ID 必 須 是 唯 一 的 並 且必 須 在 hal_driver.h 檔 案頥 中 被 定 義 。 下 面 是 一 些 預踣 定 義 的 事 件 :HAL 事 件 描 述HAL_KEY_EVENT 該 事 件 由 HAL_KEY 引 發 來 處 理 按 鍵 查 詢 和 消顆 抖侺 。HAL_LED_BLINK_EVENT該 事 件 由 HAL_LED 引 發 來 處 理 閃 爍觰 LED。HAL_SLEEP_TIMER_EVENT 該 事 件 由 Power Saving 引 發 。Hal_ProcessPoll ()該 函 數 在 主 無 限 迴 圈 中 被 osal_start_system () 調 用 來 處 理 HAL 計 時頗 器赛 和 HAL UART 驅動 的 查 詢 事 件 。5.1.2 include 資 料頔 夾侅73華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統該 資 料頔 夾侅 包 含佳 了 HAL 驅 動 的 頭 檔 和 HAL 相 關詉 檔 案頥 。文 件 類詑 型hal_adc.h 驅 動hal_assert.h 除 錯hal_board.h 配 置hal_ccm.h 驅 動hal_defs.h 巨 集 和 資 料頔 類詑 型 定義hal_drivers.h 驅 動hal_key.h 驅 動hal_lcd.h 驅 動hal_led.h 驅 動hal_sleep.h 睡牔 眠 / 節 電踝hal_timer.h 驅 動hal_uart.h 驅 動5.1.3 target 資 料頔 夾侅該 資 料頔 夾侅 包 含佳 目 標 的 特顠 定 檔 , 可 包 含佳 只 和 特顠 定 目 標 相 關詉 的 驅 動 , 板 配 置 ,MCU 資 訊 和資 料頔 類詑 型 。例 如 , 下 面 是 該 資 料頔 夾侅 下 目 標 CC2430EB 資 料頔 夾侅 中 包 含佳 的 檔 :文 件 類詑 型hal_adc.chal_aes.chal_aes.hhal_board_cfg.hhal_ccm.chal_dma.chal_dma.hhal_key.chal_lcd.chal_led.chal_mac_cfg.hhal_mcu.hhal_sleep.chal_target.chal_target.hhal_timer.c驅 動適贅 合 特顠 定 目 標 的 硬 體 / 軟 體 AES 加 密驅 動 配 置 — 包 含佳 適贅 合 特顠 定 目 標 的 驅 動 的 硬 體 /GPIO 配 置驅 動適贅 合 特顠 定 目 標 的 DMA 驅 動驅 動驅 動驅 動適贅 合 特顠 定 目 標 的 MAC 配 置適贅 合 特顠 定 目 標 的 MCU 配 置適贅 合 特顠 定 目 標 的 睡牔 眠 / 節 電踝保 留驅 動74華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統hal_types.hhal_uart.c適贅 合 特顠 定 目 標 的 自 定 義 類詑 型 和 關詉 鍵 字驅 動5.2 HAL 驅 動 編 譯 選 項以 下 的 編 譯 選 項 允 許 使 用 者 編 譯 / 不 編 譯 某 些 HAL 驅 動 。 目 前 , 當 一 個鞄 驅 動 不 被 編 譯 ,但伽 它 的 API 函 數 仍 可 存 取 而 函 數 體 不 被 編 譯 和 執 行 。 當 一 個鞄 函 數 不 是 從 應 用 內 調 用 時頗 , 該函 數 根頨 本 不 被 鏈訿 結 到 該 應 用 。 也 就 是 說狄 , 它 將 不 佔 用 任 何 程 式 空 間 。符 號 定 義HAL_ADC ADC 驅 動HAL_LCD LCD 驅 動HAL_LED LED 驅 動HAL_KEY KEY 驅 動HAL_UART UART 驅 動5.2.1 預踣 設 編 譯 選 項預踣 設 地 ,HAL_ADC,HAL_LCD,HAL_LED,HAL_KEY 和 HAL_UART 被 HAL 驅 動設 定 為 TRUE。 這 些 在 “...\Components\hal\target\XXX\hal_board_cfg.h” 中 被 定 義 。XXX 是目 標 板 (CC2430DB 和 CC2430EB 等 )。5.2.2 編 譯 某 些 驅 動要 在 專 案頥 中 包 含佳 某 一 驅 動 :1. 打 開 一 個鞄 專 案頥2. 右 鍵 單 擊 專 案頥3. 選 擇赾 Options...4. 選 擇赾 C/C++ Compiler5. 選 擇赾 Preprocessor6. 找俁 到 Defined symbols:(one per line)7. 輸 入 HAL_XXX = TRUE,XXX 可 以 是 ADC,LCD,LED,KEY 或 UART。75華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統5.2.3 不 編 譯 某 些 驅 動要 在 專 案頥 中 不 包 含佳 某 一 驅 動 :1. 打 開 一 個鞄 專 案頥2. 右 鍵 單 擊 專 案頥3. 選 擇赾 Options...4. 選 擇赾 C/C++ Compiler5. 選 擇赾 Preprocessor6. 找俁 到 Defined symbols:(one per line)7. 輸 入 HAL_XXX = FALSE,XXX 可 以 是 ADC,LCD,LED,KEY 或 UART。76華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統5.3 HAL 驅 動 定 制儘赊 管牤 HAL 驅 動 是 比 較跨 靈 活 的 , 但伽 有 時頗 使 用 者 可 能 需猀 要 專 門 定 制 他 們靽 的 驅 動 來 完侖 成 某 些特顠 殊頻 的 需猀 要 。 使 用 者 可 以 在 已 存 在 的 驅 動 上 進 行 修鞈 改俌 , 也 可 以 自 己 添 加 驅 動 。5.3.1 修鞈 改俌 已 存 在 的 HAL 驅 動當 使 用 者 決俩 定 修鞈 改俌 驅 動 來 支 援 不 同 的 特顠 性 時頗 , 必 須 遵 守 以 下 規 則 :1. 所 有 位 於 “...\Components\hal\include” 中 的 標 頭 檔 案頥 保 持 不 變 。 這 些 原鞝 型 被 程 式 的不 同 部 分 調 用 , 它 們靽 不 應 該 被 修鞈 改俌 。2. 透 過跸 修鞈 改俌 “...\Components\hal\target\XXX” 中 (XXX 是 目 標 板 ) 的 相 應 驅 動 檔 中 的函 數 , 每俟 個鞄 驅 動 的 功 能 特顠 性 可 被 改俌 變 。 驅 動 文 件 是 hal_adc.c,hal_key.c,hal_lcd.c,hal_led.c,hal_timer.c 和 hal_uart.c。3. 驅 動 硬 體 配 置 可 透 過跸 修鞈 改俌 hal_board_cfg.h 檔 案頥 來 改俌 變 。77華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統5.3.2 為 一 個鞄 新 目 標 添 加 驅 動使 用 者 可 以 添 加 一 個鞄 新 的 驅 動 或 定 制 驅 動 來 支 援 他 們靽 的 硬 體 。1. 所 有 新 的 標 頭 檔 應 該 添 加 到 “...\Components\hal\include” 中 。2. 所 有 包 含佳 實蹴 際狽 函 數 的 檔 案頥 應 當 被 添 加 到 “...\Components\hal\target\XXX” 中 (XXX是 使 用 者 定 義 的 目 標 )。3. 如 果 GPIO 接 腳 衝 突 或 者 不 想 用 , 某 些 提 供 的 驅 動 可 透 過跸 使 用 編 譯 標 記 不 被 編 譯 。參 看 2.2.1. 節 。4. 透 過跸 檢 查 hal_board_cfg.h 檔 來 校頣 驗 GPIO 接 腳 被 正 確 配 置 以 避 免佊 衝 突 。5. 專 案頥 檔 必 須 被 相 應 地 修鞈 改俌 。 新 的 目 標 必 須 被 添 加 在 專 案頥 檔 的 HAL 資 料頔 夾侅 下 並 且 添 加入 所 有 的 新 檔 。6. 對蹹 於 包 含佳 了 多 個鞄 目 標 的 專 案頥 , 未 用 的 或 舊 的 目 標 必 須 被 排 除 以 避 免佊 衝 突 。 這 可 以 透過跸 右 鍵 單 擊 目 標 選 擇赾 Options... 然 後 選 中 “Exclude from build” 來 完侖 成 。78華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統5.4 中 斷 服 務 行 程本 節 展韙 示 了 使 用 者 在 哪鞯 里倷 修鞈 改俌 一 個鞄 已 存 在 的 中 斷 服 務 行 程 (ISR) 和 如 何 為 一 個鞄 中 斷 建立 一 個鞄 新 的 ISR。5.4.1 HAL ISR 功 能 巨 集“...\Components\hal\target\XXX\hal_mcu.h” (XXX 是 目 標 ) 檔 中 定 義 的HAL_ISR_FUNCTION(f,v) 巨 集 被 用 來 聲 明 ISR。 更俐 多 資 訊 請 查 看 hal_mcu.h 文 件 。使 用 該 巨 集 , 可 以 簡 單 地 做 如 下 聲 明 :HAL_ISR_FUNCTION (prototype, vector){/* 中 斷 服 務 */}prototype 是 ISR 的 名 稱牟 ,vector 是 中 斷 向 量 。5.4.2 修鞈 改俌 已 存 在 的 GPIO 中 斷 的 ISR要 修鞈 改俌 一 個鞄 已 存 在 的 GPIO 中 斷 的 ISR, 只 需猀 要 找俁 到 ISR 函 數 被 聲 明 的 位 置 並 修鞈 改俌 它 。79華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統舉 例 : 在 CC2430 專 案頥 中 修鞈 改俌 ISR例 如 : 在 一 個鞄 CC2430 專 案頥 中 修鞈 改俌 P1INT_VECTOR 中 斷 服 務 行 程 。P1INT_VECTOR 中 斷 服 務 行 程 在 hal_key.c 中 被 聲 明 :HAL_ISR_FUNCTION (halKeyPort1Isr, P1INT_VECTOR){halProcessKeyInterrupt ();}5.4.3 為 GPIO 中 斷 添 加 一 個鞄 新 的 ISR要 添 加 一 個鞄 新 的 ISR, 使 用 者 必 須 被 提 供 一 個鞄 包 含佳 目 標 微 控 制 器赛 資 訊 的 標 頭 檔 。 該 文 件提 供 將 被 用 到 的 有 關詉 中 斷 向 量 定 義 和 / 或 指 定 GPIO 介 面 的 位 元 組 位 址佼 的 資 訊 。 這 些 資 訊 通常 由 MCU 製犸 造 商 提 供 。 使 用 者 也 需猀 要 知 道跰 這 個鞄 ISR 的 原鞝 型 。舉 例 : 為 一 個鞄 CC2430 目 標 建 立 一 個鞄 ISR為 計 時頗 器赛 1(T1_VECTOR) 建 立 一 個鞄 ISR第 一 步俞 : 對蹹 於 CC2430, 中 斷 向 量 定 義 位 於 ioCC2430.h:/* ------------------------------------------------------------------------------------------------* Interrupt Vectors* ------------------------------------------------------------------------------------------------*/#define RFERR_VECTOR VECT(0,0x03)#define ADC_VECTOR VECT(1,0x0B)#define URX0_VECTOR VECT(2,0x13)#define URX1_VECTOR VECT(3,0x1B)#define ENC_VECTORVECT(4,0x23)#define ST_VECTOR VECT(5,0x2B)#define P2INT_VECTOR VECT(6,0x33)#define UTX0_VECTOR VECT(7,0x3B)#define DMA_VECTOR VECT(8,0x43)#define T1_VECTOR VECT(9,0x4B) ← Timer1 vector#define T2_VECTORVECT(10,0x53)#define T3_VECTORVECT(11,0x5B)80華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統#define T4_VECTOR#define P0INT_VECTOR#define UTX1_VECTOR#define P1INT_VECTOR#define RF_VECTOR#define WDT_VECTORVECT(12,0x63)VECT(13,0x6B)VECT(14,0x73)VECT(15,0x7B)VECT(16,0x83)VECT(17,0x8B)第 二 步俞 : 使 用 巨 集 , 定 義 ISR。HAL_ISR_FUNCTION (My_Timer1_ISR, T1_VECTOR){/* 計 時頗 器赛 1 中 斷 處 理 */}81華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統6. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 中 的 基 本 概 念 和使 用 者 可 配 置 參 數本 節 介 紹 Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 中 的 基 本 概 念 和 使 用 者 可 配 置 參 數 以 及 開 發 者 如 何 修鞈改俌 這 些 可 配 置 參 數 來 滿軈 足倦 應 用 需猀 求俠 。6.1 ZigBee一 個鞄 ZigBee 網牺 路跡 是 由 電踝 池 供 電踝 設 備 構躬 成 的 多 跳跢 網牺 路跡 。 這 意 味 著 在 一 個鞄 ZigBee 網牺 路跡 中 希侣望 交 換 資 料頔 的 兩 個鞄 設 備 可 能 需猀 要 依 靠败 其 他 中 間 設 備 才 能 成 功 完侖 成 資 料頔 交 換 。 因 為 網牺 路跡 的 這 個鞄合 作伿 性 質賭 , 恰 當 的 功 能 需猀 要 每俟 一 個鞄 設 備 (1) 執 行 具 體 的 網牺 路跡 功 能 (2) 配 置 某 些 參 數 為 特顠 定值靹 。 一 個鞄 設 備 所 執 行 的 網牺 路跡 功 能 決俩 定 了 該 設 備 在 網牺 路跡 中 的 角倞 色 , 這 被 稱牟 為 一 個鞄 設 備 類詑 型 。 需猀要 被 配 置 為 特顠 定 值靹 的 這 些 參 數 的 集 合 與犕 這 些 特顠 定 值靹 被 稱牟 為 一 個鞄 堆 疊 規 範 。6.1.1 設 備 類詑 型在 一 個鞄 ZigBee 網牺 路跡 中 有 3 種牞 邏 輯 設 備 類詑 型 —(1) 協 調 器赛 (2) 路跡 由 器赛 (3) 終 端牣 設 備 。一 個鞄 ZigBee 網牺 路跡 由 一 個鞄 協 調 器赛 節 點 和 多 個鞄 路跡 由 器赛 和 終 端牣 節 點 組 成 。 注 意 : 設 備 類詑 型 不 以 任何 方 式 限 制 運跮 行 在 一 個鞄 特顠 殊頻 設 備 上 的 應 用 類詑 型 。上 圖蹙 顯 示 了 一 個鞄 ZigBee 網牺 路跡 的 例 子 , 它 由 ZigBee 協 調 器赛 ( 黑 色 ), 路跡 由 器赛 ( 紅 色 ) 和終 端牣 設 備 ( 白 色 ) 構躬 成 。6.1.1.1 協 調 器赛協 調 器赛 是 “ 啟 動 ” 一 個鞄 ZigBee 網牺 路跡 的 設 備 。 它 是 網牺 路跡 中 的 第 一 個鞄 設 備 。 協 調 器赛 節 點 選擇赾 一 個鞄 頻 道跰 和 一 個鞄 網牺 路跡 識訤 別低 字 ( 也 稱牟 為 PAN ID) 然 後 啟 動 該 網牺 路跡 。82華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統協 調 器赛 設 備 也 可 被 隨 意 地 用 來 協 助佔 在 網牺 路跡 中 建 立 安 全 和 應 用 級 綁 定 。注 意 : 協 調 器赛 的 角倞 色 主 要 是 和 啟 動 和 配 置 網牺 路跡 有 關詉 。 一 旦 這 個鞄 工 作伿 完侖 成 , 協 調 器赛 的 行 為就 像踽 一 個鞄 路跡 由 器赛 節 點 ( 或 甚 至 消顆 失 )。 網牺 路跡 的 後 續 操趀 作伿 不 依 賴 於 協 調 器赛 的 存 在 , 這 是 因 為ZigBee 網牺 路跡 的 分 散 式 性 質賭 。6.1.1.2 路跡 由 器赛一 個鞄 路跡 由 器赛 執 行 如 下 功 能 (1) 允 許 其 他 設 備 加 入 網牺 路跡 (2) 多 跳跢 路跡 由 (3) 協 助佔 它 的 電踝池 供 電踝 子 終 端牣 設 備 通 信 。一 般 而 言借 , 路跡 由 器赛 被 期 望 一 直 處 於 啟 動 狀 態躊 因 此 必 須 由 電踝 源 供 電踝 。 被 稱牟 為 “ClusterTree” 的 一 種牞 特顠 殊頻 的 網牺 路跡 操趀 作伿 模 式 , 允 許 路跡 由 器赛 週 期 性 迴 圈 操趀 作伿 , 因 此 使 得 它 們靽 可 被 電踝 池 供電踝 。6.1.1.3 終 端牣 設 備一 個鞄 終 端牣 設 備 沒俯 有 維犁 護 網牺 路跡 基 礎 結 構躬 的 職 責 , 它 可 以 選 擇赾 睡牔 眠 和 喚 醒 。 因 此 , 它 可 以 作伿為 一 個鞄 電踝 池 供 電踝 節 電踝 。一 般 來 說狄 , 一 個鞄 終 端牣 設 備 的 記 憶赲 體 需猀 求俠 ( 特顠 別低 是 RAM 需猀 求俠 ) 是 比 較跨 少 的 。注 意 : 在 Z-<strong>Stack</strong> v1.4.1 中 , 設 備 類詑 型 通 常 在 編 譯 時頗 透 過跸 編 譯 選 項 (ZDO_COORDINATOR和 RTR_NWK) 被 決俩 定 。 所 有 的 應 用 舉 例 提 供 單 獨趸 的 專 案頥 檔 以 建 立 每俟 一 個鞄 設 備 類詑 型 。可 以 建 立 包 含佳 協 調 器赛 和 路跡 由 器赛 功 能 的 映 射韗 並 在 運跮 行 時頗 選 擇赾 設 備 類詑 型 。 看 SOFT_START編 譯 選 項 以 獲 得 更俐 多 細 節 。6.1.2 堆 疊 規 範需猀 要 被 配 置 為 特顠 殊頻 值靹 的 堆 疊 參 數 的 集 合 以 及 這 些 值靹 被 稱牟 為 堆 疊 規 範 。 堆 疊 規 範 包 含佳 的 這些 參 數 由 ZigBee 聯 盟 定 義 。值靹 )。網牺 路跡 中 的 所 有 設 備 必 須 符 合 相 同 的 堆 疊 規 範 ( 即佘 所 有 設 備 的 堆 疊 規 範 參 數 配 置 為 相 同為 了 提 高 互 用 性 ,ZigBee 聯 盟 已 經 為 ZigBee-2006 規 範 定 義 了 一 個鞄 堆 疊 規 範 。 所 有 符 合這 個鞄 堆 疊 規 範 的 設 備 可 與犕 網牺 路跡 中 來 自 其 他 廠 商 也 符 合 該 堆 疊 規 範 的 設 備 工 作伿 。如 果 應 用 開 發 者 選 擇赾 更俐 改俌 這 些 參 數 中 任 意 一 個鞄 的 設 定 , 這 些 設 備 將 不 再 能 實蹴 現 與犕 來 自 其他 廠 商 符 合 ZigBee 堆 疊 規 範 的 設 備 的 互 操趀 作伿 。 因 此 ,“ 封 閉 網牺 路跡 ” 的 開 發 者 可 以 選 擇赾 更俐 改俌堆 疊 規 範 變 數 的 設 定 。 這 些 堆 疊 規 範 被 稱牟 為 “ 專 用 網牺 路跡 ” 的 堆 疊 規 範 。一 個鞄 設 備 所 遵 循 的 堆 疊 規 範 的 識訤 別低 字 在 該 設 備 的 信 標 傳 送 中 被 提 供 。 這 使 得 一 個鞄 設 備 在83華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統加 入 一 個鞄 網牺 路跡 之 前 確 定 該 網牺 路跡 的 堆 疊 規 範 。“ 專 用 網牺 路跡 ” 的 堆 疊 規 範 的 ID 為 0 而ZigBee-2006 堆 疊 規 範 的 ID 為 1。 堆 疊 規 範 被 nwk_globals.h 檔 中 的 STACK_PROFILE_ID 參數 配 置 。6.2 編 址佼6.2.1 位 址佼 類詑 型ZigBee 設 備 有 兩 種牞 類詑 型 的 位 址佼 。 一 種牞 是 64 位 元 IEEE 位 址佼 ( 也 稱牟 為 MAC 位 址佼 或 擴 充位 址佼 )。 另 一 種牞 是 16 位 元 網牺 路跡 位 址佼 ( 也 稱牟 為 邏 輯 位 址佼 或 短 位 址佼 )。64 位 元 IEEE 位 址佼 是 全 球 唯 一 的 位 址佼 , 它 被 分 配 給 設 備 終 生 使 用 。 它 通 常 在 知 道跰 或 安 裝時頗 被 設 定 。 這 些 位 址佼 由 IEEE 提 供 並 分 配 。 有 關詉 如 何 獲 得 這 些 位 址佼 的 一 個鞄 區 塊 的 更俐 多 資 訊 可存 取 http://standards.ieee.org/regauth/oui/index.shtml。當 一 個鞄 設 備 加 入 網牺 路跡 後 , 它 被 分 配 一 個鞄 16 位 元 位 址佼 , 這 個鞄 位 址佼 供 該 設 備 在 網牺 路跡 中 使 用 。該 位 址佼 僅 在 該 網牺 路跡 中 唯 一 。 它 被 用 來 在 網牺 路跡 中 識訤 別低 設 備 和 發 送 資 訊 。6.2.2 網牺 路跡 位 址佼 分 配ZigBee 使 用 一 個鞄 分 散 式 的 編 址佼 方 案頥 來 分 配 網牺 路跡 位 址佼 。 該 方 案頥 確 保 了 所 有 被 分 配 的 網牺 路跡位 址佼 在 整超 個鞄 網牺 路跡 中 是 唯 一 的 。 這 是 必 要 的 , 所 以 在 一 個鞄 特顠 定 資 料頔 包 應 當 被 路跡 由 到 哪鞯 個鞄 設 備 這個鞄 問 題覹 上 不 存 在 歧 義 。 同 樣 , 編 址佼 演躽 算牨 法 的 分 散 式 特顠 定 確 保 了 一 個鞄 設 備 僅 和 它 的 父 設 備 通 信以 接 收 一 個鞄 全 網牺 路跡 範 圍 內 唯 一 的 位 址佼 。 位 址佼 分 配 無 需猀 全 網牺 路跡 範 圍 的 通 信 這 有 助佔 於 網牺 路跡 的 可 測量 性 。編 址佼 方 案頥 需猀 要 一 些 參 數 被 提 前 知 道跰 並 被 配 置 在 每俟 一 個鞄 加 入 網牺 路跡 的 路跡 由 器赛 。 它 們靽 是MAX_DEPTH, MAX_ROUTERS 和 MAX_CHILDREN 參 數 。 它 們靽 是 堆 疊 規 範 的 一 部 分 並且 ZigBee-2006 堆 疊 規 範 已 經 為 這 些 參 數 定 義 了 值靹 (MAX_DEPTH = 5, MAX_CHILDREN =20, MAX_ROUTERS = 6)。MAX_DEPTH 參 數 決俩 定 網牺 路跡 的 最 大 深 度 。 協 調 器赛 在 深 度 0, 它 的 子 節 點 在 深 度 1, 這 些子 節 點 的 子 節 點 在 深 度 2, 等 等 。 因 此 ,MAX_DEPTH 參 數 限 制 了 網牺 路跡 的 物 理 “ 長 度 ”。MAX_CHILDREN 參 數 決俩 定 一 路跡 由 器赛 ( 或 協 調 器赛 ) 可 擁赸 有 的 子 節 點 的 最 大 數 量 。MAX_ROUTERS 參 數 決俩 定 一 路跡 由 器赛 ( 或 協 調 器赛 ) 可 擁赸 有 的 具 有 路跡 由 能 力 的 子 節 點 的 最大 數 量 。 該 參 數 是 MAX_CHILDREN 參 數 的 一 個鞄 子 集 ,(MAX_CHILDREN –MAX_ROUTERS) 是 終 端牣 設 備 的 數 量 。如 果 開 發 者 希侣 望 改俌 變 這 些 值靹 , 他 們靽 需猀 要 遵 守 以 下 步俞 驟 :首靫 先 , 必 須 確 保 這 些 參 數 的 新 值靹 是 合 法 的 。 因 為 總 的 位 址佼 空 間 被 限 制 為 2 16 , 因 此 這 些參 數 可 被 設 定 為 多 大 是 有 限 制 的 。Cskip.xls 檔 ( 在 Z-<strong>Stack</strong> v1.4.1 的 Projects\zstack\Tools 資84華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統料頔 夾侅 ) 可 被 用 來 檢 查 這 些 值靹 的 合 法 性 。 為 這 些 參 數 輸 入 值靹 後 , 如 果 值靹 非 法 一 個鞄 錯 誤狃 資 訊 將 被給 出 。選 擇赾 合 法 值靹 後 , 開 發 者 需猀 要 確 保 不 使 用 標 準 堆 疊 規 範 而 是 設 定 為 “ 專 用 網牺 路跡 ” 堆 疊 規 範( 即佘 改俌 變 “nwk_globals.h” 文 件 中 的 STACK_PROFILE_ID 為 NETWORK_SPECIFIC)。 然後 “nwk_globals.h” 檔 中 的 MAX_DEPTH 參 數 可 被 設 定 為 恰 當 的 值靹 。另 外 ,“nwk_globals.c” 檔 中 陣 列 CskipChldrn 和 CskipRtrs 必 須 被 設 定 。 這 兩 個鞄 陣 列分 別低 包 含佳 MAX_CHILDREN 和 MAX_ROUTERS 的 值靹 , 陣 列 長 度 為 MAX_DEPTH+1, 陣 列首靫 元 素 的 下 標 為 0。6.2.3 在 Z-<strong>Stack</strong> 中 定 址佼為 了 發 送 資 料頔 給 ZigBee 網牺 路跡 中 的 一 個鞄 設 備 , 應 用 通 常 使 用 AF_DataRequest() 函 數 。 資料頔 包 被 發 送 到 的 目 的 設 備 的 位 址佼 類詑 型 為 afAddrType_t ( 在 “ZComDef.h” 檔 中 定 義 )。typedef struct{union{uint16 shortAddr;} addr;afAddrMode_t addrMode;byte endPoint;} afAddrType_t;注 意 : 除 了 網牺 路跡 位 址佼 , 位 址佼 模 式 參 數 也 需猀 要 被 具 體 規 定 。 目 的 位 址佼 模 式 可 採 用 下 列 值靹 中的 一 個鞄 (AF 位 址佼 模 式 在 “AF.h” 檔 中 定 義 )。typedef enum{afAddrNotPresent = AddrNotPresent,afAddr16Bit = Addr16Bit,afAddrGroup = AddrGroup,afAddrBroadcast = AddrBroadcast} afAddrMode_t;位 址佼 模 式 參 數 是 必 須 的 , 因 為 , 在 ZigBee 中 , 資 料頔 包 可 被 單 播 , 多 播 或 廣 播 。 一 個鞄 單播 資 料頔 包 被 發 送 給 一 個鞄 單 一 設 備 , 一 個鞄 多 播 資 料頔 包 被 發 送 給 一 組 設 備 , 一 個鞄 廣 播 資 料頔 包 一 般被 發 送 給 網牺 路跡 中 的 所 有 設 備 。 下 面 是 更俐 詳 細 的 解 釋 。6.2.3.1 單 播85華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統這 是 普 通 位 址佼 模 式 , 它 被 用 來 發 送 一 個鞄 資 料頔 包 給 一 個鞄 單 一 設 備 , 該 設 備 的 位 址佼 是 已 知的 。addrMode 被 設 定 為 Addr16Bit 並 且 目 的 網牺 路跡 位 址佼 被 攜 帶 在 資 料頔 包 中 。6.3.3.2 間 接 定 址佼應 用 並 不 知 道跰 資 料頔 包 的 最 終 目 的 地 。 模 式 被 設 定 為 AddrNotPresent 並 且 目 的 位 址佼 未 被 規定 。 目 的 位 址佼 從 駐贲 留 在 發 送 設 備 協 定 堆 疊 中 的 “ 綁 定 表 ” 中 被 查 詢 。 這 個鞄 特顠 性 稱牟 為 來 來 源 綁定 ( 看 後 續 章 節 有 關詉 綁 定 的 詳 細 資 訊 )。當 資 料頔 包 被 向 下 發 送 給 協 定 堆 疊 時頗 , 目 的 位 址佼 從 綁 定 表 中 被 查 詢 和 使 用 。 然 後 , 資 料頔 包將 被 認狀 為 是 一 個鞄 正 常 的 單 播 資 料頔 包 。 如 果 多 個鞄 目 的 設 備 被 發 現 , 資 料頔 包 的 一 個鞄 複 製犸 將 被 發 送給 它 們靽 中 的 每俟 一 個鞄 。在 ZigBee 的 之 前 版 本 (ZigBee04), 有 一 個鞄 選 項 , 可 以 在 協 調 器赛 上 儲 存 綁 定 表 。 在 那倴 種牞情 況 下 , 發 送 設 備 應 該 發 送 資 料頔 包 給 協 調 器赛 , 然 後 該 資 料頔 包 被 轉視 發 到 在 綁 定 表 中 被 找俁 到 的 最終 目 的 地 。 這 個鞄 可 選 的 特顠 性 被 稱牟 為 協 調 器赛 綁 定 。6.3.3.3 廣 播當 應 用 想 發 送 一 個鞄 資 料頔 包 給 網牺 路跡 中 的 所 有 設 備 時頗 , 該 位 址佼 模 式 被 使 用 。 位 址佼 模 式 被 設 定為 AddrBroadcast 並 且 目 的 位 址佼 可 被 設 定 為 下 列 廣 播 位 址佼 中 的 一 個鞄 :NWK_BROADCAST_SHORTADDR_DEVALL (0xFFFF)資 訊 將 被 發 送 給 網牺 路跡 中 的 所 有 設 備 ( 包 括 睡牔 眠 設 備 )。 對蹹 於 睡牔 眠 設 備 , 資 訊 被保 存 在 它 的 父 設 備 直 到 睡牔 眠 設 備 查 詢 它 或 資 訊 被 逾跻 時頗(NWK_INDIRECT_MSG_TIMEOUT 在 “f8wConfig.cfg” 檔 中 定 義 )。NWK_BROADCAST_SHORTADDR_DEVRXON (0xFFFD)資 訊 將 被 發 送 給 在 空 閒 時頗 接 收 器赛 處 於 打 開 狀 態躊 (RXONWHENIDLE) 的 全 部 設備 。 也 就 是 說狄 , 除 了 睡牔 眠 設 備 的 所 有 設 備 。NWK_BROADCAST_SHORTADDR_DEVZCZR (0xFFFC)資 訊 被 發 送 給 所 有 路跡 由 器赛 ( 包 括 協 調 器赛 )。6.3.3.4 組 定 址佼當 應 用 想 發 送 一 個鞄 資 料頔 包 給 一 組 設 備 時頗 , 該 位 址佼 模 式 被 使 用 。 位 址佼 模 式 被 設 定 為afAddrGroup 並 且 addr.shortAddr 被 設 定 為 組 識訤 別低 字 。在 使 用 該 特顠 性 以 前 , 組 必 須 在 網牺 路跡 中 被 定 義 ( 看 Z-<strong>Stack</strong> API 文 件 中 的 aps_AddGroup())。注 意 : 組 也 可 以 被 用 來 間 接 定 址佼 。 在 綁 定 表 中 找俁 到 的 目 的 位 址佼 既 可 以 是 一 個鞄 單 播 位 址佼 也可 以 是 一 個鞄 組 位 址佼 。 還 要 注 意 , 在 組 被 建 立 以 前 , 廣 播 位 址佼 是 組 位 址佼 的 一 個鞄 簡 單 地 特顠 例 。86華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統下 面 是 一 個鞄 設 備 的 範 例 程 式 , 將 該 設 備 加 入 到 識訤 別低 字 為 1 的 一 個鞄 組 :aps_Group_t group;group.ID = 0x0001;group.name[0] = 0;// 該 值靹 可 以 是 可 閱贠 讀 的 字 串aps_AddGroup( SAMPLEAPP_ENDPOINT, &group );6.2.4 重 要 設 備 位 址佼一 個鞄 應 用 可 能 想 知 道跰 它 的 設 備 以 及 該 設 備 的 父 設 備 的 位 址佼 。 使 用 下 面 的 函 數 ( 在 Z-<strong>Stack</strong>API 文 件 中 定 義 ) 來 獲 得 這 個鞄 設 備 的 位 址佼 : NLME_GetShortAddr() 返 回 這 個鞄 設 備 的 16 位 元 網牺 路跡 位 址佼 NLME_GetExtAddr() 返 回 這 個鞄 設 備 的 64 位 元 擴 充 位 址佼使 用 下 面 的 函 數 ( 在 Z-<strong>Stack</strong> API 文 件 中 定 義 ) 來 獲 得 這 個鞄 設 備 的 父 設 備 的 位 址佼 。 注 意 :在 這 些 函 數 中 的 術 語犾 “Coord” 並 不 是 指 ZigBee 協 調 器赛 , 是 指 設 備 的 父 設 備 (MACCoordinator): NLME_GetCoordShortAddr() 返 回 這 個鞄 設 備 的 父 設 備 的 16 位 元 短 位 址佼 NLME_GetCoordExtAddr() 返 回 這 個鞄 設 備 的 父 設 備 的 64 位 元 擴 充 位 址佼6.3 綁 定綁 定 是 控 制 資 訊 流 從 一 個鞄 應 用 到 另 一 個鞄 應 用 ( 或 多 個鞄 應 用 ) 的 一 種牞 機趙 制 。 在 ZigBee 2006發 行 版 中 , 綁 定 機趙 制 可 在 所 有 設 備 上 被 實蹴 施 並 被 稱牟 為 來 源 綁 定 。綁 定 允 許 一 個鞄 應 用 在 不 知 道跰 目 的 位 址佼 的 情 況 下 發 送 一 個鞄 資 料頔 包 ,APS 層 從 它 的 綁 定 表中 決俩 定 目 的 位 址佼 , 然 後 發 送 資 訊 到 目 的 應 用 ( 或 多 個鞄 應 用 ) 或 組 。注 意 : 與犕 ZigBee 1.0 發 行 版 在 協 調 器赛 中 儲 存 所 有 的 綁 定 條 目 不 同 , 現 在 , 所 有 的 綁 定 條目 被 儲 存 在 發 送 資 料頔 的 設 備 。6.3.1 建 立 一 個鞄 綁 定 表有 3 種牞 方 法 來 建 立 一 個鞄 綁 定 表 :ZigBee 設 備 物 件 綁 定 請 求俠一 個鞄 除 錯 工 具 可 告佨 訴 設 備 做 一 個鞄 綁 定 記 錄 。ZigBee 設 備 物 件 終 端牣 設 備 綁 定 請 求俠兩 個鞄 設 備 可 告佨 訴 協 調 器赛 它 們靽 想 建 立 一 個鞄 綁 定 表 記 錄 。 協 調 器赛 將 做 出 配 合 並 在 兩 個鞄 設備 中 建 立 綁 定 表 條 目 。設 備 應 用設 備 上 的 一 個鞄 應 用 可 建 立 或 管牤 理 一 個鞄 綁 定 表 。87華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統6.3.1.1 ZigBee 設 備 物 件 綁 定 請 求俠任 何 設 備 或 應 用 可 發 送 一 個鞄 ZDO 資 訊 給 另 一 個鞄 設 備 ( 透 過跸 空 間 ) 來 為 網牺 路跡 中 發 送 ZDO資 訊 的 那倴 個鞄 設 備 建 立 一 個鞄 綁 定 記 錄 。 這 被 稱牟 為 輔狕 助佔 綁 定 並 且 這 將 為 發 送 設 備 建 立 一 個鞄 綁 定 條目 。6.3.1.1.1 除 錯 應 用一 個鞄 應 用 可 透 過跸 調 用 帶 有 2 個鞄 申 請 ( 位 址佼 和 端牣 點 ) 以 及 在 綁 定 記 錄 中 所 期 望 的 cluster ID的 ZDP_BindReq()( 在 “ZDProfile.h” 文 件 中 定 義 ) 來 做 到 這 一 點 。 第 1 個鞄 參 數 (target dstAddr)是 綁 定 的 來 源 位 址佼 ( 在 那倴 裡 綁 定 記 錄 將 被 儲 存 ), 它 是 一 個鞄 短 位 址佼 。確 保 你佀 已 經 在 “ZDConfig.h” 文 件 中 致 能 了 該 特顠 性(ZDO_BIND_UNBIND_REQUEST)。你佀 可 以 使 用 帶 有 相 同 參 數 的 ZDP_UnbindReq() 來 移 除 綁 定 記 錄 。目 標 設 備 將 發 回 一 個鞄 ZigBee 設 備 物 件 綁 定 或 解 除 綁 定 響 應 資 訊 , 該 資 訊 被 ZDO 程 式 解析 並 透 過跸 調 用 帶 有 執 行 狀 態躊 返 回 的 ZDApp_BindRsp() 或 ZDApp_UnbindRsp() 來 通 知ZDApp.c。對蹹 於 綁 定 回 應 , 從 協 調 器赛 返 回 的 狀 態躊 將 是 ZDP_SUCCESS, ZDP_TABLE_FULL 或ZDP_NOT_SUPPORTED。對蹹 於 解 除 綁 定 回 應 , 從 協 調 器赛 返 回 的 狀 態躊 將 是 ZDP_SUCCESS, ZDP_NO_ENTRY 或ZDP_NOT_SUPPORTED。6.3.1.1.2 ZigBee 設 備 物 件 終 端牣 設 備 綁 定 請 求俠這 種牞 機趙 制 在 被 選 定 的 設 備 上 佐 用 一 個鞄 按 鈕 按 下 或 其 他 類詑 似 的 行 動 來 在 一 個鞄 逾跻 時頗 週 期 內進 行 綁 定 。 終 端牣 設 備 綁 定 請 求俠 資 訊 在 逾跻 時頗 週 期 內 將 在 協 調 器赛 被 收 集 並 且 一 個鞄 結 果 綁 定 表 條 目被 建 立 基 於 已 協 商 一 致 的 profile ID 和 cluster ID。 預踣 設 的 終 端牣 設 備 綁 定 逾跻 時頗(APS_DEFAULT_MAXBINDING_TIME) 為 16 秒 ( 在 “nwk_globals.h” 檔 中 定 義 ), 但伽 是 ,如 果 它 被 加 入 到 “f8wConfig.cfg” 檔 , 是 可 以 被 修鞈 改俌 的 。SW2)。“Z-<strong>Stack</strong> 使 用 指 南 ” 中 使 用 的 應 用 舉 例 是 終 端牣 設 備 綁 定 實蹴 施 的 實蹴 例 ( 在 每俟 一 個鞄 設 備 按你佀 將 會 發 現 , 所 有 的 應 用 舉 例 都 有 一 個鞄 處 理 鍵 盤 事 件 的 函 數 ( 例 如 , 在“TransmitApp.c” 文 件 中 的 TransmitApp_HandleKeys())。 這 個鞄 函 數 調 用ZDApp_SendEndDeviceBindReq()( 在 “ZDApp.c” 檔 中 ), 它 為 應 用 端牣 點 收 集 所 有 的 資 訊 。該 處 理 鍵 盤 事 件 的 函 數 還 調 用 ZDP_EndDeviceBindReq()( 在 “ZDProfile.c” 檔 中 ) 來 發 送 資訊 給 協 調 器赛 。 或 者 , 像踽 在 SampleLight 和 SampleSwitch 中 一 樣 ,ZDP_EndDeviceBindReq()88華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統被 直 接 調 用 僅 帶 有 有 關詉 燈趰 的 開 / 關詉 功 能 的 cluster ID。協 調 器赛 將 接 收 ( 使 用 在 “ZDProfile.c” 檔 中 的 ZDP_IncomingData()) 和 解 析 ( 使 用 在“ZDObject.c” 檔 中 的 ZDO_ProcessEndDeviceBindReq()) 資 訊 並 調 用ZDApp_EndDeviceBindReqCB()( 在 “ZDApp.c” 文 件 中 ),ZDApp_EndDeviceBindReqCB()調 用 ZDO_MatchEndDeviceBind()( 在 “ZDObject.c” 檔 中 ) 來 處 理 請 求俠 。當 協 調 器赛 收 到 2 條 匹 配 的 終 端牣 設 備 綁 定 請 求俠 , 它 將 開 始 在 請 求俠 設 備 上 建 立 來 源 綁 定 條 目的 過跸 程 。 協 調 器赛 遵 循 以 下 過跸 程 , 假 設 匹 配 在 ZDO 終 端牣 設 備 綁 定 請 求俠 中 被 找俁 到 :1. 發 送 一 個鞄 ZDO 解 除 綁 定 請 求俠 給 第 1 個鞄 設 備 。 終 端牣 設 備 綁 定 是 轉視 換 過跸 程 , 因 此 移除 綁 定 被 首靫 先 發 送 來 移 除 一 個鞄 存 在 的 綁 定 條 目 。2. 等 待 ZDO 解 除 綁 定 響 應 , 如 果 響 應 狀 態躊 是 ZDP_NO_ENTRY, 發 送 一 個鞄 ZDO 綁 定請 求俠 來 在 源 設 備 上 建 立 綁 定 條 目 。 如 果 回 應 狀 態躊 是 ZDP_SUCCESS, 為 第 1 個鞄 設 備轉視 換 到 cluster ID( 解 除 綁 定 被 撤躖 走倥 的 條 目 — 切 換 )。3. 等 待 ZDO 綁 定 響 應 。 當 接 收 到 後 , 為 第 1 個鞄 設 備 移 動 到 下 一 個鞄 cluster ID。4. 當 第 1 個鞄 設 備 被 完侖 成 後 , 第 2 個鞄 設 備 進 行 同 樣 的 過跸 程 。5. 當 第 2 個鞄 設 備 被 完侖 成 後 , 發 送 ZDO 終 端牣 設 備 綁 定 回 應 資 訊 給 第 1 個鞄 和 第 2 個鞄 設 備 。6.3.1.1.3 設 備 應 用 綁 定 管牤 理 器赛另 一 種牞 在 設 備 上 登 記 綁 定 條 目 的 方 法 是 應 用 為 它 自 己 管牤 理 綁 定 表 。 這 意 味 著 應 用 將 登 記和 撤躖 走倥 本 地 的 綁 定 表 條 目 透 過跸 調 用 下 面 的 綁 定 表 管牤 理 函 數 ( 參 見倝 Z-<strong>Stack</strong> API 文 件 中 綁 定 表管牤 理 部 分 )。 bindAddEntry() 增猹 加 條 目 到 綁 定 表 bindRemoveEntry() 從 綁 定 表 移 除 條 目 bindRemoveClusterIdFromList() 從 一 個鞄 存 在 的 綁 定 表 條 目 移 除 一 個鞄 cluster ID bindAddClusterIdToList() 添 加 一 個鞄 cluster ID 到 一 個鞄 存 在 的 綁 定 表 條 目 bindRemoveDev() 移 除 具 有 相 同 參 考 位 址佼 的 所 有 條 目 bindRemoveSrcDev() 移 除 具 有 相 同 參 考 源 位 址佼 的 所 有 條 目 bindUpdateAddr () 更俐 新 條 目 到 另 一 個鞄 位 址佼 bindFindExisting () 查 找俁 一 個鞄 綁 定 表 條 目 bindIsClusterIDinList() 在 一 個鞄 綁 定 條 目 查 找俁 一 個鞄 存 在 的 cluster ID bindNumBoundTo() 具 有 相 同 位 址佼 ( 來 源 或 目 的 ) 的 條 目 的 數 量 bindNumOfEntries() 表 條 目 數 量 bindCapacity() 被 允 許 的 最 大 條 目 BindWriteNV() 在 NV 中 更俐 新 表 .6.3.1.2 配 置 來 源 綁 定要 在 你佀 的 設 備 中 致 能 來 源 綁 定 , 包 含佳 REFLECTOR 編 譯 標 記 ( 在 “f8wConfig.cfg” 檔案頥 中 )。 在 “f8wConfig.cfg” 檔 中 還 要 注 意 2 個鞄 綁 定 配 置 項(NWK_MAX_BINDING_ENTRIES 和 MAX_BINDING_CLUSTER_IDS)。89華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統NWK_MAX_BINDING_ENTRIES 是 綁 定 表 中 條 目 的 最 大 數 量 ,MAX_BINDING_CLUSTER_IDS 是 每俟 一 個鞄 綁 定 條 目 中 cluster ID 的 最 大 數 量 。綁 定 表 被 保 存 在 靜 態躊 RAM( 不 分 配 ), 因 此 , 條 目 的 數 量 和 每俟 一 個鞄 條 目 的 cluster ID 的數 量 將 影 響 佔 用 RAM 的 容韕 量 。 每俟 一 個鞄 綁 定 表 條 目 是 8 位 元 組 加(MAX_BINDING_CLUSTER_IDS * 2 bytes)。 除 了 被 綁 定 表 佔 用 的 靜 態躊 RAM 的 總 量 , 綁定 配 置 選 項 也 影 響 位 址佼 管牤 理 器赛 中 條 目 的 數 量 。6.4 路跡 由6.4.1 概 述一 個鞄 網牺 狀 網牺 路跡 被 描 述 成 為 這 樣 一 個鞄 網牺 路跡 : 在 該 網牺 路跡 中 , 路跡 由 資 訊 被 分 散 提 供 , 包 括 許 多對蹹 等 設 備 為 彼 此 佐 益 而 協 作伿 處 理 路跡 由 。路跡 由 對蹹 應 用 層 而 言借 是 完侖 全 透 明 的 。 應 用 僅 簡 單 地 將 發 送 給 任 何 設 備 的 資 料頔 向 下 傳 遞狟 給 協定 堆 疊 , 然 後 協 定 堆 疊 負 責 尋 找俁 一 條 路跡 由 。 這 樣 一 來 , 應 用 並 不 知 道跰 它 實蹴 際狽 上 正 在 一 個鞄 多 跳跢網牺 路跡 中 運跮 行 。路跡 由 也 致 能 了 ZigBee 網牺 路跡 的 “ 自 我侷 癒 合 ” 特顠 性 。 如 果 某 個鞄 無 線 連 接 停 止 了 , 路跡 由 功 能將 自 動 查 找俁 一 個鞄 新 的 路跡 由 來 避 免佊 某 些 無 效頒 連 接 。 這 大 大 提 高 了 無 線 網牺 路跡 的 可 靠败 性 , 它 是ZigBee 的 重 要 特顠 性 之 一 。6.4.2 路跡 由 協 定ZigBee 使 用 了 一 種牞 基 於 AODV(“ 按 需猀 距 離覭 向 量 ”) 的 路跡 由 協 定 。 它 簡 化 了 在 感 測 器赛網牺 路跡 中 的 使 用 , 適贅 用 於 支 援 移 動 節 點 , 連 接 故 障狼 和 資 料頔 包 丟 失 的 環 境蹜 。當 一 個鞄 路跡 由 器赛 從 它 的 應 用 或 另 一 個鞄 設 備 收 到 一 個鞄 單 播 資 料頔 包 , 網牺 路跡 層 按 照 下 述 過跸 程 進 行轉視 發 。 如 果 目 的 地 是 一 個鞄 相 鄰贊 路跡 由 器赛 ( 包 括 它 的 子 設 備 ), 資 料頔 包 將 被 直 接 傳 送 給 目 的 設 備 。否佞 則 , 路跡 由 器赛 將 檢 查 其 路跡 由 表 中 與犕 資 料頔 包 路跡 由 目 的 地 相 對蹹 應 的 一 個鞄 條 目 , 如 果 有 一 個鞄 包 含佳 目的 位 址佼 的 路跡 由 表 條 目 存 在 , 資 料頔 包 將 被 轉視 發 給 儲 存 在 該 路跡 由 表 條 目 中 的 下 一 跳跢 位 址佼 。 如 果 沒俯有 一 個鞄 包 含佳 目 的 位 址佼 的 路跡 由 表 條 目 存 在 , 一 個鞄 路跡 由 發 現 將 被 啟 動 並 且 資 料頔 包 將 被 緩 存 直 到 該過跸 程 完侖 成 。ZigBee 終 端牣 設 備 不 執 行 任 何 路跡 由 功 能 。 一 個鞄 終 端牣 設 備 要 發 送 一 個鞄 資 料頔 包 給 任 何 設 備 ,僅 簡 單 地 將 資 料頔 包 發 送 給 它 的 父 設 備 , 它 的 父 設 備 將 代 表 它 執 行 路跡 由 。 同 樣 地 , 當 任 何 設 備要 發 送 一 個鞄 資 料頔 包 給 一 個鞄 終 端牣 設 備 並 且 啟 動 路跡 由 發 現 , 該 終 端牣 設 備 的 父 設 備 將 代 表 它 做 出 回應 。注 意 :ZigBee 位 址佼 分 配 方 案頥 使 得 基 於 它 的 位 址佼 來 獲 得 到 任 何 目 的 的 一 條 路跡 由 成 為 可能 。 在 Z-<strong>Stack</strong> 中 , 該 機趙 制 在 一 旦 正 常 的 路跡 由 過跸 程 不 能 被 啟 動 ( 一 般 情 況 下 , 由 於 缺 乏 路跡 由90華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統表 空 間 ) 時頗 作伿 為 一 種牞 自 動 退 卻 。此 外 , 在 Z-<strong>Stack</strong> 中 , 路跡 由 實蹴 施 已 經 優 化 了 路跡 由 表 的 儲 存 。 一 般 而 言借 , 每俟 一 個鞄 目 的 設 備需猀 要 一 個鞄 路跡 由 表 條 目 。 但伽 透 過跸 合 併 某 一 父 設 備 的 所 有 終 端牣 設 備 的 所 有 條 目 為 該 父 設 備 的 條目 , 這 樣 儲 存 被 優 化 了 而 喪 失 任 何 功 能 。ZigBee 路跡 由 器赛 , 包 括 協 調 器赛 , 執 行 以 下 路跡 由 功 能 (1) 路跡 由 發 現 和 選 擇赾 (2) 路跡 由 維犁 護(3) 路跡 由 過跸 期 。6.4.2.1 路跡 由 發 現 和 選 擇赾路跡 由 發 現 是 一 個鞄 過跸 程 , 網牺 路跡 設 備 由 此 協 作伿 去 尋 找俁 和 建 立 透 過跸 網牺 路跡 的 路跡 由 。 對蹹 於 某 個鞄 目 的設 備 , 一 個鞄 路跡 由 發 現 可 被 任 何 路跡 由 設 備 啟 動 並 總 是 被 執 行 。 路跡 由 發 現 機趙 制 在 源 和 目 的 設 備 之間 搜 索 所 有 可 能 的 路跡 徑韬 並 試 圖蹙 選 擇赾 最 好 的 可 能 路跡 由 。透 過跸 選 擇赾 最 小 成 本 路跡 由 來 執 行 路跡 由 選 擇赾 。 每俟 一 個鞄 節 點 不 斷 地 保 持 與犕 它 的 所 有 鄰贊 居 的 “ 鏈訿結 費 用 ” 的 追 蹤覒 。 鏈訿 結 費 用 通 常 是 接 收 信 號 強 度 的 一 個鞄 函 數 。 透 過跸 為 一 條 路跡 由 上 的 所 有 鏈訿 結加 入 鏈訿 結 費 用 , 該 路跡 由 的 “ 路跡 由 費 用 ” 被 得 出 。 路跡 由 演躽 算牨 法 嘗蹋 試 選 擇赾 具 有 最 少 “ 路跡 由 費 用 ”的 路跡 由 。透 過跸 使 用 請 求俠 / 回 應 資 料頔 包 來 發 現 路跡 由 。 一 個鞄 源 設 備 為 一 個鞄 目 的 位 址佼 請 求俠 一 條 路跡 由 , 透過跸 廣 播 一 個鞄 路跡 由 請 求俠 (RREQ) 資 料頔 包 給 它 的 鄰贊 居 。 當 一 個鞄 節 點 收 到 一 個鞄 RREQ 資 料頔 包 後 ,它 依 次 重 新 廣 播 該 RREQ 資 料頔 包 。 但伽 在 這 樣 做 以 前 , 它 更俐 新 該 資 料頔 包 中 的 費 用 欄 位 , 為 這個鞄 最 新 鏈訿 結 加 入 鏈訿 結 費 用 。 這 樣 一 來 , 該 RREQ 資 料頔 包 就 攜 帶 了 沿 著 它 所 經 過跸 的 所 有 鏈訿 結的 鏈訿 結 費 用 總 和 。 該 過跸 程 被 重 複 , 直 到 該 RREQ 資 料頔 包 到 達跲 目 的 設 備 。 該 RREQ 資 料頔 包 的多 個鞄 副 本 將 透 過跸 不 同 的 可 能 路跡 由 到 達跲 目 的 設 備 。 這 些 RREQ 資 料頔 包 中 的 每俟 一 個鞄 將 包 含佳 它 所透 過跸 路跡 由 的 總 路跡 由 費 用 。 目 的 設 備 選 擇赾 包 含佳 最 佳 路跡 由 的 RREQ 資 料頔 包 併 發 回 一 個鞄 路跡 由 回 應(RREP) 資 料頔 包 給 來 源 設 備 。RREP 資 料頔 包 被 沿 著 這 些 中 間 節 點 反 向 單 播 直 到 它 到 達跲 最 初 的 請 求俠 節 點 。 因 為 RREP 資料頔 包 被 沿 著 這 些 中 間 節 點 反 向 傳 回 源 設 備 , 這 些 中 間 節 點 升 級 它 們靽 的 路跡 由 表 來 指 示 到 達跲 目 的地 的 路跡 由 。一 旦 一 條 路跡 由 被 建 立 , 就 可 按 此 路跡 由 傳 送 資 料頔 包 。 當 一 個鞄 節 點 失 去 了 與犕 它 下 一 跳跢 節 點 的連 接 ( 當 發 送 資 料頔 包 時頗 , 它 接 收 不 到 MAC 確 認狀 ), 該 節 點 透 過跸 發 送 一 個鞄 RERR 資 料頔 包 給 它的 所 有 潛 在 接 收 該 RERR 資 料頔 包 的 節 點 來 作伿 廢 它 的 路跡 由 。 當 收 到 RREQ,RREP 或 RERR 資料頔 包 後 , 節 點 升 級 它 們靽 的 路跡 由 表 。6.4.2.2 路跡 由 維犁 護網牺 狀 網牺 路跡 提 供 了 路跡 由 維犁 護 和 自 我侷 癒 合 。 中 間 節 點 保 持 對蹹 沿 著 一 條 鏈訿 結 傳 輸 失 敗 的 追 蹤覒 。如 果 一 個鞄 鏈訿 結 被 確 定 為 是 損 壞觖 的 , 上 游 節 點 將 為 使 用 該 鏈訿 結 的 所 有 路跡 由 啟 動 路跡 由 維犁 修鞈 。 該 項工 作伿 在 下 一 次 一 個鞄 資 料頔 包 要 使 用 該 路跡 由 時頗 透 過跸 啟 動 路跡 由 重 發 現 來 完侖 成 。 如 果 路跡 由 重 發 現 不 能91華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統被 啟 動 或 由 於 某 些 原鞝 因 失 敗 , 一 個鞄 RERR 資 料頔 包 被 發 送 回 源 設 備 , 然 後 它 將 負 責 啟 動 一 個鞄新 的 路跡 由 發 現 。 無 論 哪鞯 種牞 方 式 路跡 由 將 得 到 自 動 重 建 。6.4.2.3 路跡 由 過跸 期路跡 由 表 保 持 著 已 建 立 路跡 由 的 條 目 。 在 一 段 時頗 間 內 , 如 果 沒俯 有 資 料頔 包 被 沿 著 一 條 路跡 由 發送 , 那倴 麼猕 該 路跡 由 將 被 標 記 為 過跸 期 。 過跸 期 的 路跡 由 不 被 佑 除 知 道跰 需猀 要 空 間 。 因 此 在 不 是 絕 對蹹 必 要的 情 況 下 , 路跡 由 不 被 佑 除 。 路跡 由 過跸 期 時頗 間 可 在 “f8wconfig.cfg” 檔 中 被 配 置 。 設 定ROUTE_EXPIRY_TIME 的 值靹 為 過跸 期 時頗 間 ( 以 秒 為 單 位 )。 設 定 該 值靹 為 0 來 關詉 閉 路跡 由 過跸 期 特顠性 。6.4.3 表 格頴 儲 存路跡 由 功 能 需猀 要 路跡 由 器赛 維犁 持 一 些 表 格頴 。6.4.3.1 路跡 由 表每俟 一 個鞄 ZigBee 路跡 由 器赛 , 包 括 ZigBee 協 調 器赛 , 包 含佳 一 個鞄 路跡 由 表 , 設 備 在 路跡 由 表 中 儲 存 參與犕 資 料頔 包 路跡 由 所 需猀 要 的 資 訊 。 每俟 一 個鞄 路跡 由 表 條 目 包 含佳 了 目 的 位 址佼 , 下 一 條 節 點 和 鏈訿 結 狀 態躊 。發 送 到 目 的 位 址佼 的 所 有 資 料頔 包 透 過跸 下 一 跳跢 節 點 被 路跡 由 。 此 外 , 為 了 回 收 那倴 些 已 不 再 被 使 用 的條 目 所 占 的 空 間 , 路跡 由 表 中 的 條 目 可 被 標 記 為 過跸 期 。路跡 由 表 容韕 量 指 示 一 個鞄 設 備 路跡 由 表 有 一 個鞄 空 閒 的 路跡 由 表 條 目 或 它 已 經 有 一 個鞄 對蹹 應 目 的 位址佼 的 路跡 由 表 條 目 。 路跡 由 表 的 大 小 在 “f8wconfig.cfg” 檔 中 被 配 置 。 設 定 MAX_RTG_ENTRIES的 值靹 為 條 目 數 量 ( 最 小 為 4)。6.4.3.2 路跡 由 發 現 表路跡 由 器赛 設 備 參 與犕 路跡 由 發 現 , 維犁 持 一 個鞄 路跡 由 發 現 表 。 在 一 個鞄 路跡 由 發 現 進 行 的 同 時頗 該 表 被 用來 儲 存 臨 時頗 資 訊 。 這 些 條 目 只 維犁 持 路跡 由 發 現 操趀 作伿 這 麼猕 長 時頗 間 。 一 旦 一 個鞄 條 目 過跸 期 , 它 可 被 另一 個鞄 路跡 由 發 現 操趀 作伿 使 用 。 因 此 , 這 些 條 目 的 數 量 決俩 定 了 網牺 路跡 中 可 被 同 時頗 執 行 的 路跡 由 發 現 的 最大 數 量 。 該 值靹 透 過跸 設 定 “f8wconfig.cfg” 檔 中 的 MAX_RREQ_ENTRIES 來 配 置 。6.4.4 路跡 由 設 定 快侳 速 參 考設 定 路跡 由 表 大 小設 定 路跡 由 過跸 期 時頗 間設 定 MAX_RTG_ENTRIES 的 值靹注 意 : 該 值靹 必 須 ≥4( 在 “f8wConfig.cfg” 文 件 中 )設 定 ROUTE_EXPIRY_TIME 的 值靹 為 過跸 期 時頗 間 ( 以 秒 為 單 位 )。 設 定該 值靹 為 0 來 關詉 閉 路跡 由 過跸 期 特顠 性 ( 在 “f8wConfig.cfg” 檔 案頥 中 )。92華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統設 定 路跡 由 發 現 表 大 小設 定 MAX_RREQ_ENTRIES 的 值靹 來 決俩 定 網牺 路跡 中 可 被 同 時頗 執 行 的 路跡由 發 現 的 最 大 數 量 ( 在 “f8wConfig.cfg” 檔 案頥 中 )。6.5 ZDO 資 訊 請 求俠ZDO 模 組 提 供 了 發 送 ZDO 服 務 發 現 請 求俠 資 訊 和 接 收 ZDO 服 務 發 現 回 應 資 訊 的 功 能 。下 面 的 流 程 圖蹙 說狄 明 了 為 一 個鞄 應 用 發 送 一 個鞄 IEEE 位 址佼 請 求俠 和 接 收 IEEE 位 址佼 回 應 所 需猀 進 行 的函 數 調 用 。圖蹙 1:ZDO IEEE 位 址佼 請 求俠 和 回 應在 下 面 的 例 子 中 , 一 個鞄 應 用 想 知 道跰 什 麼猕 時頗 候鞅 有 新 設 備 加 入 該 網牺 路跡 。 該 應 用 想 接 收 所 有ZDO 設 備 通 告佨 (Device_annce) 資 訊 。93華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統圖蹙 2:ZDO 設 備 通 告佨 發 送 給 一 個鞄 應 用6.6 便 攜 設 備在 ZigBee 2006 中 , 終 端牣 設 備 是 自 動 便 攜 的 。 也 就 是 說狄 , 當 一 個鞄 終 端牣 設 備 檢 測 到 它 的 父設 備 沒俯 有 回 應 ( 不 在 範 圍 內 或 不 可 用 ) 它 將 嘗蹋 試 重 新 加 入 網牺 路跡 ( 加 入 一 個鞄 新 的 父 設 備 )。 這不 需猀 要 設 定 或 編 譯 標 記 。終 端牣 設 備 可 以 透 過跸 輪贁 詢 (MAC 資 料頔 請 求俠 ) 失 敗 和 / 或 資 料頔 資 訊 失 敗 來 檢 測 到 一 個鞄 父 設 備沒俯 有 回 應 。 失 敗 的 敏 感 度 ( 連 續 失 敗 的 數 量 ) 被 MAX_POLL_FAILURE_RETRIES 控 制 , 它可 在 “f8wConfig.cfg” 檔 中 被 修鞈 改俌 ( 數 值靹 越 大 , 敏 感 度 越 小 並 且 重 新 加 入 網牺 路跡 所 需猀 的 時頗 間 越長 )。當 網牺 路跡 層 檢 測 到 它 的 父 設 備 沒俯 有 回 應 , 它 將 調 用 ZDO_SyncIndicationCB(), 該 函 數 將 啟動 一 個鞄 “ 重 新 加 入 ”。 重 新 加 入 過跸 程 將 首靫 先 獨趸 立 掃 描 一 個鞄 已 經 存 在 的 父 設 備 , 然 後 掃 描 一 個鞄潛 在 父 設 備 並 且 重 新 加 入 ( 重 新 加 入 網牺 路跡 命 令 ) 該 潛 在 父 設 備 所 在 的 網牺 路跡 。在 一 個鞄 安 全 網牺 路跡 中 , 假 設 一 個鞄 設 備 已 經 獲 得 了 一 個鞄 密 鑰 並 且 一 個鞄 新 的 密 鑰 將 不 能 被 發 行到 該 設 備 上 。6.7 端牣 到 端牣 確 認狀對蹹 於 一 個鞄 非 廣 播 資 訊 , 有 2 個鞄 基 本 的 資 訊 重 發 類詑 型 : 端牣 到 端牣 確 認狀 (APS ACK) 和 單 跳跢確 認狀 (MAC ACK)。 在 網牺 路跡 中 , 單 跳跢 確 認狀 (MAC ACK) 總 是 被 預踣 設 打 開 , 這 足倦 以 保 證訥 高 度的 可 靠败 性 。 要 提 供 更俐 高 的 可 靠败 性 , 致 能 發 送 設 備 可 以 獲 得 對蹹 已 發 送 到 它 的 目 的 地 的 一 個鞄 資 料頔包 的 證訥 實蹴 , 這 可 以 使 用 端牣 到 端牣 確 認狀 (APS ACK)。端牣 到 端牣 確 認狀 (APS ACK) 在 APS 層 被 完侖 成 , 它 是 一 個鞄 從 目 的 設 備 到 源 設 備 的 確 認狀 系倐 統 。發 送 設 備 將 保 持 資 訊 直 到 目 的 設 備 發 送 一 個鞄 端牣 到 端牣 確 認狀 (APS ACK) 資 訊 表 明 它 已 經 收 到了 資 料頔 。 在 使 用 帶 有 options 欄 位 的 AF_DataRequest() 函 數 調 用 來 發 送 每俟 一 個鞄 資 訊 時頗 , 該 特顠性 可 以 被 致 能 / 禁 止 。options 欄 位 是 一 個鞄 選 項 點 陣 圖蹙 , 將 該 欄 位 與犕 AF_ACK_REQUEST 進 行“ 或 ” 操趀 作伿 來 致 能 你佀 所 發 送 資 訊 的 端牣 到 端牣 確 認狀 (APS ACK)。 資 訊 重 傳 次 數 ( 如 果 未 收 到APS ACK 資 訊 ) 和 重 傳 溢 出 時頗 間 可 在 “f8wConfig.cfg” 檔 中 被 配 置 。APSC_MAX_FRAME_RETRIES 是 APS 層 在 不 能 接 收 到 一 個鞄 對蹹 該 資 訊 的 APS ACK 的 情 況下 , 發 送 該 資 訊 的 最 大 次 數 。APSC_ACK_WAIT_DURATION_POLLED 是 重 傳 之 間 的 時頗 間 。6.8 其 他6.8.1 配 置 頻 道跰每俟 一 個鞄 設 備 必 須 有 一 個鞄 DEFAULT_CHANLIST( 在 “f8wConfig.cfg” 檔 中 ) 來 控 制 頻 道跰94華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統選 擇赾 。 對蹹 於 一 個鞄 ZigBee 協 調 器赛 , 該 列 表 被 用 來 掃 描 一 個鞄 具 有 最 低佂 雜覮 訊 的 頻 道跰 。 對蹹 於 ZigBee路跡 由 器赛 和 終 端牣 設 備 , 該 列 表 將 被 用 來 掃 描 將 要 加 入 的 已 存 在 的 網牺 路跡 。6.8.2 配 置 PAN ID 和 網牺 路跡 , 並 加 入這 是 一 個鞄 可 選 的 配 置 專 案頥 , 用 來 控 制 一 個鞄 ZigBee 路跡 由 器赛 或 終 端牣 設 備 將 加 入 哪鞯 一 個鞄 網牺 路跡 。ZDO_CONFIG_PAN_ID 參 數 ( 在 “f8wConfig.cfg” 檔 中 ) 可 被 設 定 一 個鞄 值靹 ( 在 0x0000 到0x3FFF)。 一 個鞄 協 調 器赛 將 使 用 該 值靹 來 作伿 為 它 所 啟 動 的 這 個鞄 網牺 路跡 的 PAN ID。 一 個鞄 路跡 由 器赛 或 終端牣 設 備 只 能 加 入 有 該 PAN ID 標 識訤 的 這 個鞄 網牺 路跡 。 要 關詉 閉 該 特顠 性 , 設 定 ZDO_CONFIG_PAN_ID參 數 的 值靹 為 0xFFFF。對蹹 於 加 入 網牺 路跡 過跸 程 的 更俐 深 入 控 制 , ZDO_NetworkDiscoveryConfirmCB() 函 數 ( 在“ZDApp.c” 檔 中 ) 應 當 被 修鞈 改俌 。6.8.3 最 大 有 效頒 載跩 荷 容韕 量一 個鞄 應 用 的 最 大 有 效頒 載跩 荷 容韕 量 和 許 多 因 素 有 關詉 。MAC 層 提 供 了 一 個鞄 有 效頒 載跩 荷 長 度 為 102的 常 量 。NWK 層 需猀 要 一 個鞄 固 定 首靫 部 尺 寸 , 一 種牞 是 帶 有 安 全 機趙 制 的 , 一 種牞 是 不 帶 安 全 機趙 制 的 。APS 層 需猀 要 一 個鞄 可 變 的 首靫 部 , 首靫 部 尺 寸 根頨 據赼 各 種牞 設 定 , 其 中 包 括 ZigBee 協 定 版 本 , 使 用 KVP( 在 ZigBee 2006 中 不 支 援 ),APS 幀 控 制 設 定 等 等 。 最 終 , 使 用 者 不 必 使 用 上 述 因 素 計 算牨最 大 有 效頒 載跩 荷 容韕 量 。AF 模 組 提 供 了 一 個鞄 API 來 使 用 者 查 詢 最 大 有 效頒 載跩 荷 容韕 量 , 或 最 大 傳 輸單 元 (MTU)。 使 用 者 可 以 調 用 “afDataReqMTU” 函 數 ( 看 “af.h” 文 件 ), 它 將 返 回 MTU或 最 大 有 效頒 載跩 荷 容韕 量 。typedef struct{uint8kvp;APSDE_DataReqMTU_t aps;} afDataReqMTU_t;uint8 afDataReqMTU( afDataReqMTU_t* fields )目 前 , 在 “afDataReqMTU_t” 結 構躬 中 僅 有 “kvp” 這 個鞄 欄 位 可 以 被 設 定 , 它 表 示 KVP是 否佞 被 使 用 。“aps” 欄 位 保 留 為 將 來 使 用 。6.8.4 離覭 開 網牺 路跡ZDO管牤 理 實蹴 現 了 函 數 “ ZDO_ProcessMgmtLeaveReq ” , 它 提 供 對蹹“NLME-LEAVE.request” 原鞝 語犾 的 存 取 。“NLME-LEAVE.request” 允 許 一 個鞄 設 備 去 移 除 它 自己 或 一 個鞄 子 設 備 。“ZDO_ProcessMgmtLeaveReq” 移 除 設 備 基 於 所 提 供 的 IEEE 位 址佼 。 如 果一 個鞄 設 備 移 除 它 本 身倧 , 它 將 等 待 大 約 5 秒 然 後 重 置 。 一 旦 該 設 備 重 置 , 它 將 回 到 空 閒 狀 態躊 。95華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統它 將 不 會 試 圖蹙 聯 繫訇 或 重 新 加 入 。 如 果 一 個鞄 設 備 移 除 了 一 個鞄 子 設 備 , 它 將 從 本 地 “ 聯 繫訇 表 ” 中移 除 該 子 設 備 。NWK 位 址佼 將 只 能 在 以 下 情 況 被 再 次 使 用 , 即佘 一 個鞄 子 設 備 是 一 個鞄 ZigBee 終端牣 設 備 , 若 是 一 個鞄 ZigBee 路跡 由 器赛 ,NWK 位 址佼 將 不 能 被 再 次 使 用 。如 果 一 個鞄 子 設 備 的 父 設 離覭 開 網牺 路跡 , 該 子 設 備 將 繼 續 留 在 網牺 路跡 。儘赊 管牤 “NLME-LEAVE.request” 提 供 了 很 多 可 選 參 數 , 但伽 ZigBee 2006( 就 像踽 TI 目 前 實蹴施 版 本 一 樣 ) 限 制 這 些 參 數 的 使 用 。 目 前 , 在 “ZDO_ProcessMgmtLeaveReq” 中 使 用 的 可選 參 數 (“RemoveChildren”, “Rejoin”, 和 “Silent”) 應 當 被 設 定 為 預踣 設 值靹 。 如 果 這 些值靹 被 改俌 變 , 將 會 產 生 非 預踣 期 的 結 果 。6.8.5 描 述 符在 一 個鞄 ZigBee 網牺 路跡 中 的 所 有 設 備 都 有 描 述 符 用 來 描 述 設 備 類詑 型 和 它 的 應 用 。 這 些 資 訊可 以 被 網牺 路跡 中 其 他 設 備 發 現 。配 置 專 案頥 在 “ZDConfig.c” 和 “ZDConfig.h” 檔 中 定 義 和 設 定 。 這 2 個鞄 檔 也 提 供 節 點 ,電踝 源 描 述 符 和 預踣 設 的 使 用 者 描 述 符 。 一 定 要 改俌 變 這 些 描 述 符 來 描 述 你佀 的 設 備 。6.8.6 非 易 失 性 記 憶赲 體 選 項6.8.6.1 網牺 路跡 層 非 易 失 性 記 憶赲 體一 個鞄 ZigBee 設 備 有 大 量 的 狀 態躊 資 訊 需猀 要 被 儲 存 在 非 易 失 性 記 憶赲 體 , 這 樣 在 意 外 重 置 或掉 電踝 的 情 況 下 它 可 被 恢 復 。 否佞 則 , 它 將 不 能 重 新 加 入 網牺 路跡 或 提 供 有 效頒 功 能 。包 含佳 NV_RESTORE 編 譯 選 項 來 致 能 該 特顠 性 。 注 意 : 在 一 個鞄 實蹴 際狽 的 ZigBee 網牺 路跡 中 , 該特顠 性 必 須 總 是 被 致 能 。 僅 在 開 發 階 段 可 以 嘗蹋 試 關詉 閉 該 特顠 性 。ZDO 層 負 責 保 存 和 恢 復 網牺 路跡 層 的 重 要 資 訊 。 這 包 括 網牺 路跡 資 訊 資 料頔 庫韧 (NIB— 需猀 要 用 來 管牤理 設 備 的 網牺 路跡 層 的 屬 性 ), 子 設 備 和 父 設 備 列 表 和 包 含佳 應 用 綁 定 的 表 。 另 外 , 如 果 安 全 功 能被 使 用 , 一 些 資 訊 ( 例 如 幀 計 數 ) 將 被 儲 存 。當 一 個鞄 設 備 重 置 啟 動 後 , 這 些 資 訊 被 恢 復 給 該 設 備 。 在 ZDApp_Init , 一 個鞄NLME_RestoreFromNV() 調 用 將 命 令 網牺 路跡 層 從 保 存 在 NV 中 的 值靹 來 恢 復 它 的 網牺 路跡 狀 態躊 。 該 函數 調 用 同 樣 會 初 始 化 網牺 路跡 層 所 需猀 要 的 NV 空 間 ( 如 果 空 間 未 被 建 立 )。6.8.6.2 應 用 級 非 易 失 性 記 憶赲 體NV 也 可 被 用 來 保 存 應 用 的 特顠 定 資 訊 , 使 用 者 描 述 符 是 一 個鞄 很 好 的 例 子 。 使 用 者 描 述 符的 NV 項 目 ID 是 ZDO_NV_USERDESC( 在 “ZComDef.h” 檔 中 定 義 )。96華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統在 ZDApp_Init() 中 ,osal_nv_item_init() 被 調 用 來 初 始 化 使 用 者 描 述 符 所 需猀 要 的 NV 空間 。 如 果 這 是 該 函 數 為 這 個鞄 NV 項 第 1 次 被 調 用 , 初 始 化 函 數 將 為 使 用 者 描 述 符 保 留 空 間 被給 ZDO_DefaultUserDescriptor 設 定 預踣 設 值靹 。那倴 麼猕 當 存 在 在 NV 中 的 使 用 者 描 述 符 被 需猀 要 時頗 , 使 用 ZDO_ProcessUserDescReq() ( 在“ZDObject.c” 檔 中 ) 調 用 osal_nv_read() 從 NV 中 獲 得 使 用 者 描 述 符 。要 更俐 新 NV 中 的 使 用 者 描 述 符 , 使 用 ZDO_ProcessUserDescSet()( 在 “ZDObject.c” 檔中 ) 調 用 osal_nv_write() 來 更俐 新 NV 中 的 使 用 者 描 述 符 。注 意 : 每俟 一 個鞄 NV 項 目 號 都 是 唯 一 的 , 如 果 你佀 的 應 用 要 建 立 一 個鞄 它 自 己 的 NV 項 目 , 必須 從 應 用 值靹 範 圍 (0x0201~0x0FFF) 中 選 擇赾 一 個鞄 ID。6.9 安 全6.9.1 概 述ZigBee 安 全 是 在 AES 分 組 密 碼 和 作伿 為 底 層 安 全 原鞝 語犾 操趀 作伿 的 CCM 模 式 之 上 建 立 的 。AES/CCM 安 全 演躽 算牨 法 是 被 ZigBee 聯 盟 之 外 的 外 部 研 究倏 者 開 發 的 , 它 也 被 廣 泛 用 在 其 他 通信 協 定 中 。ZigBee 提 供 了 下 述 安 全 特顠 性 :基 礎 設 施 安 全網牺 路跡 存 取 控 制應 用 資 料頔 安 全6.9.2 配 置為 了 有 一 個鞄 安 全 網牺 路跡 , 首靫 先 所 有 的 設 備 映 射韗 必 須 被 建 立 在 預踣 處 理 標 記 SECURE 被 設 定為 1 的 情 況 下 。 這 可 在 “f8wConfig.cfg” 文 件 中 找俁 到 。接 下 來 , 一 個鞄 預踣 設 密 鑰 必 須 被 選 擇赾 。 這 可 以 透 過跸 DEFAULT_KEY( 在 “f8wConfig.cfg”檔 中 ) 來 設 定 。 理 想 的 情 況 下 , 這 必 須 被 設 定 為 一 個鞄 128 位 隨 機趙 值靹 。預踣 設 密 鑰 可 被 預踣 配 置 在 網牺 路跡 中 的 每俟 一 個鞄 設 備 上 , 或 者 只 配 置 在 協 調 器赛 上 面 , 由 協 調 器赛 透過跸 空 中 發 送 給 加 入 到 網牺 路跡 中 的 每俟 一 個鞄 設 備 。 這 可 以 透 過跸 gPreConfigKeys 選 項 ( 在“nwk_globals.c” 檔 中 ) 被 選 擇赾 。 如 果 該 選 項 的 值靹 被 設 定 為 TRUE, 那倴 麼猕 預踣 設 密 鑰 的 值靹 必 須被 預踣 先 配 置 在 每俟 一 個鞄 設 備 上 。 如 果 該 選 項 的 值靹 被 設 定 為 FALSE, 那倴 麼猕 預踣 設 密 鑰 參 數 應 當 只設 定 在 協 調 器赛 設 備 上 。 注 意 : 在 後 面 一 種牞 情 況 中 , 密 鑰 將 被 透 過跸 空 中 發 送 給 每俟 一 個鞄 加 入 的 設備 。 因 此 在 設 備 加 入 過跸 程 中 有 一 個鞄 “ 脆 弱韪 時頗 段 ”, 在 該 “ 脆 弱韪 時頗 段 ”, 一 個鞄 敵 手 可 以 透 過跸 監牐聽 空 中 的 交 通 來 確 定 密 鑰 並 危 及 網牺 路跡 安 全 。97華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統6.9.3 網牺 路跡 存 取 控 制在 一 個鞄 安 全 網牺 路跡 中 , 信 任 中 心 ( 協 調 器赛 ) 當 一 個鞄 設 備 加 入 該 網牺 路跡 時頗 會 被 通 知 。 協 調 器赛 具有 允 許 設 備 保 留 在 網牺 路跡 中 或 拒 絕 該 設 備 存 取 網牺 路跡 的 選 項 。信 任 中 心 可 使 用 任 何 邏 輯 來 決俩 定 該 設 備 是 允 許 存 取 網牺 路跡 還 是 不 允 許 。 信 任 中 心 的 一 種牞 選擇赾 是 只 允 許 設 備 在 一 個鞄 短 暫 的 時頗 間 視 窗 中 加 入 網牺 路跡 。 這 是 有 可 能 的 , 例 如 , 信 任 中 心 具 有 一個鞄 “ 按 下 ” 按 鈕 。 當 這 個鞄 按 鈕 被 按 下 , 它 將 允 許 任 何 設 備 在 一 個鞄 短 暫 的 時頗 間 視 窗 內 加 入 網牺路跡 , 否佞 則 所 有 加 入 請 求俠 將 被 拒 絕 。 第 2 種牞 可 能 的 方 案頥 是 配 置 信 任 中 心 透 過跸 設 備 的 IEEE 位 址佼來 允 許 ( 拒 絕 ) 設 備 。6.9.4 密 鑰 更俐 新信 任 中 心 可 以 在 它 自 己 的 謹覊 慎 判住 斷 下 更俐 新 公 共 網牺 路跡 密 鑰 。 應 用 開 發 者 必 須 修鞈 改俌 網牺 路跡 密 鑰更俐 新 策 略 。 預踣 設 的 信 任 中 心 實蹴 施 , 可 以 用 來 滿軈 足倦 開 發 者 的 具 體 策 略 。 一 個鞄 例 子 策 略 是 以 規 則的 週 期 性 間 隔踖 來 更俐 新 網牺 路跡 密 鑰 。 另 一 個鞄 策 略 是 透 過跸 使 用 者 輸 入 ( 例 如 , 按 下 按 鈕 ) 來 更俐 新NWK 密 鑰 。ZDO 安 全 管牤 理 器赛 API(ZDSecMgr.c) 透 過跸 "ZDSecMgrUpdateNwkKey" 和"ZDSecMgrSwitchNwkKey" 提 供 了 必 要 的 功 能 。"ZDSecMgrUpdateNwkKey" 允 許 信 任 中 心 廣播 一 個鞄 新 的 網牺 路跡 密 鑰 給 網牺 路跡 上 的 所 有 設 備 。 在 這 一 點 上 , 新 的 網牺 路跡 密 鑰 被 當 作伿 一 個鞄 備 用 密 鑰儲 存 在 所 有 設 備 上 。 一 旦 信 任 中 心 調 用 "ZDSecMgrSwitchNwkKey", 一 個鞄 網牺 路跡 範 圍 的 廣 播 將觸 發 所 有 設 備 使 用 它 們靽 的 備 用 密 鑰 。6.9.5 快侳 速 參 考致 能 安 全 設 定 SECURE = 1 ( 在 “f8wConfig.cfg” 檔 案頥 中 )致 能 預踣 配 置 網牺 路跡 密 鑰 設 定 gPreConfigKeys = TRUE( 在 “nwk_globals.c” 檔 案頥 中 )設 定 預踣 配 置 網牺 路跡 密 鑰 設 定 defaultKey = {KEY} ( 在 “nwk_globals.c” 文 件 中 )致 能 / 禁 止 信 任 中 心 加 入 許 可 調 用 ZDSecMgrPermitJoining() ( 在 “ZDSecMgr.c” 檔 案頥 中 )在 加 入 期 間 特顠 定 的 設 備 驗 證訥 修鞈 改俌 ZDSecMgrDeviceValidate ( 在 “ZDSecMgr.c” 檔 案頥 中 )網牺 路跡 密 鑰 更俐 新調 用 ZDSecMgrUpdateNwkKey() 和ZDSecMgrSwitchNwkKey() ( 在 “ZDSecMgr.c” 檔 案頥 中 )98華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統99華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統100華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 API本 節 列 舉 了 ZigBee-2006 相 容韕 協 定 堆 疊 Z-<strong>Stack</strong> v1.4.2 的 應 用 程 式 介 面 (API), 描 述 了每俟 一 個鞄 介 面 的 詳 情 , 包 括 資 料頔 結 構躬 和 函 數 調 用 的 詳 細 資 訊 以 便 幫 助佔 開 發 者 理 解 和 佐 用 它 們靽 進行 開 發 。API 從 頂 層 ( 應 用 ) 到 下 層 被 逐 一 介 紹 。7.1 層 概 述7.1.1 ZDOZigBee 設 備 物 件 (ZDO) 層 提 供 管牤 理 ZigBee 設 備 的 功 能 。ZDO API 為 應 用 端牣 點 提 供 了介 面 來 管牤 理 ZigBee 協 調 器赛 、 路跡 由 器赛 或 終 端牣 設 備 的 功 能 , 這 包 括 建 立 , 發 現 和 加 入 一 個鞄 ZigBee網牺 路跡 ; 綁 定 應 用 端牣 點 ; 管牤 理 安 全 。7.1.2 AF應 用 框頦 架 (AF) 介 面 支 援 一 個鞄 端牣 點 ( 包 括 ZDO) 與犕 下 層 協 定 堆 疊 進 行 介 面 。Z-<strong>Stack</strong> AF提 供 了 開 發 者 建 立 一 個鞄 設 備 描 述 所 需猀 的 資 料頔 結 構躬 和 輔狕 助佔 函 數 , 它 是 輸 入 資 訊 的 端牣 點 複 合 器赛 。7.1.3 APS應 用 支 援 子 層 (APS)API 提 供 了 支 援 服 務 的 一 個鞄 通 用 集 合 , 它 們靽 被 ZDO 和 製犸 造 商 用來 定 義 應 用 物 件 。7.1.4 NWKZigBee 網牺 路跡 (NWK) 層 給 高 層 ( 應 用 ) 元 件 提 供 管牤 理 和 資 料頔 服 務 。7.2 ZigBee 設 備 物 件 (ZDO)本 節 列 舉 了 由 ZDO 層 提 供 的 所 有 函 數 調 用 , 這 對蹹 於 在 ZigBee 設 備 規 範 (ZDP) 中 定 義的 所 有 命 令 和 回 應 的 執 行 是 有 必 要 的 。 還 列 舉 了 致 能 設 備 運跮 行 為 一 個鞄 ZigBee 設 備 的 其 他 函數 。 所 有 的 ZDO API 函 數 在 7.2.1 節 中 按 它 們靽 的 功 能 被 分 類詑 , 每俟 一 個鞄 分 類詑 將 在 後 面 的 各 節 中被 討 論 。101華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.1 概 述ZDP 描 述 了 在 ZDO 中 通 用 ZigBee 設 備 特顠 性 如 何 被 實蹴 施 。 它 定 義 了 設 備 描 述 和 簇 。 簇是 由 一 對蹹 命 令 和 回 應 構躬 成 的 。 透 過跸 在 命 令 結 構躬 中 資 訊 的 定 義 ,ZDP 給 ZDO 和 應 用 提 供 了 以下 的 功 能 :設 備 網牺 路跡 啟 動設 備 和 服 務 發 現終 端牣 設 備 綁 定 , 綁 定 和 解 除 綁 定 服 務網牺 路跡 管牤 理 服 務設 備 發 現 是 一 個鞄 ZigBee 設 備 去 發 現 另 一 個鞄 ZigBee 設 備 的 過跸 程 。 設 備 發 現 的 一 個鞄 例 子 是NWK 位 址佼 請 求俠 , 它 被 廣 播 並 帶 有 已 知 的 IEEE 位 址佼 作伿 為 資 料頔 載跩 荷 。“ 感 興 趣賱 ” 的 設 備 應 當回 應 並 告佨 知 它 的 NWK 位 址佼 。 服 務 發 現 給 設 備 提 供 了 去 發 現 PAN 中 其 他 ZigBee 設 備 所 提 供服 務 的 能 力 。 它 佐 用 各 種牞 描 述 符 來 指 明 設 備 能 力 。終 端牣 設 備 綁 定 , 綁 定 和 解 除 綁 定 服 務 提 供 了 ZigBee 設 備 的 綁 定 能 力 。 通 常 情 況 下 , 在一 個鞄 網牺 路跡 的 安 裝 過跸 程 中 , 當 使 用 者 需猀 要 把便 控 制 設 備 和 被 控 制 設 備 ( 例 如 開 關詉 和 燈趰 ) 進 行 綁 定時頗 , 綁 定 被 使 用 。 終 端牣 設 備 綁 定 支 援 一 個鞄 簡 單 的 方 法 , 即佘 使 用 者 輸 入 被 用 來 標 識訤 成 對蹹 的 控 制/ 被 控 制 設 備 。 綁 定 和 解 除 綁 定 服 務 提 供 了 建 立 和 佑 除 綁 定 表 條 目 的 能 力 。 綁 定 表 條 目 被 用來 映 射韗 控 制 資 訊 到 它 們靽 的 目 的 地 。網牺 路跡 管牤 理 服 務 提 供 了 從 設 備 取 回 管牤 理 資 訊 的 能 力 。 管牤 理 資 訊 包 括 網牺 路跡 發 現 結 果 、 路跡 由 表內 容韕 、 到 鄰贊 居 節 點 的 鏈訿 路跡 品 質賭 和 綁 定 表 內 容韕 。 網牺 路跡 管牤 理 服 務 還 提 供 了 透 過跸 從 PAN 中 解 除 設備 關詉 聯 來 控 制 網牺 路跡 關詉 聯 的 能 力 。 網牺 路跡 管牤 理 服 務 主 要 是 為 使 用 者 或 除 錯 工 具 設 計 的 , 用 來 管牤 理網牺 路跡 。7.2.2 ZDO 設 備 網牺 路跡 啟 動預踣 設 方 式 下 ,ZDApp_Init() ( 在 ZDApp.c 檔 中 ) 開 始 在 一 個鞄 ZigBee 網牺 路跡 中 的 設 備 啟 動 。但伽 應 用 可 以 改俌 變 這 種牞 預踣 設 的 方 式 。 為 了 讓 應 用 控 制 設 備 網牺 路跡 啟 動 , 必 須 包 含佳HOLD_AUTO_START 編 譯 選 項 並 且 建 議 使 用 者 還 包 含佳 NV_RESTORE 編 譯 選 項 ( 來 在 NV中 保 存 ZigBee 網牺 路跡 狀 態躊 )。 如 果 設 備 包 含佳 這 些 編 譯 選 項 , 它 將 需猀 要 調 用 ZDOInitDevice() 來啟 動 。7.2.2.1 ZDOInitDevice()啟 動 網牺 路跡 中 的 設 備 。 該 函 數 將 讀 取 ZCD_NV_STARTUP_OPTION(NV 專 案頥 ) 來 決俩 定 是否佞 恢 復 設 備 的 網牺 路跡 狀 態躊 。 要 調 用 該 函 數 , 設 備 必 須 包 含佳 HOLD_AUTO_START 編 譯 選 項 。如 果 應 用 希侣 望 強 制 一 個鞄 “ 新 的 ” 加 入 , 在 調 用 該 函 數 以 前 , 應 用 必 須 置 位ZCD_NV_STARTUP_OPTION 中 的 ZCD_STARTOPT_DEFAULT_NETWORK_STATE 位 。“ 新 的 ” 加 入 意 味 著 不 恢 復 設 備 的 網牺 路跡 狀 態躊 。 使 用 zgWriteStartupOptions() 來 設 定 這 些 選 項 :102華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統[zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);].函 數 原鞝 型uint8 ZDOInitDevice( uint16 startDelay );參 數 細 節startDelay — 啟 動 設 備 延 時頗 ( 以 毫 秒 為 單 位 )。 有 一 個鞄 抖侺 動 加 入 該 延 時頗 :((NWK_START_DELAY + startDelay) + (osal_rand() & EXTENDED_JOINING_RANDOM_MASK))返 回 值靹該 函 數 將 返 回 下 面 這 些 值靹 中 的 一 個鞄 :名 稱牟 描 述ZDO_INITDEV_RESTORED_NETWORK_STATE 設 備 的 網牺 路跡 狀 態躊 被 恢 復 。設 備 的 網牺 路跡 狀 態躊 被 初 始 化 。 這 可 能 意 味著 ZCD_NV_STARTUP_OPTION 指 明ZDO_INITDEV_NEW_NETWORK_STATE不 恢 復 網牺 路跡 狀 態躊 ; 也 可 能 意 味 著 沒俯 有 保存 的 網牺 路跡 狀 態躊 , 因 此 不 恢 復 網牺 路跡 狀 態躊 。在 設 備 重 置 以 前 , 一 個鞄 網牺 路跡 離覭 開 會 導赫 致重 加 入 選 項 被 設 定 為 TRUE。 因 此 , 設ZDO_INITDEV_LEAVE_NOT_STARTED備 不 在 網牺 路跡 中 啟 動 ( 只 啟 動 一 次 )。 下一 次 該 函 數 被 調 用 時頗 它 將 啟 動 。7.2.3 ZDO 發 現 APIZDO 發 現 API 建 立 並 發 送 ZDO 設 備 和 服 務 發 現 請 求俠 和 回 應 。 下 表 中 列 出 了 所 有 的 API函 數 和 它 們靽 相 應 的 ZDP 命 令 。 使 用 者 可 以 使 用 命 令 名 稱牟 作伿 為 關詉 鍵 字 在 最 新 的 ZigBee 規 範 中進 行 查 找俁 , 以 便 做 更俐 深 入 的 參 考 。 在 以 下 各 分 項 條 文 中 , 這 些 函 數 中 的 每俟 一 個鞄 將 被 詳 細 討 論 。ZDP 發 現 API 函 數ZDP_NwkAddrReq()ZDP_NWKAddrRsp()ZDP_IEEEAddrReq()ZDP_IEEEAddrRsp()ZDP_NodeDescReq()ZDP 發 現 命 令NWK_addr_reqNWK_addr_rspIEEE_addr_reqIEEE_addr_rspNode_Desc_req103華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南ZDP_NodeDescRsp()ZDP_PowerDescReq()ZDP_PowerDescRsp()ZDP_SimpleDescReq()ZDP_SimpleDescRsp()ZDP_ComplexDescReq()ZDP_ActiveEPIFReq()ZDP_ActiveEPIFRsp()ZDP_MatchDescReq()ZDP_MatchDescRsp()ZDP_UserDescSet()ZDP_UserDescConf()ZDP_UserDescReq()ZDP_UserDescRsp()ZDP_EndDeviceAnnce()ZDP_ServerDiscReq()ZDP_ServerDiscRsp()華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統Node_Desc_rspPower_Desc_reqPower_Desc_rspSimple_Desc_reqSimple_Desc_rspComplex_Desc_reqActive_EP_reqActive_EP_rspMatch_Desc_reqMatch_Desc_rspUser_Desc_setUser_Desc_confUser_Desc_reqUser_Desc_rspDevice_annceSystem_Server_Discovery_reqSystem_Server_Discovery_rsp7.2.3.1 ZDP_NwkAddrReq()調 用 該 函 數 將 產 生 一 個鞄 資 訊 來 詢 問 一 個鞄 遠狚 端牣 設 備 ( 基 於 它 的 已 知 IEEE 位 址佼 ) 的 16 位位 址佼 。 該 資 訊 作伿 為 一 個鞄 廣 播 資 訊 被 發 送 給 網牺 路跡 中 的 所 有 設 備 。函 數 原鞝 型afStatus_t ZDP_NwkAddrReq( byte *IEEEAddress, byte ReqType,byte StartIndex, byte SecuritySuite );參 數 細 節IEEEAddress — 被 請 求俠 設 備 的 IEEE 位 址佼 。ReqType — 想 得 到 回 應 類詑 型 , 其 可 能 值靹 都 列 於 下 表 :ReqType名 稱牟 意 義ZDP_NWKADDR_REQTYPE_SINGLE 只 返 回 設 備 的 短 位 址佼 和 擴 充 位 址佼 。ZDP_NWKADDR_REQTYPE_EXTENDED返 回 設 備 的 短 位 址佼 和 擴 充 位 址佼 以 及 所 有 關詉 聯設 備 的 短 位 址佼 。104華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。 索 引 從 0 開 始 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.2 ZDP_NWKAddrRsp()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_AddrRsp() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄 網牺 路跡 位 址佼 響 應 。函 數 原鞝 型afStatus_t ZDP_NWKAddrRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte *IEEEAddrRemoteDev,byte ReqType, uint16 nwkAddr,byte NumAssocDev, byte StartIndex,uint16 *NWKAddrAssocDevList,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹ZDP_SUCCESS 0ZDP_INVALID_REQTYPE 1ZDP_DEVICE_NOT_FOUND 2Reserved0x03~0xFFIEEEAddrRemoteDev — 遠狚 端牣 設 備 的 64 位 元 位 址佼ReqType — 請 求俠 的 請 求俠 類詑 型nwkAddr — 遠狚 端牣 設 備 的 16 位 元 位 址佼NumAssocDev — 遠狚 端牣 設 備 的 關詉 聯 設 備 和 它 們靽 的 16 位 元 短 位 址佼 的 數 量 計 數 。 如 果 遠狚 端牣105華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統設 備 沒俯 有 關詉 聯 設 備 ,NumAssocDev 應 為 0, 這 種牞 情 況 下 StartIndex 和 NWKAddrAssocDevList將 為 空 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。 該 欄 位 是 回 應 資 訊 的 起 始 索 引 。NWKAddrAssocDevList — 一 個鞄 16 位 位 址佼 列 表 , 其 中 列 出 了 遠狚 端牣 設 備 對蹹 應 的 每俟 一 個鞄 關詉聯 設 備 。NWKAddrAssocDevList 中 16 位 元 位 址佼 的 數 量 由 NumAssocDev 提 供 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.3 ZDP_IEEEAddrReq()位 位 址佼 。調 用 該 函 數 將 產 生 一 個鞄 資 訊 來 詢 問 一 個鞄 遠狚 端牣 設 備 ( 基 於 它 的 已 知 16 位 網牺 路跡 位 址佼 ) 的 64函 數 原鞝 型afStatus_t ZDP_IEEEAddrReq( uint16 shortAddr, byte ReqType,byte StartIndex, byte SecuritySuite );參 數 細 節shortAddr — 已 知 的 16 位 網牺 路跡 位 址佼 。ReqType — 想 得 到 回 應 類詑 型 , 其 可 能 值靹 都 列 於 下 表 :ReqType名 稱牟 意 義ZDP_IEEEADDR_REQTYPE_SINGLE 只 返 回 設 備 的 短 位 址佼 和 擴 充 位 址佼 。ZDP_IEEEADDR_REQTYPE_EXTENDED返 回 設 備 的 短 位 址佼 和 擴 充 位 址佼 以 及 所 有 關詉 聯設 備 的 短 位 址佼 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請 求俠 者可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。SecuritySuite — 資 訊 的 安 全 類詑 型 。106華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.4 ZDP_IEEEAddrRsp()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_AddrRsp() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄 IEEE 位 址佼 響 應 。函 數 原鞝 型afStatus_t ZDP_IEEEAddrRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte *IEEEAddrRemoteDev,byte ReqType, uint16 nwkAddr,byte NumAssocDev, byte StartIndex,uint16 *NWKAddrAssocDevList,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹ZDP_SUCCESS 0ZDP_INVALID_REQTYPE 1ZDP_DEVICE_NOT_FOUND 2Reserved0x03~0xFFIEEEAddrRemoteDev — 遠狚 端牣 設 備 的 64 位 元 位 址佼ReqType — 請 求俠 的 請 求俠 類詑 型nwkAddr — 遠狚 端牣 設 備 的 16 位 元 位 址佼NumAssocDev — 遠狚 端牣 設 備 的 關詉 聯 設 備 和 它 們靽 的 16 位 元 短 位 址佼 的 數 量 計 數 。 如 果 遠狚 端牣設 備 沒俯 有 關詉 聯 設 備 ,NumAssocDev 應 為 0, 這 種牞 情 況 下 StartIndex 和 NWKAddrAssocDevList將 為 空 。StartIndex — 該 報 告佨 的 相 關詉 設 備 列 表 中 的 起 始 索 引 。107華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統NWKAddrAssocDevList — 一 個鞄 16 位 位 址佼 列 表 , 其 中 列 出 了 遠狚 端牣 設 備 對蹹 應 的 每俟 一 個鞄 關詉聯 設 備 。NWKAddrAssocDevList 中 16 位 位 址佼 的 數 量 由 NumAssocDev 提 供 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.5 ZDP_NodeDescReq()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_NWKAddrOfInterestReq() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄節 點 描 述 符 請 求俠 給 在 目 標 位 址佼 欄 位 指 定 的 遠狚 端牣 設 備 。函 數 原鞝 型afStatus_t ZDP_NodeDescReq( zAddrType_t *dstAddr, uint16 NWKAddrOfInterest,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。NWKAddrOfInterest - 要 搜 索 的 16 位 短 位 址佼 。SecuritySuite - 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.6 ZDP_NodeDescMsg()調 用 該 函 數 來 回 應 節 點 描 述 符 請 求俠 。函 數 原鞝 型108華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統afStatus_t ZDP_NodeDescMsg( byte TransSeq, zAddrType_t *dstAddr, byte Status,uint16 nwkAddr, NodeDescriptorFormat_t *pNodeDesc,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0DEVICE_NOT_FOUND 1nwkAddr — 設 備 的 16 位 元 位 址佼pNodeDesc — 指 向 節 點 描 述 符 ( 在 AF.h 中 定 義 ) 的 指 針 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.7 ZDP_PowerDescReq()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_NWKAddrOfInterestReq() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄電踝 源 描 述 符 請 求俠 。 使 用 該 巨 集 來 詢 問 遠狚 端牣 設 備 的 電踝 源 描 述 符 。函 數 原鞝 型afStatus_t ZDP_PowerDescReq( zAddrType_t *dstAddr, int16 NWKAddrOfInterest,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。NWKAddrOfInterest - 要 搜 索 的 16 位 短 位 址佼 。109華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統SecuritySuite - 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.8 ZDP_PowerDescMsg()調 用 該 函 數 來 回 應 電踝 源 描 述 符 請 求俠 。函 數 原鞝 型afStatus_t ZDP_PowerDescMsg( byte TranSeq, zAddrType_t *dstAddr, byte Status,int16 nwkAddr, NodePowerDescriptorFormat_t *pPowerDesc,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0DEVICE_NOT_FOUND 1nwkAddr — 設 備 的 16 位 元 位 址佼pNodeDesc — 指 向 電踝 源 描 述 符 ( 在 AF.h 中 定 義 ) 的 指 針 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。110華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.3.9 ZDP_SimpleDescReq()該 調 用 將 建 立 和 發 送 一 個鞄 簡 單 描 述 符 請 求俠 。函 數 原鞝 型afStatus_t ZDP_SimpleDescReq(zAddrType_t *dstAddr, uint16 nwkAddr,byte epIntf, byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。nwkAddr — 已 知 的 16 位 網牺 路跡 位 址佼 。epIntf — 想 要 的 應 用 端牣 點 / 介 面SecuritySuite - 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.10 ZDP_SimpleDescRsp()調 用 該 函 數 來 回 應 簡 單 描 述 符 請 求俠 。函 數 原鞝 型afStatus_t ZDP_SimpleDescRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, SimpleDescriptionFormat_t *pSimpleDesc,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :111華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統Status意 義 值靹SUCCESS 0INVALID_EP 1NOT_ACTIVE 2DEVICE_NOT_FOUND 3pSimpleDesc — 指 向 簡 單 描 述 符 ( 在 AF.h 中 定 義 ) 的 指 針 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.11 ZDP_ComplexDescReq()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_NWKAddrOfInterestReq() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄複 雜覮 描 述 符 請 求俠 。函 數 原鞝 型afStatus_t ZDP_ComplexDescReq( zAddrType_t *dstAddr,uint16 nwkAddr, byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。nwkAddr — 已 知 的 16 位 網牺 路跡 位 址佼 。SecuritySuite - 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。112華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.3.12 ZDP_ActiveEPIFReq ()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_NWKAddrOfInterestReq() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄啟 動 端牣 點 / 介 面 請 求俠 。 使 用 該 巨 集 來 詢 問 遠狚 端牣 設 備 的 所 有 啟 動 端牣 點 / 介 面 。函 數 原鞝 型afStatus_t ZDP_ActiveEPIFReq( zAddrType_t *dstAddr, uint16 NWKAddrOfInterest,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。NWKAddrOfInterest — 要 搜 索 的 16 位 短 位 址佼 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.13 ZDP_ActiveEPIFRsp()這 是 一 個鞄 調 用 ZDP_EPIFRsp() 的 巨 集 。 調 用 該 函 數 來 回 應 啟 動 端牣 點 / 介 面 請 求俠 。函 數 原鞝 型afStatus_t ZDP_ActiveEPIFRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, uint16 nwkAddr, byte Count, byte*pEPIntfList,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼113華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0DEVICE_NOT_FOUND 1nwkAddr — 設 備 的 16 位 元 網牺 路跡 位 址佼 。count — pEPIntfList 中 啟 動 端牣 點 / 介 面 的 數 量 。pEPIntfList — 該 設 備 上 啟 動 端牣 點 / 介 面 的 陣 列 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.14 ZDP_MatchDescReq()該 調 用 將 建 立 和 發 送 一 個鞄 匹 配 描 述 符 請 求俠 。 使 用 該 函 數 在 一 個鞄 應 用 的 輸 入 / 輸 出 簇 列 表中 查 找俁 匹 配 的 設 備 / 應 用 。函 數 原鞝 型afStatus_t ZDP_MatchDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,uint16 ProfileID,byte NumInClusters, byte *InClusterList,byte NumOutClusters, byte *OutClusterList,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。nwkAddr — 已 知 的 16 位 網牺 路跡 位 址佼 。ProfileID — 應 用 的 規 範 ID, 作伿 為 簇 ID 的 參 考 。NumInClusters — 輸 入 簇 列 表 中 簇 ID 的 編 號 。InClusterList — 輸 入 簇 ID( 每俟 一 位 元 組 ) 的 陣 列 。NumOutClusters — 輸 出 簇 列 表 中 簇 ID 的 編 號 。OutClusterList — 輸 出 簇 ID( 每俟 一 位 元 組 ) 的 陣 列 。114華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.15 ZDP_MatchDescRsp()這 是 一 個鞄 調 用 ZDP_EPIFRsp() 的 巨 集 。 調 用 該 函 數 來 回 應 匹 配 描 述 符 請 求俠 。函 數 原鞝 型afStatus_t ZDP_MatchDescRsp( byte TranSeq, zAddrType_t *dstAddr, byte Status,uint16 nwkAddr, byte Count, byte *pEPIntfList,byte SecuritySuite );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0DEVICE_NOT_FOUND 1nwkAddr — 設 備 的 16 位 元 網牺 路跡 位 址佼 。count — pEPIntfList 中 啟 動 端牣 點 / 介 面 的 數 量 。pEPIntfList — 該 設 備 上 啟 動 端牣 點 / 介 面 的 陣 列 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。115華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.3.16 ZDP_UserDescSet()該 函 數 建 立 和 發 送 一 個鞄 User_Desc_set 資 訊 來 為 遠狚 端牣 設 備 設 定 使 用 者 描 述 符 。 該 請 求俠 被單 播 到 遠狚 端牣 設 備 自 身倧 或 具 有 該 遠狚 端牣 設 備 發 現 資 訊 的 其 他 設 備 。 注 意 : 遠狚 端牣 設 備 應 該 定 義NV_RESTORE 來 致 能 該 功 能 。函 數 原鞝 型afStatus_t ZDP_UserDescSet( zAddrType_t *dstAddr,uint16 nwkAddr,UserDescriptorFormat_t *UserDescriptor,byte SecurityEnable );參 數 細 節dstAddr — 該 請 求俠 的 目 的 位 址佼 。nwkAddr — 遠狚 端牣 設 備 的 16 位 元 網牺 路跡 位 址佼UserDescriptor — 將 被 配 置 的 使 用 者 描 述 符 。 它 包 含佳 長 度 小 於 等 於 16 個鞄 字 元 的 ASCII字 串 。 它 將 被 填 充 空 白 字 元 (0x20) 來 使 得 總 長 度 為 16 個鞄 字 元 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.17 ZDP_UserDescConf()這 是 一 個鞄 直 接 調 用 ZDP_SendData () 的 巨 集 。 調 用 該 函 數 來 回 應 User_Desc_Conf 。函 數 原鞝 型afStatus_t ZDP_UserDescConf( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );116華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節TranSeq — 傳 輸 序侤 號 。DstAddr — 目 的 位 址佼 。Status — 以 下 值靹 :Status意 義 值靹SUCCESS0x00INV_REQUESTTYPE0x80DEVICE_NOT_FOUND0x81DEVICE_NOT_FOUND0x84SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.18 ZDP_UserDescReq()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_NWKAddrOfInterestReq() 的 巨 集 。 該 調 用 將 建 立 和 發 送 一 個鞄User_Desc_Req。函 數 原鞝 型afStatus_t ZDP_UserDescReq( zAddrType_t *dstAddr, uint16 nwkAddr,byte SecurityEnable );參 數 細 節DstAddr — 目 的 位 址佼 。nwkAddr — 已 知 的 16 位 網牺 路跡 位 址佼 。SecuritySuite — 資 訊 的 安 全 類詑 型 。117華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.19 ZDP_UserDescRsp()該 調 用 將 建 立 並 發 送 一 個鞄 User_Desc_Rsp。函 數 原鞝 型ZStatus_t ZDP_UserDescRsp( byte TransSeq, zAddrType_t *dstAddr,uint16 nwkAddrOfInterest, UserDescriptorFormat_t *userDesc,byte SecurityEnable );參 數 細 節TranSeq — 傳 輸 序侤 號 。DstAddr — 目 的 位 址佼 。nwkAddrOfInterest — 已 知 的 16 位 網牺 路跡 位 址佼 。userDesc — 本 地 設 備 的 使 用 者 描 述 符 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.20 ZDP_EndDeviceAnnce()該 函 數 為 ZigBee 終 端牣 設 備 建 立 並 發 送 一 個鞄 End_Device_annce 命 令 來 通 知 ZigBee 網牺 路跡中 的 其 他 設 備 該 終 端牣 設 備 已 經 加 入 或 重 加 入 網牺 路跡 。 該 命 令 包 含佳 終 端牣 設 備 新 的 16 位 網牺 路跡 位 址佼和 64 位 IEEE 位 址佼 , 以 及 該 ZigBee 終 端牣 設 備 的 能 力 。 該 命 令 被 作伿 為 一 個鞄 廣 播 資 訊 發 出 。 接收 到 End_Device_annce 後 , 所 有 的 接 收 者 應 該 檢 查 IEEE 位 址佼 內 部 衝 突 並 用 新 的 NWK 位 址佼替 換 相 應 的 NWK 位 址佼 。 對蹹 於 End_Device_annce 命 令 , 沒俯 有 回 應 被 發 回 。118華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統函 數 原鞝 型afStatus_t ZDP_EndDeviceAnnce( uint16 nwkAddr, byte *IEEEAddr,byte capabilities, byte SecurityEnable );參 數 細 節nwkAddr — 本 地 設 備 的 16 位 元 NWK 位 址佼 。IEEEAddr — 指 向 本 地 設 備 的 64 位 元 IEEE 位 址佼 的 指 標 。Capabilities — 本 地 設 備 的 能 力 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.21 ZDP_ServerDiscReq()該 函 數 建 立 並 發 送 一 個鞄 System_Server_Discovery_req 請 求俠 資 訊 。 該 資 訊 包 含佳 一 個鞄 16 位元 伺 服 器赛 遮贆 罩 。 該 請 求俠 被 用 來 發 現 某 一 系倐 統 伺 服 器赛 或 被 伺 服 器赛 遮贆 罩 所 指 示 的 伺 服 器赛 的 位 置 。該 資 訊 被 廣 播 給 RxOnWhenIdle 的 所 有 設 備 。 只 有 當 遠狚 端牣 設 備 比 較跨 接 收 到 的 伺 服 器赛 遮贆 罩 與犕 儲存 在 本 地 節 點 描 述 符 中 的 遮贆 罩 並 發 現 一 個鞄 匹 配 位 元 時頗 , 遠狚 端牣 設 備 才 使 用 一 個鞄 單 播 傳 輸 來 發 送回 一 個鞄 響 應 。函 數 原鞝 型afStatus_t ZDP_ServerDiscReq( uint16 serverMask, byte SecurityEnable );參 數 細 節serverMask — 系倐 統 伺 服 器赛 的 16 位 元 位 元 遮贆 罩 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹119華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.3.22 ZDP_ServerDiscRsp()該 函 數 建 立 並 發 送 回 一 個鞄 System_Server_Discovery_rsp 響 應 。 當 一 個鞄System_Server_Discovery_req 被 接 收 並 且 在 伺 服 器赛 遮贆 罩 中 找俁 到 一 個鞄 匹 配 位 元 時頗 , 該 函 數 被 調用 。函 數 原鞝 型ZStatus_t ZDP_ServerDiscRsp( byte transID, zAddrType_t *dstAddr, byte status,uint16 aoi, uint16 serverMask, byte SecurityEnable );參 數 細 節TransID — 傳 輸 序侤 號 。dstAddr — 回 應 的 目 的 位 址佼 。status — 該 狀 態躊 值靹 總 為 ZSUCCESS。aoi — 想 要 的 位 址佼 。 目 前 未 使 用 。serverMask — 系倐 統 伺 服 器赛 的 16 位 元 遮贆 罩 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.4 ZDO 綁 定 APIZDO 綁 定 API 建 立 並 發 送 ZDO 綁 定 請 求俠 和 回 應 。 所 有 的 綁 定 資 訊 ( 表 ) 被 ZigBee 協調 器赛 保 持 。 因 此 , 只 有 ZigBee 協 調 器赛 可 以 接 收 綁 定 請 求俠 。 下 表 列 出 了 協 定 堆 疊 所 支 援 的 綁定 API 以 及 它 們靽 在 ZigBee 規 範 中 相 應 的 命 令 名 稱牟 。 使 用 者 可 以 使 用 命 令 名 稱牟 作伿 為 關詉 鍵 字 在最 新 的 ZigBee 規 範 中 進 行 查 找俁 , 以 便 做 更俐 深 入 的 參 考 。 在 以 下 各 分 項 條 文 中 , 這 些 函 數 中的 每俟 一 個鞄 將 被 詳 細 討 論 。ZDP 綁 定 API 函 數ZDP_EndDeviceBindReq()ZDP 綁 定 服 務 命 令End_Device_Bind_req120華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南ZDP_EndDeviceBindRsp()ZDP_BindReq()ZDP_BindRsp()ZDP_UnbindReq()ZDP_UnbindRsp()華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統End_Device_Bind_rspBind_reqBind_rspUnbind_reqUnbind_rsp7.2.4.1 ZDP_EndDeviceBindReq()該 調 用 將 建 立 並 發 送 一 個鞄 終 端牣 設 備 綁 定 請 求俠 (“ 手 動 綁 定 ”)。 發 送 該 資 訊 來 嘗蹋 試 為 該設 備 進 行 一 個鞄 手 動 綁 定 。 手 動 綁 定 之 後 , 你佀 可 以 發 送 間 接 ( 沒俯 有 位 址佼 ) 資 訊 給 協 調 器赛 , 協 調器赛 將 發 送 該 資 訊 給 這 個鞄 資 訊 所 綁 定 到 的 那倴 個鞄 設 備 , 或 者 你佀 可 以 從 新 綁 定 到 的 那倴 個鞄 設 備 接 收 資訊 。函 數 原鞝 型afStatus_t ZDP_EndDeviceBindReq( zAddrType_t *dstAddr,uint16 LocalCoordinator,byte epIntf,uint16 ProfileID,byte NumInClusters, byte *InClusterList,byte NumOutClusters, byte *OutClusterList,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。LocalCoordinator — 已 知 的 設 備 的 父 協 調 器赛 的 16 位 元 網牺 路跡 位 址佼 。epIntf — 應 用 的 端牣 點 / 介 面 。ProfileID — 作伿 為 簇 ID 參 考 的 應 用 的 規 範 ID。NumInClusters — 在 輸 入 簇 列 表 中 的 簇 ID 的 編 號 。InClusterList — 輸 入 簇 ID( 每俟 一 個鞄 位 元 組 ) 的 陣 列 。NumOutClusters — 在 輸 出 簇 列 表 中 的 簇 ID 的 編 號 。OutClusterList — 輸 出 簇 ID( 每俟 一 個鞄 位 元 組 ) 的 陣 列 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。121華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.4.2 ZDP_EndDeviceBindRsp()這 是 一 個鞄 直 接 調 用 ZDP_SendData () 的 巨 集 。 調 用 該 函 數 來 回 應 終 端牣 設 備 綁 定 請 求俠 。函 數 原鞝 型afStatus_t ZDP_EndDeviceBindRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0NOT_SUPPORTED 1TIMEOUT 2NO_MATCH 3SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.4.3 ZDP_BindReq()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_BindUnbindReq () 的 巨 集 。 該 調 用 建 立 並 發 送 一 個鞄 綁 定 請 求俠 。使 用 該 函 數 來 請 求俠 ZigBee 協 調 器赛 來 基 於 簇 ID 綁 定 應 用 。函 數 原鞝 型afStatus_t ZDP_BindReq( zAddrType_t *dstAddr, byte *SourceAddr,122華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統byte SrcEPIntf, byte ClusterID, byte *DestinationAddr, byte DstEPIntf,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。SourceAddr — 發 出 請 求俠 資 訊 的 設 備 的 64 位 元 IEEE 位 址佼 。SrcEPIntf — 發 出 請 求俠 資 訊 的 應 用 的 端牣 點 / 介 面 。ClusterID — 請 求俠 資 訊 要 綁 定 的 簇 ID。DestinationAddr — 接 收 請 求俠 資 訊 的 設 備 的 64 位 元 IEEE 位 址佼 。DstEPIntf — 接 收 請 求俠 資 訊 的 應 用 的 端牣 點 / 介 面 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.4.4 ZDP_BindRsp()這 是 一 個鞄 直 接 調 用 ZDP_SendData () 的 巨 集 。 調 用 該 函 數 來 回 應 綁 定 請 求俠 。函 數 原鞝 型afStatus_t ZDP_BindRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0NOT_SUPPORTED 1TABLE_FULL 2123華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.4.5 ZDP_UnbindReq ()這 實蹴 際狽 上 是 一 個鞄 調 用 ZDP_BindUnbindReq () 的 巨 集 。 該 調 用 將 建 立 並 發 送 一 個鞄 解 除 綁定 請 求俠 。 使 用 該 函 數 來 請 求俠 ZigBee 協 調 器赛 來 移 除 已 個鞄 綁 定 。函 數 原鞝 型afStatus_t ZDP_UnbindReq( zAddrType_t *dstAddr,byte *SourceAddr, byte SrcEPIntf,byte ClusterID,byte *DestinationAddr, byte DstEPIntf,byte SecuritySuite );參 數 細 節DstAddr — 目 的 位 址佼 。SourceAddr — 發 出 請 求俠 資 訊 的 設 備 的 64 位 元 IEEE 位 址佼 。SrcEPIntf — 發 出 請 求俠 資 訊 的 應 用 的 端牣 點 / 介 面 。ClusterID — 請 求俠 資 訊 要 綁 定 的 簇 ID。DestinationAddr — 接 收 請 求俠 資 訊 的 設 備 的 64 位 元 IEEE 位 址佼 。DstEPIntf — 接 收 請 求俠 資 訊 的 應 用 的 端牣 點 / 介 面 。SecuritySuite — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。124華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.4.5 ZDP_UnbindRsp()這 是 一 個鞄 直 接 調 用 ZDP_SendData () 的 巨 集 。 調 用 該 函 數 來 回 應 解 除 綁 定 請 求俠 。函 數 原鞝 型afStatus_t ZDP_UnbindRsp( byte TranSeq, zAddrType_t *dstAddr, byte Status,byte SecurityEnable );參 數 細 節TranSeq — 傳 輸 序侤 號DstAddr — 目 的 位 址佼Status — 以 下 值靹 :Status意 義 值靹SUCCESS 0NOT_SUPPORTED 1NO_ENTRY 2SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5 ZDO 管牤 理 APIZDO 管牤 理 API 建 立 並 發 送 ZDO 管牤 理 請 求俠 和 回 應 。 這 些 資 訊 被 用 來 獲 得 設 備 狀 態躊 和 更俐 新表 。 下 表 列 出 了 協 定 堆 疊 所 支 援 的 管牤 理 API 以 及 它 們靽 在 ZigBee 規 範 中 相 應 的 命 令 名 稱牟 。 使用 者 可 以 使 用 命 令 名 稱牟 作伿 為 關詉 鍵 字 在 最 新 的 ZigBee 規 範 中 進 行 查 找俁 , 以 便 做 更俐 深 入 的 參考 。 在 以 下 各 分 項 條 文 中 , 這 些 函 數 中 的 每俟 一 個鞄 將 被 詳 細 討 論 。ZDP 管牤 理 API 函 數ZDP_MgmtNwkDiscReq()ZDP_MgmtNwkDiscRsp()ZDP 網牺 路跡 管牤 理 服 務 命 令Mgmt_NWK_Disc_reqMgmt_NWK_Disc_rsp125華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南ZDP_MgmtLqiReq()ZDP_MgmtLqiRsp()ZDP_MgmtRtgReq()ZDP_MgmtRtgRsp()ZDP_MgmtBindReq()ZDP_MgmtBindRsp()ZDP_MgmtLeaveReq()ZDP_MgmtLeaveRsp()ZDP_MgmtDirectJoinReq()ZDP_MgmtDirectJoinRsp()ZDP_MgmtPermitJoinReq()ZDP_MgmtPermitJoinRsp()華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統Mgmt_Lqi_reqMgmt_Lqi_rspMgmt_Rtg_reqMgmt_Rtg_rspMgmt_Bind_reqMgmt_Bind_rspMgmt_Leave_reqMgmt_Leave_rspMgmt_Direct_Join_reqMgmt_Direct_Join_rspMgmt_Permit_Join_reqMgmt_Permit_Join_rsp7.2.5.1 ZDP_MgmtNwkDiscReq()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 為 目 的 設 備 產 生 請 求俠 來 完侖 成 一 個鞄 網牺 路跡 掃描 。 應 用 只 能 在 ZDConfig.h 檔 中 的 ZDO_MGMT_NWKDISC_REQUEST 編 譯 標 記 被 設 定 或ZDO_MGMT_NWKDISC_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 時頗 才 能 調 用 本 函 數 。函 數 原鞝 型afStatus_t ZDP_MgmtNwkDiscReq( zAddrType_t *dstAddr,uint32 ScanChannels, byte StartIndex, byte SecurityEnable );參 數 細 節DstAddr — 目 的 位 址佼 。ScanChannels — 該 請 求俠 要 掃 描 的 通 道跰 。 通 道跰 定 義 包 含佳 在 NLMEDE.h 檔 中 ( 例 如DEFAULT_CHANLIST)。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。126華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.2.5.2 ZDP_MgmtNwkDiscRsp()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 產 生 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_NWKDISC_REQUEST 編 譯 標 記 被 設 定 或ZDO_MGMT_NWKDISC_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 , 當 一 個鞄 “ 管牤 理 網牺 路跡 發 現 請求俠 ” 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。函 數 原鞝 型afStatus_t ZDP_MgmtNwkDiscRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status,byte NetworkCount, byte StartIndex, byte NetworkCountList,networkDesc_t *NetworkList, byte SecurityEnable );參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 在 ZComDef.h 中 被 定 義 為 ZStatus_t。NetworkCount — 在 該 資 訊 中 可 能 的 專 案頥 的 數 量 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。 該 欄 位 是 回 應 資 訊 的 起 始 索 引 。NetworkCountList — 在 該 資 訊 中 相 應 專 案頥 的 數 量 。NetworkList — 網牺 路跡 發 現 記 錄 列 表 。 你佀 可 以 在 NLMEDE.h 中 查 找俁 networkDesc_t 結 構躬 體來 獲 取 資 訊 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.3 ZDP_MgmtLqiReq()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 為 目 的 設 備 產 生 請 求俠 來 返 回 它 的 近 鄰贊 表 。應 用 只 能 在 ZDConfig.h 檔 中 的 ZDO_MGMT_LQI_REQUEST 編 譯 標 記 被 設 定 或ZDO_MGMT_LQI_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 時頗 才 能 調 用 本 函 數 。127華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統函 數 原鞝 型afStatus_t ZDP_MgmtLqiReq ( zAddrType_t *dstAddr,byte StartIndex, byte SecurityEnable );參 數 細 節dstAddr — 目 的 位 址佼 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。SecurityEnable — 資 訊 的 安 全 類詑 型 。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.4 ZDP_MgmtLqiRsp()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 產 生 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_LQI_RESPONSE 編 譯 標 記 被 設 定 或 ZDO_MGMT_LQI_RESPONSE 作伿 為 一 般編 譯 標 記 被 設 定 , 當 一 個鞄 “ 管牤 理 LQI 請 求俠 ” 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。函 數 原鞝 型ZStatus_t ZDP_MgmtLqiRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte NeighborLqiEntries,byte StartIndex, byte NeighborLqiCount,neighborLqiItem_t *NeighborLqiList,byte SecurityEnable );參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 在 ZComDef.h 中 被 定 義 為 ZStatus_t。NeighborLqiEntries — 在 該 資 訊 中 可 能 的 專 案頥 的 數 量 。128華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。 該 欄 位 是 回 應 資 訊 的 起 始 索 引 。NeighborLqiCount — 在 該 資 訊 中 相 應 專 案頥 的 數 量 。NeighborLqiList — 近 鄰贊 記 錄 列 表 。 你佀 可 以 在 ZDProfile.h 中 查 找俁 neighborLqiItem_t 結構躬 體 來 獲 取 資 訊 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.5 ZDP_MgmtRtgReq ()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 為 目 的 設 備 產 生 請 求俠 來 返 回 它 的 路跡 由 表 。應 用 只 能 在 ZDConfig.h 檔 中 的 ZDO_MGMT_RTG_REQUEST 編 譯 標 記 被 設 定 或ZDO_MGMT_RTG_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 時頗 才 能 調 用 本 函 數 。函 數 原鞝 型afStatus_t ZDP_MgmtRtgReq( zAddrType_t *dstAddr,byte StartIndex, byte SecurityEnable );參 數 細 節dstAddr — 目 的 位 址佼 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.6 ZDP_MgmtRtgRsp()129華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 產 生 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_RTG_RESPONSE 編 譯 標 記 被 設 定 或 ZDO_MGMT_RTG_RESPONSE 作伿 為 一般 編 譯 標 記 被 設 定 , 當 一 個鞄 “ 管牤 理 路跡 由 請 求俠 ” 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。函 數 原鞝 型ZStatus_t ZDP_MgmtRtgRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte RoutingTableEntries,byte StartIndex, byte RoutingListCount,rtgItem_t *RoutingTableList, byte SecurityEnable );參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 在 ZComDef.h 中 被 定 義 為 ZStatus_t。RoutingTableEntries — 在 該 資 訊 中 可 能 的 專 案頥 的 數 量 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。 該 欄 位 是 回 應 資 訊 的 起 始 索 引 。RoutingListCount — 在 該 資 訊 中 相 應 專 案頥 的 數 量 。RoutingTableList — 路跡 由 記 錄 列 表 。 你佀 可 以 在 ZDProfile.h 中 查 找俁 rtgItem_t 結 構躬 體 來 獲取 資 訊 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.7 ZDP_MgmtBindReq ()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 為 目 的 設 備 產 生 請 求俠 來 返 回 它 的 綁 定 表 。應 用 只 能 在 ZDConfig.h 檔 中 的 ZDO_MGMT_BIND_REQUESTT 編 譯 標 記 被 設 定 或ZDO_MGMT_BIND_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 時頗 才 能 調 用 本 函 數 。函 數 原鞝 型afStatus_t ZDP_MgmtBindReq( zAddrType_t *dstAddr,130華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統byte StartIndex, byte SecurityEnable );參 數 細 節dstAddr — 目 的 位 址佼 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.8 ZDP_MgmtBindRsp()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 產 生 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_BIND_RESPONSE 編 譯 標 記 被 設 定 或 ZDO_MGMT_BIND_RESPONSE 作伿 為一 般 編 譯 標 記 被 設 定 , 當 一 個鞄 “ 管牤 理 綁 定 請 求俠 ” 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。函 數 原鞝 型ZStatus_t ZDP_MgmtBindRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte BindingTableEntries,byte StartIndex, byte BindingTableListCount,apsBindingItem_t *BindingTableList,byte SecurityEnable );參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 在 ZComDef.h 中 被 定 義 為 ZStatus_t。BindingTableEntries — 在 該 資 訊 中 可 能 的 專 案頥 的 數 量 。StartIndex — 回 應 設 備 可 能 有 更俐 多 的 回 應 專 案頥 , 在 一 個鞄 回 應 資 訊 中 無 法 全 部 裝 下 , 請求俠 者 可 以 指 定 一 個鞄 開 始 索 引 給 這 些 可 能 的 回 應 項 目 。 該 欄 位 是 回 應 資 訊 的 起 始 索 引 。BindingTableListCount — 在 該 資 訊 中 相 應 專 案頥 的 數 量 。BindingTableList— 綁 定 表 記 錄 列 表 。 你佀 可 以 在 APSMEDE.h 中 查 找俁 apsBindingItem_t131華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統結 構躬 體 來 獲 取 資 訊 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 在 ZComDef.h 檔 中 的 ZStatus_t 中 定 義 的 狀 態躊 值靹 。7.2.5.9 ZDP_MgmtLeaveReq ()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 為 目 的 設 備 產 生 請 求俠 來 離覭 開 網牺 路跡 或 請 求俠其 他 設 備 離覭 開 網牺 路跡 。 應 用 只 能 在 ZDConfig.h 檔 中 的 ZDO_MGMT_LEAVE_REQUEST 編 譯標 記 被 設 定 或 ZDO_MGMT_LEAVE_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 時頗 才 能 調 用 本 函數 。函 數 原鞝 型afStatus_t ZDP_MgmtLeaveReq( zAddrType_t *dstAddr,byte *IEEEAddr, byte SecurityEnable );參 數 細 節dstAddr — 目 的 位 址佼 。IEEEAddr — 要 離覭 開 的 設 備 的 64 位 元 IEEE 位 址佼 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.10 ZDP_MgmtLeaveRsp()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 產 生 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_LEAVE_RESPONSE 編 譯 標 記 被 設 定 或 ZDO_MGMT_LEAVE_RESPONSE 作伿為 一 般 編 譯 標 記 被 設 定 , 當 一 個鞄 “ 管牤 理 離覭 開 請 求俠 ” 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。132華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統函 數 原鞝 型ZStatus_t ZDP_MgmtLeaveRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 在 ZComDef.h 中 被 定 義 為 ZStatus_t。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 在 ZComDef.h 檔 中 的 ZStatus_t 中 定 義 的 狀 態躊 值靹 。7.2.5.11 ZDP_MgmtDirectJoinReq ()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 為 目 的 設 備 產 生 請 求俠 來 直 接 加 入 其 他 設備 。 應 用 只 能 在 ZDConfig.h 檔 中 的 ZDO_MGMT_JOINDIRECT_REQUEST 編 譯 標 記 被 設 定或 ZDO_MGMT_JOINDIRECT_REQUEST 作伿 為 一 般 編 譯 標 記 被 設 定 時頗 才 能 調 用 本 函 數 。函 數 原鞝 型afStatus_t ZDP_MgmtDirectJoinReq( zAddrType_t *dstAddr,SecurityEnable );byte *deviceAddr, byte capInfo, byte參 數 細 節dstAddr — 目 的 位 址佼 。deviceAddr — 要 加 入 設 備 的 64 位 元 IEEE 位 址佼 。capInfo — 要 加 入 設 備 的 能 力 資 訊 。類詑 型CAPINFO_ALTPANCOORDCAPINFO_DEVICETYPE_FFD位0x010x02133華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統CAPINFO_POWER_ACCAPINFO_RCVR_ON_IDLECAPINFO_SECURITY_CAPABLECAPINFO_ALLOC_ADDR0x040x080x400x80SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 該 函 數 使 用 AF 來 發 送 資 訊 , 因 此 狀 態躊 值靹 為 AF 狀 態躊 值靹 , 它 們靽 在 ZComDef.h檔 中 的 ZStatus_t 中 定 義 。7.2.5.12 ZDP_MgmtDirectJoinRsp()如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該 函 數 將 產 生 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_JOINDIRECT_RESPONSE 編 譯 標 記 被 設 定 或ZDO_MGMT_JOINDIRECT_RESPONSE 作伿 為 一 般 編 譯 標 記 被 設 定 , 當 一 個鞄 “ 管牤 理 離覭 開 請求俠 ” 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。函 數 原鞝 型ZStatus_t ZDP_MgmtDirectJoinRsp( byte TranSeq, zAddrType_t *dstAddr,byte Status, byte SecurityEnable );參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 在 ZComDef.h 中 被 定 義 為 ZStatus_t。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 在 ZComDef.h 檔 中 的 ZStatus_t 中 定 義 的 狀 態躊 值靹 。7.2.5.13 ZDP_MgmtPermitJoinReq()134華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統這 是 一 個鞄 直 接 調 用 ZDP_SendData () 的 巨 集 。 該 函 數 建 立 並 發 送Mgmt_Permit_Joining_req 來 請 求俠 一 個鞄 遠狚 端牣 設 備 來 允 許 或 不 允 許 關詉 聯 。 該 請 求俠 通 常 被 一 個鞄 除錯 工 具 或 網牺 路跡 管牤 理 設 備 產 生 。 另 外 , 如 果 欄 位 TC_Significance 被 設 定 為 0x01 並 且 遠狚 端牣 設 備是 認狀 證訥 中 心 , 認狀 證訥 中 心 的 認狀 證訥 政 策 將 被 影 響 。 有 關詉 接 收 到 Mgmt_Permit_Joining_req 的 詳 細過跸 程 可 在 最 新 的 ZigBee 規 範 的 2.4.3.3.7 節 找俁 到 。函 數 原鞝 型afStatus_t ZDP_MgmtPermitJoinReq( zAddrType_t *dstAddr, byte duration,byte TcSignificance, byte SecurityEnable );參 數 細 節dstAddr — 目 的 位 址佼 。duration — ZigBee 協 調 器赛 或 路跡 由 器赛 允 許 關詉 聯 的 時頗 間 長 度 ( 以 秒 為 單 位 )。 值靹 為 0x00 表示 允 許 被 禁 止 ; 值靹 為 0xFF 表 示 允 許 被 致 能 , 沒俯 有 時頗 間 限 制 。TcSignificance — 這 是 一 個鞄 Boolean 值靹 。 如 果 欄 位 TC_Significance 被 設 定 為 0x01 並 且遠狚 端牣 設 備 是 認狀 證訥 中 心 , 認狀 證訥 中 心 的 認狀 證訥 政 策 將 被 影 響 。 有 關詉 接 收 到 Mgmt_Permit_Joining_req的 詳 細 過跸 程 可 在 最 新 的 ZigBee 規 範 的 2.4.3.3.7 節 找俁 到 。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 在 ZComDef.h 檔 中 的 ZStatus_t 中 定 義 的 狀 態躊 值靹 。7.2.5.14 ZDP_MgmtPermitJoinRsp()這 是 一 個鞄 直 接 調 用 ZDP_SendData () 的 巨 集 。 如 果 設 備 支 援 該 命 令 ( 可 選 的 ), 調 用 該函 數 將 產 生 一 個鞄 對蹹 Mgmt_Permit_Joining_req 請 求俠 的 響 應 。 如 果 在 ZDConfig.h 檔 中 的ZDO_MGMT_PERMIT_JOIN_RESPONSE 編 譯 標 記 被 設 定 或ZDO_MGMT_PERMIT_JOIN_RESPONSE 作伿 為 一 般 編 譯 標 記 被 設 定 , 當 一 個鞄Mgmt_Permit_Joining_req 請 求俠 資 訊 被 收 到 時頗 ZDO 將 自 動 產 生 該 資 訊 。函 數 原鞝 型ZStatus_t ZDP_MgmtPermitJoinRsp( byte *TransSeq,zAddrType_t *dstAddr, byte *Statue, byte SecurityEnable );135華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節TransSeq — 傳 輸 序侤 號 。dstAddr — 目 的 位 址佼 。Status — 回 應 的 狀 態躊 。 值靹 為 SUCCESS 或 INVALID_REQUEST。SecurityEnable — 如 果 安 全 致 能 , 該 值靹 為 TRUE。返 回 值靹afStatus_t — 在 ZComDef.h 檔 中 的 ZStatus_t 中 定 義 的 狀 態躊 值靹 。7.3 應 用 框頦 架 (AF)應 用 框頦 架 層 是 應 用 的 透 過跸 空 中 的 資 料頔 與犕 APS 層 的 介 面 。 它 包 含佳 了 一 個鞄 應 用 發 送 資 料頔 到空 中 ( 穿 過跸 APS 和 網牺 路跡 層 ) 所 使 用 的 函 數 。 該 層 也 是 輸 入 資 料頔 資 訊 的 端牣 點 複 合 器赛 。7.3.1 概 述AF 給 應 用 提 供 了 一 下 功 能 :端牣 點 管牤 理發 送 和 接 收 資 料頔7.3.1.1 端牣 點 管牤 理在 ZigBee 網牺 路跡 中 , 每俟 一 個鞄 設 備 是 一 個鞄 節 點 。 每俟 一 個鞄 節 點 有 一 個鞄 長 位 址佼 和 短 位 址佼 , 節 點的 短 位 址佼 被 其 他 節 點 使 用 來 發 送 資 料頔 給 本 節 點 。 每俟 一 個鞄 節 點 有 241 個鞄 端牣 點 ( 端牣 點 0 保 留 , 端牣點 1~240 分 配 給 應 用 )。 每俟 一 個鞄 端牣 點 被 單 獨趸 定 址佼 。 當 一 個鞄 設 備 發 送 資 料頔 時頗 , 它 必 須 指 明 目 的節 點 的 短 位 址佼 和 接 收 資 料頔 的 端牣 點 。在 一 個鞄 ZigBee 網牺 路跡 中 , 一 個鞄 應 用 必 須 註 冊 一 個鞄 或 多 個鞄 端牣 點 來 發 送 和 接 收 資 料頔 。7.3.1.1.1 簡 單 描 述 符 — SimpleDescriptionFormat_t每俟 一 個鞄 端牣 點 必 須 有 一 個鞄 ZigBee 簡 單 描 述 符 。 其 他 設 備 可 以 查 詢 端牣 點 的 簡 單 描 述 符 來 獲知 設 備 的 種牞 類詑 。 該 結 構躬 體 應 被 應 用 所 定 義 。136華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統typedef struct{byte EndPoint;uint16 AppProfId;uint16 AppDeviceId;byte AppDevVer:4;byte Reserved:4; // AF_V1_SUPPORT uses for AppFlags:4.byte AppNumInClusters;cId_t *pAppInClusterList;byte AppNumOutClusters;cId_t *pAppOutClusterList;} SimpleDescriptionFormat_t;EndPoint — 端牣 點 編 號 1~240(0 被 保 留 )。 這 是 節 點 的 子 位 址佼 , 被 用 來 接 收 資 料頔 。AppProfId — 該 域 標 識訤 端牣 點 所 支 援 的 規 範 ID。 規 範 ID 應 該 由 ZigBee 聯 盟 提 供 。AppDeviceId — 該 域 標 識訤 端牣 點 所 支 援 的 設 備 ID。 設 備 ID 應 該 由 ZigBee 聯 盟 提 供 。AppDevVer — 標 識訤 設 備 上 該 端牣 點 上 實蹴 現 的 相 關詉 設 備 描 述 的 版 本 。0x00 表 示 版 本 1.0。Reserved — 未 使 用 。AppNumInClusters — 這 指 示 該 端牣 點 所 支 援 輸 入 簇 的 編 號 。pAppInClusterList — 指 向 輸 入 簇 ID 列 表 的 指 標 。AppNumOutClusters — 這 只 是 該 端牣 點 所 支 援 輸 出 簇 的 編 號 。pAppOutClusterList — 指 向 輸 出 簇 ID 列 表 的 指 標 。7.3.1.1.2 端牣 點 描 述 符 — endPointDesc_t該 結 構躬 體 是 端牣 點 描 述 符 。 節 點 中 想 要 / 被 使 用 的 每俟 個鞄 端牣 點 都 必 須 有 一 個鞄 端牣 點 描 述 符 ( 一般 在 應 用 中 被 定 義 )。typedef struct{byte endPoint;byte *task_id;SimpleDescriptionFormat_t *simpleDesc;afNetworkLatencyReq_t latencyReq;} endPointDesc_t;EndPoint — 端牣 點 編 號 1~240(0 被 保 留 )。 這 是 節 點 的 子 位 址佼 , 被 用 來 接 收 資 料頔 。task_id — 任 務 ID 指 針 。 當 一 個鞄 資 訊 被 接 收 , 該 任 務 ID 將 被 用 來 決俩 定 該 資 訊 被 發 送 到哪鞯 里倷 。 接 收 到 的 資 訊 被 打 包 為 一 個鞄 OSAL 資 訊 並 被 發 送 給 任 務 ( 命 令ID=AF_INCOMING_MSG_CMD)。simpleDesc — 指 向 該 端牣 點 的 ZigBee 簡 單 描 述 符 的 指 標 。137華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統latencyReq — 該 欄 位 必 須 用 noLatencyReqs 填 充 。7.3.1.1.3 afRegister()該 函 數 被 用 來 為 設 備 註 冊 一 個鞄 新 的 端牣 點 。 應 用 將 為 每俟 一 個鞄 將 要 應 用 的 端牣 點 調 用 該 函 數 。函 數 原鞝 型afStatus_t afRegister( endPointDesc_t *epDesc );參 數 細 節epDesc — 指 向 端牣 點 描 述 符 ( 上 面 已 定 義 ) 的 指 標 。返 回 值靹afStatus_t — 如 果 成 功 則 為 ZSuccess( 被 定 義 在 ZComDef.h 中 )。 錯 誤狃 在 ZComDef.h中 被 定 義 。7.3.1.1.4 afRegisterExtended()該 函 數 與犕 afRegister() 的 功 能 ( 註 冊 一 個鞄 端牣 點 ) 類詑 似 , 但伽 該 函 數 指 明 了 一 個鞄 回 調 函 數 , 當端牣 點 的 簡 單 描 述 符 被 查 詢 時頗 , 該 回 調 函 數 將 被 調 用 。函 數 原鞝 型epList_t *afRegisterExtended( endPointDesc_t *epDesc, pDescCB descFn );參 數 細 節epDesc — 指 向 端牣 點 描 述 符 ( 上 面 已 定 義 ) 的 指 標 。descFn — 回 調 函 數 指 標 。 當 端牣 點 的 簡 單 描 述 符 被 查 詢 時頗 , 該 回 調 函 數 將 被 調 用 。 本 函數 必 須 為 一 個鞄 簡 單 描 述 符 分 配 足倦 夠 的 空 間 , 並 填 充 該 簡 單 描 述 符 然 後 返 回 指 向 該 簡 單 描 述 符的 指 標 。 調 用 者 將 釋 放 該 描 述 符 。返 回 值靹epList * — 指 向 端牣 點 列 表 項 目 的 指 標 。 若 不 成 功 則 返 回 NULL。138華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.3.1.1.5 afFindEndPointDesc()使 用 該 函 數 從 一 個鞄 端牣 點 查 找俁 一 個鞄 端牣 點 描 述 符 。函 數 原鞝 型endPointDesc_t *afFindEndPointDesc( byte endPoint );參 數 細 節endPoint — 你佀 正 在 查 找俁 的 端牣 點 描 述 符 的 端牣 點 編 號 。返 回 值靹endPointDesc_t * — 指 向 端牣 點 描 述 符 的 指 標 。 如 果 不 成 功 則 返 回 NULL。7.3.1.1.6 afFindSimpleDesc()使 用 該 函 數 從 一 個鞄 端牣 點 查 找俁 一 個鞄 簡 單 描 述 符 。函 數 原鞝 型byte afFindSimpleDesc( SimpleDescriptionFormat_t **ppDesc, byte EP );參 數 細 節ppDesc — 指 向 一 個鞄 簡 單 描 述 符 的 指 標 的 指 標 。 該 空 間 必 須 已 被 分 配 。 如 果 記 憶赲 體 被 分配 並 且 需猀 要 被 釋 放 (osal_mem_free()), 該 函 數 的 返 回 值靹 將 通 知 。EP — 所 需猀 的 簡 單 描 述 符 的 端牣 點 。返 回 值靹如 果 返 回 值靹 非 0, 描 述 符 所 占 的 記 憶赲 體 必 須 被 調 用 者 釋 放 (osal_mem_free())。7.3.1.1.7 afGetMatch()預踣 設 情 況 下 , 設 備 將 回 應 ZDO 匹 配 描 述 符 請 求俠 。 你佀 可 以 使 用 本 函 數 來 獲 得 ZDO 匹 配描 述 符 回 應 的 設 定 。139華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統函 數 原鞝 型uint8 afGetMatch( uint8 ep );參 數 細 節ep — 獲 得 ZDO 匹 配 描 述 符 回 應 行 為 的 端牣 點 。返 回 值靹true 意 味 著 允 許 回 應 ,false 意 味 著 不 允 許 或 端牣 點 未 找俁 到 。7.3.1.1.8 afSetMatch()預踣 設 情 況 下 , 設 備 將 回 應 ZDO 匹 配 描 述 符 請 求俠 。 你佀 可 以 使 用 本 函 數 來 改俌 變 這 種牞 行 為 。例 如 , 如 果 ep 參 數 是 1 並 且 action 參 數 是 false,ZDO 將 不 會 回 應 端牣 點 1 的 ZDO 匹 配 描 述符 請 求俠 。函 數 原鞝 型uint8 afSetMatch( uint8 ep, uint8 action );參 數 細 節ep — 將 被 改俌 變 ZDO 匹 配 描 述 符 回 應 行 為 的 端牣 點 。action — true 表 示 允 許 回 應 ( 預踣 設 );false 表 示 不 允 許 回 應 。返 回 值靹true 表 示 成 功 ,false 表 示 端牣 點 未 找俁 到 。7.3.1.1.9 afNumEndPoints()使 用 該 函 數 來 查 找俁 已 註 冊 的 端牣 點 的 數 量 。函 數 原鞝 型byte afNumEndPoints( void );140華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節無返 回 值靹該 設 備 已 註 冊 的 端牣 點 的 數 量 ( 包 括 端牣 點 0 — 保 留 給 ZDO 使 用 的 端牣 點 )。7.3.1.1.10 afEndPoints ()該 函 數 將 返 回 已 註 冊 端牣 點 的 一 個鞄 陣 列 。 該 陣 列 中 保 存 端牣 點 編 號 。 使 用 afNumEndPoints()可 以 知 道跰 該 資 料頔 的 大 小 。 例 如 , 如 果 你佀 的 應 用 註 冊 了 2 個鞄 端牣 點 ( 端牣 點 10 和 15), 並 且 skipZDO參 數 為 true, 該 陣 列 將 包 含佳 2 個鞄 位 元 組 (10 和 15)。函 數 原鞝 型void afEndPoints( byte *epBuf, byte skipZDO );參 數 細 節epBuf — 指 向 保 存 端牣 點 編 號 的 陣 列 的 指 標 。 每俟 一 個鞄 端牣 點 將 佔 用 一 個鞄 位 元 組 來 儲 存 編號 。skipZDO — true 表 示 不 包 含佳 ZDO 端牣 點 ( 端牣 點 0)。返 回 值靹無7.3.1.2 發 送 資 料頔7.3.1.2.1 AF_DataRequest()調 用 該 函 數 來 發 送 資 料頔 。函 數 原鞝 型afStatus_t AF_DataRequest( afAddrType_t *dstAddr, endPointDesc_t *srcEP,uint16 cID, uint16 len, uint8 *buf, uint8 *transID,uint8 options, uint8 radius );141華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節dstAddr — 目 的 位 址佼 指 針 。 在 該 結 構躬 中 的 位 址佼 模 式 必 須 為 afAddrNotPresent( 讓 反 射韗器赛 ( 來 源 綁 定 ) 指 出 目 的 位 址佼 ) 或 afAddrGroup( 發 送 給 一 個鞄 組 ) 或 afAddrBroadcast( 發 送一 個鞄 廣 播 資 訊 ) 或 afAddr16Bit( 直 接 發 送 給 一 個鞄 節 點 ( 單 播 ))。srcEP — 發 送 端牣 點 的 端牣 點 描 述 符 指 針 。cID — 簇 ID。 資 訊 的 簇 ID 就 像踽 一 個鞄 資 訊 ID 並 且 在 規 範 中 是 唯 一 的 。len — buf 欄 位 的 位 元 組 數 量 。 要 被 發 送 的 位 元 組 數 量 。buf — 要 被 發 送 資 料頔 的 緩 衝 區 指 標 。transID — 傳 輸 序侤 號 指 針 。 如 果 緩 衝 的 資 料頔 被 發 送 , 序侤 號 將 被 該 函 數 增猹 加 。options — 可 由 下 面 的 選 項 進 行 或 操趀 作伿 構躬 成 :名 稱牟 值靹 描 述AF_FRAGMENTED 0x01 未 被 使 用 。AF_ACK_REQUEST 0x10APS ACK 被 請 求俠 。 這 是 一 個鞄 應 用 級 確 認狀 — 意 味 著 目 的 設備 將 確 認狀 資 訊 。 只 用 在 資 訊 的 直 接 發 送 ( 單 播 )。AF_DISCV_ROUTE 0x20 應 總 被 包 含佳 。AF_EN_SECURITY 0x40 不 需猀 要 。AF_SKIP_ROUTING 0x80設 定 該 選 項 將 導赫 致 設 備 跳跢 過跸 路跡 由 並 且 試 著 直 接 傳 送 資 訊( 不 多 跳跢 )。 終 端牣 設 備 將 不 會 首靫 先 發 送 資 訊 到 父 設 備 。 這 只對蹹 直 接 ( 單 播 ) 和 廣 播 資 訊 有 好 處 。radius — 最 大 跳跢 數 。 使 用 AF_DEFAULT_RADIUS 為 預踣 設 。返 回 值靹afStatus_t — 如 果 成 功 則 ZSuccess( 定 義 在 ZComDef.h 檔 案頥 中 )。Errors 定 義 在ZComDef.h 檔 案頥 中 。7.3.1.2.2 afDataReqMTU()使 用 該 函 數 來 查 找俁 基 於 輸 入 參 數 的 可 被 發 送 的 資 料頔 位 元 組 的 最 大 數 量 。函 數 原鞝 型uint8 afDataReqMTU( afDataReqMTU_t* fields );參 數 細 節fields — 將 被 發 送 的 資 訊 的 類詑 型 參 數 :142華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統typedef struct{uint8kvp;APSDE_DataReqMTU_t aps;} afDataReqMTU_t;kvp – 設 定 該 域 為 false。typedef struct{uint8 secure;} APSDE_DataReqMTU_t;aps.secure – 設 定 該 域 為 false。 如 果 你佀 在 一 個鞄 安 全 的 網牺 路跡 中 , 它 將 被 自 動 設 定 。。返 回 值靹可 被 發 送 的 位 元 組 的 最 大 數 量 。7.4 應 用 支 援 子 層7.4.1 概 述APS 提 供 了 以 下 管牤 理 功 能 供 高 層 存 取 :綁 定 表 管牤 理組 表 管牤 理快侳 速 位 址佼 查 找俁除 了 管牤 理 功 能 ,APS 還 提 供 應 用 不 可 存 取 的 資 料頔 服 務 。 應 用 應 該 透 過跸 AF 資 料頔 介 面(AF_DataRequest()) 來 發 送 資 料頔 。 要 使 用 綁 定 表 函 數 , 應 在 應 用 中 包 含佳 “BindingTable.h”文 件 。7.4.2 綁 定 表 管牤 理APS 綁 定 表 是 一 個鞄 被 定 義 在 靜 態躊 RAM 中 的 表 格頴 。 該 表 格頴 的 容韕 量 可 由 f8wConfig.cfg 中的 兩 個鞄 配 置 專 案頥 (NWK_MAX_BINDING_ENTRIES 和 MAX_BINDING_CLUSTER_IDS)控 制 。 NWK_MAX_BINDING_ENTRIES 定 義 了 表 中 條 目 的 數 量 ,MAX_BINDING_CLUSTER_IDS 定 義 了 每俟 一 個鞄 條 目 中 簇 ( 每俟 一 個鞄 16 位 ) 的 數 量 。143華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統該 表 在 nwk_globals.c 檔 中 被 定 義 。 如 果 REFLECTOR 或 COORDINATOR_BINDING被 定 義 , 該 表 才 會 被 包 含佳 ( 帶 有 以 下 的 函 數 )。 使 用 編 譯 指 令 REFLECTOR 來 在 APS 層 致 能來 源 綁 定 特顠 性 。7.4.2.1 綁 定 記 錄 結 構躬 體 — BindingEntry_ttypedef struct{uint16 srcIdx;uint8 srcEP;uint8 dstGroupMode;uint16 dstIdx;uint8 dstEP;uint8 numClusterIds;uint16 clusterIdList[MAX_BINDING_CLUSTER_IDS];} BindingEntry_t;srcIdx — 來 源 位 址佼 的 位 址佼 管牤 理 索 引 。 位 址佼 管牤 理 保 持 源 位 址佼 的 IEEE 位 址佼 和 短 位 址佼 。 此處 的 源 位 址佼 是 指 在 綁 定 記 錄 中 的 源 位 址佼 。srcEP — 來 源 端牣 點 。dstGroupMode — 目 的 位 址佼 類詑 型 。 如 果 該 域 為 0, 目 的 位 址佼 是 一 個鞄 正 常 的 位 址佼 。 如 果 該域 為 1,dstIdx 是 目 的 組 位 址佼 。dstIdx — 如 果 dstGroupMode 為 0, 該 域 包 含佳 一 個鞄 目 的 位 址佼 的 位 址佼 管牤 理 索 引 。 如 果dstGroupMode 為 1, 該 區 域 包 含佳 目 的 組 位 址佼 。dstEP — 目 的 端牣 點 。numClusterIds — clusterIdList 中 條 目 的 數 量 。clusterIdList — 簇 ID 列 表 。 儲 存 在 由 MAX_BINDING_CLUSTER_IDS [ 在f8wConfig.cfg 中 定 義 ]. 定 義 的 陣 列 中 的 簇 ID 的 最 大 數 量 。7.4.2.2 綁 定 表 維犁 護7.4.2.2.1 bindAddEntry()使 用 該 函 數 來 給 綁 定 表 添 加 一 個鞄 條 目 。 雖 然 每俟 一 個鞄 表 條 目 可 以 有 多 個鞄 簇 ID, 該 函 數 可以 只 添 加 一 個鞄 簇 ID 給 一 個鞄 已 存 在 的 綁 定 表 記 錄 。函 數 原鞝 型BindingEntry_t *bindAddEntry( zAddrType_t *srcAddr, byte srcEpInt,zAddrType_t *dstAddr, byte dstEpInt,144華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統byte numClusterIds, uint16 *clusterIds );參 數 細 節srcAddr — 綁 定 記 錄 源 位 址佼 。 該 位 址佼 的 類詑 型 必 須 包 含佳 Addr16Bit 或 Addr64Bit 位 址佼 類詑型 。addr 域 必 須 被 恰 當 填 寫 。srcEpInt — 綁 定 記 錄 源 端牣 點 。dstAddr — 綁 定 記 錄 目 的 位 址佼 。 該 位 址佼 的 類詑 型 必 須 包 含佳 Addr16Bit 或 Addr64Bit 或AddrGroup addrMode 位 址佼 類詑 型 。 如 果 addrMode 是 AddrGroup, 組 ID 要 放 入 addr.shortAddr域 中 。dstEpInt — 綁 定 記 錄 目 的 端牣 點 。 如 果 dstAddr 是 組 位 址佼 , 該 參 數 無 用 。numClusterIds — clusterIds 中 簇 ID 的 數 量 。clusterIds — 指 向 要 添 加 簇 ID 的 一 個鞄 列 表 的 指 標 。 它 指 向 16 位 簇 ID 的 一 個鞄 列 表(numClusterIds)。返 回 值靹BindingEntry_t * — 指 向 被 新 加 入 的 綁 定 條 目 的 指 標 。 如 果 未 加 入 則 為 NULL。7.4.2.2.2 bindRemoveEntry()從 綁 定 表 中 移 除 一 個鞄 綁 定 條 目 。函 數 原鞝 型byte bindRemoveEntry( BindingEntry_t *pBind );參 數 細 節pBind — 指 向 要 從 綁 定 表 中 移 除 的 那倴 個鞄 條 目 的 指 針 。返 回 值靹true — 該 函 數 不 進 行 有 效頒 條 目 的 檢 查 。7.4.2.2.3 bindRemoveClusterIdFromList()該 函 數 從 一 個鞄 已 存 在 的 綁 定 表 條 目 的 簇 ID 列 表 中 移 除 已 個鞄 簇 ID。函 數 原鞝 型145華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統byte bindRemoveClusterIdFromList( BindingEntry_t *entry, uint16 clusterId );參 數 細 節entry — 指 向 一 個鞄 有 效頒 綁 定 表 條 目 的 指 標 。clusterId — 要 從 簇 列 表 中 移 除 的 16 位 簇 ID。返 回 值靹如 果 在 移 除 之 後 列 表 中 至 少 還 有 一 個鞄 簇 ID 則 為 true, 若 簇 列 表 為 空 則 為 false。 如 果 簇列 表 為 空 , 它 應 當 被 調 用 函 數 佑 除 。7.4.2.2.4 bindAddClusterIdToList()該 函 數 將 添 加 一 個鞄 簇 ID 到 一 個鞄 已 存 在 的 綁 定 表 條 目 的 簇 ID 列 表 中 。函 數 原鞝 型byte bindAddClusterIdToList( BindingEntry_t *entry, uint16 clusterId );參 數 細 節entry — 指 向 一 個鞄 有 效頒 綁 定 表 條 目 的 指 標 。clusterId — 要 添 加 到 簇 列 表 中 的 16 位 元 簇 ID。返 回 值靹如 果 加 入 到 列 表 中 則 為 true, 若 未 加 入 則 為 false。false 意 味 著 要 麼猕 條 目 為 空 , 要 麼猕 簇ID 的 數 量 已 達跲 到 最 大 值靹 (MAX_BINDING_CLUSTER_IDS)。7.4.2.2.5 bindRemoveDev()使 用 該 函 數 來 移 除 給 定 位 址佼 的 所 有 綁 定 表 條 目 。 如 果 位 址佼 匹 配 綁 定 記 錄 中 的 源 位 址佼 或 目的 位 址佼 , 條 目 將 被 移 除 。函 數 原鞝 型void bindRemoveDev( zAddrType_t *Addr );參 數 細 節146華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統Addr — 要 從 綁 定 表 移 除 的 位 址佼 。addrMode 應 為 Addr16Bit,Addr64Bit 或 AddrGroup。返 回 值靹無7.4.2.2.6 bindRemoveSrcDev()使 用 該 函 數 來 移 除 給 定 源 位 址佼 和 端牣 點 的 所 有 綁 定 表 條 目 。 如 果 位 址佼 匹 配 綁 定 記 錄 中 的 來源 位 址佼 或 目 的 位 址佼 , 條 目 將 被 移 除 。函 數 原鞝 型void bindRemoveSrcDev( zAddrType_t *srcAddr, uint8 ep );參 數 細 節srcAddr — 要 從 綁 定 表 移 除 的 位 址佼 。addrMode 應 為 Addr16Bit,Addr64Bit。ep — 來 源 端牣 點 。返 回 值靹無7.4.2.2.7 bindUpdateAddr ()使 用 該 函 數 來 更俐 新 綁 定 表 中 的 短 位 址佼 。 具 有 oldAddr 的 所 有 條 目 將 被 用 newAddr 替 換 。函 數 原鞝 型void bindUpdateAddr( uint16 oldAddr, uint16 newAddr );參 數 細 節oldAddr — 舊 的 短 位 址佼 。newAddr — 新 的 短 位 址佼 。返 回 值靹無147華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.4.2.3 綁 定 表 搜 索7.4.2.3.1 bindFindExisting ()綁 定 表 。搜 索 一 個鞄 已 存 在 的 綁 定 表 條 目 。 使 用 一 個鞄 源 位 址佼 和 端牣 點 以 及 一 個鞄 目 的 位 址佼 和 端牣 點 來 搜 索函 數 原鞝 型BindingEntry_t *bindFindExisting( zAddrType_t *srcAddr, byte srcEpInt,zAddrType_t *dstAddr, byte dstEpInt );參 數 細 節srcAddr — 綁 定 記 錄 來 源 位 址佼 。addrMode 應 為 Addr16Bit,Addr64Bit 類詑 型 。srcEpInt — 綁 定 記 錄 來 源 端牣 點 。dstAddr — 綁 定 記 錄 目 的 位 址佼 。addrMode 應 為 Addr16Bit,Addr64Bit 或 AddrGroup 類詑型 。 如 果 addrMode 為 AddrGroup, 組 ID 被 放 在 addr.shortAddr 域 中 。dstEpInt — 綁 定 記 錄 目 的 端牣 點 。 如 果 dstAddr 為 組 位 址佼 , 該 參 數 無 效頒 。返 回 值靹BindingEntry_t * — 指 向 要 查 找俁 的 綁 定 條 目 。 若 未 找俁 到 , 則 為 NULL。7.4.2.3.2 bindIsClusterIDinList()檢 查 一 個鞄 綁 定 表 條 目 中 的 簇 ID 列 表 中 的 一 個鞄 簇 ID。函 數 原鞝 型byte bindIsClusterIDinList( BindingEntry_t *entry, uint16 clusterId );參 數 細 節entry — 指 向 一 個鞄 有 效頒 的 綁 定 表 條 目 的 指 標 。 該 函 數 將 搜 索 該 條 目 。clusterId — 要 搜 索 的 16 位 簇 ID。返 回 值靹若 簇 ID 在 列 表 中 則 為 true, 若 未 找俁 到 則 為 false。148華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.4.2.4 綁 定 表 統 計7.4.2.4.1 bindNumBoundTo()使 用 該 函 數 來 計 算牨 給 定 位 址佼 和 端牣 點 的 所 有 綁 定 表 條 目 。函 數 原鞝 型byte bindNumBoundTo( zAddrType_t *devAddr, byte devEpInt, byte srcMode );參 數 細 節devAddr — 要 搜 索 綁 定 表 中 的 位 址佼 。 addrMode 應 為 Addr16Bit , Addr64Bit 或AddrGroup。devEpInt — 端牣 點 。srcMode — 為 true 時頗 搜 索 源 位 址佼 , 為 false 時頗 搜 索 目 的 位 址佼 。返 回 值靹找俁 到 的 給 定 位 址佼 和 端牣 點 的 所 有 綁 定 表 條 目 的 數 量 。7.4.2.4.2 bindNumOfEntries()本 函 數 返 回 綁 定 表 中 綁 定 條 目 的 總 數 。 每俟 一 個鞄 簇 ID 被 認狀 為 是 一 個鞄 條 目 。 因 此 , 如 果 有2 個鞄 記 錄 條 目 , 每俟 一 個鞄 條 目 有 3 個鞄 簇 ID, 那倴 麼猕 該 函 數 的 返 回 值靹 應 為 6。函 數 原鞝 型uint16 bindNumOfEntries( void );參 數 細 節無返 回 值靹被 找俁 到 的 條 目 總 數 。149華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.4.2.4.3 bindCapacity()本 函 數 返 回 在 綁 定 表 中 可 容韕 納 的 綁 定 條 目 的 最 大 數 量 以 及 已 被 使 用 的 綁 定 條 目 數 量 。 這種牞 情 況 下 , 是 計 算牨 記 錄 ( 不 是 簇 ID)。 因 此 , 如 果 有 2 個鞄 記 錄 條 目 但伽 每俟 一 個鞄 條 目 有 3 個鞄 簇 ID,則 在 usedEntries 中 的 函 數 返 回 值靹 將 是 2。函 數 原鞝 型void bindCapacity( uint16 *maxEntries, uint16 *usedEntries );參 數 細 節maxEntries — 指 向 最 大 條 目 變 數 的 指 標 ( 作伿 為 本 函 數 的 輸 出 )。 該 數 量 可 透 過跸 改俌 變f8wConfig.cfg 中 的 NWK_MAX_BINDING_ENTRIES 來 改俌 變 。usedEntries — 指 向 被 使 用 條 目 變 數 的 指 標 ( 作伿 為 本 函 數 的 輸 出 )。返 回 值靹無7.4.2.5 綁 定 表 非 易 事 性 儲 存 (NV)要 使 用 本 節 中 的 任 何 函 數 ,NV_RESTORE 必 須 被 定 義 在 編 譯 器赛 預踣 處 理 中 或 定 義 在f8wConfig.cfg. 檔 案頥 中 。BindWriteNV() 是 唯 一 被 建 議 給 使 用 者 應 用 使 用 的 綁 定 NV 函 數 。 還 有 其 他 的 綁 定 表 NV函 數 , 但伽 綁 定 NV 初 始 化 和 讀 函 數 在 設 備 啟 動 時頗 自 動 被 調 用 。7.4.2.5.1 BindWriteNV()該 函 數 將 寫 綁 定 表 到 非 易 失 性 記 憶赲 體 ,函 數 原鞝 型void BindWriteNV( void );參 數 細 節無150華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹無7.4.3 組 表 管牤 理APS 組 表 是 定 義 在 已 分 配 RAM(osal_mem_alloc()) 中 的 一 個鞄 鏈訿 表 。 因 此 當 組 被 加 入 到表 中 時頗 , 使 用 的 OSAL 堆 的 總 量 將 增猹 加 。 表 的 最 大 容韕 量 可 透 過跸 f8wConfig.cfg 檔 中 的APS_MAX_GROUPS 被 改俌 變 。 表 被 定 義 在 nwk_globals.c 檔 案頥 中 。 在 你佀 的 應 用 中 如 果 使 用 組表 函 數 , 應 當 包 含佳 “aps_groups.h” 檔 案頥 。7.4.3.1 組 表 結 構躬7.4.3.1.1 組 — aps_Group_t下 面 是 組 的 結 構躬 體 , 它 包 含佳 組 ID 和 一 個鞄 文 本 方 式 的 組 名 稱牟 。typedef struct{uint16 ID;uint8 name[APS_GROUP_NAME_LEN];} aps_Group_t;ID — 16 位 的 組 ID。 可 被 透 過跸 空 中 設 定 。name — 文 本 方 式 的 組 名 稱牟 。APS_GROUP_NAME_LEN 被 定 義 為 16 並 不 能 被 更俐 改俌 。7.4.3.1.2 組 表 條 目 — apsGroupItem_t下 面 是 一 個鞄 組 表 記 錄 ( 條 目 ) 的 結 構躬 體 。 組 表 是 一 個鞄 鏈訿 表 , 我侷 們靽 強 烈顝 建 議 你佀 使 用 組 表 搜索 和 維犁 護 函 數 來 截躒 斷 組 表 。typedef struct apsGroupItem{struct apsGroupItem *next;uint8endpoint;aps_Group_t group;} apsGroupItem_t;next — 指 向 下 一 個鞄 組 表 條 目 的 指 標 。 組 表 示 一 個鞄 鏈訿 結 表 。NULL 指 示 這 是 鏈訿 表 中 最 後151華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統一 個鞄 條 目 。endpoint — 端牣 點 , 它 將 接 收 被 發 送 給 一 個鞄 組 ( 在 group 域 中 指 定 ) 的 資 訊 。group — 組 ID 和 組 名 稱牟 。7.4.3.2 組 表 維犁 護7.4.3.2.1 aps_AddGroup()調 用 該 函 數 來 增猹 加 一 個鞄 組 到 組 表 中 。 定 義 一 個鞄 aps_Group_t 類詑 型 的 變 數 並 賦 值靹 , 然 後 調用 該 函 數 。 如 果 NV_RESTORE 被 致 能 , 該 函 數 將 在 非 易 失 性 記 憶赲 體 中 保 存 更俐 新 。函 數 原鞝 型ZStatus_t aps_AddGroup( uint8 endpoint, aps_Group_t *group );參 數 細 節endpoint — 端牣 點 , 它 將 接 收 被 發 送 給 一 個鞄 組 ( 在 group 域 中 指 定 ) 的 資 訊 。group — 組 ID 和 組 名 稱牟 。返 回 值靹如 果 加 入 成 功 則 為 ZSuccess。 錯 誤狃 為 ZApsDuplicateEntry,ZApsTableFull 或 ZMemError( 在 ZComDef.h 檔 中 被 定 義 )。7.4.3.2.2 aps_ RemoveGroup()調 用 該 函 數 來 從 組 表 中 移 除 一 個鞄 組 。 如 果 NV_RESTORE 被 致 能 , 該 函 數 將 在 非 易 失 性記 憶赲 體 中 保 存 更俐 新 。函 數 原鞝 型uint8 aps_RemoveGroup( uint8 endpoint, uint16 groupID );參 數 細 節endpoint — 被 從 一 個鞄 組 中 移 除 的 端牣 點 。group — 被 從 一 個鞄 表 中 移 除 的 組 的 組 ID。152華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹移 除 成 功 則 為 true, 如 果 組 / 端牣 點 未 找俁 到 則 為 false。7.4.3.2.3 aps_ RemoveAllGroup ()調 用 該 函 數 來 從 組 表 中 為 一 個鞄 給 定 端牣 點 移 除 所 有 組 。 如 果 NV_RESTORE 被 致 能 , 該 函數 將 在 非 易 失 性 記 憶赲 體 中 保 存 更俐 新 。函 數 原鞝 型void aps_RemoveAllGroup( uint8 endpoint );參 數 細 節endpoint — 被 從 一 個鞄 組 表 中 移 除 的 端牣 點 。返 回 值靹無7.4.3.3 組 表 搜 索7.4.3.3.1 aps_ FindGroup ()調 用 該 函 數 來 在 組 表 中 為 一 個鞄 端牣 點 和 組 ID 查 找俁 一 個鞄 組 。函 數 原鞝 型aps_Group_t *aps_FindGroup( uint8 endpoint, uint16 groupID );參 數 細 節endpoint — 端牣 點 。group — 組 ID。返 回 值靹指 向 被 找俁 到 組 的 指 標 , 若 未 找俁 到 則 為 NULL。153華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.4.3.3.2 aps_ FindGroupForEndpoint ()調 用 該 函 數 來 從 一 個鞄 組 ID 中 查 找俁 一 個鞄 端牣 點 。 該 函 數 被 用 來 跳跢 過跸 一 個鞄 端牣 點 , 然 後 返 回 下一 個鞄 端牣 點 。 使 用 該 函 數 可 以 查 找俁 一 個鞄 組 ID 的 所 有 端牣 點 。函 數 原鞝 型uint8 aps_FindGroupForEndpoint( uint16 groupID, uint8 lastEP );參 數 細 節groupID — 組 ID。lastEP — 在 返 回 一 個鞄 端牣 點 前 要 跳跢 過跸 的 端牣 點 。 使 用 APS_GROUPS_FIND_FIRST 來 指 示你佀 想 首靫 先 找俁 到 的 端牣 點 。返 回 值靹返 回 匹 配 groupID 和 lastEP 的 端牣 點 , 如 果 沒俯 有 ( 更俐 多 的 ) 端牣 點 被 找俁 到 則 為APS_GROUPS_EP_NOT_FOUND。7.4.3.3.3 aps_ FindAllGroupsForEndpoint()調 用 該 函 數 來 獲 得 一 個鞄 端牣 點 所 屬 組 的 一 個鞄 列 表 。 調 用 者 必 須 提 供 儲 存 空 間 。函 數 原鞝 型uint8 aps_FindAllGroupsForEndpoint( uint8 endpoint, uint16 *groupList );參 數 細 節endpoint — 端牣 點 。groupList — 指 向 一 個鞄 位 置 的 指 標 , 該 位 置 被 用 來 建 立 端牣 點 所 屬 組 的 一 個鞄 列 表 。 調 用 者必 須 提 供 儲 存 空 間 。 為 了 安 全 起 見倝 , 調 用 者 應 當 建 立 ( 本 地 的 或 已 分 配 的 ) 一 個鞄 陣 列 , 該 陣列 具 有 APS_MAX_GROUPS 個鞄 16 位 元 的 元 素 。返 回 值靹返 回 所 複 製犸 的 數 量 。154華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.4.3.3.4 aps_ CountGroups()調 用 該 函 數 來 獲 得 一 個鞄 給 定 端牣 點 所 屬 組 的 數 量 。函 數 原鞝 型uint8 aps_CountGroups( uint8 endpoint );參 數 細 節endpoint — 端牣 點 。返 回 值靹返 回 組 的 數 量 。7.4.3.3.5 aps_ CountAllGroups ()調 用 該 函 數 來 獲 得 一 個鞄 組 表 中 所 有 條 目 的 數 量 。函 數 原鞝 型uint8 aps_CountAllGroups( void );參 數 細 節無返 回 值靹返 回 組 的 數 量 。7.4.3.4 組 表 非 易 失 性 儲 存如 果 NV_RESTORE 被 定 義 在 編 譯 器赛 預踣 處 理 中 或 在 f8wConfig.cfg 中 , 當 一 個鞄 組 被 加 入或 移 除 時頗 , 組 表 將 被 自 動 保 存 。 在 設 備 啟 動 時頗 , 組 表 NV 初 始 化 和 恢 復 將 被 自 動 調 用 。如 果 一 個鞄 組 表 條 目 被 使 用 者 應 用 修鞈 改俌 , 必 須 直 接 調 用 Aps_GroupsWriteNV()。155華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.4.3.4.1 aps_GroupsWriteNV()該 函 數 將 寫 組 表 到 非 易 失 性 記 憶赲 體 中 , 並 且 如 果 使 用 者 應 用 改俌 變 了 一 個鞄 組 表 條 目 的 任 何內 容韕 ( 添 加 , 移 除 或 全 部 移 除 ) 該 函 數 將 被 調 用 。 如 果 組 表 透 過跸 組 加 入 、 移 除 或 全 部 移 除 函數 被 正 常 更俐 新 , 就 沒俯 有 必 要 調 用 該 函 數 。函 數 原鞝 型void aps_GroupsWriteNV( void );參 數 細 節無返 回 值靹無7.4.4 快侳 速 位 址佼 查 找俁APS 提 供 了 一 對蹹 函 數 來 提 供 快侳 速 位 址佼 轉視 換 ( 查 找俁 )。 如 果 查 找俁 已 經 被 完侖 成 並 被 儲 存 到 位址佼 管牤 理 器赛 ( 參 見倝 網牺 路跡 層 ) 中 或 這 是 你佀 自 己 的 位 址佼 , 這 兩 個鞄 函 數 允 許 你佀 轉視 換 短 位 址佼 為 IEEE 位址佼 ( 或 轉視 換 IEEE 位 址佼 為 短 位 址佼 )。7.4.4.1 APSME_LookupExtAddr()如 果 位 址佼 已 經 在 位 址佼 管牤 理 器赛 中 , 該 函 數 將 基 於 一 個鞄 網牺 路跡 位 址佼 ( 短 位 址佼 ) 來 查 找俁 一 個鞄 擴 充位 址佼 (IEEE 位 址佼 )。 該 函 數 不 會 開 始 一 個鞄 網牺 路跡 ( 透 過跸 空 中 的 )IEEE 位 址佼 查 找俁 。函 數 原鞝 型uint8 APSME_LookupExtAddr(uint16 nwkAddr, uint8* extAddr );參 數 細 節nwkAddr — 被 用 來 查 找俁 擴 充 位 址佼 的 網牺 路跡 位 址佼 。extAddr — 要 被 查 找俁 的 擴 充 位 址佼 。 它 是 一 個鞄 指 向 記 憶赲 體 的 指 標 , 當 IEEE 位 址佼 被 找俁 到時頗 , 將 被 複 製犸 到 該 指 標 指 向 的 記 憶赲 體 空 間 。156華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹找俁 到 則 為 true, 未 找俁 到 則 為 false。7.4.4.2 APSME_ LookupNwkAddr ()如 果 位 址佼 已 經 在 位 址佼 管牤 理 器赛 中 , 該 函 數 將 基 於 一 個鞄 擴 充 位 址佼 (IEEE 位 址佼 ) 來 查 找俁 一 個鞄網牺 路跡 位 址佼 ( 短 位 址佼 )。 該 函 數 不 會 開 始 一 個鞄 網牺 路跡 ( 透 過跸 空 中 的 )IEEE 位 址佼 查 找俁 。函 數 原鞝 型uint8 APSME_LookupNwkAddr( uint8* extAddr, uint16* nwkAddr );參 數 細 節extAddr — 被 用 來 查 找俁 網牺 路跡 位 址佼 的 擴 充 位 址佼 。 它 是 一 個鞄 指 向 記 憶赲 體 的 指 標 , 當 IEEE 位址佼 被 找俁 到 時頗 , 將 被 複 製犸 到 該 指 標 指 向 的 記 憶赲 體 空 間 。nwkAddr — 要 被 查 找俁 的 網牺 路跡 位 址佼 。 它 是 一 個鞄 指 向 記 憶赲 體 的 指 標 , 當 短 位 址佼 被 找俁 到 時頗 ,將 被 複 製犸 到 該 指 標 指 向 的 記 憶赲 體 空 間 。返 回 值靹找俁 到 則 為 true, 未 找俁 到 則 為 false。7.5 網牺 路跡 層 (NWK)NWK 提 供 了 以 下 管牤 理 功 能 供 高 層 存 取 :網牺 路跡 管牤 理位 址佼 管牤 理網牺 路跡 變 數 和 實蹴 用 函 數除 了 管牤 理 功 能 ,NWK 還 提 供 應 用 不 可 存 取 的 資 料頔 服 務 。 應 用 應 該 透 過跸 AF 資 料頔 介 面(AF_DataRequest()) 來 發 送 資 料頔 。157華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.5.4.1 網牺 路跡 管牤 理7.5.4.1.1 NLME_NetworkDiscoveryRequest()該 函 數 請 求俠 網牺 路跡 層 去 發 現 近 鄰贊 路跡 由 器赛 。 該 函 數 應 該 在 加 入 網牺 路跡 前 被 調 用 以 完侖 成 一 個鞄 網牺 路跡掃 描 。 掃 描 證訥 實蹴 ( 結 果 ) 將 被 返 回 在 ZDO_NetworkDiscoveryConfirmCB() 回 調 中 。 最 好 不 要使 用 該 函 數 ( 除 非 你佀 徹躇 底 理 解 網牺 路跡 加 入 過跸 程 ) 而 使 用 ZDO_StartDevice()。函 數 原鞝 型ZStatus_t NLME_NetworkDiscoveryRequest( uint32 ScanChannels,byte ScanDuration );參 數 細 節ScanChannels — 在 該 通 道跰 進 行 發 現 。 該 參 數 應 是 一 個鞄 點 陣 圖蹙 , 每俟 一 個鞄 位 對蹹 應 一 個鞄 掃 描通 道跰 。 對蹹 於 2.4GHz 頻 段 , 只 有 通 道跰 11~26(0x07FFF800) 可 用 。.ScanDuration — 指 明 在 一 個鞄 新 網牺 路跡 被 啟 動 前 , 每俟 一 個鞄 通 道跰 可 為 其 他 網牺 路跡 被 掃 描 多 長 時頗間 。 它 的 範 圍 與犕 以 下 信 標 順 序侤 相 同 :名 稱牟 值靹 描 述BEACON_ORDER_15_MSEC 0 15.36 毫 秒BEACON_ORDER_30_MSEC 1 30.72 毫 秒BEACON_ORDER_60_MSEC 2 61.44 毫 秒BEACON_ORDER_120_MSEC 3 122.88 毫 秒BEACON_ORDER_240_MSEC 4 245.76 毫 秒BEACON_ORDER_480_MSEC 5 491.52 毫 秒BEACON_ORDER_1_SECOND 6 983.04 毫 秒BEACON_ORDER_2_SECONDS 7 1966.08 毫 秒BEACON_ORDER_4_SECONDS 8 3932.16 毫 秒BEACON_ORDER_7_5_SECONDS 9 7864.32 毫 秒BEACON_ORDER_15_SECONDS 10 15728.64 毫 秒BEACON_ORDER_31_SECONDS 11 31457.28 毫 秒BEACON_ORDER_1_MINUTE 12 62914.58 毫 秒BEACON_ORDER_2_MINUTES 13 125829.12 毫 秒BEACON_ORDER_4_MINUTES 14 251658.24 毫 秒BEACON_ORDER_NO_BEACONS 15 無 信 標 傳 送158華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.2 NLME_NwkDiscReq2()該 函 數 請 求俠 網牺 路跡 層 去 發 現 近 鄰贊 路跡 由 器赛 。 該 函 數 應 該 在 加 入 網牺 路跡 前 被 調 用 以 完侖 成 一 個鞄 網牺 路跡掃 描 , 但伽 是 你佀 不 能 期 望 加 入 。 掃 描 證訥 實蹴 ( 結 果 ) 將 被 返 回 在 ZDO_NetworkDiscoveryConfirmCB()回 調 中 。 在 回 調 ( 結 果 ) 後 , 調 用 NLME_NwkDiscTerm() 來 清 除 該 行 動 。函 數 原鞝 型ZStatus_t NLME_NwkDiscReq2( NLME_ScanFields_t* fields );參 數 細 節fields — 掃 描 結 構躬 :typedef struct{uint32 channels;uint8 duration;} NLME_ScanFields_t;channels — 在 該 通 道跰 進 行 發 現 。 該 參 數 應 是 一 個鞄 點 陣 圖蹙 , 每俟 一 個鞄 位 對蹹 應 一 個鞄 掃 描通 道跰 。 對蹹 於 2.4GHz 頻 段 , 只 有 通 道跰 11~26(0x07FFF800) 可 用 。duration — 指 明 在 一 個鞄 新 網牺 路跡 被 啟 動 前 , 每俟 一 個鞄 通 道跰 可 為 其 他 網牺 路跡 被 掃 描 多 長 時頗間 。 它 的 範 圍 與犕 信 標 順 序侤 相 同 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.3 NLME_NwkDiscTerm()該 函 數 將 清 除 NLME_NwkDiscReq2() 行 動 。159華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統函 數 原鞝 型void NLME_NwkDiscTerm( void );參 數 細 節無返 回 值靹無7.5.4.1.4 NLME_NetworkFormationRequest()該 函 數 允 許 下 一 高 層 請 求俠 設 備 形侫 成 一 個鞄 新 網牺 路跡 並 成 為 該 新 網牺 路跡 的 ZigBee 協 調 器赛 。 該 行動 的 證訥 實蹴 ( 結 果 ) 將 被 返 回 在 ZDO_NetworkFormationConfirmCB() 回 調 中 。 最 好 不 要 使 用 該函 數 而 使 用 ZDO_StartDevice()。函 數 原鞝 型ZStatus_t NLME_NetworkFormationRequest( uint16 PanId, uint32 ScanChannels,byte ScanDuration, byte BeaconOrder,byte SuperframeOrder, byte BatteryLifeExtension );參 數 細 節PanId — 該 參 數 指 明 將 被 該 設 備 啟 動 的 網牺 路跡 所 用 的 標 識訤 。 有 效頒 範 圍 從 0 到 0x3FFF。 如果 使 用 0xFFFF,NWK 層 將 給 網牺 路跡 選 擇赾 一 個鞄 個鞄 域 網牺 識訤 別低 字 (PAN ID)。 如 果 發 現 一 個鞄 網牺 路跡 有相 同 的 PAN ID, 那倴 麼猕 NWK 層 選 擇赾 的 這 個鞄 PAN ID 將 被 增猹 量 , 直 到 它 是 唯 一 的 。ScanChannels — 在 該 通 道跰 進 行 發 現 。 該 參 數 應 是 一 個鞄 點 陣 圖蹙 , 每俟 一 個鞄 位 對蹹 應 一 個鞄 掃 描通 道跰 。 對蹹 於 2.4GHz 頻 段 , 只 有 通 道跰 11~26(0x07FFF800) 可 用 。ScanDuration — 指 明 在 一 個鞄 新 網牺 路跡 被 啟 動 前 , 每俟 一 個鞄 通 道跰 可 為 其 他 網牺 路跡 被 掃 描 多 長 時頗間 。 它 的 範 圍 與犕 信 標 順 序侤 相 同 。BeaconOrder — 對蹹 於 ZigBee-2006 規 範 , 該 參 數 應 為BEACON_ORDER_NO_BEACONS。SuperframeOrder — 對蹹 於 ZigBee-2006 規 範 , 該 參 數 應 為BEACON_ORDER_NO_BEACONS。160華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統BatteryLifeExtension — 如 果 該 值靹 為 true,NWK 層 將 請 求俠 ZigBee 協 調 器赛 被 啟 動 為 支 援電踝 池 壽蹢 命 延 長 模 式 。 如 果 該 值靹 為 false,NWK 層 將 請 求俠 ZigBee 協 調 器赛 被 啟 動 為 不 支 援 電踝 池壽蹢 命 延 長 模 式 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.5 NLME_StartRouterRequest()該 函 數 允 許 下 一 高 層 請 求俠 設 備 啟 動 後 作伿 為 ZigBee 路跡 由 器赛 。 該 行 動 的 證訥 實蹴 ( 結 果 ) 將 被返 回 在 ZDO_StartRouterConfirmCB() 回 調 中 。 最 好 不 要 使 用 該 函 數 而 使 用ZDO_StartDevice()。函 數 原鞝 型ZStatus_t NLME_StartRouterRequest( byte BeaconOrder, byte SuperframeOrder,byte BatteryLifeExtension );參 數 細 節BeaconOrder — 對蹹 於 ZigBee-2006 規 範 , 該 參 數 應 為BEACON_ORDER_NO_BEACONS。SuperframeOrder — 對蹹 於 ZigBee-2006 規 範 , 該 參 數 應 為BEACON_ORDER_NO_BEACONS。BatteryLifeExtension — 如 果 該 值靹 為 true,NWK 層 將 請 求俠 ZigBee 協 調 器赛 被 啟 動 為 支 援電踝 池 壽蹢 命 延 長 模 式 。 如 果 該 值靹 為 false,NWK 層 將 請 求俠 ZigBee 協 調 器赛 被 啟 動 為 不 支 援 電踝 池壽蹢 命 延 長 模 式 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.6 NLME_JoinRequest()該 函 數 允 許 下 一 高 層 請 求俠 設 備 把便 它 自 己 加 入 一 個鞄 網牺 路跡 。 該 行 動 的 證訥 實蹴 ( 結 果 ) 將 被 返 回在 ZDO_JoinConfirmCB() 回 調 中 。 最 好 不 要 使 用 該 函 數 而 使 用 ZDO_StartDevice()。161華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統函 數 原鞝 型ZStatus_t NLME_JoinRequest( uint8 *ExtendedPANID, uint16 PanId,byte Channel, byte CapabilityInfo );參 數 細 節ExtendedPANID — 該 參 數 包 含佳 你佀 正 在 嘗蹋 試 加 入 的 網牺 路跡 的 擴 充 PAN ID。PanId — 該 參 數 指 明 了 該 設 備 將 加 入 的 網牺 路跡 所 用 的 標 識訤 。 有 效頒 範 圍 從 0 到 0x3FFF 並 且應 從 一 個鞄 掃 描 中 被 獲 取 。Channel — 所 期 望 網牺 路跡 工 作伿 的 通 道跰 。 對蹹 於 2.4GHz 頻 段 , 只 有 通 道跰 11~26 可 用 。CapabilityInfo — 指 明 加 入 設 備 的 可 選 的 能 力 :類詑 型 位CAPINFO_ALTPANCOORD0x01CAPINFO_DEVICETYPE_FFD 0x02CAPINFO_POWER_AC0x04CAPINFO_RCVR_ON_IDLE0x08CAPINFO_SECURITY_CAPABLE 0x40CAPINFO_ALLOC_ADDR0x80返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.7 NLME_ReJoinRequest()使 用 該 函 數 來 重 新 加 入 一 個鞄 該 設 備 已 經 被 加 入 的 網牺 路跡 。 該 行 動 的 證訥 實蹴 ( 結 果 ) 將 被 返 回在 ZDO_JoinConfirmCB() 回 調 中 。函 數 原鞝 型ZStatus_t NLME_ReJoinRequest( void );參 數 細 節無162華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.8 NLME_OrphanJoinRequest()該 函 數 請 求俠 網牺 路跡 層 孤 立 加 入 網牺 路跡 。 該 函 數 是 帶 有 一 個鞄 隱 含佳 加 入 的 掃 描 。 最 好 不 要 使 用 該函 數 ( 除 非 你佀 徹躇 底 理 解 網牺 路跡 加 入 過跸 程 ) 而 使 用 ZDO_StartDevice()。函 數 原鞝 型ZStatus_t NLME_OrphanJoinRequest( uint32 ScanChannels, byte ScanDuration );參 數 細 節ScanChannels — 在 該 通 道跰 進 行 發 現 。 該 參 數 應 是 一 個鞄 點 陣 圖蹙 , 每俟 一 個鞄 位 對蹹 應 一 個鞄 掃 描通 道跰 。 對蹹 於 2.4GHz 頻 段 , 只 有 通 道跰 11~26(0x07FFF800) 可 用 。.ScanDuration — 指 明 在 一 個鞄 新 網牺 路跡 被 啟 動 前 , 每俟 一 個鞄 通 道跰 可 為 其 他 網牺 路跡 被 掃 描 多 長 時頗間 。 它 的 範 圍 與犕 信 標 順 序侤 相 同 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.9 NLME_PermitJoiningRequest()該 函 數 定 義 了 一 個鞄 協 調 器赛 或 路跡 由 器赛 的 下 一 高 層 實蹴 體 如 何 在 一 個鞄 固 定 時頗 期 允 許 設 備 加 入它 的 網牺 路跡 。函 數 原鞝 型ZStatus_t NLME_PermitJoiningRequest( byte PermitDuration );參 數 細 節163華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統PermitDuration — 一 個鞄 設 備 ( 協 調 器赛 或 路跡 由 器赛 ) 將 被 允 許 關詉 聯 的 時頗 間 長 度 。0x00 表 示禁 止 ,0xFF 表 示 致 能 且 沒俯 有 時頗 間 限 制 。0x01~0xFE 是 允 許 加 入 的 秒 的 數 量 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.10 NLME_DirectJoinRequest()該 函 數 允 許 下 一 高 層 請 求俠 一 個鞄 協 調 器赛 或 路跡 由 器赛 設 備 上 的 NWK 層 加 入 其 他 設 備 作伿 為 它的 子 設 備 。函 數 原鞝 型ZStatus_t NLME_DirectJoinRequest( byte *DevExtAddress, byte capInfo );參 數 細 節DevExtAddress — 指 向 IEEE 位 址佼 的 指 標 , 該 IEEE 位 址佼 是 要 被 作伿 為 子 設 備 的 IEEE 位址佼 。capInfo — 指 明 加 入 設 備 的 可 選 的 能 力 。 參 看 NLME_JoinRequest() 函 數 中 的CapabilityInfo。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.11 NLME_LeaveReq()該 函 數 允 許 下 一 高 層 請 求俠 該 設 備 或 其 他 設 備 離覭 開 網牺 路跡 。 目 前 , 調 用 該 函 數 將 不 會 引 起 離覭開 設 備 的 父 設 重 新 分 配 設 備 位 址佼 。函 數 原鞝 型ZStatus_t NLME_LeaveReq( NLME_LeaveReq_t* req );164華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節req — 離覭 開 請 求俠 結 構躬 體 :typedef struct{uint8* extAddr;uint8 removeChildren;uint8 rejoin;uint8 silent;} NLME_LeaveReq_t;extAddr — 離覭 開 設 備 的 擴 充 位 址佼 。removeChildren — 如 果 離覭 開 設 備 的 子 設 備 也 離覭 開 則 為 true, 如 果 只 是 離覭 開 設 備 離覭 開 則 為false。 只 有 false 應 被 使 用 。rejoin — true 將 允 許 離覭 開 設 備 重 加 入 網牺 路跡 。flase 將 不 允 許 離覭 開 設 備 重 加 入 網牺 路跡 。slient — true/flase。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.12 NLME_RemoveChild()該 函 數 允 許 下 一 高 層 請 求俠 設 備 移 除 子 設 備 。函 數 原鞝 型void NLME_RemoveChild( uint8* extAddr, uint8 dealloc );參 數 細 節extAddr — 要 被 移 除 的 設 備 的 擴 充 位 址佼 。dealloc — true/false。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。165華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.5.4.1.13 NwkPollReq()調 用 該 函 數 來 手 動 請 求俠 一 個鞄 MAC 資 料頔 請 求俠 。 該 函 數 只 為 終 端牣 設 備 。 一 般 情 況 下 , 對蹹 於終 端牣 設 備 , 查 詢 被 網牺 路跡 層 自 動 處 理 , 並 且 應 用 可 以 透 過跸 NLME_SetPollRate() 來 操趀 縱 查 詢 率 。如 果 查 詢 率 被 設 定 為 0, 應 用 只 能 透 過跸 調 用 該 函 數 來 手 動 查 詢 。函 數 原鞝 型ZMacStatus_t NwkPollReq( byte securityEnable );參 數 細 節securityEnable — 允 許 該 參 數 設 定 為 false。返 回 值靹ZMacStatus_t — 與犕 ZStatus_t 相 同 , 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.1.14 NLME_SetPollRate()使 用 該 函 數 來 設 定 / 更俐 改俌 網牺 路跡 查 詢 率 。 該 函 數 只 為 終 端牣 設 備 。 一 般 情 況 下 , 對蹹 於 終 端牣 設備 , 查 詢 被 網牺 路跡 層 自 動 處 理 , 並 且 應 用 可 以 透 過跸 NLME_SetPollRate() 來 操趀 縱 查 詢 率 。函 數 原鞝 型void NLME_SetPollRate( uint16 newRate );參 數 細 節newRate — 子 設 備 與犕 父 設 備 之 間 資 料頔 查 詢 時頗 間 ( 以 毫 秒 為 單 位 )。 該 值靹 為 0 禁 止 查 詢 ,該 值靹 為 1 只 做 1 次 資 料頔 查 詢 。返 回 值靹無166華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統7.5.4.1.15 NLME_SetQueuedPollRate()使 用 該 函 數 來 設 定 / 更俐 改俌 排 隊 查 詢 率 。 該 函 數 只 為 終 端牣 設 備 。 如 果 一 個鞄 資 料頔 查 詢 導赫 致 一個鞄 資 料頔 資 訊 , 查 詢 率 被 立 即佘 設 定 給 排 隊 查 詢 率 來 排 出 父 設 備 的 資 料頔 佇 列 。函 數 原鞝 型void NLME_SetQueuedPollRate( uint16 newRate );參 數 細 節newRate — 排 隊 查 詢 率 的 毫 秒 數 。 該 值靹 為 0 禁 止 排 隊 查 詢 ,0x01~0xFF 提 供 毫 秒 數 。返 回 值靹無 。7.5.4.2 位 址佼 管牤 理位 址佼 管牤 理 提 供 低佂 級 位 址佼 管牤 理 。 目 前 , 使 用 者 不 應 該 直 接 存 取 該 模 式 。 支 援 本 地 位 址佼 查 找俁由 函 數 APSME_LookupExtAddr 和 APSME_LookupNwkAddr 提 供 。 支 援 遠狚 端牣 位 址佼 查 找俁 由 函數 ZDP_IEEEAddrReq 和 ZDP_NwkAddrReq 提 供 。 如 果 使 用 者 請 求俠 儲 存 在 本 地 設 備 上 的 遠狚端牣 位 址佼 , 一 個鞄 專 有 的 方 案頥 應 被 實蹴 施 。7.5.4.3 網牺 路跡 變 數 和 實蹴 用 函 數7.5.4.3.1 NLME_GetExtAddr()該 函 數 將 返 回 一 個鞄 指 標 , 該 指 標 指 向 設 備 的 64 位 元 IEEE 位 址佼 。函 數 原鞝 型byte *NLME_GetExtAddr( void );167華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節無返 回 值靹指 向 64 位 擴 充 位 址佼 的 指 標 。7.5.4.3.2 NLME_GetShortAddr()該 函 數 將 返 回 設 備 的 網牺 路跡 位 址佼 (16 位 元 短 位 址佼 )。函 數 原鞝 型uint16 NLME_GetShortAddr( void );參 數 細 節無返 回 值靹網牺 路跡 位 址佼 (16 位 短 位 址佼 )7.5.4.3.3 NLME_GetCoordShortAddr()該 函 數 將 返 回 設 備 的 父 設 備 的 網牺 路跡 位 址佼 (16 位 元 短 位 址佼 )。 這 不 是 ZigBee 協 調 器赛 的 短位 址佼 ( 總 為 0x0000)。 在 MAC 術 語犾 中 , 父 設 備 被 稱牟 為 協 調 器赛 。函 數 原鞝 型uint16 NLME_GetCoordShortAddr( void );參 數 細 節168華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統無返 回 值靹網牺 路跡 位 址佼 (16 位 元 短 位 址佼 )7.5.4.3.4 NLME_GetCoordExtAddr()該 函 數 將 返 回 設 備 的 父 設 備 的 64 位 元 IEEE 位 址佼 。 這 不 是 ZigBee 協 調 器赛 的 擴 充 位 址佼 。在 MAC 術 語犾 中 , 父 設 備 被 稱牟 為 協 調 器赛 。函 數 原鞝 型void NLME_GetCoordExtAddr( byte *buf );參 數 細 節buf — 指 向 父 設 備 擴 充 位 址佼 的 緩 衝 區 的 指 標 。返 回 值靹無7.5.4.3.5 NLME_SetRequest()該 函 數 允 許 下 一 高 層 設 定 一 個鞄 NIB( 網牺 路跡 資 訊 庫韧 ) 的 屬 性 值靹 。函 數 原鞝 型ZStatus_t NLME_SetRequest( ZNwkAttributes_t NIBAttribute,uint16 Index,void *Value );參 數 細 節169華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統NIBAttribute — 只 支 援 屬 性 nwkProtocolVersion。Index — 未 使 用 。Value — 指 向 包 含佳 屬 性 值靹 的 記 憶赲 體 位 置 的 指 標 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.3.6 NLME_GetRequest()該 函 數 允 許 下 一 高 層 獲 取 一 個鞄 NIB( 網牺 路跡 資 訊 庫韧 ) 的 屬 性 值靹 。函 數 原鞝 型ZStatus_t NLME_GetRequest( ZNwkAttributes_t NIBAttribute,uint16 Index, void *Value );參 數 細 節NIBAttribute — 只 支 援 屬 性 nwkCapabilityInfo 、 nwkNumNeighborTableEntries 、nwkNeighborTable、nwkNumRoutingTableEntries、nwkRoutingTableIndex — 未 使 用 。Value — 指 向 包 含佳 屬 性 值靹 的 記 憶赲 體 位 置 的 指 標 。返 回 值靹ZStatus_t — 定 義 在 ZComDef.h 中 的 狀 態躊 值靹 。7.5.4.3.7 NLME_IsAddressBroadcast()根頨 據赼 設 備 的 功 能 , 本 函 數 評 估 所 提 供 的 位 址佼 並 確 定 它 是 否佞 是 該 設 備 有 效頒 的 廣 播 位 址佼 。函 數 原鞝 型addr_filter_t NLME_IsAddressBroadcast(uint16 shortAddress);170華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統參 數 細 節shortAddress — 要 被 測 試 的 位 址佼 。返 回 值靹addr_filter_t — 為 以 下 類詑 型 :類詑 型 描 述ADDR_NOT_BCAST 不 是 任 何 一 類詑 廣 播 位 址佼 ( 包 括 保 留 值靹 )ADDR_BCAST_FOR_ME 位 址佼 是 一 個鞄 廣 播 位 址佼 並 且 我侷 符 合 。ADDR_BCAST_NOT_ME 位 址佼 是 一 個鞄 廣 播 位 址佼 但伽 我侷 不 是 目 標 。7.5.4.3.8 NLME_GetProtocolVersion()該 函 數 使 用 GEI API 存 取 NIB 以 取 回 目 前 的 協 定 版 本 。 這 是 一 個鞄 簡 便 的 方 法 , 否佞 則 要分 兩 步俞 來 進 行 。函 數 原鞝 型byte NLME_GetProtocolVersion();參 數 細 節無返 回 值靹返 回 的 協 定 版 本 的 低佂 位 元 組 :類詑 型 值靹ZB_PROT_V1_0 1ZB_PROT_V1_1 27.5.4.3.9 NLME_SetBroadcastFilter()171華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統該 函 數 根頨 據赼 設 備 能 力 來 設 定 一 個鞄 位 遮贆 罩 。 它 將 被 用 來 處 理 有 效頒 的 廣 播 位 址佼 。函 數 原鞝 型void NLME_SetBroadcastFilter(byte capabilities);參 數 細 節capabilities — 設 備 能 力 。 被 用 來 確 定 設 備 可 以 處 理 什 麼猕 樣 的 廣 播 類詑 型 。返 回 值靹無7.5.4.4 網牺 路跡 非 易 失 性 儲 存如 果 NV_RESTORE 被 定 義 在 編 譯 器赛 預踣 處 理 中 或 定 義 在 f8wConfig.cfg 中 , 當 一 個鞄 設 備加 入 後 , 網牺 路跡 資 訊 庫韧 NIB 將 自 動 保 存 。NIB NV 初 始 化 和 恢 復 函 數 在 設 備 啟 動 時頗 被 自 動 調 用 。如 果 NIB(_NIB) 被 使 用 者 應 用 修鞈 改俌 , 必 須 直 接 調 用 NLME_UpdateNV()。7.5.4.4.1 NLME_UpdateNV()該 函 數 將 寫 NIB 到 非 易 失 性 記 憶赲 體 。 如 果 使 用 者 應 用 改俌 變 了 NIB 中 的 任 何 東 西 , 該 函數 應 被 調 用 。 如 果 NIB 是 透 過跸 加 入 被 正 常 更俐 新 , 不 需猀 要 調 用 該 函 數 。函 數 原鞝 型void NLME_UpdateNV( byte enables );參 數 細 節enables — 要 保 存 條 目 的 位 遮贆 罩 :名 稱牟 值靹 描 述NWK_NV_NIB_ENABLE 0x01 保 存 網牺 路跡 層 NIB。172華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統NWK_NV_DEVICELIST_ENABLE 0x02 保 存 設 備 列 表 。NWK_NV_BINDING_ENABLE 0x04 保 存 綁 定 表 。NWK_NV_ADDRMGR_ENABLE 0x08 保 存 位 址佼 管牤 理 表 。返 回 值靹無8. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 應 用 實蹴 例8.1 簡 介本 節 包 含佳 4 個鞄 簡 單 的 Z-<strong>Stack</strong> 應 用 實蹴 例 :Generic,Serial,Transmit 和 HomeAutomation。它 們靽 分 別低 位 於 :...\Projects\zstack\Samples\GenericAp...\Projects\zstack\Utilities\SerialApp...\Projects\zstack\Utilities\Transmit...\Projects\zstack\HomeAutomation這 些 應 用 實蹴 例 中 的 每俟 一 個鞄 實蹴 例 , 對蹹 於 使 用 TI 發 行 的 ZigBee 協 定 堆 疊 來 實蹴 現 一 個鞄 特顠 定 應用 物 件 來 說狄 , 僅 僅 是 一 個鞄 簡 單 的 開 始 。每俟 一 個鞄 應 用 實蹴 例 使 用 ZDO 公 共 介 面 的 最 小 子 集 , 這 將 在 一 個鞄 ZigBee 網牺 路跡 中 合 理 可 行 地建 立 一 個鞄 設 備 。 此 外 , 所 有 的 應 用 實蹴 例 佐 用 OSAL API 功 能 : 透 過跸 發 送 和 接 收 訊 息韵 進 行 內 部任 務 通 信 , 設 定 和 接 收 任 務 事 件 , 設 定 和 接 收 計 時頗 器赛 回 調 , 使 用 動 態躊 記 憶赲 體 等 。 每俟 一 個鞄 應 用實蹴 例 使 用 HAL API 函 數 來 控 制 LED。 因 此 , 任 何 一 個鞄 應 用 實蹴 例 都 可 作伿 為 可 被 複 製犸 的 例 子 ,透 過跸 將 它 們靽 複 製犸 和 粘 貼 , 或 者 作伿 為 使 用 者 應 用 的 基 本 程 式 , 使 用 者 可 以 向 其 中 添 加 額覷 外 的 應用 物 件 。根頨 據赼 定 義 , 一 個鞄 應 用 物 件 只 能 支 援 一 個鞄 單 一 規 範 ;Z-<strong>Stack</strong> 應 用 實蹴 例 中 的 每俟 一 個鞄 都 實蹴 行了 一 個鞄 非 官 方 的 私倌 有 規 範 。 應 用 實蹴 例 使 用 的 私倌 有 規 範 ID 可 以 被 任 意 選 擇赾 , 但伽 決俩 不 能 被 用 在開 發 實蹴 驗 室 以 外 。 1 雖 然 一 個鞄 私倌 有 規 範 可 使 用 一 個鞄 唯 一 的 網牺 路跡 配 置 , 但伽 是 應 用 實蹴 例 被 實蹴 施 和測 試 時頗 , 使 用 的 是 由 已 知 的 HomeControlLighting (0x0100) 堆 疊 規 範 規 定 的 網牺 路跡 配 置 。任 何 應 用 物 件 必 須 建 立 在 一 個鞄 唯 一 的 端牣 點 之 上 ; 任 何 端牣 點 是 被 一 個鞄 簡 單 描 述 符 定 義 的 。在 應 用 實蹴 例 中 的 簡 單 描 述 符 中 的 端牣 點 的 號 碼 可 以 被 任 意 選 擇赾 。每俟 個鞄 應 用 實蹴 例 只 示 例 了 一 個鞄 應 用 物 件 , 因 此 只 支 援 一 個鞄 相 應 的 規 範 。 但伽 是 請 記 住 , 兩 個鞄或 更俐 多 應 用 物 件 可 被 在 同 一 設 備 上 實蹴 例 化 。 當 在 同 一 設 備 上 實蹴 例 化 一 個鞄 以 上 應 用 物 件 時頗 , 每俟一 個鞄 應 用 物 件 必 須 實蹴 行 一 個鞄 唯 一 的 規 範 ID 並 且 建 立 在 一 個鞄 唯 一 的 端牣 點 號 之 上 。 應 用 實蹴 例 滿軈173華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統足倦 唯 一 ID 和 端牣 點 編 號 的 要 求俠 , 並 且 可 以 透 過跸 很 少 的 修鞈 改俌 被 合 併 到 一 個鞄 設 備 。 28.2 OSAL 任 務8.2.1 初 始 化OSAL 被 設 計 和 以 源 碼 方 式 發 佈但 是 為 了 使 Z-<strong>Stack</strong> 使 用 者 可 以 修鞈 改俌 整超 個鞄 的 OSAL 功 能 。設 計 目 標 是 不 必 修鞈 改俌 OSAL, 而 按 官 方 發 佈但 的 來 使 用 Z-<strong>Stack</strong>。 唯 一 例 外 的 是 OSAL 任 務 初始 化 函 數 osalAddTasks (), 該 函 數 必 須 被 使 用 者 實蹴 現 。 應 用 實蹴 例 已 經 在 一 個鞄 專 門 的 檔 中 實蹴 現了 該 函 數 , 檔 案頥 名 類詑 似 這 樣 :OSAL_“ 應 用 名 稱牟 ”.c( 如 OSAL_GenericApp.c)。 作伿 為 板 上電踝 和 Z-<strong>Stack</strong> 初 始 化 過跸 程 的 一 部 分 ,BSP 將 調 用 osalAddTasks() 。8.2.2 組 織OSAL 實蹴 現 了 協 作伿 的 、 任 務 服 務 迴 圈 。Z-<strong>Stack</strong> 的 每俟 一 個鞄 主 要 子 系倐 統 運跮 行 為 一 個鞄 OSAL任 務 。 使 用 者 在 應 用 中 必 須 建 立 至 少 一 個鞄 OSAL 任 務 。 這 在 執 行 osalAddTasks() 函 數 時頗 被 完侖成 。 應 用 實蹴 例 清 楚 地 展韙 示 了 在 所 有 的 Z-<strong>Stack</strong> 任 務 之 後 , 使 用 者 如 何 必 須 添 加 一 個鞄osalTaskAdd() 函 數 調 用 來 作伿 為 至 少 一 個鞄 的 使 用 者 任 務 。8.2.3 系倐 統 服 務OSAL 和 HAL 系倐 統 服 務 具 有 互 斥 性 — 只 有 一 個鞄 OSAL 任 務 可 以 註 冊 為 鍵 盤 ( 按 鍵 按 下 )通 知 和 串 列 口 活 動 通 知 。 同 樣 的 任 務 不 必 在 兩 個鞄 系倐 統 服 務 中 都 註 冊 ,Z-<strong>Stack</strong> 任 務 在 兩 個鞄 系倐統 服 務 中 都 不 註 冊 — 它 們靽 被 留 給 使 用 者 應 用 。8.2.4 應 用 設 計使 用 者 可 以 為 每俟 一 個鞄 應 用 物 件 實蹴 例 化 建 立 一 個鞄 任 務 或 者 只 用 一 個鞄 任 務 服 務 所 有 的 應 用物 件 。 當 進 行 上 述 設 計 選 擇赾 時頗 , 以 下 是 一 些 需猀 要 考 慮 的 因 素 。8.2.4.1 一 個鞄 OSAL 任 務 到 多 個鞄 應 用 物 件一 個鞄 OSAL 任 務 到 多 個鞄 應 用 物 件 的 設 計 有 下 面 這 些 佐 弊躄 : 佐 : 當 接 收 一 個鞄 互 斥 的 任 務 事 件 ( 按 鍵 按 下 或 串 列 埠 活 動 ) 時頗 , 所 採 取 的 行 動 是 簡單 的 。 佐 : 多 個鞄 OSAL 任 務 結 構躬 體 所 需猀 要 的 堆 空 間 被 節 約 了 。174華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 弊躄 : 當 接 收 一 個鞄 輸 入 的 AF 資 訊 或 一 個鞄 AF 資 料頔 確 認狀 時頗 , 所 採 取 的 行 動 是 複 雜覮 的 —多 路跡 分 解 預踣 期 的 應 用 物 件 的 重 擔趃 落 在 一 個鞄 單 一 的 使 用 者 任 務 上 。 弊躄 : 對蹹 匹 配 描 述 符 請 求俠 ( 即佘 自 動 匹 配 ) 的 服 務 發 現 的 處 理 更俐 複 雜覮 — 一 個鞄 靜 態躊 的 本 地標 記 必 須 被 維犁 護 以 便 對蹹 ZDO_NEW_DSTADDR 訊 息韵 採 取 適贅 當 行 動 。8.2.4.2 一 個鞄 OSAL 任 務 到 一 個鞄 應 用 物 件一 個鞄 OSAL 任 務 到 一 個鞄 應 用 物 件 的 設 計 的 佐 弊躄 與犕 上 述 一 個鞄 OSAL 任 務 到 多 個鞄 應 用 物 件的 設 計 的 佐 弊躄 相 反 : 佐 : 一 個鞄 ZDO_NEW_DSTADDR 訊 息韵 只 在 應 用 物 件 嘗蹋 試 自 動 匹 配 時頗 被 接 收 。 佐 : 一 個鞄 輸 入 的 AF 資 訊 或 一 個鞄 AF 資 料頔 確 認狀 已 經 被 協 定 堆 疊 更俐 下 層 給 多 路跡 分 解了 , 因 此 接 收 應 用 物 件 被 預踣 期 的 接 收 。 弊躄 : 多 個鞄 OSAL 任 務 結 構躬 體 需猀 要 佔 用 堆 空 間 。 弊躄 : 如 果 兩 個鞄 或 多 個鞄 任 務 使 用 相 同 的 互 斥 資 源 , 當 收 到 一 個鞄 互 斥 任 務 事 件 時頗 所 採 取的 行 動 可 能 更俐 複 雜覮 。8.2.5 強 制 性 方 法事 件 。任 何 OSAL 任 務 必 須 執 行 兩 個鞄 方 法 : 一 個鞄 用 來 執 行 任 務 初 始 化 ; 另 一 個鞄 用 來 處 理 任 務8.2.5.1 任 務 初 始 化執 行 任 務 初 始 化 的 回 調 函 數 在 應 用 實蹴 例 中 以 類詑 似 “ 應 用 名 稱牟 ” _Init ( 如GenericApp_Init()) 的 方 式 命 名 。 任 務 初 始 化 函 數 應 該 完侖 成 如 下 工 作伿 : 為 應 用 物 件 初 始 化 本 地 / 特顠 定 變 數 。 任 何 長 期 駐贲 留 堆 記 憶赲 體 的 分 配 單 元 必 須 被 建 立以 便 促 進 OSAL 更俐 有 效頒 地 進 行 堆 記 憶赲 體 管牤 理 。 透 過跸 AF 層 註 冊 ( 如 afRegister()) 實蹴 例 化 相 應 的 應 用 物 件 。 註 冊 可 應 用 的 OSAL 或 HAL 系倐 統 服 務 ( 如 RegisterForKeys())。8.2.5.2 任 務 事 件 處 理處 理 任 務 事 件 的 回 調 函 數 在 應 用 實蹴 例 中 以 類詑 似 “ 應 用 名 稱牟 ” _ProcessEvent( 如GenericApp_ProcessEvent()) 的 方 式 命 名 。 任 何 OSAL 任 務 , 除 強 制 性 事 件 外 , 可 以 定 義 多達跲 15 個鞄 事 件 。175華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.2.6 強 制 性 事 件強 制 性 事 件 只 有 一 個鞄 , 它 是 任 務 事 件 SYS_EVENT_MSG (0x8000)。 它 被 OSAL 任 務 設計 預踣 留 和 要 求俠 。8.2.6.1 SYS_EVENT_MSG (0x8000)全 局侚 系倐 統 訊 息韵 透 過跸 SYS_EVENT_MSG (0x8000)( 在 ZComDef.h 檔 中 定 義 ) 發 送 。 任 務事 件 處 理 應 當 處 理 全 局侚 系倐 統 訊 息韵 中 以 下 這 些 最 小 子 集 。 建 議 : 處 理 以 下 訊 息韵 可 以 直 接 從 應 用實蹴 例 程 式 學赩 習 或 學赩 習 GenericApp 中 的 程 式 流 程 。 38.2.6.1.1 AF_DATA_CONFIRM_CMD這 是 一 個鞄 OTA( 透 過跸 空 中 的 ) 指 示 , 它 指 示 了 透 過跸 調 用 AF_DataRequest() 而 被 成 功 啟 動的 每俟 一 個鞄 資 料頔 請 求俠 的 結 果 。ZSuccess 表 明 資 料頔 請 求俠 已 經 被 成 功 的 OTA 傳 輸 。 如 果 是 帶 有AF_ACK_REQUEST 標 記 被 設 定 的 資 料頔 請 求俠 , 那倴 麼猕 ZSuccess 表 明 資 訊 在 最 終 目 的 地 被 成 功接 收 。 否佞 則 ,ZSuccess 只 能 表 明 資 訊 被 成 功 發 送 給 了 下 一 跳跢 。 48.2.6.1.2 AF_INCOMING_MSG_CMD這 是 一 個鞄 對蹹 輸 入 AF 資 訊 的 指 示 。8.2.6.1.3 KEY_CHANGE這 是 一 個鞄 對蹹 一 個鞄 按 鍵 按 下 動 作伿 的 指 示 。8.2.6.1.4 ZDO_NEW_DSTADDR這 是 一 個鞄 指 示 , 用 來 指 示 對蹹 一 個鞄 匹 配 描 述 符 請 求俠 ( 即佘 自 動 匹 配 ) 的 一 個鞄 回 應 。8.2.6.1.5 ZDO_STATE_CHANGE這 是 一 個鞄 對蹹 網牺 路跡 狀 態躊 已 經 發 生 變 化 的 指 示 。8.3 網牺 路跡 形侫 成176華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統一 個鞄 應 用 實蹴 例 編 譯 為 一 個鞄 協 調 器赛 將 形侫 成 一 個鞄 網牺 路跡 , 該 網牺 路跡 在 DEFAULT_CHANLIST 中定 義 的 通 道跰 中 的 一 個鞄 通 道跰 上 。 若 ZDAPP_CONFIG_PAN_ID 值靹 被 定 義 為 0xFFFF, 協 調 器赛 將基 於 它 自 己 的 IEEE 位 址佼 建 立 一 個鞄 隨 機趙 的 個鞄 域 網牺 識訤 別低 字 ( PAN ID )。 否佞 則 , 選 擇赾ZDAPP_CONFIG_PAN_ID 值靹 為 PAN ID。 一 個鞄 應 用 實蹴 例 編 譯 為 一 個鞄 路跡 由 器赛 或 終 端牣 設 備 將 試著 加 入 在 DEFAULT_CHANLIST 中 定 義 的 通 道跰 中 的 一 個鞄 通 道跰 上 的 一 個鞄 網牺 路跡 。 如 果ZDAPP_CONFIG_PAN_ID 值靹 沒俯 被 定 義 為0xFFFF , 路跡 由 器赛 將 被 限 制 只 能 加 入 由ZDAPP_CONFIG_PAN_ID 值靹 標 識訤 的 網牺 路跡 。 注 意 : 當 ZDAPP_CONFIG_PAN_ID 值靹 沒俯 被 定 義為 0xFFFF, 因 為 一 個鞄 協 調 器赛 和 一 個鞄 路跡 由 器赛 或 終 端牣 設 備 的 行 為 差韤 異 , 將 產 生 意 想 不 到 的 結 果 。如 果 ZDAPP_CONFIG_PAN_ID 被 定 義 為 一 個鞄 小 於 等 於 0x3FFF 的 合 法 值靹 , 那倴 麼猕 協 調 器赛 將 只嘗蹋 試 建 立 一 個鞄 由 該 值靹 作伿 為 PAN ID 的 網牺 路跡 。 因 此 , 如 果 協 調 器赛 被 限 制 到 一 個鞄 通 道跰 , 並 且 定 義好 的 PAN ID 在 該 通 道跰 上 已 經 被 建 立 , 新 進 開 始 的 協 調 器赛 將 連 續 地 改俌 變 直 到 它 實蹴 現 一 個鞄 唯 一的 PAN ID。 一 個鞄 新 進 加 入 的 路跡 由 器赛 或 終 端牣 將 無 法 知 道跰 由 於 PAN ID 衝 突 , 協 調 器赛 重 新 選 擇赾了 PAN ID。 因 此 , 它 們靽 將 只 加 入 到 由 ZDAPP_CONFIG_PAN_ID 值靹 標 識訤 的 那倴 個鞄 網牺 路跡 。 換 句話 說狄 , 它 們靽 並 沒俯 加 入 到 它 們靽 原鞝 本 想 加 入 的 那倴 個鞄 網牺 路跡 。 同 樣 具 有 挑 戰赶 性 的 情 況 如 下 : 當 允 許 通道跰 遮贆 罩 致 能 了 多 個鞄 通 道跰 , 而 協 調 器赛 由 於 PAN ID 衝 突 而 不 能 使 用 這 些 通 道跰 中 的 首靫 個鞄 通 道跰 , 一個鞄 路跡 由 器赛 或 終 端牣 設 備 將 加 入 首靫 個鞄 通 道跰 中 的 那倴 個鞄 PAN ID 標 識訤 的 網牺 路跡 ( 如 果 被 允 許 ), 其 實蹴 它們靽 並 沒俯 有 加 入 到 它 們靽 原鞝 本 想 加 入 的 那倴 個鞄 網牺 路跡 。 58.3.1 自 動 開 始作伿 為 BSP 上 電踝 序侤 列 的 一 部 分 , 一 個鞄 設 備 將 自 動 開 始 嘗蹋 試 形侫 成 或 加 入 一 個鞄 網牺 路跡 。 如 果 該設 備 在 加 入 之 前 應 等 待 一 個鞄 計 時頗 器赛 或 其 他 外 部 事 件 , 那倴 麼猕 HOLD_AUTO_START 必 須 被 定義 。 為 了 在 稍 後 的 時頗 間 手 動 啟 動 加 入 過跸 程 , 調 用 ZDApp_StartUpFromApp()。 68.3.2 軟 體 開 始為 了 節 省 形侫 成 網牺 路跡 所 需猀 要 的 設 備 類詑 型 , 透 過跸 定 義 SOFT_START, 所 有 的 路跡 由 設 備 可 被編 譯 為 一 個鞄 協 調 器赛 。 如 果 需猀 要 自 動 開 始 , 那倴 麼猕 AUTO_SOFT_START 也 必 須 被 定 義 。8.3.3 網牺 路跡 恢 復已 經 成 功 加 入 一 個鞄 網牺 路跡 中 的 設 備 在 失 去 電踝 源 或 電踝 池 後 可 以 “ 恢 復 網牺 路跡 ”( 而 不 是 透 過跸OTA 訊 息韵 重 新 形侫 成 )。 這 個鞄 自 動 恢 復 可 透 過跸 定 義 NV_RESTORE 和 / 或 NV_INIT 被 致 能 。8.3.4 加 入 通 知ZDO_STATE_CHANGE 訊 息韵 將 通 知 設 備 網牺 路跡 形侫 成 狀 態躊 、 加 入 網牺 路跡 狀 態躊 或 者 網牺 路跡 狀 態躊 的任 何 改俌 變 。 7177華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.4 設 備 綁 定 和 發 現華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 中 定 義 了 6 個鞄 功 能 按 鍵 SW1-SW6。 應 用 實蹴 例 透 過跸SW2 實蹴 現 設 備 綁 定 , 透 過跸 SW4 實蹴 現 設 備 發 現 。 為 了 使 兩 個鞄 匹 配 的 應 用 實蹴 例 進 行 OTA 對蹹 話 ,兩 個鞄 設 備 上 的 SW2 必 須 被 按 下 一 段 時頗 間 , 這 就 像踽 存 在 於 一 個鞄 網牺 路跡 中 的 反 射韗 器赛 設 備8 。 或 者按 下 這 些 設 備 中 至 少 一 個鞄 設 備 的 SW4。 在 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 中 , 綁 定 或 發現 成 功 將 透 過跸 點 亮 一 個鞄 新 的 LED 被 指 示 。8.4.1 綁 定 請 求俠 ( 手 動 綁 定 )回 應 一 個鞄 SW2 按 下 , 應 用 實蹴 例 佐 用 ZDO API —ZDApp_SendEndDeviceBindReq() 來 參與犕 設 備 手 動 綁 定 過跸 程 。 一 個鞄 反 射韗 器赛 設 備 ( 通 常 是 協 調 器赛 ) 將 接 收 綁 定 請 求俠 。 網牺 路跡 中 的 另 一 個鞄設 備 , 它 具 有 一 個鞄 或 多 個鞄 輸 入 簇 與犕 第 一 個鞄 設 備 的 一 個鞄 或 多 個鞄 輸 出 簇 相 匹 配 , 也 必 須 使 用ZDApp_SendEndDeviceBindReq()。 請 求俠 必 須 在 APS_DEFAULT_MAXBINDING_TIME 毫 秒內 被 完侖 成 , 這 樣 , 一 個鞄 成 功 的 匹 配 就 被 完侖 成 ( 即佘 網牺 路跡 反 射韗 器赛 將 不 會 永 遠狚 守 住 第 一 個鞄ZDApp_SendEndDeviceBindReq() 來 等 待 一 個鞄 成 功 的 匹 配 )。 下 面 是 一 些 使 用 綁 定 請 求俠 ( 手 動綁 定 ) 的 佐 弊躄 : 佐 : 綁 定 資 訊 駐贲 留 在 網牺 路跡 反 射韗 器赛 設 備 中 , 節 省 了 目 標 設 備 的 RAM 空 間 。 佐 : 網牺 路跡 反 射韗 器赛 必 須 是 RxOnWhenIdle( 總 是 監牐 聽 網牺 路跡 )。 因 此 如 果 被 綁 定 設 備 中的 一 個鞄 設 備 廣 播 它 的 網牺 路跡 位 址佼 已 經 被 更俐 改俌 , 那倴 麼猕 網牺 路跡 反 射韗 器赛 將 更俐 新 相 應 的 綁 定 表 項目 。 因 此 , 即佘 使 另 一 個鞄 被 綁 定 設 備 正 在 睡牔 眠 , 它 後 續 要 發 送 給 那倴 個鞄 已 經 更俐 改俌 了 網牺 路跡位 址佼 的 設 備 的 資 訊 也 能 被 網牺 路跡 反 射韗 器赛 正 確 地 處 理 。 弊躄 : 一 個鞄 被 綁 定 到 不 止 一 個鞄 其 他 設 備 的 設 備 , 不 能 發 送 一 個鞄 資 訊 只 給 這 些 匹 配 設 備中 的 一 個鞄 或 一 些 , 因 為 反 射韗 器赛 將 產 生 一 個鞄 單 播 資 訊 給 所 有 的 被 綁 定 設 備 。 弊躄 : 一 個鞄 發 送 設 備 將 不 能 收 到 “ 傳 送 給 目 的 設 備 ” 的 通 知 ( 即佘 當 使 用AF_ACK_REQUEST 標 記 時頗 期 望 的 結 果 )。 弊躄 : 所 有 資 訊 都 要 經 過跸 網牺 路跡 反 射韗 器赛 , 減 少 了 網牺 路跡 帶 寬 。佐 / 弊躄 : 一 個鞄 被 綁 定 到 6 個鞄 設 備 的 發 送 設 備 將 發 送 一 個鞄 資 訊 給 網牺 路跡 協 調 器赛 , 這 將 導赫致 網牺 路跡 協 調 器赛 發 送 6 個鞄 單 播 資 訊 。 考 慮 下 面 這 種牞 情 況 : 一 個鞄 網牺 路跡 被 劃蹄 分 成 兩 個鞄 均佾 等的 地 理 區 域 A 和 B, 網牺 路跡 反 射韗 器赛 在 中 心 線 上 。 如 果 發 送 設 備 在 區 域 A 的 縱 深 處 ,而 接 收 設 備 在 區 域 B 的 縱 深 處 , 那倴 麼猕 對蹹 於 每俟 一 次 資 訊 發 送 , 如 果 發 送 設 備 產 生 了 6個鞄 而 不 是 一 個鞄 跨跠 網牺 資 訊 , 區 域 A 的 網牺 路跡 流 量 就 會 少 6 倍靰 。 如 果 所 有 設 備 一 個鞄 挨頏 一個鞄 在 同 一 區 域 的 縱 深 處 , 若 發 送 設 備 可 以 只 發 一 個鞄 單 跳跢 資 訊 就 可 給 期 望 的 接 收 設備 , 那倴 麼猕 將 導赫 致 這 個鞄 區 域 的 網牺 路跡 流 量 大 很 多 。8.4.2 匹 配 描 述 符 請 求俠 ( 自 動 尋 找俁 )178華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統響 應 一 個鞄 SW4 按 下 , 應 用 實蹴 例 佐 用 ZDApp_AutoFindDestination() 來 發 起 一 個鞄 匹 配 描 述符 請 求俠 。 任 何 接 收 到 匹 配 描 述 符 請 求俠 這 個鞄 廣 播 資 訊 的 匹 配 設 備 需猀 要 單 播 一 個鞄 帶 有 它 們靽 的 匹 配9端牣 點 的 資 訊 來 做 出 回 應 。 接 收 到 的 任 何 單 播 回 應 將 被 傳 遞狟 給 應 用 物 件 作伿 為 一 個鞄ZDO_NEW_DSTADDR 資 訊10 。 注 意 , 可 能 會 收 到 不 止 一 個鞄 的 響 應 。 應 用 實蹴 例 將 保 存 最 新收 到 的 回 應 。 這 對蹹 於 替 換 接 收 到 的 第 一 個鞄 響 應 或 一 個鞄 響 應 的 陣 列 將 會 是 有 用 的 。 下 面 是 一 些使 用 匹 配 描 述 符 請 求俠 ( 自 動 尋 找俁 ) 的 佐 弊躄 : 佐 : 在 尋 找俁 過跸 程 中 收 到 的 響 應 可 被 過跸 濾 並 不 被 保 存 。 如 果 多 個鞄 匹 配 響 應 被 保 存 , 當發 送 OTA 資 訊 時頗 , 一 個鞄 設 備 可 以 總 是 選 擇赾 這 些 匹 配 設 備 中 的 任 何 一 個鞄 或 一 些 作伿 為目 的 地 。 佐 : 一 個鞄 發 送 設 備 將 可 以 收 到 “ 傳 送 給 目 的 設 備 ” 的 通 知 ( 即佘 當 使 用AF_ACK_REQUEST 標 記 時頗 期 望 的 結 果 )。 佐 : 資 訊 以 最 佳 路跡 徑韬 被 路跡 由 , 節 省 網牺 路跡 帶 寬 。弊躄 : 綁 定 資 訊 駐贲 留 在 尋 找俁 設 備 中 , 這 個鞄 本 地 資 訊 不 但伽 需猀 要 佔 用 目 標 設 備 的 RAM 空間 , 而 且 可 能 需猀 要 佔 用 非 易 失 性 記 憶赲 體 來 備 份 和 恢 復 邏 輯 來 防倸 止 發 現 資 訊 的 丟 失( 更俐 換 電踝 池 )。弊躄 : 尋 找俁 設 備 必 須 是 RxOnWhenIdle( 總 是 監牐 聽 網牺 路跡 )。 這 是 因 為 被 發 現 的 設 備 可能 會 改俌 變 它 們靽 的 網牺 路跡 位 址佼 。佐 / 弊躄 : 一 個鞄 查 找俁 設 備 有 6 個鞄 匹 配 的 響 應 , 就 必 須 發 送 6 個鞄 單 播 資 訊 。 考 慮 下 面 這種牞 情 況 : 一 個鞄 網牺 路跡 被 劃蹄 分 成 兩 個鞄 均佾 等 的 地 理 區 域 A 和 B, 網牺 路跡 反 射韗 器赛 在 中 心 線 上 。如 果 發 送 設 備 在 區 域 A 的 縱 深 處 , 而 接 收 設 備 在 區 域 B 的 縱 深 處 , 那倴 麼猕 這 所 有 的6 個鞄 資 訊 將 影 響 到 兩 個鞄 區 域 的 網牺 路跡 吞作 吐 量 。 如 果 所 有 設 備 一 個鞄 挨頏 一 個鞄 在 同 一 區 域 的縱 深 處 , 那倴 麼猕 另 一 個鞄 區 域 的 網牺 路跡 流 量 將 完侖 全 不 受 影 響 。8.5 GenericApp 應 用 實蹴 例8.5.1 簡 介GenericApp 應 用 實蹴 例 提 供 了 一 個鞄 簡 單 的 例 子 , 包 括 一 個鞄 應 用 的 結 構躬 、 程 式 和 資 訊 流 程 。下 面 , 在 這 樣 一 個鞄 簡 單 應 用 中 我侷 們靽 將 學赩 習 程 式 和 資 訊 流 程 。8.5.2 程 式 流 程8.5.2.1 初 始 化在 系倐 統 上 電踝 和 初 始 化11過跸 程 中 GenericApp_Init() 將 被 調 用 。179華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統GenericApp_TaskID = task_id;注 意 ,OSAL 透 過跸 函 數 參 數 指 派 GenericApp 它 的 任 務 ID。GenericApp 必 須 使 用 這 個鞄 任務 ID 來 為 它 自 己 設 定 一 個鞄 計 時頗 器赛 和 一 個鞄 事 件 , 或 者 發 送 OSAL 訊 息韵 給 它 自 己 。GenericApp_NwkState = DEV_INIT;維犁 護 一 個鞄 設 備 網牺 路跡 狀 態躊 的 本 地 副 本 是 非 常 有 用 的 。 在 上 電踝 時頗 網牺 路跡 狀 態躊 是 “ 未 連 接 ” 或DEV_INIT。 在 上 電踝 過跸 程 中 或 之 後 , 一 個鞄 OSAL 任 務 將 不 會 收 到 該 預踣 設 狀 態躊 的 一 個鞄ZDO_STATE_CHANGE 訊 息韵 , 因 此 它 必 須 被 本 地 初 始 化 。 一 旦 一 個鞄 新 的 網牺 路跡 狀 態躊 完侖 成 , 該任 務 將 獲 得 ZDO_STATE_CHANGE 訊 息韵 。 注 意 : 當 一 個鞄 設 備 被 使 用 NV_RESTORE 編 譯 並且 在 更俐 換 電踝 源 前 已 經 連 接 到 一 個鞄 網牺 路跡 , 在 上 電踝 之 後 會 很 快侳 收 到 ZDO_STATE_CHANGE 訊息韵 , 該 訊 息韵 不 是 OTA 訊 息韵 , 因 為 “ 網牺 路跡 已 連 接 ” 的 狀 態躊 已 經 從 非 易 失 性 記 憶赲 體 中 被 恢 復 。GenericApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;GenericApp_DstAddr.endPoint = 0;GenericApp_DstAddr.addr.shortAddr = 0;預踣 設 目 的 位 址佼 被 初 始 化 , 使 資 訊 被 發 送 給 協 調 器赛 ( 網牺 路跡 位 址佼 0x0000) 並 被 協 調 器赛 的 ZDO( 端牣 點 0x00) 接 收 。 傳 送 方 式 是 “ 間 接 ”, 依 靠败 網牺 路跡 反 射韗 器赛 設 備 ( 通 常 是 協 調 器赛 ) 來 匹 配源 位 址佼 和 目 的 端牣 點 到 在 反 射韗 器赛 設 備 的 綁 定 表 中 被 找俁 到 的 一 個鞄 目 的 位 址佼 。 如 果 沒俯 有 匹 配 綁 定 存在 , 該 資 訊 將 在 協 調 器赛 終 結 並 且 發 送 GenericApp 將 仍 會 接 收 到 一 個鞄 ZSuccess 狀 態躊 的AF_DATA_CONFIRM_CMD 資 訊 , 即佘 使 該 資 訊 被 發 送 時頗 帶 有 AF_ACK_REQUEST 標 記 。 12GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id = &GenericApp_TaskID;GenericApp_epDesc.simpleDesc =SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &GenericApp_epDesc );透 過跸 以 上 程 式 ,GenericApp 應 用 物 件 被 實蹴 例 化 。 這 使 得 AF 層 知 道跰 如 何 路跡 由 輸 入 的 資 料頔包 到 GENERICAPP_PROFID / GENERICAPP_ENDPOINT — 這 將 透 過跸 發 送 一 個鞄 OSAL 的SYS_EVENT_MSG 訊 息韵 (AF_INCOMING_MSG_CMD) 給 GenericApp_TaskID 來 完侖 成 。RegisterForKeys( GenericApp_TaskID );GenericApp 註 冊 按 鍵 按 下 的 互 斥 系倐 統 服 務 。 138.5.2.2 事 件 處 理每俟 當 GenericApp_TaskID 的 一 個鞄 OSAL 事 件 出 現 時頗 ,GenericApp 事 件 處 理 函 數GenericApp_ProcessEvent() 將 從 OSAL 任 務 處 理 迴 圈 中 輪贁 流 被 調 用 。GenericApp_ProcessEvent() 的 參 數 是 一 個鞄 16 位 的 位 遮贆 罩 ; 一 個鞄 或 多 個鞄 位 可 在 任 何 函 數 調 用 中180華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統被 設 定 。 如 果 多 個鞄 事 件 被 觸 發 , 我侷 們靽 強 烈顝 建 議 一 個鞄 任 務 只 處 理 這 些 事 件 中 的 一 個鞄 ( 可 能 是 時頗間 緊牸 迫 性 要 求俠 最 高 的 一 個鞄 任 務 , 而 且 幾 乎 總 是 SYS_EVENT_MSG 訊 息韵 是 最 高 優 先 順 序侤 )。if ( events & SYS_EVENT_MSG ){MSGpkt = (afIncomingMSGPacket_t*)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt ){…注 意 : 雖 然 我侷 們靽 強 烈顝 建 議 一 個鞄 任 務 在 任 何 一 個鞄 單 一 的 任 務 處 理 函 數 的 調 用 中 只 處 理 許 多待 處 理 事 件 中 的 一 個鞄 事 件 , 但伽 是 我侷 們靽 也 建 議 ( 在 應 用 實蹴 例 中 就 是 這 樣 實蹴 施 的 ) 在 來 自 OSAL的 同 一 “ 時頗 間 片 ” 中 處 理 所 有 的 待 處 理 的 SYS_EVENT_MSG 訊 息韵 。switch ( MSGpkt->hdr.event )上 面 的 程 式 展韙 示 了 如 何 查 找俁 SYS_EVENT_MSG 訊 息韵 的 “ 類詑 型 ”。 建 議 一 個鞄 任 務 只 處 理SYS_EVENT_MSG 訊 息韵 所 有 可 能 類詑 型 的 一 個鞄 最 小 子 集 。 14 看 下 面 的 程 式 :case KEY_CHANGE:GenericApp_HandleKeys( ((keyChange_t *)MSGpkt)->state,((keyChange_t *)MSGpkt)->keys );break;如 果 一 個鞄 OSAL 任 務 已 經 註 冊 為 按 鍵 按 下 通 知 , 任 何 按 鍵 按 下 事 件 將 被 作伿 為 一 條KEY_CHANGE 系倐 統 事 件 訊 息韵 接 收 。 程 式 流 程 的 兩 個鞄 可 能 途 可 以 導赫 致 一 個鞄 任 務 接 收 到KEY_CHANGE 訊 息韵 。下 面 是 由 物 理 的 按 鍵 按 下 導赫 致 的 程 式 流 程 : HAL 檢 測 到 按 鍵 按 下 狀 態躊 ( 透 過跸 硬 體 中 斷 或 硬 體 查 詢 )。 HAL 的 OSAL 任 務 檢 測 到 一 個鞄 按 鍵 狀 態躊 改俌 變 並 調 用 OSAL 按 鍵 改俌 變 回 調 函 數 。OSAL 按 鍵 改俌 變 回 調 函 數 發 送 一 個鞄 OSAL 系倐 統 事 件 訊 息韵 (KEY_CHANGE) 給 註 冊為 接 收 按 鍵 改俌 變 事 件 通 知 的 任 務 ID(RegisterForKeys())。下 面 是 由 Z-Tool 發 送 一 個鞄 按 鍵 改俌 變 訊 息韵 導赫 致 的 程 式 流 程 : 15 HAL 接 收 輸 入 串 列 資 料頔 ( 透 過跸 硬 體 接 收 終 端牣 , 或 接 收 查 詢 )。 HAL 為 接 收 的 串 列 資 料頔 調 用 SPI Mgr 回 調 函 數 。SPI Mgr 回 調 函 數 讀 取 並 解 析 收 到 的 串 列 資 料頔 直 到 合 成 一 個鞄 有 效頒 的 資 料頔 包 : 被 發 送給 MT 任 務 ID 的 一 個鞄 OSAL 系倐 統 事 件 訊 息韵 (CMD_SERIAL_MSG)。MT 任 務 事 件 處 理 函 數 輪贁 流 運跮 行 並 接 收 CMD_SERIAL_MSG。 如 果 串 列 資 料頔 訊 息韵 的內 容韕 是 一 個鞄 按 鍵 按 下 ,OSAL 按 鍵 改俌 變 回 調 函 數 將 被 調 用 。OSAL 按 鍵 改俌 變 回 調 函 數 發 送 一 個鞄 OSAL 系倐 統 事 件 訊 息韵 (KEY_CHANGE) 給 註 冊為 接 收 按 鍵 改俌 變 事 件 通 知 的 任 務 ID(RegisterForKeys())。case AF_DATA_CONFIRM_CMD:181華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統// The status is of ZStatus_t type [defined in ZComDef.h]// The message fields are defined in AF.hafDataConfirm = (afDataConfirm_t *)MSGpkt;sentEP = afDataConfirm->endpoint;sentStatus = afDataConfirm->hdr.status;sentTransID = afDataConfirm->transID;對蹹 於 調 用 AF_DataRequest() 並 且 返 回 ZSuccess 的 任 何 AF_DataRequest() 調 用 , 透 過跸AF_DATA_CONFIRM_CMD 系倐 統 事 件 訊 息韵 的 方 式 將 導赫 致 一 個鞄 “ 回 調 ”。發 送 事 務 處 理 ID(sentTransID) 是 識訤 別低 訊 息韵 的 一 個鞄 方 法 。 雖 然 GenericApp 只 使 用 一 個鞄事 務 處 理 ID(GenericApp_TransID), 但伽 是 為 每俟 一 個鞄 不 同 的 端牣 點 或 者 甚 至 為 一 個鞄 端牣 點 內 的 每俟一 個鞄 ClusterId 保 持 一 個鞄 獨趸 立 的 事 務 處 理 ID 是 非 常 有 用 的 。 這 是 為 了 訊 息韵 的 確 認狀 、 重 發 、 分解 和 重 新 裝 配 。 注 意 : 任 何 事 務 處 理 ID 狀 態躊 變 數 透 過跸 調 用 AF_DataRequest() 成 功 後 獲 得 增猹量 ( 因 此 , 該 狀 態躊 變 數 是 一 個鞄 引 用 傳 遞狟 參 數 , 而 不 是 一 個鞄 值靹 傳 遞狟 參 數 )。AF_DataRequest() 的 返 回 值靹 ZSuccess 標 記 著 該 資 訊 已 經 被 網牺 路跡 層 接 收 , 網牺 路跡 層 將 嘗蹋 試 發送 它 給 MAC 層 ,MAC 將 嘗蹋 試 對蹹 它 進 行 OTA 發 送 。 發 送 狀 態躊 (sentStatus) 是 該 資 訊 的 OTA結 果 。ZSuccess 標 記 著 該 資 訊 已 經 被 傳 送 給 網牺 路跡 中 下 一 跳跢 ZigBee 設 備 。 如 果 AF_DataRequest()被 調 用 時頗 帶 有 AF_ACK_REQUEST 標 記 , 那倴 麼猕 ZSuccess 標 記 著 該 資 訊 已 經 被 傳 送 給 目 的 位址佼 。 除 非 該 資 訊 的 位 址佼 模 式 為 間 接 ( 即佘 該 資 訊 被 發 送 給 網牺 路跡 反 射韗 器赛 進 行 綁 定 表 查 詢 後 發 送 該資 訊 給 匹 配 設 備 ), 在 這 種牞 情 況 下 ,ZSuccess 標 記 著 該 訊 息韵 被 發 送 給 了 網牺 路跡 反 射韗 器赛 。 有 多 個鞄可 能 的 發 送 狀 態躊 值靹 來 指 示 失 敗 。 16case ZDO_NEW_DSTADDR:ZDO_NewDstAddr = (ZDO_NewDstAddr_t *)MSGpkt;dstEP = ZDO_NewDstAddr->dstAddrDstEP;dstAddr = &ZDO_NewDstAddr->dstAddr;GenericApp_DstAddr.addrMode = (afAddrMode_t)dstAddr->addrMode;GenericApp_DstAddr.endPoint = dstEP;GenericApp_DstAddr.addr.shortAddr = dstAddr->addr.shortAddr;break;當 一 個鞄 應 用 物 件 透 過跸 調 用 ZDApp_AutoFindDestination() 發 出 一 個鞄 請 求俠 給 ZDO 來 執 行 一個鞄 自 動 匹 配 並 且 ZDO 的 一 個鞄 匹 配 設 備 回 應 , 要 求俠 自 動 尋 找俁 的 應 用 物 件 被 系倐 統 事 件 訊 息韵ZDO_NEW_DSTADDR 的 任 何 回 應 通 知 。 在 收 到 之 後 , 匹 配 的 網牺 路跡 位 址佼 和 端牣 點 號 可 被 保 存或 過跸 濾 。 雖 然 程 式 展韙 示 了 位 址佼 模 式 可 以 從 回 應 中 提 取 , 重 要 的 是 要 認狀 識訤 到 , 上 述 唯 一 可 能 的位 址佼 模 式 回 應 根頨 據赼 ZigBee 規 範 是 afAddr16Bit。case ZDO_STATE_CHANGE:GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);if ( (GenericApp_NwkState == DEV_ZB_COORD)||(GenericApp_NwkState == DEV_ROUTER)||(GenericApp_NwkState == DEV_END_DEVICE) )182華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統{// Start sending "the" message in a regular interval.osal_start_timer( GENERICAPP_SEND_MSG_EVT,GENERICAPP_SEND_MSG_TIMEOUT );}break;每俟 當 網牺 路跡 狀 態躊 改俌 變 , 所 有 的 任 務 被 系倐 統 事 件 訊 息韵 ZDO_STATE_CHANGE 通 知 。 注 意 :GenericApp 被 實蹴 施 為 一 旦 設 備 加 入 一 個鞄 網牺 路跡 後 開 始 運跮 行 一 個鞄 計 時頗 器赛 。 當 網牺 路跡 狀 態躊 改俌 變 為“joined”, 啟 動 一 個鞄 自 動 尋 找俁 使 設 備 無 需猀 使 用 者 採 取 行 動 就 可 綁 定 這 可 能 是 有 用 的 。// Release the memoryosal_msg_deallocate( (uint8 *)MSGpkt );注 意 :OSAL 訊 息韵 系倐 統 設 計 需猀 要 接 收 任 務 重 複 迴 圈 使 用 分 配 給 訊 息韵 的 動 態躊 記 憶赲 體 。 如 果OSAL 不 能 排 隊 一 個鞄 訊 息韵 ( 要 麼猕 任 務 ID 不 存 在 , 要 麼猕 訊 息韵 首靫 部 不 正 確 ), 它 將 重 複 迴 圈 記 憶赲體 。if ( events & GENERICAPP_SEND_MSG_EVT ){// Send "the" messageGenericApp_SendTheMessage();// Setup to send message againosal_start_timer( GENERICAPP_SEND_MSG_EVT,GENERICAPP_SEND_MSG_TIMEOUT );}// return unprocessed eventsreturn (events ^ GENERICAPP_SEND_MSG_EVT);GenericApp 應 經 在 GenericApp.h 檔 中 定 義 了 任 務 事 件 遮贆 罩 15 個鞄 可 用 位 中 的 一 個鞄 : 17#define GENERICAPP_SEND_MSG_EVT0x0001當 GenericApp 為 它 自 己 的 GENERICAPP_SEND_MSG_EVT 事 件 設 定 一 個鞄 計 時頗 器赛 時頗 ,它 在 調 用 osal_start_timer() 時頗 隱 含佳 地 使 用 它 自 己 的 任 務 ID。 在 接 收 到 成 功 加 入 一 個鞄 網牺 路跡 的 通知 (ZDO_STATE_CHANGE) 後 , 該 計 時頗 器赛 被 自 動 啟 動 。 上 面 的 程 式 表 示 , 每俟 次 到 期 後 計時頗 器赛 被 重 新 啟 動 。 每俟 個鞄 GENERICAPP_SEND_MSG_TIMEOUT 間 隔踖 , 會 有 一 個鞄GenericApp_SendTheMessage() 產 生 的 資 料頔 請 求俠 。8.5.3 資 訊 流 程透 過跸 使 用 一 個鞄 OSAL 計 時頗 器赛 ,GenericApp 週 期 性 地 發 送 一 個鞄 OTA 訊 息韵 。183華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統void GenericApp_SendTheMessage( void ){char theMessageData[] = "Hello World";}if ( AF_DataRequest( &GenericApp_DstAddr, &GenericApp_epDesc,GENERICAPP_CLUSTERID,(byte)osal_strlen( theMessageData ) + 1,(byte *)&theMessageData,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS ) == afStatus_SUCCESS ){// Successfully requested to be sent.}else{// Error occurred in request to send.}應 用 物 件 的 OTA 資 訊 資 料頔 是 一 個鞄 簡 單 的 ASCII 碼 字 元 序侤 列 , 即佘 “Hello ZigBee”。調 用 AF_DataRequest() 開 始 透 過跸 協 定 堆 疊 各 層 向 下 傳 遞狟 使 用 者 資 料頔 以 便 準 備 進 行 OTA發 送 的 資 料頔 。 如 果 該 函 數 返 回 ZSuccess, 那倴 麼猕 使 用 者 資 料頔 已 經 被 完侖 整超 的 打 包 , 它 包 含佳 網牺 路跡 層首靫 部 、 尾依 部 和 可 選 的 安 全 應 用 並 且 它 已 經 被 排 隊 到 網牺 路跡 層 緩 衝 區 中 等 待 被 進 行 OTA 發 送 。網牺 路跡 層 將 不 會 嘗蹋 試 去 傳 遞狟 這 個鞄 新 的 資 訊 給 MAC 直 到 當 網牺 路跡 層 任 務 被 OSAL 任 務 處 理 迴 圈 按順 序侤 調 用 時頗 再 次 運跮 行 。 甚 至 當 網牺 路跡 層 任 務 再 次 運跮 行 時頗 , 這 個鞄 新 的 OTA 資 訊 將 等 待 直 到 任 何以 前 被 排 隊 的 資 訊 已 經 被 發 送 給 MAC 並 進 行 了 OTA 發 送 。AF_DataRequest() 的 任 何 一 個鞄失 敗 返 回 值靹 標 記 著 在 協 定 堆 疊 的 某 一 層 的 一 個鞄 失 敗 並 且 這 幾 乎 總 是 由 於 缺 乏 足倦 夠 的 堆 空 間來 排 隊 一 個鞄 資 訊 , 因 此 , 該 資 訊 沒俯 有 進 行 OTA 發 送 的 機趙 會 。當 網牺 路跡 層 成 功 傳 遞狟 該 資 訊 給 MAC 層 並 且 MAC 層 成 功 進 行 了 該 資 訊 的 OTA 發 送 , 該 資訊 被 一 跳跢 接 一 跳跢 路跡 由 到 目 的 位 址佼 。 目 的 位 址佼 是 在 調 用 AF_DataRequest() 時頗 給 定 的 。 當 該 資 訊最 終 到 達跲 目 的 網牺 路跡 位 址佼 , 協 定 堆 疊 的 較跨 低佂 層 將 剝鞚 離覭 可 選 的 安 全 選 項 並 路跡 由 應 用 物 件 資 料頔 有 效頒載跩 荷 到 達跲 目 的 端牣 點 。 目 的 端牣 點 在 目 的 位 址佼 中 定 義 。 接 收 應 用 物 件 將 透 過跸 SYS_EVENT_MSG訊 息韵 AF_INCOMING_MSG_CMD 被 通 知 。case AF_INCOMING_MSG_CMD:GenericApp_MessageMSGCB( MSGpkt );break;上 面 的 程 式 中 ,GenericApp 在 GenericApp_ProcessEvent() 中 接 收 SYS_EVENT_MSG 訊息韵 , 並 且 在 下 面 的 程 式 中 , 處 理 被 透 過跸 OTA 發 送 來 的 使 用 者 資 料頔 :void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt )184華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統{switch ( pkt->clusterId ){case GENERICAPP_CLUSTERID:// "the" message#if defined( LCD_SUPPORTED )HalLcdWriteScreen( (char*)pkt->cmd.Data, "rcvd" );#elif defined( WIN32 )WPRINTSTR( pkt->cmd.Data );#endifbreak;}}OTA 資 料頔 傳 輸 的 內 容韕 可 以 被 顯 示 到 LCD 上 。GenericApp 假 設 OTA 資 料頔 包 含佳 一 個鞄 帶 有NULL 字 元 結 尾依 的 字 串 ( 在 調 用 HalLcdWriteScreen() 時頗 , 該 字 串 以 隱 含佳 的 方 式 作伿 為 一 個鞄 參 數被 傳 遞狟 給 HalLcdWriteScreen())。 更俐 常 見倝 的 方 法 是 使 用 afIncomingMSGPacket_t 結 構躬 體 的 長度 成 員鞬 , 即佘 :pkt->cmd.DataLength。8.6 SerialApp 應 用 實蹴 例8.6.1 簡 介SerialApp 是 一 個鞄 取 代 兩 個鞄 非 ZigBee 設 備 之 間 電踝 纜 連 接 的 基 本 應 用 。 一 個鞄 PC( 或 者 任何 非 ZigBee 設 備 ) 透 過跸 串 列 埠 連 接 一 個鞄 使 用 本 應 用 實蹴 例 的 ZigBee 設 備 來 發 送 資 料頔 。 本 應 用然 後 從 串 列 埠 傳 輸 資 料頔 流 程 並 OTA 到 另 一 個鞄 也 運跮 行 SerialApp 的 ZigBee 設 備 ( 兩 個鞄 SerialApp物 件 之 間 的 設 備 發 現 和 綁 定 必 須 被 完侖 成 )。 接 收 到 SerialApp 的 OTA 資 料頔 流 程 的 ZigBee 設 備然 後 在 它 自 己 的 串 列 埠 傳 輸 資 料頔 。 串 列 資 料頔 傳 輸 被 設 計 為 雙覯 向 全 雙覯 工 , 沒俯 有 硬 體 流 量 控 制 ,強 制 允 許 OTA( 多 跳跢 ) 時頗 間 和 丟 包 重 傳 。185華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.6.2 按 鍵 功 能 分 配 SW2 透 過跸 ZDApp_SendEndDeviceBindReq 進 行 手 動 綁 定 。 SW4 透 過跸 ZDApp_AutoFindDestination 進 行 自 動 查 找俁 。8.7 TransmitApp 應 用 實蹴 例8.7.1 簡 介本 TransmitApp 應 用 將 盡牏 可 能 快侳 地 發 送 一 個鞄 資 料頔 包 給 另 一 個鞄 TransmitApp 設 備 。 一 旦 本TransmitApp 收 到 對蹹 該 資 料頔 包 的 確 認狀 , 它 將 發 送 下 一 個鞄 資 料頔 包 。TransmitApp 接 收 設 備 將 計算牨 出 下 列 傳 輸 率 統 計 :最 後 一 秒 的 位 元 組 數 量運跮 行 了 多 少 秒每俟 秒 平 均佾 位 元 組 數 量接 收 到 的 資 料頔 包 的 數 量186華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.7.2 按 鍵 功 能 分 配 SW1 開 始 和 停 止 傳 輸 。 SW2 透 過跸 ZDApp_SendEndDeviceBindReq 進 行 手 動 綁 定 。 SW3 TransmittApp 清 除 顯 示 。 SW4 透 過跸 ZDApp_AutoFindDestination 進 行 自 動 查 找俁 。8.7.3 常 量下 面 的 常 量 被 定 義 用 來 增猹 加 資 訊 的 不 同 變 化 : TRANSMITAPP_RANDOM_LEN 致 能 隨 機趙 長 度 資 料頔 包 傳 輸 。 否佞 則 , 所 有 被 傳 輸 的資 料頔 包 將 是 在 網牺 路跡 配 置 中 AF 層 所 允 許 的 最 大 長 度 。 TRANSMITAPP_DELAY_SEND 如 果 被 定 義 , 在 資 訊 發 送 之 間 將 被 加 入 一 段 延時頗 。 TRANSMITAPP_SEND_DELAY 如 果 TRANSMITAPP_DELAY_SEND 被 定義 , 該 值靹 是 延 時頗 的 數 量 。 TRANSMITAPP_TX_OPTIONS 設 定 TRANSMITAPP_TX_OPTIONS 為AF_MSG_ACK_REQUEST, 接 收 設 備 將 為 收 到 的 資 訊 發 送 APS ACK, 這 將 降 低佂 吞作吐 量 。8.7.4 運跮 行 資 訊為 了 看 到 運跮 行 過跸 程 中 的 OTA 交 通 資 訊 , 該 設 備 必 須 有 一 個鞄 LCD 或 被 連 接 到 ZTrace或 ZTool 。 如 果 使 用 ZTrace 或 ZTool , 設 定 除 錯 閾 值靹 ( 在 ZTrace 或 ZTool 中 的SYS_SET_DEBUG_THRESHOLD) 如 下 : ComponentID = 7 (COMPID_APP).。 Threshold = 3 (SEVERITY_INFORMATION)。ZTool/ZTrace 日 誌犽 視 窗 將 顯 示 以 下 這 些 參 數18 : 參 數 1: 運跮 行 時頗 每俟 秒 被 接 收 到 的 平 均佾 位 元 組 數 量 。 參 數 2: 接 收 到 的 位 元 組 的 總 數 的 累 計 計 數 。 參 數 3: 運跮 行 時頗 每俟 秒 被 發 送 的 平 均佾 位 元 組 數 量 。 參 數 4: 被 發 送 的 位 元 組 的 總 數 的 累 計 計 數如 果 使 用 一 個鞄 LCD: 行 1: 顯 示 參 數 1 和 參 數 2。 行 2: 顯 示 參 數 3 和 參 數 4。187華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.7.5 注 意本 應 用 被 嘗蹋 試 用 來 測 試 一 個鞄 網牺 路跡 中 2 個鞄 設 備 間 的 最 大 吞作 吐 量 。 這 2 個鞄 設 備 一 個鞄 是 協 調器赛 , 另 一 個鞄 是 路跡 由 器赛 。本 應 用 也 可 被 使 用 在 一 個鞄 終 端牣 設 備 和 一 個鞄 路跡 由 器赛 ( 或 協 調 器赛 ) 之 間 , 但伽 我侷 們靽 不 建 議 這 樣使 用 。 如 果 你佀 確 定 要 這 樣 使 用 , 你佀 必 須 致 能 延 時頗 特顠 性 (TRANSMITAPP_DELAY_SEND 和TRANSMITAPP_SEND_DELAY)。 如 果 你佀 不 包 含佳 延 時頗 , 終 端牣 設 備 不 能 接 收 資 訊 , 因 為 它 將停 止 查 詢 。 此 外 , 延 時頗 必 須 大 於 RESPONSE_POLL_RATE( 預踣 設 為 100 毫 秒 )。8.8 Home Automation 規 範規 範 。與犕 之 前 的 應 用 實蹴 例 實蹴 施 虛 擬 私倌 有 規 範 相 反 ,HA 規 範 , 規 範 ID 為 0x0104, 是 一 個鞄 堆 疊8.8.1 簡 介HA 規 範 依 賴 於 通 用 和 專 用 基 礎 以 及 通 用 功 能 領猅 域 的 ZCL。8.8.2 初 始 化像踽 8.2.2 節 所 描 述 的 那倴 樣 , 使 用 者 必 須 添 加 至 少 一 個鞄 任 務 ( 給 OSAL 任 務 系倐 統 ) 來 服 務一 個鞄 或 多 個鞄 實蹴 例 化 的 應 用 物 件 。 但伽 是 , 當 執 行 一 個鞄 HA 應 用 物 件 時頗 , 一 個鞄 專 門 用 於 ZCL 的任 務 也 必 須 按 下 面 的 順 序侤 被 添 加 到 HA 應 用 實蹴 例 ( 即佘 在 任 何 其 他 任 務 使 用 ZCL 之 前 ): 透 過跸 使 用 zclHA_Init 來 註 冊 使 用 HA 規 範 的 簡 單 描 述 符 ( 如zclSampleLight_SimpleDesc)。 透 過跸 使 用 zclGeneral_RegisterCmdCallbacks() 來 註 冊 通 用 功 能 領猅 域 的 命 令 回 調 表 ( 如zclSampleLight_CmdCallbacks)。 透 過跸 使 用 zcl_registerAttrList() 註 冊 ZCL 基 礎 層 屬 性 表 ( 如 zclSampleLight_Attrs)。8.8.3 Sample Light 應 用8.8.3.1 簡 介該 應 用 實蹴 例 可 被 用 來 透 過跸 使 用 打 開 / 關詉 閉 簇 命 令 來 打 開 / 關詉 閉 設 備 上 的 D2 或 者 使 用 ZCL寫 命 令 設 定 IdentifyTime 屬 性 為 一 個鞄 非 0 值靹 來 把便 設 備 轉視 換 為 識訤 別低 模 式 ( 即佘 閃 爍觰 D2)。188華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統8.8.3.2 ZCL 簇 屬 性Sample Light 應 用 支 援 下 面 這 些 ZCL 簇 屬 性 : 基 本 簇 屬 性 :zclSampleLight_HWRevisionzclSampleLight_ZCLVersionzclSampleLight_ManufacturerNamezclSampleLight_ModelIdzclSampleLight_DateCodezclSampleLight_PowerSourcezclSampleLight_LocationDescriptionzclSampleLight_PhysicalEnvironmentzclSampleLight_DeviceEnable 標 識訤 簇 屬 性 :zclSampleLight_IdentifyTime 現 場 簇 屬 性 :zclSampleLight_SceneCountzclSampleLight_CurrentScenezclSampleLight_CurrentGroupzclSampleLight_SceneValid 開 / 關詉 簇 屬 性 :zclSampleLight_OnOff 開 / 關詉 切 換 配 置 簇 屬 性 :zclSampleLight_SwitchTypezclSampleLight_SwitchActions 適贅 當 的 位 置 控 制 簇 屬 性 :zclSampleLight_CurrentLevelzclSampleLight_TransitionTime8.8.3.3 ZCL 回 調 函 數本 應 用 給 ZCL 簇 提 供 了 下 面 這 些 回 調 函 數 : zclSampleLight_BasicResetCB() 當 一 個鞄 重 置 到 出 廠 預踣 設 值靹 的 命 令 被 基 礎 簇 接 收時頗 調 用 。189華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 zclSampleLight_IdentifyRspCB() 當 一 個鞄 標 識訤 查 詢 回 應 命 令 被 標 識訤 簇 接 收 時頗 調用 。 zclSampleLight_OnOffCB() 當 一 個鞄 打 開 / 關詉 閉 或 轉視 換 命 令 被 開 / 關詉 簇 接 收 時頗 調 用 。 zclSampleLight_LevelControlMoveToLevelCB() 當 一 個鞄 移 動 到 適贅 當 的 位 置 的 命令 從 適贅 當 的 位 置 控 制 簇 被 接 收 時頗 調 用 。 zclSampleLight_LevelControlMoveCB() 當 一 個鞄 移 動 命 令 從 適贅 當 的 位 置 控 制 簇 被接 收 時頗 調 用 。 zclSampleLight_LevelControlStepCB() 當 一 個鞄 步俞 進 命 令 從 適贅 當 的 位 置 控 制 簇 被接 收 時頗 調 用 。 zclSampleLight_SceneStoreCB() 當 一 個鞄 現 場 保 存 命 令 從 現 場 簇 被 接 收 時頗 調 用 。 zclSampleLight_SceneRecallCB() 當 一 個鞄 現 場 再 調 用 命 令 從 現 場 簇 被 接 收 時頗 調用 。 zclSampleLight_SceneRspCB() 當 一 個鞄 現 場 響 應 命 令 從 現 場 簇 被 接 收 時頗 調 用 。 zclSampleLight_IdentifyTimeWrtHdlr() 當 Identify Time 屬 性 值靹 被 ZCL 寫 命 令 更俐改俌 時頗 調 用 。8.8.3.4 按 鍵 功 能 分 配 SW2 透 過跸 ZDApp_SendEndDeviceBindReq 進 行 手 動 綁 定 。8.8.4 Sample Switch 應 用8.8.4.1 簡 介該 應 用 實蹴 例 被 用 作伿 照 明 開 關詉 ( 使 用 SW6) 來 打 開 / 關詉 閉 一 個鞄 運跮 行 Sample Light 應 用 實蹴 例設 備 上 的 D2。8.8.4.2 ZCL 簇 屬 性Sample Switch 應 用 支 援 下 面 這 些 簇 屬 性 : 基 本 簇 屬 性 :zclSampleLight_HWRevisionzclSampleLight_ZCLVersionzclSampleLight_ManufacturerNamezclSampleLight_ModelIdzclSampleLight_DateCodezclSampleLight_PowerSourcezclSampleLight_LocationDescription190華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統zclSampleLight_PhysicalEnvironmentzclSampleLight_DeviceEnable 標 識訤 簇 屬 性 :zclSampleLight_IdentifyTime 開 / 關詉 簇 屬 性 :zclSampleLight_OnOff8.8.4.3 ZCL 回 調 函 數本 應 用 給 ZCL 簇 提 供 了 下 面 這 些 回 調 函 數 : zclSampleLight_BasicResetCB() 當 一 個鞄 重 置 到 出 廠 預踣 設 值靹 的 命 令 被 基 礎 簇 接 收時頗 調 用 。 zclSampleLight_IdentifyRspCB() 當 一 個鞄 標 識訤 查 詢 回 應 命 令 被 標 識訤 簇 接 收 時頗 調用 。 zclSampleLight_IdentifyTimeWrtHdlr() 當 Identify Time 屬 性 值靹 被 ZCL 寫 命 令 更俐改俌 時頗 調 用 。8.8.4.4 按 鍵 功 能 分 配 SW6 發 送 一 個鞄 轉視 換 命 令 給 燈趰 。 SW2 透 過跸 ZDApp_SendEndDeviceBindReq 進 行 手 動 綁 定 。 SW4 透 過跸 ZDApp_AutoFindDestination 進 行 自 動 查 找俁 。zclSampleLight_ProcessIdentifyTimeChange () 被 調 用 來 處 理 Identify Time 屬 性 值靹 的 任 何改俌 變 。 該 屬 性 值靹 可 被 ZCL 寫 命 令 和 標 識訤 逾跻 時頗 事 件 修鞈 改俌 。 如 果 Identify Time 屬 性 值靹 是 非 0 值靹 ,該 函 數 將 使 設 備 進 入 識訤 別低 模 式 。 否佞 則 , 它 使 設 備 回 到 自 己 的 正 常 操趀 作伿 模 式 , 設 備 使 D2 進 入閃 爍觰 狀 態躊 並 且 每俟 秒 減 量 一 次 Identify Time 屬 性 。191華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 Simple API9.1 Simple API 是 什 麼猕 ?Simple API 是 Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 簡 化 程 式 介 面 , 提 供 如 下 服 務 :初 始 化○ zb_SystemReset○ zb_StartRequest配 置○ zb_ReadConfiguration○ zb_WriteConfiguration○ zb_GetDeviceInfo 發 現 ( 設 備 、 網牺 路跡 和 服 務 的 發 現 )○ zb_FindDeviceRequest○ zb_BindDeviceRequest○ zb_AllowBindRequest○ zb_PermitJoinRequest資 料頔 傳 輸○ zb_SendDataRequest○ zb_ReceiveDataIndication9.2 如 何 將 設 備 投俈 入 到 網牺 路跡 中 使 用 ?192華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統每俟 一 個鞄 設 備 都 有 一 套鞽 可 被 配 置 的 配 置 參 數 ( 請 參 看 9.6.3 配 置 參 數 )( 例 如 : 透 過跸 PC工 具 或 一 個鞄 外 部 的 微 控 制 器赛 來 配 置 這 些 參 數 。) 配 置 參 數 在 程 式 中 定 義 有 預踣 設 值靹 。在 網牺 路跡 中 的 所 有 設 備 ,“ 特顠 定 網牺 路跡 ” 這 個鞄 配 置 參 數 必 須 被 設 定 為 相 同 的 值靹 。每俟 個鞄 設 備 的 “ 特顠 定 設 備 ” 這 個鞄 配 置 參 數 可 以 被 賦 以 不 同 的 值靹 。 但伽 是ZCD_NV_LOGICAL_TYPE 必 須 設 定 以 保 證訥 (1) 網牺 路跡 中 只 有 一 個鞄 設 備 被 配 置 為 協 調 器赛 ,(2) 所有 的 電踝 池 供 電踝 設 備 被 配 置 為 終 端牣 設 備 。配 置 參 數 設 定 完侖 成 後 , 設 備 可 以 以 任 意 順 序侤 上 電踝 。 協 調 器赛 設 備 將 啟 動 網牺 路跡 , 其 他 設 備 將查 找俁 並 加 入 該 網牺 路跡 。協 調 器赛 設 備 將 掃 描 在 ZCD_NV_CHANLIST 配 置 參 數 中 定 義 的 所 有 通 道跰 並 挑 選 一 個鞄 最 低佂 能量 級 的 通 道跰 。 如 果 有 多 個鞄 通 道跰 具 有 低佂 能 量 級 , 協 調 器赛 將 會 選 擇赾 具 有 較跨 少 ZigBee 網牺 路跡 存 在 的這 個鞄 通 道跰 。 協 調 器赛 將 選 擇赾 在 ZCD_NV_PANID 參 數 中 定 義 的 網牺 路跡 識訤 別低 字 。路跡 由 器赛 和 終 端牣 設 備 將 掃 描 在 ZCD_NV_CHANLIST 配 置 參 數 中 定 義 的 通 道跰 並 試 圖蹙 去 查 找俁 在ZCD_NV_PANID 參 數 中 定 義 的 網牺 路跡 識訤 別低 字 的 網牺 路跡 。9.3 如 何 綁 定 設 備 ?一 個鞄 綁 定 是 兩 個鞄 設 備 的 應 用 層 之 間 的 一 條 邏 輯 鏈訿 結 。 多 個鞄 綁 定 可 被 建 立 在 一 個鞄 設 備 上 ,每俟 個鞄 綁 定 都 對蹹 應 資 料頔 分 組 的 一 個鞄 類詑 型 。 此 外 , 一 個鞄 綁 定 可 以 有 多 個鞄 目 的 設 備 ( 一 對蹹 多 綁 定 )。例 如 , 在 一 個鞄 具 有 多 個鞄 開 關詉 和 燈趰 泡 的 照 明 網牺 路跡 中 , 一 個鞄 開 關詉 可 以 控 制 一 個鞄 或 多 個鞄 燈趰 泡 。 在 這種牞 情 況 下 , 一 個鞄 綁 定 應 該 被 建 立 在 每俟 一 個鞄 開 關詉 上 。 這 允 許 應 用 在 不 知 道跰 實蹴 際狽 目 的 位 址佼 的 情 況下 來 發 送 資 料頔 包 。一 旦 一 個鞄 綁 定 被 建 立 在 一 個鞄 源 設 備 上 , 這 個鞄 應 用 就 可 以 在 不 需猀 要 知 道跰 明 確 的 目 的 位 址佼 的情 況 下 發 送 資 料頔 ( 在 zb_SendDataRequest() 的 調 用 中 , 無 效頒 位 址佼 -0xFFFE 應 當 被 用 來 當 作伿 目 的位 址佼 )。 這 將 導赫 致 協 定 堆 疊 根頨 據赼 資 料頔 包 的 命 令 識訤 別低 字 在 它 的 內 部 綁 定 表 中 來 查 找俁 目 的 地 。在 綁 定 入 口 處 可 以 有 多 個鞄 目 的 地 。 在 這 種牞 情 況 下 , 協 定 堆 疊 會 自 動 發 送 一 個鞄 資 料頔 包 的 副本 給 在 綁 定 入 口 定 義 的 每俟 一 個鞄 目 的 地 。同 時頗 , 如 果 在 建 立 映 射韗 時頗 NV_RESTORE 編 譯 選 項 被 致 能 , 協 定 堆 疊 將 會 在 非 易 失 性 隨機趙 記 憶赲 體 中 保 存 綁 定 入 口 。 當 設 備 發 生 意 外 重 置 ( 或 者 需猀 要 更俐 換 設 備 電踝 池 時頗 ), 這 是 非 常 有用 的 , 這 樣 設 備 就 可 以 在 不 需猀 要 使 用 者 重 新 建 立 綁 定 的 情 況 下 自 動 恢 復 。有 兩 種牞 辦 法 可 以 用 來 配 置 設 備 綁 定 。 如 果 目 的 設 備 的 擴 充 位 址佼 是 已 知 的 ,zb_BindDeviceRequest() 可 以 被 用 來 建 立 一 個鞄 綁 定 入 口 。如 果 擴 充 位 址佼 未 知 , 就 可 以 使 用 “ 按 下 按 鈕 ” 的 策 略 。 在 這 種牞 情 況 下 , 目 的 設 備 首靫 先 進入 一 個鞄 狀 態躊 , 在 該 狀 態躊 下 目 的 設 備 透 過跸 使 用 zb_AllowBindResponse() 來 回 應 對蹹 應 的 請 求俠 。 然後 zb_BindDeviceRequest() 函 數 ( 使 用 空 位 址佼 參 數 ) 將 被 在 源 設 備 上 使 用 。另 外 , 綁 定 也 可 以 透 過跸 使 用 外 部 除 錯 工 具 來 建 立 。193華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統注 意 : 綁 定 只 可 以 在 “ 互 補 的 ” 設 備 間 建 立 。 就 是 說狄 , 如 果 兩 個鞄 設 備 在 它 們靽 的 簡 單 描 述結 構躬 體 中 註 冊 了 相 同 的 命 令 ID, 並 且 其 中 一 個鞄 設 備 將 命 令 作伿 為 “ 輸 出 ”, 而 另 一 個鞄 設 備 將命 令 作伿 為 “ 輸 入 ”, 這 個鞄 綁 定 才 能 成 功 建 立 。9.4 如 何 開 發 一 個鞄 簡 單 的 私倌 有 應 用 規 範 ?以 下 是 使 用 Simple API 進 行 應 用 開 發 的 一 個鞄 方 法 :標 識訤 應 用 中 的 所 有 設 備— 例 如 溫 度 感 測 器赛 , 檢 測 感 測 器赛 , 自 動 調 溫 器赛 , 加 熱 裝 置 和 遠狚 端牣 控 制— 給 每俟 一 個鞄 設 備 分 配 一 個鞄 設 備 ID( 唯 一 的 16 位 識訤 別低 字 ) 標 識訤 需猀 要 在 設 備 間 交 換 的 “ 命 令 ” 並 且 給 每俟 一 個鞄 命 令 分 配 一 個鞄 唯 一 的 16 位 命 令ID。例 如 :— 溫 度 讀 取— 檢 測 讀 取— 自 動 調 溫 器赛 設 定 對蹹 象— 加 熱 / 冷位 卻 控 制 物 件 為 每俟 一 個鞄 命 令 , 標 識訤 設 備 的 “ 生 產 ”( 輸 出 ) 和 “ 消顆 費 ”( 輸 入 )— 溫 度 讀 取 就 是 從 溫 度 感 測 器赛 中 “ 輸 出 ”, 然 後 “ 輸 入 ” 給 自 動 調 溫 器赛— 檢 測 讀 取 就 是 從 檢 測 感 測 器赛 中 “ 輸 出 ”, 然 後 “ 輸 入 ” 給 自 動 調 溫 器赛— 等 等 。 給 每俟 一 個鞄 設 備 建 立 一 個鞄 簡 單 描 述 結 構躬 體 , 它 包 括 :— 給 每俟 一 個鞄 設 備 分 配 一 個鞄 設 備 識訤 別低 字 和 設 備 版 本— 給 設 備 指 定 一 個鞄 “ 輸 出 ” 和 “ 輸 入 ” 命 令 列 表— 指 定 一 個鞄 規 範 ID。 這 是 一 個鞄 16 位 元 的 值靹 可 以 標 識訤 特顠 定 的 應 用 規 範 。 這 是 由 ZigBe聯 盟 指 派 的 。命 令— 定 義 交 換 資 料頔 的 格頴 式 及 其 解 釋— 例 如 : 溫 度 值靹 , 可 以 作伿 為 交 換· ( 格頴 式 )“ 一 個鞄 8 位 值靹 ”· ( 解 釋 )“0 表 示 0 攝 氏 度 ,255 表 示 64 攝 氏 度 , 每俟 一 級 為 0.25 攝 氏 度 ”194華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統為 每俟 一 個鞄 設 備 寫 入 設 備 應 用— 具 有 “ 輸 出 ” 命 令 的 設 備 應 該 能 夠 定 期 的 或 當 外 部 事 件 發 生 時頗 產 生 資 料頔 包— 具 有 “ 輸 入 ” 命 令 的 設 備 應 該 能 夠 處 理 接 收 到 的 資 料頔 包 和 解 析 有 效頒 載跩 荷 。標 識訤 一 個鞄 綁 定 策 略 , 保 證訥 該 設 備 能 夠 正 確 的 交 換 資 料頔 包 。 請 參 考 應 用 實蹴 例 是如 何 做 到 這 一 點 的 。9.5 應 用 舉 例請 參 看 我侷 們靽 配 套鞽 提 供 的 “ 華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 實蹴 驗 指 導赫 書頟 ” 的 第 7 節 和第 8 節 。9.6 API 參 考 指 南本 節 由 以 下 部 分 組 成 :API 函 數回 調 函 數配 置 屬 性9.6.1 API 函 數9.6.1.1 zb_SystemResetzb_SystemReset 函 數 將 重 置 設 備 。 設 備 在 此 時頗 讀 取 配 置 屬 性 。ZCD_NV_STARTUP_OPTION 配 置 屬 性 在 啟 動 時頗 控 制 設 備 的 行 為 。如 果 它 指 示 配 置 屬 性 清 除 (ZCD_STARTOPT_CLEAR_CONFIG 被 置 位 元 ), 配 置 屬 性195華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統將 被 清 除 並 寫 入 它 們靽 的 預踣 設 值靹 。如 果 它 指 示 ZigBee 網牺 路跡 自 動 啟 動 (ZCD_STARTOPT_AUTO_START 被 置 位 元 ),ZigBee協 定 堆 疊 也 將 開 始 啟 動 。注 意 :zb_SystemReset 函 數 可 以 在 zb_WriteConfiguration 函 數 調 用 之 後 被 調 用 來 使 用 更俐新 後 的 配 置 重 啟 設 備 。注 意 : 當 zb_SystemReset 函 數 被 調 用 後 , 系倐 統 中 所 有 易 失 性 記 憶赲 體 將 被 重 置 。9.6.1.1.1 函 數 原鞝 型void zb_SystemReset ( void )9.6.1.1.2 函 數 參 數無9.6.1.1.3 函 數 返 回 值靹無9.6.1.2 zb_StartRequestzb_StartRequest 函 數 開 始 ZigBee 協 定 堆 疊 。 如 果 啟 動 選 項 指 示 之 前 的 網牺 路跡 狀 態躊 應 當 被恢 復 (ZCD_STARTOPT_CLEAR_CONFIG 被 置 位 元 ), 則 該 設 備 將 簡 單 地 載跩 入 先 前 保 存 的網牺 路跡 狀 態躊 , 並 在 ZigBee 網牺 路跡 中 實蹴 現 它 的 功 能 。否佞 則 , 設 備 將 要 麼猕 開 始 一 個鞄 新 網牺 路跡 或 者 加 入 一 個鞄 現 有 的 網牺 路跡 , 這 取 決俩 於 設 備 被 配 置 為 一個鞄 協 調 器赛 還 是 被 配 置 為 一 個鞄 路跡 由 器赛 / 終 端牣 設 備 。 在 這 種牞 情 況 下 , 設 備 將 延 遲 啟 動 , 延 遲 時頗 間在 配 置 屬 性 ZCD_NV_START_DELAY 中 給 定 。zb_StartConfirm 回 調 函 數 將 在 啟 動 過跸 程 的 最 後 被 調 用 。 啟 動 過跸 程 成 功 完侖 成 後 , 設 備 將 為ZigBee 網牺 路跡 中 發 送 、 接 收 和 路跡 由 資 料頔 包 做 好 準 備 。9.6.1.2.1 函 數 原鞝 型void zb_StartRequest ( void )196華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.1.2.2 函 數 參 數無9.6.1.2.3 函 數 返 回 值靹無9.6.1.3 zb_PermitJoiningRequestzb_PermitJoiningRequest 函 數 用 來 控 制 加 入 許 可 權 , 從 而 允 許 或 不 允 許 新 設 備 加 入 網牺 路跡 。9.6.1.3.1 函 數 原鞝 型void zb_PermitJoiningRequest ( uint16 destination, uint8 timeout )9.6.1.3.2 函 數 參 數址佼destinationdestination 參 數 表 示 需猀 要 設 定 加 入 許 可 權 的 設 備 的 位 址佼 。 這 通 常 是 一 個鞄 本 地 設 備 位或 一 個鞄 特顠 定 廣 播 位 址佼 ( 這 意 味 著 全 部 的 路跡 由 器赛 和 協 調 器赛 (0xFFFC))。 這 樣 , 單 一 設備 或 整超 個鞄 網牺 路跡 的 加 入 許 可 權 都 可 被 控 制 。timeouttimeouttimeout 參 數 表 示 加 入 許 可 權 被 開 啟 的 時頗 間 ( 以 秒 為 單 位 )。如 果 timeout 參 數 被 設 定 為 0x00, 那倴 麼猕 設 備 的 加 入 許 可 權 將 始 終 被 關詉 閉 。 如 果參 數 被 設 定 為 0xFF, 那倴 麼猕 設 備 的 加 入 許 可 權 將 始 終 被 開 啟 。9.6.1.3.3 函 數 返 回 值靹ZB_SUCCESS 或 一 個鞄 錯 誤狃 參 數9.6.1.4 zb_BindDevicezb_BindDevice 函 數 用 來 建 立 或 解 除 兩 個鞄 設 備 間 的 一 個鞄 綁 定 。 一 旦 建 立 了 綁 定 , 一 個鞄 源197華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統設 備 上 的 應 用 將 可 以 透 過跸 綁 定 的 commandId 發 送 資 訊 給 目 的 設 備 。 綁 定 被 儲 存 在 非 易 失 性記 憶赲 體 中 , 在 重 置 後 可 被 恢 復 ( 除 非 啟 動 選 項 有 其 他 的 明 確 要 求俠 )。 這 樣 , 意 外 重 置 或 臨 時頗斷 電踝 都 不 會 影 響 該 應 用 。9.6.1.4.1 函 數 原鞝 型uint8 zb_BindDevice ( uint8 create, uint16 commandId, uint8 *pDestination )9.6.1.4.2 函 數 參 數createcreate 參 數 為 TRUE 時頗 , 將 建 立 一 個鞄 新 的 綁 定 , 為 FALSE 時頗 , 將 佑 除 一 個鞄 現 有 的綁 定 。通commandIdcommandId 參 數 標 識訤 該 綁 定 可 以 應 用 的 資 訊 。 一 旦 建 立 綁 定 ,commandId 可 以 被過跸 調 用 zb_SendDataRequest 函 數 來 發 送 資 料頔 。pDestination當 添 加 一 個鞄 綁 定 時頗 ,pDestination 參 數 用 來 表 示 設 備 建 立 綁 定 所 需猀 要 的 一 個鞄 64 位 元IEEE 位 址佼 。 如 果 pDestination 參 數 為 NULL, 設 備 將 與犕 其 他 處 於 允 許 綁 定 模 式 下 的設 備 進 行 綁 定 。 有 關詉 允 許 綁 定 模 式 的 更俐 多 資 訊 , 請 參 看 9.6.1.5。當 佑 除 一 個鞄 綁 定 時頗 ,pDestination 參 數 應 當 被 置 為 NULL。9.6.1.4.3 函 數 返 回 值靹無9.6.1.5 zb_AllowBindzb_AllowBind 函 數 將 設 備 置 於 允 許 綁 定 模 式 ( 在 一 個鞄 給 定 的 時頗 間 週 期 內 )。 一 個鞄 同 等 設備 透 過跸 調 用 zb_BindDevice 函 數 ( 目 的 位 址佼 為 NULL) 可 以 與犕 一 個鞄 處 於 允 許 綁 定 模 式 下 的 設備 建 立 綁 定 。9.6.1.5.1 函 數 原鞝 型void zb_AllowBind ( uint16 commandId, uint8 timeout )198華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.1.5.2 函 數 參 數commandIdcommandId 參 數 標 識訤 綁 定 。 該 commandId 的 值靹 必 須 與犕 在 同 等 設 備 上 調 用zb_BindDevice 函 數 時頗 使 用 的 commandId 值靹 匹 配 。timeouttimeout 參 數 表 示 允 許 綁 定 模 式 的 保 持 時頗 間 ( 以 秒 為 單 位 )。如 果 timeout 被 置 為 0xFF, 設 備 將 為 這 個鞄 commandId 處 於 允 許 綁 定 模 式 , 沒俯 有 任何 逾跻 時頗 限 制 。如 果 timeout 被 置 為 0x00, 設 備 將 為 這 個鞄 commandId 取 消顆 允 許 綁 定 模 式 。否佞 則 , 在 規 定 的 時頗 間 內 設 備 將 為 這 個鞄 commandId 處 於 允 許 綁 定 模 式 。timeout 的 最 大 值靹 為 64( 若 超 過跸 64, 則 仍 為 64)。 在 任 何 時頗 刻 , 僅 能 有 一 個鞄 commandId使 用 timeout 規 定 時頗 間 內 的 允 許 綁 定 模 式 。9.6.1.5.3 函 數 返 回 值靹無9.6.1.6 zb_SendDataRequestzb_SendDataRequest 函 數 開 始 傳 送 一 個鞄 資 料頔 包 給 一 個鞄 同 等 設 備 。 傳 送 的 目 的 地 可 以 是 這個鞄 同 等 設 備 的 16 位 元 短 位 址佼 或 是 一 個鞄 無 效頒 位 址佼 。 在 後 一 種牞 情 況 下 , 資 料頔 包 將 被 發 送 給 之 前建 立 了 專 用 commandId 綁 定 的 設 備 。zb_SendDataRequest 函 數 立 即佘 返 回 。 發 送 資 料頔 操趀 作伿 的 狀 態躊 被 透 過跸 zb_SendDataCnf 回 調函 數 返 回 給 應 用 任 務 。9.6.1.6.1 函 數 原鞝 型void zb_SendDataRequest ( uint16 destination, uint16 commandId, uint8 len, uint8*pData, uint8 handle, uint8 ack, uint8 radius )9.6.1.6.2 函 數 參 數destinationdestination 參 數 表 示 ZigBee 網牺 路跡 中 的 設 備 將 要 傳 送 資 料頔 的 位 址佼 。destination 參 數 可被 設 定 為 以 下 三 種牞 情 況 之 一 : 短 位 址佼 ( 值靹 為 0x0000~0xFFF8) 這 是 實蹴 際狽 目 的 設 備 的 16 位 元 短 位 址佼 。199華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統 一 個鞄 廣 播 位 址佼 , 具 有 以 下 三 中 有 效頒 值靹 : 0xFFFF 廣 播 給 全 部 設 備 0xFFFD 僅 廣 播 給 接 收 器赛 開 啟 的 設 備 0xFFFC 僅 廣 播 給 協 調 器赛 和 全 部 的 路跡 由 器赛 一 個鞄 無 效頒 位 址佼 ( 值靹 為 0xFFFE) 在 這 種牞 情 況 下 , 目 的 設 備 不 在 應 用 中 定義 。 相 反 地 , 協 定 堆 疊 將 從 之 前 為 commandId 建 立 的 綁 定 讀 取 目 的 位 址佼 。commandIdcommandId 參 數 規 定 了 與犕 同 等 設 備 通 信 使 用 的 命 令 類詑 型 。lenlen 參 數 指 定 了 在 pData 緩 衝 區 的 位 元 組 數 量 。pDatapData 參 數 是 一 個鞄 指 向 將 被 傳 送 的 資 料頔 的 指 標 。handlehandle參 數 為 輸 出 傳 輸 包 含佳 一 個鞄 識訤 別低 字 。 這 個鞄 參 數 被 協 定 堆 疊 在zb_SendDataConfirm回 調 函 數 中 使 用 以 確 定 傳 輸 。txOptions這 是 傳 輸 選 項 的 一 個鞄 位 遮贆 罩 。ZB_ACK_REQUEST(0x10) 在 這 個鞄 資 料頔 包 的 傳 送 中 應 當 使 用 端牣 到 端牣 的 確 認狀 和 重傳 。 當 使 用 確 認狀 機趙 制 時頗 ,zb_SendDataConfirm 回 調 函 數 將 被 延 遲 , 直 到 收 到 確 認狀 。如 果 ack 參 數 為 FALSE,zb_SendDataConfirm 回 調 函 數 在 資 料頔 無 線 發 送 後 被 調 用 。如 果 目 的 位 址佼 是 一 個鞄 廣 播 位 址佼 , 那倴 麼猕 ack 參 數 被 忽 略 。radiusradius 參 數 表 示 在 ZigBee 網牺 路跡 中 資 料頔 可 以 被 轉視 發 的 最 大 跳跢 數 。 設 定 radius 參 數 為 0表 示 一 個鞄 預踣 設 radius 值靹 為 15 跳跢 。 這 可 以 被 用 來 限 制 在 一 個鞄 網牺 狀 網牺 路跡 中 資 料頔 包 的 傳播 。9.6.1.6.3 函 數 返 回 值靹無9.6.1.7 zb_ReadConfigurationzb_ReadConfiguration 函 數 被 用 來 從 非 易 失 性 記 憶赲 體 中 獲 得 配 置 屬 性 。9.6.1.7.1 函 數 原鞝 型void zb_ReadConfiguration( uint8 configId, uint8 len, void *pValue )200華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.1.7.2 函 數 參 數configIdconfigId 參 數 表 示 將 要 讀 取 的 配 置 屬 性 。 配 置 屬 性 列 表 和 它 們靽 的 識訤 別低 字 請 參 看 9.6.3len節 。len 參 數 表 示 pValue 緩 衝 區 的 容韕 量 ( 以 位 元 組 為 單 位 )。pValuepValue 參 數 是 一 個鞄 指 向 包 含佳 配 置 屬 性 的 緩 衝 區 的 指 標 。9.6.1.7.3 函 數 返 回 值靹無9.6.1.8 zb_WriteConfigurationzb_WriteConfiguration 函 數 被 用 來 保 存 配 置 屬 性 到 非 易 失 性 記 憶赲 體 中 。9.6.1.8.1 函 數 原鞝 型void zb_WriteConfiguration( uint8 configId, uint8 len, void *pValue )9.6.1.8.2 函 數 參 數configIdconfigId 參 數 表 示 將 要 保 存 的 配 置 屬 性 。 配 置 屬 性 列 表 和 它 們靽 的 識訤 別低 字 請 參 看 9.6.3len節 。len 參 數 表 示 pValue 緩 衝 區 的 容韕 量 ( 以 位 元 組 為 單 位 )。pValuepValue 參 數 是 一 個鞄 指 向 保 存 配 置 屬 性 的 緩 衝 區 的 指 標 。9.6.1.8.3 函 數 返 回 值靹無201華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.1.9 zb_GetDeviceInfozb_GetDeviceInfo 函 數 用 來 獲 得 設 備 資 訊 屬 性 。9.6.1.9.1 函 數 原鞝 型void zb_GetDeviceInfo ( uint8 parameter, uint8 len, void *pValue )9.6.1.9.2 函 數 參 數parameterparameter 參 數 表 示 將 要 讀 取 的 設 備 資 訊 屬 性 。 下 表 是 設 備 資 訊 屬 性 列 表 :屬 性 識訤 別低 字類詑 型 描 述ZB_INFO_DEV_STATE 0x00 8 位ZigBee 設 備 的 目 前 狀 態躊 。 可 以 選 用在 ZDApp.h 檔 中 的devStates_tenumeration 中 定 義 的 一個鞄 值靹 。ZB_INFO_IEEE_ADDR 0x01 64 位設 備 的 64 位 元 IEEE 位 址佼 ( 全 球 唯一 )。ZB_INFO_SHORT_ADDR 0x02 16 位設 備 的 16 位 元 短 位 址佼 ( 網牺 路跡 中 唯一 )。ZB_INFO_PARENT_SHORT_ADDR 0x03 16 位 設 備 的 父 設 備 的 16 位 元 短 位 址佼 。ZB_INFO_PARENT_IEEE_ADDR 0x04 64 位設 備 的 父 設 備 的 64 位 元 IEEE 位址佼 。ZB_INFO_CHANNEL 0x05 8 位設 備 運跮 行 的 通 道跰 。 在 2.4GHz 頻 段 ,有 16 個鞄 通 道跰 , 編 號 從 11 到 26。ZB_INFO_PAN_ID 0x06 16 位 設 備 所 在 ZigBee 網牺 路跡 的 識訤 別低 字 。ZB_INFO_EXT_PAN_ID 0x07 64 位網牺 路跡 中 ZigBee 協 調 器赛 的 64 位 IEEE位 址佼 。lenlen 參 數 表 示 pValue 緩 衝 區 的 容韕 量 ( 以 位 元 組 為 單 位 )。pValuepValue 參 數 是 一 個鞄 指 向 包 含佳 設 備 資 訊 屬 性 的 緩 衝 區 的 指 標 。注 意 : 應 用 必 須 保 證訥 緩 衝 區 有 足倦 夠 容韕 量 來 允 許 屬 性 的 保 存 。202華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.1.9.3 函 數 返 回 值靹無9.6.1.10 zb_FindDeviceRequestzb_FindDeviceRequest 函 數 被 用 來 決俩 定 網牺 路跡 中 一 個鞄 設 備 的 短 位 址佼 。 設 備 開 始 調 用zb_FindDeviceRequest 函 數 , 它 將 被 同 一 網牺 路跡 中 的 其 他 成 員鞬 所 發 現 。 搜 索 完侖 成 後 ,zv_FindDeviceConfirm 回 調 函 數 被 調 用 。9.6.1.10.1 函 數 原鞝 型void zb_FindDeviceRequest( uint8 searchType, uint8 *searchKey)9.6.1.10.2 函 數 參 數searchTypesearchType 參 數 表 示 搜 索 方 式 。 可 以 使 用 下 面 的 搜 索 方 式 :ZB_IEEE_SEARCHsearchKeysearchKey 參 數 包 含佳 被 發 現 設 備 的 獨趸 特顠 資 訊 。searchKey 參 數 取 決俩 於 searchType 參 數 。針 對蹹 每俟 一 個鞄 searchType 參 數 ,searchKey 的 內 容韕 如 下 : ZB_IEEE_SEARCH searchKey 是 被 發 現 設 備 的 64 位 元 IEEE 位 址佼 。9.6.1.10.3 函 數 返 回 值靹無9.6.2 回 調 函 數本 節 是 Simple API 回 調 函 數 的 參 考 。Simple API 回 調 函 數 被 ZigBee 應 用 所 執 行 , 被ZigBee 協 定 堆 疊 所 調 用 。9.6.2.1 zb_StartConfirmzb_StartConfirm 回 調 函 數 在 一 個鞄 啟 動 請 求俠 操趀 作伿 完侖 成 後 被 ZigBee 協 定 堆 疊 所 調 用 。 這 用203華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統來 通 知 這 個鞄 啟 動 操趀 作伿 的 狀 態躊 給 Simple Application 任 務 。如 果 狀 態躊 為 ZB_SUCCESS, 表 明 設 備 已 經 成 功 啟 動 或 加 入 ZigBee 網牺 路跡 ( 這 取 決俩 於 設 備被 程 式 為 協 調 器赛 或 路跡 由 器赛 / 終 端牣 設 備 )。9.6.2.1.1 函 數 原鞝 型void zb_StartConfirm( uint8 status )9.6.2.1.2 函 數 參 數status9.6.2.2 zb_BindConfirmzb_BindConfirm 回 調 函 數 在 一 個鞄 綁 定 操趀 作伿 完侖 成 後 被 ZigBee 協 定 堆 疊 所 調 用 。 它 包 含佳 了綁 定 操趀 作伿 的 狀 態躊 。9.6.2.2.1 函 數 原鞝 型void zb_BindConfirm( uint16 commandId, uint8 status )9.6.2.2.2 函 數 參 數commandIdcommandId 參 數 標 識訤 綁 定 。 這 個鞄 參 數 匹 配 傳 遞狟 給 zb_BindDevice 函 數 的 commandId,本 回 調 函 數 是 對蹹 zb_BindDevice 函 數 的 確 認狀 。statusstatus 參 數 包 含佳 了 綁 定 操趀 作伿 的 結 果 。9.6.2.3 zb_AllowBindConfirm如 果 一 個鞄 設 備 處 於 允 許 綁 定 模 式 並 且 它 相 應 來 自 另 一 個鞄 設 備 的 綁 定 請 求俠 , 那倴 麼猕zb_AllowBindConfirm 回 調 函 數 被 ZigBee 協 定 堆 疊 所 調 用 。9.6.2.3.1 函 數 原鞝 型204華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統void zb_AllowBindConfirm( uint16 source )9.6.2.3.2 函 數 參 數sourceSource 參 數 包 含佳 了 請 求俠 與犕 這 個鞄 設 備 綁 定 的 源 設 備 的 位 址佼 。9.6.2.4 zb_SendDataConfirmzb_SendDataConfirm 回 調 函 數 在 一 個鞄 發 送 資 料頔 操趀 作伿 完侖 成 後 被 ZigBee 協 定 堆 疊 所 調 用 。當 進 行 帶 有 確 認狀 機趙 制 的 資 料頔 發 送 時頗 , 在 收 到 確 認狀 或 出 現 逾跻 時頗 時頗 , 回 調 函 數 才 返 回 。 在 帶有 確 認狀 機趙 制 的 zb_SendDataConfirm 和 zb_SendDataRequest 之 間 的 時頗 間 間 隔踖 的 改俌 變 取 決俩 於 網牺路跡 狀 況 和 資 訊 發 送 的 跳跢 數 。9.6.2.4.1 函 數 原鞝 型void zb_SendDataConfirm( uint8 handle, uint8 status )9.6.2.4.2 函 數 參 數handlehandle 參 數 標 識訤 發 送 資 料頔 操趀 作伿 。handle 參 數 的 值靹 匹 配 傳 遞狟 給 zb_SendDataRequest函 數 的 handle 的 值靹 。 本 回 調 函 數 是 對蹹 zb_SendDataRequest 函 數 的 確 認狀 。statusstatus 參 數 包 含佳 了 發 送 資 料頔 操趀 作伿 的 狀 態躊 。9.6.2.5 zb_ReceiveDataIndicationzb_ReceiveDataIndication 回 調 函 數 被 ZigBee 協 定 堆 疊 非 同 步俞 調 用 來 通 知 應 用 接 收 到 了來 自 同 等 設 備 的 資 料頔 。9.6.2.5.1 函 數 原鞝 型void zb_ReceiveDataIndication(uint16 source, uint16 commandId, uint8 len, uint8 *pData)205華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.2.5.2 函 數 參 數sourcesource 參 數 包 含佳 了 傳 遞狟 資 料頔 的 設 備 的 16 位 元 短 位 址佼 。commandIdcommandId 參 數 包 含佳 了 綁 定 的 命 令 識訤 別低 字 。lenlen 參 數 表 示 pData 緩 衝 區 的 容韕 量 ( 以 位 元 組 為 單 位 )。pDatapData 參 數 指 向 接 收 到 的 資 料頔 。9.6.2.6 zb_FindDeviceConfirmzb_FindDeviceConfirm 回 除 錯 函 數 在 查 找俁 設 備 操趀 作伿 完侖 成 後 被 ZigBee 協 定 堆 疊 調 用 。9.6.2.6.1 函 數 原鞝 型void zb_FindDeviceConfirm( uint8 searchType, uint8 *searchKey, uint8 *result )9.6.2.6.2 函 數 參 數searchTypesearchType 參 數 表 示 被 請 求俠 的 搜 索 操趀 作伿 。searchKeysearchKey 參 數 包 含佳 被 發 現 設 備 的 獨趸 特顠 資 訊 。searchKey 參 數 取 決俩 於 searchType 參 數 。針 對蹹 每俟 一 個鞄 searchType 參 數 ,searchKey 的 內 容韕 如 下 : ZB_IEEE_SEARCH searchKey 是 被 發 現 設 備 的 64 位 元 IEEE 位 址佼 。result一 個鞄 指 向 包 含佳 搜 索 結 果 的 資 料頔 指 標 。 如 果 searchType 是 ZB_IEEE_SEARCH, 那倴 麼猕它 是 與犕 搜 索 相 匹 配 的 設 備 的 16 位 元 位 址佼 。9.6.2.7 zb_HandleKeys當 一 個鞄 鍵 盤 事 件 被 觸 發 時頗 ,zb_HandleKeys 函 數 被 作伿 業 系倐 統 調 用 。 這 發 生 在 開 發 板 上 的鍵 盤 被 按 下 的 時頗 候鞅 。206華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.2.7.1 函 數 原鞝 型void zb_HandleKeys( uint8 shift, uint8 keys )9.6.2.7.2 函 數 參 數shift當 shift 被 按 下 同 時頗 其 他 鍵 也 被 按 下 時頗 , 該 值靹 為 真 。Shift 鍵 僅 在 某 些 硬 體 開 發 板 上可 用 。keyskeys 參 數 表 示 被 按 下 的 鍵 。9.6.2.8 zb_HandleOsalEvent當 一 個鞄 任 務 事 件 被 觸 發 時頗 ,zb_HandleOsalEvent 函 數 被 作伿 業 系倐 統 調 用 。 一 個鞄 應 用 可 以 透過跸 使 用 osal_set_event 或 osal_start_timer 函 數 來 設 定 一 個鞄 任 務 。9.6.2.8.1 函 數 原鞝 型void zb_HandleOsalEvent( uint16 event )9.6.2.8.2 函 數 參 數eventevent 參 數 包 含佳 一 個鞄 位 遮贆 罩 。 位 遮贆 罩 中 的 每俟 一 個鞄 位 對蹹 應 一 個鞄 任 務 事 件 。9.6.3 配 置 參 數下 面 的 配 置 屬 性 列 表 可 以 透 過跸 使 用 zb_WriteConfiguration 和 zb_ReadConfiguration 函 數從 非 易 失 性 記 憶赲 體 中 讀 取 或 寫 入 。每俟 一 個鞄 配 置 參 數 在 程 式 中 都 有 被 定 義 的 預踣 設 值靹 。 一 旦 一 個鞄 映 射韗 被 下 載跩 到 設 備 中 , 配 置 參數 被 初 始 化 為 這 些 預踣 設 值靹 。在 一 個鞄 設 備 被 用 一 個鞄 映 射韗 程 式 後 , 這 些 參 數 可 以 被 應 用 或 一 個鞄 外 部 PC 工 具 或 一 個鞄 外 部微 控 制 器赛 所 改俌 變 。 在 該 設 備 被 重 置 和 重 啟 之 前 , 對蹹 這 些 參 數 所 做 的 任 何 改俌 變 都 不 會 起 作伿 用 。透 過跸 設 定 恰 當 的 啟 動 選 項 參 數 可 以 清 除 所 有 的 配 置 設 定 並 將 它 們靽 恢 復 到 初 始 的 預踣 設 設207華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統定 。配 置 參 數 被 分 類詑 為 “ 特顠 定 網牺 路跡 ” 參 數 和 “ 特顠 定 設 備 ” 參 數 。 一 個鞄 網牺 路跡 中 的 所 有 設 備 的“ 特顠 定 網牺 路跡 ” 配 置 參 數 應 當 被 設 定 為 相 同 的 值靹 。 每俟 一 個鞄 設 備 的 “ 特顠 定 設 備 ” 參 數 可 以 被 設 定為 不 同 的 值靹 。9.6.3.1 特顠 定 網牺 路跡 參 數ZCD_NV_PANID配 置 ID:0x0083; 容韕 量 :2 位 元 組 ; 預踣 設 值靹 :ZDAPP_CONFIG_PAN_ID( 在 f8wConfig.cfg文 件 中 )。該 參 數 標 識訤 ZigBee 網牺 路跡 。 它 可 以 被 設 定 為 0~0x3FFF 之 間 的 一 個鞄 值靹 。 對蹹 於 該 參 數 , 同一 相 鄰贊 區 域 的 不 同 網牺 路跡 必 須 有 不 同 的 值靹 。 它 可 以 被 設 定 為 0xFFFF 這 個鞄 特顠 殊頻 值靹 表 示 “ 不 關詉心 ”。ZCD_NV_CHANLIST配 置 ID:0x0084; 容韕 量 :4 位 元 組 ; 預踣 設 值靹 :DEFAULT_CHANLIST( 在 f8wConfig.cfg文 件 中 )。該 參 數 是 一 個鞄 網牺 路跡 所 運跮 行 通 道跰 的 位 元 遮贆 罩 。 存 在 於 同 一 相 鄰贊 區 域 的 多 個鞄 網牺 路跡 建 議 使 用 不同 的 值靹 。ZCD_NV_PRECFGKEY配 置 ID:0x0062; 容韕 量 :16 位 元 組 ; 預踣 設 值靹 :defaultKey[]( 在 nwk_globals.c 文 件 中 )。若 安 全 功 能 被 致 能 , 這 個鞄 128 位 元 的 KEY 將 為 資 料頔 包 的 安 全 所 使 用 。ZCD_NV_PRECFGKEYS_ENABLE配 置 ID:0x0063; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :zgPreConfigKeys( 在 ZGlobals.c 文 件 中 )。若 安 全 功 能 被 致 能 , 有 兩 種牞 方 法 來 分 配 安 全 KEY 給 網牺 路跡 中 的 所 有 設 備 。如 果 該 參 數 為 TRUE, 那倴 麼猕 安 全 KEY 必 須 預踣 先 配 置 在 網牺 路跡 中 的 所 有 設 備 上 。如 果 該 參 數 為 FALSE, 那倴 麼猕 安 全 KEY 只 需猀 要 被 配 置 在 協 調 器赛 設 備 上 。 在 這 種牞 情 況 下 ,安 全 KEY 被 協 調 器赛 分 配 給 加 入 網牺 路跡 的 每俟 一 個鞄 設 備 。 這 種牞 分 配 KEY 的 方 式 在 資 料頔 包 傳 送 的最 後 一 跳跢 偶 軟爾 會 遭贈 到 “ 清 除 ” 並 且 當 一 個鞄 惡 意 設 備 可 以 捕項 獲 該 KEY 時頗 , 可 能 構躬 成 一 個鞄 簡 單的 “ 週 期 性 的 脆 弱韪 ”。 因 此 , 我侷 們靽 不 推 薦 這 種牞 方 式 , 除 非 可 以 保 證訥 在 網牺 路跡 形侫 成 時頗 區 域 內 不 存在 惡 意 設 備 。ZCD_NV_SECURITY_LEVEL配 置 ID:0x0061; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :SECURITY_LEVEL( 在 nwk_globals.h208華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統文 件 中 )。如 果 安 全 功 能 被 致 能 , 所 有 的 安 全 級 別低 可 以 被 應 用 到 每俟 一 個鞄 資 料頔 包 。 安 全 級 別低 從 1 到 7。在 安 全 級 別低 1 到 3 中 , 資 料頔 包 不 被 加 密 , 但伽 它 們靽 被 驗 證訥 碼 來 驗 證訥 。 每俟 一 個鞄 資 料頔 包 的 驗 證訥碼 可 以 是 4,8 或 者 16 位 元 組 。在 安 全 級 別低 4 中 , 資 料頔 包 被 加 密 但伽 不 被 驗 證訥 。 不 建 議 使 用 該 級 別低 。在 安 全 級 別低 5 到 7 中 , 資 料頔 包 被 加 密 同 時頗 被 驗 證訥 碼 來 驗 證訥 。 每俟 一 個鞄 資 料頔 包 的 驗 證訥 碼 可 以是 4,8 或 者 16 位 元 組 。ZCD_NV_BCAST_RETRIES配 置 ID:0x002E; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :MAX_BCAST_RETRIES( 在 ZGlobals.h文 件 中 )。當 傳 送 一 個鞄 廣 播 資 料頔 包 時頗 , 一 個鞄 設 備 將 試 圖蹙 重 傳 的 最 大 次 數 。典 型 值靹 為 1 到 3。ZCD_NV_PASSIVE_ACK_TIMEOUT配 置 ID:0x002F; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :PASSIVE_ACK_TIMEOUT( 在 ZGlobals.h文 件 中 )。在 重 傳 一 個鞄 廣 播 資 料頔 包 之 前 , 一 個鞄 設 備 將 等 待 去 監牐 聽 它 的 鄰贊 居 節 點 的 總 時頗 間 ( 以 100毫 秒 為 單 位 )。ZCD_NV_BCAST_DELIVERY_TIME配 置 ID:0x0030; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :BCAST_DELIVERY_TIME( 在 ZGlobals.h文 件 中 )。它 被 認狀 為 是 一 個鞄 廣 播 資 料頔 包 傳 播 透 過跸 整超 個鞄 網牺 路跡 的 總 時頗 間 ( 以 100 毫 秒 ) 為 單 位 。注 意 : 設 定 該 參 數 時頗 必 須 謹覊 慎 行 事 。 它 的 最 小 值靹 必 須 設 定 為(ZCD_NV_BCAST_RETRIES + 1) * ZCD_NV_PASSIVE_ACK_TIMEOUT安 全 起 見倝 , 實蹴 際狽 值靹 必 須 比 上 述 公 式 計 算牨 出 的 值靹 大 500 毫 秒 或 更俐 多 。ZCD_NV_ROUTE_EXPIRY_TIME配 置 ID:0x002C; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :ROUTE_EXPIRY_TIME( 在 f8wConfig.cfg文 件 中 )。在 路跡 由 器赛 記 錄 被 標 記 為 過跸 期 之 前 , 該 路跡 由 器赛 必 須 處 於 空 閒 ( 例 如 , 沒俯 有 資 料頔 包 在 該 路跡 由器赛 上 傳 送 ) 的 總 時頗 間 ( 以 秒 為 單 位 )。 一 個鞄 過跸 期 的 記 錄 不 被 佑 除 除 非 需猀 要 為 一 個鞄 新 的 記 錄 準備 空 間 。它 可 以 被 設 定 為 特顠 殊頻 值靹 0 來 關詉 閉 路跡 由 期 限 , 也 就 是 說狄 , 路跡 由 記 錄 永 遠狚 都 不 會 過跸 期 。209華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.3.2 特顠 定 設 備 參 數9.6.3.2.1 啟 動 參 數ZCD_NV_STARTUP_OPTION配 置 ID:0x0003; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :0。的複設該 參 數 控 制 設 備 的 啟 動 邏 輯 。 它 是 以 下 值靹 的 一 個鞄 位 遮贆 罩 : ZCD_STARTOPT_CLEAR_CONFIG ( 0x01 )如 果 這 個鞄 選 項 被 置 位 元 , 該 設 備 將 覆 蓋犡 它 的 所 有 配 置 參 數 ( 除 了 它 自 己 ) 為 被 程 式“ 預踣 設 ” 配 置 。 這 將 用 來 清 除 已 存 在 的 配 置 並 將 設 備 帶 入 一 個鞄 已 知 狀 態躊 。注 意 : 當 這 些 配 置 參 數 被 覆 蓋犡 時頗 ,ZCD_NV_STARTUP_OPTION 參 數 本 身倧 不 會 被覆 蓋犡 , 除 非 清 除 了 ZCD_STARTOPT_CLEAR_CONFIG 位 。 ZCD_STARTOPT_CLEAR_STATE ( 0x02 )如 果 這 個鞄 選 項 被 置 位 元 , 該 設 備 將 試 圖蹙 清 除 它 的 網牺 路跡 狀 態躊 到 重 置 前 的 狀 態躊 。 如 果 這個鞄設 備 已 經 是 網牺 路跡 中 的 一 部 分 並 且 已 經 保 存 了 它 先 前 的 網牺 路跡 狀 態躊 , 可 以 使 用 這 個鞄 選項 。注 意 :NV_RESTORE 編 譯 標 記 必 須 被 開 啟 以 使 用 這 個鞄 特顠 性 。 在 這 種牞 情 況 下 , 在 該設 備 加 入 網牺 路跡 之 後 , 這 個鞄 選 項 將 被 協 定 堆 疊 自 動 清 除 。 這 是 為 了 讓 設 備 的 一 個鞄 意 外位 元 不 會 阻 止 網牺 路跡 狀 態躊 的 丟 失 。 為 了 清 除 網牺 路跡 狀 態躊 , 在 重 置 之 前 , 該 應 用 必 須 明 確置 該 選 項 。 ZCD_STARTOPT_AUTO_START ( 0x04 )如 果 這 個鞄 選 項 被 置 位 元 , 設 備 一 旦 上 電踝 將 立 即佘 開 始 ZigBee 網牺 路跡 功 能 。 否佞 則 , 設 備將等 待 直 到 應 用 明 確 要 求俠 啟 動 。ZCD_NV_START_DELAY配 置 ID:0x0004; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :START_DELAY( 在 ZGlobals.c 文 件 中 )。在 ZigBee 功 能 被 啟 動 前 ,zb_StartRequest() 函 數 被 調 用 後 ( 或 上 電踝 後 ( 如 果 啟 動 選 項 配置 參 數 的 自 動 啟 動 位 被 置 位 )) 的 最 小 延 時頗 ( 以 毫 秒 為 單 位 )。ZCD_NV_EXTADDR配 置 ID:0x0001; 容韕 量 :8 位 元 組 ; 預踣 設 值靹 : 無 效頒 ( 全 F )210華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統設 備 的 64 位 元 擴 充 位 址佼 。ZCD_NV_LOGICAL_TYPE配 置 ID:0x0087; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :DEVICE_LOGICAL_TYPE ( 在 ZGlobals.h文 件 中 )。ZigBee 網牺 路跡 中 的 設 備 的 邏 輯 類詑 型 。 它 可 以 被 設 定 為 以 下 三 個鞄 值靹 之 一 :ZG_DEVICETYPE_COORDINATOR ( 0x00 ),ZG_DEVICETYPE_ROUTER ( 0x01 )或 ZG_DEVICETYPE_ENDDEVICE ( 0x02 )。如 果 終 端牣 設 備 專 案頥 被 用 來 建 立 映 射韗 , 邏 輯 類詑 型 將 被 自 動 選 定 。 否佞 則 , 邏 輯 類詑 型 可 以 被 應用 配 置 為 協 調 器赛 或 路跡 由 器赛 。9.6.3.2.2 輪贁 詢 參 數( 這 些 都 是 只 適贅 用 於 電踝 池 供 電踝 終 端牣 設 備 。)ZCD_NV_POLL_RATE配 置 ID:0x0024; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :POLL_RATE( 在 f8wConfig.cfg 文 件 中 )。如 果 該 參 數 設 定 為 一 個鞄 非 0 值靹 , 一 個鞄 終 端牣 設 備 將 會 以 這 個鞄 值靹 週 期 性 喚 醒 來 與犕 它 的 父 設 備檢 查 資 料頔 。 該 值靹 可 以 為 1~65000( 以 毫 秒 為 單 位 )。如 果 該 參 數 設 定 為 0, 終 端牣 設 備 將 不 會 自 動 喚 醒 來 核頤 對蹹 資 料頔 。 相 反 , 一 個鞄 外 部 觸 發 或 一個鞄 內 部 事 件 ( 例 如 , 透 過跸 作伿 業 系倐 統 抽 象 層 (OSAL) 計 時頗 器赛 或 事 件 介 面 ) 可 被 用 來 喚 醒 設 備 。ZCD_NV_QUEUED_POLL_RATE配 置 ID:0x0025; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :QUEUED_POLL_RATE( 在 f8wConfig.cfg文 件 中 )。當 一 個鞄 終 端牣 設 備 與犕 它 的 父 設 備 檢 查 資 料頔 並 發 現 它 的 父 設 備 確 實蹴 有 資 料頔 時頗 , 萬 一 在 它 的 父設 備 上 有 更俐 多 的 資 料頔 在 為 該 設 備 排 隊 , 該 設 備 可 以 以 更俐 短 的 時頗 間 進 行 再 次 輪贁 詢 。該 特顠 性 可 以 透 過跸 設 定 為 0 值靹 而 關詉 閉 。ZCD_NV_RESPONSE_POLL_RATE配 置 ID:0x0026; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :RESPONSE_POLL_RATE( 在 f8wConfig.cfg文 件 中 )。當 一 個鞄 終 端牣 設 備 發 送 一 個鞄 資 料頔 包 時頗 , 如 果 應 用 期 望 接 收 資 料頔 包 的 回 應 , 那倴 麼猕 該 設 備 可 以以 更俐 短 的 時頗 間 進 行 再 次 輪贁 詢 。注 意 : 如 果 設 備 的 發 送 與犕 接 收 在 同 一 時頗 間 或 發 送 資 料頔 太 快侳 了 , 那倴 麼猕 排 隊 和 回 應 輪贁 詢 率 的211華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統設 定 必 須 謹覊 慎 行 事 。如 果 設 備 發 送 資 料頔 太 快侳 , 設 定 一 個鞄 排 隊 輪贁 詢 率 為 比 發 送 率 更俐 高 的 一 個鞄 時頗 間 值靹 將 導赫 致 輪贁 詢事 件 將 被 不 斷 地 往 後 改俌 期 。 然 後 該 設 備 將 永 遠狚 不 與犕 它 的 父 設 備 輪贁 詢 資 料頔 , 因 此 , 它 可 能 會 錯失 任 何 發 往 它 的 資 料頔 。ZCD_NV_POLL_FAILURE_RETRIES配 置 ID:0x0029; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :MAX_POLL_FAILURE_RETRIES( 在f8wConfig.cfg 文 件 中 )。一 個鞄 終 端牣 設 備 在 請 求俠 找俁 到 新 的 父 設 備 的 途 徑韬 之 前 , 該 設 備 聯 繫訇 它 的 父 設 備 的 失 敗 次 數 。ZCD_NV_INDIRECT_MSG_TIMEOUT配 置 ID:0x002B; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :NWK_INDIRECT_MSG_TIMEOUT( 在f8wConfig.cfg 文 件 中 )。一 個鞄 路跡 由 器赛 或 協 調 器赛 設 備 為 它 的 子 終 端牣 設 備 緩 衝 資 料頔 的 時頗 間 ( 以 秒 為 單 位 )。 建 議 該 值靹至 少 要 大 於 輪贁 詢 率 以 確 保 終 端牣 設 備 有 機趙 會 喚 醒 並 輪贁 詢 資 料頔 。9.6.3.2.3 端牣 到 端牣 確 認狀 參 數當 調 用 zb_SendDataRequest() 函 數 並 設 定 了 txOptions 參 數 中 恰 當 的 位 元 來 發 送 一 個鞄 資料頔 包 時頗 , 如 果 應 用 明 確 指 明 需猀 要 端牣 到 端牣 的 確 認狀 , 則 可 以 使 用 端牣 到 端牣 的 確 認狀 和 重 傳 機趙 制 。ZCD_NV_APS_FRAME_RETRIES配 置 ID:0x0043; 容韕 量 :1 位 元 組 ; 預踣 設 值靹 :APSC_MAX_FRAME_RETRIES ( 在f8wConfig.cfg 文 件 中 )。若 在 端牣 到 端牣 確 認狀 選 項 被 致 能 的 情 況 下 資 料頔 包 被 發 送 , 在 應 用 層 一 個鞄 資 料頔 包 可 以 被 重 傳 的次 數 。ZCD_NV_APS_ACK_WAIT_DURATION配 置 ID:0x0044; 容韕 量 :2 位 元 組 ; 預踣 設 值靹 :APSC_ACK_WAIT_DURATION_POLLED( 在 f8wConfig.cfg 文 件 中 )。一 個鞄 設 備 在 發 送 完侖 一 個鞄 帶 有 端牣 到 端牣 確 認狀 機趙 制 的 資 料頔 包 後 等 待 目 的 設 備 發 回 確 認狀 資 料頔 包的 時頗 間 ( 以 毫 秒 為 單 位 )。 在 這 段 時頗 間 內 如 果 發 送 設 備 沒俯 有 收 到 確 認狀 資 料頔 包 , 它 將 認狀 為 是 發送 失 敗 , 並 且 進 行 重 傳 。注 意 : 如 果 目 的 ( 或 源 ) 設 備 是 一 個鞄 終 端牣 設 備 , 設 定 該 參 數 必 須 謹覊 慎 行 事 , 因 為 , 這 些設 備 不 會 被 經 常 喚 醒 , 因 此 將 會 增猹 加 一 個鞄 資 料頔 包 ( 資 料頔 或 確 認狀 ) 的 延 遲 , 這 通 常 是 由 網牺 路跡 引起 的 。212華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統9.6.3.2.4 其 他 參 數ZCD_NV_BINDING_TIME配 置 ID:0x0046; 容韕 量 :2 位 元 組 ; 預踣 設 值靹 :APS_DEFAULT_MAXBINDING_TIME( 在ZGlobals.h 文 件 中 )。一 個鞄 設 備 將 等 待 的 對蹹 一 個鞄 綁 定 請 求俠 的 回 應 時頗 間 ( 以 毫 秒 為 單 位 )。ZCD_NV_USERDESC配 置 ID:0x0081; 容韕 量 :17 位 元 組 ; 預踣 設 值靹 :0使 用 者 自 定 義 資 料頔 的 一 個鞄 可 選 的 16 位 元 組 ( 附 加 1 位 元 組 首靫 部 ), 它 可 以 被 配 置 在 一 個鞄設 備 上以 便 在 以 後 可 以 容韕 易 地 進 行 標 識訤 或 描 述 。213華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統10. Z-<strong>Stack</strong> 協 定 堆 疊 v1.4.2 的 編 譯 選 項本 節 介 紹 使 用 TI 的 Z-<strong>Stack</strong> 協 定 堆 疊 時頗 相 關詉 編 譯 選 項 的 資 訊 。10.1 使 用 Z-<strong>Stack</strong> 編 譯 選 項10.1.1 選 擇赾 邏 輯 設 備 類詑 型ZigBee 設 備 可 被 配 置 為 以 下 三 種牞 方 式 之 一 :ZigBee 協 調 器赛 該 設 備 被 配 置 來 啟 動 IEEE 802.15.4 網牺 路跡 , 並 將 作伿 為 該 網牺 路跡 中 的 個鞄域 網牺 (PAN) 協 調 器赛 。ZigBee 路跡 由 器赛該 設 備 被 配 置 來 加 入 一 個鞄 現 有 的 網牺 路跡 , 關詉 聯 一 個鞄 協 調 器赛 或 路跡 由器赛 , 然 後 允 許 其 他 設 備 關詉 聯 到 該 設 備 。 該 設 備 將 在 網牺 路跡 中 路跡 由 資 料頔 包 。ZigBee 終 端牣 設 備該 設 備 被 配 置 來 加 入 一 個鞄 現 有 的 網牺 路跡 並 將 關詉 聯 一 個鞄 協 調 器赛 或 路跡由 器赛 。10.1.2 定 位 編 譯 選 項一 個鞄 具 體 專 案頥 的 編 譯 選 項 位 於 兩 個鞄 地 方 。 很 少 被 更俐 改俌 的 編 譯 選 項 位 於 鏈訿 結 器赛 控 制 檔 , 用於 上 面 討 論 過跸 的 每俟 一 種牞 邏 輯 設 備 類詑 型 。 可 被 更俐 改俌 以 致 能 / 禁 止 某 些 特顠 性 的 使 用 者 自 定 義 選 項位 於 IAR 專 案頥 檔 中 。 下 面 我侷 們靽 以 SampleLight 協 調 器赛 專 案頥 中 的 這 兩 個鞄 檔 為 例 , 存 取 其 他Z-<strong>Stack</strong> 專 案頥 的 方 法 是 相 似 的 。10.1.2.1 鏈訿 結 器赛 控 制 檔 中 的 編 譯 選 項料頔 夾侅 中 :SampleLight 專 案頥 檔 位 於 ...\Projects\zstack\HomeAutomation\SampleLight\CC2430DB 資214華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統滑 鼠踵 左 鍵 雙覯 擊 SampleLight.eww 檔 來 打 開 專 案頥 , 從 Workspace 下 面 的 下 拉 清 單 選 擇赾CoordinatorEB 配 置 , 然 後 打 開 Tools 資 料頔 夾侅 。 許 多 鏈訿 結 器赛 控 制 檔 位 於 Tools 資 料頔 夾侅 中 。 該 資料頔 夾侅 包 含佳 Z-<strong>Stack</strong> 專 案頥 中 被 使 用 的 各 種牞 配 置 檔 和 可 執 行 工 具 。 通 用 的 編 譯 選 項 在f8wConfig.cfg 檔 中 被 定 義 。 例 如 , 該 檔 中 規 定 了 當 一 個鞄 設 備 啟 動 時頗 將 被 使 用 的 頻 道跰 和 個鞄 域 網牺識訤 別低 字 (PAN ID)。 使 用 者 在 為 他 們靽 的 專 案頥 建 立 具 體 的 頻 道跰 設 定 時頗 , 建 議 使 用 者 在f8wConfig.cfg 檔 中 進 行 修鞈 改俌 。 這 將 允 許 開 發 者 建 立 “ 個鞄 人 的 ” 頻 道跰 以 避 免佊 和 其 他 頻 道跰 衝 突 。設 備 的 特顠 定 編 譯 選 項 位 於 f8wCoord.cfg,f8wEndev.cfg 和 f8wRouter.cfg 檔 案頥 中 :215華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統SampleLight 協 調 器赛 專 案頥 使 用 f8wCoord.cfg 文 件 。 如 下 圖蹙 所 示 , 提 供 “ 通 用 的 ”Z-<strong>Stack</strong>功 能 的 協 調 器赛 設 備 和 選 項 的 編 譯 選 項 包 含佳 在 該 檔 案頥 中 :216華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統f8wCoord.cfg 檔 被 建 立 協 調 器赛 設 備 的 所 有 專 案頥 所 使 用 。 因 此 , 對蹹 該 檔 的 任 何 更俐 改俌 都 會 影響 到 所 有 的 協 調 器赛 。 類詑 似 地 ,f8wRouter.cfg 和 f8wEnd.cfg 檔 將 分 別低 影 響 所 有 的 路跡 由 器赛 和 終端牣 設 備 專 案頥 。給 某 一 個鞄 設 備 類詑 型 的 所 有 專 案頥 添 加 一 個鞄 編 譯 選 項 , 只 需猀 要 簡 單 地 在 適贅 當 的 鏈訿 結 器赛 控 制 檔中 增猹 加 一 行 。 要 禁 用 一 個鞄 編 譯 選 項 , 在 該 編 譯 選 項 所 在 行 的 最 左 邊訷 放 置 “//”。 你佀 也 可 以 佑除 該 編 譯 選 項 所 在 的 這 行 , 但伽 不 推 薦 這 樣 做 , 因 為 以 後 該 編 譯 選 項 可 能 需猀 要 被 重 新 致 能 。10.1.2.2 IAR 專 案頥 檔 中 的 編 譯 選 項每俟 一 種牞 所 支 援 的 配 置 檔 的 編 譯 選 項 儲 存 在 SampleLight.ewp 文 件 中 。 要 更俐 改俌 這 些 編 譯 選項 , 從 Project 下 拉 功 能 表 中 選 擇赾 Options... 項 :217華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統選 擇赾 C/C++ Compiler 項 並 選 擇赾 Preprocessor 選 項 卡 。 該 配 置 的 編 譯 選 項 位 於 Definedsymbols: (one per line) 下 面 的 框頦 中 :218華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統要 為 該 配 置 增猹 加 一 個鞄 編 譯 選 項 , 只 需猀 要 簡 單 地 在 該 框頦 中 增猹 加 一 行 選 項 。 要 禁 用 一 個鞄 編 譯選 項 , 在 該 選 項 所 在 行 的 最 左 邊訷 放 置 一 個鞄 “x”。 例 如 , 在 上 面 這 個鞄 例 子 中 ,MT_TASK 選項 已 經 被 禁 用 。 注 意 : 框頦 中 的 編 譯 選 項 可 以 被 佑 除 , 但伽 是 不 推 薦 這 種牞 做 法 , 因 為 以 後 可 能 需猀要 重 新 致 能 該 編 譯 選 項 。10.1.3 使 用 編 譯 選 項編 譯 選 項 被 用 來 選 擇赾 原鞝 始 檔 案頥 提 供 的 某 些 特顠 性 。 大 多 數 編 譯 選 項 作伿 為 根頨 源 程 式 中 具 體 段落 的 開 / 關詉 選 擇赾 。 一 些 選 項 被 用 來 提 供 一 個鞄 使 用 者 自 定 義 數 值靹 使 編 譯 器赛 覆 蓋犡 原鞝 有 的 預踣 設 值靹 ,例 如 DEFAULT_CHANLIST。每俟 一 個鞄 Z-<strong>Stack</strong> 專 案頥 都 提 供 了 一 個鞄 IAR 專 案頥 檔 , 該 專 案頥 檔 規 定 了 該 專 案頥 所 用 到 的 具 體 的編 譯 選 項 。 根頨 據赼 需猀 要 , 程 式 師韦 可 以 添 加 或 移 除 編 譯 選 項 來 包 括 或 排 除 現 有 軟 體 功 能 的 某 些 部分 。 注 意 , 改俌 變 編 譯 選 項 可 能 需猀 要 改俌 變 專 案頥 中 的 其 他 檔 , 例 如 , 增猹 加 MT_NWK 選 項 需猀 要MT_NWK.c 檔 在 原鞝 始 檔 案頥 列 表 中 並 且 使 用 適贅 當 的 MT-enabled 網牺 路跡 庫韧 。 如 果 你佀 正 在 更俐 改俌SampleLight 協 調 器赛 專 案頥 , 你佀 需猀 要 將 它 一 般 使 用 的 Router.lib 文 件 用 RouterMt.lib 檔 案頥 替 換 。本 文 件 的 下 一 節 提 供 了 所 支 援 編 譯 選 項 的 列 表 , 對蹹 每俟 個鞄 編 譯 選 項 致 能 或 禁 止 的 特顠 性 做 了簡 要 描 述 。219華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統10.2 所 支 援 的 編 譯 選 項 和 定 義10.2.1 通 用 編 譯 選 項下 表 中 的 編 譯 選 項 可 被 更俐 改俌 或 設 定 :APS_DEFAULT_INTERFRAME_DELAY使 用 分 片 時頗 , 發 送 資 料頔 包 之 間 的 延 遲 ( 尚 不 支援 )。APS_DEFAULT_MAXBINDING_TIME一 個鞄 協 調 器赛 在 接 收 匹 配 描 述 符 綁 定 請 求俠 來 執 行綁 定 時頗 將 等 待 的 最 大 時頗 間 ( 以 秒 為 單 位 )。APS_DEFAULT_WINDOW_SIZE使 用 分 片 時頗 , 一 個鞄 發 送 視 窗 的 大 小 ( 尚 不 支援 )。APS_MAX_GROUPS 組 表 中 組 的 最 大 數 量 。APS_MAX_GROUPS 組 表 中 允 許 的 最 大 項 目 數 量 。APSC_ACK_WAIT_DURATION_POLLED對蹹 終 端牣 設 備 將 等 待 來 自 目 的 設 備 APS 確 認狀 的 週期 為 2 毫 秒 的 查 詢 的 數 量 。APSC_MAX_FRAME_RETRIES 傳 輸 失 敗 後 允 許 重 傳 ( 在 APS 層 ) 的 最 大 次 數 。當 出 現 一 個鞄 斷 言借 時頗 , 規 定 設 備 應 該 重 置 。 如 果ASSERT_RESET未 定 義 , 當 出 現 一 個鞄 斷 言借 時頗 , 所 有 的 LED 將 閃爍觰 。BEACON_REQUEST_DELAY在 一 個鞄 加 入 迴 圈 中 , 每俟 一 個鞄 信 標 請 求俠 之 間 的 毫秒 延 遲 的 最 小 數 目 。BLINK_LEDS 致 能 擴 充 的 LED 閃 爍觰 功 能 。COORDINATOR_BINDING 致 能 協 調 器赛 綁 定 ( 僅 協 調 器赛 使 用 )。ZigBee 協 定 版 本 1.0 或 1.1, 相 應 設 定 為 1 或 2。DEF_PROTO_VERS使 得 協 調 器赛 啟 動 規 定 的 網牺 路跡 版 本 並 使 設 備 加 入規 定 版 本 的 網牺 路跡 。DEFAULT_CHANLIST 取 代 NLMEDE.h 檔 中 的 預踣 設 頻 道跰 定 義 。DEFAULT_KEY 預踣 設 安 全 密 鑰 。ED_BIND當 COORDINATOR_BINDING 未 啟 動 時頗 致 能綁 定 / 解 除 綁 定 處 理 。EXTENDED_JOINING_RANDOM_MASK 隨 機趙 加 入 延 時頗 的 遮贆 罩 。HOLD_AUTO_START 禁 止 ZDApp 事 件 處 理 迴 圈 的 自 動 啟 動 。KB_INT 致 能 鍵 盤 ( 搖 桿 ) 中 斷 。KEYPOLL 致 能 按 鍵 查 詢 。LCD_SUPPORTED致 能 液 晶 模 擬 — 文 本 發 送 給 Z-Tool 串 列 埠 。 可選 參 數 =Debug 將 複 製犸 LCD 資 訊 到 除 錯 埠 。MAC_CFG_APP_PENDING_QUEUE MAC 設 定 。MAC_OPT_FFD 致 能 全 功 能 設 備 。MANAGED_SCAN 致 能 頻 道跰 掃 描 之 間 的 延 時頗 。220華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統MAX_BCAST在 任 何 給 定 時頗 間 一 個鞄 設 備 支 援 的 同 時頗 廣 播 的 最大 數 量 。MAX_BINDING_CLUSTER_IDS 每俟 一 個鞄 綁 定 表 項 目 的 簇 識訤 別低 字 的 最 大 數 量 。MAX_BINDING_CLUSTER_IDS 在 一 個鞄 綁 定 記 錄 中 的 簇 識訤 別低 字 的 最 大 數 量 。MAX_POLL_FAILURE_RETRIES在 指 示 與犕 父 設 備 失 步俞 之 前 重 新 查 詢 父 設 備 的 次數 。 注 意 , 該 值靹 越 大 , 將 導赫 致 子 設 備 重 新 加 入網牺 路跡 的 延 時頗 越 長 。MAX_RREQ_ENTRIES 網牺 路跡 中 同 時頗 存 在 的 路跡 由 發 現 的 數 量 。MAX_RREQ_ENTRIES 網牺 路跡 中 RREQ 資 料頔 包 的 最 大 數 量 。MAX_RTG_ENTRIES一 個鞄 規 則 路跡 由 表 中 的 專 案頥 加 上 為 進 行 路跡 由 修鞈 復而 加 入 的 額覷 外 的 項 目 的 總 項 目 數 量 。MAX_RTG_ENTRIES 一 個鞄 規 則 路跡 由 表 中 的 專 案頥 數 量 。MAXMEMHEAP確 定 可 用 作伿 動 態躊 記 憶赲 體 的 總 記 憶赲 體 容韕 量 。 每俟 一個鞄 對蹹 動 態躊 儲 存 空 間 所 需猀 的 動 態躊 記 憶赲 體 的 容韕 量 的請 求俠 , 在 管牤 理 已 分 配 的 記 憶赲 體 中 被 用 作伿 系倐 統 開銷贔 。 因 此 MAXMEMHEAP 並 不 反 應 使 用 者 所 期望 被 使 用 的 動 態躊 記 憶赲 體 的 總 容韕 量 。 作伿 為 thumb規 定 , 記 憶赲 體 分 配 至 少 需猀 要 2+N 位 元 組 , 其 中N 代 表 目 標 CPU 的 字 對蹹 齊猗 塊 容韕 量 ( 例 如 , 目 標CPU 為 AVR 和 CC2430 時頗 N=1, 為 MSP430 時頗N=2)。 該 值靹 必 須 小 於 32768。MIN_GAP 定 義 傳 輸 串 列 資 訊 之 間 的 最 小 時頗 間 。MINIMIZE_ROOT放 置 在 ROOT 記 憶赲 體 段 中 的 協 定 堆 疊 程 式 的 最小 容韕 量 。NONWK 禁 止 NWK、APS 和 ZDO 功 能 。NV_INIT 致 能 在 設 備 重 置 時頗 載跩 入 “ 基 本 ”NV 項 。NV_RESTORE致 能 設 備 保 存 / 恢 復 網牺 路跡 狀 態躊 資 訊 到 / 從 NV。NWK_AUTO_POLL 致 能 終 端牣 設 備 從 父 設 備 自 動 查 詢 。NWK_INDIRECT_MSG_TIMEOUT一 個鞄 查 詢 終 端牣 的 父 設 備 將 保 持 一 個鞄 資 訊 毫 秒 數NWK_MAX_BINDING_ENTRIES 綁 定 表 的 最 大 項 目 數 量 。NWK_MAX_DATA_RETRIES為 尋 找俁 一 條 資 訊 的 下 一 跳跢 位 址佼 的 最 大 重 複 次數 。NWK_MAX_DEVICE_LIST 在 關詉 聯 / 設 備 列 表 中 的 設 備 的 最 大 數 量 。NWK_MAX_DEVICES 網牺 路跡 中 設 備 的 最 大 數 量 。NWK_START_DELAYOSAL_TIMER_16_BITOSAL_TOTAL_MEM拖 延 網牺 路跡 中 設 備 啟 動 和 加 入 週 期 之 間 的 延 時頗 的最 小 毫 秒 數 。OSAL 計 時頗 器赛 : FALSE = HAL_TIMER_0 (8-bit)或 TRUE = HAL_TIMER_3 (16-bit)記 錄 OSAL 系倐 統 堆 的 使 用 ( 如 果 支 援 LCD, 則顯 示 )POLL_RATE 查 詢 協 調 器赛 資 料頔 請 求俠 之 間 要 等 待 的 毫 秒 數 。221華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統POWER_SAVING 為 電踝 池 供 電踝 設 備 致 能 節 電踝 功 能 。QUEUED_POLL_RATE在 收 到 一 個鞄 資 料頔 指 示 後 被 用 來 迅倭 速 查 詢 一 個鞄 佇列 資 訊 ( 以 毫 秒 為 單 位 )。REFLECTOR 致 能 綁 定 。這 只 能 被 用 作伿 對蹹 重 新 加 入 請 求俠 的 輪贁 流 回 應 查 詢REJOIN_POLL_RATE速 率 , 由 該 設 備 想 要 加 入 的 父 設 備 的 回 應 時頗 間確 定 。RESPONSE_POLL_RATE在 收 到 一 個鞄 資 料頔 確 認狀 後 被 用 來 迅倭 速 查 詢 回 應 資訊 ( 以 毫 秒 為 單 位 )。ROUTE_EXPIRY_TIME路跡 由 表 中 一 個鞄 專 案頥 到 期 之 前 的 時頗 間 ( 以 秒 為 單位 ); 設 定 為 0 以 關詉 閉 路跡 由 到 期 時頗 間 。RTR_NWK 致 能 路跡 由 器赛 網牺 路跡 。SECURE致 能 ZigBee 安 全 (SECURE=0 to disable,SECURE=1 to enable)。SERIAL_DTE 定 義 序侤 列 埠 作伿 為 DTE 設 備 代 替 DCE 設 備 。SERIAL_RX_INT 致 能 使 用 串 列 接 收 中 斷 。SERIAL_TX_INT 致 能 使 用 串 列 發 送 中 斷 。SERIAL_XFER為 非 Z-Tool 訊 息韵 致 能 序侤 列 埠SOFT_START如 果 未 提 供 , 致 能 設 備 啟 動 後 作伿 為 協 調 器赛 , 否佞則 作伿 為 路跡 由 器赛 。TIMER_INT 致 能 使 用 計 時頗 器赛 中 斷 。USE_KEY_EXPANSION致 能 更俐 快侳 的 AES 操趀 作伿 , 透 過跸 使 用 外 部 RAM。ZAPP_Px透 過跸 序侤 列 埠 Px 致 能 ZApp 資 訊 。x 表 示 埠 1 或2。ZDAPP_CONFIG_PAN_ID協 調 器赛 的 個鞄 域 網牺 識訤 別低 字 ; 被 路跡 由 器赛 和 終 端牣 設 備用 來 加 入 該 識訤 別低 字 標 識訤 的 個鞄 域 網牺 。ZDO_COORDINATOR 致 能 設 備 作伿 為 協 調 器赛 。ZTOOL_Px透 過跸 序侤 列 埠 Px 致 能 ZTool 資 訊 。x 表 示 埠 1 或2。下 表 中 的 編 譯 選 項 不 能 被 更俐 改俌 或 使 用 :CC2430BB 目 標 是 CC2430BB 電踝 池 供 電踝 板 ( 不 能 被 更俐 改俌 )。CC2430DB 目 標 是 CC2430DB 開 發 板 ( 不 能 被 更俐 改俌 )。CC2430EB 目 標 是 CC2430EB 評 估 板 ( 不 能 被 更俐 改俌 )。CPU32MHZ CPU 的 時頗 鐘 速 率 — 可 為 16 或 32MHz( 不 能 被 更俐 改俌 )。EXTERNAL_RAM 為 OSAL 堆 致 能 使 用 外 部 RAM 記 憶赲 體 ( 不 被 使 用 )。FORCE_MAC_NEAR 強 迫 MAC 程 式 進 入 NEAR 記 憶赲 體 段 ( 不 能 被 更俐 改俌 )。GENERIC=__generic 為 通 用 指 針 定 義 編 譯 器赛 關詉 鍵 字 ( 不 能 被 更俐 改俌 )。MACSIM 致 能 MAC 模 擬 ( 不 被 使 用 )。NWK_TEST 致 能 網牺 路跡 測 試 功 能 ( 不 被 使 用 )。222華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統ROOT=__near_func 為 ROOT 記 憶赲 體 定 義 編 譯 器赛 關詉 鍵 字 ( 不 能 被 更俐 改俌 )。WIN32 致 能 Windows 模 擬 ( 不 被 使 用 )。10.2.2 監牐 控 測 試 (MT) 編 譯 選 項選 項 。你佀 可 以 致 能 下 面 的 API 和 函 數 , 它 們靽 與犕 MT_TASK 選 項 相 關詉 。 你佀 必 須 包 含佳 MT_TASKMT_TASK致 能 監牐 控 測 試 (Monitor-Test) 任 務MT_AF_FUNC 致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 AF 命 令 。MT_AF_CB_FUNC 致 能 Monitor-Test 處 理 被 ZTool 或 ZTrace 註 冊 的 AF 回 調 。MT_MAC_FUNC 致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 MAC 命 令 。MT_MAC_CB_FUNC 致 能 Monitor-Test 處 理 被 ZTool 或 ZTrace 註 冊 的 MAC 回 調 。MT_NWK_FUNC 致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 NWK 命 令 。MT_NWK_CB_FUNC 致 能 Monitor-Test 處 理 被 ZTool 或 ZTrace 註 冊 的 NWK 回 調 。MT_ZDO_FUNC 致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 ZDO 命 令 。MT_ZDO_MGMT致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 ZDO MGMT 命令 。MT_USER_TEST_FUNC 致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 使 用 者 命 令 。MT_NWK_PING 致 能 Monitor-Test 網牺 路跡 ping( 不 被 使 用 )。MT_APS_CB_FUNC 致 能 Monitor-Test 處 理 被 ZTool 或 ZTrace 註 冊 的 APS 回 調 。MT_GOF_FUNC 致 能 Monitor-Test 處 理 來 自 ZTool 或 ZTrace 的 GOF 命 令 。MT_GOF_CB_FUNC 致 能 Monitor-Test 處 理 被 ZTool 或 ZTrace 註 冊 的 GOF 回 調 。10.2.3 ZigBee 設 備 物 件 (ZDO) 編 譯 選 項預踣 設 情 況 下 , 強 制 性 資 訊 ( 由 ZigBee 規 範 定 義 ) 在 ZDO 中 被 致 能 。 其 他 所 有 的 資 訊 處理 由 編 譯 標 記 控 制 。 你佀 可 以 透 過跸 在 ZDConfig.h 檔 中 注 釋 / 不 注 釋 編 譯 標 記 來 致 能 / 禁 止 選 項 。有 一 個鞄 簡 單 的 方 法 來 致 能 所 有 的 ZDO 功 能 和 管牤 理 選 項 。 你佀 可 以 使 用 MT_ZDO_FUNC 來 致能 所 有 的 ZDO 功 能 選 項 ; 使 用 MT_ZDO_FUNC 和 MT_ZDO_MGMT 來 致 能 所 有 的 ZDO 功能 和 管牤 理 選 項 。ZDO_NWKADDR_REQUEST 致 能 網牺 路跡 位 址佼 請 求俠 功 能 和 回 應 處 理 。ZDO_IEEEADDR_REQUEST 致 能 IEEE 位 址佼 請 求俠 功 能 和 回 應 處 理 。ZDO_MATCH_REQUEST 致 能 匹 配 描 述 符 請 求俠 功 能 和 回 應 處 理 。ZDO_NODEDESC_REQUEST 致 能 節 點 描 述 符 請 求俠 功 能 和 回 應 處 理 。ZDO_POWERDESC_REQUEST 致 能 電踝 源 描 述 符 請 求俠 功 能 和 回 應 處 理 。ZDO_SIMPLEDESC_REQUEST 致 能 簡 單 描 述 符 請 求俠 功 能 和 回 應 處 理 。ZDO_ACTIVEEP_REQUEST 致 能 啟 動 端牣 點 請 求俠 功 能 和 回 應 處 理 。ZDO_COMPLEXDESC_REQUEST 致 能 複 雜覮 描 述 符 請 求俠 功 能 和 回 應 處 理 。223華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統ZDO_USERDESC_REQUEST 致 能 使 用 者 描 述 符 請 求俠 功 能 和 回 應 處 理 。ZDO_USERDESCSET_REQUEST致 能 使 用 者 描 述 符 設 定 請 求俠 功 能 和 回 應 處理 。ZDO_ENDDEVICEBIND_REQUEST 致 能 終 端牣 設 備 綁 定 請 求俠 功 能 和 回 應 處 理 。ZDO_BIND_UNBIND_REQUEST 致 能 綁 定 和 解 除 綁 定 請 求俠 功 能 和 回 應 處 理 。ZDO_SERVERDISC_REQUEST 致 能 服 務 發 現 請 求俠 功 能 和 回 應 處 理 。ZDO_MGMT_NWKDISC_REQUEST 致 能 Mgmt 網牺 路跡 發 現 請 求俠 功 能 和 回 應 處 理 。ZDO_MGMT_LQI_REQUEST致 能 Mgmt 連 接 品 質賭 指 示 (LQI) 請 求俠 功 能和 回 應 處 理 。ZDO_MGMT_RTG_REQUEST 致 能 Mgmt 路跡 由 表 請 求俠 功 能 和 回 應 處 理 。ZDO_MGMT_BIND_REQUEST 致 能 Mgmt 綁 定 表 請 求俠 功 能 和 回 應 處 理 。ZDO_MGMT_LEAVE_REQUEST 致 能 Mgmt 離覭 開 請 求俠 功 能 和 回 應 處 理 。ZDO_MGMT_JOINDIRECT_REQUEST 致 能 Mgmt 直 接 加 入 請 求俠 功 能 和 回 應 處 理 。ZDO_MGMT_PERMIT_JOIN_REQUEST 致 能 設 備 回 應 Mgmt 允 許 加 入 請 求俠 功 能 。ZDO_ENDDEVICE_ANNCE_REQUEST 致 能 設 備 回 應 終 端牣 設 備 Annce 訊 息韵 請 求俠 功能 。ZDO_USERDESC_RESPONSE 致 能 設 備 回 應 使 用 者 描 述 符 請 求俠 功 能 。ZDO_USERDESCSET_RESPONSE 致 能 設 備 回 應 使 用 者 描 述 符 設 定 請 求俠 功 能 。ZDO_SERVERDISC_RESPONSE 致 能 設 備 回 應 服 務 發 現 請 求俠 功 能 。ZDO_MGMT_NWKDISC_RESPONSE 致 能 設 備 回 應 Mgmt 網牺 路跡 發 現 請 求俠 功 能 。ZDO_MGMT_LQI_RESPONSE致 能 設 備 回 應 Mgmt 連 接 品 質賭 指 示 (LQI)請 求俠 功 能 。ZDO_MGMT_RTG_RESPONSE 致 能 設 備 回 應 Mgmt 路跡 由 表 請 求俠 功 能 。ZDO_MGMT_BIND_RESPONSE 致 能 設 備 回 應 Mgmt 綁 定 表 請 求俠 功 能 。ZDO_MGMT_LEAVE_RESPONSE 致 能 設 備 回 應 Mgmt 離覭 開 請 求俠 功 能 。ZDO_MGMT_JOINDIRECT_RESPONSE 致 能 設 備 回 應 Mgmt 直 接 加 入 請 求俠 功 能 。ZDO_MGMT_PERMIT_JOIN_RESPONSE 致 能 設 備 回 應 Mgmt 允 許 加 入 請 求俠 功 能 。ZDO_ENDDEVICE_ANNCE致 能 設 備 回 應 終 端牣 設 備 Annce 資 訊 請 求俠 功能 。附 錄1如 果 你佀 的 應 用 將 不 被 實蹴 施 為 一 個鞄 標 準 的 或 公 開 的 規 範 , 那倴 麼猕 你佀 必 須 申 請 一 個鞄 私倌 有 規 範ID, 它 可 被 用 於 開 發 實蹴 驗 室 之 外 。 獲 得 一 個鞄 私倌 有 規 範 ID 的 處 理 不 屬 於 本 文 件 的 範 圍 。224華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統2在 同 一 設 備 上 實蹴 例 化 多 個鞄 應 用 實蹴 例 所 需猀 要 的 更俐 改俌 , 在 本 文 件 中 相 應 功 能 描 述 處 被 討 論 。3看 8.5.2 小 節 程 式 流 程 — 對蹹 GenericApp 實蹴 例 程 式 的 學赩 習 。4下 一 跳跢 設 備 可 能 是 或 者 不 是 一 個鞄 資 料頔 請 求俠 的 目 的 設 備 。 因 此 , 對蹹 來 自 下 一 跳跢 的 AF 資料頔 確 認狀 不 能 被 曲 解 為 這 是 來 自 目 的 設 備 的 AF 資 料頔 確 認狀 。 參 考 有 關詉 傳 送 選 項 的 討 論 ( 在Z-<strong>Stack</strong> AF API 中 的 AF_MSG_ACK_REQUEST 和 在 Z-<strong>Stack</strong> APS API 中 的APS_TX_OPTIONS_ACK)。5欲 瞭 解 有 關詉 如 何 定 制 和 控 制 網牺 路跡 形侫 成 的 更俐 多 資 訊 , 請 查 閱贠 Z-<strong>Stack</strong> 設 備 物 件 API(ZDO_NetworkDiscoveryConfirmCB()) 和 Z-<strong>Stack</strong> 設 備 物 件 程 式 師韦 指 南 。6同 上 。 參 看 ZDApp_StartUpFromApp()。7欲 瞭 解 有 關詉 如 何 定 制 和 控 制 設 備 被 允 許 加 入 作伿 為 關詉 聯 設 備 的 更俐 多 資 訊 , 請 查 閱贠 Z-<strong>Stack</strong>設 備 物 件 API(ZDO_JoinIndicationCB()) 和 Z-<strong>Stack</strong> 設 備 物 件 程 式 師韦 指 南 。項 。8透 過跸 定 義 COORDINATOR_BINDING 來 建 立 一 個鞄 反 射韗 器赛 設 備 。 請 參 考 Z-<strong>Stack</strong> 編 譯 選9生 成 和 回 應 自 動 尋 找俁 的 OTA 資 料頔 請 求俠 只 能 被 ZDO 完侖 成 , 不 能 在 應 用 程 式 中 被 執 行 。10自 動 尋 找俁 產 生 的 一 個鞄 匹 配 可 以 在 輸 入 和 / 或 輸 出 簇 列 表 中 的 任 何 一 個鞄 子 集 。 匹 配 的 簇將 被 返 回 在 ZDO_NewDstAddr_t 結 構躬 中 的 一 個鞄 列 表 中 。11看 8.2.1 和 8.2.5.1 小 節 。12參 看 綁 定 的 弊躄 端牣 ,8.4.1 小 節 。13參 看 8.2.3 和 8.2.6.1.3 小 節 。14 SYS_EVENT_MSG 訊 息韵 類詑 型 的 完侖 整超 列 表 請 參 看 ZComDef.h 文 件 中 的 “Global SystemMessages”。15為 了 接 收 Z-Tool 資 訊 , 設 備 在 被 建 立 時頗 必 須 定 義 MT_TASK 來 為 MT 建 立 串 列 埠 。請 參 看 Z-<strong>Stack</strong> 編 譯 選 項 文 件 。16參 看 ZComDef.h 文 件 中 的 “MAC status values”。17注 意 , 一 個鞄 任 務 事 件 被 保 留 , 參 看 ZComDef.h 文 件 中 的 “Global System Events”:#define SYS_EVENT_MSG 0x8000 // A message is waiting event225華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw


Z-<strong>Stack</strong>協 定 堆 疊 開 發 指 南華 亨 科 技侻 ZigBee 無 線 定 位 開 發 系倐 統18注 意 , 打 包 和 發 送 OTA 資 訊 與犕 接 收 和 解 析 是 非 同 步俞 的 。 因 此 由 發 送 設 備 顯 示 的 每俟 秒平 均佾 位 元 組 數 可 能 會 按 接 收 設 備 顯 示 的 每俟 秒 幾 個鞄 資 料頔 包 容韕 量 改俌 變 。 如 果 明 顯 有 其 他 通 道跰 的 通信 , 如 果 傳 輸 是 雙覯 向 的 , 或 者 如 果 有 明 顯 的 來 自 非 ZigBee 設 備 通 道跰 干 擾 , 這 兩 個鞄 比 率 可 能會 抖侺 動 並 可 能 明 顯 看 到 減 緩 。 如 果 一 個鞄 終 端牣 設 備 被 使 用 , 因 為 終 端牣 設 備 的 查 詢 速 率 , 傳 輸 速率 將 被 大 大 降 低佂 。226華 亨 科 技侻 電踝 話 :07-3525572 傳 真 :07- 3525349http://www.hhnet.com.tw

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!