[RK3288][Android6.0] WiFi之Framework扫描过程
来源:互联网 发布:科来抓包软件破解版 编辑:程序博客网 时间:2024/05/10 16:37
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
Settings去开启wifi时,会调用到DisconnectedState类
enter -> WifiStateMachine.java//DisconnectedStatestartScan ->
sendMessage -> //cmd:CMD_START_SCAN
processMessage -> //DisconnectedState类,返回NOT_HANDLED,让父类处理
processMessage -> //ConnectModeState类,返回NOT_HANDLED,让父类处理
processMessage -> //DriverStartedState类
handleScanRequest -> //cmd: SCAN_WITHOUT_CONNECTION_SETUP
startScanNative ->
mWifiNative.scan ->
scan -> WifiNative.java
doBooleanCommand -> //command会根据type及freq list决定发的命令,这里是"SCAN TYPE=ONLY"
wpa_supplicant_ctrl_iface_receive -> ctrl_iface_unix.c
wpa_supplicant_ctrl_iface_process -> //cmd: scan
wpas_ctrl_scan ->
can_res_handler = scan_only_handler //设置type=only才会跑的handler
wpa_supplicant_req_scan //发起扫描请求
调用返回成功只表示发送扫描请求被接受,而扫描完成后会发送完成事件给framework,framework通过WifiMonitor类负责监听事件接收。
_wpa_supplicant_event_scan_results -> events.c
wpa_msg_ctrl -> //event: WPA_EVENT_SCAN_RESULTS
run -> WifiMonitor.java
mWifiNative.waitForEvent //等到event后返回往下运行
mWifiMonitorSingleton.dispatchEvent ->
m.dispatchEvent ->
handleEvent ->
mStateMachine.sendMessage -> //event: SCAN_RESULTS_EVENT
processMessage -> //DisconnectedState
processMessage -> //ConnectModeState
processMessage -> //DriverStartedState
processMessage -> //SupplicantStartedState
setScanResults -> //从native获取并保存扫描结果
mWifiNative.scanResults ->
doStringCommandWithoutLogging("BSS RANGE=" + sid + "- MASK=0x29d87");
sendScanResultsAvailableBroadcast //通知app扫描完成,intent是WifiManager.SCAN_RESULTS_AVAILABLE_ACTION
设置了WifiManager.SCAN_RESULTS_AVAILABLE_ACTION的app就能收到消息,可以通过接口getScanResults()来获取,比如Settings apk利用它来更新扫描列表。
扫描返回结果的格式如下:
* =================
* id=1
* bssid=68:7f:74:d7:1b:6e
* freq=2412
* level=-43
* tsf=1344621975160944
* age=2623
* flags=[WPA2-PSK-CCMP][WPS][ESS]
* ssid=zubyb
* ====
参考:
Android -- Wifi扫描流程分析
阅读全文
1 0
- [RK3288][Android6.0] WiFi之Framework扫描过程
- [RK3288][Android6.0] WiFi之wpa_supplicant扫描过程
- [RK3288][Android6.0] WiFi之Framework连接过程小结
- [RK3288][Android6.0] WiFi之Framework的socket(客户端)
- [RK3288][Android6.0] WiFi之wpa_supplicant初始化过程
- [RK3288][Android6.0] WiFi之开机自动连接过程
- [RK3288][Android6.0] WiFi之无线网络配置的保存过程
- [RK3288][Android6.0] WiFi之无线网络配置的断开过程
- [RK3288][Android6.0] WiFi之无线网络配置的关闭过程
- [RK3288][Android6.0] WiFi之同步网络时间过程
- [RK3288][Android6.0] WiFi之WifiWatchdogStateMachine
- [RK3288][Android6.0] WiFi之通过wpa_cli分析WPAS的连接过程
- [RK3288][Android6.0] WiFi之无线网络配置的忘记(移除)过程
- [RK3288][Android6.0] WiFi在Setting中的开启过程小结
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] WiFi之wpa_supplicant服务启动
- [RK3288][Android6.0] WiFi之wpa_supplicant的socket(服务端)
- [RK3288][Android6.0] WiFi之Passpoint功能了解
- eclipse启动的java程序使用的jvm参数
- 解决本地调试导致的Ajax跨域问题
- http://www.ithao123.cn/content-1432166.html
- 第3章 基本概念(上)
- Android右布局属性
- [RK3288][Android6.0] WiFi之Framework扫描过程
- 华为OJ——字符串合并处理
- Android 中Button点击频率的控制
- 二分查找
- 1.1线程基础(一)
- ubuntu14.04网络图标消失不见
- boost--windows平台下针对VS的简单编译
- 新版本Django在Windows和Linux下的部署
- 符号链接文件和硬链接文件