前言
用了Z3GatewayHost 做協調器網關,裝置入網要經曆幾個階段
- 裝置請求入網(Beacon Request、Association Request、Data Request)
- 進入網絡後網關配置設定短位址(Association Response)
- 網關發出Active Endpoints Request
- 網關發出 Simple Descriptor Request
通過以上指令,可以擷取到入網節點資訊,比如短位址、裝置endpoint等
一般添加裝置時,會發現網關SDK做了處理,自動會發送 Active Endpoints Request 和 Simple Descriptor Request,不需要使用者去處理,就SDK這部分做下介紹、記錄
這個SDK的總體架構是while(1)循環中處理多個event事件,而每一個event其實是一個隊列,用來記錄不同的事件詳情
入網過程中的裝置屬性發現,就是一個Device Discovery的隊列,定義在了device-table-discovery.c檔案中
新加入的節點會走到下面函數,并且state 為 DEVICE_DISCOVERY_STATE_ENDPOINTS_SEND
推到隊列之後,主循環會周遊到這個“事件”,由下面這個EventHandler去處理
可以看到接下來會去發出Active Endpoints Request,那麼什麼時候會發出Simple Descriptor Request呢?答案是Active Endpoints Response 做應答時,随後發出
這個“事件”最終會在這個主Event Handler處理函數中執行
至此,擷取資訊的指令都已發出,我們拿到了加入網絡的裝置節點資訊