1. Initiated by settings
frameworks/base/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java
onReceive(Context context, Intent intent)action=WifiManager.WIFI_STATE_CHANGED_ACTION
updateWifiState
mWorkHandler.obtainMessage(WorkHandler.MSG_UPDATE_WIFI_STATE, state, 0).sendToTarget()
handleMessage(Message msg)
case MSG_UPDATE_WIFI_STATE:
mScanner.resume();
Scanner::resume() {
sendEmptyMessage(MSG_SCAN)
handleMessage(Message message)
case MSG_SCAN
mWifiManager.startScan()
frameworks/base/wifi/java/android/net/wifi/WifiManager.java
startScan()
Log.i(TAG, "Process " + getCallerProcName() + " requested a scan");
mService.startScan(null, null);
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
startScan(ScanSettings settings, WorkSource workSource) {
mWifiStateMachine.startScan(Binder.getCallingUid(), scanRequestCounter++, settings, workSource);
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java
startScan(int callingUid, int scanCounter, ScanSettings settings, WorkSource workSource)
sendMessage(CMD_START_SCAN, callingUid, scanCounter, bundle);
handleScanRequest(message); DriverStartedState/ScanModeState
startScanNative(freqs, hiddenNetworkIds, workSource))
mWifiScanner.startScan(settings, nativeScanListener, workSource);
frameworks/base/wifi/java/android/net/wifi/WifiScanner.java
startScan(ScanSettings settings, ScanListener listener, WorkSource workSource) {
mAsyncChannel.sendMessage(CMD_START_SINGLE_SCAN, 0, key, scanParams);
frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
case CMD_START_SINGLE_SCAN
tryToStartNewScan();
mScannerImpl.startSingleScan(settings, this))
frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/HalWifiScannerImpl.java
startSingleScan(WifiNative.ScanSettings settings,WifiNative.ScanEventHandler eventHandler) {
mSupplicantScannerDelegate.startSingleScan(settings, eventHandler);
frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/SupplicantWifiScannerImpl.java
startSingleScan(WifiNative.ScanSettings settings, WifiNative.ScanEventHandler eventHandler)
processPendingScans();
mWifiNative.scan(freqs, hiddenNetworkIdSet)
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiNative.java
scan(Set<Integer> freqs, Set<Integer> hiddenNetworkIds)
scanWithParams(freqList, hiddenNetworkIdList);
doBooleanCommand(scanCommand.toString());
Log.d(mTAG, "doBoolean: " + command) doBoolean: SCAN TYPE=ONLY freq=*** scan_id=**
log:
22:34:08.932 8029 8029 I WifiManager: Process ndroid.settings requested a scan
22:34:08.933 2028 2378 D WifiStateMachine: ConnectedState !CMD_START_SCAN rt=315517/315517 1000 13 ic=0 proc(ms):0 rssi=-32 f=2447 sc=100 link=130 tx=14.2, 0.1, 0.0 rx=12.6 [on:2289 tx:1 rx:251 period:2344] from screen [on:103636 period:203700]
22:34:08.933 2028 2378 D WifiStateMachine: L2ConnectedState !CMD_START_SCAN rt=315517/315517 1000 13 ic=0 proc(ms):1 rssi=-32 f=2447 sc=100 link=130 tx=14.2, 0.1, 0.0 rx=12.6 [on:0 tx:0 rx:0 period:1] from screen [on:103636 period:203701]
22:34:08.933 2028 2378 D WifiStateMachine: ConnectModeState !CMD_START_SCAN rt=315518/315518 1000 13 ic=0 proc(ms):1 rssi=-32 f=2447 sc=100 link=130 tx=14.2, 0.1, 0.0 rx=12.6 [on:0 tx:0 rx:0 period:0] from screen [on:103636 period:203701]
22:34:08.934 2028 2378 D WifiStateMachine: DriverStartedState !CMD_START_SCAN rt=315518/315518 1000 13 ic=0 proc(ms):1 rssi=-32 f=2447 sc=100 link=130 tx=14.2, 0.1, 0.0 rx=12.6 [on:0 tx:0 rx:0 period:1] from screen [on:103636 period:203702]
22:34:08.935 2028 2391 I WifiHAL : Got channel list with 13 channels
22:34:08.935 2028 2391 I WifiHAL : Got channel list with 10 channels
22:34:08.936 2028 2391 I WifiHAL : Got channel list with 15 channels
22:34:08.936 2028 2391 D WifiNative-wlan0: doBoolean: SCAN TYPE=ONLY
22:34:08.936 2633 2633 D wpa_supplicant: wlan0: Control interface command 'SCAN TYPE=ONLY'
2. Initiated by WifiConnectivityManager
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.javahandleScreenStateChanged/handleConnectionStateChanged/forceConnectivityScan()
startConnectivityScan
localLog("startConnectivityScan: screenOn=" + mScreenOn...)
startPeriodicScan(scanImmediately)
startPeriodicSingleScan()
startSingleScan(isFullBandScan);
schedulePeriodicScanTimer(mPeriodicSingleScanInterval);
Log.d(TAG, "schedulePeriodicScanTimer, scan interval: " + intervalMs);
mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP,... mPeriodicScanTimerListener, mEventHandler);
private final AlarmManager.OnAlarmListener mPeriodicScanTimerListener =
new AlarmManager.OnAlarmListener() {
public void onAlarm() {
periodicScanTimerHandler();
}
};
periodicScanTimerHandler()
localLog("periodicScanTimerHandler");
startPeriodicSingleScan();
startPeriodicSingleScan()
schedulePeriodicScanTimer
startSingleScan(boolean isFullBandScan)
mScanner.startScan(settings, singleScanListener, WIFI_WORK_SOURCE);
frameworks/base/wifi/java/android/net/wifi/WifiScanner.java
startScan(ScanSettings settings, ScanListener listener, WorkSource workSource)
mAsyncChannel.sendMessage(CMD_START_SINGLE_SCAN, 0, key, scanParams);
frameworks/opt/net/wifi/service/java/com/android/server/wifi/scanner/WifiScanningServiceImpl.java
case WifiScanner.CMD_START_SINGLE_SCAN:
tryToStartNewScan();
log:
22:31:31.631 2028 2378 D WifiStateMachine: Enter DisconnectedState screenOn=true
22:31:31.631 2028 2378 D WifiConnectivityManager: handleConnectionStateChanged: state=2
22:31:31.631 2028 2378 D WifiConnectivityManager: startConnectivityScan: screenOn=true wifiState=2 scanImmediately=false wifiEnabled=true wifiConnectivityManagerEnabled=true
22:31:31.631 2028 2378 W AlarmManager: Unrecognized alarm listener com.android.server.wifi.WifiConnectivityManager$3@3893494
22:31:31.632 2028 2378 W AlarmManager: Unrecognized alarm listener com.android.server.wifi.WifiConnectivityManager$2@de8ab3d
22:31:31.632 2028 2378 E WifiScanner: listener cannot be found
22:31:31.632 2028 2378 D WifiConnectivityManager: schedulePeriodicScanTimer, scan interval: 15000
22:31:31.688 2028 2391 D WifiNative-wlan0: doBoolean: SCAN TYPE=ONLY
3. 公用log:
22:31:31.927 2028 2391 D WifiNative-wlan0: doBoolean: SCAN TYPE=ONLY
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Control interface command 'SCAN TYPE=ONLY'
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Setting scan request: 0.000000 sec
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: No enabled networks (1 disabled networks)
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: State: DISCONNECTED -> SCANNING
22:31:31.927 2633 2633 D wpa_supplicant: wpa_state_to_wapi_state wpa_state : 3 change to wapi_state
22:31:31.927 2633 2633 D wpa_supplicant: wpa_supplicant_set_state wapi_state : 3
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Determining shared radio frequencies (max len 2)
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Shared frequencies (len=0): completed iteration
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 81
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 81 (client only)
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels - hexdump(len=12): 01 02 03 04 05 06 07 08 09 0a 0b 0d
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels (client only) - hexdump(len=1): 0c
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 115 (client only)
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels (client only) - hexdump(len=4): 24 28 2c 30
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 124 (client only)
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels (client only) - hexdump(len=4): 95 99 9d a1
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 125 (client only)
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 125
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels - hexdump(len=1): a5
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels (client only) - hexdump(len=4): 95 99 9d a1
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Add operating class 130 (client only)
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Channels (client only) - hexdump(len=4): 24 28 2c 30
22:31:31.927 2633 2633 D wpa_supplicant: P2P: Update channel list
22:31:31.927 2633 2633 D wpa_supplicant: P2P: channels: 81:1,2,3,4,5,6,7,8,9,10,11,13 125:165
22:31:31.927 2633 2633 D wpa_supplicant: P2P: cli_channels: 81:12 115:36,40,44,48 124:149,153,157,161 125:149,153,157,161 130:36,40,44,48
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Starting AP scan for wildcard SSID
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Add radio work 'scan'@0x7fa742f300
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: First radio work item in the queue - schedule start immediately
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: Starting radio work 'scan'@0x7fa742f300 after 0.000020 second wait
22:31:31.927 2633 2633 D wpa_supplicant: wlan0: nl80211: scan request
22:31:31.928 2028 2672 D WifiMonitor: Event [IFNAME=wlan0 CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=]
22:31:31.928 2028 2672 D WifiMonitor: wlan0 cnt=56 dispatchEvent: CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=00:00:00:00:00:00 SSID=
22:31:31.928 2028 2391 D WifiNative-wlan0: SCAN TYPE=ONLY: returned true
22:31:31.928 2028 2378 D WifiStateMachine: DisconnectedState !SUPPLICANT_STATE_CHANGE_EVENT rt=158513/158513 56 0 SSID: BSSID: 00:00:00:00:00:00 nid: -1 state: SCANNING
22:31:31.928 2028 2378 D WifiStateMachine: SUPPLICANT_STATE_CHANGE_EVENT state=SCANNING -> state= SCANNING debouncing=false
22:31:31.928 2028 2378 D WifiStateMachine: setDetailed state, old =DISCONNECTED and new state=SCANNING hidden=false
22:31:31.930 2028 2378 D WifiStateMachine: ConnectModeState !SUPPLICANT_STATE_CHANGE_EVENT rt=158515/158515 56 0 SSID: BSSID: 00:00:00:00:00:00 nid: -1 state: SCANNING
22:31:31.930 2028 2378 D WifiStateMachine: DisconnectedState !CMD_GET_CONFIGURED_NETWORKS uid=1000 rt=158515/158515 1000 0 num=1
22:31:31.930 2028 2378 D WifiStateMachine: ConnectModeState !CMD_GET_CONFIGURED_NETWORKS uid=1000 rt=158515/158515 1000 0 num=1
22:31:31.933 2028 2378 D SupplicantStateTracker: DefaultState{ when=0 what=147462 arg1=56 obj= SSID: BSSID: 00:00:00:00:00:00 nid: -1 state: SCANNING target=com.android.internal.util.StateMachine$SmHandler }
22:31:31.934 2028 2378 D SupplicantStateTracker: Supplicant state: SCANNING
22:31:31.934 2028 2378 D SupplicantStateTracker: ScanState
22:31:31.967 2633 2633 D wpa_supplicant: Scan requested (ret=0) - scan timeout 30 seconds
22:31:31.967 2633 2633 D wpa_supplicant: nl80211: Ignored event (cmd=33) for foreign interface (ifindex 5 wdev 0x0)
22:31:31.967 2633 2633 D wpa_supplicant: nl80211: Drv Event 33 (NL80211_CMD_TRIGGER_SCAN) received for wlan0
22:31:31.967 2633 2633 D wpa_supplicant: wlan0: nl80211: Scan trigger
22:31:31.967 2633 2633 D wpa_supplicant: wlan0: Event SCAN_STARTED (47) received
22:31:31.967 2633 2633 D wpa_supplicant: wlan0: Own scan request started a scan in 0.000266 seconds
22:31:31.967 2028 2028 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.startService:1358 android.content.ContextWrapper.startService:613 android.content.ContextWrapper.startService:613 com.sonymobile.wifi.idd.IddUtils.startIddService:16 com.sonymobile.wifi.idd.IddReceiver.onReceive:27
22:31:31.967 2028 2672 D WifiMonitor: Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]
22:31:31.968 2028 2672 D WifiMonitor: wlan0 cnt=57 dispatchEvent: CTRL-EVENT-SCAN-STARTED
22:31:31.968 2028 2672 D WifiMonitor: handleEvent 14 CTRL-EVENT-SCAN-STARTED
22:31:31.968 2028 2672 W WifiMonitor: handleEvent unknown: 14 CTRL-EVENT-SCAN-STARTED
22:31:36.370 2633 2633 D wpa_supplicant: nl80211: Ignored event (cmd=34) for foreign interface (ifindex 5 wdev 0x0)
22:31:36.370 2633 2633 D wpa_supplicant: nl80211: Drv Event 34 (NL80211_CMD_NEW_SCAN_RESULTS) received for wlan0
22:31:36.370 2633 2633 D wpa_supplicant: wlan0: nl80211: New scan results available
22:31:36.370 2633 2633 D wpa_supplicant: nl80211: Scan probed for SSID ''
22:31:36.370 2633 2633 D wpa_supplicant: nl80211: Scan included frequencies: 2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 2462 2467 2472 5180 5200 5220 5240 5260 5280 5300 5320 5500 5520 5540 5560 5580 5600 5620 5640 5660 5680 5700 5720 5745 5765 5785 5805 5825
22:31:36.370 2633 2633 D wpa_supplicant: wlan0: Event SCAN_RESULTS (3) received
22:31:36.370 2633 2633 D wpa_supplicant: wlan0: Scan completed in 4.403258 seconds
22:31:36.371 2633 2633 D wpa_supplicant: nl80211: Received scan results (25 BSSes)
22:31:36.371 2633 2633 D wpa_supplicant: wlan0: BSS: Start scan result update 6
22:31:36.371 2633 2633 D wpa_supplicant: wlan0: BSS: Add new id 27 BSSID 14:75:90:31:3e:44 SSID 'TP-LINK602' freq 2462
22:31:36.371 2633 2633 D wpa_supplicant: wlan0: BSS: Add new id 28 BSSID 24:69:68:c4:59:d0 SSID '1082' freq 2462
22:31:36.371 2633 2633 D wpa_supplicant: wlan0: BSS: Add new id 29 BSSID 88:25:93:56:ba:d1 SSID 'huaduo' freq 2422
22:31:36.372 2633 2633 D wpa_supplicant: wlan0: BSS: Add new id 30 BSSID bc:0f:2b:7d:d9:ee SSID 'midea_ac_0617' freq 2447
22:31:36.372 2633 2633 D wpa_supplicant: wlan0: BSS: Add new id 31 BSSID ec:26:ca:dc:00:84 SSID 'CR7' freq 2437
22:31:36.372 2633 2633 D wpa_supplicant: wlan0: BSS: Remove id 5 BSSID 80:13:82:e7:fc:bc SSID 'wkwkwk' due to no match in scan
22:31:36.372 2633 2633 D wpa_supplicant: wlan0: BSS: Remove id 9 BSSID 64:09:80:7d:e9:97 SSID 'cbpm-keba_3f' due to no match in scan
22:31:36.372 2633 2633 D wpa_supplicant: BSS: last_scan_res_used=25/32
22:31:36.372 2633 2633 D wpa_supplicant: wlan0: Scan-only results received
22:31:36.373 2633 2633 D wpa_supplicant: wlan0: Radio work 'scan'@0x7fa742f300 done in 4.445170 seconds
22:31:36.373 2633 2633 D wpa_supplicant: wlan0: radio_work_free('scan'@0x7fa742f300: num_active_works --> 0
22:31:36.373 2633 2633 D wpa_supplicant: wlan0: State: SCANNING -> DISCONNECTED
4. auto connect after scanning finishes
After getting scanning result
frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiConnectivityManager.java
onResults/onPnoNetworkFound
handleScanResults
localLog(listenerName + " onResults: start QNS");
mQualifiedNetworkSelector.selectQualifiedNetwork
localLog(listenerName + ": QNS candidate-" + candidate.SSID);
connectToNetwork(candidate);
22:34:03.105 2028 2378 D WifiConnectivityManager: SingleScanListener onFullResult: mali capabilities [WPA2-PSK-CCMP][ESS]
22:34:03.106 2028 2055 I BroadcastQueue: am_broadcast_finished: [background,0,Intent { act=android.net.wifi.STATE_CHANGE flg=0x4000010 (has extras) }]
22:34:03.108 2028 2378 D WifiConnectivityManager: SingleScanListener onFullResult: CU_kaola capabilities [WPA2-PSK-CCMP][ESS]
22:34:03.108 2028 2378 D WifiConnectivityManager: SingleScanListener onResults: start QNS
22:34:03.109 2028 2378 D WifiStateMachine: Supplicant is under steady state: DISCONNECTED
22:34:03.109 2028 2378 D WifiQualifiedNetworkSelector:: ==========start qualified Network Selection==========
22:34:03.109 2028 2378 D WifiQualifiedNetworkSelector:: Saved Network List
22:34:03.109 2028 2378 D WifiQualifiedNetworkSelector:: "CU_4gtP":1 User Preferred BSSID:null FQDN:null NETWORK_SELECTION_ENABLED Disable account: 0 0 0 0 0 0 0 0 0 0 Connect Choice:null set time:-1
22:34:03.110 2028 2391 I WifiHAL : Got channel list with 13 channels
22:34:03.110 2028 2378 D WifiQualifiedNetworkSelector:: skipped due to low signal
22:34:03.111 2028 2378 D WifiQualifiedNetworkSelector:: mali:ea:b1:fc:5b:1f:17 / CU_kaola:d4:f9:a1:70:be:6c / skipped due to not saved
22:34:03.111 2028 2378 D WifiQualifiedNetworkSelector::
22:34:03.111 2028 2378 D WifiQualifiedNetworkSelector:: skipped due to not valid SSID
22:34:03.111 2028 2378 D WifiQualifiedNetworkSelector:: RSSI score: 100 Secure network Bonus:2000 Score for scanResult: SSID: CU_4gtP, BSSID: 08:c0:21:13:46:2c, capabilities: [WPA2-PSK-CCMP][ESS], level: -31, frequency: 2447, timestamp: 309648574, distance: ?(cm), distanceSd: ?(cm), passpoint: no, ChannelBandwidth: 0, centerFreq0: 0, centerFreq1: 0, 80211mcResponder: is not supported and Network ID: 1 final score:2100
22:34:03.111 2028 2378 D WifiQualifiedNetworkSelector::
22:34:03.111 2028 2378 D WifiQualifiedNetworkSelector:: reconnect from Disconnected to "CU_4gtP":1
22:34:03.111 2028 2391 I WifiHAL : Got channel list with 10 channels
22:34:03.112 2028 2378 D WifiConnectivityManager: SingleScanListener: QNS candidate-"CU_4gtP"
22:34:03.112 2028 2378 D WifiConnectivityManager: connectToNetwork: Reconnect from Disconnected to "CU_4gtP" : 08:c0:21:13:46:2c
22:34:03.119 2028 2378 D WifiStateMachine: DisconnectedState !CMD_AUTO_CONNECT rt=309703/309703 1 0 "CU_4gtP"WPA_PSK any roam=false
22:34:03.119 2028 2378 D WifiStateMachine: ConnectModeState !CMD_AUTO_CONNECT rt=309703/309703 1 0 "CU_4gtP"WPA_PSK any roam=false
22:34:03.119 2028 2378 D WifiStateMachine: CMD_AUTO_CONNECT sup state DisconnectedState my state DisconnectedState nid=1 roam=false
22:34:03.119 2028 2378 D WifiStateMachine: target set to "CU_4gtP":08:c0:21:13:46:2c
22:34:03.119 2028 2378 D WifiNative-wlan0: doBoolean: SET_NETWORK 1 bssid 08:c0:21:13:46:2c
22:34:03.160 2028 2378 D WifiNative-wlan0: SET_NETWORK 1 bssid 08:c0:21:13:46:2c: returned true
22:34:03.160 2028 2378 D WifiStateMachine: CMD_AUTO_CONNECT will save config -> "CU_4gtP" nid=1
22:34:03.160 2028 2378 D WifiConfigManager: WifiConfigManager saveNetwork, size=2 (for all users) SSID="CU_4gtP" Uid=1000/1000
22:34:03.160 2028 2378 D WifiNative-wlan0: doBoolean: SET_NETWORK 1 ssid 43555f34677450
22:34:03.203 2028 2378 D WifiNative-wlan0: doBoolean: SELECT_NETWORK 1
22:34:03.203 2633 2633 D wpa_supplicant: wlan0: Control interface command 'SELECT_NETWORK 1'
22:34:03.203 2633 2633 D wpa_supplicant: CTRL_IFACE: SELECT_NETWORK id=1
22:34:03.207 2028 2378 D WifiNative-wlan0: SELECT_NETWORK 1: returned true
22:34:03.208 2028 2378 D WifiNative-wlan0: doBoolean: RECONNECT
22:34:03.208 2633 2633 D wpa_supplicant: wlan0: Starting radio work 'connect'@0x7fa742f300 after 0.002311 second wait
22:34:03.208 2633 2633 I wpa_supplicant: wlan0: Trying to associate with SSID 'CU_4gtP'