146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham/*
246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * Copyright (C) 2015 The Android Open Source Project
346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham *
446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * Licensed under the Apache License, Version 2.0 (the "License");
546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * you may not use this file except in compliance with the License.
646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * You may obtain a copy of the License at
746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham *
846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham *      http://www.apache.org/licenses/LICENSE-2.0
946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham *
1046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * Unless required by applicable law or agreed to in writing, software
1146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * distributed under the License is distributed on an "AS IS" BASIS,
1246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * See the License for the specific language governing permissions and
1446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * limitations under the License.
1546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham */
1646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
1746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadhampackage android.net.wifi;
1846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
1946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadhamimport android.os.Parcel;
2013f378e738746800517f98b8561da315993c240aRoshan Piusimport android.os.Parcelable;
2146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
2246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham/**
2346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham * A class representing wifi wake reason accounting.
2446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham */
2546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
2646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham/** @hide */
2746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadhampublic class WifiWakeReasonAndCounts implements Parcelable {
2846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    private static final String TAG = "WifiWakeReasonAndCounts";
2946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    /**
3046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * Wlan can wake host, only when it is cmd/event, local driver-fw
3146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * functions(non-data, non cmd/event) and rx data.The first packet
3246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * from wlan that woke up a sleep host is what is accounted here.
3346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * Total wlan wake to application processor would be:
3446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * [cmdEventWake + driverFwLocalWake + totalRxDataWake]
3546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * A further classification is provided for identifying the reasons
3646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * for wakeup.
3746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     */
3846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int totalCmdEventWake;
3946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int totalDriverFwLocalWake;
4046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int totalRxDataWake;
4146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
4246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int rxUnicast;
4346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int rxMulticast;
4446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int rxBroadcast;
4546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
4646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int icmp;
4746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int icmp6;
4846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int icmp6Ra;
4946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int icmp6Na;
5046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int icmp6Ns;
5146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
5246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int ipv4RxMulticast;
5346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int ipv6Multicast;
5446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int otherRxMulticast;
5513f378e738746800517f98b8561da315993c240aRoshan Pius    public int[] cmdEventWakeCntArray;
5613f378e738746800517f98b8561da315993c240aRoshan Pius    public int[] driverFWLocalWakeCntArray;
5746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
5846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    /* {@hide} */
5946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public WifiWakeReasonAndCounts () {
6046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    }
6146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
6246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    @Override
6346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    /* {@hide} */
6446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public String toString() {
6546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        StringBuffer sb = new StringBuffer();
6646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" totalCmdEventWake ").append(totalCmdEventWake);
6746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" totalDriverFwLocalWake ").append(totalDriverFwLocalWake);
6846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" totalRxDataWake ").append(totalRxDataWake);
6946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
7046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" rxUnicast ").append(rxUnicast);
7146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" rxMulticast ").append(rxMulticast);
7246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" rxBroadcast ").append(rxBroadcast);
7346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
7446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" icmp ").append(icmp);
7546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" icmp6 ").append(icmp6);
7646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" icmp6Ra ").append(icmp6Ra);
7746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" icmp6Na ").append(icmp6Na);
7846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" icmp6Ns ").append(icmp6Ns);
7946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
8046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" ipv4RxMulticast ").append(ipv4RxMulticast);
8146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" ipv6Multicast ").append(ipv6Multicast);
8246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        sb.append(" otherRxMulticast ").append(otherRxMulticast);
8313f378e738746800517f98b8561da315993c240aRoshan Pius        for (int i = 0; i < cmdEventWakeCntArray.length; i++) {
8413f378e738746800517f98b8561da315993c240aRoshan Pius            sb.append(" cmdEventWakeCntArray[" + i + "] " + cmdEventWakeCntArray[i]);
8513f378e738746800517f98b8561da315993c240aRoshan Pius        }
8613f378e738746800517f98b8561da315993c240aRoshan Pius        for (int i = 0; i < driverFWLocalWakeCntArray.length; i++) {
8713f378e738746800517f98b8561da315993c240aRoshan Pius            sb.append(" driverFWLocalWakeCntArray[" + i + "] " + driverFWLocalWakeCntArray[i]);
8813f378e738746800517f98b8561da315993c240aRoshan Pius        }
8913f378e738746800517f98b8561da315993c240aRoshan Pius
9046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        return sb.toString();
9146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    }
9246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
9346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    /* Implement the Parcelable interface
9446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * {@hide}
9546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     */
9646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    @Override
9746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public int describeContents() {
9846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        return 0;
9946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    }
10046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
10146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    /* Implement the Parcelable interface
10246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * {@hide}
10346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     */
10446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    @Override
10546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public void writeToParcel(Parcel dest, int flags) {
10646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(totalCmdEventWake);
10746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(totalDriverFwLocalWake);
10846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(totalRxDataWake);
10946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
11046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(rxUnicast);
11146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(rxMulticast);
11246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(rxBroadcast);
11346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
11446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(icmp);
11546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(icmp6);
11646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(icmp6Ra);
11746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(icmp6Na);
11846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(icmp6Ns);
11946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
12046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(ipv4RxMulticast);
12146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(ipv6Multicast);
12246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        dest.writeInt(otherRxMulticast);
12313f378e738746800517f98b8561da315993c240aRoshan Pius        dest.writeIntArray(cmdEventWakeCntArray);
12413f378e738746800517f98b8561da315993c240aRoshan Pius        dest.writeIntArray(driverFWLocalWakeCntArray);
12546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    }
12646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
12746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    /* Implement the Parcelable interface
12846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     * {@hide}
12946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham     */
13046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham    public static final Creator<WifiWakeReasonAndCounts> CREATOR =
13146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        new Creator<WifiWakeReasonAndCounts>() {
13246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham            public WifiWakeReasonAndCounts createFromParcel(Parcel in) {
13346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                WifiWakeReasonAndCounts counts = new WifiWakeReasonAndCounts();
13446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.totalCmdEventWake = in.readInt();
13546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.totalDriverFwLocalWake = in.readInt();
13646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.totalRxDataWake = in.readInt();
13746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
13846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.rxUnicast = in.readInt();
13946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.rxMulticast = in.readInt();
14046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.rxBroadcast = in.readInt();
14146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
14246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.icmp = in.readInt();
14346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.icmp6 = in.readInt();
14446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.icmp6Ra = in.readInt();
14546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.icmp6Na = in.readInt();
14646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.icmp6Ns = in.readInt();
14746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham
14846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.ipv4RxMulticast = in.readInt();
14946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.ipv6Multicast = in.readInt();
15046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                counts.otherRxMulticast = in.readInt();
15113f378e738746800517f98b8561da315993c240aRoshan Pius                in.readIntArray(counts.cmdEventWakeCntArray);
15213f378e738746800517f98b8561da315993c240aRoshan Pius                in.readIntArray(counts.driverFWLocalWakeCntArray);
15346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                return counts;
15446f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham            }
15546f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham            /* Implement the Parcelable interface
15646f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham             * {@hide}
15746f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham             */
15846f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham            @Override
15946f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham            public WifiWakeReasonAndCounts[] newArray(int size) {
16046f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham                return new WifiWakeReasonAndCounts[size];
16146f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham            }
16246f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham        };
16346f5f53d2838ec6f265c168100e21a22f990a97dPrerepa Viswanadham}
164