1b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle/*
2b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * Copyright (C) 2014 The Android Open Source Project
3b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle *
4b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * Licensed under the Apache License, Version 2.0 (the "License");
5b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * you may not use this file except in compliance with the License.
6b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * You may obtain a copy of the License at
7b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle *
8b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle *      http://www.apache.org/licenses/LICENSE-2.0
9b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle *
10b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * Unless required by applicable law or agreed to in writing, software
11b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * distributed under the License is distributed on an "AS IS" BASIS,
12b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * See the License for the specific language governing permissions and
14b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * limitations under the License.
15b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle */
16b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
17b928a3802bfcd3aeed592906ddb3e14c653b213cvandwallepackage android.net.wifi;
18b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
19b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalleimport android.os.Parcel;
20b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalleimport android.os.Parcelable;
21b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
22b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle/**
23b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * Record of energy and activity information from controller and
24b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * underlying wifi stack state.Timestamp the record with system
25b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * time
26b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle * @hide
27b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle */
28b928a3802bfcd3aeed592906ddb3e14c653b213cvandwallepublic final class WifiActivityEnergyInfo implements Parcelable {
29b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    private final int mStackState;
30b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    private final int mControllerTxTimeMs;
31b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    private final int mControllerRxTimeMs;
32b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    private final int mControllerIdleTimeMs;
33b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    private final int mControllerEnergyUsed;
34b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    private final long timestamp;
35b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
36b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public static final int STACK_STATE_INVALID = 0;
37b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public static final int STACK_STATE_STATE_ACTIVE = 1;
38b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public static final int STACK_STATE_STATE_SCANNING = 2;
39b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public static final int STACK_STATE_STATE_IDLE = 3;
40b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
41b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public WifiActivityEnergyInfo(int stackState, int txTime, int rxTime,
42b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle                                  int idleTime, int energyUsed) {
43b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        mStackState = stackState;
44b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        mControllerTxTimeMs = txTime;
45b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        mControllerRxTimeMs = rxTime;
46b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        mControllerIdleTimeMs = idleTime;
47b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        mControllerEnergyUsed = energyUsed;
48b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        timestamp = System.currentTimeMillis();
49b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
50b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
51b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    @Override
52b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public String toString() {
53b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return "WifiActivityEnergyInfo{"
54b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " timestamp=" + timestamp
55b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " mStackState=" + mStackState
56b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " mControllerTxTimeMs=" + mControllerTxTimeMs
57b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " mControllerRxTimeMs=" + mControllerRxTimeMs
58b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " mControllerIdleTimeMs=" + mControllerIdleTimeMs
59b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " mControllerEnergyUsed=" + mControllerEnergyUsed
60b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            + " }";
61b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
62b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
63b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public static final Parcelable.Creator<WifiActivityEnergyInfo> CREATOR =
64b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            new Parcelable.Creator<WifiActivityEnergyInfo>() {
65b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        public WifiActivityEnergyInfo createFromParcel(Parcel in) {
66b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            int stackState = in.readInt();
67b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            int txTime = in.readInt();
68b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            int rxTime = in.readInt();
69b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            int idleTime = in.readInt();
70b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            int energyUsed = in.readInt();
71b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            return new WifiActivityEnergyInfo(stackState, txTime, rxTime,
72b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle                    idleTime, energyUsed);
73b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        }
74b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        public WifiActivityEnergyInfo[] newArray(int size) {
75b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle            return new WifiActivityEnergyInfo[size];
76b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        }
77b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    };
78b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
79b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public void writeToParcel(Parcel out, int flags) {
80b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        out.writeInt(mStackState);
81b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        out.writeInt(mControllerTxTimeMs);
82b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        out.writeInt(mControllerRxTimeMs);
83b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        out.writeInt(mControllerIdleTimeMs);
84b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        out.writeInt(mControllerEnergyUsed);
85b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
86b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
87b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public int describeContents() {
88b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return 0;
89b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
90b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
91b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
92b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return bt stack reported state
93b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
94b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public int getStackState() {
95b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return mStackState;
96b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
97b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
98b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
99b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return tx time in ms
100b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
101b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public int getControllerTxTimeMillis() {
102b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return (int)mControllerTxTimeMs;
103b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
104b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
105b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
106b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return rx time in ms
107b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
108b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public int getControllerRxTimeMillis() {
109b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return (int)mControllerRxTimeMs;
110b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
111b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
112b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
113b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return idle time in ms
114b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
115b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public int getControllerIdleTimeMillis() {
116b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return (int)mControllerIdleTimeMs;
117b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
118b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
119b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
120b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * product of current(mA), voltage(V) and time(ms)
121b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return energy used
122b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
123b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public int getControllerEnergyUsed() {
124b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return mControllerEnergyUsed;
125b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
126b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
127b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return timestamp(wall clock) of record creation
128b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
129b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public long getTimeStamp() {
130b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return timestamp;
131b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
132b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle
133b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    /**
134b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     * @return if the record is valid
135b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle     */
136b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    public boolean isValid() {
137b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle        return ((getControllerTxTimeMillis() !=0) ||
138b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle                (getControllerRxTimeMillis() !=0) ||
139b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle                (getControllerIdleTimeMillis() !=0));
140b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle    }
141b928a3802bfcd3aeed592906ddb3e14c653b213cvandwalle}
142