UsbDevice.java revision 575ca85c147f1521480ea98aca13aa3b1ec38884
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.Bundle; 20e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.os.Parcel; 21e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.os.Parcelable; 22e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport android.util.Log; 23e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 24e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwoodimport java.io.FileDescriptor; 25e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 26e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/** 2711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This class represents a USB device attached to the android device with the android device 2811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * acting as the USB host. 2911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Each device contains one or more {@link UsbInterface}s, each of which contains a number of 3011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link UsbEndpoint}s (the channels via which data is transmitted over USB). 3111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * 3211dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <p> This class contains information (along with {@link UsbInterface} and {@link UsbEndpoint}) 3311dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * that describes the capabilities of the USB device. 3411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * To communicate with the device, you open a {@link UsbDeviceConnection} for the device 3511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * and use {@link UsbRequest} to send and receive data on an endpoint. 3611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link UsbDeviceConnection#controlTransfer} is used for control requests on endpoint zero. 373aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 383aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 393aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about communicating with USB hardware, read the 413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p> 423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 43e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 44acc29cc91be634070c92a807df412ced97b9b375Mike Lockwoodpublic class UsbDevice implements Parcelable { 45e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 46e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood private static final String TAG = "UsbDevice"; 47e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 48acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final String mName; 49575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw private final String mManufacturerName; 50575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw private final String mProductName; 51575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw private final String mSerialNumber; 52acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mVendorId; 53acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mProductId; 54acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mClass; 55acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mSubclass; 56acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mProtocol; 57acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final Parcelable[] mInterfaces; 58e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 59e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 60e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * UsbDevice should only be instantiated by UsbService implementation 61e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @hide 62e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 63e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbDevice(String name, int vendorId, int productId, 64575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw int Class, int subClass, int protocol, 65575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String manufacturerName, String productName, String serialNumber, 66575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw Parcelable[] interfaces) { 67e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mName = name; 68e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mVendorId = vendorId; 69e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mProductId = productId; 70e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mClass = Class; 71e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mSubclass = subClass; 72e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mProtocol = protocol; 73575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw mManufacturerName = manufacturerName; 74575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw mProductName = productName; 75575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw mSerialNumber = serialNumber; 76e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mInterfaces = interfaces; 77e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 78e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 79e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 80e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the name of the device. 81e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * In the standard implementation, this is the path of the device file 82e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * for the device in the usbfs file system. 83e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 84e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device name 85e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 86e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public String getDeviceName() { 87e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mName; 88e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 89e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 90e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 91575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * Returns the manufacturer name of the device. 92575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * 93575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * @return the manufacturer name 94575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw */ 95575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw public String getManufacturerName() { 96575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return mManufacturerName; 97575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw } 98575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw 99575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw /** 100575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * Returns the product name of the device. 101575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * 102575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * @return the product name 103575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw */ 104575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw public String getProductName() { 105575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return mProductName; 106575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw } 107575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw 108575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw /** 109575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * Returns the serial number of the device. 110575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * 111575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw * @return the serial number name 112575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw */ 113575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw public String getSerialNumber() { 114575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return mSerialNumber; 115575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw } 116575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw 117575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw /** 118e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns a unique integer ID for the device. 119e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * This is a convenience for clients that want to use an integer to represent 120e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * the device, rather than the device name. 121e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * IDs are not persistent across USB disconnects. 122e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 123e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device ID 124e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 125e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceId() { 126e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return getDeviceId(mName); 127e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 128e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 129e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 130e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns a vendor ID for the device. 131e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 132e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device vendor ID 133e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 134e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getVendorId() { 135e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mVendorId; 136e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 137e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 138e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 139e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns a product ID for the device. 140e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 141e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device product ID 142e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 143e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getProductId() { 144e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mProductId; 145e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 146e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 147e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 148e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the devices's class field. 14911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Some useful constants for USB device classes can be found in {@link UsbConstants}. 150e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 151e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the devices's class 152e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 153e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceClass() { 154e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mClass; 155e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 156e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 157e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 158e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the device's subclass field. 159e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 160e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device's subclass 161e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 162e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceSubclass() { 163e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mSubclass; 164e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 165e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 166e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 16711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the device's protocol field. 168e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 169e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the device's protocol 170e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 171e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDeviceProtocol() { 172e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mProtocol; 173e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 174e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 175e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 17611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the number of {@link UsbInterface}s this device contains. 177e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 178e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the number of interfaces 179e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 180e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getInterfaceCount() { 181e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mInterfaces.length; 182e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 183e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 184e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 18511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the {@link UsbInterface} at the given index. 186e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 187e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the interface 188e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 189e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbInterface getInterface(int index) { 190e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return (UsbInterface)mInterfaces[index]; 191e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 192e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 193e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood @Override 194e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public boolean equals(Object o) { 195e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood if (o instanceof UsbDevice) { 196e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return ((UsbDevice)o).mName.equals(mName); 197e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } else if (o instanceof String) { 198e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return ((String)o).equals(mName); 199e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } else { 200e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return false; 201e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 202e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 203e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 204e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood @Override 205c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood public int hashCode() { 206c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood return mName.hashCode(); 207c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood } 208c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood 209c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood @Override 210e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public String toString() { 211e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return "UsbDevice[mName=" + mName + ",mVendorId=" + mVendorId + 212e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood ",mProductId=" + mProductId + ",mClass=" + mClass + 213e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood ",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol + 214575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw ",mManufacturerName=" + mManufacturerName + ",mProductName=" + mProductName + 215575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw ",mSerialNumber=" + mSerialNumber + ",mInterfaces=" + mInterfaces + "]"; 216e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 217e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 218e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static final Parcelable.Creator<UsbDevice> CREATOR = 219e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood new Parcelable.Creator<UsbDevice>() { 220e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbDevice createFromParcel(Parcel in) { 221e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood String name = in.readString(); 222e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int vendorId = in.readInt(); 223e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int productId = in.readInt(); 224e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int clasz = in.readInt(); 225e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int subClass = in.readInt(); 226e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int protocol = in.readInt(); 227575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String manufacturerName = in.readString(); 228575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String productName = in.readString(); 229575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw String serialNumber = in.readString(); 230e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood Parcelable[] interfaces = in.readParcelableArray(UsbInterface.class.getClassLoader()); 231575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw return new UsbDevice(name, vendorId, productId, clasz, subClass, protocol, 232575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw manufacturerName, productName, serialNumber, interfaces); 233e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 234e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 235e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbDevice[] newArray(int size) { 236e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return new UsbDevice[size]; 237e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 238e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood }; 239e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 240e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int describeContents() { 241e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return 0; 242e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 243e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 244e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public void writeToParcel(Parcel parcel, int flags) { 245e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeString(mName); 246e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mVendorId); 247e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mProductId); 248e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mClass); 249e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mSubclass); 250e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mProtocol); 251575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw parcel.writeString(mManufacturerName); 252575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw parcel.writeString(mProductName); 253575ca85c147f1521480ea98aca13aa3b1ec38884Robin Cutshaw parcel.writeString(mSerialNumber); 254e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeParcelableArray(mInterfaces, 0); 255e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 256e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 257e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static int getDeviceId(String name) { 258e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return native_get_device_id(name); 259e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 260e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 261e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static String getDeviceName(int id) { 262e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return native_get_device_name(id); 263e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 264e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 265e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood private static native int native_get_device_id(String name); 266e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood private static native String native_get_device_name(int id); 267e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood} 268