1 /*
2  * Copyright (C) 2015 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 
17 package com.android.server.wifi;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 /**
23  * A class representing WLAN wake reason accounting.
24  */
25 
26 /** @hide */
27 public class WlanWakeReasonAndCounts implements Parcelable {
28     private static final String TAG = "WlanWakeReasonAndCounts";
29     /**
30      * Wlan can wake host, only when it is cmd/event, local driver-fw
31      * functions(non-data, non cmd/event) and rx data.The first packet
32      * from wlan that woke up a sleep host is what is accounted here.
33      * Total wlan wake to application processor would be:
34      * [cmdEventWake + driverFwLocalWake + totalRxDataWake]
35      * A further classification is provided for identifying the reasons
36      * for wakeup.
37      */
38     public int totalCmdEventWake;
39     public int totalDriverFwLocalWake;
40     public int totalRxDataWake;
41 
42     public int rxUnicast;
43     public int rxMulticast;
44     public int rxBroadcast;
45 
46     public int icmp;
47     public int icmp6;
48     public int icmp6Ra;
49     public int icmp6Na;
50     public int icmp6Ns;
51 
52     public int ipv4RxMulticast;
53     public int ipv6Multicast;
54     public int otherRxMulticast;
55     public int[] cmdEventWakeCntArray;
56     public int[] driverFWLocalWakeCntArray;
57 
58     /* {@hide} */
WlanWakeReasonAndCounts()59     public WlanWakeReasonAndCounts() {
60     }
61 
62     @Override
63     /* {@hide} */
toString()64     public String toString() {
65         StringBuffer sb = new StringBuffer();
66         sb.append(" totalCmdEventWake ").append(totalCmdEventWake);
67         sb.append(" totalDriverFwLocalWake ").append(totalDriverFwLocalWake);
68         sb.append(" totalRxDataWake ").append(totalRxDataWake);
69 
70         sb.append(" rxUnicast ").append(rxUnicast);
71         sb.append(" rxMulticast ").append(rxMulticast);
72         sb.append(" rxBroadcast ").append(rxBroadcast);
73 
74         sb.append(" icmp ").append(icmp);
75         sb.append(" icmp6 ").append(icmp6);
76         sb.append(" icmp6Ra ").append(icmp6Ra);
77         sb.append(" icmp6Na ").append(icmp6Na);
78         sb.append(" icmp6Ns ").append(icmp6Ns);
79 
80         sb.append(" ipv4RxMulticast ").append(ipv4RxMulticast);
81         sb.append(" ipv6Multicast ").append(ipv6Multicast);
82         sb.append(" otherRxMulticast ").append(otherRxMulticast);
83         for (int i = 0; i < cmdEventWakeCntArray.length; i++) {
84             sb.append(" cmdEventWakeCntArray[" + i + "] " + cmdEventWakeCntArray[i]);
85         }
86         for (int i = 0; i < driverFWLocalWakeCntArray.length; i++) {
87             sb.append(" driverFWLocalWakeCntArray[" + i + "] " + driverFWLocalWakeCntArray[i]);
88         }
89 
90         return sb.toString();
91     }
92 
93     /* Implement the Parcelable interface
94      * {@hide}
95      */
96     @Override
describeContents()97     public int describeContents() {
98         return 0;
99     }
100 
101     /* Implement the Parcelable interface
102      * {@hide}
103      */
104     @Override
writeToParcel(Parcel dest, int flags)105     public void writeToParcel(Parcel dest, int flags) {
106         dest.writeInt(totalCmdEventWake);
107         dest.writeInt(totalDriverFwLocalWake);
108         dest.writeInt(totalRxDataWake);
109 
110         dest.writeInt(rxUnicast);
111         dest.writeInt(rxMulticast);
112         dest.writeInt(rxBroadcast);
113 
114         dest.writeInt(icmp);
115         dest.writeInt(icmp6);
116         dest.writeInt(icmp6Ra);
117         dest.writeInt(icmp6Na);
118         dest.writeInt(icmp6Ns);
119 
120         dest.writeInt(ipv4RxMulticast);
121         dest.writeInt(ipv6Multicast);
122         dest.writeInt(otherRxMulticast);
123         dest.writeIntArray(cmdEventWakeCntArray);
124         dest.writeIntArray(driverFWLocalWakeCntArray);
125     }
126 
127     /* Implement the Parcelable interface
128      * {@hide}
129      */
130     public static final Creator<WlanWakeReasonAndCounts> CREATOR =
131             new Creator<WlanWakeReasonAndCounts>() {
132                 public WlanWakeReasonAndCounts createFromParcel(Parcel in) {
133                     WlanWakeReasonAndCounts counts = new WlanWakeReasonAndCounts();
134                     counts.totalCmdEventWake = in.readInt();
135                     counts.totalDriverFwLocalWake = in.readInt();
136                     counts.totalRxDataWake = in.readInt();
137 
138                     counts.rxUnicast = in.readInt();
139                     counts.rxMulticast = in.readInt();
140                     counts.rxBroadcast = in.readInt();
141 
142                     counts.icmp = in.readInt();
143                     counts.icmp6 = in.readInt();
144                     counts.icmp6Ra = in.readInt();
145                     counts.icmp6Na = in.readInt();
146                     counts.icmp6Ns = in.readInt();
147 
148                     counts.ipv4RxMulticast = in.readInt();
149                     counts.ipv6Multicast = in.readInt();
150                     counts.otherRxMulticast = in.readInt();
151                     in.readIntArray(counts.cmdEventWakeCntArray);
152                     in.readIntArray(counts.driverFWLocalWakeCntArray);
153                     return counts;
154                 }
155 
156                 /* Implement the Parcelable interface
157                  * {@hide}
158                  */
159                 @Override
160                 public WlanWakeReasonAndCounts[] newArray(int size) {
161                     return new WlanWakeReasonAndCounts[size];
162                 }
163             };
164 }
165