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