diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:31:44 -0800 |
commit | 9066cfe9886ac131c34d59ed0e2d287b0e3c0087 (patch) | |
tree | d88beb88001f2482911e3d28e43833b50e4b4e97 /wifi/java/android/net/wifi/WifiInfo.java | |
parent | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (diff) | |
download | frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.zip frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.gz frameworks_base-9066cfe9886ac131c34d59ed0e2d287b0e3c0087.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'wifi/java/android/net/wifi/WifiInfo.java')
-rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java new file mode 100644 index 0000000..4312bfd --- /dev/null +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi; + +import android.os.Parcelable; +import android.os.Parcel; +import android.net.NetworkInfo.DetailedState; + +import java.util.EnumMap; + +/** + * Describes the state of any Wifi connection that is active or + * is in the process of being set up. + */ +public class WifiInfo implements Parcelable { + /** + * This is the map described in the Javadoc comment above. The positions + * of the elements of the array must correspond to the ordinal values + * of <code>DetailedState</code>. + */ + private static final EnumMap<SupplicantState, DetailedState> stateMap = + new EnumMap<SupplicantState, DetailedState>(SupplicantState.class); + + static { + stateMap.put(SupplicantState.DISCONNECTED, DetailedState.DISCONNECTED); + stateMap.put(SupplicantState.INACTIVE, DetailedState.IDLE); + stateMap.put(SupplicantState.SCANNING, DetailedState.SCANNING); + stateMap.put(SupplicantState.ASSOCIATING, DetailedState.CONNECTING); + stateMap.put(SupplicantState.ASSOCIATED, DetailedState.CONNECTING); + stateMap.put(SupplicantState.FOUR_WAY_HANDSHAKE, DetailedState.AUTHENTICATING); + stateMap.put(SupplicantState.GROUP_HANDSHAKE, DetailedState.AUTHENTICATING); + stateMap.put(SupplicantState.COMPLETED, DetailedState.OBTAINING_IPADDR); + stateMap.put(SupplicantState.DORMANT, DetailedState.DISCONNECTED); + stateMap.put(SupplicantState.UNINITIALIZED, DetailedState.IDLE); + stateMap.put(SupplicantState.INVALID, DetailedState.FAILED); + } + + private SupplicantState mSupplicantState; + private String mBSSID; + private String mSSID; + private int mNetworkId; + private boolean mHiddenSSID; + /** Received Signal Strength Indicator */ + private int mRssi; + + /** Link speed in Mbps */ + public static final String LINK_SPEED_UNITS = "Mbps"; + private int mLinkSpeed; + + private int mIpAddress; + + private String mMacAddress; + + WifiInfo() { + mSSID = null; + mBSSID = null; + mNetworkId = -1; + mSupplicantState = SupplicantState.UNINITIALIZED; + mRssi = -9999; + mLinkSpeed = -1; + mIpAddress = 0; + mHiddenSSID = false; + } + + void setSSID(String SSID) { + mSSID = SSID; + // network is considered not hidden by default + mHiddenSSID = false; + } + + /** + * Returns the service set identifier (SSID) of the current 802.11 network. + * If the SSID is an ASCII string, it will be returned surrounded by double + * quotation marks.Otherwise, it is returned as a string of hex digits. The + * SSID may be {@code null} if there is no network currently connected. + * @return the SSID + */ + public String getSSID() { + return mSSID; + } + + void setBSSID(String BSSID) { + mBSSID = BSSID; + } + + /** + * Return the basic service set identifier (BSSID) of the current access point. + * The BSSID may be {@code null} if there is no network currently connected. + * @return the BSSID, in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX} + */ + public String getBSSID() { + return mBSSID; + } + + /** + * Returns the received signal strength indicator of the current 802.11 + * network. + * <p><strong>This is not normalized, but should be!</strong></p> + * @return the RSSI, in the range ??? to ??? + */ + public int getRssi() { + return mRssi; + } + + void setRssi(int rssi) { + mRssi = rssi; + } + + /** + * Returns the current link speed in {@link #LINK_SPEED_UNITS}. + * @return the link speed. + * @see #LINK_SPEED_UNITS + */ + public int getLinkSpeed() { + return mLinkSpeed; + } + + void setLinkSpeed(int linkSpeed) { + this.mLinkSpeed = linkSpeed; + } + + /** + * Record the MAC address of the WLAN interface + * @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form + */ + void setMacAddress(String macAddress) { + this.mMacAddress = macAddress; + } + + public String getMacAddress() { + return mMacAddress; + } + + void setNetworkId(int id) { + mNetworkId = id; + } + + /** + * Each configured network has a unique small integer ID, used to identify + * the network when performing operations on the supplicant. This method + * returns the ID for the currently connected network. + * @return the network ID, or -1 if there is no currently connected network + */ + public int getNetworkId() { + return mNetworkId; + } + + /** + * Return the detailed state of the supplicant's negotiation with an + * access point, in the form of a {@link SupplicantState SupplicantState} object. + * @return the current {@link SupplicantState SupplicantState} + */ + public SupplicantState getSupplicantState() { + return mSupplicantState; + } + + void setSupplicantState(SupplicantState state) { + mSupplicantState = state; + } + + void setIpAddress(int address) { + mIpAddress = address; + } + + public int getIpAddress() { + return mIpAddress; + } + + /** + * @return {@code true} if this network does not broadcast its SSID, so an + * SSID-specific probe request must be used for scans. + */ + public boolean getHiddenSSID() { + return mHiddenSSID; + } + + /** {@hide} */ + public void setHiddenSSID(boolean hiddenSSID) { + mHiddenSSID = hiddenSSID; + } + + /** + * Map a supplicant state into a fine-grained network connectivity state. + * @param suppState the supplicant state + * @return the corresponding {@link DetailedState} + */ + public static DetailedState getDetailedStateOf(SupplicantState suppState) { + return stateMap.get(suppState); + } + + /** + * Set the <code>SupplicantState</code> from the string name + * of the state. + * @param stateName the name of the state, as a <code>String</code> returned + * in an event sent by {@code wpa_supplicant}. + */ + void setSupplicantState(String stateName) { + mSupplicantState = valueOf(stateName); + } + + static SupplicantState valueOf(String stateName) { + if ("4WAY_HANDSHAKE".equalsIgnoreCase(stateName)) + return SupplicantState.FOUR_WAY_HANDSHAKE; + else { + try { + return SupplicantState.valueOf(stateName.toUpperCase()); + } catch (IllegalArgumentException e) { + return SupplicantState.INVALID; + } + } + } + + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + String none = "<none>"; + + sb.append("SSID: ").append(mSSID == null ? none : mSSID). + append(", BSSID: ").append(mBSSID == null ? none : mBSSID). + append(", MAC: ").append(mMacAddress == null ? none : mMacAddress). + append(", Supplicant state: "). + append(mSupplicantState == null ? none : mSupplicantState). + append(", RSSI: ").append(mRssi). + append(", Link speed: ").append(mLinkSpeed). + append(", Net ID: ").append(mNetworkId); + + return sb.toString(); + } + + /** Implement the Parcelable interface {@hide} */ + public int describeContents() { + return 0; + } + + /** Implement the Parcelable interface {@hide} */ + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mNetworkId); + dest.writeInt(mRssi); + dest.writeInt(mLinkSpeed); + dest.writeInt(mIpAddress); + dest.writeString(getSSID()); + dest.writeString(mBSSID); + dest.writeString(mMacAddress); + mSupplicantState.writeToParcel(dest, flags); + } + + /** Implement the Parcelable interface {@hide} */ + public static final Creator<WifiInfo> CREATOR = + new Creator<WifiInfo>() { + public WifiInfo createFromParcel(Parcel in) { + WifiInfo info = new WifiInfo(); + info.setNetworkId(in.readInt()); + info.setRssi(in.readInt()); + info.setLinkSpeed(in.readInt()); + info.setIpAddress(in.readInt()); + info.setSSID(in.readString()); + info.mBSSID = in.readString(); + info.mMacAddress = in.readString(); + info.mSupplicantState = SupplicantState.CREATOR.createFromParcel(in); + return info; + } + + public WifiInfo[] newArray(int size) { + return new WifiInfo[size]; + } + }; +} |