blob: a1e1ca9f72a6b0bb1ffa4c9da74940d060724d27 [file] [log] [blame]
package com.android.server.wifi.anqp;
import java.net.ProtocolException;
import java.nio.ByteBuffer;
import static com.android.server.wifi.anqp.Constants.BYTE_MASK;
import static com.android.server.wifi.anqp.Constants.INT_MASK;
import static com.android.server.wifi.anqp.Constants.SHORT_MASK;
/**
* The WAN Metrics vendor specific ANQP Element,
* Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
* section 4.4
*/
public class HSWanMetricsElement extends ANQPElement {
public enum LinkStatus {Reserved, Up, Down, Test}
private final LinkStatus mStatus;
private final boolean mSymmetric;
private final boolean mCapped;
private final long mDlSpeed;
private final long mUlSpeed;
private final int mDlLoad;
private final int mUlLoad;
private final int mLMD;
public HSWanMetricsElement(Constants.ANQPElementType infoID, ByteBuffer payload)
throws ProtocolException {
super(infoID);
if (payload.remaining() != 13) {
throw new ProtocolException("Bad WAN metrics length: " + payload.remaining());
}
int status = payload.get() & BYTE_MASK;
mStatus = LinkStatus.values()[status & 0x03];
mSymmetric = (status & 0x04) != 0;
mCapped = (status & 0x08) != 0;
mDlSpeed = payload.getInt() & INT_MASK;
mUlSpeed = payload.getInt() & INT_MASK;
mDlLoad = payload.get() & BYTE_MASK;
mUlLoad = payload.get() & BYTE_MASK;
mLMD = payload.getShort() & SHORT_MASK;
}
public LinkStatus getStatus() {
return mStatus;
}
public boolean isSymmetric() {
return mSymmetric;
}
public boolean isCapped() {
return mCapped;
}
public long getDlSpeed() {
return mDlSpeed;
}
public long getUlSpeed() {
return mUlSpeed;
}
public int getDlLoad() {
return mDlLoad;
}
public int getUlLoad() {
return mUlLoad;
}
public int getLMD() {
return mLMD;
}
@Override
public String toString() {
return String.format("HSWanMetrics{mStatus=%s, mSymmetric=%s, mCapped=%s, " +
"mDlSpeed=%d, mUlSpeed=%d, mDlLoad=%f, mUlLoad=%f, mLMD=%d}",
mStatus, mSymmetric, mCapped,
mDlSpeed, mUlSpeed,
(double)mDlLoad * 100.0 / 256.0,
(double)mUlLoad * 100.0 / 256.0,
mLMD);
}
}