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 Lockwood 23e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood/** 2411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * A class representing an interface on a {@link UsbDevice}. 2511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * USB devices can have one or more interfaces, each one providing a different 2611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * piece of functionality, separate from the other interfaces. 2711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * An interface will have one or more {@link UsbEndpoint}s, which are the 2811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * channels by which the host transfers data with the device. 293aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 303aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 313aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 323aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about communicating with USB hardware, read the 333aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p> 343aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 35e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 36c4308f01c965571dc2354107c3574df113e397eeMike Lockwoodpublic class UsbInterface implements Parcelable { 37e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 38acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mId; 39acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mClass; 40acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mSubclass; 41acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mProtocol; 42acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final Parcelable[] mEndpoints; 43e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 44e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 45e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * UsbInterface should only be instantiated by UsbService implementation 46e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @hide 47e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 48e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbInterface(int id, int Class, int subClass, int protocol, 49e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood Parcelable[] endpoints) { 50e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mId = id; 51e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mClass = Class; 52e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mSubclass = subClass; 53e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mProtocol = protocol; 54e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mEndpoints = endpoints; 55e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 56e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 57e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 58e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the interface's ID field. 5911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * This is an integer that uniquely identifies the interface on the device. 60e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 61e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the interface's ID 62e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 63e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getId() { 64e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mId; 65e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 66e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 67e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 68e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the interface's class field. 6911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Some useful constants for USB classes can be found in {@link UsbConstants} 70e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 71e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the interface's class 72e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 73e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getInterfaceClass() { 74e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mClass; 75e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 76e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 77e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 78e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the interface's subclass field. 79e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 80e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the interface's subclass 81e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 82e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getInterfaceSubclass() { 83e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mSubclass; 84e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 85e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 86e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 87e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the interface's protocol field. 88e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 89e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the interface's protocol 90e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 91e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getInterfaceProtocol() { 92e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mProtocol; 93e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 94e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 95e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 96c4308f01c965571dc2354107c3574df113e397eeMike Lockwood * Returns the number of {@link android.hardware.usb.UsbEndpoint}s this interface contains. 97e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 98e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the number of endpoints 99e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 100e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getEndpointCount() { 101e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mEndpoints.length; 102e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 103e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 104e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 105c4308f01c965571dc2354107c3574df113e397eeMike Lockwood * Returns the {@link android.hardware.usb.UsbEndpoint} at the given index. 106e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 107e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint 108e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 109e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbEndpoint getEndpoint(int index) { 110e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return (UsbEndpoint)mEndpoints[index]; 111e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 112e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 113e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood @Override 114e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public String toString() { 115e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return "UsbInterface[mId=" + mId + ",mClass=" + mClass + 116e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood ",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol + 117e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood ",mEndpoints=" + mEndpoints + "]"; 118e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 119e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 120e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static final Parcelable.Creator<UsbInterface> CREATOR = 121e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood new Parcelable.Creator<UsbInterface>() { 122e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbInterface createFromParcel(Parcel in) { 123e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int id = in.readInt(); 124e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int Class = in.readInt(); 125e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int subClass = in.readInt(); 126e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int protocol = in.readInt(); 127e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood Parcelable[] endpoints = in.readParcelableArray(UsbEndpoint.class.getClassLoader()); 128acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood return new UsbInterface(id, Class, subClass, protocol, endpoints); 129e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 130e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 131e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbInterface[] newArray(int size) { 132e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return new UsbInterface[size]; 133e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 134e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood }; 135e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 136e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int describeContents() { 137e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return 0; 138e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 139e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 140e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public void writeToParcel(Parcel parcel, int flags) { 141e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mId); 142e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mClass); 143e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mSubclass); 144e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mProtocol); 145e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeParcelableArray(mEndpoints, 0); 146e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 147e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood} 148