15c728994311c40821604c6711171e860776659a6Prerepa Viswanadham/*
25c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * Copyright (C) 2015 The Android Open Source Project
35c728994311c40821604c6711171e860776659a6Prerepa Viswanadham *
45c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * Licensed under the Apache License, Version 2.0 (the "License");
55c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * you may not use this file except in compliance with the License.
65c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * You may obtain a copy of the License at
75c728994311c40821604c6711171e860776659a6Prerepa Viswanadham *
85c728994311c40821604c6711171e860776659a6Prerepa Viswanadham *      http://www.apache.org/licenses/LICENSE-2.0
95c728994311c40821604c6711171e860776659a6Prerepa Viswanadham *
105c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * Unless required by applicable law or agreed to in writing, software
115c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * distributed under the License is distributed on an "AS IS" BASIS,
125c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * See the License for the specific language governing permissions and
145c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * limitations under the License.
155c728994311c40821604c6711171e860776659a6Prerepa Viswanadham */
165c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
175c728994311c40821604c6711171e860776659a6Prerepa Viswanadhampackage android.telephony;
185c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
195c728994311c40821604c6711171e860776659a6Prerepa Viswanadhamimport android.os.Parcel;
205c728994311c40821604c6711171e860776659a6Prerepa Viswanadhamimport android.os.Parcelable;
215c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
225c728994311c40821604c6711171e860776659a6Prerepa Viswanadhamimport java.util.Arrays;
235c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
245c728994311c40821604c6711171e860776659a6Prerepa Viswanadham/**
255c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * Reports modem activity information
265c728994311c40821604c6711171e860776659a6Prerepa Viswanadham * @hide
275c728994311c40821604c6711171e860776659a6Prerepa Viswanadham */
285c728994311c40821604c6711171e860776659a6Prerepa Viswanadhampublic class ModemActivityInfo implements Parcelable {
295c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
305c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * Tx power index
315c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * index 0 = tx_power < 0dBm
325c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * index 1 = 0dBm < tx_power < 5dBm
335c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * index 2 = 5dBm < tx_power < 15dBm
345c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * index 3 = 15dBm < tx_power < 20dBm
355c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * index 4 = tx_power > 20dBm
365c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
375c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public static final int TX_POWER_LEVELS = 5;
385c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
395c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    private final long mTimestamp;
405c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    private final int mSleepTimeMs;
415c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    private final int mIdleTimeMs;
425c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    private final int [] mTxTimeMs = new int[TX_POWER_LEVELS];
435c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    private final int mRxTimeMs;
445c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    private final int mEnergyUsed;
455c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
465c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public ModemActivityInfo(long timestamp, int sleepTimeMs, int idleTimeMs,
475c728994311c40821604c6711171e860776659a6Prerepa Viswanadham                        int[] txTimeMs, int rxTimeMs, int energyUsed) {
485c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        mTimestamp = timestamp;
495c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        mSleepTimeMs = sleepTimeMs;
505c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        mIdleTimeMs = idleTimeMs;
515c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        System.arraycopy(txTimeMs, 0, mTxTimeMs, 0, Math.min(txTimeMs.length, TX_POWER_LEVELS));
525c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        mRxTimeMs = rxTimeMs;
535c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        mEnergyUsed = energyUsed;
545c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
555c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
565c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    @Override
575c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public String toString() {
585c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return "ModemActivityInfo{"
595c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mTimestamp=" + mTimestamp
605c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mSleepTimeMs=" + mSleepTimeMs
615c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mTxTimeMs[]=" + Arrays.toString(mTxTimeMs)
625c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mRxTimeMs=" + mRxTimeMs
635c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mEnergyUsed=" + mEnergyUsed
645c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + "}";
655c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
665c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
675c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int describeContents() {
685c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return 0;
695c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
705c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
715c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public static final Parcelable.Creator<ModemActivityInfo> CREATOR =
725c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            new Parcelable.Creator<ModemActivityInfo>() {
735c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        public ModemActivityInfo createFromParcel(Parcel in) {
745c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            long timestamp = in.readLong();
755c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int sleepTimeMs = in.readInt();
765c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int idleTimeMs = in.readInt();
775c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int[] txTimeMs = new int[TX_POWER_LEVELS];
785c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            for (int i = 0; i < TX_POWER_LEVELS; i++) {
795c728994311c40821604c6711171e860776659a6Prerepa Viswanadham                txTimeMs[i] = in.readInt();
805c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            }
815c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int rxTimeMs = in.readInt();
825c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int energyUsed = in.readInt();
835c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            return new ModemActivityInfo(timestamp, sleepTimeMs, idleTimeMs,
845c728994311c40821604c6711171e860776659a6Prerepa Viswanadham                                txTimeMs, rxTimeMs, energyUsed);
855c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
865c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
875c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        public ModemActivityInfo[] newArray(int size) {
885c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            return new ModemActivityInfo[size];
895c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
905c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    };
915c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
925c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public void writeToParcel(Parcel dest, int flags) {
935c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeLong(mTimestamp);
945c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mSleepTimeMs);
955c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mIdleTimeMs);
965c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        for (int i = 0; i < TX_POWER_LEVELS; i++) {
975c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            dest.writeInt(mTxTimeMs[i]);
985c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
995c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mRxTimeMs);
1005c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mEnergyUsed);
1015c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1025c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1035c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1045c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return timestamp of record creation
1055c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1065c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public long getTimestamp() {
1075c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mTimestamp;
1085c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1095c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1105c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1115c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return tx time in ms. It's an array of tx times
1125c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * with each index...
1135c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1145c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int [] getTxTimeMillis() {
1155c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mTxTimeMs;
1165c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1175c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1185c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1195c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return sleep time in ms.
1205c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1215c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getSleepTimeMillis() {
1225c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mSleepTimeMs;
1235c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1245c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1255c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1265c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return idle time in ms.
1275c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1285c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getIdleTimeMillis() {
1295c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mIdleTimeMs;
1305c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1315c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1325c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1335c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return rx time in ms.
1345c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1355c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getRxTimeMillis() {
1365c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mRxTimeMs;
1375c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1385c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1395c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1405c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * product of current(mA), voltage(V) and time(ms)
1415c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return energy used
1425c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1435c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getEnergyUsed () {
1445c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mEnergyUsed;
1455c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1465c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1475c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1485c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return if the record is valid
1495c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1505c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public boolean isValid() {
1515c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        int totalTxTimeMs = 0;
1525c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        int txTime [] = getTxTimeMillis();
1535c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        for (int i = 0; i < TX_POWER_LEVELS; i++) {
1545c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            totalTxTimeMs += txTime[i];
1555c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
1565c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return ((getIdleTimeMillis() != 0) || (totalTxTimeMs != 0)
1575c728994311c40821604c6711171e860776659a6Prerepa Viswanadham                || (getSleepTimeMillis() != 0) || (getIdleTimeMillis() != 0));
1585c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1595c728994311c40821604c6711171e860776659a6Prerepa Viswanadham}
160