summaryrefslogtreecommitdiffstats
path: root/wifi/java/android/net/wifi/WifiInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'wifi/java/android/net/wifi/WifiInfo.java')
-rw-r--r--wifi/java/android/net/wifi/WifiInfo.java219
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;
}