| 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); |
| } |
| } |