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 endpoint on a {@link UsbInterface}. 2511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Endpoints are the channels for sending and receiving data over USB. 2611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Typically bulk endpoints are used for sending non-trivial amounts of data. 2711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Interrupt endpoints are used for sending small amounts of data, typically events, 2811dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * separately from the main data streams. 2911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The endpoint zero is a special endpoint for control messages sent from the host 3011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * to device. 3111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Isochronous endpoints are currently unsupported. 32e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 33acc29cc91be634070c92a807df412ced97b9b375Mike Lockwoodpublic class UsbEndpoint implements Parcelable { 34e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 35acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mAddress; 36acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mAttributes; 37acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mMaxPacketSize; 38acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood private final int mInterval; 39e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 40e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 41e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * UsbEndpoint should only be instantiated by UsbService implementation 42e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @hide 43e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 44e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbEndpoint(int address, int attributes, int maxPacketSize, int interval) { 45e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mAddress = address; 46e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mAttributes = attributes; 47e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mMaxPacketSize = maxPacketSize; 48e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood mInterval = interval; 49e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 50e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 51e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 52e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the endpoint's address field. 5311dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * The address is a bitfield containing both the endpoint number 5411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * as well as the data direction of the endpoint. 5511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * the endpoint number and direction can also be accessed via 5611dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link #getEndpointNumber} and {@link #getDirection}. 57e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 58e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's address 59e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 60e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getAddress() { 61e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mAddress; 62e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 63e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 64e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 65e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Extracts the endpoint's endpoint number from its address 66e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 67e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's endpoint number 68e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 69e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getEndpointNumber() { 70e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mAddress & UsbConstants.USB_ENDPOINT_NUMBER_MASK; 71e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 72e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 73e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 74e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the endpoint's direction. 7511dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * Returns {@link UsbConstants#USB_DIR_OUT} 76e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * if the direction is host to device, and 7711dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * {@link UsbConstants#USB_DIR_IN} if the 78e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * direction is device to host. 7911dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * @see {@link UsbConstants#USB_DIR_IN} 8011dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * @see {@link UsbConstants#USB_DIR_OUT} 81e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 82e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's direction 83e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 84e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getDirection() { 85e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mAddress & UsbConstants.USB_ENDPOINT_DIR_MASK; 86e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 87e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 88e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 89e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the endpoint's attributes field. 90e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 91e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's attributes 92e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 93e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getAttributes() { 94e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mAttributes; 95e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 96e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 97e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 98e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the endpoint's type. 99e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Possible results are: 100e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * <ul> 10111dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <li>{@link UsbConstants#USB_ENDPOINT_XFER_CONTROL} (endpoint zero) 10211dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <li>{@link UsbConstants#USB_ENDPOINT_XFER_ISOC} (isochronous endpoint) 10311dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <li>{@link UsbConstants#USB_ENDPOINT_XFER_BULK} (bulk endpoint) 10411dd5ae97b1cd5889bb66862fd12718da62a9c75Mike Lockwood * <li>{@link UsbConstants#USB_ENDPOINT_XFER_INT} (interrupt endpoint) 105e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * </ul> 106e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 107e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's type 108e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 109e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getType() { 110e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mAttributes & UsbConstants.USB_ENDPOINT_XFERTYPE_MASK; 111e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 112e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 113e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 114e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the endpoint's maximum packet size. 115e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 116e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's maximum packet size 117e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 118e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getMaxPacketSize() { 119e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mMaxPacketSize; 120e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 121e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 122e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood /** 123e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * Returns the endpoint's interval field. 124e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * 125e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood * @return the endpoint's interval 126e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */ 127e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int getInterval() { 128e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return mInterval; 129e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 130e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 131e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood @Override 132e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public String toString() { 133e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return "UsbEndpoint[mAddress=" + mAddress + ",mAttributes=" + mAttributes + 134e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood ",mMaxPacketSize=" + mMaxPacketSize + ",mInterval=" + mInterval +"]"; 135e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 136e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 137e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public static final Parcelable.Creator<UsbEndpoint> CREATOR = 138e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood new Parcelable.Creator<UsbEndpoint>() { 139e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbEndpoint createFromParcel(Parcel in) { 140e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int address = in.readInt(); 141e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int attributes = in.readInt(); 142e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int maxPacketSize = in.readInt(); 143e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood int interval = in.readInt(); 144e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return new UsbEndpoint(address, attributes, maxPacketSize, interval); 145e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 146e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 147e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public UsbEndpoint[] newArray(int size) { 148e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return new UsbEndpoint[size]; 149e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 150e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood }; 151e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 152e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public int describeContents() { 153e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood return 0; 154e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 155e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood 156e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood public void writeToParcel(Parcel parcel, int flags) { 157e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mAddress); 158e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mAttributes); 159e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mMaxPacketSize); 160e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood parcel.writeInt(mInterval); 161e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood } 162e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood} 163