ModemActivityInfo.java revision 21f76aa77075be5e057c36040d7d6e695c669b72
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
6121f76aa77075be5e057c36040d7d6e695c669b72Adam Lesinski            + " mIdleTimeMs=" + mIdleTimeMs
625c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mTxTimeMs[]=" + Arrays.toString(mTxTimeMs)
635c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mRxTimeMs=" + mRxTimeMs
645c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + " mEnergyUsed=" + mEnergyUsed
655c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            + "}";
665c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
675c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
685c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int describeContents() {
695c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return 0;
705c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
715c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
725c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public static final Parcelable.Creator<ModemActivityInfo> CREATOR =
735c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            new Parcelable.Creator<ModemActivityInfo>() {
745c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        public ModemActivityInfo createFromParcel(Parcel in) {
755c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            long timestamp = in.readLong();
765c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int sleepTimeMs = in.readInt();
775c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int idleTimeMs = in.readInt();
785c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int[] txTimeMs = new int[TX_POWER_LEVELS];
795c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            for (int i = 0; i < TX_POWER_LEVELS; i++) {
805c728994311c40821604c6711171e860776659a6Prerepa Viswanadham                txTimeMs[i] = in.readInt();
815c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            }
825c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int rxTimeMs = in.readInt();
835c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            int energyUsed = in.readInt();
845c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            return new ModemActivityInfo(timestamp, sleepTimeMs, idleTimeMs,
855c728994311c40821604c6711171e860776659a6Prerepa Viswanadham                                txTimeMs, rxTimeMs, energyUsed);
865c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
875c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
885c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        public ModemActivityInfo[] newArray(int size) {
895c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            return new ModemActivityInfo[size];
905c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
915c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    };
925c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
935c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public void writeToParcel(Parcel dest, int flags) {
945c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeLong(mTimestamp);
955c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mSleepTimeMs);
965c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mIdleTimeMs);
975c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        for (int i = 0; i < TX_POWER_LEVELS; i++) {
985c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            dest.writeInt(mTxTimeMs[i]);
995c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
1005c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mRxTimeMs);
1015c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        dest.writeInt(mEnergyUsed);
1025c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1035c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1045c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1055c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return timestamp of record creation
1065c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1075c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public long getTimestamp() {
1085c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mTimestamp;
1095c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1105c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1115c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1125c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return tx time in ms. It's an array of tx times
1135c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * with each index...
1145c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1155c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int [] getTxTimeMillis() {
1165c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mTxTimeMs;
1175c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1185c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1195c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1205c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return sleep time in ms.
1215c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1225c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getSleepTimeMillis() {
1235c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mSleepTimeMs;
1245c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1255c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1265c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1275c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return idle time in ms.
1285c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1295c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getIdleTimeMillis() {
1305c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mIdleTimeMs;
1315c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1325c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1335c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1345c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return rx time in ms.
1355c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1365c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getRxTimeMillis() {
1375c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mRxTimeMs;
1385c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1395c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1405c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1415c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * product of current(mA), voltage(V) and time(ms)
1425c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return energy used
1435c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1445c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public int getEnergyUsed () {
1455c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        return mEnergyUsed;
1465c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1475c728994311c40821604c6711171e860776659a6Prerepa Viswanadham
1485c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    /**
1495c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     * @return if the record is valid
1505c728994311c40821604c6711171e860776659a6Prerepa Viswanadham     */
1515c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    public boolean isValid() {
1525c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        int totalTxTimeMs = 0;
1535c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        int txTime [] = getTxTimeMillis();
1545c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        for (int i = 0; i < TX_POWER_LEVELS; i++) {
1555c728994311c40821604c6711171e860776659a6Prerepa Viswanadham            totalTxTimeMs += txTime[i];
1565c728994311c40821604c6711171e860776659a6Prerepa Viswanadham        }
15721f76aa77075be5e057c36040d7d6e695c669b72Adam Lesinski        return ((getIdleTimeMillis() >= 0) && (totalTxTimeMs >= 0)
15821f76aa77075be5e057c36040d7d6e695c669b72Adam Lesinski                && (getSleepTimeMillis() >= 0) && (getIdleTimeMillis() >= 0));
1595c728994311c40821604c6711171e860776659a6Prerepa Viswanadham    }
1605c728994311c40821604c6711171e860776659a6Prerepa Viswanadham}
161