ScanResult.java revision 0451d59ba2d768e7653752028910f00a6c96e64e
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    /**
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The detected signal level in dBm. At least those are the units used by
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the TI driver.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int level;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The frequency in MHz of the channel over which the client is communicating
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * with the access point.
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int frequency;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
5406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev     * Time Synchronization Function (tsf) timestamp in microseconds when
5506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev     * this result was last seen.
5606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev     */
570451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public long timestamp;
580451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
590451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /**
600451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * The approximate distance to the AP in centimeter, if available.  Else
610451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@link UNSPECIFIED}.
620451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@hide}
630451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     */
640451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public int distanceCm;
650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
660451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /**
670451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * The standard deviation of the distance to the AP, if available.
680451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * Else {@link UNSPECIFIED}.
690451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@hide}
700451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     */
710451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public int distanceSdCm;
720451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
730451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /**
740451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     * {@hide}
750451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt     */
760451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public final static int UNSPECIFIED = -1;
7706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev
78b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    /** {@hide} */
79b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff    public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency,
80b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            long tsf) {
81b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        this.wifiSsid = wifiSsid;
82b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.BSSID = BSSID;
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.capabilities = caps;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.level = level;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.frequency = frequency;
8706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        this.timestamp = tsf;
880451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceCm = UNSPECIFIED;
890451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceSdCm = UNSPECIFIED;
9006c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev    }
9106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev
920451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    /** {@hide} */
930451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    public ScanResult(WifiSsid wifiSsid, String BSSID, String caps, int level, int frequency,
940451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt            long tsf, int distCm, int distSdCm) {
950451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.wifiSsid = wifiSsid;
960451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.SSID = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE;
970451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.BSSID = BSSID;
980451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.capabilities = caps;
990451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.level = level;
1000451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.frequency = frequency;
1010451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.timestamp = tsf;
1020451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceCm = distCm;
1030451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        this.distanceSdCm = distSdCm;
1040451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt    }
105b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff
10606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev    /** copy constructor {@hide} */
10706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev    public ScanResult(ScanResult source) {
10806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        if (source != null) {
109b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            wifiSsid = source.wifiSsid;
11006c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            SSID = source.SSID;
11106c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            BSSID = source.BSSID;
11206c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            capabilities = source.capabilities;
11306c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            level = source.level;
11406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            frequency = source.frequency;
11506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            timestamp = source.timestamp;
1160451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt            distanceCm = source.distanceCm;
1170451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt            distanceSdCm = source.distanceSdCm;
11806c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuffer sb = new StringBuffer();
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String none = "<none>";
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append("SSID: ").
127b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            append(wifiSsid == null ? WifiSsid.NONE : wifiSsid).
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", BSSID: ").
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(BSSID == null ? none : BSSID).
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", capabilities: ").
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(capabilities == null ? none : capabilities).
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", level: ").
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(level).
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            append(", frequency: ").
13506c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            append(frequency).
13606c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            append(", timestamp: ").
13706c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev            append(timestamp);
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1390451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        sb.append(", distance: ").append((distanceCm != UNSPECIFIED ? distanceCm : "?")).
1400451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                append("(cm)");
1410451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")).
1420451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                append("(cm)");
1430451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
154b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        if (wifiSsid != null) {
155b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            dest.writeInt(1);
156b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            wifiSsid.writeToParcel(dest, flags);
157b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        } else {
158b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff            dest.writeInt(0);
159b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff        }
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(BSSID);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeString(capabilities);
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(level);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(frequency);
16406c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev        dest.writeLong(timestamp);
1650451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        dest.writeInt(distanceCm);
1660451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt        dest.writeInt(distanceSdCm);
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /** Implement the Parcelable interface {@hide} */
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Creator<ScanResult> CREATOR =
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        new Creator<ScanResult>() {
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ScanResult createFromParcel(Parcel in) {
173b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                WifiSsid wifiSsid = null;
174b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                if (in.readInt() == 1) {
175b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                    wifiSsid = WifiSsid.CREATOR.createFromParcel(in);
176b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                }
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ScanResult(
178b6deeed3ceff9e0f754697987b7c724901996082Irfan Sheriff                    wifiSsid,
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    in.readString(),
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    in.readString(),
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    in.readInt(),
18206c43d575c88976f8709ff3fc0bad7117bde23e7Iliyan Malchev                    in.readInt(),
1830451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                    in.readLong(),
1840451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                    in.readInt(),
1850451d59ba2d768e7653752028910f00a6c96e64eRobert Greenwalt                    in.readInt()
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                );
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            public ScanResult[] newArray(int size) {
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return new ScanResult[size];
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        };
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
195