• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.android.server.wifi.anqp;
2 
3 import java.net.ProtocolException;
4 import java.nio.ByteBuffer;
5 
6 import static com.android.server.wifi.anqp.Constants.BYTE_MASK;
7 import static com.android.server.wifi.anqp.Constants.INT_MASK;
8 import static com.android.server.wifi.anqp.Constants.SHORT_MASK;
9 
10 /**
11  * The WAN Metrics vendor specific ANQP Element,
12  * Wi-Fi Alliance Hotspot 2.0 (Release 2) Technical Specification - Version 5.00,
13  * section 4.4
14  */
15 public class HSWanMetricsElement extends ANQPElement {
16 
17     public enum LinkStatus {Reserved, Up, Down, Test}
18 
19     private final LinkStatus mStatus;
20     private final boolean mSymmetric;
21     private final boolean mCapped;
22     private final long mDlSpeed;
23     private final long mUlSpeed;
24     private final int mDlLoad;
25     private final int mUlLoad;
26     private final int mLMD;
27 
HSWanMetricsElement(Constants.ANQPElementType infoID, ByteBuffer payload)28     public HSWanMetricsElement(Constants.ANQPElementType infoID, ByteBuffer payload)
29             throws ProtocolException {
30         super(infoID);
31 
32         if (payload.remaining() != 13) {
33             throw new ProtocolException("Bad WAN metrics length: " + payload.remaining());
34         }
35 
36         int status = payload.get() & BYTE_MASK;
37         mStatus = LinkStatus.values()[status & 0x03];
38         mSymmetric = (status & 0x04) != 0;
39         mCapped = (status & 0x08) != 0;
40         mDlSpeed = payload.getInt() & INT_MASK;
41         mUlSpeed = payload.getInt() & INT_MASK;
42         mDlLoad = payload.get() & BYTE_MASK;
43         mUlLoad = payload.get() & BYTE_MASK;
44         mLMD = payload.getShort() & SHORT_MASK;
45     }
46 
getStatus()47     public LinkStatus getStatus() {
48         return mStatus;
49     }
50 
isSymmetric()51     public boolean isSymmetric() {
52         return mSymmetric;
53     }
54 
isCapped()55     public boolean isCapped() {
56         return mCapped;
57     }
58 
getDlSpeed()59     public long getDlSpeed() {
60         return mDlSpeed;
61     }
62 
getUlSpeed()63     public long getUlSpeed() {
64         return mUlSpeed;
65     }
66 
getDlLoad()67     public int getDlLoad() {
68         return mDlLoad;
69     }
70 
getUlLoad()71     public int getUlLoad() {
72         return mUlLoad;
73     }
74 
getLMD()75     public int getLMD() {
76         return mLMD;
77     }
78 
79     @Override
toString()80     public String toString() {
81         return String.format("HSWanMetrics{mStatus=%s, mSymmetric=%s, mCapped=%s, " +
82                 "mDlSpeed=%d, mUlSpeed=%d, mDlLoad=%f, mUlLoad=%f, mLMD=%d}",
83                 mStatus, mSymmetric, mCapped,
84                 mDlSpeed, mUlSpeed,
85                 (double)mDlLoad * 100.0 / 256.0,
86                 (double)mUlLoad * 100.0 / 256.0,
87                 mLMD);
88     }
89 }
90