blob: 7fac7cfc92653b305b4791b6594d8d3466cfefe0 [file] [log] [blame]
vandwalleb914c332014-05-09 18:11:55 -07001/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.net.wifi;
18
19import android.os.Parcelable;
20import android.os.Parcel;
21import android.text.TextUtils;
22import java.util.HashMap;
23import java.util.Date;
24import java.util.ArrayList;
25
26import java.util.BitSet;
27
28/**
29 * A class representing link layer statistics collected over a Wifi Interface.
30 */
31/** {@hide} */
32public class WifiLinkLayerStats implements Parcelable {
33 private static final String TAG = "WifiLinkLayerStats";
34
35 /**
36 * The current status of this network configuration entry.
37 * @see Status
38 */
39 /** {@hide} */
40 public int status;
41
42 /**
43 * The network's SSID. Can either be an ASCII string,
44 * which must be enclosed in double quotation marks
45 * (e.g., {@code "MyNetwork"}, or a string of
46 * hex digits,which are not enclosed in quotes
47 * (e.g., {@code 01a243f405}).
48 */
49 /** {@hide} */
50 public String SSID;
51 /**
52 * When set. this is the BSSID the radio is currently associated with.
53 * The value is a string in the format of an Ethernet MAC address, e.g.,
54 * <code>XX:XX:XX:XX:XX:XX</code> where each <code>X</code> is a hex digit.
55 */
56 /** {@hide} */
57 public String BSSID;
58
59 /* number beacons received from our own AP */
60 /** {@hide} */
61 public int beacon_rx;
62
63 /* RSSI taken on management frames */
64 /** {@hide} */
65 public int rssi_mgmt;
66
67 /* packets counters */
68 /** {@hide} */
69 /* WME Best Effort Access Category (receive mpdu, transmit mpdu, lost mpdu, number of retries)*/
70 public long rxmpdu_be;
71 /** {@hide} */
72 public long txmpdu_be;
73 /** {@hide} */
74 public long lostmpdu_be;
75 /** {@hide} */
76 public long retries_be;
77 /** {@hide} */
78 /* WME Background Access Category (receive mpdu, transmit mpdu, lost mpdu, number of retries) */
79 public long rxmpdu_bk;
80 /** {@hide} */
81 public long txmpdu_bk;
82 /** {@hide} */
83 public long lostmpdu_bk;
84 /** {@hide} */
85 public long retries_bk;
86 /** {@hide} */
87 /* WME Video Access Category (receive mpdu, transmit mpdu, lost mpdu, number of retries) */
88 public long rxmpdu_vi;
89 /** {@hide} */
90 public long txmpdu_vi;
91 /** {@hide} */
92 public long lostmpdu_vi;
93 /** {@hide} */
94 public long retries_vi;
95 /** {@hide} */
96 /* WME Voice Access Category (receive mpdu, transmit mpdu, lost mpdu, number of retries) */
97 public long rxmpdu_vo;
98 /** {@hide} */
99 public long txmpdu_vo;
100 /** {@hide} */
101 public long lostmpdu_vo;
102 /** {@hide} */
103 public long retries_vo;
104
vandwalleb928a382014-08-07 12:20:45 -0700105 /** {@hide} */
106 public int on_time;
107 /** {@hide} */
108 public int tx_time;
109 /** {@hide} */
110 public int rx_time;
111 /** {@hide} */
112 public int on_time_scan;
vandwalleb914c332014-05-09 18:11:55 -0700113
114 /** {@hide} */
115 public WifiLinkLayerStats() {
116 }
117
118 @Override
119 /** {@hide} */
120 public String toString() {
121 StringBuilder sbuf = new StringBuilder();
vandwalle2ab90892014-06-02 15:30:39 -0700122 sbuf.append(" WifiLinkLayerStats: ").append('\n');
123
vandwalleb914c332014-05-09 18:11:55 -0700124 if (this.SSID != null) {
125 sbuf.append(" SSID: ").append(this.SSID).append('\n');
126 }
127 if (this.BSSID != null) {
128 sbuf.append(" BSSID: ").append(this.BSSID).append('\n');
129 }
130
131 sbuf.append(" my bss beacon rx: ").append(Integer.toString(this.beacon_rx)).append('\n');
132 sbuf.append(" RSSI mgmt: ").append(Integer.toString(this.rssi_mgmt)).append('\n');
133 sbuf.append(" BE : ").append(" rx=").append(Long.toString(this.rxmpdu_be))
134 .append(" tx=").append(Long.toString(this.txmpdu_be))
135 .append(" lost=").append(Long.toString(this.lostmpdu_be))
136 .append(" retries=").append(Long.toString(this.retries_be)).append('\n');
137 sbuf.append(" BK : ").append(" rx=").append(Long.toString(this.rxmpdu_bk))
138 .append(" tx=").append(Long.toString(this.txmpdu_bk))
139 .append(" lost=").append(Long.toString(this.lostmpdu_bk))
140 .append(" retries=").append(Long.toString(this.retries_bk)).append('\n');
141 sbuf.append(" VI : ").append(" rx=").append(Long.toString(this.rxmpdu_vi))
142 .append(" tx=").append(Long.toString(this.txmpdu_vi))
143 .append(" lost=").append(Long.toString(this.lostmpdu_vi))
144 .append(" retries=").append(Long.toString(this.retries_vi)).append('\n');
145 sbuf.append(" VO : ").append(" rx=").append(Long.toString(this.rxmpdu_vo))
146 .append(" tx=").append(Long.toString(this.txmpdu_vo))
147 .append(" lost=").append(Long.toString(this.lostmpdu_vo))
148 .append(" retries=").append(Long.toString(this.retries_vo)).append('\n');
vandwalleb928a382014-08-07 12:20:45 -0700149 sbuf.append(" on_time : ").append(Integer.toString(this.on_time))
150 .append(" tx_time=").append(Integer.toString(this.tx_time))
151 .append(" rx_time=").append(Integer.toString(this.rx_time))
152 .append(" scan_time=").append(Integer.toString(this.on_time_scan)).append('\n');
vandwalleb914c332014-05-09 18:11:55 -0700153 return sbuf.toString();
154 }
155
156 /** Implement the Parcelable interface {@hide} */
157 public int describeContents() {
158 return 0;
159 }
160
161 /** {@hide} */
162 public String getPrintableSsid() {
163 if (SSID == null) return "";
164 final int length = SSID.length();
165 if (length > 2 && (SSID.charAt(0) == '"') && SSID.charAt(length - 1) == '"') {
166 return SSID.substring(1, length - 1);
167 }
168
169 /** The ascii-encoded string format is P"<ascii-encoded-string>"
170 * The decoding is implemented in the supplicant for a newly configured
171 * network.
172 */
173 if (length > 3 && (SSID.charAt(0) == 'P') && (SSID.charAt(1) == '"') &&
174 (SSID.charAt(length-1) == '"')) {
175 WifiSsid wifiSsid = WifiSsid.createFromAsciiEncoded(
176 SSID.substring(2, length - 1));
177 return wifiSsid.toString();
178 }
179 return SSID;
180 }
181
182 /** Implement the Parcelable interface {@hide} */
183 public void writeToParcel(Parcel dest, int flags) {
184 dest.writeString(SSID);
185 dest.writeString(BSSID);
vandwalleb928a382014-08-07 12:20:45 -0700186 dest.writeInt(on_time);
187 dest.writeInt(tx_time);
188 dest.writeInt(rx_time);
189 dest.writeInt(on_time_scan);
vandwalleb914c332014-05-09 18:11:55 -0700190 }
191
192 /** Implement the Parcelable interface {@hide} */
193 public static final Creator<WifiLinkLayerStats> CREATOR =
194 new Creator<WifiLinkLayerStats>() {
195 public WifiLinkLayerStats createFromParcel(Parcel in) {
196 WifiLinkLayerStats stats = new WifiLinkLayerStats();
197 stats.SSID = in.readString();
198 stats.BSSID = in.readString();
vandwalleb928a382014-08-07 12:20:45 -0700199 stats.on_time = in.readInt();
200 stats.tx_time = in.readInt();
201 stats.rx_time = in.readInt();
202 stats.on_time_scan = in.readInt();
vandwalleb914c332014-05-09 18:11:55 -0700203 return stats;
204 };
205 public WifiLinkLayerStats[] newArray(int size) {
206 return new WifiLinkLayerStats[size];
207 }
208
209 };
210}