11b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne/* 21b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Copyright (C) 2016 The Android Open Source Project 31b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 41b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Licensed under the Apache License, Version 2.0 (the "License"); 51b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * you may not use this file except in compliance with the License. 61b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * You may obtain a copy of the License at 71b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 81b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * http://www.apache.org/licenses/LICENSE-2.0 91b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 101b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Unless required by applicable law or agreed to in writing, software 111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * distributed under the License is distributed on an "AS IS" BASIS, 121b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * See the License for the specific language governing permissions and 141b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * limitations under the License. 151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 171b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhnepackage com.android.server.wifi; 181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 1946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport android.hardware.wifi.supplicant.V1_0.ISupplicantStaIfaceCallback; 204569ebc2277f35b9bd1baa98194f963388e0c4caSohani Raoimport android.net.NetworkAgent; 214dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhneimport android.net.wifi.ScanResult; 2246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport android.net.wifi.SupplicantState; 232532a24b254d724a9b6771d327dc410b32b18602Glen Kuhneimport android.net.wifi.WifiConfiguration; 2446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport android.net.wifi.WifiInfo; 2544ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silbersteinimport android.net.wifi.WifiManager; 2646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport android.os.Handler; 2746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport android.os.Looper; 2846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport android.os.Message; 291b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport android.util.Base64; 30c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhneimport android.util.Log; 3108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhneimport android.util.Pair; 32c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhneimport android.util.SparseIntArray; 331b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 34e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plassimport com.android.internal.annotations.VisibleForTesting; 35910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohenimport com.android.server.wifi.aware.WifiAwareMetrics; 369831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohenimport com.android.server.wifi.hotspot2.ANQPNetworkKey; 37f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhneimport com.android.server.wifi.hotspot2.NetworkDetail; 3808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhneimport com.android.server.wifi.hotspot2.PasspointManager; 3908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhneimport com.android.server.wifi.hotspot2.PasspointMatch; 4008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhneimport com.android.server.wifi.hotspot2.PasspointProvider; 419831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohenimport com.android.server.wifi.hotspot2.Utils; 42da94688198c864bb29be2e9603ebbe9ae6492a87Tamas Berghammerimport com.android.server.wifi.nano.WifiMetricsProto; 43a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chenimport com.android.server.wifi.nano.WifiMetricsProto.ConnectToNetworkNotificationAndActionCount; 44a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadehimport com.android.server.wifi.nano.WifiMetricsProto.PnoScanMetrics; 4505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadehimport com.android.server.wifi.nano.WifiMetricsProto.SoftApConnectedClientsEvent; 4646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport com.android.server.wifi.nano.WifiMetricsProto.StaEvent; 4746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport com.android.server.wifi.nano.WifiMetricsProto.StaEvent.ConfigInfo; 4862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kimimport com.android.server.wifi.nano.WifiMetricsProto.WpsMetrics; 4902e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohenimport com.android.server.wifi.rtt.RttMetrics; 50f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhneimport com.android.server.wifi.util.InformationElementUtil; 5159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhneimport com.android.server.wifi.util.ScanResultUtil; 52f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 5304012eb3e692202b25095f7afc1eda40b63e3e0fxshuimport org.json.JSONArray; 5404012eb3e692202b25095f7afc1eda40b63e3e0fxshuimport org.json.JSONException; 5504012eb3e692202b25095f7afc1eda40b63e3e0fxshuimport org.json.JSONObject; 5604012eb3e692202b25095f7afc1eda40b63e3e0fxshu 571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.io.FileDescriptor; 581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.io.PrintWriter; 591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.util.ArrayList; 6046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport java.util.BitSet; 611b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.util.Calendar; 629831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohenimport java.util.HashMap; 6308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhneimport java.util.HashSet; 6446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhneimport java.util.LinkedList; 651b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhneimport java.util.List; 669831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohenimport java.util.Map; 6708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhneimport java.util.Set; 681b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 691b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne/** 701b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Provides storage for wireless connectivity metrics, as they are generated. 711b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Metrics logged by this class include: 721b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Aggregated connection stats (num of connections, num of failures, ...) 731b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Discrete connection event stats (time, duration, failure codes, ...) 741b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Router details (technology type, authentication type, ...) 751b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Scan stats 761b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 771b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhnepublic class WifiMetrics { 781b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private static final String TAG = "WifiMetrics"; 79c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final boolean DBG = false; 807a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne /** 817a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne * Clamp the RSSI poll counts to values between [MIN,MAX]_RSSI_POLL 827a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne */ 837a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne private static final int MAX_RSSI_POLL = 0; 847a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne private static final int MIN_RSSI_POLL = -127; 855cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne public static final int MAX_RSSI_DELTA = 127; 865cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne public static final int MIN_RSSI_DELTA = -127; 875cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne /** Maximum time period between ScanResult and RSSI poll to generate rssi delta datapoint */ 885cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne public static final long TIMEOUT_RSSI_DELTA_MILLIS = 3000; 894569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao private static final int MIN_WIFI_SCORE = 0; 904569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao private static final int MAX_WIFI_SCORE = NetworkAgent.WIFI_BASE_SCORE; 91e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass @VisibleForTesting 92e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass static final int LOW_WIFI_SCORE = 50; // Mobile data score 931b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private final Object mLock = new Object(); 942532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne private static final int MAX_CONNECTION_EVENTS = 256; 9508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne // Largest bucket in the NumConnectableNetworkCount histogram, 9608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne // anything large will be stored in this bucket 9708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public static final int MAX_CONNECTABLE_SSID_NETWORK_BUCKET = 20; 9808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public static final int MAX_CONNECTABLE_BSSID_NETWORK_BUCKET = 50; 9908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public static final int MAX_TOTAL_SCAN_RESULT_SSIDS_BUCKET = 100; 10008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public static final int MAX_TOTAL_SCAN_RESULTS_BUCKET = 250; 1019831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen public static final int MAX_TOTAL_PASSPOINT_APS_BUCKET = 50; 1029831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen public static final int MAX_TOTAL_PASSPOINT_UNIQUE_ESS_BUCKET = 20; 1039831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen public static final int MAX_PASSPOINT_APS_PER_UNIQUE_ESS_BUCKET = 50; 104973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen public static final int MAX_TOTAL_80211MC_APS_BUCKET = 20; 105a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private static final int CONNECT_TO_NETWORK_NOTIFICATION_ACTION_KEY_MULTIPLIER = 1000; 10605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh // Max limit for number of soft AP related events, extra events will be dropped. 10705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh private static final int MAX_NUM_SOFT_AP_EVENTS = 256; 108107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne private Clock mClock; 109ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne private boolean mScreenOn; 110ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne private int mWifiState; 111910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen private WifiAwareMetrics mWifiAwareMetrics; 11202e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen private RttMetrics mRttMetrics; 113a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh private final PnoScanMetrics mPnoScanMetrics = new PnoScanMetrics(); 11462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim private final WpsMetrics mWpsMetrics = new WpsMetrics(); 11546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private Handler mHandler; 116a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass private ScoringParams mScoringParams; 11708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private WifiConfigManager mWifiConfigManager; 11808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private WifiNetworkSelector mWifiNetworkSelector; 11908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private PasspointManager mPasspointManager; 1201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 1211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Metrics are stored within an instance of the WifiLog proto during runtime, 1221b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * The ConnectionEvent, SystemStateEntries & ScanReturnEntries metrics are stored during 1231b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * runtime in member lists of this WifiMetrics class, with the final WifiLog proto being pieced 1241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * together at dump-time 1251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 1267a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne private final WifiMetricsProto.WifiLog mWifiLogProto = new WifiMetricsProto.WifiLog(); 1271b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 1281b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Session information that gets logged for every Wifi connection attempt. 1291b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 1307a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne private final List<ConnectionEvent> mConnectionEventList = new ArrayList<>(); 1311b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 1321b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * The latest started (but un-ended) connection attempt 1331b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 1341b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private ConnectionEvent mCurrentConnectionEvent; 1351b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 1361b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Count of number of times each scan return code, indexed by WifiLog.ScanReturnCode 1371b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 1387a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne private final SparseIntArray mScanReturnEntries = new SparseIntArray(); 1391b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 1401b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Mapping of system state to the counts of scans requested in that wifi state * screenOn 1411b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * combination. Indexed by WifiLog.WifiState * (1 + screenOn) 1421b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 1437a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne private final SparseIntArray mWifiSystemStateEntries = new SparseIntArray(); 14404012eb3e692202b25095f7afc1eda40b63e3e0fxshu /** Mapping of channel frequency to its RSSI distribution histogram **/ 14504012eb3e692202b25095f7afc1eda40b63e3e0fxshu private final Map<Integer, SparseIntArray> mRssiPollCountsMap = new HashMap<>(); 1465cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne /** Mapping of RSSI scan-poll delta values to counts. */ 1475cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne private final SparseIntArray mRssiDeltaCounts = new SparseIntArray(); 1485cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne /** RSSI of the scan result for the last connection event*/ 1495cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne private int mScanResultRssi = 0; 1505cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne /** Boot-relative timestamp when the last candidate scanresult was received, used to calculate 1515cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne RSSI deltas. -1 designates no candidate scanResult being tracked */ 1525cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne private long mScanResultRssiTimestampMillis = -1; 153f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal /** Mapping of alert reason to the respective alert count. */ 154f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal private final SparseIntArray mWifiAlertReasonCounts = new SparseIntArray(); 155107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne /** 156107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne * Records the getElapsedSinceBootMillis (in seconds) that represents the beginning of data 157107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne * capture for for this WifiMetricsProto 158107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne */ 159107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne private long mRecordStartTimeSec; 1604569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao /** Mapping of Wifi Scores to counts */ 1614569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao private final SparseIntArray mWifiScoreCounts = new SparseIntArray(); 16244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein /** Mapping of SoftApManager start SoftAp return codes to counts */ 16344ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein private final SparseIntArray mSoftApManagerReturnCodeCounts = new SparseIntArray(); 16408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 16508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mTotalSsidsInScanHistogram = new SparseIntArray(); 16608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mTotalBssidsInScanHistogram = new SparseIntArray(); 16708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableOpenSsidsInScanHistogram = new SparseIntArray(); 16808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableOpenBssidsInScanHistogram = new SparseIntArray(); 16908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableSavedSsidsInScanHistogram = new SparseIntArray(); 17008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableSavedBssidsInScanHistogram = new SparseIntArray(); 17108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableOpenOrSavedSsidsInScanHistogram = new SparseIntArray(); 17208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableOpenOrSavedBssidsInScanHistogram = new SparseIntArray(); 17308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableSavedPasspointProviderProfilesInScanHistogram = 17408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne new SparseIntArray(); 17508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private final SparseIntArray mAvailableSavedPasspointProviderBssidsInScanHistogram = 17608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne new SparseIntArray(); 17708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 178a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Mapping of "Connect to Network" notifications to counts. */ 179a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private final SparseIntArray mConnectToNetworkNotificationCount = new SparseIntArray(); 180a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Mapping of "Connect to Network" notification user actions to counts. */ 181a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private final SparseIntArray mConnectToNetworkNotificationActionCount = new SparseIntArray(); 182a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private int mOpenNetworkRecommenderBlacklistSize = 0; 183a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private boolean mIsWifiNetworksAvailableNotificationOn = false; 184a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private int mNumOpenNetworkConnectMessageFailedToSend = 0; 185a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen private int mNumOpenNetworkRecommendationUpdates = 0; 18605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh /** List of soft AP events related to number of connected clients in tethered mode */ 18705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh private final List<SoftApConnectedClientsEvent> mSoftApEventListTethered = new ArrayList<>(); 18805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh /** List of soft AP events related to number of connected clients in local only mode */ 18905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh private final List<SoftApConnectedClientsEvent> mSoftApEventListLocalOnly = new ArrayList<>(); 190a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 1919831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private final SparseIntArray mObservedHotspotR1ApInScanHistogram = new SparseIntArray(); 1929831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private final SparseIntArray mObservedHotspotR2ApInScanHistogram = new SparseIntArray(); 1939831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private final SparseIntArray mObservedHotspotR1EssInScanHistogram = new SparseIntArray(); 1949831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private final SparseIntArray mObservedHotspotR2EssInScanHistogram = new SparseIntArray(); 1959831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private final SparseIntArray mObservedHotspotR1ApsPerEssInScanHistogram = new SparseIntArray(); 1969831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private final SparseIntArray mObservedHotspotR2ApsPerEssInScanHistogram = new SparseIntArray(); 1979831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen 198973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen private final SparseIntArray mObserved80211mcApInScanHistogram = new SparseIntArray(); 199973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen 200fb165562c8c77a9e5e2452f33aedb8e4369e7a9bSiddharth Ray /** Wifi power metrics*/ 201fb165562c8c77a9e5e2452f33aedb8e4369e7a9bSiddharth Ray private WifiPowerMetrics mWifiPowerMetrics = new WifiPowerMetrics(); 202fb165562c8c77a9e5e2452f33aedb8e4369e7a9bSiddharth Ray 20312d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach /** Wifi Wake metrics */ 20412d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach private final WifiWakeMetrics mWifiWakeMetrics = new WifiWakeMetrics(); 20512d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 20628a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim private boolean mIsMacRandomizationOn = false; 20728a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim 2081b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne class RouterFingerPrint { 2091b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private WifiMetricsProto.RouterFingerPrint mRouterFingerPrintProto; 2102532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne RouterFingerPrint() { 2111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mRouterFingerPrintProto = new WifiMetricsProto.RouterFingerPrint(); 2121b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 2131b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 2141b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public String toString() { 2151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne StringBuilder sb = new StringBuilder(); 2161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 2171b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append("mConnectionEvent.roamType=" + mRouterFingerPrintProto.roamType); 2181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", mChannelInfo=" + mRouterFingerPrintProto.channelInfo); 2191b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", mDtim=" + mRouterFingerPrintProto.dtim); 2201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", mAuthentication=" + mRouterFingerPrintProto.authentication); 2211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", mHidden=" + mRouterFingerPrintProto.hidden); 2221b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", mRouterTechnology=" + mRouterFingerPrintProto.routerTechnology); 2231b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", mSupportsIpv6=" + mRouterFingerPrintProto.supportsIpv6); 2241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 2251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne return sb.toString(); 2261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 2272532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne public void updateFromWifiConfiguration(WifiConfiguration config) { 228ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne synchronized (mLock) { 229ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (config != null) { 230ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // Is this a hidden network 231ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mRouterFingerPrintProto.hidden = config.hiddenSSID; 232ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // Config may not have a valid dtimInterval set yet, in which case dtim will be zero 233ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // (These are only populated from beacon frame scan results, which are returned as 234ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // scan results from the chip far less frequently than Probe-responses) 235ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (config.dtimInterval > 0) { 236ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mRouterFingerPrintProto.dtim = config.dtimInterval; 237ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } 238ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mCurrentConnectionEvent.mConfigSsid = config.SSID; 239ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // Get AuthType information from config (We do this again from ScanResult after 240ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // associating with BSSID) 241ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (config.allowedKeyManagement != null 242ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne && config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE)) { 243ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto 244ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne .authentication = WifiMetricsProto.RouterFingerPrint.AUTH_OPEN; 245ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } else if (config.isEnterprise()) { 246ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto 247ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne .authentication = WifiMetricsProto.RouterFingerPrint.AUTH_ENTERPRISE; 248ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } else { 249ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto 250ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne .authentication = WifiMetricsProto.RouterFingerPrint.AUTH_PERSONAL; 251ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } 25259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto 25359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne .passpoint = config.isPasspoint(); 254ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // If there's a ScanResult candidate associated with this config already, get it and 255ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne // log (more accurate) metrics from it 256ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne ScanResult candidate = config.getNetworkSelectionStatus().getCandidate(); 257ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (candidate != null) { 258ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne updateMetricsFromScanResult(candidate); 259ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } 26096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne } 2612532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 2622532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 2631b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 2641b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 2651b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 2661b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Log event, tracking the start time, end time and result of a wireless connection attempt. 2671b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 2681b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne class ConnectionEvent { 2691b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne WifiMetricsProto.ConnectionEvent mConnectionEvent; 27096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne //<TODO> Move these constants into a wifi.proto Enum, and create a new Failure Type field 27196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne //covering more than just l2 failures. see b/27652362 27296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne /** 27396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne * Failure codes, used for the 'level_2_failure_code' Connection event field (covers a lot 27496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne * more failures than just l2 though, since the proto does not have a place to log 27596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne * framework failures) 27696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne */ 2772532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne // Failure is unknown 27896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_UNKNOWN = 0; 2792532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne // NONE 28096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_NONE = 1; 2812532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne // ASSOCIATION_REJECTION_EVENT 28296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_ASSOCIATION_REJECTION = 2; 2832532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne // AUTHENTICATION_FAILURE_EVENT 28496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_AUTHENTICATION_FAILURE = 3; 2852532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne // SSID_TEMP_DISABLED (Also Auth failure) 28696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_SSID_TEMP_DISABLED = 4; 2874dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne // reconnect() or reassociate() call to WifiNative failed 28896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_CONNECT_NETWORK_FAILED = 5; 2892532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne // NETWORK_DISCONNECTION_EVENT 29096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_NETWORK_DISCONNECTION = 6; 2914dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne // NEW_CONNECTION_ATTEMPT before previous finished 29296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_NEW_CONNECTION_ATTEMPT = 7; 29396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne // New connection attempt to the same network & bssid 29496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_REDUNDANT_CONNECTION_ATTEMPT = 8; 29596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne // Roam Watchdog timer triggered (Roaming timed out) 29696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_ROAM_TIMEOUT = 9; 29796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne // DHCP failure 29896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public static final int FAILURE_DHCP = 10; 299b195838541edf2597659b217291079c52623d85cRoshan Pius // ASSOCIATION_TIMED_OUT 300b195838541edf2597659b217291079c52623d85cRoshan Pius public static final int FAILURE_ASSOCIATION_TIMED_OUT = 11; 30196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne 3024dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne RouterFingerPrint mRouterFingerPrint; 3034dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne private long mRealStartTime; 3044dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne private long mRealEndTime; 3054dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne private String mConfigSsid; 3064dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne private String mConfigBssid; 307ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne private int mWifiState; 308ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne private boolean mScreenOn; 3092532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne 3101b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private ConnectionEvent() { 3111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mConnectionEvent = new WifiMetricsProto.ConnectionEvent(); 312947e55415eab3989f2f5cede0c03745cf9268309Glen Kuhne mRealEndTime = 0; 313947e55415eab3989f2f5cede0c03745cf9268309Glen Kuhne mRealStartTime = 0; 3142532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mRouterFingerPrint = new RouterFingerPrint(); 3152532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mConnectionEvent.routerFingerprint = mRouterFingerPrint.mRouterFingerPrintProto; 3164dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mConfigSsid = "<NULL>"; 3174dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mConfigBssid = "<NULL>"; 318ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mWifiState = WifiMetricsProto.WifiLog.WIFI_UNKNOWN; 319ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mScreenOn = false; 3201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 3211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 3221b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public String toString() { 3231b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne StringBuilder sb = new StringBuilder(); 3241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append("startTime="); 3251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne Calendar c = Calendar.getInstance(); 3261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 3271b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne c.setTimeInMillis(mConnectionEvent.startTimeMillis); 3281b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(mConnectionEvent.startTimeMillis == 0 ? " <null>" : 3291b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c)); 3304dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(", SSID="); 3314dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(mConfigSsid); 3324dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(", BSSID="); 3334dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(mConfigBssid); 3344dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(", durationMillis="); 3351b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(mConnectionEvent.durationTakenToConnectMillis); 3362532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append(", roamType="); 3374dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne switch(mConnectionEvent.roamType) { 3382532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne case 1: 3392532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append("ROAM_NONE"); 3402532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne break; 3412532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne case 2: 3422532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append("ROAM_DBDC"); 3432532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne break; 3442532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne case 3: 3452532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append("ROAM_ENTERPRISE"); 3462532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne break; 3472532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne case 4: 3482532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append("ROAM_USER_SELECTED"); 3492532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne break; 3502532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne case 5: 3512532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append("ROAM_UNRELATED"); 3522532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne break; 3532532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne default: 3542532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne sb.append("ROAM_UNKNOWN"); 3552532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 3564dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(", connectionResult="); 3574dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(mConnectionEvent.connectionResult); 3581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", level2FailureCode="); 3594dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne switch(mConnectionEvent.level2FailureCode) { 36096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_NONE: 3614dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("NONE"); 3624dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 36396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_ASSOCIATION_REJECTION: 3644dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("ASSOCIATION_REJECTION"); 3654dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 36696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_AUTHENTICATION_FAILURE: 3674dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("AUTHENTICATION_FAILURE"); 3684dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 36996cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_SSID_TEMP_DISABLED: 3704dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("SSID_TEMP_DISABLED"); 3714dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 37296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_CONNECT_NETWORK_FAILED: 3734dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("CONNECT_NETWORK_FAILED"); 3744dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 37596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_NETWORK_DISCONNECTION: 3764dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("NETWORK_DISCONNECTION"); 3774dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 37896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_NEW_CONNECTION_ATTEMPT: 3794dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("NEW_CONNECTION_ATTEMPT"); 3804dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 38196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_REDUNDANT_CONNECTION_ATTEMPT: 38296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne sb.append("REDUNDANT_CONNECTION_ATTEMPT"); 38396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne break; 38496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_ROAM_TIMEOUT: 38596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne sb.append("ROAM_TIMEOUT"); 38696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne break; 38796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne case FAILURE_DHCP: 38896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne sb.append("DHCP"); 389b195838541edf2597659b217291079c52623d85cRoshan Pius break; 390b195838541edf2597659b217291079c52623d85cRoshan Pius case FAILURE_ASSOCIATION_TIMED_OUT: 391b195838541edf2597659b217291079c52623d85cRoshan Pius sb.append("ASSOCIATION_TIMED_OUT"); 392b195838541edf2597659b217291079c52623d85cRoshan Pius break; 3934dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne default: 3944dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("UNKNOWN"); 3954dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 3964dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne } 3971b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(", connectivityLevelFailureCode="); 3984dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne switch(mConnectionEvent.connectivityLevelFailureCode) { 3994dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne case WifiMetricsProto.ConnectionEvent.HLF_NONE: 4004dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("NONE"); 4014dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 4024dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne case WifiMetricsProto.ConnectionEvent.HLF_DHCP: 4034dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("DHCP"); 4044dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 4054dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne case WifiMetricsProto.ConnectionEvent.HLF_NO_INTERNET: 4064dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("NO_INTERNET"); 4074dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 4084dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne case WifiMetricsProto.ConnectionEvent.HLF_UNWANTED: 4094dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("UNWANTED"); 4104dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 4114dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne default: 4124dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append("UNKNOWN"); 4134dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne break; 4144dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne } 4154dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(", signalStrength="); 4164dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne sb.append(mConnectionEvent.signalStrength); 417ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append(", wifiState="); 418ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne switch(mWifiState) { 419ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_DISABLED: 420ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append("WIFI_DISABLED"); 421ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne break; 422ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_DISCONNECTED: 423ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append("WIFI_DISCONNECTED"); 424ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne break; 425ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_ASSOCIATED: 426ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append("WIFI_ASSOCIATED"); 427ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne break; 428ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne default: 429ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append("WIFI_UNKNOWN"); 430ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne break; 431ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne } 432ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append(", screenOn="); 433ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append(mScreenOn); 434ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne sb.append(". mRouterFingerprint: "); 4351b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne sb.append(mRouterFingerPrint.toString()); 4361b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 4371b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne return sb.toString(); 4381b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 4391b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 4401b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 44102e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen public WifiMetrics(Clock clock, Looper looper, WifiAwareMetrics awareMetrics, 44202e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen RttMetrics rttMetrics) { 443107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mClock = clock; 4441b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mCurrentConnectionEvent = null; 445ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mScreenOn = true; 446ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mWifiState = WifiMetricsProto.WifiLog.WIFI_DISABLED; 447107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mRecordStartTimeSec = mClock.getElapsedSinceBootMillis() / 1000; 448910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen mWifiAwareMetrics = awareMetrics; 44902e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen mRttMetrics = rttMetrics; 45046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 45146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mHandler = new Handler(looper) { 45246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public void handleMessage(Message msg) { 45346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne synchronized (mLock) { 45446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne processMessage(msg); 45546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 45646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 45746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne }; 4581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 4591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 460a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass /** Sets internal ScoringParams member */ 461a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass public void setScoringParams(ScoringParams scoringParams) { 462a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass mScoringParams = scoringParams; 463a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass } 464a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass 46508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne /** Sets internal WifiConfigManager member */ 46608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public void setWifiConfigManager(WifiConfigManager wifiConfigManager) { 46708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiConfigManager = wifiConfigManager; 46808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 46908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 47008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne /** Sets internal WifiNetworkSelector member */ 47108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public void setWifiNetworkSelector(WifiNetworkSelector wifiNetworkSelector) { 47208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiNetworkSelector = wifiNetworkSelector; 47308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 47408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 47508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne /** Sets internal PasspointManager member */ 47608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public void setPasspointManager(PasspointManager passpointManager) { 47708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mPasspointManager = passpointManager; 47808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 47908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 480a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh /** 481a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh * Increment total number of attempts to start a pno scan 482a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh */ 483a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh public void incrementPnoScanStartAttempCount() { 484a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh synchronized (mLock) { 485a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mPnoScanMetrics.numPnoScanAttempts++; 486a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 487a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 488a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 489a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh /** 490a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh * Increment total number of attempts with pno scan failed 491a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh */ 492a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh public void incrementPnoScanFailedCount() { 493a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh synchronized (mLock) { 494a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mPnoScanMetrics.numPnoScanFailed++; 495a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 496a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 497a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 498a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh /** 499a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh * Increment number of pno scans started successfully over offload 500a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh */ 501a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh public void incrementPnoScanStartedOverOffloadCount() { 502a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh synchronized (mLock) { 503a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mPnoScanMetrics.numPnoScanStartedOverOffload++; 504a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 505a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 506a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 507a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh /** 508a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh * Increment number of pno scans failed over offload 509a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh */ 510a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh public void incrementPnoScanFailedOverOffloadCount() { 511a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh synchronized (mLock) { 512a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mPnoScanMetrics.numPnoScanFailedOverOffload++; 513a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 514a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 515a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 516a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh /** 517a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh * Increment number of times pno scan found a result 518a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh */ 519a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh public void incrementPnoFoundNetworkEventCount() { 520a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh synchronized (mLock) { 521a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mPnoScanMetrics.numPnoFoundNetworkEvents++; 522a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 523a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh } 524a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 52562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 52662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of wps connection attempts 52762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 52862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsAttemptCount() { 52962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 53062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsAttempts++; 53162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 53262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 53362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 53462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 53562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of wps connection success 53662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 53762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsSuccessCount() { 53862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 53962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsSuccess++; 54062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 54162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 54262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 54362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 54462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of wps failure on start 54562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 54662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsStartFailureCount() { 54762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 54862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsStartFailure++; 54962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 55062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 55162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 55262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 55362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of wps overlap failure 55462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 55562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsOverlapFailureCount() { 55662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 55762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsOverlapFailure++; 55862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 55962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 56062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 56162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 56262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of wps timeout failure 56362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 56462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsTimeoutFailureCount() { 56562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 56662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsTimeoutFailure++; 56762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 56862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 56962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 57062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 57162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of other wps failure during connection 57262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 57362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsOtherConnectionFailureCount() { 57462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 57562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsOtherConnectionFailure++; 57662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 57762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 57862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 57962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 58062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of supplicant failure after wps 58162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 58262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsSupplicantFailureCount() { 58362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 58462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsSupplicantFailure++; 58562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 58662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 58762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 58862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim /** 58962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim * Increment total number of wps cancellation 59062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim */ 59162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim public void incrementWpsCancellationCount() { 59262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim synchronized (mLock) { 59362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.numWpsCancellation++; 59462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 59562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim } 59662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 597c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne // Values used for indexing SystemStateEntries 598c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int SCREEN_ON = 1; 599c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private static final int SCREEN_OFF = 0; 600c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 6011b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 6021b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Create a new connection event. Call when wifi attempts to make a new network connection 6031b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * If there is a current 'un-ended' connection event, it will be ended with UNKNOWN connectivity 6041b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * failure code. 6051b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Gathers and sets the RouterFingerPrint data as well 6061b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 607947e55415eab3989f2f5cede0c03745cf9268309Glen Kuhne * @param config WifiConfiguration of the config used for the current connection attempt 6081b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param roamType Roam type that caused connection attempt, see WifiMetricsProto.WifiLog.ROAM_X 6091b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 61096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne public void startConnectionEvent(WifiConfiguration config, String targetBSSID, int roamType) { 6111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 61296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne // Check if this is overlapping another current connection event 61396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne if (mCurrentConnectionEvent != null) { 61496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne //Is this new Connection Event the same as the current one 61596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne if (mCurrentConnectionEvent.mConfigSsid != null 61696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne && mCurrentConnectionEvent.mConfigBssid != null 61796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne && config != null 61896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne && mCurrentConnectionEvent.mConfigSsid.equals(config.SSID) 61996cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne && (mCurrentConnectionEvent.mConfigBssid.equals("any") 62096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne || mCurrentConnectionEvent.mConfigBssid.equals(targetBSSID))) { 62196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mCurrentConnectionEvent.mConfigBssid = targetBSSID; 62296cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne // End Connection Event due to new connection attempt to the same network 62396cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne endConnectionEvent(ConnectionEvent.FAILURE_REDUNDANT_CONNECTION_ATTEMPT, 62496cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 62596cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne } else { 62696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne // End Connection Event due to new connection attempt to different network 62796cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne endConnectionEvent(ConnectionEvent.FAILURE_NEW_CONNECTION_ATTEMPT, 62896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne WifiMetricsProto.ConnectionEvent.HLF_NONE); 62996cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne } 63096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne } 63196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne //If past maximum connection events, start removing the oldest 6324dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne while(mConnectionEventList.size() >= MAX_CONNECTION_EVENTS) { 6334dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mConnectionEventList.remove(0); 6344dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne } 6354dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mCurrentConnectionEvent = new ConnectionEvent(); 6364dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.startTimeMillis = 637107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mClock.getWallClockMillis(); 63896cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mCurrentConnectionEvent.mConfigBssid = targetBSSID; 6394dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.roamType = roamType; 6404dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.updateFromWifiConfiguration(config); 64196cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mCurrentConnectionEvent.mConfigBssid = "any"; 642107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mCurrentConnectionEvent.mRealStartTime = mClock.getElapsedSinceBootMillis(); 643ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mCurrentConnectionEvent.mWifiState = mWifiState; 644ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mCurrentConnectionEvent.mScreenOn = mScreenOn; 6454dead162c5336443e9d7b3deae5eb26b07d39254Glen Kuhne mConnectionEventList.add(mCurrentConnectionEvent); 6465cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mScanResultRssiTimestampMillis = -1; 6475cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne if (config != null) { 6485cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne ScanResult candidate = config.getNetworkSelectionStatus().getCandidate(); 6495cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne if (candidate != null) { 6505cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne // Cache the RSSI of the candidate, as the connection event level is updated 6515cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne // from other sources (polls, bssid_associations) and delta requires the 6525cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne // scanResult rssi 6535cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mScanResultRssi = candidate.level; 6545cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mScanResultRssiTimestampMillis = mClock.getElapsedSinceBootMillis(); 6555cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 6565cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 6571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 6581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 6591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 6601b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 6612532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne * set the RoamType of the current ConnectionEvent (if any) 6622532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne */ 6632532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne public void setConnectionEventRoamType(int roamType) { 664ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne synchronized (mLock) { 665ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (mCurrentConnectionEvent != null) { 666ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.roamType = roamType; 667ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } 6682532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 6692532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 670f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 671f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne /** 672f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne * Set AP related metrics from ScanDetail 673f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne */ 674f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne public void setConnectionScanDetail(ScanDetail scanDetail) { 675ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne synchronized (mLock) { 676ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (mCurrentConnectionEvent != null && scanDetail != null) { 677ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne NetworkDetail networkDetail = scanDetail.getNetworkDetail(); 678ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne ScanResult scanResult = scanDetail.getScanResult(); 679ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne //Ensure that we have a networkDetail, and that it corresponds to the currently 680ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne //tracked connection attempt 681ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne if (networkDetail != null && scanResult != null 682ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne && mCurrentConnectionEvent.mConfigSsid != null 683ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne && mCurrentConnectionEvent.mConfigSsid 684ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne .equals("\"" + networkDetail.getSSID() + "\"")) { 685ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne updateMetricsFromNetworkDetail(networkDetail); 686ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne updateMetricsFromScanResult(scanResult); 687ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } 688f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne } 689f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne } 690f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne } 691f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne 6922532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne /** 6931b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * End a Connection event record. Call when wifi connection attempt succeeds or fails. 6941b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * If a Connection event has not been started and is active when .end is called, a new one is 6951b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * created with zero duration. 6961b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 6971b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param level2FailureCode Level 2 failure code returned by supplicant 6981b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param connectivityFailureCode WifiMetricsProto.ConnectionEvent.HLF_X 6991b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 7001b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void endConnectionEvent(int level2FailureCode, int connectivityFailureCode) { 7011b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 7022532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne if (mCurrentConnectionEvent != null) { 7032532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne boolean result = (level2FailureCode == 1) 7042532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne && (connectivityFailureCode == WifiMetricsProto.ConnectionEvent.HLF_NONE); 7052532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.connectionResult = result ? 1 : 0; 706107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mCurrentConnectionEvent.mRealEndTime = mClock.getElapsedSinceBootMillis(); 7072532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.durationTakenToConnectMillis = (int) 7082532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne (mCurrentConnectionEvent.mRealEndTime 7092532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne - mCurrentConnectionEvent.mRealStartTime); 7102532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.level2FailureCode = level2FailureCode; 7112532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.connectivityLevelFailureCode = 7122532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne connectivityFailureCode; 713f5cc6a0c7ede374b33de1cf5156bf149e2e76c13Glen Kuhne // ConnectionEvent already added to ConnectionEvents List. Safe to null current here 7142532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mCurrentConnectionEvent = null; 7155cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne if (!result) { 7165cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mScanResultRssiTimestampMillis = -1; 7175cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 7181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7191b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 7222b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne /** 7232b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne * Set ConnectionEvent DTIM Interval (if set), and 802.11 Connection mode, from NetworkDetail 7242b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne */ 7252b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne private void updateMetricsFromNetworkDetail(NetworkDetail networkDetail) { 7262b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne int dtimInterval = networkDetail.getDtimInterval(); 7272b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne if (dtimInterval > 0) { 7282b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.dtim = 7292b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne dtimInterval; 7302b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne } 7312b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne int connectionWifiMode; 7322b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne switch (networkDetail.getWifiMode()) { 7332b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne case InformationElementUtil.WifiMode.MODE_UNDEFINED: 7342b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_UNKNOWN; 7352b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7362b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne case InformationElementUtil.WifiMode.MODE_11A: 7372b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_A; 7382b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7392b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne case InformationElementUtil.WifiMode.MODE_11B: 7402b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_B; 7412b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7422b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne case InformationElementUtil.WifiMode.MODE_11G: 7432b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_G; 7442b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7452b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne case InformationElementUtil.WifiMode.MODE_11N: 7462b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_N; 7472b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7482b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne case InformationElementUtil.WifiMode.MODE_11AC : 7492b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_AC; 7502b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7512b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne default: 7522b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne connectionWifiMode = WifiMetricsProto.RouterFingerPrint.ROUTER_TECH_OTHER; 7532b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne break; 7542b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne } 7552b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto 7562b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne .routerTechnology = connectionWifiMode; 7572b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne } 7582b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne 7592b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne /** 7602b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne * Set ConnectionEvent RSSI and authentication type from ScanResult 7612b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne */ 7622b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne private void updateMetricsFromScanResult(ScanResult scanResult) { 7632b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mConnectionEvent.signalStrength = scanResult.level; 7642b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = 7652b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne WifiMetricsProto.RouterFingerPrint.AUTH_OPEN; 76696cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mCurrentConnectionEvent.mConfigBssid = scanResult.BSSID; 7672b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne if (scanResult.capabilities != null) { 76859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (ScanResultUtil.isScanResultForWepNetwork(scanResult)) { 7692b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = 7702b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne WifiMetricsProto.RouterFingerPrint.AUTH_PERSONAL; 77159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } else if (ScanResultUtil.isScanResultForPskNetwork(scanResult)) { 7722b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = 7732b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne WifiMetricsProto.RouterFingerPrint.AUTH_PERSONAL; 77459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } else if (ScanResultUtil.isScanResultForEapNetwork(scanResult)) { 7752b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.authentication = 7762b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne WifiMetricsProto.RouterFingerPrint.AUTH_ENTERPRISE; 7772b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne } 7782b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne } 77996cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne mCurrentConnectionEvent.mRouterFingerPrint.mRouterFingerPrintProto.channelInfo = 78096cdfc0acafef88832515ecc52c01638c1493211Glen Kuhne scanResult.frequency; 7812b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne } 7822b152feb1c574f30557581770d4f8c06c770ba34Glen Kuhne 7831b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne void setIsLocationEnabled(boolean enabled) { 7841b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 7851b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiLogProto.isLocationEnabled = enabled; 7861b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7871b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7881b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 7891b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne void setIsScanningAlwaysEnabled(boolean enabled) { 7901b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 7911b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiLogProto.isScanningAlwaysEnabled = enabled; 7921b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7931b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 7941b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 7951b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 7961b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Increment Non Empty Scan Results count 7971b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 7981b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void incrementNonEmptyScanResultCount() { 799c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (DBG) Log.v(TAG, "incrementNonEmptyScanResultCount"); 8001b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 8011b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiLogProto.numNonEmptyScanResults++; 8021b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 8031b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 8041b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 8051b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 8061b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Increment Empty Scan Results count 8071b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 8081b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void incrementEmptyScanResultCount() { 809c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (DBG) Log.v(TAG, "incrementEmptyScanResultCount"); 8101b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 8111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiLogProto.numEmptyScanResults++; 8121b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 8131b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 8141b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 8151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 816c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Increment background scan count 817c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 818c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public void incrementBackgroundScanCount() { 819c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (DBG) Log.v(TAG, "incrementBackgroundScanCount"); 820c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne synchronized (mLock) { 821c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.numBackgroundScans++; 822c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 823c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 824c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 825c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 826c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Get Background scan count 827c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 828c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public int getBackgroundScanCount() { 829c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne synchronized (mLock) { 830c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return mWifiLogProto.numBackgroundScans; 831c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 832c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 833c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 834c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 83570ce5a4cbaf5aaccd4e542e7bb87196fb4464a6eGlen Kuhne * Increment oneshot scan count, and the associated WifiSystemScanStateCount entry 836c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 837c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public void incrementOneshotScanCount() { 838c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne synchronized (mLock) { 839c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.numOneshotScans++; 840c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 84170ce5a4cbaf5aaccd4e542e7bb87196fb4464a6eGlen Kuhne incrementWifiSystemScanStateCount(mWifiState, mScreenOn); 842c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 843c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 844c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 845424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang * Increment connectivity oneshot scan count. 846424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang */ 847424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang public void incrementConnectivityOneshotScanCount() { 848424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang synchronized (mLock) { 849424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang mWifiLogProto.numConnectivityOneshotScans++; 850424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang } 851424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang } 852424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang 853424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang /** 854c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Get oneshot scan count 855c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 856c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public int getOneshotScanCount() { 857c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne synchronized (mLock) { 858c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return mWifiLogProto.numOneshotScans; 859c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 860c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 861c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 862424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang /** 863424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang * Get connectivity oneshot scan count 864424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang */ 865424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang public int getConnectivityOneshotScanCount() { 866424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang synchronized (mLock) { 867424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang return mWifiLogProto.numConnectivityOneshotScans; 868424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang } 869424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang } 870424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang 87105a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius /** 87205a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius * Increment oneshot scan count for external apps. 87305a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius */ 87405a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius public void incrementExternalAppOneshotScanRequestsCount() { 87505a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius synchronized (mLock) { 87605a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius mWifiLogProto.numExternalAppOneshotScanRequests++; 87705a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius } 87805a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius } 87905a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius /** 88005a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius * Increment oneshot scan throttle count for external foreground apps. 88105a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius */ 88205a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius public void incrementExternalForegroundAppOneshotScanRequestsThrottledCount() { 88305a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius synchronized (mLock) { 88405a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius mWifiLogProto.numExternalForegroundAppOneshotScanRequestsThrottled++; 88505a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius } 88605a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius } 88705a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius 88805a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius /** 88905a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius * Increment oneshot scan throttle count for external background apps. 89005a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius */ 89105a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius public void incrementExternalBackgroundAppOneshotScanRequestsThrottledCount() { 89205a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius synchronized (mLock) { 89305a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius mWifiLogProto.numExternalBackgroundAppOneshotScanRequestsThrottled++; 89405a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius } 89505a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius } 89605a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius 897c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private String returnCodeToString(int scanReturnCode) { 898c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne switch(scanReturnCode){ 899c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.SCAN_UNKNOWN: 900c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "SCAN_UNKNOWN"; 901c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.SCAN_SUCCESS: 902c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "SCAN_SUCCESS"; 903c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.SCAN_FAILURE_INTERRUPTED: 904c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "SCAN_FAILURE_INTERRUPTED"; 905c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.SCAN_FAILURE_INVALID_CONFIGURATION: 906c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "SCAN_FAILURE_INVALID_CONFIGURATION"; 907c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.FAILURE_WIFI_DISABLED: 908c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "FAILURE_WIFI_DISABLED"; 909c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne default: 910c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "<UNKNOWN>"; 911c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 912c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 913c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 914c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 9151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Increment count of scan return code occurrence 9161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 9171b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param scanReturnCode Return code from scan attempt WifiMetricsProto.WifiLog.SCAN_X 9181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 919c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public void incrementScanReturnEntry(int scanReturnCode, int countToAdd) { 9201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 921c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (DBG) Log.v(TAG, "incrementScanReturnEntry " + returnCodeToString(scanReturnCode)); 922c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne int entry = mScanReturnEntries.get(scanReturnCode); 923c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne entry += countToAdd; 9241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mScanReturnEntries.put(scanReturnCode, entry); 9251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 9261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 927c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 928c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Get the count of this scanReturnCode 929c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * @param scanReturnCode that we are getting the count for 930c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 931c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public int getScanReturnEntry(int scanReturnCode) { 932c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne synchronized (mLock) { 933c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return mScanReturnEntries.get(scanReturnCode); 934c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 935c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 936c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 937c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne private String wifiSystemStateToString(int state) { 938c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne switch(state){ 939c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_UNKNOWN: 940c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "WIFI_UNKNOWN"; 941c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_DISABLED: 942c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "WIFI_DISABLED"; 943c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_DISCONNECTED: 944c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "WIFI_DISCONNECTED"; 945c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne case WifiMetricsProto.WifiLog.WIFI_ASSOCIATED: 946c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "WIFI_ASSOCIATED"; 947c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne default: 948c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return "default"; 949c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 950c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 9511b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 9521b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 9531b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Increments the count of scans initiated by each wifi state, accounts for screenOn/Off 9541b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 9551b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param state State of the system when scan was initiated, see WifiMetricsProto.WifiLog.WIFI_X 9561b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param screenOn Is the screen on 9571b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 9581b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void incrementWifiSystemScanStateCount(int state, boolean screenOn) { 9591b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 960c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (DBG) { 961c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne Log.v(TAG, "incrementWifiSystemScanStateCount " + wifiSystemStateToString(state) 962c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + " " + screenOn); 9631b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 964c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne int index = (state * 2) + (screenOn ? SCREEN_ON : SCREEN_OFF); 965c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne int entry = mWifiSystemStateEntries.get(index); 966c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne entry++; 967c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiSystemStateEntries.put(index, entry); 968c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 969c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 970c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 971c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne /** 972c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * Get the count of this system State Entry 973c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne */ 974c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne public int getSystemStateCount(int state, boolean screenOn) { 975c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne synchronized (mLock) { 976c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne int index = state * 2 + (screenOn ? SCREEN_ON : SCREEN_OFF); 977c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne return mWifiSystemStateEntries.get(index); 9781b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 9791b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 9801b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 981ce003b812aead64dcb36647180991150021b24c1Glen Kuhne /** 9825f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * Increment number of times the Watchdog of Last Resort triggered, resetting the wifi stack 9835f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 9845f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void incrementNumLastResortWatchdogTriggers() { 9855f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 9865f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogTriggers++; 9875f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 9885f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 9895f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 9905f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * @param count number of networks over bad association threshold when watchdog triggered 9915f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 9925f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void addCountToNumLastResortWatchdogBadAssociationNetworksTotal(int count) { 9935f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 9945f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogBadAssociationNetworksTotal += count; 9955f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 9965f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 9975f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 9985f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * @param count number of networks over bad authentication threshold when watchdog triggered 9995f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10005f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void addCountToNumLastResortWatchdogBadAuthenticationNetworksTotal(int count) { 10015f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10025f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogBadAuthenticationNetworksTotal += count; 10035f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10045f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10055f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10065f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * @param count number of networks over bad dhcp threshold when watchdog triggered 10075f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10085f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void addCountToNumLastResortWatchdogBadDhcpNetworksTotal(int count) { 10095f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10105f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogBadDhcpNetworksTotal += count; 10115f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10125f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10135f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10145f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * @param count number of networks over bad other threshold when watchdog triggered 10155f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10165f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void addCountToNumLastResortWatchdogBadOtherNetworksTotal(int count) { 10175f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10185f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogBadOtherNetworksTotal += count; 10195f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10205f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10215f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10225f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * @param count number of networks seen when watchdog triggered 10235f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10245f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void addCountToNumLastResortWatchdogAvailableNetworksTotal(int count) { 10255f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10265f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogAvailableNetworksTotal += count; 10275f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10285f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10295f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10305f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * Increment count of triggers with atleast one bad association network 10315f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10325f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void incrementNumLastResortWatchdogTriggersWithBadAssociation() { 10335f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10345f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogTriggersWithBadAssociation++; 10355f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10365f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10375f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10385f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * Increment count of triggers with atleast one bad authentication network 10395f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10405f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void incrementNumLastResortWatchdogTriggersWithBadAuthentication() { 10415f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10425f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogTriggersWithBadAuthentication++; 10435f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10445f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10455f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10465f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * Increment count of triggers with atleast one bad dhcp network 10475f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10485f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void incrementNumLastResortWatchdogTriggersWithBadDhcp() { 10495f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10505f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogTriggersWithBadDhcp++; 10515f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10525f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10535f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 10545f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne * Increment count of triggers with atleast one bad other network 10555f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne */ 10565f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne public void incrementNumLastResortWatchdogTriggersWithBadOther() { 10575f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne synchronized (mLock) { 10585f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne mWifiLogProto.numLastResortWatchdogTriggersWithBadOther++; 10595f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10605f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne } 10615f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne 10625f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne /** 1063ce003b812aead64dcb36647180991150021b24c1Glen Kuhne * Increment number of times connectivity watchdog confirmed pno is working 1064ce003b812aead64dcb36647180991150021b24c1Glen Kuhne */ 1065ce003b812aead64dcb36647180991150021b24c1Glen Kuhne public void incrementNumConnectivityWatchdogPnoGood() { 1066ce003b812aead64dcb36647180991150021b24c1Glen Kuhne synchronized (mLock) { 1067ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiLogProto.numConnectivityWatchdogPnoGood++; 1068ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1069ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1070ce003b812aead64dcb36647180991150021b24c1Glen Kuhne /** 1071ce003b812aead64dcb36647180991150021b24c1Glen Kuhne * Increment number of times connectivity watchdog found pno not working 1072ce003b812aead64dcb36647180991150021b24c1Glen Kuhne */ 1073ce003b812aead64dcb36647180991150021b24c1Glen Kuhne public void incrementNumConnectivityWatchdogPnoBad() { 1074ce003b812aead64dcb36647180991150021b24c1Glen Kuhne synchronized (mLock) { 1075ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiLogProto.numConnectivityWatchdogPnoBad++; 1076ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1077ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1078ce003b812aead64dcb36647180991150021b24c1Glen Kuhne /** 1079ce003b812aead64dcb36647180991150021b24c1Glen Kuhne * Increment number of times connectivity watchdog confirmed background scan is working 1080ce003b812aead64dcb36647180991150021b24c1Glen Kuhne */ 1081ce003b812aead64dcb36647180991150021b24c1Glen Kuhne public void incrementNumConnectivityWatchdogBackgroundGood() { 1082ce003b812aead64dcb36647180991150021b24c1Glen Kuhne synchronized (mLock) { 1083ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiLogProto.numConnectivityWatchdogBackgroundGood++; 1084ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1085ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1086ce003b812aead64dcb36647180991150021b24c1Glen Kuhne /** 1087ce003b812aead64dcb36647180991150021b24c1Glen Kuhne * Increment number of times connectivity watchdog found background scan not working 1088ce003b812aead64dcb36647180991150021b24c1Glen Kuhne */ 1089ce003b812aead64dcb36647180991150021b24c1Glen Kuhne public void incrementNumConnectivityWatchdogBackgroundBad() { 1090ce003b812aead64dcb36647180991150021b24c1Glen Kuhne synchronized (mLock) { 1091ce003b812aead64dcb36647180991150021b24c1Glen Kuhne mWifiLogProto.numConnectivityWatchdogBackgroundBad++; 1092ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1093ce003b812aead64dcb36647180991150021b24c1Glen Kuhne } 1094ce003b812aead64dcb36647180991150021b24c1Glen Kuhne 10957a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne /** 109646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Increment various poll related metrics, and cache performance data for StaEvent logging 109746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 109846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public void handlePollResult(WifiInfo wifiInfo) { 109946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mLastPollRssi = wifiInfo.getRssi(); 110046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mLastPollLinkSpeed = wifiInfo.getLinkSpeed(); 110146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mLastPollFreq = wifiInfo.getFrequency(); 110204012eb3e692202b25095f7afc1eda40b63e3e0fxshu incrementRssiPollRssiCount(mLastPollFreq, mLastPollRssi); 110346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 110446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 110546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 110604012eb3e692202b25095f7afc1eda40b63e3e0fxshu * Increment occurence count of RSSI level from RSSI poll for the given frequency. 110704012eb3e692202b25095f7afc1eda40b63e3e0fxshu * @param frequency (MHz) 110804012eb3e692202b25095f7afc1eda40b63e3e0fxshu * @param rssi 11097a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne */ 111004012eb3e692202b25095f7afc1eda40b63e3e0fxshu @VisibleForTesting 111104012eb3e692202b25095f7afc1eda40b63e3e0fxshu public void incrementRssiPollRssiCount(int frequency, int rssi) { 11127a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne if (!(rssi >= MIN_RSSI_POLL && rssi <= MAX_RSSI_POLL)) { 11137a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne return; 11147a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne } 11157a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne synchronized (mLock) { 111604012eb3e692202b25095f7afc1eda40b63e3e0fxshu if (!mRssiPollCountsMap.containsKey(frequency)) { 111704012eb3e692202b25095f7afc1eda40b63e3e0fxshu mRssiPollCountsMap.put(frequency, new SparseIntArray()); 111804012eb3e692202b25095f7afc1eda40b63e3e0fxshu } 111904012eb3e692202b25095f7afc1eda40b63e3e0fxshu SparseIntArray sparseIntArray = mRssiPollCountsMap.get(frequency); 112004012eb3e692202b25095f7afc1eda40b63e3e0fxshu int count = sparseIntArray.get(rssi); 112104012eb3e692202b25095f7afc1eda40b63e3e0fxshu sparseIntArray.put(rssi, count + 1); 11225cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne maybeIncrementRssiDeltaCount(rssi - mScanResultRssi); 11235cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 11245cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 11255cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne 11265cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne /** 11275cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne * Increment occurence count of difference between scan result RSSI and the first RSSI poll. 11285cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne * Ignores rssi values outside the bounds of [MIN_RSSI_DELTA, MAX_RSSI_DELTA] 11295cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne * mLock must be held when calling this method. 11305cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne */ 11315cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne private void maybeIncrementRssiDeltaCount(int rssi) { 11325cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne // Check if this RSSI poll is close enough to a scan result RSSI to log a delta value 11335cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne if (mScanResultRssiTimestampMillis >= 0) { 11345cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne long timeDelta = mClock.getElapsedSinceBootMillis() - mScanResultRssiTimestampMillis; 11355cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne if (timeDelta <= TIMEOUT_RSSI_DELTA_MILLIS) { 11365cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne if (rssi >= MIN_RSSI_DELTA && rssi <= MAX_RSSI_DELTA) { 11375cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne int count = mRssiDeltaCounts.get(rssi); 11385cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mRssiDeltaCounts.put(rssi, count + 1); 11395cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 11405cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 11415cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mScanResultRssiTimestampMillis = -1; 11427a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne } 11437a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne } 11447a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne 1145da22e3d28b62005dce5fddd75207bd3d7a1745e1Glen Kuhne /** 11461c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne * Increment count of Watchdog successes. 11471c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne */ 11481c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne public void incrementNumLastResortWatchdogSuccesses() { 11491c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne synchronized (mLock) { 11501c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne mWifiLogProto.numLastResortWatchdogSuccesses++; 11511c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne } 11521c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne } 11531c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne 11541c50de232acb3d6148c454941a6b9a79e0663b81Glen Kuhne /** 11551f2ef2776476457b3eb2df70e39d53770c6b2b77xshu * Increment the count of network connection failures that happened after watchdog has been 11561f2ef2776476457b3eb2df70e39d53770c6b2b77xshu * triggered. 11571f2ef2776476457b3eb2df70e39d53770c6b2b77xshu */ 11581f2ef2776476457b3eb2df70e39d53770c6b2b77xshu public void incrementWatchdogTotalConnectionFailureCountAfterTrigger() { 11591f2ef2776476457b3eb2df70e39d53770c6b2b77xshu synchronized (mLock) { 11601f2ef2776476457b3eb2df70e39d53770c6b2b77xshu mWifiLogProto.watchdogTotalConnectionFailureCountAfterTrigger++; 11611f2ef2776476457b3eb2df70e39d53770c6b2b77xshu } 11621f2ef2776476457b3eb2df70e39d53770c6b2b77xshu } 11631f2ef2776476457b3eb2df70e39d53770c6b2b77xshu 11641f2ef2776476457b3eb2df70e39d53770c6b2b77xshu /** 1165338d87ce46cf0766005f747bb82ac590ceaff54dxshu * Sets the time taken for wifi to connect after a watchdog triggers a restart. 1166338d87ce46cf0766005f747bb82ac590ceaff54dxshu * @param milliseconds 1167338d87ce46cf0766005f747bb82ac590ceaff54dxshu */ 1168338d87ce46cf0766005f747bb82ac590ceaff54dxshu public void setWatchdogSuccessTimeDurationMs(long ms) { 1169338d87ce46cf0766005f747bb82ac590ceaff54dxshu synchronized (mLock) { 1170338d87ce46cf0766005f747bb82ac590ceaff54dxshu mWifiLogProto.watchdogTriggerToConnectionSuccessDurationMs = ms; 1171338d87ce46cf0766005f747bb82ac590ceaff54dxshu } 1172338d87ce46cf0766005f747bb82ac590ceaff54dxshu } 1173338d87ce46cf0766005f747bb82ac590ceaff54dxshu 1174338d87ce46cf0766005f747bb82ac590ceaff54dxshu /** 1175f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal * Increments the count of alerts by alert reason. 1176f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal * 1177f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal * @param reason The cause of the alert. The reason values are driver-specific. 1178f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal */ 1179f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal public void incrementAlertReasonCount(int reason) { 1180f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal if (reason > WifiLoggerHal.WIFI_ALERT_REASON_MAX 1181f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal || reason < WifiLoggerHal.WIFI_ALERT_REASON_MIN) { 1182f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal reason = WifiLoggerHal.WIFI_ALERT_REASON_RESERVED; 1183f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 1184f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal synchronized (mLock) { 1185f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal int alertCount = mWifiAlertReasonCounts.get(reason); 1186f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal mWifiAlertReasonCounts.put(reason, alertCount + 1); 1187f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 1188f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 1189f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal 1190f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal /** 119159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne * Counts all the different types of networks seen in a set of scan results 119259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne */ 119359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne public void countScanResults(List<ScanDetail> scanDetails) { 119459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (scanDetails == null) { 119559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne return; 119659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 119759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int totalResults = 0; 119859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int openNetworks = 0; 119959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int personalNetworks = 0; 120059f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int enterpriseNetworks = 0; 120159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int hiddenNetworks = 0; 120259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int hotspot2r1Networks = 0; 120359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne int hotspot2r2Networks = 0; 120459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne for (ScanDetail scanDetail : scanDetails) { 120559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne NetworkDetail networkDetail = scanDetail.getNetworkDetail(); 120659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne ScanResult scanResult = scanDetail.getScanResult(); 120759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne totalResults++; 120859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (networkDetail != null) { 120959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (networkDetail.isHiddenBeaconFrame()) { 121059f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne hiddenNetworks++; 121159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 121259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (networkDetail.getHSRelease() != null) { 121359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (networkDetail.getHSRelease() == NetworkDetail.HSRelease.R1) { 121459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne hotspot2r1Networks++; 121559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } else if (networkDetail.getHSRelease() == NetworkDetail.HSRelease.R2) { 121659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne hotspot2r2Networks++; 121759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 121859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 121959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 122059f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (scanResult != null && scanResult.capabilities != null) { 122159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne if (ScanResultUtil.isScanResultForEapNetwork(scanResult)) { 122259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne enterpriseNetworks++; 122359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } else if (ScanResultUtil.isScanResultForPskNetwork(scanResult) 122459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne || ScanResultUtil.isScanResultForWepNetwork(scanResult)) { 122559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne personalNetworks++; 122659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } else { 122759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne openNetworks++; 122859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 122959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 123059f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 123159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne synchronized (mLock) { 123259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numTotalScanResults += totalResults; 123359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numOpenNetworkScanResults += openNetworks; 123459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numPersonalNetworkScanResults += personalNetworks; 123559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numEnterpriseNetworkScanResults += enterpriseNetworks; 123659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numHiddenNetworkScanResults += hiddenNetworks; 123759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numHotspot2R1NetworkScanResults += hotspot2r1Networks; 123859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numHotspot2R2NetworkScanResults += hotspot2r2Networks; 123959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne mWifiLogProto.numScans++; 124059f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 124159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne } 124259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne 1243e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass private boolean mWifiWins = false; // Based on scores, use wifi instead of mobile data? 1244e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass 124559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne /** 12464569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao * Increments occurence of a particular wifi score calculated 12474569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao * in WifiScoreReport by current connected network. Scores are bounded 1248e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass * within [MIN_WIFI_SCORE, MAX_WIFI_SCORE] to limit size of SparseArray. 1249e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass * 1250e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass * Also records events when the current score breaches significant thresholds. 12514569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao */ 12524569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao public void incrementWifiScoreCount(int score) { 12534569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao if (score < MIN_WIFI_SCORE || score > MAX_WIFI_SCORE) { 12544569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao return; 12554569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao } 12564569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao synchronized (mLock) { 12574569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao int count = mWifiScoreCounts.get(score); 12584569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao mWifiScoreCounts.put(score, count + 1); 1259e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass 1260e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass boolean wifiWins = mWifiWins; 1261e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass if (mWifiWins && score < LOW_WIFI_SCORE) { 1262e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass wifiWins = false; 1263e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass } else if (!mWifiWins && score > LOW_WIFI_SCORE) { 1264e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass wifiWins = true; 1265e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass } 1266e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass mLastScore = score; 1267e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass if (wifiWins != mWifiWins) { 1268e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass mWifiWins = wifiWins; 1269e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass StaEvent event = new StaEvent(); 1270e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass event.type = StaEvent.TYPE_SCORE_BREACH; 1271e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass addStaEvent(event); 1272e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass } 12734569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao } 12744569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao } 127559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne 127644ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein /** 127744ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein * Increments occurence of the results from attempting to start SoftAp. 127844ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein * Maps the |result| and WifiManager |failureCode| constant to proto defined SoftApStartResult 127944ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein * codes. 128044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein */ 128144ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein public void incrementSoftApStartResult(boolean result, int failureCode) { 128244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein synchronized (mLock) { 128344ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein if (result) { 128444ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein int count = mSoftApManagerReturnCodeCounts.get( 128544ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_STARTED_SUCCESSFULLY); 128644ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mSoftApManagerReturnCodeCounts.put( 128744ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_STARTED_SUCCESSFULLY, 128844ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein count + 1); 128944ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein return; 129044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein } 129144ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein 129244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein // now increment failure modes - if not explicitly handled, dump into the general 129344ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein // error bucket. 129444ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein if (failureCode == WifiManager.SAP_START_FAILURE_NO_CHANNEL) { 129544ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein int count = mSoftApManagerReturnCodeCounts.get( 129644ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_FAILED_NO_CHANNEL); 129744ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mSoftApManagerReturnCodeCounts.put( 129844ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_FAILED_NO_CHANNEL, 129944ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein count + 1); 130044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein } else { 130144ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein // failure mode not tracked at this time... count as a general error for now. 130244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein int count = mSoftApManagerReturnCodeCounts.get( 130344ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_FAILED_GENERAL_ERROR); 130444ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mSoftApManagerReturnCodeCounts.put( 130544ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_FAILED_GENERAL_ERROR, 130644ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein count + 1); 130744ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein } 130844ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein } 130944ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein } 131044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein 1311bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius /** 131205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh * Adds a record indicating the current up state of soft AP 131305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh */ 131405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh public void addSoftApUpChangedEvent(boolean isUp, int mode) { 131505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh SoftApConnectedClientsEvent event = new SoftApConnectedClientsEvent(); 131605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh event.eventType = isUp ? SoftApConnectedClientsEvent.SOFT_AP_UP : 131705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh SoftApConnectedClientsEvent.SOFT_AP_DOWN; 131805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh event.numConnectedClients = 0; 131905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh addSoftApConnectedClientsEvent(event, mode); 132005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 132105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 132205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh /** 132305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh * Adds a record for current number of associated stations to soft AP 132405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh */ 132505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh public void addSoftApNumAssociatedStationsChangedEvent(int numStations, int mode) { 132605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh SoftApConnectedClientsEvent event = new SoftApConnectedClientsEvent(); 132705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh event.eventType = SoftApConnectedClientsEvent.NUM_CLIENTS_CHANGED; 132805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh event.numConnectedClients = numStations; 132905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh addSoftApConnectedClientsEvent(event, mode); 133005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 133105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 133205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh /** 133305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh * Adds a record to the corresponding event list based on mode param 133405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh */ 133505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh private void addSoftApConnectedClientsEvent(SoftApConnectedClientsEvent event, int mode) { 133605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh synchronized (mLock) { 133705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh List<SoftApConnectedClientsEvent> softApEventList; 133805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh switch (mode) { 133905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh case WifiManager.IFACE_IP_MODE_TETHERED: 134005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh softApEventList = mSoftApEventListTethered; 134105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh break; 134205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh case WifiManager.IFACE_IP_MODE_LOCAL_ONLY: 134305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh softApEventList = mSoftApEventListLocalOnly; 134405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh break; 134505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh default: 134605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh return; 134705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 134805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 134905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh if (softApEventList.size() > MAX_NUM_SOFT_AP_EVENTS) { 135005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh return; 135105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 135205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 13534de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh event.timeStampMillis = mClock.getElapsedSinceBootMillis(); 135405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh softApEventList.add(event); 135505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 135605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 135705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 135805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh /** 13594de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh * Updates current soft AP events with channel info 13604de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh */ 13614de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh public void addSoftApChannelSwitchedEvent(int frequency, int bandwidth, int mode) { 13624de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh synchronized (mLock) { 13634de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh List<SoftApConnectedClientsEvent> softApEventList; 13644de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh switch (mode) { 13654de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh case WifiManager.IFACE_IP_MODE_TETHERED: 13664de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh softApEventList = mSoftApEventListTethered; 13674de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh break; 13684de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh case WifiManager.IFACE_IP_MODE_LOCAL_ONLY: 13694de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh softApEventList = mSoftApEventListLocalOnly; 13704de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh break; 13714de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh default: 13724de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh return; 13734de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh } 13744de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh 13754de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh for (int index = softApEventList.size() - 1; index >= 0; index--) { 13764de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh SoftApConnectedClientsEvent event = softApEventList.get(index); 13774de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh 13784de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh if (event != null && event.eventType == SoftApConnectedClientsEvent.SOFT_AP_UP) { 13794de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh event.channelFrequency = frequency; 13804de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh event.channelBandwidth = bandwidth; 13814de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh break; 13824de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh } 13834de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh } 13844de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh } 13854de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh } 13864de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh 13874de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh /** 1388bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius * Increment number of times the HAL crashed. 1389bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius */ 1390bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius public void incrementNumHalCrashes() { 1391bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius synchronized (mLock) { 1392bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius mWifiLogProto.numHalCrashes++; 1393bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1394bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1395bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius 1396bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius /** 1397bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius * Increment number of times the Wificond crashed. 1398bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius */ 1399bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius public void incrementNumWificondCrashes() { 1400bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius synchronized (mLock) { 1401bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius mWifiLogProto.numWificondCrashes++; 1402bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1403bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1404bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius 1405bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius /** 1406d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius * Increment number of times the supplicant crashed. 1407d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius */ 1408d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius public void incrementNumSupplicantCrashes() { 1409d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius synchronized (mLock) { 141065a9143d6c93624837da3867f1cadf2daab62236Roshan Pius mWifiLogProto.numSupplicantCrashes++; 1411d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius } 1412d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius } 1413d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius 1414d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius /** 141527c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius * Increment number of times the hostapd crashed. 141627c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius */ 141727c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius public void incrementNumHostapdCrashes() { 141827c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius synchronized (mLock) { 141965a9143d6c93624837da3867f1cadf2daab62236Roshan Pius mWifiLogProto.numHostapdCrashes++; 142027c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius } 142127c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius } 142227c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius 142327c6f0c111f97e95e3388e9702218cf9e481abb1Roshan Pius /** 1424bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius * Increment number of times the wifi on failed due to an error in HAL. 1425bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius */ 14265ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius public void incrementNumSetupClientInterfaceFailureDueToHal() { 1427bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius synchronized (mLock) { 14285ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius mWifiLogProto.numSetupClientInterfaceFailureDueToHal++; 1429bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1430bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1431bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius 1432bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius /** 1433bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius * Increment number of times the wifi on failed due to an error in wificond. 1434bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius */ 14355ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius public void incrementNumSetupClientInterfaceFailureDueToWificond() { 1436bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius synchronized (mLock) { 14375ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius mWifiLogProto.numSetupClientInterfaceFailureDueToWificond++; 1438bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1439bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius } 1440bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius 144126b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu /** 144265a9143d6c93624837da3867f1cadf2daab62236Roshan Pius * Increment number of times the wifi on failed due to an error in supplicant. 1443d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius */ 14445ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius public void incrementNumSetupClientInterfaceFailureDueToSupplicant() { 1445d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius synchronized (mLock) { 14465ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius mWifiLogProto.numSetupClientInterfaceFailureDueToSupplicant++; 14475ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius } 14485ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius } 14495ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius 14505ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius /** 14515ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius * Increment number of times the SoftAp on failed due to an error in HAL. 14525ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius */ 14535ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius public void incrementNumSetupSoftApInterfaceFailureDueToHal() { 14545ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius synchronized (mLock) { 14555ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius mWifiLogProto.numSetupSoftApInterfaceFailureDueToHal++; 14565ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius } 14575ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius } 14585ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius 14595ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius /** 14605ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius * Increment number of times the SoftAp on failed due to an error in wificond. 14615ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius */ 14625ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius public void incrementNumSetupSoftApInterfaceFailureDueToWificond() { 14635ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius synchronized (mLock) { 14645ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius mWifiLogProto.numSetupSoftApInterfaceFailureDueToWificond++; 14655ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius } 14665ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius } 14675ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius 14685ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius /** 14695ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius * Increment number of times the SoftAp on failed due to an error in hostapd. 14705ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius */ 14715ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius public void incrementNumSetupSoftApInterfaceFailureDueToHostapd() { 14725ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius synchronized (mLock) { 14735ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius mWifiLogProto.numSetupSoftApInterfaceFailureDueToHostapd++; 1474d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius } 1475d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius } 1476d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius 1477d2f09d1534b94adbfaf8f3e4b36abc5558fee37eRoshan Pius /** 1478a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius * Increment number of times we got client interface down. 1479a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius */ 1480a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius public void incrementNumClientInterfaceDown() { 1481a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius synchronized (mLock) { 1482a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius mWifiLogProto.numClientInterfaceDown++; 1483a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius } 1484a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius } 1485a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius 1486a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius /** 1487a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius * Increment number of times we got client interface down. 1488a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius */ 1489a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius public void incrementNumSoftApInterfaceDown() { 1490a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius synchronized (mLock) { 1491a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius mWifiLogProto.numSoftApInterfaceDown++; 1492a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius } 1493a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius } 1494a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius 1495a79e9c8ea6461b65cef7a8542af088b8f2945ea2Roshan Pius /** 149626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu * Increment number of times Passpoint provider being installed. 149726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu */ 149826b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu public void incrementNumPasspointProviderInstallation() { 149926b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu synchronized (mLock) { 150026b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu mWifiLogProto.numPasspointProviderInstallation++; 150126b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 150226b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 150326b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu 150426b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu /** 150526b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu * Increment number of times Passpoint provider is installed successfully. 150626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu */ 150726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu public void incrementNumPasspointProviderInstallSuccess() { 150826b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu synchronized (mLock) { 150926b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu mWifiLogProto.numPasspointProviderInstallSuccess++; 151026b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 151126b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 151226b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu 151326b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu /** 151426b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu * Increment number of times Passpoint provider being uninstalled. 151526b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu */ 151626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu public void incrementNumPasspointProviderUninstallation() { 151726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu synchronized (mLock) { 151826b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu mWifiLogProto.numPasspointProviderUninstallation++; 151926b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 152026b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 152126b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu 152226b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu /** 152326b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu * Increment number of times Passpoint provider is uninstalled successfully. 152426b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu */ 152526b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu public void incrementNumPasspointProviderUninstallSuccess() { 152626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu synchronized (mLock) { 152726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu mWifiLogProto.numPasspointProviderUninstallSuccess++; 152826b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 152926b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 1530bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius 153108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne /** 153280512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius * Increment number of times we detected a radio mode change to MCC. 153380512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius */ 153480512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius public void incrementNumRadioModeChangeToMcc() { 153580512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius synchronized (mLock) { 15365d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius mWifiLogProto.numRadioModeChangeToMcc++; 153780512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 153880512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 153980512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius 154080512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius /** 154180512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius * Increment number of times we detected a radio mode change to SCC. 154280512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius */ 154380512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius public void incrementNumRadioModeChangeToScc() { 154480512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius synchronized (mLock) { 15455d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius mWifiLogProto.numRadioModeChangeToScc++; 154680512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 154780512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 154880512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius 154980512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius /** 155080512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius * Increment number of times we detected a radio mode change to SBS. 155180512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius */ 155280512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius public void incrementNumRadioModeChangeToSbs() { 155380512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius synchronized (mLock) { 15545d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius mWifiLogProto.numRadioModeChangeToSbs++; 155580512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 155680512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 155780512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius 155880512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius /** 155980512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius * Increment number of times we detected a radio mode change to DBS. 156080512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius */ 156180512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius public void incrementNumRadioModeChangeToDbs() { 156280512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius synchronized (mLock) { 15635d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius mWifiLogProto.numRadioModeChangeToDbs++; 156480512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 156580512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius } 156680512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius 156780512c6070e4c2c84a2d7c58ad56d4f1ca3258edRoshan Pius /** 1568b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius * Increment number of times we detected a channel did not satisfy user band preference. 1569b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius */ 1570b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius public void incrementNumSoftApUserBandPreferenceUnsatisfied() { 1571b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius synchronized (mLock) { 1572b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius mWifiLogProto.numSoftApUserBandPreferenceUnsatisfied++; 1573b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius } 1574b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius } 1575b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius 1576b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius /** 157708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne * Increment N-Way network selection decision histograms: 157808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne * Counts the size of various sets of scanDetails within a scan, and increment the occurrence 157908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne * of that size for the associated histogram. There are ten histograms generated for each 158008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne * combination of: {SSID, BSSID} *{Total, Saved, Open, Saved_or_Open, Passpoint} 158108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne * Only performs this count if isFullBand is true, otherwise, increments the partial scan count 158208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne */ 158308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne public void incrementAvailableNetworksHistograms(List<ScanDetail> scanDetails, 158408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne boolean isFullBand) { 158508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne synchronized (mLock) { 158608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (mWifiConfigManager == null || mWifiNetworkSelector == null 158708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne || mPasspointManager == null) { 158808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne return; 158908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 159008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (!isFullBand) { 159108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.partialAllSingleScanListenerResults++; 159208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne return; 159308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 159408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne Set<ScanResultMatchInfo> ssids = new HashSet<ScanResultMatchInfo>(); 159508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne int bssids = 0; 159608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne Set<ScanResultMatchInfo> openSsids = new HashSet<ScanResultMatchInfo>(); 159708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne int openBssids = 0; 159808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne Set<ScanResultMatchInfo> savedSsids = new HashSet<ScanResultMatchInfo>(); 159908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne int savedBssids = 0; 160008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne // openOrSavedSsids calculated from union of savedSsids & openSsids 160108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne int openOrSavedBssids = 0; 160208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne Set<PasspointProvider> savedPasspointProviderProfiles = 160308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne new HashSet<PasspointProvider>(); 160408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne int savedPasspointProviderBssids = 0; 16059831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen int passpointR1Aps = 0; 16069831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen int passpointR2Aps = 0; 16079831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen Map<ANQPNetworkKey, Integer> passpointR1UniqueEss = new HashMap<>(); 16089831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen Map<ANQPNetworkKey, Integer> passpointR2UniqueEss = new HashMap<>(); 1609973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen int supporting80211mcAps = 0; 161008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne for (ScanDetail scanDetail : scanDetails) { 161108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne NetworkDetail networkDetail = scanDetail.getNetworkDetail(); 161208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne ScanResult scanResult = scanDetail.getScanResult(); 1613533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen 1614533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen // statistics to be collected for ALL APs (irrespective of signal power) 1615533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen if (networkDetail.is80211McResponderSupport()) { 1616533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen supporting80211mcAps++; 161708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 1618533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen 161908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne ScanResultMatchInfo matchInfo = ScanResultMatchInfo.fromScanResult(scanResult); 162008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne Pair<PasspointProvider, PasspointMatch> providerMatch = null; 162108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne PasspointProvider passpointProvider = null; 162208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (networkDetail.isInterworking()) { 162308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne providerMatch = 162408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mPasspointManager.matchProvider(scanResult); 162508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne passpointProvider = providerMatch != null ? providerMatch.first : null; 16269831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen 16279831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen if (networkDetail.getHSRelease() == NetworkDetail.HSRelease.R1) { 16289831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen passpointR1Aps++; 16299831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } else if (networkDetail.getHSRelease() == NetworkDetail.HSRelease.R2) { 16309831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen passpointR2Aps++; 16319831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 16329831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen 16339831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen long bssid = 0; 16349831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen boolean validBssid = false; 16359831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen try { 16369831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen bssid = Utils.parseMac(scanResult.BSSID); 16379831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen validBssid = true; 16389831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } catch (IllegalArgumentException e) { 16399831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen Log.e(TAG, 16409831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen "Invalid BSSID provided in the scan result: " + scanResult.BSSID); 16419831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 16429831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen if (validBssid) { 16439831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen ANQPNetworkKey uniqueEss = ANQPNetworkKey.buildKey(scanResult.SSID, bssid, 16449831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen scanResult.hessid, networkDetail.getAnqpDomainID()); 16459831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen if (networkDetail.getHSRelease() == NetworkDetail.HSRelease.R1) { 16469831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen Integer countObj = passpointR1UniqueEss.get(uniqueEss); 16479831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen int count = countObj == null ? 0 : countObj; 16489831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen passpointR1UniqueEss.put(uniqueEss, count + 1); 16499831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } else if (networkDetail.getHSRelease() == NetworkDetail.HSRelease.R2) { 16509831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen Integer countObj = passpointR2UniqueEss.get(uniqueEss); 16519831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen int count = countObj == null ? 0 : countObj; 16529831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen passpointR2UniqueEss.put(uniqueEss, count + 1); 16539831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 16549831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 16559831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen 165608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 1657533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen 1658533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen if (mWifiNetworkSelector.isSignalTooWeak(scanResult)) { 1659533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen continue; 1660533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen } 1661533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen 1662533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen // statistics to be collected ONLY for those APs with sufficient signal power 1663533e7436021769b3582a230b0622fd44bfcc7cf2Etan Cohen 166408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne ssids.add(matchInfo); 166508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne bssids++; 166608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne boolean isOpen = matchInfo.networkType == ScanResultMatchInfo.NETWORK_TYPE_OPEN; 166708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne WifiConfiguration config = 166808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiConfigManager.getConfiguredNetworkForScanDetail(scanDetail); 166908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne boolean isSaved = (config != null) && !config.isEphemeral() 167008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne && !config.isPasspoint(); 167108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne boolean isSavedPasspoint = passpointProvider != null; 167208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (isOpen) { 167308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne openSsids.add(matchInfo); 167408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne openBssids++; 167508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 167608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (isSaved) { 167708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne savedSsids.add(matchInfo); 167808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne savedBssids++; 167908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 168008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (isOpen || isSaved) { 168108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne openOrSavedBssids++; 168208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne // Calculate openOrSavedSsids union later 168308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 168408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne if (isSavedPasspoint) { 168508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne savedPasspointProviderProfiles.add(passpointProvider); 168608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne savedPasspointProviderBssids++; 168708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 168808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 168908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.fullBandAllSingleScanListenerResults++; 169008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementTotalScanSsids(mTotalSsidsInScanHistogram, ssids.size()); 169108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementTotalScanResults(mTotalBssidsInScanHistogram, bssids); 169208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementSsid(mAvailableOpenSsidsInScanHistogram, openSsids.size()); 169308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementBssid(mAvailableOpenBssidsInScanHistogram, openBssids); 169408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementSsid(mAvailableSavedSsidsInScanHistogram, savedSsids.size()); 169508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementBssid(mAvailableSavedBssidsInScanHistogram, savedBssids); 169608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne openSsids.addAll(savedSsids); // openSsids = Union(openSsids, savedSsids) 169708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementSsid(mAvailableOpenOrSavedSsidsInScanHistogram, openSsids.size()); 169808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementBssid(mAvailableOpenOrSavedBssidsInScanHistogram, openOrSavedBssids); 169908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementSsid(mAvailableSavedPasspointProviderProfilesInScanHistogram, 170008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne savedPasspointProviderProfiles.size()); 170108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne incrementBssid(mAvailableSavedPasspointProviderBssidsInScanHistogram, 170208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne savedPasspointProviderBssids); 17039831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen incrementTotalPasspointAps(mObservedHotspotR1ApInScanHistogram, passpointR1Aps); 17049831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen incrementTotalPasspointAps(mObservedHotspotR2ApInScanHistogram, passpointR2Aps); 17059831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen incrementTotalUniquePasspointEss(mObservedHotspotR1EssInScanHistogram, 17069831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen passpointR1UniqueEss.size()); 17079831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen incrementTotalUniquePasspointEss(mObservedHotspotR2EssInScanHistogram, 17089831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen passpointR2UniqueEss.size()); 17099831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen for (Integer count : passpointR1UniqueEss.values()) { 17109831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen incrementPasspointPerUniqueEss(mObservedHotspotR1ApsPerEssInScanHistogram, count); 17119831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 17129831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen for (Integer count : passpointR2UniqueEss.values()) { 17139831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen incrementPasspointPerUniqueEss(mObservedHotspotR2ApsPerEssInScanHistogram, count); 17149831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 1715973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen increment80211mcAps(mObserved80211mcApInScanHistogram, supporting80211mcAps); 171608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 171708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 171808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 1719054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh /** 1720054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh * TODO: (b/72443859) Use notifierTag param to separate metrics for OpenNetworkNotifier and 1721054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh * CarrierNetworkNotifier, for this method and all other related metrics. 1722054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh */ 1723a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Increments the occurence of a "Connect to Network" notification. */ 1724054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh public void incrementConnectToNetworkNotification(String notifierTag, int notificationType) { 1725a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen synchronized (mLock) { 1726a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen int count = mConnectToNetworkNotificationCount.get(notificationType); 1727a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mConnectToNetworkNotificationCount.put(notificationType, count + 1); 1728a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1729a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1730a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 1731a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Increments the occurence of an "Connect to Network" notification user action. */ 1732054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh public void incrementConnectToNetworkNotificationAction(String notifierTag, 1733054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh int notificationType, int actionType) { 1734a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen synchronized (mLock) { 1735a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen int key = notificationType * CONNECT_TO_NETWORK_NOTIFICATION_ACTION_KEY_MULTIPLIER 1736a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + actionType; 1737a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen int count = mConnectToNetworkNotificationActionCount.get(key); 1738a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mConnectToNetworkNotificationActionCount.put(key, count + 1); 1739a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1740a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1741a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 1742a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** 1743a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * Sets the number of SSIDs blacklisted from recommendation by the open network notification 1744a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * recommender. 1745a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen */ 1746054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh public void setNetworkRecommenderBlacklistSize(String notifierTag, int size) { 1747a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen synchronized (mLock) { 1748a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mOpenNetworkRecommenderBlacklistSize = size; 1749a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1750a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1751a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 1752a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Sets if the available network notification feature is enabled. */ 1753054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh public void setIsWifiNetworksAvailableNotificationEnabled(String notifierTag, boolean enabled) { 1754a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen synchronized (mLock) { 1755a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mIsWifiNetworksAvailableNotificationOn = enabled; 1756a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1757a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1758a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 1759a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Increments the occurence of connection attempts that were initiated unsuccessfully */ 1760054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh public void incrementNumNetworkRecommendationUpdates(String notifierTag) { 1761a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen synchronized (mLock) { 1762a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mNumOpenNetworkRecommendationUpdates++; 1763a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1764a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1765a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 1766a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** Increments the occurence of connection attempts that were initiated unsuccessfully */ 1767054fa81a3efcadcdee416fb7998139d9aa55b719Mehdi Alizadeh public void incrementNumNetworkConnectMessageFailedToSend(String notifierTag) { 1768a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen synchronized (mLock) { 1769a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mNumOpenNetworkConnectMessageFailedToSend++; 1770a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1771a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 1772a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 177328a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim /** Sets if Connected MAC Randomization feature is enabled */ 177428a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim public void setIsMacRandomizationOn(boolean enabled) { 177528a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim synchronized (mLock) { 177628a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim mIsMacRandomizationOn = enabled; 177728a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim } 177828a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim } 177928a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim 178011638f348ba45f9f417928e79b81186cef76c561Glen Kuhne public static final String PROTO_DUMP_ARG = "wifiMetricsProto"; 17819ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne public static final String CLEAN_DUMP_ARG = "clean"; 17829ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne 17831b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 17841b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * Dump all WifiMetrics. Collects some metrics from ConfigStore, Settings and WifiManager 17859ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne * at this time. 17861b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 17871b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param fd unused 17881b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param pw PrintWriter for writing dump to 1789a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass * @param args [wifiMetricsProto [clean]] 17901b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 17911b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 17921b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 1793a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass consolidateScoringParams(); 1794031cdffdaf223772d4ea52569ec7a08d00013208Glen Kuhne if (args != null && args.length > 0 && PROTO_DUMP_ARG.equals(args[0])) { 17959ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne // Dump serialized WifiLog proto 17961b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne consolidateProto(true); 17971b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne for (ConnectionEvent event : mConnectionEventList) { 17981b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne if (mCurrentConnectionEvent != event) { 17991b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //indicate that automatic bug report has been taken for all valid 18001b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //connection events 18011b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne event.mConnectionEvent.automaticBugReportTaken = true; 18021b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 18031b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 18041b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne byte[] wifiMetricsProto = WifiMetricsProto.WifiLog.toByteArray(mWifiLogProto); 18051b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne String metricsProtoDump = Base64.encodeToString(wifiMetricsProto, Base64.DEFAULT); 18069ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne if (args.length > 1 && CLEAN_DUMP_ARG.equals(args[1])) { 18079ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne // Output metrics proto bytes (base64) and nothing else 18089ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne pw.print(metricsProtoDump); 18099ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne } else { 18109ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne // Tag the start and end of the metrics proto bytes 18119ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne pw.println("WifiMetrics:"); 18129ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne pw.println(metricsProtoDump); 18139ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne pw.println("EndWifiMetrics"); 18149ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne } 18152532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne clear(); 18161b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } else { 18179ff7dea01b09f658492b7b8fa122695e56d28cdcGlen Kuhne pw.println("WifiMetrics:"); 18181b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mConnectionEvents:"); 18191b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne for (ConnectionEvent event : mConnectionEventList) { 18201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne String eventLine = event.toString(); 18211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne if (event == mCurrentConnectionEvent) { 18221b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne eventLine += "CURRENTLY OPEN EVENT"; 18231b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 18241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println(eventLine); 18251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 18261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mWifiLogProto.numSavedNetworks=" + mWifiLogProto.numSavedNetworks); 18271b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mWifiLogProto.numOpenNetworks=" + mWifiLogProto.numOpenNetworks); 18281b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mWifiLogProto.numPersonalNetworks=" 18291b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + mWifiLogProto.numPersonalNetworks); 18301b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mWifiLogProto.numEnterpriseNetworks=" 18311b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + mWifiLogProto.numEnterpriseNetworks); 183259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numHiddenNetworks=" + mWifiLogProto.numHiddenNetworks); 183359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numPasspointNetworks=" 183459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numPasspointNetworks); 18351b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mWifiLogProto.isLocationEnabled=" + mWifiLogProto.isLocationEnabled); 18361b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne pw.println("mWifiLogProto.isScanningAlwaysEnabled=" 18371b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne + mWifiLogProto.isScanningAlwaysEnabled); 1838c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mWifiLogProto.numNetworksAddedByUser=" 1839c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + mWifiLogProto.numNetworksAddedByUser); 1840c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mWifiLogProto.numNetworksAddedByApps=" 1841c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + mWifiLogProto.numNetworksAddedByApps); 1842c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mWifiLogProto.numNonEmptyScanResults=" 1843c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + mWifiLogProto.numNonEmptyScanResults); 1844c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mWifiLogProto.numEmptyScanResults=" 1845c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + mWifiLogProto.numEmptyScanResults); 1846424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang pw.println("mWifiLogProto.numConnecitvityOneshotScans=" 1847424fb3017e6c856ca70a65011fc693268cce77e1Ningyuan Wang + mWifiLogProto.numConnectivityOneshotScans); 1848c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mWifiLogProto.numOneshotScans=" 1849c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + mWifiLogProto.numOneshotScans); 1850c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mWifiLogProto.numBackgroundScans=" 1851c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + mWifiLogProto.numBackgroundScans); 185205a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius pw.println("mWifiLogProto.numExternalAppOneshotScanRequests=" 185305a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius + mWifiLogProto.numExternalAppOneshotScanRequests); 185405a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius pw.println("mWifiLogProto.numExternalForegroundAppOneshotScanRequestsThrottled=" 185505a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius + mWifiLogProto.numExternalForegroundAppOneshotScanRequestsThrottled); 185605a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius pw.println("mWifiLogProto.numExternalBackgroundAppOneshotScanRequestsThrottled=" 185705a370d9aede8f307a10a8c27fa17e18240aa8d8Roshan Pius + mWifiLogProto.numExternalBackgroundAppOneshotScanRequestsThrottled); 1858c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 1859c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mScanReturnEntries:"); 1860c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" SCAN_UNKNOWN: " + getScanReturnEntry( 1861c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.SCAN_UNKNOWN)); 1862c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" SCAN_SUCCESS: " + getScanReturnEntry( 1863c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.SCAN_SUCCESS)); 1864c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" SCAN_FAILURE_INTERRUPTED: " + getScanReturnEntry( 1865c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.SCAN_FAILURE_INTERRUPTED)); 1866c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" SCAN_FAILURE_INVALID_CONFIGURATION: " + getScanReturnEntry( 1867c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.SCAN_FAILURE_INVALID_CONFIGURATION)); 1868c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" FAILURE_WIFI_DISABLED: " + getScanReturnEntry( 1869c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne WifiMetricsProto.WifiLog.FAILURE_WIFI_DISABLED)); 1870c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 1871c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println("mSystemStateEntries: <state><screenOn> : <scansInitiated>"); 1872c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_UNKNOWN ON: " 1873c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_UNKNOWN, true)); 1874c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_DISABLED ON: " 1875c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_DISABLED, true)); 1876c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_DISCONNECTED ON: " 1877c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_DISCONNECTED, true)); 1878c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_ASSOCIATED ON: " 1879c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_ASSOCIATED, true)); 1880c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_UNKNOWN OFF: " 1881c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_UNKNOWN, false)); 1882c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_DISABLED OFF: " 1883c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_DISABLED, false)); 1884c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_DISCONNECTED OFF: " 1885c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_DISCONNECTED, false)); 1886c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne pw.println(" WIFI_ASSOCIATED OFF: " 1887c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne + getSystemStateCount(WifiMetricsProto.WifiLog.WIFI_ASSOCIATED, false)); 1888ce003b812aead64dcb36647180991150021b24c1Glen Kuhne pw.println("mWifiLogProto.numConnectivityWatchdogPnoGood=" 1889ce003b812aead64dcb36647180991150021b24c1Glen Kuhne + mWifiLogProto.numConnectivityWatchdogPnoGood); 1890ce003b812aead64dcb36647180991150021b24c1Glen Kuhne pw.println("mWifiLogProto.numConnectivityWatchdogPnoBad=" 1891ce003b812aead64dcb36647180991150021b24c1Glen Kuhne + mWifiLogProto.numConnectivityWatchdogPnoBad); 1892ce003b812aead64dcb36647180991150021b24c1Glen Kuhne pw.println("mWifiLogProto.numConnectivityWatchdogBackgroundGood=" 1893ce003b812aead64dcb36647180991150021b24c1Glen Kuhne + mWifiLogProto.numConnectivityWatchdogBackgroundGood); 1894ce003b812aead64dcb36647180991150021b24c1Glen Kuhne pw.println("mWifiLogProto.numConnectivityWatchdogBackgroundBad=" 1895ce003b812aead64dcb36647180991150021b24c1Glen Kuhne + mWifiLogProto.numConnectivityWatchdogBackgroundBad); 18965f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogTriggers=" 18975f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogTriggers); 18985f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogBadAssociationNetworksTotal=" 18995f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogBadAssociationNetworksTotal); 19005f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogBadAuthenticationNetworksTotal=" 19015f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogBadAuthenticationNetworksTotal); 19025f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogBadDhcpNetworksTotal=" 19035f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogBadDhcpNetworksTotal); 19045f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogBadOtherNetworksTotal=" 19055f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogBadOtherNetworksTotal); 19065f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogAvailableNetworksTotal=" 19075f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogAvailableNetworksTotal); 19085f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogTriggersWithBadAssociation=" 19095f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogTriggersWithBadAssociation); 19105f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogTriggersWithBadAuthentication=" 19115f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogTriggersWithBadAuthentication); 19125f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogTriggersWithBadDhcp=" 19135f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogTriggersWithBadDhcp); 19145f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogTriggersWithBadOther=" 19155f001750a0ce82a8b3a47ac566117d4de27f3e23Glen Kuhne + mWifiLogProto.numLastResortWatchdogTriggersWithBadOther); 1916da22e3d28b62005dce5fddd75207bd3d7a1745e1Glen Kuhne pw.println("mWifiLogProto.numLastResortWatchdogSuccesses=" 1917da22e3d28b62005dce5fddd75207bd3d7a1745e1Glen Kuhne + mWifiLogProto.numLastResortWatchdogSuccesses); 1918107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne pw.println("mWifiLogProto.recordDurationSec=" 1919107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne + ((mClock.getElapsedSinceBootMillis() / 1000) - mRecordStartTimeSec)); 192004012eb3e692202b25095f7afc1eda40b63e3e0fxshu 192104012eb3e692202b25095f7afc1eda40b63e3e0fxshu try { 192204012eb3e692202b25095f7afc1eda40b63e3e0fxshu JSONObject rssiMap = new JSONObject(); 192304012eb3e692202b25095f7afc1eda40b63e3e0fxshu for (Map.Entry<Integer, SparseIntArray> entry : mRssiPollCountsMap.entrySet()) { 192404012eb3e692202b25095f7afc1eda40b63e3e0fxshu int frequency = entry.getKey(); 192504012eb3e692202b25095f7afc1eda40b63e3e0fxshu final SparseIntArray histogram = entry.getValue(); 192604012eb3e692202b25095f7afc1eda40b63e3e0fxshu JSONArray histogramElements = new JSONArray(); 192704012eb3e692202b25095f7afc1eda40b63e3e0fxshu for (int i = MIN_RSSI_POLL; i <= MAX_RSSI_POLL; i++) { 192804012eb3e692202b25095f7afc1eda40b63e3e0fxshu int count = histogram.get(i); 192904012eb3e692202b25095f7afc1eda40b63e3e0fxshu if (count == 0) { 193004012eb3e692202b25095f7afc1eda40b63e3e0fxshu continue; 193104012eb3e692202b25095f7afc1eda40b63e3e0fxshu } 193204012eb3e692202b25095f7afc1eda40b63e3e0fxshu JSONObject histogramElement = new JSONObject(); 193304012eb3e692202b25095f7afc1eda40b63e3e0fxshu histogramElement.put(Integer.toString(i), count); 193404012eb3e692202b25095f7afc1eda40b63e3e0fxshu histogramElements.put(histogramElement); 193504012eb3e692202b25095f7afc1eda40b63e3e0fxshu } 193604012eb3e692202b25095f7afc1eda40b63e3e0fxshu rssiMap.put(Integer.toString(frequency), histogramElements); 193704012eb3e692202b25095f7afc1eda40b63e3e0fxshu } 193804012eb3e692202b25095f7afc1eda40b63e3e0fxshu pw.println("mWifiLogProto.rssiPollCount: " + rssiMap.toString()); 193904012eb3e692202b25095f7afc1eda40b63e3e0fxshu } catch (JSONException e) { 194004012eb3e692202b25095f7afc1eda40b63e3e0fxshu pw.println("JSONException occurred: " + e.getMessage()); 19417a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne } 194204012eb3e692202b25095f7afc1eda40b63e3e0fxshu 19435cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne pw.println("mWifiLogProto.rssiPollDeltaCount: Printing counts for [" 19445cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne + MIN_RSSI_DELTA + ", " + MAX_RSSI_DELTA + "]"); 194504012eb3e692202b25095f7afc1eda40b63e3e0fxshu StringBuilder sb = new StringBuilder(); 19465cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne for (int i = MIN_RSSI_DELTA; i <= MAX_RSSI_DELTA; i++) { 19475cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne sb.append(mRssiDeltaCounts.get(i) + " "); 19485cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 19495cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne pw.println(" " + sb.toString()); 1950f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal pw.print("mWifiLogProto.alertReasonCounts="); 1951f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal sb.setLength(0); 1952f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal for (int i = WifiLoggerHal.WIFI_ALERT_REASON_MIN; 1953f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal i <= WifiLoggerHal.WIFI_ALERT_REASON_MAX; i++) { 1954f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal int count = mWifiAlertReasonCounts.get(i); 1955f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal if (count > 0) { 1956f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal sb.append("(" + i + "," + count + "),"); 1957f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 1958f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 1959f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal if (sb.length() > 1) { 1960f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal sb.setLength(sb.length() - 1); // strip trailing comma 1961f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal pw.println(sb.toString()); 1962f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } else { 1963f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal pw.println("()"); 1964f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 196559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numTotalScanResults=" 196659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numTotalScanResults); 196759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numOpenNetworkScanResults=" 196859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numOpenNetworkScanResults); 196959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numPersonalNetworkScanResults=" 197059f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numPersonalNetworkScanResults); 197159f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numEnterpriseNetworkScanResults=" 197259f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numEnterpriseNetworkScanResults); 197359f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numHiddenNetworkScanResults=" 197459f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numHiddenNetworkScanResults); 197559f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numHotspot2R1NetworkScanResults=" 197659f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numHotspot2R1NetworkScanResults); 197759f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numHotspot2R2NetworkScanResults=" 197859f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne + mWifiLogProto.numHotspot2R2NetworkScanResults); 197959f9a74676831ba4634b35d56a1e2bbe9bf4e322Glen Kuhne pw.println("mWifiLogProto.numScans=" + mWifiLogProto.numScans); 19804569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao pw.println("mWifiLogProto.WifiScoreCount: [" + MIN_WIFI_SCORE + ", " 19814569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao + MAX_WIFI_SCORE + "]"); 19824569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao for (int i = 0; i <= MAX_WIFI_SCORE; i++) { 19834569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao pw.print(mWifiScoreCounts.get(i) + " "); 19844569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao } 198544ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein pw.println(); // add a line after wifi scores 198644ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein pw.println("mWifiLogProto.SoftApManagerReturnCodeCounts:"); 198744ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein pw.println(" SUCCESS: " + mSoftApManagerReturnCodeCounts.get( 198844ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_STARTED_SUCCESSFULLY)); 198944ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein pw.println(" FAILED_GENERAL_ERROR: " + mSoftApManagerReturnCodeCounts.get( 199044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_FAILED_GENERAL_ERROR)); 199144ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein pw.println(" FAILED_NO_CHANNEL: " + mSoftApManagerReturnCodeCounts.get( 199244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein WifiMetricsProto.SoftApReturnCodeCount.SOFT_AP_FAILED_NO_CHANNEL)); 19934569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao pw.print("\n"); 1994bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius pw.println("mWifiLogProto.numHalCrashes=" 1995bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius + mWifiLogProto.numHalCrashes); 1996bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius pw.println("mWifiLogProto.numWificondCrashes=" 1997bd2cff58fca2f3d9a0cd6df8526b23f48d9d44ecRoshan Pius + mWifiLogProto.numWificondCrashes); 199865a9143d6c93624837da3867f1cadf2daab62236Roshan Pius pw.println("mWifiLogProto.numSupplicantCrashes=" 199965a9143d6c93624837da3867f1cadf2daab62236Roshan Pius + mWifiLogProto.numSupplicantCrashes); 200065a9143d6c93624837da3867f1cadf2daab62236Roshan Pius pw.println("mWifiLogProto.numHostapdCrashes=" 200165a9143d6c93624837da3867f1cadf2daab62236Roshan Pius + mWifiLogProto.numHostapdCrashes); 20025ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius pw.println("mWifiLogProto.numSetupClientInterfaceFailureDueToHal=" 20035ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius + mWifiLogProto.numSetupClientInterfaceFailureDueToHal); 20045ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius pw.println("mWifiLogProto.numSetupClientInterfaceFailureDueToWificond=" 20055ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius + mWifiLogProto.numSetupClientInterfaceFailureDueToWificond); 20065ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius pw.println("mWifiLogProto.numSetupClientInterfaceFailureDueToSupplicant=" 20075ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius + mWifiLogProto.numSetupClientInterfaceFailureDueToSupplicant); 20085ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius pw.println("mWifiLogProto.numSetupSoftApInterfaceFailureDueToHal=" 20095ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius + mWifiLogProto.numSetupSoftApInterfaceFailureDueToHal); 20105ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius pw.println("mWifiLogProto.numSetupSoftApInterfaceFailureDueToWificond=" 20115ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius + mWifiLogProto.numSetupSoftApInterfaceFailureDueToWificond); 20125ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius pw.println("mWifiLogProto.numSetupSoftApInterfaceFailureDueToHostapd=" 20135ed6b02a8435874d16a4ef3decc8df1b7e07f852Roshan Pius + mWifiLogProto.numSetupSoftApInterfaceFailureDueToHostapd); 201446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne pw.println("StaEventList:"); 2015d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne for (StaEventWithTime event : mStaEventList) { 2016d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne pw.println(event); 201746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 2018910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen 201926b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu pw.println("mWifiLogProto.numPasspointProviders=" 202026b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu + mWifiLogProto.numPasspointProviders); 202126b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu pw.println("mWifiLogProto.numPasspointProviderInstallation=" 202226b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu + mWifiLogProto.numPasspointProviderInstallation); 202326b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu pw.println("mWifiLogProto.numPasspointProviderInstallSuccess=" 202426b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu + mWifiLogProto.numPasspointProviderInstallSuccess); 202526b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu pw.println("mWifiLogProto.numPasspointProviderUninstallation=" 202626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu + mWifiLogProto.numPasspointProviderUninstallation); 202726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu pw.println("mWifiLogProto.numPasspointProviderUninstallSuccess=" 202826b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu + mWifiLogProto.numPasspointProviderUninstallSuccess); 202926b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu pw.println("mWifiLogProto.numPasspointProvidersSuccessfullyConnected=" 203026b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu + mWifiLogProto.numPasspointProvidersSuccessfullyConnected); 20315d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius pw.println("mWifiLogProto.numRadioModeChangeToMcc=" 20325d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius + mWifiLogProto.numRadioModeChangeToMcc); 20335d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius pw.println("mWifiLogProto.numRadioModeChangeToScc=" 20345d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius + mWifiLogProto.numRadioModeChangeToScc); 20355d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius pw.println("mWifiLogProto.numRadioModeChangeToSbs=" 20365d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius + mWifiLogProto.numRadioModeChangeToSbs); 20375d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius pw.println("mWifiLogProto.numRadioModeChangeToDbs=" 20385d540c3dbe22ebd666e5f712a28327d3c7f34a49Roshan Pius + mWifiLogProto.numRadioModeChangeToDbs); 2039b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius pw.println("mWifiLogProto.numSoftApUserBandPreferenceUnsatisfied=" 2040b4846aff56ffd388ff02400a144da80ff73b87bdRoshan Pius + mWifiLogProto.numSoftApUserBandPreferenceUnsatisfied); 204108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mTotalSsidsInScanHistogram:" 204208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mTotalSsidsInScanHistogram.toString()); 204308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mTotalBssidsInScanHistogram:" 204408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mTotalBssidsInScanHistogram.toString()); 204508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableOpenSsidsInScanHistogram:" 204608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableOpenSsidsInScanHistogram.toString()); 204708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableOpenBssidsInScanHistogram:" 204808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableOpenBssidsInScanHistogram.toString()); 204908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableSavedSsidsInScanHistogram:" 205008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableSavedSsidsInScanHistogram.toString()); 205108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableSavedBssidsInScanHistogram:" 205208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableSavedBssidsInScanHistogram.toString()); 205308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableOpenOrSavedSsidsInScanHistogram:" 205408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableOpenOrSavedSsidsInScanHistogram.toString()); 205508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableOpenOrSavedBssidsInScanHistogram:" 205608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableOpenOrSavedBssidsInScanHistogram.toString()); 205708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableSavedPasspointProviderProfilesInScanHistogram:" 205808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableSavedPasspointProviderProfilesInScanHistogram.toString()); 205908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mAvailableSavedPasspointProviderBssidsInScanHistogram:" 206008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mAvailableSavedPasspointProviderBssidsInScanHistogram.toString()); 206108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mWifiLogProto.partialAllSingleScanListenerResults=" 206208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mWifiLogProto.partialAllSingleScanListenerResults); 206308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne pw.println("mWifiLogProto.fullBandAllSingleScanListenerResults=" 206408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne + mWifiLogProto.fullBandAllSingleScanListenerResults); 2065910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen pw.println("mWifiAwareMetrics:"); 2066910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen mWifiAwareMetrics.dump(fd, pw, args); 206702e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen pw.println("mRttMetrics:"); 206802e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen mRttMetrics.dump(fd, pw, args); 2069a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 2070a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh pw.println("mPnoScanMetrics.numPnoScanAttempts=" 2071a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh + mPnoScanMetrics.numPnoScanAttempts); 2072a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh pw.println("mPnoScanMetrics.numPnoScanFailed=" 2073a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh + mPnoScanMetrics.numPnoScanFailed); 2074a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh pw.println("mPnoScanMetrics.numPnoScanStartedOverOffload=" 2075a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh + mPnoScanMetrics.numPnoScanStartedOverOffload); 2076a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh pw.println("mPnoScanMetrics.numPnoScanFailedOverOffload=" 2077a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh + mPnoScanMetrics.numPnoScanFailedOverOffload); 2078a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh pw.println("mPnoScanMetrics.numPnoFoundNetworkEvents=" 2079a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh + mPnoScanMetrics.numPnoFoundNetworkEvents); 2080a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 2081a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen pw.println("mWifiLogProto.connectToNetworkNotificationCount=" 2082a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + mConnectToNetworkNotificationCount.toString()); 2083a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen pw.println("mWifiLogProto.connectToNetworkNotificationActionCount=" 2084a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + mConnectToNetworkNotificationActionCount.toString()); 2085a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen pw.println("mWifiLogProto.openNetworkRecommenderBlacklistSize=" 2086a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + mOpenNetworkRecommenderBlacklistSize); 2087a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen pw.println("mWifiLogProto.isWifiNetworksAvailableNotificationOn=" 2088a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + mIsWifiNetworksAvailableNotificationOn); 2089a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen pw.println("mWifiLogProto.numOpenNetworkRecommendationUpdates=" 2090a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + mNumOpenNetworkRecommendationUpdates); 2091a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen pw.println("mWifiLogProto.numOpenNetworkConnectMessageFailedToSend=" 2092a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen + mNumOpenNetworkConnectMessageFailedToSend); 20939831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen 20949831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen pw.println("mWifiLogProto.observedHotspotR1ApInScanHistogram=" 20959831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen + mObservedHotspotR1ApInScanHistogram); 20969831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen pw.println("mWifiLogProto.observedHotspotR2ApInScanHistogram=" 20979831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen + mObservedHotspotR2ApInScanHistogram); 20989831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen pw.println("mWifiLogProto.observedHotspotR1EssInScanHistogram=" 20999831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen + mObservedHotspotR1EssInScanHistogram); 21009831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen pw.println("mWifiLogProto.observedHotspotR2EssInScanHistogram=" 21019831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen + mObservedHotspotR2EssInScanHistogram); 21029831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen pw.println("mWifiLogProto.observedHotspotR1ApsPerEssInScanHistogram=" 21039831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen + mObservedHotspotR1ApsPerEssInScanHistogram); 21049831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen pw.println("mWifiLogProto.observedHotspotR2ApsPerEssInScanHistogram=" 21059831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen + mObservedHotspotR2ApsPerEssInScanHistogram); 210605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 2107973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen pw.println("mWifiLogProto.observed80211mcSupportingApsInScanHistogram" 2108973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen + mObserved80211mcApInScanHistogram); 2109973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen 211005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh pw.println("mSoftApTetheredEvents:"); 211105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh for (SoftApConnectedClientsEvent event : mSoftApEventListTethered) { 211205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh StringBuilder eventLine = new StringBuilder(); 211305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh eventLine.append("event_type=" + event.eventType); 211405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh eventLine.append(",time_stamp_millis=" + event.timeStampMillis); 211505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh eventLine.append(",num_connected_clients=" + event.numConnectedClients); 21164de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh eventLine.append(",channel_frequency=" + event.channelFrequency); 21174de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh eventLine.append(",channel_bandwidth=" + event.channelBandwidth); 211805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh pw.println(eventLine.toString()); 211905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 212005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh pw.println("mSoftApLocalOnlyEvents:"); 212105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh for (SoftApConnectedClientsEvent event : mSoftApEventListLocalOnly) { 212205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh StringBuilder eventLine = new StringBuilder(); 212305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh eventLine.append("event_type=" + event.eventType); 212405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh eventLine.append(",time_stamp_millis=" + event.timeStampMillis); 212505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh eventLine.append(",num_connected_clients=" + event.numConnectedClients); 21264de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh eventLine.append(",channel_frequency=" + event.channelFrequency); 21274de36821d74eb8980c49a0f79c20343591b12e27Mehdi Alizadeh eventLine.append(",channel_bandwidth=" + event.channelBandwidth); 212805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh pw.println(eventLine.toString()); 212905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 213062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 213162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsAttempts=" 213262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsAttempts); 213362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsSuccess=" 213462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsSuccess); 213562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsStartFailure=" 213662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsStartFailure); 213762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsOverlapFailure=" 213862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsOverlapFailure); 213962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsTimeoutFailure=" 214062344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsTimeoutFailure); 214162344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsOtherConnectionFailure=" 214262344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsOtherConnectionFailure); 214362344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsSupplicantFailure=" 214462344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsSupplicantFailure); 214562344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim pw.println("mWpsMetrics.numWpsCancellation=" 214662344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim + mWpsMetrics.numWpsCancellation); 2147fb165562c8c77a9e5e2452f33aedb8e4369e7a9bSiddharth Ray 2148fb165562c8c77a9e5e2452f33aedb8e4369e7a9bSiddharth Ray mWifiPowerMetrics.dump(pw); 214912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWifiWakeMetrics.dump(pw); 215028a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim 215128a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim pw.println("mWifiLogProto.isMacRandomizationOn=" + mIsMacRandomizationOn); 2152a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass pw.println("mWifiLogProto.scoreExperimentId=" + mWifiLogProto.scoreExperimentId); 21531b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 21541b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 21551b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 21561b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne 21573c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne /** 21583c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne * Update various counts of saved network types 21593c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne * @param networks List of WifiConfigurations representing all saved networks, must not be null 21603c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne */ 21613c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne public void updateSavedNetworks(List<WifiConfiguration> networks) { 21623c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne synchronized (mLock) { 21633c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numSavedNetworks = networks.size(); 21643c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numOpenNetworks = 0; 21653c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numPersonalNetworks = 0; 21663c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numEnterpriseNetworks = 0; 21673c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numNetworksAddedByUser = 0; 21683c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numNetworksAddedByApps = 0; 21693c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numHiddenNetworks = 0; 21703c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numPasspointNetworks = 0; 21713c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne for (WifiConfiguration config : networks) { 21723c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne if (config.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE)) { 21733c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numOpenNetworks++; 21743c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } else if (config.isEnterprise()) { 21753c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numEnterpriseNetworks++; 21763c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } else { 21773c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numPersonalNetworks++; 21783c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21793c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne if (config.selfAdded) { 21803c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numNetworksAddedByUser++; 21813c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } else { 21823c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numNetworksAddedByApps++; 21833c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21843c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne if (config.hiddenSSID) { 21853c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numHiddenNetworks++; 21863c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21873c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne if (config.isPasspoint()) { 21883c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne mWifiLogProto.numPasspointNetworks++; 21893c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21903c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21913c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21923c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne } 21933c6e92f51984ba8999d5efe622b4a52dd18bdaffGlen Kuhne 21941b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne /** 219549357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * Update metrics for saved Passpoint profiles. 219626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu * 219726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu * @param numSavedProfiles The number of saved Passpoint profiles 219849357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * @param numConnectedProfiles The number of saved Passpoint profiles that have ever resulted 219949357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * in a successful network connection 220026b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu */ 220149357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu public void updateSavedPasspointProfiles(int numSavedProfiles, int numConnectedProfiles) { 220226b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu synchronized (mLock) { 220326b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu mWifiLogProto.numPasspointProviders = numSavedProfiles; 220449357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu mWifiLogProto.numPasspointProvidersSuccessfullyConnected = numConnectedProfiles; 220526b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 220626b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu } 220726b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu 220826b97ef6a6d8e755e7db541afa84aacd807599d7Peter Qiu /** 2209c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * append the separate ConnectionEvent, SystemStateEntry and ScanReturnCode collections to their 2210c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne * respective lists within mWifiLogProto 22111b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * 22121b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne * @param incremental Only include ConnectionEvents created since last automatic bug report 22131b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne */ 22141b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne private void consolidateProto(boolean incremental) { 22151b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne List<WifiMetricsProto.ConnectionEvent> events = new ArrayList<>(); 22167a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne List<WifiMetricsProto.RssiPollCount> rssis = new ArrayList<>(); 22175cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne List<WifiMetricsProto.RssiPollCount> rssiDeltas = new ArrayList<>(); 2218f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal List<WifiMetricsProto.AlertReasonCount> alertReasons = new ArrayList<>(); 22194569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao List<WifiMetricsProto.WifiScoreCount> scores = new ArrayList<>(); 22201b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne synchronized (mLock) { 22211b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne for (ConnectionEvent event : mConnectionEventList) { 2222c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne // If this is not incremental, dump full ConnectionEvent list 2223c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne // Else Dump all un-dumped events except for the current one 22241b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne if (!incremental || ((mCurrentConnectionEvent != event) 22251b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne && !event.mConnectionEvent.automaticBugReportTaken)) { 22261b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //Get all ConnectionEvents that haven not been dumped as a proto, also exclude 22271b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne //the current active un-ended connection event 22281b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne events.add(event.mConnectionEvent); 2229c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne if (incremental) { 2230c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne event.mConnectionEvent.automaticBugReportTaken = true; 2231c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 22321b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 22331b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 22341b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne if (events.size() > 0) { 22351b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne mWifiLogProto.connectionEvent = events.toArray(mWifiLogProto.connectionEvent); 22361b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 2237c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 2238c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne //Convert the SparseIntArray of scanReturnEntry integers into ScanReturnEntry proto list 2239c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.scanReturnEntries = 2240c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne new WifiMetricsProto.WifiLog.ScanReturnEntry[mScanReturnEntries.size()]; 2241c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < mScanReturnEntries.size(); i++) { 2242c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.scanReturnEntries[i] = new WifiMetricsProto.WifiLog.ScanReturnEntry(); 2243c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.scanReturnEntries[i].scanReturnCode = mScanReturnEntries.keyAt(i); 2244c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.scanReturnEntries[i].scanResultsCount = mScanReturnEntries.valueAt(i); 2245c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 2246c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne 2247c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne // Convert the SparseIntArray of systemStateEntry into WifiSystemStateEntry proto list 2248c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne // This one is slightly more complex, as the Sparse are indexed with: 2249c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne // key: wifiState * 2 + isScreenOn, value: wifiStateCount 2250c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.wifiSystemStateEntries = 2251c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne new WifiMetricsProto.WifiLog 2252c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne .WifiSystemStateEntry[mWifiSystemStateEntries.size()]; 2253c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne for (int i = 0; i < mWifiSystemStateEntries.size(); i++) { 2254c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.wifiSystemStateEntries[i] = 2255c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne new WifiMetricsProto.WifiLog.WifiSystemStateEntry(); 2256c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.wifiSystemStateEntries[i].wifiState = 2257c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiSystemStateEntries.keyAt(i) / 2; 2258c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.wifiSystemStateEntries[i].wifiStateCount = 2259c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiSystemStateEntries.valueAt(i); 2260c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne mWifiLogProto.wifiSystemStateEntries[i].isScreenOn = 2261c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne (mWifiSystemStateEntries.keyAt(i) % 2) > 0; 2262c2c2648141e6190d85601ee8a6a1d0034e7ff927Glen Kuhne } 2263107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mWifiLogProto.recordDurationSec = (int) ((mClock.getElapsedSinceBootMillis() / 1000) 2264107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne - mRecordStartTimeSec); 22657a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne 22667a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne /** 226704012eb3e692202b25095f7afc1eda40b63e3e0fxshu * Convert the SparseIntArrays of RSSI poll rssi, counts, and frequency to the 226804012eb3e692202b25095f7afc1eda40b63e3e0fxshu * proto's repeated ntKeyVal array. 22697a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne */ 227004012eb3e692202b25095f7afc1eda40b63e3e0fxshu for (Map.Entry<Integer, SparseIntArray> entry : mRssiPollCountsMap.entrySet()) { 227104012eb3e692202b25095f7afc1eda40b63e3e0fxshu int frequency = entry.getKey(); 227204012eb3e692202b25095f7afc1eda40b63e3e0fxshu SparseIntArray histogram = entry.getValue(); 227304012eb3e692202b25095f7afc1eda40b63e3e0fxshu for (int i = 0; i < histogram.size(); i++) { 227404012eb3e692202b25095f7afc1eda40b63e3e0fxshu WifiMetricsProto.RssiPollCount keyVal = new WifiMetricsProto.RssiPollCount(); 227504012eb3e692202b25095f7afc1eda40b63e3e0fxshu keyVal.rssi = histogram.keyAt(i); 227604012eb3e692202b25095f7afc1eda40b63e3e0fxshu keyVal.count = histogram.valueAt(i); 227704012eb3e692202b25095f7afc1eda40b63e3e0fxshu keyVal.frequency = frequency; 227804012eb3e692202b25095f7afc1eda40b63e3e0fxshu rssis.add(keyVal); 227904012eb3e692202b25095f7afc1eda40b63e3e0fxshu } 22807a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne } 22817a0b9ffe794113c4a5ed528d8aadeb3303d1b089Glen Kuhne mWifiLogProto.rssiPollRssiCount = rssis.toArray(mWifiLogProto.rssiPollRssiCount); 2282f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal 2283f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal /** 22845cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne * Convert the SparseIntArray of RSSI delta rssi's and counts to the proto's repeated 22855cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne * IntKeyVal array. 22865cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne */ 22875cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne for (int i = 0; i < mRssiDeltaCounts.size(); i++) { 22885cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne WifiMetricsProto.RssiPollCount keyVal = new WifiMetricsProto.RssiPollCount(); 22895cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne keyVal.rssi = mRssiDeltaCounts.keyAt(i); 22905cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne keyVal.count = mRssiDeltaCounts.valueAt(i); 22915cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne rssiDeltas.add(keyVal); 22925cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne } 22935cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mWifiLogProto.rssiPollDeltaCount = rssiDeltas.toArray(mWifiLogProto.rssiPollDeltaCount); 22945cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne 229504012eb3e692202b25095f7afc1eda40b63e3e0fxshu 229604012eb3e692202b25095f7afc1eda40b63e3e0fxshu 22975cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne /** 2298f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal * Convert the SparseIntArray of alert reasons and counts to the proto's repeated 2299f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal * IntKeyVal array. 2300f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal */ 2301f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal for (int i = 0; i < mWifiAlertReasonCounts.size(); i++) { 2302f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal WifiMetricsProto.AlertReasonCount keyVal = new WifiMetricsProto.AlertReasonCount(); 2303f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal keyVal.reason = mWifiAlertReasonCounts.keyAt(i); 2304f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal keyVal.count = mWifiAlertReasonCounts.valueAt(i); 2305f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal alertReasons.add(keyVal); 2306f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal } 2307f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal mWifiLogProto.alertReasonCount = alertReasons.toArray(mWifiLogProto.alertReasonCount); 23084569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao 23094569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao /** 23104569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao * Convert the SparseIntArray of Wifi Score and counts to proto's repeated 23114569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao * IntKeyVal array. 23124569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao */ 23134569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao for (int score = 0; score < mWifiScoreCounts.size(); score++) { 23144569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao WifiMetricsProto.WifiScoreCount keyVal = new WifiMetricsProto.WifiScoreCount(); 23154569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao keyVal.score = mWifiScoreCounts.keyAt(score); 23164569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao keyVal.count = mWifiScoreCounts.valueAt(score); 23174569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao scores.add(keyVal); 23184569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao } 23194569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao mWifiLogProto.wifiScoreCount = scores.toArray(mWifiLogProto.wifiScoreCount); 232044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein 232144ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein /** 232244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein * Convert the SparseIntArray of SoftAp Return codes and counts to proto's repeated 232344ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein * IntKeyVal array. 232444ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein */ 232544ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein int codeCounts = mSoftApManagerReturnCodeCounts.size(); 232644ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mWifiLogProto.softApReturnCode = new WifiMetricsProto.SoftApReturnCodeCount[codeCounts]; 232744ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein for (int sapCode = 0; sapCode < codeCounts; sapCode++) { 232844ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mWifiLogProto.softApReturnCode[sapCode] = 232944ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein new WifiMetricsProto.SoftApReturnCodeCount(); 233044ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mWifiLogProto.softApReturnCode[sapCode].startResult = 233144ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mSoftApManagerReturnCodeCounts.keyAt(sapCode); 233244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mWifiLogProto.softApReturnCode[sapCode].count = 233344ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mSoftApManagerReturnCodeCounts.valueAt(sapCode); 233444ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein } 2335d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne 2336d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne /** 2337d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne * Convert StaEventList to array of StaEvents 2338d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne */ 2339d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne mWifiLogProto.staEventList = new StaEvent[mStaEventList.size()]; 2340d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne for (int i = 0; i < mStaEventList.size(); i++) { 2341d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne mWifiLogProto.staEventList[i] = mStaEventList.get(i).staEvent; 2342d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne } 234308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.totalSsidsInScanHistogram = 234408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray(mTotalSsidsInScanHistogram); 234508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.totalBssidsInScanHistogram = 234608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray(mTotalBssidsInScanHistogram); 234708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableOpenSsidsInScanHistogram = 234808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray(mAvailableOpenSsidsInScanHistogram); 234908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableOpenBssidsInScanHistogram = 235008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray(mAvailableOpenBssidsInScanHistogram); 235108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableSavedSsidsInScanHistogram = 235208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray(mAvailableSavedSsidsInScanHistogram); 235308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableSavedBssidsInScanHistogram = 235408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray(mAvailableSavedBssidsInScanHistogram); 235508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableOpenOrSavedSsidsInScanHistogram = 235608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray( 235708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableOpenOrSavedSsidsInScanHistogram); 235808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableOpenOrSavedBssidsInScanHistogram = 235908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray( 236008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableOpenOrSavedBssidsInScanHistogram); 236108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableSavedPasspointProviderProfilesInScanHistogram = 236208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray( 236308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableSavedPasspointProviderProfilesInScanHistogram); 236408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mWifiLogProto.availableSavedPasspointProviderBssidsInScanHistogram = 236508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne makeNumConnectableNetworksBucketArray( 236608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableSavedPasspointProviderBssidsInScanHistogram); 2367910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen mWifiLogProto.wifiAwareLog = mWifiAwareMetrics.consolidateProto(); 236802e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen mWifiLogProto.wifiRttLog = mRttMetrics.consolidateProto(); 2369a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh 2370a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mWifiLogProto.pnoScanMetrics = mPnoScanMetrics; 2371a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 2372a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** 2373a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * Convert the SparseIntArray of "Connect to Network" notification types and counts to 2374a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * proto's repeated IntKeyVal array. 2375a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen */ 2376a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen ConnectToNetworkNotificationAndActionCount[] notificationCountArray = 2377a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen new ConnectToNetworkNotificationAndActionCount[ 2378a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mConnectToNetworkNotificationCount.size()]; 2379a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen for (int i = 0; i < mConnectToNetworkNotificationCount.size(); i++) { 2380a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen ConnectToNetworkNotificationAndActionCount keyVal = 2381a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen new ConnectToNetworkNotificationAndActionCount(); 2382a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.notification = mConnectToNetworkNotificationCount.keyAt(i); 2383a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.recommender = 2384a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen ConnectToNetworkNotificationAndActionCount.RECOMMENDER_OPEN; 2385a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.count = mConnectToNetworkNotificationCount.valueAt(i); 2386a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen notificationCountArray[i] = keyVal; 2387a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 2388a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mWifiLogProto.connectToNetworkNotificationCount = notificationCountArray; 2389a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 2390a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen /** 2391a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * Convert the SparseIntArray of "Connect to Network" notification types and counts to 2392a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * proto's repeated IntKeyVal array. 2393a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen */ 2394a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen ConnectToNetworkNotificationAndActionCount[] notificationActionCountArray = 2395a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen new ConnectToNetworkNotificationAndActionCount[ 2396a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mConnectToNetworkNotificationActionCount.size()]; 2397a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen for (int i = 0; i < mConnectToNetworkNotificationActionCount.size(); i++) { 2398a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen ConnectToNetworkNotificationAndActionCount keyVal = 2399a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen new ConnectToNetworkNotificationAndActionCount(); 2400a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen int key = mConnectToNetworkNotificationActionCount.keyAt(i); 2401a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.notification = key / CONNECT_TO_NETWORK_NOTIFICATION_ACTION_KEY_MULTIPLIER; 2402a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.action = key % CONNECT_TO_NETWORK_NOTIFICATION_ACTION_KEY_MULTIPLIER; 2403a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.recommender = 2404a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen ConnectToNetworkNotificationAndActionCount.RECOMMENDER_OPEN; 2405a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen keyVal.count = mConnectToNetworkNotificationActionCount.valueAt(i); 2406a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen notificationActionCountArray[i] = keyVal; 2407a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen } 2408a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mWifiLogProto.connectToNetworkNotificationActionCount = notificationActionCountArray; 2409a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen 2410a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mWifiLogProto.openNetworkRecommenderBlacklistSize = 2411a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mOpenNetworkRecommenderBlacklistSize; 2412a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mWifiLogProto.isWifiNetworksAvailableNotificationOn = 2413a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mIsWifiNetworksAvailableNotificationOn; 2414a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mWifiLogProto.numOpenNetworkRecommendationUpdates = 2415a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mNumOpenNetworkRecommendationUpdates; 2416a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mWifiLogProto.numOpenNetworkConnectMessageFailedToSend = 2417a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mNumOpenNetworkConnectMessageFailedToSend; 24189831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen 24199831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mWifiLogProto.observedHotspotR1ApsInScanHistogram = 24209831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen makeNumConnectableNetworksBucketArray(mObservedHotspotR1ApInScanHistogram); 24219831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mWifiLogProto.observedHotspotR2ApsInScanHistogram = 24229831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen makeNumConnectableNetworksBucketArray(mObservedHotspotR2ApInScanHistogram); 24239831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mWifiLogProto.observedHotspotR1EssInScanHistogram = 24249831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen makeNumConnectableNetworksBucketArray(mObservedHotspotR1EssInScanHistogram); 24259831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mWifiLogProto.observedHotspotR2EssInScanHistogram = 24269831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen makeNumConnectableNetworksBucketArray(mObservedHotspotR2EssInScanHistogram); 24279831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mWifiLogProto.observedHotspotR1ApsPerEssInScanHistogram = 24289831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen makeNumConnectableNetworksBucketArray( 24299831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR1ApsPerEssInScanHistogram); 24309831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mWifiLogProto.observedHotspotR2ApsPerEssInScanHistogram = 24319831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen makeNumConnectableNetworksBucketArray( 24329831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR2ApsPerEssInScanHistogram); 243305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh 2434973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen mWifiLogProto.observed80211McSupportingApsInScanHistogram = 2435973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen makeNumConnectableNetworksBucketArray(mObserved80211mcApInScanHistogram); 2436973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen 243705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh if (mSoftApEventListTethered.size() > 0) { 243805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mWifiLogProto.softApConnectedClientsEventsTethered = 243905ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mSoftApEventListTethered.toArray( 244005ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mWifiLogProto.softApConnectedClientsEventsTethered); 244105ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 244205ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh if (mSoftApEventListLocalOnly.size() > 0) { 244305ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mWifiLogProto.softApConnectedClientsEventsLocalOnly = 244405ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mSoftApEventListLocalOnly.toArray( 244505ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mWifiLogProto.softApConnectedClientsEventsLocalOnly); 244605ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh } 244762344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim 244862344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWifiLogProto.wpsMetrics = mWpsMetrics; 2449fb165562c8c77a9e5e2452f33aedb8e4369e7a9bSiddharth Ray mWifiLogProto.wifiPowerStats = mWifiPowerMetrics.buildProto(); 245012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWifiLogProto.wifiWakeStats = mWifiWakeMetrics.buildProto(); 245128a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim mWifiLogProto.isMacRandomizationOn = mIsMacRandomizationOn; 2452ebd663ff7027bbf19c4a5ed2bfb71b91bb925cd6Glen Kuhne } 24531b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne } 24542532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne 2455a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass /** Sets the scoring experiment id to current value */ 2456a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass private void consolidateScoringParams() { 2457a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass synchronized (mLock) { 2458a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass if (mScoringParams != null) { 2459a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass int experimentIdentifier = mScoringParams.getExperimentIdentifier(); 2460a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass if (experimentIdentifier == 0) { 2461a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass mWifiLogProto.scoreExperimentId = ""; 2462a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass } else { 2463a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass mWifiLogProto.scoreExperimentId = "x" + experimentIdentifier; 2464a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass } 2465a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass } 2466a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass } 2467a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass } 2468a332e6d65efbee41e08b86d56394db4431ca6e86Michael Plass 246908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private WifiMetricsProto.NumConnectableNetworksBucket[] makeNumConnectableNetworksBucketArray( 247008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne SparseIntArray sia) { 247108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne WifiMetricsProto.NumConnectableNetworksBucket[] array = 247208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne new WifiMetricsProto.NumConnectableNetworksBucket[sia.size()]; 247308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne for (int i = 0; i < sia.size(); i++) { 247408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne WifiMetricsProto.NumConnectableNetworksBucket keyVal = 247508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne new WifiMetricsProto.NumConnectableNetworksBucket(); 247608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne keyVal.numConnectableNetworks = sia.keyAt(i); 247708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne keyVal.count = sia.valueAt(i); 247808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne array[i] = keyVal; 247908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 248008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne return array; 248108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 248208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne 24832532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne /** 2484a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * Clear all WifiMetrics, except for currentConnectionEvent and Open Network Notification 2485a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen * feature enabled state, blacklist size. 24862532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne */ 24872532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne private void clear() { 24882532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne synchronized (mLock) { 24892532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mConnectionEventList.clear(); 24902532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne if (mCurrentConnectionEvent != null) { 24912532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mConnectionEventList.add(mCurrentConnectionEvent); 24922532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 24932532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mScanReturnEntries.clear(); 24942532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mWifiSystemStateEntries.clear(); 2495107f6ce4a5f6017ce336d9b60650ddbe28bee965Glen Kuhne mRecordStartTimeSec = mClock.getElapsedSinceBootMillis() / 1000; 249604012eb3e692202b25095f7afc1eda40b63e3e0fxshu mRssiPollCountsMap.clear(); 24975cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mRssiDeltaCounts.clear(); 2498f11073c03746f1c79e6a316884bc59574b562a8bmukesh agrawal mWifiAlertReasonCounts.clear(); 24994569ebc2277f35b9bd1baa98194f963388e0c4caSohani Rao mWifiScoreCounts.clear(); 25002532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne mWifiLogProto.clear(); 25015cab82f2e70c360de79e6ca50da25c7657ed345dGlen Kuhne mScanResultRssiTimestampMillis = -1; 250244ce135519e22d8c4746abac21c14111f1ce8667Rebecca Silberstein mSoftApManagerReturnCodeCounts.clear(); 250346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mStaEventList.clear(); 2504910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen mWifiAwareMetrics.clear(); 250502e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen mRttMetrics.clear(); 250608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mTotalSsidsInScanHistogram.clear(); 250708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mTotalBssidsInScanHistogram.clear(); 250808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableOpenSsidsInScanHistogram.clear(); 250908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableOpenBssidsInScanHistogram.clear(); 251008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableSavedSsidsInScanHistogram.clear(); 251108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableSavedBssidsInScanHistogram.clear(); 251208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableOpenOrSavedSsidsInScanHistogram.clear(); 251308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableOpenOrSavedBssidsInScanHistogram.clear(); 251408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableSavedPasspointProviderProfilesInScanHistogram.clear(); 251508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne mAvailableSavedPasspointProviderBssidsInScanHistogram.clear(); 2516a2dae3436431f3fe2ac79ad087fe62f6fcda8ad7Mehdi Alizadeh mPnoScanMetrics.clear(); 2517a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mConnectToNetworkNotificationCount.clear(); 2518a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mConnectToNetworkNotificationActionCount.clear(); 2519a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mNumOpenNetworkRecommendationUpdates = 0; 2520a88242633e76bf3a070cfcc0a018ff7f9806f1f4Stephen Chen mNumOpenNetworkConnectMessageFailedToSend = 0; 25219831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR1ApInScanHistogram.clear(); 25229831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR2ApInScanHistogram.clear(); 25239831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR1EssInScanHistogram.clear(); 25249831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR2EssInScanHistogram.clear(); 25259831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR1ApsPerEssInScanHistogram.clear(); 25269831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen mObservedHotspotR2ApsPerEssInScanHistogram.clear(); 252705ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mSoftApEventListTethered.clear(); 252805ded0fe9fa0a94a16b55b1d6f4d45851988b928Mehdi Alizadeh mSoftApEventListLocalOnly.clear(); 252962344ca195973550de0954badfd6c56fe3dd119bJong Wook Kim mWpsMetrics.clear(); 253012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach mWifiWakeMetrics.clear(); 2531973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen mObserved80211mcApInScanHistogram.clear(); 25322532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 25332532a24b254d724a9b6771d327dc410b32b18602Glen Kuhne } 2534ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne 2535ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne /** 2536ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne * Set screen state (On/Off) 2537ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne */ 2538ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne public void setScreenState(boolean screenOn) { 2539ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne synchronized (mLock) { 2540ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mScreenOn = screenOn; 2541ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne } 2542ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne } 2543ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne 2544ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne /** 2545ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne * Set wifi state (WIFI_UNKNOWN, WIFI_DISABLED, WIFI_DISCONNECTED, WIFI_ASSOCIATED) 2546ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne */ 2547ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne public void setWifiState(int wifiState) { 2548ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne synchronized (mLock) { 2549ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne mWifiState = wifiState; 2550e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass mWifiWins = (wifiState == WifiMetricsProto.WifiLog.WIFI_ASSOCIATED); 2551ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne } 2552ea6fdf9a58f8ee83fba32c221331f10f9ec941e9Glen Kuhne } 255346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 255446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 255546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Message handler for interesting WifiMonitor messages. Generates StaEvents 255646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 255746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private void processMessage(Message msg) { 255846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne StaEvent event = new StaEvent(); 255946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne boolean logEvent = true; 256046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne switch (msg.what) { 256146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiMonitor.ASSOCIATION_REJECTION_EVENT: 256246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = StaEvent.TYPE_ASSOCIATION_REJECTION_EVENT; 256346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.associationTimedOut = msg.arg1 > 0 ? true : false; 256446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.status = msg.arg2; 256546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 256646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiMonitor.AUTHENTICATION_FAILURE_EVENT: 256746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = StaEvent.TYPE_AUTHENTICATION_FAILURE_EVENT; 2568b6a730ce63a9a864adaea6ba1bee827444be52a5Ahmed ElArabawy switch (msg.arg1) { 256946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiManager.ERROR_AUTH_FAILURE_NONE: 257046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.authFailureReason = StaEvent.AUTH_FAILURE_NONE; 257146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 257246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiManager.ERROR_AUTH_FAILURE_TIMEOUT: 257346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.authFailureReason = StaEvent.AUTH_FAILURE_TIMEOUT; 257446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 257546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiManager.ERROR_AUTH_FAILURE_WRONG_PSWD: 257646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.authFailureReason = StaEvent.AUTH_FAILURE_WRONG_PSWD; 257746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 257846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiManager.ERROR_AUTH_FAILURE_EAP_FAILURE: 257946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.authFailureReason = StaEvent.AUTH_FAILURE_EAP_FAILURE; 258046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 258146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 258246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 258346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 258446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 258546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiMonitor.NETWORK_CONNECTION_EVENT: 258646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = StaEvent.TYPE_NETWORK_CONNECTION_EVENT; 258746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 258846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiMonitor.NETWORK_DISCONNECTION_EVENT: 258946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = StaEvent.TYPE_NETWORK_DISCONNECTION_EVENT; 259046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.reason = msg.arg2; 259146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.localGen = msg.arg1 == 0 ? false : true; 259246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 259346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT: 259446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne logEvent = false; 259546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne StateChangeResult stateChangeResult = (StateChangeResult) msg.obj; 259646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mSupplicantStateChangeBitmask |= supplicantStateToBit(stateChangeResult.state); 259746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 259846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiStateMachine.CMD_ASSOCIATED_BSSID: 259946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = StaEvent.TYPE_CMD_ASSOCIATED_BSSID; 260046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 260146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case WifiStateMachine.CMD_TARGET_BSSID: 260246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = StaEvent.TYPE_CMD_TARGET_BSSID; 260346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 260446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 260546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return; 260646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 260746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (logEvent) { 260846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne addStaEvent(event); 260946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 261046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 261146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 261246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Log a StaEvent from WifiStateMachine. The StaEvent must not be one of the supplicant 261346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * generated event types, which are logged through 'sendMessage' 261446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param type StaEvent.EventType describing the event 261546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 261646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public void logStaEvent(int type) { 261746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne logStaEvent(type, StaEvent.DISCONNECT_UNKNOWN, null); 261846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 261946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 262046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Log a StaEvent from WifiStateMachine. The StaEvent must not be one of the supplicant 262146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * generated event types, which are logged through 'sendMessage' 262246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param type StaEvent.EventType describing the event 262346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param config WifiConfiguration for a framework initiated connection attempt 262446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 262546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public void logStaEvent(int type, WifiConfiguration config) { 262646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne logStaEvent(type, StaEvent.DISCONNECT_UNKNOWN, config); 262746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 262846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 262946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Log a StaEvent from WifiStateMachine. The StaEvent must not be one of the supplicant 263046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * generated event types, which are logged through 'sendMessage' 263146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param type StaEvent.EventType describing the event 263246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param frameworkDisconnectReason StaEvent.FrameworkDisconnectReason explaining why framework 263346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * initiated a FRAMEWORK_DISCONNECT 263446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 263546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public void logStaEvent(int type, int frameworkDisconnectReason) { 263646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne logStaEvent(type, frameworkDisconnectReason, null); 263746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 263846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 263946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Log a StaEvent from WifiStateMachine. The StaEvent must not be one of the supplicant 264046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * generated event types, which are logged through 'sendMessage' 264146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param type StaEvent.EventType describing the event 264246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param frameworkDisconnectReason StaEvent.FrameworkDisconnectReason explaining why framework 264346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * initiated a FRAMEWORK_DISCONNECT 264446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * @param config WifiConfiguration for a framework initiated connection attempt 264546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 264646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public void logStaEvent(int type, int frameworkDisconnectReason, WifiConfiguration config) { 264746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne switch (type) { 264846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_IP_CONFIGURATION_SUCCESSFUL: 264946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_IP_CONFIGURATION_LOST: 265046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_IP_REACHABILITY_LOST: 265146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_START_CONNECT: 265246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_START_ROAM: 265346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CONNECT_NETWORK: 265446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK: 265546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_FRAMEWORK_DISCONNECT: 2656e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass case StaEvent.TYPE_SCORE_BREACH: 265728a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim case StaEvent.TYPE_MAC_CHANGE: 265846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 265946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 266046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne Log.e(TAG, "Unknown StaEvent:" + type); 266146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return; 266246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 266346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne StaEvent event = new StaEvent(); 266446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.type = type; 266546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (frameworkDisconnectReason != StaEvent.DISCONNECT_UNKNOWN) { 266646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.frameworkDisconnectReason = frameworkDisconnectReason; 266746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 266846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.configInfo = createConfigInfo(config); 266946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne addStaEvent(event); 267046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 267146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 267246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private void addStaEvent(StaEvent staEvent) { 267346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne staEvent.startTimeMillis = mClock.getElapsedSinceBootMillis(); 267446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne staEvent.lastRssi = mLastPollRssi; 267546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne staEvent.lastFreq = mLastPollFreq; 267646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne staEvent.lastLinkSpeed = mLastPollLinkSpeed; 267746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne staEvent.supplicantStateChangesBitmask = mSupplicantStateChangeBitmask; 2678e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass staEvent.lastScore = mLastScore; 267946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mSupplicantStateChangeBitmask = 0; 268046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mLastPollRssi = -127; 268146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mLastPollFreq = -1; 268246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne mLastPollLinkSpeed = -1; 2683e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass mLastScore = -1; 2684d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne mStaEventList.add(new StaEventWithTime(staEvent, mClock.getWallClockMillis())); 268546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne // Prune StaEventList if it gets too long 268646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (mStaEventList.size() > MAX_STA_EVENTS) mStaEventList.remove(); 268746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 268846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 268946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private ConfigInfo createConfigInfo(WifiConfiguration config) { 269046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (config == null) return null; 269146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne ConfigInfo info = new ConfigInfo(); 269246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.allowedKeyManagement = bitSetToInt(config.allowedKeyManagement); 269346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.allowedProtocols = bitSetToInt(config.allowedProtocols); 269446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.allowedAuthAlgorithms = bitSetToInt(config.allowedAuthAlgorithms); 269546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.allowedPairwiseCiphers = bitSetToInt(config.allowedPairwiseCiphers); 269646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.allowedGroupCiphers = bitSetToInt(config.allowedGroupCiphers); 269746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.hiddenSsid = config.hiddenSSID; 269846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.isPasspoint = config.isPasspoint(); 269946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.isEphemeral = config.isEphemeral(); 270046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.hasEverConnected = config.getNetworkSelectionStatus().getHasEverConnected(); 270146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne ScanResult candidate = config.getNetworkSelectionStatus().getCandidate(); 270246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (candidate != null) { 270346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.scanRssi = candidate.level; 270446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne info.scanFreq = candidate.frequency; 270546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 270646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return info; 270746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 270846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 270946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public Handler getHandler() { 271046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return mHandler; 271146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 271246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 2713910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen public WifiAwareMetrics getWifiAwareMetrics() { 2714910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen return mWifiAwareMetrics; 2715910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen } 2716910fdc720f0bf62b5529cb37a5f001ae585a5c59Etan Cohen 271712d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach public WifiWakeMetrics getWakeupMetrics() { 271812d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach return mWifiWakeMetrics; 271912d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach } 272012d31e7fea8e5c17dddc0ab433c26c31a3bf2550Eric Schwarzenbach 272102e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen public RttMetrics getRttMetrics() { 272202e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen return mRttMetrics; 272302e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen } 272402e1422fc015b3dc38f8afdfb8e1aec95881fefcEtan Cohen 272546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne // Rather than generate a StaEvent for each SUPPLICANT_STATE_CHANGE, cache these in a bitmask 272646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne // and attach it to the next event which is generated. 272746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private int mSupplicantStateChangeBitmask = 0; 272846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 272946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 273046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Converts a SupplicantState value to a single bit, with position defined by 273146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * {@code StaEvent.SupplicantState} 273246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 273346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public static int supplicantStateToBit(SupplicantState state) { 273446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne switch(state) { 273546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case DISCONNECTED: 273646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_DISCONNECTED; 273746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case INTERFACE_DISABLED: 273846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_INTERFACE_DISABLED; 273946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case INACTIVE: 274046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_INACTIVE; 274146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case SCANNING: 274246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_SCANNING; 274346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case AUTHENTICATING: 274446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_AUTHENTICATING; 274546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case ASSOCIATING: 274646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_ASSOCIATING; 274746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case ASSOCIATED: 274846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_ASSOCIATED; 274946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case FOUR_WAY_HANDSHAKE: 275046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_FOUR_WAY_HANDSHAKE; 275146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case GROUP_HANDSHAKE: 275246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_GROUP_HANDSHAKE; 275346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case COMPLETED: 275446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_COMPLETED; 275546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case DORMANT: 275646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_DORMANT; 275746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case UNINITIALIZED: 275846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_UNINITIALIZED; 275946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case INVALID: 276046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 1 << StaEvent.STATE_INVALID; 276146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 276246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne Log.wtf(TAG, "Got unknown supplicant state: " + state.ordinal()); 276346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return 0; 276446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 276546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 276646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 276746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private static String supplicantStateChangesBitmaskToString(int mask) { 276846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne StringBuilder sb = new StringBuilder(); 2769d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("supplicantStateChangeEvents: {"); 277046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_DISCONNECTED)) > 0) sb.append(" DISCONNECTED"); 277146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_INTERFACE_DISABLED)) > 0) sb.append(" INTERFACE_DISABLED"); 277246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_INACTIVE)) > 0) sb.append(" INACTIVE"); 277346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_SCANNING)) > 0) sb.append(" SCANNING"); 277446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_AUTHENTICATING)) > 0) sb.append(" AUTHENTICATING"); 277546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_ASSOCIATING)) > 0) sb.append(" ASSOCIATING"); 277646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_ASSOCIATED)) > 0) sb.append(" ASSOCIATED"); 277746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_FOUR_WAY_HANDSHAKE)) > 0) sb.append(" FOUR_WAY_HANDSHAKE"); 277846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_GROUP_HANDSHAKE)) > 0) sb.append(" GROUP_HANDSHAKE"); 277946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_COMPLETED)) > 0) sb.append(" COMPLETED"); 278046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_DORMANT)) > 0) sb.append(" DORMANT"); 278146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_UNINITIALIZED)) > 0) sb.append(" UNINITIALIZED"); 278246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if ((mask & (1 << StaEvent.STATE_INVALID)) > 0) sb.append(" INVALID"); 278346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne sb.append("}"); 278446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return sb.toString(); 278546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 278646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 278746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 278846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Returns a human readable string from a Sta Event. Only adds information relevant to the event 278946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * type. 279046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 279146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne public static String staEventToString(StaEvent event) { 279246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (event == null) return "<NULL>"; 279346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne StringBuilder sb = new StringBuilder(); 279446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne switch (event.type) { 279546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_ASSOCIATION_REJECTION_EVENT: 2796d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("ASSOCIATION_REJECTION_EVENT") 279746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" timedOut=").append(event.associationTimedOut) 279846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" status=").append(event.status).append(":") 279946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(ISupplicantStaIfaceCallback.StatusCode.toString(event.status)); 280046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 280146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_AUTHENTICATION_FAILURE_EVENT: 2802d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("AUTHENTICATION_FAILURE_EVENT reason=").append(event.authFailureReason) 280346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(":").append(authFailureReasonToString(event.authFailureReason)); 280446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 280546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_NETWORK_CONNECTION_EVENT: 2806d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("NETWORK_CONNECTION_EVENT"); 280746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 280846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_NETWORK_DISCONNECTION_EVENT: 2809d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("NETWORK_DISCONNECTION_EVENT") 281046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" local_gen=").append(event.localGen) 281146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" reason=").append(event.reason).append(":") 281246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(ISupplicantStaIfaceCallback.ReasonCode.toString( 281346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne (event.reason >= 0 ? event.reason : -1 * event.reason))); 281446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 281546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_ASSOCIATED_BSSID: 2816d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_ASSOCIATED_BSSID"); 281746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 281846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_IP_CONFIGURATION_SUCCESSFUL: 2819d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_IP_CONFIGURATION_SUCCESSFUL"); 282046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 282146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_IP_CONFIGURATION_LOST: 2822d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_IP_CONFIGURATION_LOST"); 282346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 282446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_IP_REACHABILITY_LOST: 2825d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_IP_REACHABILITY_LOST"); 282646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 282746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_TARGET_BSSID: 2828d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_TARGET_BSSID"); 282946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 283046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_START_CONNECT: 2831d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_START_CONNECT"); 283246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 283346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CMD_START_ROAM: 2834d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CMD_START_ROAM"); 283546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 283646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_CONNECT_NETWORK: 2837d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("CONNECT_NETWORK"); 283846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 283946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_NETWORK_AGENT_VALID_NETWORK: 2840d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("NETWORK_AGENT_VALID_NETWORK"); 284146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 284246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.TYPE_FRAMEWORK_DISCONNECT: 2843d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append("FRAMEWORK_DISCONNECT") 284446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" reason=") 284546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(frameworkDisconnectReasonToString(event.frameworkDisconnectReason)); 284646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 2847e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass case StaEvent.TYPE_SCORE_BREACH: 2848e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass sb.append("SCORE_BREACH"); 2849e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass break; 285028a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim case StaEvent.TYPE_MAC_CHANGE: 285128a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim sb.append("MAC_CHANGE"); 285228a6c752451084392a71b3c70d984ef9e066d4e2Jong Wook Kim break; 285346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 285446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne sb.append("UNKNOWN " + event.type + ":"); 285546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne break; 285646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 285746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (event.lastRssi != -127) sb.append(" lastRssi=").append(event.lastRssi); 285846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (event.lastFreq != -1) sb.append(" lastFreq=").append(event.lastFreq); 285946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (event.lastLinkSpeed != -1) sb.append(" lastLinkSpeed=").append(event.lastLinkSpeed); 2860e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass if (event.lastScore != -1) sb.append(" lastScore=").append(event.lastScore); 286146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (event.supplicantStateChangesBitmask != 0) { 2862d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append(", ").append(supplicantStateChangesBitmaskToString( 286346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne event.supplicantStateChangesBitmask)); 286446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 286546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne if (event.configInfo != null) { 2866d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append(", ").append(configInfoToString(event.configInfo)); 286746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 286846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 286946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return sb.toString(); 287046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 287146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 287246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private static String authFailureReasonToString(int authFailureReason) { 287346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne switch (authFailureReason) { 287446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.AUTH_FAILURE_NONE: 287546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "ERROR_AUTH_FAILURE_NONE"; 287646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.AUTH_FAILURE_TIMEOUT: 287746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "ERROR_AUTH_FAILURE_TIMEOUT"; 287846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.AUTH_FAILURE_WRONG_PSWD: 287946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "ERROR_AUTH_FAILURE_WRONG_PSWD"; 288046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.AUTH_FAILURE_EAP_FAILURE: 288146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "ERROR_AUTH_FAILURE_EAP_FAILURE"; 288246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 288346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return ""; 288446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 288546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 288646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 288746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private static String frameworkDisconnectReasonToString(int frameworkDisconnectReason) { 288846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne switch (frameworkDisconnectReason) { 288946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.DISCONNECT_API: 289046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_API"; 289146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.DISCONNECT_GENERIC: 289246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_GENERIC"; 289346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.DISCONNECT_UNWANTED: 289446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_UNWANTED"; 289546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.DISCONNECT_ROAM_WATCHDOG_TIMER: 289646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_ROAM_WATCHDOG_TIMER"; 289746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.DISCONNECT_P2P_DISCONNECT_WIFI_REQUEST: 289846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_P2P_DISCONNECT_WIFI_REQUEST"; 289946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne case StaEvent.DISCONNECT_RESET_SIM_NETWORKS: 290046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_RESET_SIM_NETWORKS"; 290146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne default: 290246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return "DISCONNECT_UNKNOWN=" + frameworkDisconnectReason; 290346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 290446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 290546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 290646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private static String configInfoToString(ConfigInfo info) { 290746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne StringBuilder sb = new StringBuilder(); 290846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne sb.append("ConfigInfo:") 290946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" allowed_key_management=").append(info.allowedKeyManagement) 291046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" allowed_protocols=").append(info.allowedProtocols) 291146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" allowed_auth_algorithms=").append(info.allowedAuthAlgorithms) 291246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" allowed_pairwise_ciphers=").append(info.allowedPairwiseCiphers) 291346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" allowed_group_ciphers=").append(info.allowedGroupCiphers) 291446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" hidden_ssid=").append(info.hiddenSsid) 291546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" is_passpoint=").append(info.isPasspoint) 291646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" is_ephemeral=").append(info.isEphemeral) 291746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" has_ever_connected=").append(info.hasEverConnected) 291846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" scan_rssi=").append(info.scanRssi) 291946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne .append(" scan_freq=").append(info.scanFreq); 292046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return sb.toString(); 292146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 292246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 2923e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass public static final int MAX_STA_EVENTS = 768; 2924d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne private LinkedList<StaEventWithTime> mStaEventList = new LinkedList<StaEventWithTime>(); 292546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private int mLastPollRssi = -127; 292646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private int mLastPollLinkSpeed = -1; 292746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private int mLastPollFreq = -1; 2928e6fb5b05c294b853f768caa93de509b4afa8adefMichael Plass private int mLastScore = -1; 292946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne 293046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne /** 293146c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne * Converts the first 31 bits of a BitSet to a little endian int 293246c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne */ 293346c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne private static int bitSetToInt(BitSet bits) { 293446c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne int value = 0; 293546c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne int nBits = bits.length() < 31 ? bits.length() : 31; 293646c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne for (int i = 0; i < nBits; i++) { 293746c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne value += bits.get(i) ? (1 << i) : 0; 293846c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 293946c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne return value; 294046c84f9fd984cc4b67f5252e30bce7f756be558cGlen Kuhne } 294108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private void incrementSsid(SparseIntArray sia, int element) { 294208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne increment(sia, Math.min(element, MAX_CONNECTABLE_SSID_NETWORK_BUCKET)); 294308631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 294408631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private void incrementBssid(SparseIntArray sia, int element) { 294508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne increment(sia, Math.min(element, MAX_CONNECTABLE_BSSID_NETWORK_BUCKET)); 294608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 294708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private void incrementTotalScanResults(SparseIntArray sia, int element) { 294808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne increment(sia, Math.min(element, MAX_TOTAL_SCAN_RESULTS_BUCKET)); 294908631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 295008631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private void incrementTotalScanSsids(SparseIntArray sia, int element) { 295108631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne increment(sia, Math.min(element, MAX_TOTAL_SCAN_RESULT_SSIDS_BUCKET)); 295208631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 29539831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private void incrementTotalPasspointAps(SparseIntArray sia, int element) { 29549831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen increment(sia, Math.min(element, MAX_TOTAL_PASSPOINT_APS_BUCKET)); 29559831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 29569831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private void incrementTotalUniquePasspointEss(SparseIntArray sia, int element) { 29579831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen increment(sia, Math.min(element, MAX_TOTAL_PASSPOINT_UNIQUE_ESS_BUCKET)); 29589831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 29599831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen private void incrementPasspointPerUniqueEss(SparseIntArray sia, int element) { 29609831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen increment(sia, Math.min(element, MAX_PASSPOINT_APS_PER_UNIQUE_ESS_BUCKET)); 29619831c1a04929d8d2cadbebbc1e6843895653bd4cEtan Cohen } 2962973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen private void increment80211mcAps(SparseIntArray sia, int element) { 2963973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen increment(sia, Math.min(element, MAX_TOTAL_80211MC_APS_BUCKET)); 2964973e49552e5536a5accc391f7760aaafa694df6fEtan Cohen } 296508631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne private void increment(SparseIntArray sia, int element) { 296608631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne int count = sia.get(element); 296708631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne sia.put(element, count + 1); 296808631913ff641047b1d56288bd194a1fa7c390e1Glen Kuhne } 2969d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne 2970d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne private static class StaEventWithTime { 2971d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne public StaEvent staEvent; 2972d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne public long wallClockMillis; 2973d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne 2974d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne StaEventWithTime(StaEvent event, long wallClockMillis) { 2975d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne staEvent = event; 2976d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne this.wallClockMillis = wallClockMillis; 2977d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne } 2978d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne 2979d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne public String toString() { 2980d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne StringBuilder sb = new StringBuilder(); 2981d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne Calendar c = Calendar.getInstance(); 2982d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne c.setTimeInMillis(wallClockMillis); 2983d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne if (wallClockMillis != 0) { 2984d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append(String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c)); 2985d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne } else { 2986d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append(" "); 2987d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne } 2988d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne sb.append(" ").append(staEventToString(staEvent)); 2989d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne return sb.toString(); 2990d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne } 2991d582c6dfdbb3989b8b761a6cba608a0a3ce35df2Glen Kuhne } 29921b067831bbff14f8e7a99b927b69f714d1b03448Glen Kuhne} 2993