1 /* 2 * Copyright (C) 2014 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 android.bluetooth; 18 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 22 import java.util.Arrays; 23 24 /** 25 * Record of energy and activity information from controller and 26 * underlying bt stack state.Timestamp the record with system 27 * time 28 * 29 * @hide 30 */ 31 public final class BluetoothActivityEnergyInfo implements Parcelable { 32 private final long mTimestamp; 33 private int mBluetoothStackState; 34 private long mControllerTxTimeMs; 35 private long mControllerRxTimeMs; 36 private long mControllerIdleTimeMs; 37 private long mControllerEnergyUsed; 38 private UidTraffic[] mUidTraffic; 39 40 public static final int BT_STACK_STATE_INVALID = 0; 41 public static final int BT_STACK_STATE_STATE_ACTIVE = 1; 42 public static final int BT_STACK_STATE_STATE_SCANNING = 2; 43 public static final int BT_STACK_STATE_STATE_IDLE = 3; 44 BluetoothActivityEnergyInfo(long timestamp, int stackState, long txTime, long rxTime, long idleTime, long energyUsed)45 public BluetoothActivityEnergyInfo(long timestamp, int stackState, 46 long txTime, long rxTime, long idleTime, long energyUsed) { 47 mTimestamp = timestamp; 48 mBluetoothStackState = stackState; 49 mControllerTxTimeMs = txTime; 50 mControllerRxTimeMs = rxTime; 51 mControllerIdleTimeMs = idleTime; 52 mControllerEnergyUsed = energyUsed; 53 } 54 55 @SuppressWarnings("unchecked") BluetoothActivityEnergyInfo(Parcel in)56 BluetoothActivityEnergyInfo(Parcel in) { 57 mTimestamp = in.readLong(); 58 mBluetoothStackState = in.readInt(); 59 mControllerTxTimeMs = in.readLong(); 60 mControllerRxTimeMs = in.readLong(); 61 mControllerIdleTimeMs = in.readLong(); 62 mControllerEnergyUsed = in.readLong(); 63 mUidTraffic = in.createTypedArray(UidTraffic.CREATOR); 64 } 65 66 @Override toString()67 public String toString() { 68 return "BluetoothActivityEnergyInfo{" 69 + " mTimestamp=" + mTimestamp 70 + " mBluetoothStackState=" + mBluetoothStackState 71 + " mControllerTxTimeMs=" + mControllerTxTimeMs 72 + " mControllerRxTimeMs=" + mControllerRxTimeMs 73 + " mControllerIdleTimeMs=" + mControllerIdleTimeMs 74 + " mControllerEnergyUsed=" + mControllerEnergyUsed 75 + " mUidTraffic=" + Arrays.toString(mUidTraffic) 76 + " }"; 77 } 78 79 public static final @android.annotation.NonNull Parcelable.Creator<BluetoothActivityEnergyInfo> CREATOR = 80 new Parcelable.Creator<BluetoothActivityEnergyInfo>() { 81 public BluetoothActivityEnergyInfo createFromParcel(Parcel in) { 82 return new BluetoothActivityEnergyInfo(in); 83 } 84 85 public BluetoothActivityEnergyInfo[] newArray(int size) { 86 return new BluetoothActivityEnergyInfo[size]; 87 } 88 }; 89 90 91 @Override 92 @SuppressWarnings("unchecked") writeToParcel(Parcel out, int flags)93 public void writeToParcel(Parcel out, int flags) { 94 out.writeLong(mTimestamp); 95 out.writeInt(mBluetoothStackState); 96 out.writeLong(mControllerTxTimeMs); 97 out.writeLong(mControllerRxTimeMs); 98 out.writeLong(mControllerIdleTimeMs); 99 out.writeLong(mControllerEnergyUsed); 100 out.writeTypedArray(mUidTraffic, flags); 101 } 102 103 @Override describeContents()104 public int describeContents() { 105 return 0; 106 } 107 108 /** 109 * @return bt stack reported state 110 */ getBluetoothStackState()111 public int getBluetoothStackState() { 112 return mBluetoothStackState; 113 } 114 115 /** 116 * @return tx time in ms 117 */ getControllerTxTimeMillis()118 public long getControllerTxTimeMillis() { 119 return mControllerTxTimeMs; 120 } 121 122 /** 123 * @return rx time in ms 124 */ getControllerRxTimeMillis()125 public long getControllerRxTimeMillis() { 126 return mControllerRxTimeMs; 127 } 128 129 /** 130 * @return idle time in ms 131 */ getControllerIdleTimeMillis()132 public long getControllerIdleTimeMillis() { 133 return mControllerIdleTimeMs; 134 } 135 136 /** 137 * product of current(mA), voltage(V) and time(ms) 138 * 139 * @return energy used 140 */ getControllerEnergyUsed()141 public long getControllerEnergyUsed() { 142 return mControllerEnergyUsed; 143 } 144 145 /** 146 * @return timestamp(real time elapsed in milliseconds since boot) of record creation. 147 */ getTimeStamp()148 public long getTimeStamp() { 149 return mTimestamp; 150 } 151 getUidTraffic()152 public UidTraffic[] getUidTraffic() { 153 return mUidTraffic; 154 } 155 setUidTraffic(UidTraffic[] traffic)156 public void setUidTraffic(UidTraffic[] traffic) { 157 mUidTraffic = traffic; 158 } 159 160 /** 161 * @return if the record is valid 162 */ isValid()163 public boolean isValid() { 164 return ((mControllerTxTimeMs >= 0) && (mControllerRxTimeMs >= 0) 165 && (mControllerIdleTimeMs >= 0)); 166 } 167 } 168