ScanResult.java revision 63edd98d2eb744cc78dc3a3f8ec1ce7e6164d69d
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net.wifi; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 20e4ce619880e831992b005c17dfabb7800994d0c7Jeff Davidsonimport android.os.Parcelable; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes information about a detected access point. In addition 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the attributes described here, the supplicant keeps track of 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@code quality}, {@code noise}, and {@code maxbitrate} attributes, 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but does not currently report them to external clients. 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ScanResult implements Parcelable { 294eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 304eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * The network name. 314eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 33b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 344eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 354eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Ascii encoded SSID. This will replace SSID when we deprecate it. @hide 364eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 37b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public WifiSsid wifiSsid; 38b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 394eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 404eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * The address of the access point. 414eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes the authentication, key management, and encryption schemes 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supported by the access point. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String capabilities; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 49e4ce619880e831992b005c17dfabb7800994d0c7Jeff Davidson * The detected signal level in dBm, also known as the RSSI. 50e4ce619880e831992b005c17dfabb7800994d0c7Jeff Davidson * 51e4ce619880e831992b005c17dfabb7800994d0c7Jeff Davidson * <p>Use {@link android.net.wifi.WifiManager#calculateSignalLevel} to convert this number into 52e4ce619880e831992b005c17dfabb7800994d0c7Jeff Davidson * an absolute signal level which can be displayed to a user. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int level; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The frequency in MHz of the channel over which the client is communicating 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the access point. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int frequency; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6202b115b2d8a889bcc04594802ffcbc880644012cVinit Deshpande * timestamp in microseconds (since boot) when 6306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev * this result was last seen. 6406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev */ 650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public long timestamp; 660451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 670451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** 687c3606c103e95d3991267cca2592402a68779cafvandwalle * Timestamp representing date when this result was last seen, in milliseconds from 1970 697c3606c103e95d3991267cca2592402a68779cafvandwalle * {@hide} 707c3606c103e95d3991267cca2592402a68779cafvandwalle */ 717c3606c103e95d3991267cca2592402a68779cafvandwalle public long seen; 727c3606c103e95d3991267cca2592402a68779cafvandwalle 734eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 7463edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle * If the scan result is a valid autojoin candidate 7563edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle * {@hide} 7663edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle */ 7763edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle public int isAutoJoinCandidate; 7863edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle 7963edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle /** 804eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 814eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Update RSSI of the scan result 824eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @param previousRSSI 834eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @param previousSeen 844eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @param maxAge 854eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 864eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public void averageRssi(int previousRssi, long previousSeen, int maxAge) { 874eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 884eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle if (seen == 0) { 894eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle seen = System.currentTimeMillis(); 904eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle } 914eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle long age = seen - previousSeen; 924eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 934eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle if (previousSeen > 0 && age > 0 && age < maxAge/2) { 944eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle // Average the RSSI with previously seen instances of this scan result 954eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle double alpha = 0.5 - (double) age / (double) maxAge; 964eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle level = (int) ((double) level * (1 - alpha) + (double) previousRssi * alpha); 974eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle } 984eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle } 994eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 100f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle /** @hide */ 101f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle public static final int ENABLED = 0; 102f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle /** @hide */ 103f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle public static final int AUTO_ROAM_DISABLED = 16; 104f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle /** @hide */ 105f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle public static final int AUTO_JOIN_DISABLED = 32; 106f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle /** @hide */ 107154b2cf6bbb99ee258b289846183172139a87dbavandwalle public static final int AUTHENTICATION_ERROR = 128; 108f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle 109f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle /** 110f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle * Status: indicating join status 111f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle * @hide 112f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle */ 113612519db40db1bad7597ab207f14c9b5b5524a93vandwalle public int autoJoinStatus; 114612519db40db1bad7597ab207f14c9b5b5524a93vandwalle 115612519db40db1bad7597ab207f14c9b5b5524a93vandwalle /** 116176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle * num IP configuration failures 117176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle * @hide 118176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle */ 119176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle public int numIpConfigFailures; 120176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle 121176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle /** 122612519db40db1bad7597ab207f14c9b5b5524a93vandwalle * @hide 123612519db40db1bad7597ab207f14c9b5b5524a93vandwalle * Last time we blacklisted the ScanResult 124612519db40db1bad7597ab207f14c9b5b5524a93vandwalle */ 125612519db40db1bad7597ab207f14c9b5b5524a93vandwalle public long blackListTimestamp; 126612519db40db1bad7597ab207f14c9b5b5524a93vandwalle 127612519db40db1bad7597ab207f14c9b5b5524a93vandwalle /** @hide **/ 128612519db40db1bad7597ab207f14c9b5b5524a93vandwalle public void setAutoJoinStatus(int status) { 129612519db40db1bad7597ab207f14c9b5b5524a93vandwalle if (status < 0) status = 0; 130612519db40db1bad7597ab207f14c9b5b5524a93vandwalle if (status == 0) { 131612519db40db1bad7597ab207f14c9b5b5524a93vandwalle blackListTimestamp = 0; 132612519db40db1bad7597ab207f14c9b5b5524a93vandwalle } else if (status > autoJoinStatus) { 133612519db40db1bad7597ab207f14c9b5b5524a93vandwalle blackListTimestamp = System.currentTimeMillis(); 134612519db40db1bad7597ab207f14c9b5b5524a93vandwalle } 135612519db40db1bad7597ab207f14c9b5b5524a93vandwalle autoJoinStatus = status; 136612519db40db1bad7597ab207f14c9b5b5524a93vandwalle } 1377c3606c103e95d3991267cca2592402a68779cafvandwalle 1387c3606c103e95d3991267cca2592402a68779cafvandwalle /** 1394eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Status: indicating the scan result is not a result 1404eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * that is part of user's saved configurations 1414eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 1424eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 1434eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public boolean untrusted; 1444eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 1454eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 1464eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Number of time we connected to it 1474eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 1484eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 1494eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public int numConnection; 1504eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 1514eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 1524eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * Number of time autojoin used it 1534eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 1544eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 1554eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public int numUsage; 1564eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 1574eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 1580451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * The approximate distance to the AP in centimeter, if available. Else 1590451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@link UNSPECIFIED}. 1600451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@hide} 1610451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt */ 1620451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public int distanceCm; 1630451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 1640451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** 1650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * The standard deviation of the distance to the AP, if available. 1660451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * Else {@link UNSPECIFIED}. 1670451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@hide} 1680451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt */ 1690451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public int distanceSdCm; 1700451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 1710451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** 1720451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@hide} 1730451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt */ 1740451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public final static int UNSPECIFIED = -1; 175111fa0274d1d6620f9634783585387f3b773949evandwalle /** 176111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 177111fa0274d1d6620f9634783585387f3b773949evandwalle */ 178111fa0274d1d6620f9634783585387f3b773949evandwalle public boolean is24GHz() { 1794eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle return ScanResult.is24GHz(frequency); 180111fa0274d1d6620f9634783585387f3b773949evandwalle } 181111fa0274d1d6620f9634783585387f3b773949evandwalle 182111fa0274d1d6620f9634783585387f3b773949evandwalle /** 183111fa0274d1d6620f9634783585387f3b773949evandwalle * @hide 184111fa0274d1d6620f9634783585387f3b773949evandwalle * TODO: makes real freq boundaries 185111fa0274d1d6620f9634783585387f3b773949evandwalle */ 1864eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public static boolean is24GHz(int freq) { 1874eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle return freq > 2400 && freq < 2500; 1884eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle } 1894eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 1904eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 1914eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 1924eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 193111fa0274d1d6620f9634783585387f3b773949evandwalle public boolean is5GHz() { 194ec5a901ea88109f2bd5ac0a635b48176135ed32fvandwalle return ScanResult.is5GHz(frequency); 1954eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle } 1964eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle 1974eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle /** 1984eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * @hide 1994eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle * TODO: makes real freq boundaries 2004eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle */ 2014eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle public static boolean is5GHz(int freq) { 2024eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle return freq > 4900 && freq < 5900; 203111fa0274d1d6620f9634783585387f3b773949evandwalle } 20406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev 20555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande /** information element from beacon 20655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande * @hide 20755027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande */ 20855027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande public static class InformationElement { 20955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande public int id; 21055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande public byte[] bytes; 211ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande 212ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande public InformationElement() { 213ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande } 214ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande 215ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande public InformationElement(InformationElement rhs) { 216ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande this.id = rhs.id; 217ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande this.bytes = rhs.bytes.clone(); 218ea676a0e51504aa53dff9cbe64085658987703b2Vinit Deshpande } 21955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande } 22055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande 22155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande /** information elements found in the beacon 22255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande * @hide 22355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande */ 22455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande public InformationElement informationElements[]; 22555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande 226b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 227b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency, 228b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff long tsf) { 229b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff this.wifiSsid = wifiSsid; 230b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.BSSID = BSSID; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.capabilities = caps; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.level = level; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.frequency = frequency; 23506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev this.timestamp = tsf; 2360451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceCm = UNSPECIFIED; 2370451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceSdCm = UNSPECIFIED; 23806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev } 23906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev 2400451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** {@hide} */ 2410451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency, 2420451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt long tsf, int distCm, int distSdCm) { 2430451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.wifiSsid = wifiSsid; 2440451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE; 2450451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.BSSID = BSSID; 2460451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.capabilities = caps; 2470451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.level = level; 2480451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.frequency = frequency; 2490451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.timestamp = tsf; 2500451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceCm = distCm; 2510451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceSdCm = distSdCm; 2520451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt } 253b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 25406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev /** copy constructor {@hide} */ 25506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev public ScanResult(ScanResult source) { 25606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev if (source != null) { 257b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid = source.wifiSsid; 25806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev SSID = source.SSID; 25906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev BSSID = source.BSSID; 26006c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev capabilities = source.capabilities; 26106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev level = source.level; 26206c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev frequency = source.frequency; 26306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev timestamp = source.timestamp; 2640451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt distanceCm = source.distanceCm; 2650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt distanceSdCm = source.distanceSdCm; 2667c3606c103e95d3991267cca2592402a68779cafvandwalle seen = source.seen; 267612519db40db1bad7597ab207f14c9b5b5524a93vandwalle autoJoinStatus = source.autoJoinStatus; 2684eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle untrusted = source.untrusted; 2694eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle numConnection = source.numConnection; 2704eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle numUsage = source.numUsage; 271176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle numIpConfigFailures = source.numIpConfigFailures; 27263edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle isAutoJoinCandidate = source.isAutoJoinCandidate; 27306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev } 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 276011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde /** empty scan result 277011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde * 278011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde * {@hide} 279011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde * */ 280011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde public ScanResult() { 281011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde } 282011e1b35a64180d6f0234af8a3c2b70777eb9f39Vinit Deshapnde 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer sb = new StringBuffer(); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String none = "<none>"; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("SSID: "). 289b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff append(wifiSsid == null ? WifiSsid.NONE : wifiSsid). 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", BSSID: "). 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(BSSID == null ? none : BSSID). 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", capabilities: "). 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(capabilities == null ? none : capabilities). 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", level: "). 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(level). 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", frequency: "). 29706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev append(frequency). 29806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev append(", timestamp: "). 29906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev append(timestamp); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3010451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt sb.append(", distance: ").append((distanceCm != UNSPECIFIED ? distanceCm : "?")). 3020451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt append("(cm)"); 3030451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")). 3040451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt append("(cm)"); 3050451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 306612519db40db1bad7597ab207f14c9b5b5524a93vandwalle if (autoJoinStatus != 0) { 307612519db40db1bad7597ab207f14c9b5b5524a93vandwalle sb.append(", status: ").append(autoJoinStatus); 308f5af4a972598611c46d4bf169919e23b7375a5a9vandwalle } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 319b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (wifiSsid != null) { 320b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff dest.writeInt(1); 321b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid.writeToParcel(dest, flags); 322b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } else { 323b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff dest.writeInt(0); 324b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(capabilities); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(level); 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(frequency); 32906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev dest.writeLong(timestamp); 3300451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt dest.writeInt(distanceCm); 3310451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt dest.writeInt(distanceSdCm); 3325fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle dest.writeLong(seen); 333612519db40db1bad7597ab207f14c9b5b5524a93vandwalle dest.writeInt(autoJoinStatus); 3344eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(untrusted ? 1 : 0); 3354eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(numConnection); 3364eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle dest.writeInt(numUsage); 337176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle dest.writeInt(numIpConfigFailures); 33863edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle dest.writeInt(isAutoJoinCandidate); 33955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande if (informationElements != null) { 34055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande dest.writeInt(informationElements.length); 34155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande for (int i = 0; i < informationElements.length; i++) { 34255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande dest.writeInt(informationElements[i].id); 34355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande dest.writeInt(informationElements[i].bytes.length); 34455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande dest.writeByteArray(informationElements[i].bytes); 34555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande } 34655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande } else { 34755027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande dest.writeInt(0); 34855027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ScanResult> CREATOR = 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<ScanResult>() { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScanResult createFromParcel(Parcel in) { 355b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = null; 356b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (in.readInt() == 1) { 357b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid = WifiSsid.CREATOR.createFromParcel(in); 358b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 359a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng ScanResult sr = new ScanResult( 360b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid, 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.readString(), 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.readString(), 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.readInt(), 36406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev in.readInt(), 3650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt in.readLong(), 3660451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt in.readInt(), 3670451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt in.readInt() 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ); 3695fb7bf5fdb93831684b00eb637ec15b5cf0d1e2dvandwalle sr.seen = in.readLong(); 370612519db40db1bad7597ab207f14c9b5b5524a93vandwalle sr.autoJoinStatus = in.readInt(); 3714eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle sr.untrusted = in.readInt() != 0; 3724eeecb25509f91ac7a6e2cde76dac782fbec5360vandwalle sr.numConnection = in.readInt(); 373b1dce0220bec5d81dca0aac645d84854ef4324cbvandwalle sr.numUsage = in.readInt(); 374176a27f3abf18af18a1ad4012ca3eadbff12ba96vandwalle sr.numIpConfigFailures = in.readInt(); 37563edd98d2eb744cc78dc3a3f8ec1ce7e6164d69dvandwalle sr.isAutoJoinCandidate = in.readInt(); 37655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande int n = in.readInt(); 37755027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande if (n != 0) { 37855027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande sr.informationElements = new InformationElement[n]; 37955027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande for (int i = 0; i < n; i++) { 38055027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande sr.informationElements[i] = new InformationElement(); 38155027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande sr.informationElements[i].id = in.readInt(); 38255027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande int len = in.readInt(); 38355027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande sr.informationElements[i].bytes = new byte[len]; 38455027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande in.readByteArray(sr.informationElements[i].bytes); 38555027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande } 38655027bb7b87ddcb05d65892677a2e0fe42f66ba2Vinit Deshpande } 387a4864472313208e4f1de02f45d3eadad237c54afYuhao Zheng return sr; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScanResult[] newArray(int size) { 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ScanResult[size]; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 395