版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21352095/article/details/83154918
转载请注明出处,谢谢!
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,
其实就是尝试扫描各种秘钥类型的网络。