1e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/* 2e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Copyright (C) 2010 The Android Open Source Project 3e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 4e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 5e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * you may not use this file except in compliance with the License. 6e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * You may obtain a copy of the License at 7e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 8e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 9e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 10e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Unless required by applicable law or agreed to in writing, software 11e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 12e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * See the License for the specific language governing permissions and 14e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * limitations under the License. 15e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 16e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 17c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodpackage android.hardware.usb; 18e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 19e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.os.Parcel; 20e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.os.Parcelable; 21e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 22e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/** 2311dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This class represents a USB device attached to the android device with the android device 2411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * acting as the USB host. 2511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Each device contains one or more {@link UsbInterface}s, each of which contains a number of 2611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link UsbEndpoint}s (the channels via which data is transmitted over USB). 2711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * 2811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <p> This class contains information (along with {@link UsbInterface} and {@link UsbEndpoint}) 2911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * that describes the capabilities of the USB device. 3011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * To communicate with the device, you open a {@link UsbDeviceConnection} for the device 3111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * and use {@link UsbRequest} to send and receive data on an endpoint. 3211dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link UsbDeviceConnection#controlTransfer} is used for control requests on endpoint zero. 333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 343aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 353aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 363aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about communicating with USB hardware, read the 373aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p> 383aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 39e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 40acc29cc91be634070c92a807df412ced97b9b375Mike Lockwoodpublic class UsbDevice implements Parcelable { 41e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 42e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood private static final String TAG = "UsbDevice"; 43e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 44acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final String mName; 45575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw private final String mManufacturerName; 46575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw private final String mProductName; 47575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw private final String mSerialNumber; 48acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mVendorId; 49acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mProductId; 50acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mClass; 51acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mSubclass; 52acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mProtocol; 537531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood private Parcelable[] mConfigurations; 547531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 557531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood // list of all interfaces on the device 567531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood private UsbInterface[] mInterfaces; 57e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 58e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 59e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * UsbDevice should only be instantiated by UsbService implementation 60e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @hide 61e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 62e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbDevice(String name, int vendorId, int productId, 63575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw int Class, int subClass, int protocol, 647531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood String manufacturerName, String productName, String serialNumber) { 65e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mName = name; 66e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mVendorId = vendorId; 67e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mProductId = productId; 68e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mClass = Class; 69e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mSubclass = subClass; 70e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mProtocol = protocol; 71575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw mManufacturerName = manufacturerName; 72575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw mProductName = productName; 73575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw mSerialNumber = serialNumber; 74e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 75e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 76e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 77e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the name of the device. 78e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * In the standard implementation, this is the path of the device file 79e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * for the device in the usbfs file system. 80e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 81e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device name 82e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 83e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public String getDeviceName() { 84e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mName; 85e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 86e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 87e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 88575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * Returns the manufacturer name of the device. 89575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * 90575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * @return the manufacturer name 91575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw */ 92575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw public String getManufacturerName() { 93575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return mManufacturerName; 94575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw } 95575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw 96575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw /** 97575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * Returns the product name of the device. 98575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * 99575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * @return the product name 100575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw */ 101575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw public String getProductName() { 102575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return mProductName; 103575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw } 104575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw 105575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw /** 106575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * Returns the serial number of the device. 107575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * 108575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * @return the serial number name 109575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw */ 110575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw public String getSerialNumber() { 111575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return mSerialNumber; 112575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw } 113575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw 114575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw /** 115e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns a unique integer ID for the device. 116e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * This is a convenience for clients that want to use an integer to represent 117e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * the device, rather than the device name. 118e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * IDs are not persistent across USB disconnects. 119e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 120e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device ID 121e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 122e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceId() { 123e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return getDeviceId(mName); 124e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 125e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 126e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 127e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns a vendor ID for the device. 128e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 129e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device vendor ID 130e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 131e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getVendorId() { 132e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mVendorId; 133e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 134e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 135e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 136e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns a product ID for the device. 137e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 138e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device product ID 139e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 140e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getProductId() { 141e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mProductId; 142e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 143e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 144e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 145e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the devices's class field. 14611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Some useful constants for USB device classes can be found in {@link UsbConstants}. 147e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 148e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the devices's class 149e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 150e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceClass() { 151e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mClass; 152e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 153e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 154e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 155e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the device's subclass field. 156e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 157e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device's subclass 158e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 159e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceSubclass() { 160e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mSubclass; 161e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 162e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 163e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 16411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the device's protocol field. 165e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 166e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device's protocol 167e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 168e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceProtocol() { 169e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mProtocol; 170e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 171e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 172e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 1737531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * Returns the number of {@link UsbConfiguration}s this device contains. 1747531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * 1757531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * @return the number of configurations 1767531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood */ 1777531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood public int getConfigurationCount() { 1787531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return mConfigurations.length; 1797531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 1807531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 1817531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood /** 1827531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * Returns the {@link UsbConfiguration} at the given index. 1837531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * 1847531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * @return the configuration 1857531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood */ 1867531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood public UsbConfiguration getConfiguration(int index) { 1877531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return (UsbConfiguration)mConfigurations[index]; 1887531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 1897531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 1907531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood private UsbInterface[] getInterfaceList() { 1917531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood if (mInterfaces == null) { 1927531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood int configurationCount = mConfigurations.length; 1937531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood int interfaceCount = 0; 1947531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood for (int i = 0; i < configurationCount; i++) { 1957531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood UsbConfiguration configuration = (UsbConfiguration)mConfigurations[i]; 1967531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood interfaceCount += configuration.getInterfaceCount(); 1977531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 1987531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 1997531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood mInterfaces = new UsbInterface[interfaceCount]; 2007531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood int offset = 0; 2017531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood for (int i = 0; i < configurationCount; i++) { 2027531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood UsbConfiguration configuration = (UsbConfiguration)mConfigurations[i]; 2037531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood interfaceCount = configuration.getInterfaceCount(); 2047531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood for (int j = 0; j < interfaceCount; j++) { 2057531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood mInterfaces[offset++] = configuration.getInterface(j); 2067531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 2077531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 2087531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 2097531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 2107531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return mInterfaces; 2117531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 2127531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 2137531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood /** 21411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the number of {@link UsbInterface}s this device contains. 2157531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * For devices with multiple configurations, you will probably want to use 2167531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * {@link UsbConfiguration#getInterfaceCount} instead. 217e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 218e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the number of interfaces 219e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 220e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getInterfaceCount() { 2217531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return getInterfaceList().length; 222e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 223e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 224e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 22511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the {@link UsbInterface} at the given index. 2267531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * For devices with multiple configurations, you will probably want to use 2277531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * {@link UsbConfiguration#getInterface} instead. 228e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 229e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the interface 230e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 231e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbInterface getInterface(int index) { 2327531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return getInterfaceList()[index]; 2337531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 2347531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood 2357531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood /** 2367531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * Only used by UsbService implementation 2377531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood * @hide 2387531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood */ 2397531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood public void setConfigurations(Parcelable[] configuration) { 2407531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood mConfigurations = configuration; 241e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 242e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 243e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood @Override 244e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public boolean equals(Object o) { 245e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood if (o instanceof UsbDevice) { 246e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return ((UsbDevice)o).mName.equals(mName); 247e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } else if (o instanceof String) { 248e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return ((String)o).equals(mName); 249e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } else { 250e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return false; 251e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 252e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 253e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 254e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood @Override 255c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood public int hashCode() { 256c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood return mName.hashCode(); 257c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood } 258c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood 259c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood @Override 260e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public String toString() { 2617531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood StringBuilder builder = new StringBuilder("UsbDevice[mName=" + mName + 2627531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood ",mVendorId=" + mVendorId + ",mProductId=" + mProductId + 2637531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood ",mClass=" + mClass + ",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol + 264575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw ",mManufacturerName=" + mManufacturerName + ",mProductName=" + mProductName + 2657531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood ",mSerialNumber=" + mSerialNumber + ",mConfigurations=["); 2667531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood for (int i = 0; i < mConfigurations.length; i++) { 2677531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood builder.append("\n"); 2687531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood builder.append(mConfigurations[i].toString()); 2697531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood } 2707531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood builder.append("]"); 2717531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return builder.toString(); 272e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 273e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 274e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static final Parcelable.Creator<UsbDevice> CREATOR = 275e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood new Parcelable.Creator<UsbDevice>() { 276e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbDevice createFromParcel(Parcel in) { 277e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood String name = in.readString(); 278e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int vendorId = in.readInt(); 279e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int productId = in.readInt(); 280e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int clasz = in.readInt(); 281e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int subClass = in.readInt(); 282e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int protocol = in.readInt(); 283575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String manufacturerName = in.readString(); 284575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String productName = in.readString(); 285575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String serialNumber = in.readString(); 2867531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood Parcelable[] configurations = in.readParcelableArray(UsbInterface.class.getClassLoader()); 2877531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood UsbDevice device = new UsbDevice(name, vendorId, productId, clasz, subClass, protocol, 2887531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood manufacturerName, productName, serialNumber); 2897531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood device.setConfigurations(configurations); 2907531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood return device; 291e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 292e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 293e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbDevice[] newArray(int size) { 294e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return new UsbDevice[size]; 295e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 296e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood }; 297e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 298e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int describeContents() { 299e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return 0; 300e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 301e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 302e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public void writeToParcel(Parcel parcel, int flags) { 303e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeString(mName); 304e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mVendorId); 305e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mProductId); 306e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mClass); 307e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mSubclass); 308e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mProtocol); 309575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw parcel.writeString(mManufacturerName); 310575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw parcel.writeString(mProductName); 311575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw parcel.writeString(mSerialNumber); 3127531aa22355cf03f51def61ba67f1636bf85f408Mike Lockwood parcel.writeParcelableArray(mConfigurations, 0); 313e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 314e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 315e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static int getDeviceId(String name) { 316e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return native_get_device_id(name); 317e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 318e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 319e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static String getDeviceName(int id) { 320e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return native_get_device_name(id); 321e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 322e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 323e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood private static native int native_get_device_id(String name); 324e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood private static native String native_get_device_name(int id); 325e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood} 326