/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hardware.usb; import android.os.Parcel; import android.os.Parcelable; /** * A class representing an endpoint on a {@link UsbInterface}. * Endpoints are the channels for sending and receiving data over USB. * Typically bulk endpoints are used for sending non-trivial amounts of data. * Interrupt endpoints are used for sending small amounts of data, typically events, * separately from the main data streams. * The endpoint zero is a special endpoint for control messages sent from the host * to device. * Isochronous endpoints are currently unsupported. */ public class UsbEndpoint implements Parcelable { private final int mAddress; private final int mAttributes; private final int mMaxPacketSize; private final int mInterval; /** * UsbEndpoint should only be instantiated by UsbService implementation * @hide */ public UsbEndpoint(int address, int attributes, int maxPacketSize, int interval) { mAddress = address; mAttributes = attributes; mMaxPacketSize = maxPacketSize; mInterval = interval; } /** * Returns the endpoint's address field. * The address is a bitfield containing both the endpoint number * as well as the data direction of the endpoint. * the endpoint number and direction can also be accessed via * {@link #getEndpointNumber} and {@link #getDirection}. * * @return the endpoint's address */ public int getAddress() { return mAddress; } /** * Extracts the endpoint's endpoint number from its address * * @return the endpoint's endpoint number */ public int getEndpointNumber() { return mAddress & UsbConstants.USB_ENDPOINT_NUMBER_MASK; } /** * Returns the endpoint's direction. * Returns {@link UsbConstants#USB_DIR_OUT} * if the direction is host to device, and * {@link UsbConstants#USB_DIR_IN} if the * direction is device to host. * @see {@link UsbConstants#USB_DIR_IN} * @see {@link UsbConstants#USB_DIR_OUT} * * @return the endpoint's direction */ public int getDirection() { return mAddress & UsbConstants.USB_ENDPOINT_DIR_MASK; } /** * Returns the endpoint's attributes field. * * @return the endpoint's attributes */ public int getAttributes() { return mAttributes; } /** * Returns the endpoint's type. * Possible results are: * * * @return the endpoint's type */ public int getType() { return mAttributes & UsbConstants.USB_ENDPOINT_XFERTYPE_MASK; } /** * Returns the endpoint's maximum packet size. * * @return the endpoint's maximum packet size */ public int getMaxPacketSize() { return mMaxPacketSize; } /** * Returns the endpoint's interval field. * * @return the endpoint's interval */ public int getInterval() { return mInterval; } @Override public String toString() { return "UsbEndpoint[mAddress=" + mAddress + ",mAttributes=" + mAttributes + ",mMaxPacketSize=" + mMaxPacketSize + ",mInterval=" + mInterval +"]"; } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public UsbEndpoint createFromParcel(Parcel in) { int address = in.readInt(); int attributes = in.readInt(); int maxPacketSize = in.readInt(); int interval = in.readInt(); return new UsbEndpoint(address, attributes, maxPacketSize, interval); } public UsbEndpoint[] newArray(int size) { return new UsbEndpoint[size]; } }; public int describeContents() { return 0; } public void writeToParcel(Parcel parcel, int flags) { parcel.writeInt(mAddress); parcel.writeInt(mAttributes); parcel.writeInt(mMaxPacketSize); parcel.writeInt(mInterval); } }