轉載請注明出處,謝謝!
Newbit-Msming 2018-10-18
ZigBee 3.0 EmberZNet EFR32MG 學習筆記-目錄
ZigBee 3.0 EmberZNet EFR32MG 學習筆記-9-Network Steering加網流程
環境:Windows 10、Simplicity Studio 4
SDK: EmberZnet SDK 6.4.0.0
工程:建立
- 在.isc檔案為工程添加Network Steering插件。
- 調用這個函數啟動Network Steering:
emberAfPluginNetworkSteeringStart()
函數裡運作了一個掃描信道的狀态機:
stateMachineRun()
- stateMachineRun()裡設定了秘鑰類型、設定信道掩碼(Primary)和準備開始第一個信道的掃描:
setupSecurity()
currentChannelMask = emAfPluginNetworkSteeringPrimaryChannelMask;
gotoNextChannel()
注意這裡信道掩碼分為兩種:
a、Primary:優先信道掩碼,一般包含11、14、15、19、20、24、25,都是和藍牙、WiFi信道重疊部分比較少的信道,減少幹擾。
b、Secondary:11-26,所有信道。
- 準備掃描第一個信道,注意這裡的掃描類型是:
EMBER_ACTIVE_SCAN
掃描類型:
/** An energy scan scans each channel for its RSSI value. */
EMBER_ENERGY_SCAN,
/** An active scan scans each channel for available networks. */
EMBER_ACTIVE_SCAN,
/** A fake scan that is used to turn off the radio. */
EMBER_START_RADIO_OFF_SCAN,
/** A green power channel delivery scan. */
EMBER_STACK_GP_CHANNEL_DELIVERY_SCAN,
EMBER_LAST_SCAN_TYPE = EMBER_STACK_GP_CHANNEL_DELIVERY_SCAN
即隻傳回有網絡的信道結果,然後是配置掃描結果處理函數:
scanResultsHandler()
最後才開始掃描:
emberAfPluginScanDispatchScheduleScan()
- 每個信道掃描完成後,跳到下面這個函數進行“extended PAN ID”的判斷,丢棄不符合的網絡:
networkFoundCallback()
- 所有信道掃描完成後進入:
scanCompleteCallback ()
然後嘗試加入符合要求的網絡:
tryToJoinNetwork ()
- 如果現在的信道掩碼沒有可以加入的網絡則進入狀态機的下一個狀态:
emAfPluginNetworkSteeringState++;
狀态數量:
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_PRIMARY_CONFIGURED = 0x01,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_SECONDARY_CONFIGURED = 0x02,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_PRIMARY_INSTALL_CODE = 0x03,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_SECONDARY_INSTALL_CODE = 0x04,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_PRIMARY_CENTRALIZED = 0x05,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_SECONDARY_CENTRALIZED = 0x06,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_PRIMARY_DISTRIBUTED = 0x07,
EMBER_AF_PLUGIN_NETWORK_STEERING_STATE_SCAN_SECONDARY_DISTRIBUTED = 0x08,
其實就是嘗試掃描各種秘鑰類型的網絡。
- 常駐:NewBit Studio