UsbAccessory.java revision 11dd5ae97b1cd5889bb66862fd12718da62a9c75
19182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood/* 29182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * Copyright (C) 2011 The Android Open Source Project 39182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 49182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 59182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * you may not use this file except in compliance with the License. 69182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * You may obtain a copy of the License at 79182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 89182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 99182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 109182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * Unless required by applicable law or agreed to in writing, software 119182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 129182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * See the License for the specific language governing permissions and 149182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * limitations under the License. 159182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 169182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 17c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodpackage android.hardware.usb; 189182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 199182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwoodimport android.os.Bundle; 209182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwoodimport android.os.Parcel; 219182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwoodimport android.os.Parcelable; 229182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwoodimport android.util.Log; 239182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 249182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood/** 2511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * A class representing a USB accessory, which is an external hardware component 2611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * that communicates with an android application over USB. 2711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The accessory is the USB host and android the device side of the USB connection. 2811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * 2911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <p>When the accessory connects, it reports its manufacturer and model names, 3011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * the version of the accessory, and a user visible description of the accessory to the device. 3111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The manufacturer, model and version strings are used by the USB Manager to choose 3211dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * an appropriate application for the accessory. 3311dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The accessory may optionally provide a unique serial number 3411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * and a URL to for the accessory's website to the device as well. 3511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * 3611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <p>An instance of this class is sent to the application via the 3711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link UsbManager#ACTION_USB_ACCESSORY_ATTACHED} Intent. 3811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The application can then call {@link UsbManager#openAccessory} to open a file descriptor 3911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * for reading and writing data to and from the accessory. 409182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 41c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodpublic class UsbAccessory implements Parcelable { 429182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 439182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood private static final String TAG = "UsbAccessory"; 449182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 45c4308f01c965571dc2354107c3574df113e397eeMike Lockwood private final String mManufacturer; 46c4308f01c965571dc2354107c3574df113e397eeMike Lockwood private final String mModel; 47ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood private final String mDescription; 48c4308f01c965571dc2354107c3574df113e397eeMike Lockwood private final String mVersion; 49ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood private final String mUri; 50015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood private final String mSerial; 519182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 529182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood /** 539182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * UsbAccessory should only be instantiated by UsbService implementation 549182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * @hide 559182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 56ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood public UsbAccessory(String manufacturer, String model, String description, 57015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood String version, String uri, String serial) { 589182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood mManufacturer = manufacturer; 599182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood mModel = model; 60ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood mDescription = description; 619182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood mVersion = version; 62ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood mUri = uri; 63015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood mSerial = serial; 649182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 659182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 669182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood /** 679182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * UsbAccessory should only be instantiated by UsbService implementation 689182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * @hide 699182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 709182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public UsbAccessory(String[] strings) { 719182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood mManufacturer = strings[0]; 729182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood mModel = strings[1]; 73ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood mDescription = strings[2]; 749182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood mVersion = strings[3]; 75ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood mUri = strings[4]; 76015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood mSerial = strings[5]; 779182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 789182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 799182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood /** 8011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns the manufacturer name of the accessory. 819182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 829182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * @return the accessory manufacturer 839182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 849182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public String getManufacturer() { 859182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood return mManufacturer; 869182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 879182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 889182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood /** 899182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * Returns the model name of the accessory. 909182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 919182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * @return the accessory model 929182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 939182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public String getModel() { 949182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood return mModel; 959182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 969182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 979182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood /** 98ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * Returns a user visible description of the accessory. 999182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 100ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * @return the accessory description 1019182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 102ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood public String getDescription() { 103ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood return mDescription; 1049182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 1059182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 1069182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood /** 1079182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * Returns the version of the accessory. 1089182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * 1099182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * @return the accessory version 1109182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */ 1119182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public String getVersion() { 1129182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood return mVersion; 1139182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 1149182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 115ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood /** 116ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * Returns the URI for the accessory. 117ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * This is an optional URI that might show information about the accessory 118ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * or provide the option to download an application for the accessory 119ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * 120ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood * @return the accessory URI 121ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood */ 122ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood public String getUri() { 123ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood return mUri; 124ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood } 125ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood 126015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood /** 127015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood * Returns the unique serial number for the accessory. 128015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood * This is an optional serial number that can be used to differentiate 129015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood * between individual accessories of the same model and manufacturer 130015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood * 131015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood * @return the unique serial number 132015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood */ 133015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood public String getSerial() { 134015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood return mSerial; 135015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood } 136015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood 13702eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood private static boolean compare(String s1, String s2) { 13802eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood if (s1 == null) return (s2 == null); 13902eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood return s1.equals(s2); 14002eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood } 14102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood 14202eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood @Override 14302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood public boolean equals(Object obj) { 14402eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood if (obj instanceof UsbAccessory) { 14502eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood UsbAccessory accessory = (UsbAccessory)obj; 14602eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood return (compare(mManufacturer, accessory.getManufacturer()) && 14702eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood compare(mModel, accessory.getModel()) && 148ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood compare(mDescription, accessory.getDescription()) && 149ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood compare(mVersion, accessory.getVersion()) && 150015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood compare(mUri, accessory.getUri()) && 151015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood compare(mSerial, accessory.getSerial())); 15202eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood } 15302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood return false; 15402eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood } 15502eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood 1569182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood @Override 157c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood public int hashCode() { 158c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood return ((mManufacturer == null ? 0 : mManufacturer.hashCode()) ^ 159c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood (mModel == null ? 0 : mModel.hashCode()) ^ 160ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood (mDescription == null ? 0 : mDescription.hashCode()) ^ 161ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood (mVersion == null ? 0 : mVersion.hashCode()) ^ 162015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood (mUri == null ? 0 : mUri.hashCode()) ^ 163015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood (mSerial == null ? 0 : mSerial.hashCode())); 164c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood } 165c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood 166c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood @Override 1679182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public String toString() { 1689182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood return "UsbAccessory[mManufacturer=" + mManufacturer + 1699182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood ", mModel=" + mModel + 170ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood ", mDescription=" + mDescription + 171ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood ", mVersion=" + mVersion + 172015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood ", mUri=" + mUri + 173015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood ", mSerial=" + mSerial + "]"; 1749182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 1759182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 1769182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public static final Parcelable.Creator<UsbAccessory> CREATOR = 1779182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood new Parcelable.Creator<UsbAccessory>() { 1789182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public UsbAccessory createFromParcel(Parcel in) { 1799182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood String manufacturer = in.readString(); 1809182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood String model = in.readString(); 181ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood String description = in.readString(); 1829182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood String version = in.readString(); 183ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood String uri = in.readString(); 184015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood String serial = in.readString(); 185015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood return new UsbAccessory(manufacturer, model, description, version, uri, serial); 1869182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 1879182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 1889182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public UsbAccessory[] newArray(int size) { 1899182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood return new UsbAccessory[size]; 1909182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 1919182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood }; 1929182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 1939182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public int describeContents() { 1949182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood return 0; 1959182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 1969182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood 1979182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood public void writeToParcel(Parcel parcel, int flags) { 1989182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood parcel.writeString(mManufacturer); 1999182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood parcel.writeString(mModel); 200ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood parcel.writeString(mDescription); 2019182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood parcel.writeString(mVersion); 202ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood parcel.writeString(mUri); 203015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood parcel.writeString(mSerial); 2049182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood } 2059182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood} 206