WifiInfo.java revision 3550ac919c492f3fbaebbf868f4df0d1ea7ee784
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 Projectimport android.net.NetworkInfo.DetailedState; 22124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwaltimport android.net.NetworkUtils; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 24124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwaltimport java.net.InetAddress; 25124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwaltimport java.net.Inet6Address; 26124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwaltimport java.net.UnknownHostException; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.EnumMap; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Describes the state of any Wifi connection that is active or 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is in the process of being set up. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class WifiInfo implements Parcelable { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is the map described in the Javadoc comment above. The positions 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the elements of the array must correspond to the ordinal values 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of <code>DetailedState</code>. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final EnumMap<SupplicantState, DetailedState> stateMap = 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new EnumMap<SupplicantState, DetailedState>(SupplicantState.class); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static { 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.DISCONNECTED, DetailedState.DISCONNECTED); 44319da8c4c59be36fe2e221a0aba230ef6b77a14fIrfan Sheriff stateMap.put(SupplicantState.INTERFACE_DISABLED, DetailedState.DISCONNECTED); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.INACTIVE, DetailedState.IDLE); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.SCANNING, DetailedState.SCANNING); 47319da8c4c59be36fe2e221a0aba230ef6b77a14fIrfan Sheriff stateMap.put(SupplicantState.AUTHENTICATING, DetailedState.CONNECTING); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.ASSOCIATING, DetailedState.CONNECTING); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.ASSOCIATED, DetailedState.CONNECTING); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.FOUR_WAY_HANDSHAKE, DetailedState.AUTHENTICATING); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.GROUP_HANDSHAKE, DetailedState.AUTHENTICATING); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.COMPLETED, DetailedState.OBTAINING_IPADDR); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.DORMANT, DetailedState.DISCONNECTED); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.UNINITIALIZED, DetailedState.IDLE); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stateMap.put(SupplicantState.INVALID, DetailedState.FAILED); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private SupplicantState mSupplicantState; 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mBSSID; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mSSID; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mNetworkId; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mHiddenSSID; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Received Signal Strength Indicator */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mRssi; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Link speed in Mbps */ 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String LINK_SPEED_UNITS = "Mbps"; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mLinkSpeed; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 70124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt private InetAddress mIpAddress; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mMacAddress; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiInfo() { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSSID = null; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBSSID = null; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNetworkId = -1; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSupplicantState = SupplicantState.UNINITIALIZED; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRssi = -9999; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLinkSpeed = -1; 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHiddenSSID = false; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 843550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy /** 853550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy * Copy constructor 863550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy * @hide 873550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy */ 883550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy public WifiInfo(WifiInfo source) { 893550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy if (source != null) { 903550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mSupplicantState = source.mSupplicantState; 913550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mBSSID = source.mBSSID; 923550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mSSID = source.mSSID; 933550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mNetworkId = source.mNetworkId; 943550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mHiddenSSID = source.mHiddenSSID; 953550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mRssi = source.mRssi; 963550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mLinkSpeed = source.mLinkSpeed; 973550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mIpAddress = source.mIpAddress; 983550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy mMacAddress = source.mMacAddress; 993550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy } 1003550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy } 1013550ac919c492f3fbaebbf868f4df0d1ea7ee784Isaac Levy 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSSID(String SSID) { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSSID = SSID; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // network is considered not hidden by default 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHiddenSSID = false; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the service set identifier (SSID) of the current 802.11 network. 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the SSID is an ASCII string, it will be returned surrounded by double 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * quotation marks.Otherwise, it is returned as a string of hex digits. The 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID may be {@code null} if there is no network currently connected. 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the SSID 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getSSID() { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSSID; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setBSSID(String BSSID) { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBSSID = BSSID; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the basic service set identifier (BSSID) of the current access point. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The BSSID may be {@code null} if there is no network currently connected. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the BSSID, in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX} 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getBSSID() { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mBSSID; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the received signal strength indicator of the current 802.11 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * network. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><strong>This is not normalized, but should be!</strong></p> 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the RSSI, in the range ??? to ??? 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getRssi() { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mRssi; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setRssi(int rssi) { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mRssi = rssi; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns the current link speed in {@link #LINK_SPEED_UNITS}. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the link speed. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #LINK_SPEED_UNITS 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getLinkSpeed() { 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLinkSpeed; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setLinkSpeed(int linkSpeed) { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mLinkSpeed = linkSpeed; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Record the MAC address of the WLAN interface 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setMacAddress(String macAddress) { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.mMacAddress = macAddress; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getMacAddress() { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMacAddress; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setNetworkId(int id) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mNetworkId = id; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Each configured network has a unique small integer ID, used to identify 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the network when performing operations on the supplicant. This method 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * returns the ID for the currently connected network. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the network ID, or -1 if there is no currently connected network 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getNetworkId() { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mNetworkId; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the detailed state of the supplicant's negotiation with an 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * access point, in the form of a {@link SupplicantState SupplicantState} object. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the current {@link SupplicantState SupplicantState} 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public SupplicantState getSupplicantState() { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mSupplicantState; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSupplicantState(SupplicantState state) { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSupplicantState = state; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 198124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt void setInetAddress(InetAddress address) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIpAddress = address; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getIpAddress() { 203124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt if (mIpAddress == null || mIpAddress instanceof Inet6Address) return 0; 204124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt return NetworkUtils.inetAddressToInt(mIpAddress); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return {@code true} if this network does not broadcast its SSID, so an 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * SSID-specific probe request must be used for scans. 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean getHiddenSSID() { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mHiddenSSID; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** {@hide} */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setHiddenSSID(boolean hiddenSSID) { 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHiddenSSID = hiddenSSID; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Map a supplicant state into a fine-grained network connectivity state. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param suppState the supplicant state 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the corresponding {@link DetailedState} 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static DetailedState getDetailedStateOf(SupplicantState suppState) { 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return stateMap.get(suppState); 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the <code>SupplicantState</code> from the string name 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the state. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param stateName the name of the state, as a <code>String</code> returned 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in an event sent by {@code wpa_supplicant}. 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void setSupplicantState(String stateName) { 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSupplicantState = valueOf(stateName); 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SupplicantState valueOf(String stateName) { 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ("4WAY_HANDSHAKE".equalsIgnoreCase(stateName)) 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SupplicantState.FOUR_WAY_HANDSHAKE; 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project else { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SupplicantState.valueOf(stateName.toUpperCase()); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalArgumentException e) { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SupplicantState.INVALID; 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project StringBuffer sb = new StringBuffer(); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String none = "<none>"; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sb.append("SSID: ").append(mSSID == null ? none : mSSID). 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", BSSID: ").append(mBSSID == null ? none : mBSSID). 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", MAC: ").append(mMacAddress == null ? none : mMacAddress). 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", Supplicant state: "). 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(mSupplicantState == null ? none : mSupplicantState). 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", RSSI: ").append(mRssi). 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", Link speed: ").append(mLinkSpeed). 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project append(", Net ID: ").append(mNetworkId); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sb.toString(); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel dest, int flags) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mNetworkId); 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mRssi); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeInt(mLinkSpeed); 278124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt if (mIpAddress != null) { 279124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt dest.writeByte((byte)1); 280124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt dest.writeByteArray(mIpAddress.getAddress()); 281124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt } else { 282124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt dest.writeByte((byte)0); 283124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt } 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(getSSID()); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mBSSID); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project dest.writeString(mMacAddress); 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSupplicantState.writeToParcel(dest, flags); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Implement the Parcelable interface {@hide} */ 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Creator<WifiInfo> CREATOR = 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new Creator<WifiInfo>() { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiInfo createFromParcel(Parcel in) { 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WifiInfo info = new WifiInfo(); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.setNetworkId(in.readInt()); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.setRssi(in.readInt()); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.setLinkSpeed(in.readInt()); 298124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt if (in.readByte() == 1) { 299124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt try { 300124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt info.setInetAddress(InetAddress.getByAddress(in.createByteArray())); 301124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt } catch (UnknownHostException e) {} 302124b44d89bc00b150c9478ccddfa83cac0f1df24Robert Greenwalt } 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.setSSID(in.readString()); 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.mBSSID = in.readString(); 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.mMacAddress = in.readString(); 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info.mSupplicantState = SupplicantState.CREATOR.createFromParcel(in); 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return info; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public WifiInfo[] newArray(int size) { 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new WifiInfo[size]; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 315