1. 程式人生 > >ZigBee 3.0 EmberZNet EFR32MG 學習筆記-9-Network Steering加網流程

ZigBee 3.0 EmberZNet EFR32MG 學習筆記-9-Network Steering加網流程

轉載請註明出處,謝謝!

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

工程:新建

  1. 在.isc檔案為工程新增Network Steering外掛。

  2. 呼叫這個函式啟動Network Steering:

emberAfPluginNetworkSteeringStart()

函式裡運行了一個掃描通道的狀態機:

stateMachineRun()
  1. stateMachineRun()裡設定了祕鑰型別、設定通道掩碼(Primary)和準備開始第一個通道的掃描:
setupSecurity()
currentChannelMask = emAfPluginNetworkSteeringPrimaryChannelMask; 
gotoNextChannel()

注意這裡通道掩碼分為兩種:
a、Primary:優先通道掩碼,一般包含11、14、15、19、20、24、25,都是和藍芽、WiFi通道重疊部分比較少的通道,減少干擾。
b、Secondary:11-26,所有通道。

  1. 準備掃描第一個通道,注意這裡的掃描型別是:
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()
  1. 每個通道掃描完成後,跳到下面這個函式進行“extended PAN ID”的判斷,丟棄不符合的網路:
networkFoundCallback()
  1. 所有通道掃描完成後進入:
scanCompleteCallback ()

然後嘗試加入符合要求的網路:

tryToJoinNetwork ()
  1. 如果現在的通道掩碼沒有可以加入的網路則進入狀態機的下一個狀態:
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,

其實就是嘗試掃描各種祕鑰型別的網路。

  1. 常駐:NewBit Studio