UsbAccessory.java revision 015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2
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/**
259182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood * A class representing a USB accessory.
269182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood */
27c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodpublic class UsbAccessory implements Parcelable {
289182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
299182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    private static final String TAG = "UsbAccessory";
309182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
31c4308f01c965571dc2354107c3574df113e397eeMike Lockwood    private final String mManufacturer;
32c4308f01c965571dc2354107c3574df113e397eeMike Lockwood    private final String mModel;
33ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    private final String mDescription;
34c4308f01c965571dc2354107c3574df113e397eeMike Lockwood    private final String mVersion;
35ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    private final String mUri;
36015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    private final String mSerial;
379182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
389182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    /**
399182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * UsbAccessory should only be instantiated by UsbService implementation
409182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * @hide
419182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     */
42ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    public UsbAccessory(String manufacturer, String model, String description,
43015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood            String version, String uri, String serial) {
449182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        mManufacturer = manufacturer;
459182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        mModel = model;
46ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        mDescription = description;
479182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        mVersion = version;
48ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        mUri = uri;
49015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood        mSerial = serial;
509182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
519182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
529182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    /**
539182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * UsbAccessory should only be instantiated by UsbService implementation
549182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * @hide
559182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     */
569182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public UsbAccessory(String[] strings) {
579182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        mManufacturer = strings[0];
589182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        mModel = strings[1];
59ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        mDescription = strings[2];
609182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        mVersion = strings[3];
61ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        mUri = strings[4];
62015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood        mSerial = strings[5];
639182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
649182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
659182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    /**
669182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * Returns the manufacturer of the accessory.
679182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     *
689182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * @return the accessory manufacturer
699182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     */
709182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public String getManufacturer() {
719182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        return mManufacturer;
729182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
739182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
749182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    /**
759182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * Returns the model name of the accessory.
769182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     *
779182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * @return the accessory model
789182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     */
799182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public String getModel() {
809182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        return mModel;
819182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
829182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
839182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    /**
84ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * Returns a user visible description of the accessory.
859182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     *
86ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * @return the accessory description
879182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     */
88ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    public String getDescription() {
89ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        return mDescription;
909182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
919182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
929182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    /**
939182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * Returns the version of the accessory.
949182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     *
959182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     * @return the accessory version
969182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood     */
979182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public String getVersion() {
989182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        return mVersion;
999182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
1009182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
101ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    /**
102ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * Returns the URI for the accessory.
103ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * This is an optional URI that might show information about the accessory
104ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * or provide the option to download an application for the accessory
105ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     *
106ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     * @return the accessory URI
107ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood     */
108ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    public String getUri() {
109ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        return mUri;
110ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood    }
111ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood
112015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    /**
113015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * Returns the unique serial number for the accessory.
114015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * This is an optional serial number that can be used to differentiate
115015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * between individual accessories of the same model and manufacturer
116015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     *
117015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     * @return the unique serial number
118015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood     */
119015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    public String getSerial() {
120015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood        return mSerial;
121015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood    }
122015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood
12302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    private static boolean compare(String s1, String s2) {
12402eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood        if (s1 == null) return (s2 == null);
12502eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood        return s1.equals(s2);
12602eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    }
12702eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
12802eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    @Override
12902eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    public boolean equals(Object obj) {
13002eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood        if (obj instanceof UsbAccessory) {
13102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood            UsbAccessory accessory = (UsbAccessory)obj;
13202eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood            return (compare(mManufacturer, accessory.getManufacturer()) &&
13302eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood                    compare(mModel, accessory.getModel()) &&
134ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                    compare(mDescription, accessory.getDescription()) &&
135ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                    compare(mVersion, accessory.getVersion()) &&
136015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                    compare(mUri, accessory.getUri()) &&
137015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                    compare(mSerial, accessory.getSerial()));
13802eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood        }
13902eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood        return false;
14002eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood    }
14102eb8746de2d60563ec2751a34d20923192e4293Mike Lockwood
1429182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    @Override
143c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood    public int hashCode() {
144c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood        return ((mManufacturer == null ? 0 : mManufacturer.hashCode()) ^
145c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood                (mModel == null ? 0 : mModel.hashCode()) ^
146ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                (mDescription == null ? 0 : mDescription.hashCode()) ^
147ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                (mVersion == null ? 0 : mVersion.hashCode()) ^
148015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                (mUri == null ? 0 : mUri.hashCode()) ^
149015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                (mSerial == null ? 0 : mSerial.hashCode()));
150c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood    }
151c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood
152c6f23e8521dedac7a07119031913235be3ca37c3Mike Lockwood    @Override
1539182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public String toString() {
1549182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        return "UsbAccessory[mManufacturer=" + mManufacturer +
1559182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood                            ", mModel=" + mModel +
156ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                            ", mDescription=" + mDescription +
157ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood                            ", mVersion=" + mVersion +
158015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                            ", mUri=" + mUri +
159015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood                            ", mSerial=" + mSerial + "]";
1609182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
1619182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
1629182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public static final Parcelable.Creator<UsbAccessory> CREATOR =
1639182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        new Parcelable.Creator<UsbAccessory>() {
1649182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        public UsbAccessory createFromParcel(Parcel in) {
1659182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood            String manufacturer = in.readString();
1669182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood            String model = in.readString();
167ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood            String description = in.readString();
1689182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood            String version = in.readString();
169ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood            String uri = in.readString();
170015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood            String serial = in.readString();
171015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood            return new UsbAccessory(manufacturer, model, description, version, uri, serial);
1729182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        }
1739182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
1749182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        public UsbAccessory[] newArray(int size) {
1759182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood            return new UsbAccessory[size];
1769182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        }
1779182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    };
1789182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
1799182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public int describeContents() {
1809182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        return 0;
1819182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    }
1829182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood
1839182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood    public void writeToParcel(Parcel parcel, int flags) {
1849182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        parcel.writeString(mManufacturer);
1859182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        parcel.writeString(mModel);
186ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        parcel.writeString(mDescription);
1879182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood        parcel.writeString(mVersion);
188ac36d7c715a9cd793b2dce6de547594810101c3aMike Lockwood        parcel.writeString(mUri);
189015b1ecaec27b7cf5f1a78099d9ae34a0c3169f2Mike Lockwood        parcel.writeString(mSerial);
1909182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood   }
1919182d3c4eb1f9065cb33df5a3594969dd0d42accMike Lockwood}
192