wifi扫描WifiScanningService解析

代码路径:

packages/modules/Wifi/service/java/com/android/server/wifi/scanner/WifiScanningService.java

启动:
在SystemServer中被启动。
实现接口:

具体实现是在:
WifiScanningServiceImpl,实现了 IWifiScanner.aidl 接口 :

	Messenger getMessenger();
    Bundle getAvailableChannels(int band, String packageName, String featureId);
    boolean isScanning();
Messenger 的功能:

ClientHandler 用来处理客户端发过来的信息。

所有的wifi热点扫描信息存储在哪里:

扫描入口:

有3个状态机: mBackgroundScanStateMachine mSingleScanStateMachine mPnoScanStateMachine
以下主要研究 mSingleScanStateMachine

mSingleScanStateMachine :

有 mDefaultState ,DriverStartedState(mIdleState mScanningState) 几个状态。
默认是mDefaultState ,
WifiScanner.CMD_ENABLE 使 mDefaultState切换到 mIdleState 。
只要进入mIdleState 就尝试scan,只要条件满足, 就进入mScanningState 。

什么条件?:

WifiScanner.CMD_START_SINGLE_SCAN 使 mIdleState 切换到 mScanningState 。

收到 WifiScanner.CMD_DISABLE 进入 DefaultState 。
mWifiScanner.setScanningEnabled 进入 DefaultState 。

mWifiScanner.setScanningEnabled(enable);

回调接口注册:

WifiScanner 通过发送消息CMD_REGISTER_SCAN_LISTENER 来注册一个回调。
WifiScanner 通过发送消息CMD_DEREGISTER_SCAN_LISTENER来反注册一个回调。

扫描结果通知:

在这里收到扫描结果:ScannerImplsTracker.ScanEventHandler#onScanStatus

发送 CMD_SCAN_RESULTS_AVAILABLE 到 mScanningState 1024行,

然后在 reportScanResults 1264行 调用 RequestInfo#reportEvent方法把结果发给调用者(消息类型为WifiScanner.CMD_SCAN_RESULT)。

同步获取扫描结果

WifiScanner#getSingleScanResults 通过发送
WifiScanner.CMD_GET_SINGLE_SCAN_RESULTS
调用 AsyncChannel#sendMessageSynchronously(int, int, int, java.lang.Object) 发送同步信息给
WifiScanningServiceImpl , 立即获得之前缓存的扫描结果。

客户端管理mClients :

必须先有客户端才能注册回调接口。
AsyncChannel.CMD_CHANNEL_FULL_CONNECTION 处理客户端连接事件,
将新的客户端放入 mClients中 。
AsyncChannel.CMD_CHANNEL_DISCONNECTED 去除这个客户端。

HalWifiScannerImpl
com.android.server.wifi.WifiNative
wificond:

The Wi-Fi framework also includes a stand-alone process, wificond, located at system/connectivity/wificond. The wificond process communicates with the Wi-Fi driver over standard nl80211 commands.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值