1 /* 2 * Copyright (C) 2016 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 package android.hardware.location; 17 18 import android.annotation.SystemApi; 19 import android.hardware.contexthub.V1_0.ContextHub; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 23 import java.util.Arrays; 24 25 /** 26 * @hide 27 */ 28 @SystemApi 29 public class ContextHubInfo implements Parcelable { 30 private int mId; 31 private String mName; 32 private String mVendor; 33 private String mToolchain; 34 private int mPlatformVersion; 35 private int mToolchainVersion; 36 private float mPeakMips; 37 private float mStoppedPowerDrawMw; 38 private float mSleepPowerDrawMw; 39 private float mPeakPowerDrawMw; 40 private int mMaxPacketLengthBytes; 41 private byte mChreApiMajorVersion; 42 private byte mChreApiMinorVersion; 43 private short mChrePatchVersion; 44 private long mChrePlatformId; 45 46 private int[] mSupportedSensors; 47 48 private MemoryRegion[] mMemoryRegions; 49 50 /* 51 * TODO(b/67734082): Deprecate this constructor and mark private fields as final. 52 */ 53 public ContextHubInfo() { 54 } 55 56 /** 57 * @hide 58 */ 59 public ContextHubInfo(ContextHub contextHub) { 60 mId = contextHub.hubId; 61 mName = contextHub.name; 62 mVendor = contextHub.vendor; 63 mToolchain = contextHub.toolchain; 64 mPlatformVersion = contextHub.platformVersion; 65 mToolchainVersion = contextHub.toolchainVersion; 66 mPeakMips = contextHub.peakMips; 67 mStoppedPowerDrawMw = contextHub.stoppedPowerDrawMw; 68 mSleepPowerDrawMw = contextHub.sleepPowerDrawMw; 69 mPeakPowerDrawMw = contextHub.peakPowerDrawMw; 70 mMaxPacketLengthBytes = contextHub.maxSupportedMsgLen; 71 mChrePlatformId = contextHub.chrePlatformId; 72 mChreApiMajorVersion = contextHub.chreApiMajorVersion; 73 mChreApiMinorVersion = contextHub.chreApiMinorVersion; 74 mChrePatchVersion = contextHub.chrePatchVersion; 75 76 mSupportedSensors = new int[0]; 77 mMemoryRegions = new MemoryRegion[0]; 78 } 79 80 /** 81 * returns the maximum number of bytes that can be sent per message to the hub 82 * 83 * @return int - maximum bytes that can be transmitted in a 84 * single packet 85 */ 86 public int getMaxPacketLengthBytes() { 87 return mMaxPacketLengthBytes; 88 } 89 90 /** 91 * get the context hub unique identifer 92 * 93 * @return int - unique system wide identifier 94 */ 95 public int getId() { 96 return mId; 97 } 98 99 /** 100 * get a string as a hub name 101 * 102 * @return String - a name for the hub 103 */ 104 public String getName() { 105 return mName; 106 } 107 108 /** 109 * get a string as the vendor name 110 * 111 * @return String - a name for the vendor 112 */ 113 public String getVendor() { 114 return mVendor; 115 } 116 117 /** 118 * get tool chain string 119 * 120 * @return String - description of the tool chain 121 */ 122 public String getToolchain() { 123 return mToolchain; 124 } 125 126 /** 127 * get platform version 128 * 129 * @return int - platform version number 130 */ 131 public int getPlatformVersion() { 132 return mPlatformVersion; 133 } 134 135 /** 136 * get static platform version number 137 * 138 * @return int - platform version number 139 */ 140 public int getStaticSwVersion() { 141 return (mChreApiMajorVersion << 24) | (mChreApiMinorVersion << 16) | (mChrePatchVersion); 142 } 143 144 /** 145 * get the tool chain version 146 * 147 * @return int - the tool chain version 148 */ 149 public int getToolchainVersion() { 150 return mToolchainVersion; 151 } 152 153 /** 154 * get the peak processing mips the hub can support 155 * 156 * @return float - peak MIPS that this hub can deliver 157 */ 158 public float getPeakMips() { 159 return mPeakMips; 160 } 161 162 /** 163 * get the stopped power draw in milliwatts 164 * This assumes that the hub enter a stopped state - which is 165 * different from the sleep state. Latencies on exiting the 166 * sleep state are typically higher and expect to be in multiple 167 * milliseconds. 168 * 169 * @return float - power draw by the hub in stopped state 170 */ 171 public float getStoppedPowerDrawMw() { 172 return mStoppedPowerDrawMw; 173 } 174 175 /** 176 * get the power draw of the hub in sleep mode. This assumes 177 * that the hub supports a sleep mode in which the power draw is 178 * lower than the power consumed when the hub is actively 179 * processing. As a guideline, assume that the hub should be 180 * able to enter sleep mode if it knows reliably on completion 181 * of some task that the next interrupt/scheduled work item is 182 * at least 250 milliseconds later. 183 * 184 * @return float - sleep power draw in milli watts 185 */ 186 public float getSleepPowerDrawMw() { 187 return mSleepPowerDrawMw; 188 } 189 190 /** 191 * get the peak powe draw of the hub. This is the power consumed 192 * by the hub at maximum load. 193 * 194 * @return float - peak power draw 195 */ 196 public float getPeakPowerDrawMw() { 197 return mPeakPowerDrawMw; 198 } 199 200 /** 201 * get the sensors supported by this hub 202 * 203 * @return int[] - all the supported sensors on this hub 204 * 205 * @see ContextHubManager 206 */ 207 public int[] getSupportedSensors() { 208 return Arrays.copyOf(mSupportedSensors, mSupportedSensors.length); 209 } 210 211 /** 212 * get the various memory regions on this hub 213 * 214 * @return MemoryRegion[] - all the memory regions on this hub 215 * 216 * @see MemoryRegion 217 */ 218 public MemoryRegion[] getMemoryRegions() { 219 return Arrays.copyOf(mMemoryRegions, mMemoryRegions.length); 220 } 221 222 /** 223 * @return the CHRE platform ID as defined in chre/version.h 224 */ 225 public long getChrePlatformId() { 226 return mChrePlatformId; 227 } 228 229 /** 230 * @return the CHRE API's major version as defined in chre/version.h 231 */ 232 public byte getChreApiMajorVersion() { 233 return mChreApiMajorVersion; 234 } 235 236 /** 237 * @return the CHRE API's minor version as defined in chre/version.h 238 */ 239 public byte getChreApiMinorVersion() { 240 return mChreApiMinorVersion; 241 } 242 243 /** 244 * @return the CHRE patch version as defined in chre/version.h 245 */ 246 public short getChrePatchVersion() { 247 return mChrePatchVersion; 248 } 249 250 @Override 251 public String toString() { 252 String retVal = ""; 253 retVal += "ID/handle : " + mId; 254 retVal += ", Name : " + mName; 255 retVal += "\n\tVendor : " + mVendor; 256 retVal += ", Toolchain : " + mToolchain; 257 retVal += ", Toolchain version: 0x" + Integer.toHexString(mToolchainVersion); 258 retVal += "\n\tPlatformVersion : 0x" + Integer.toHexString(mPlatformVersion); 259 retVal += ", SwVersion : " 260 + mChreApiMajorVersion + "." + mChreApiMinorVersion + "." + mChrePatchVersion; 261 retVal += ", CHRE platform ID: 0x" + Long.toHexString(mChrePlatformId); 262 retVal += "\n\tPeakMips : " + mPeakMips; 263 retVal += ", StoppedPowerDraw : " + mStoppedPowerDrawMw + " mW"; 264 retVal += ", PeakPowerDraw : " + mPeakPowerDrawMw + " mW"; 265 retVal += ", MaxPacketLength : " + mMaxPacketLengthBytes + " Bytes"; 266 267 return retVal; 268 } 269 270 private ContextHubInfo(Parcel in) { 271 mId = in.readInt(); 272 mName = in.readString(); 273 mVendor = in.readString(); 274 mToolchain = in.readString(); 275 mPlatformVersion = in.readInt(); 276 mToolchainVersion = in.readInt(); 277 mPeakMips = in.readFloat(); 278 mStoppedPowerDrawMw = in.readFloat(); 279 mSleepPowerDrawMw = in.readFloat(); 280 mPeakPowerDrawMw = in.readFloat(); 281 mMaxPacketLengthBytes = in.readInt(); 282 mChrePlatformId = in.readLong(); 283 mChreApiMajorVersion = in.readByte(); 284 mChreApiMinorVersion = in.readByte(); 285 mChrePatchVersion = (short) in.readInt(); 286 287 int numSupportedSensors = in.readInt(); 288 mSupportedSensors = new int[numSupportedSensors]; 289 in.readIntArray(mSupportedSensors); 290 mMemoryRegions = in.createTypedArray(MemoryRegion.CREATOR); 291 } 292 293 public int describeContents() { 294 return 0; 295 } 296 297 public void writeToParcel(Parcel out, int flags) { 298 out.writeInt(mId); 299 out.writeString(mName); 300 out.writeString(mVendor); 301 out.writeString(mToolchain); 302 out.writeInt(mPlatformVersion); 303 out.writeInt(mToolchainVersion); 304 out.writeFloat(mPeakMips); 305 out.writeFloat(mStoppedPowerDrawMw); 306 out.writeFloat(mSleepPowerDrawMw); 307 out.writeFloat(mPeakPowerDrawMw); 308 out.writeInt(mMaxPacketLengthBytes); 309 out.writeLong(mChrePlatformId); 310 out.writeByte(mChreApiMajorVersion); 311 out.writeByte(mChreApiMinorVersion); 312 out.writeInt(mChrePatchVersion); 313 314 out.writeInt(mSupportedSensors.length); 315 out.writeIntArray(mSupportedSensors); 316 out.writeTypedArray(mMemoryRegions, flags); 317 } 318 319 public static final Parcelable.Creator<ContextHubInfo> CREATOR 320 = new Parcelable.Creator<ContextHubInfo>() { 321 public ContextHubInfo createFromParcel(Parcel in) { 322 return new ContextHubInfo(in); 323 } 324 325 public ContextHubInfo[] newArray(int size) { 326 return new ContextHubInfo[size]; 327 } 328 }; 329 } 330