UsbEndpoint.java revision acc29cc91be634070c92a807df412ced97b9b375
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/**
24c4308f01c965571dc2354107c3574df113e397eeMike Lockwood * A class representing an endpoint on a {@link android.hardware.usb.UsbInterface}.
25e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood */
26acc29cc91be634070c92a807df412ced97b9b375Mike Lockwoodpublic class UsbEndpoint implements Parcelable {
27e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
28acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood    private final int mAddress;
29acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood    private final int mAttributes;
30acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood    private final int mMaxPacketSize;
31acc29cc91be634070c92a807df412ced97b9b375Mike Lockwood    private final int mInterval;
32e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
33e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
34e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * UsbEndpoint should only be instantiated by UsbService implementation
35e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @hide
36e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
37e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public UsbEndpoint(int address, int attributes, int maxPacketSize, int interval) {
38e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        mAddress = address;
39e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        mAttributes = attributes;
40e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        mMaxPacketSize = maxPacketSize;
41e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        mInterval = interval;
42e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
43e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
44e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
45e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Returns the endpoint's address field.
46e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
47e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's address
48e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
49e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getAddress() {
50e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mAddress;
51e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
52e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
53e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
54e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Extracts the endpoint's endpoint number from its address
55e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
56e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's endpoint number
57e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
58e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getEndpointNumber() {
59e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mAddress & UsbConstants.USB_ENDPOINT_NUMBER_MASK;
60e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
61e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
62e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
63e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Returns the endpoint's direction.
64c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * Returns {@link android.hardware.usb.UsbConstants#USB_DIR_OUT}
65e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * if the direction is host to device, and
66c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * {@link android.hardware.usb.UsbConstants#USB_DIR_IN} if the
67e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * direction is device to host.
68e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
69e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's direction
70e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
71e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getDirection() {
72e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mAddress & UsbConstants.USB_ENDPOINT_DIR_MASK;
73e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
74e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
75e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
76e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Returns the endpoint's attributes field.
77e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
78e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's attributes
79e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
80e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getAttributes() {
81e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mAttributes;
82e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
83e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
84e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
85e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Returns the endpoint's type.
86e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Possible results are:
87e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * <ul>
88c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * <li>{@link android.hardware.usb.UsbConstants#USB_ENDPOINT_XFER_CONTROL} (endpoint zero)
89c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * <li>{@link android.hardware.usb.UsbConstants#USB_ENDPOINT_XFER_ISOC} (isochronous endpoint)
90c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * <li>{@link android.hardware.usb.UsbConstants#USB_ENDPOINT_XFER_BULK} (bulk endpoint)
91c4308f01c965571dc2354107c3574df113e397eeMike Lockwood     * <li>{@link android.hardware.usb.UsbConstants#USB_ENDPOINT_XFER_INT} (interrupt endpoint)
92e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * </ul>
93e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
94e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's type
95e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
96e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getType() {
97e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mAttributes & UsbConstants.USB_ENDPOINT_XFERTYPE_MASK;
98e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
99e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
100e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
101e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Returns the endpoint's maximum packet size.
102e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
103e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's maximum packet size
104e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
105e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getMaxPacketSize() {
106e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mMaxPacketSize;
107e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
108e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
109e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    /**
110e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * Returns the endpoint's interval field.
111e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     *
112e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     * @return the endpoint's interval
113e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood     */
114e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int getInterval() {
115e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return mInterval;
116e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
117e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
118e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    @Override
119e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public String toString() {
120e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return "UsbEndpoint[mAddress=" + mAddress + ",mAttributes=" + mAttributes +
121e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood                ",mMaxPacketSize=" + mMaxPacketSize + ",mInterval=" + mInterval +"]";
122e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
123e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
124e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public static final Parcelable.Creator<UsbEndpoint> CREATOR =
125e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        new Parcelable.Creator<UsbEndpoint>() {
126e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        public UsbEndpoint createFromParcel(Parcel in) {
127e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            int address = in.readInt();
128e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            int attributes = in.readInt();
129e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            int maxPacketSize = in.readInt();
130e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            int interval = in.readInt();
131e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            return new UsbEndpoint(address, attributes, maxPacketSize, interval);
132e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        }
133e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
134e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        public UsbEndpoint[] newArray(int size) {
135e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood            return new UsbEndpoint[size];
136e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        }
137e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    };
138e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
139e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public int describeContents() {
140e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        return 0;
141e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    }
142e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood
143e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood    public void writeToParcel(Parcel parcel, int flags) {
144e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        parcel.writeInt(mAddress);
145e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        parcel.writeInt(mAttributes);
146e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        parcel.writeInt(mMaxPacketSize);
147e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood        parcel.writeInt(mInterval);
148e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood   }
149e7d511e148bc901ef41ac44d7b3593e5d803f72fMike Lockwood}
150