diff options
Diffstat (limited to 'wifi/java/android/net/wifi/WifiInfo.java')
-rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 219 |
1 files changed, 209 insertions, 10 deletions
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index f44cb0a..e46f916 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -40,7 +40,7 @@ public class WifiInfo implements Parcelable { * of <code>DetailedState</code>. */ private static final EnumMap<SupplicantState, DetailedState> stateMap = - new EnumMap<SupplicantState, DetailedState>(SupplicantState.class); + new EnumMap<SupplicantState, DetailedState>(SupplicantState.class); static { stateMap.put(SupplicantState.DISCONNECTED, DetailedState.DISCONNECTED); @@ -62,14 +62,31 @@ public class WifiInfo implements Parcelable { private String mBSSID; private WifiSsid mWifiSsid; private int mNetworkId; - /** Received Signal Strength Indicator */ + + /** @hide **/ + public static final int INVALID_RSSI = -127; + + /** @hide **/ + public static final int MIN_RSSI = -126; + + /** @hide **/ + public static final int MAX_RSSI = 200; + + + /** + * Received Signal Strength Indicator + */ private int mRssi; - /** Link speed in Mbps */ + /** + * Link speed in Mbps + */ public static final String LINK_SPEED_UNITS = "Mbps"; private int mLinkSpeed; - /** Frequency in MHz */ + /** + * Frequency in MHz + */ public static final String FREQUENCY_UNITS = "MHz"; private int mFrequency; @@ -77,9 +94,121 @@ public class WifiInfo implements Parcelable { private String mMacAddress; /** - * Flag indicating that AP has hinted that upstream connection is metered, - * and sensitive to heavy data transfers. + * @hide + */ + public long txBad; + /** + * @hide + */ + public long txRetries; + /** + * @hide + */ + public long txSuccess; + /** + * @hide + */ + public long rxSuccess; + /** + * @hide + */ + public double txBadRate; + /** + * @hide + */ + public double txRetriesRate; + /** + * @hide + */ + public double txSuccessRate; + /** + * @hide + */ + public double rxSuccessRate; + + /** + * @hide */ + public int badRssiCount; + + /** + * @hide + */ + public int linkStuckCount; + + /** + * @hide + */ + public int lowRssiCount; + + /** + * @hide + */ + public int score; + + /** + * TODO: get actual timestamp and calculate true rates + * @hide + */ + public void updatePacketRates(WifiLinkLayerStats stats) { + if (stats != null) { + long txgood = stats.txmpdu_be + stats.txmpdu_bk + stats.txmpdu_vi + stats.txmpdu_vo; + long txretries = stats.retries_be + stats.retries_bk + + stats.retries_vi + stats.retries_vo; + long rxgood = stats.rxmpdu_be + stats.rxmpdu_bk + stats.rxmpdu_vi + stats.rxmpdu_vo; + long txbad = stats.lostmpdu_be + stats.lostmpdu_bk + + stats.lostmpdu_vi + stats.lostmpdu_vo; + + txBadRate = (txBadRate * 0.5) + + ((double) (txbad - txBad) * 0.5); + txSuccessRate = (txSuccessRate * 0.5) + + ((double) (txgood - txSuccess) * 0.5); + rxSuccessRate = (rxSuccessRate * 0.5) + + ((double) (rxgood - rxSuccess) * 0.5); + txRetriesRate = (txRetriesRate * 0.5) + + ((double) (txretries - txRetries) * 0.5); + + txBad = txbad; + txSuccess = txgood; + rxSuccess = rxgood; + txRetries = txretries; + } else { + txBad = 0; + txSuccess = 0; + rxSuccess = 0; + txRetries = 0; + txBadRate = 0; + txSuccessRate = 0; + rxSuccessRate = 0; + txRetriesRate = 0; + } + } + + + /** + * This function is less powerful and used if the WifiLinkLayerStats API is not implemented + * at the Wifi HAL + * @hide + */ + public void updatePacketRates(long txPackets, long rxPackets) { + //paranoia + txBad = 0; + txRetries = 0; + txBadRate = 0; + txRetriesRate = 0; + + txSuccessRate = (txSuccessRate * 0.5) + + ((double) (txPackets - txSuccess) * 0.5); + rxSuccessRate = (rxSuccessRate * 0.5) + + ((double) (rxPackets - rxSuccess) * 0.5); + txSuccess = txPackets; + rxSuccess = rxPackets; + } + + /** + * Flag indicating that AP has hinted that upstream connection is metered, + * and sensitive to heavy data transfers. + */ private boolean mMeteredHint; /** @hide */ @@ -88,11 +217,35 @@ public class WifiInfo implements Parcelable { mBSSID = null; mNetworkId = -1; mSupplicantState = SupplicantState.UNINITIALIZED; - mRssi = -9999; + mRssi = INVALID_RSSI; mLinkSpeed = -1; mFrequency = -1; } + /** @hide */ + public void reset() { + setInetAddress(null); + setBSSID(null); + setSSID(null); + setNetworkId(-1); + setRssi(INVALID_RSSI); + setLinkSpeed(-1); + setFrequency(-1); + setMeteredHint(false); + txBad = 0; + txSuccess = 0; + rxSuccess = 0; + txRetries = 0; + txBadRate = 0; + txSuccessRate = 0; + rxSuccessRate = 0; + txRetriesRate = 0; + lowRssiCount = 0; + badRssiCount = 0; + linkStuckCount = 0; + score = 0; + } + /** * Copy constructor * @hide @@ -109,6 +262,18 @@ public class WifiInfo implements Parcelable { mIpAddress = source.mIpAddress; mMacAddress = source.mMacAddress; mMeteredHint = source.mMeteredHint; + txBad = source.txBad; + txRetries = source.txRetries; + txSuccess = source.txSuccess; + rxSuccess = source.rxSuccess; + txBadRate = source.txBadRate; + txRetriesRate = source.txRetriesRate; + txSuccessRate = source.txSuccessRate; + rxSuccessRate = source.rxSuccessRate; + score = source.score; + badRssiCount = source.badRssiCount; + lowRssiCount = source.lowRssiCount; + linkStuckCount = source.linkStuckCount; } } @@ -158,7 +323,7 @@ public class WifiInfo implements Parcelable { /** * Returns the received signal strength indicator of the current 802.11 * network, in dBm. - * @return the RSSI, in the range -110 to 10 + * @return the RSSI, in the range -127 to 200 */ public int getRssi() { return mRssi; @@ -166,6 +331,10 @@ public class WifiInfo implements Parcelable { /** @hide */ public void setRssi(int rssi) { + if (rssi < INVALID_RSSI) + rssi = INVALID_RSSI; + if (rssi > MAX_RSSI) + rssi = MAX_RSSI; mRssi = rssi; } @@ -198,6 +367,22 @@ public class WifiInfo implements Parcelable { } /** + * @hide + * TODO: makes real freq boundaries + */ + public boolean is24GHz() { + return mFrequency < 4000; + } + + /** + * @hide + * TODO: makes real freq boundaries + */ + public boolean is5GHz() { + return mFrequency > 4000; + } + + /** * Record the MAC address of the WLAN interface * @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form * @hide @@ -325,8 +510,8 @@ public class WifiInfo implements Parcelable { append(", Link speed: ").append(mLinkSpeed).append(LINK_SPEED_UNITS). append(", Frequency: ").append(mFrequency).append(FREQUENCY_UNITS). append(", Net ID: ").append(mNetworkId). - append(", Metered hint: ").append(mMeteredHint); - + append(", Metered hint: ").append(mMeteredHint). + append(", score: ").append(Integer.toString(score)); return sb.toString(); } @@ -356,6 +541,13 @@ public class WifiInfo implements Parcelable { dest.writeString(mBSSID); dest.writeString(mMacAddress); dest.writeInt(mMeteredHint ? 1 : 0); + dest.writeInt(score); + dest.writeDouble(txSuccessRate); + dest.writeDouble(txRetriesRate); + dest.writeDouble(txBadRate); + dest.writeDouble(rxSuccessRate); + dest.writeInt(badRssiCount); + dest.writeInt(lowRssiCount); mSupplicantState.writeToParcel(dest, flags); } @@ -379,6 +571,13 @@ public class WifiInfo implements Parcelable { info.mBSSID = in.readString(); info.mMacAddress = in.readString(); info.mMeteredHint = in.readInt() != 0; + info.score = in.readInt(); + info.txSuccessRate = in.readDouble(); + info.txRetriesRate = in.readDouble(); + info.txBadRate = in.readDouble(); + info.rxSuccessRate = in.readDouble(); + info.badRssiCount = in.readInt(); + info.lowRssiCount = in.readInt(); info.mSupplicantState = SupplicantState.CREATOR.createFromParcel(in); return info; } |