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