ScanResult.java revision 137ff532ebb062ea513d6ea0dd894b91f373d1a3
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.Parcelable; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 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 { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The network name. */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String SSID; 31b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 32b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** Ascii encoded SSID. This will replace SSID when we deprecate it. @hide */ 33b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public WifiSsid wifiSsid; 34b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** The address of the access point. */ 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String BSSID; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes the authentication, key management, and encryption schemes 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * supported by the access point. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String capabilities; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 43137ff532ebb062ea513d6ea0dd894b91f373d1a3Brian Williammee * The detected signal level in dBm. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int level; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The frequency in MHz of the channel over which the client is communicating 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with the access point. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int frequency; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev * Time Synchronization Function (tsf) timestamp in microseconds when 5406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev * this result was last seen. 5506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev */ 560451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public long timestamp; 570451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 580451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** 590451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * The approximate distance to the AP in centimeter, if available. Else 600451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@link UNSPECIFIED}. 610451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@hide} 620451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt */ 630451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public int distanceCm; 640451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** 660451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * The standard deviation of the distance to the AP, if available. 670451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * Else {@link UNSPECIFIED}. 680451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@hide} 690451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt */ 700451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public int distanceSdCm; 710451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 720451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** 730451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt * {@hide} 740451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt */ 750451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public final static int UNSPECIFIED = -1; 7606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev 77b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff /** {@hide} */ 78b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency, 79b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff long tsf) { 80b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff this.wifiSsid = wifiSsid; 81b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.BSSID = BSSID; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.capabilities = caps; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.level = level; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.frequency = frequency; 8606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev this.timestamp = tsf; 870451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceCm = UNSPECIFIED; 880451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceSdCm = UNSPECIFIED; 8906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev } 9006c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev 910451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt /** {@hide} */ 920451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency, 930451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt long tsf, int distCm, int distSdCm) { 940451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.wifiSsid = wifiSsid; 950451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE; 960451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.BSSID = BSSID; 970451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.capabilities = caps; 980451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.level = level; 990451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.frequency = frequency; 1000451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.timestamp = tsf; 1010451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceCm = distCm; 1020451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt this.distanceSdCm = distSdCm; 1030451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt } 104b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff 10506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev /** copy constructor {@hide} */ 10606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev public ScanResult(ScanResult source) { 10706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev if (source != null) { 108b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid = source.wifiSsid; 10906c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev SSID = source.SSID; 11006c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev BSSID = source.BSSID; 11106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev capabilities = source.capabilities; 11206c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev level = source.level; 11306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev frequency = source.frequency; 11406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev timestamp = source.timestamp; 1150451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt distanceCm = source.distanceCm; 1160451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt distanceSdCm = source.distanceSdCm; 11706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer sb = new StringBuffer(); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String none = "<none>"; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("SSID: "). 126b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff append(wifiSsid == null ? WifiSsid.NONE : wifiSsid). 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", BSSID: "). 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(BSSID == null ? none : BSSID). 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", capabilities: "). 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(capabilities == null ? none : capabilities). 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", level: "). 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(level). 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", frequency: "). 13406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev append(frequency). 13506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev append(", timestamp: "). 13606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev append(timestamp); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1380451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt sb.append(", distance: ").append((distanceCm != UNSPECIFIED ? distanceCm : "?")). 1390451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt append("(cm)"); 1400451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")). 1410451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt append("(cm)"); 1420451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 153b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (wifiSsid != null) { 154b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff dest.writeInt(1); 155b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid.writeToParcel(dest, flags); 156b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } else { 157b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff dest.writeInt(0); 158b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(BSSID); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(capabilities); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(level); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(frequency); 16306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev dest.writeLong(timestamp); 1640451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt dest.writeInt(distanceCm); 1650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt dest.writeInt(distanceSdCm); 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<ScanResult> CREATOR = 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<ScanResult>() { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScanResult createFromParcel(Parcel in) { 172b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff WifiSsid wifiSsid = null; 173b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff if (in.readInt() == 1) { 174b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid = WifiSsid.CREATOR.createFromParcel(in); 175b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff } 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ScanResult( 177b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff wifiSsid, 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.readString(), 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.readString(), 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project in.readInt(), 18106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev in.readInt(), 1820451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt in.readLong(), 1830451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt in.readInt(), 1840451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt in.readInt() 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScanResult[] newArray(int size) { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ScanResult[size]; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 194