1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.hardware.usb;
18
19/**
20 * Contains constants for the USB protocol.
21 * These constants correspond to definitions in linux/usb/ch9.h in the linux kernel.
22 */
23public final class UsbConstants {
24
25    /**
26     * Bitmask used for extracting the {@link UsbEndpoint} direction from its address field.
27     * @see UsbEndpoint#getAddress
28     * @see UsbEndpoint#getDirection
29     * @see #USB_DIR_OUT
30     * @see #USB_DIR_IN
31     *
32     */
33    public static final int USB_ENDPOINT_DIR_MASK = 0x80;
34    /**
35     * Used to signify direction of data for a {@link UsbEndpoint} is OUT (host to device)
36     * @see UsbEndpoint#getDirection
37     */
38    public static final int USB_DIR_OUT = 0;
39    /**
40     * Used to signify direction of data for a {@link UsbEndpoint} is IN (device to host)
41     * @see UsbEndpoint#getDirection
42     */
43    public static final int USB_DIR_IN = 0x80;
44
45    /**
46     * Bitmask used for extracting the {@link UsbEndpoint} number its address field.
47     * @see UsbEndpoint#getAddress
48     * @see UsbEndpoint#getEndpointNumber
49     */
50    public static final int USB_ENDPOINT_NUMBER_MASK = 0x0f;
51
52    /**
53     * Bitmask used for extracting the {@link UsbEndpoint} type from its address field.
54     * @see UsbEndpoint#getAddress
55     * @see UsbEndpoint#getType
56     * @see #USB_ENDPOINT_XFER_CONTROL
57     * @see #USB_ENDPOINT_XFER_ISOC
58     * @see #USB_ENDPOINT_XFER_BULK
59     * @see #USB_ENDPOINT_XFER_INT
60     */
61    public static final int USB_ENDPOINT_XFERTYPE_MASK = 0x03;
62    /**
63     * Control endpoint type (endpoint zero)
64     * @see UsbEndpoint#getType
65     */
66    public static final int USB_ENDPOINT_XFER_CONTROL = 0;
67    /**
68     * Isochronous endpoint type (currently not supported)
69     * @see UsbEndpoint#getType
70     */
71    public static final int USB_ENDPOINT_XFER_ISOC = 1;
72    /**
73     * Bulk endpoint type
74     * @see UsbEndpoint#getType
75     */
76    public static final int USB_ENDPOINT_XFER_BULK = 2;
77    /**
78     * Interrupt endpoint type
79     * @see UsbEndpoint#getType
80     */
81    public static final int USB_ENDPOINT_XFER_INT = 3;
82
83
84    /**
85     * Bitmask used for encoding the request type for a control request on endpoint zero.
86     */
87    public static final int USB_TYPE_MASK = (0x03 << 5);
88    /**
89     * Used to specify that an endpoint zero control request is a standard request.
90     */
91    public static final int USB_TYPE_STANDARD = (0x00 << 5);
92    /**
93     * Used to specify that an endpoint zero control request is a class specific request.
94     */
95    public static final int USB_TYPE_CLASS = (0x01 << 5);
96    /**
97     * Used to specify that an endpoint zero control request is a vendor specific request.
98     */
99    public static final int USB_TYPE_VENDOR = (0x02 << 5);
100    /**
101     * Reserved endpoint zero control request type (currently unused).
102     */
103    public static final int USB_TYPE_RESERVED = (0x03 << 5);
104
105
106    /**
107     * USB class indicating that the class is determined on a per-interface basis.
108     */
109    public static final int USB_CLASS_PER_INTERFACE = 0;
110    /**
111     * USB class for audio devices.
112     */
113    public static final int USB_CLASS_AUDIO = 1;
114    /**
115     * USB class for communication devices.
116     */
117    public static final int USB_CLASS_COMM = 2;
118    /**
119     * USB class for human interface devices (for example, mice and keyboards).
120     */
121    public static final int USB_CLASS_HID = 3;
122    /**
123     * USB class for physical devices.
124     */
125    public static final int USB_CLASS_PHYSICA = 5;
126    /**
127     * USB class for still image devices (digital cameras).
128     */
129    public static final int USB_CLASS_STILL_IMAGE = 6;
130    /**
131     * USB class for printers.
132     */
133    public static final int USB_CLASS_PRINTER = 7;
134    /**
135     * USB class for mass storage devices.
136     */
137    public static final int USB_CLASS_MASS_STORAGE = 8;
138    /**
139     * USB class for USB hubs.
140     */
141    public static final int USB_CLASS_HUB = 9;
142    /**
143     * USB class for CDC devices (communications device class).
144     */
145    public static final int USB_CLASS_CDC_DATA = 0x0a;
146    /**
147     * USB class for content smart card devices.
148     */
149    public static final int USB_CLASS_CSCID = 0x0b;
150    /**
151     * USB class for content security devices.
152     */
153    public static final int USB_CLASS_CONTENT_SEC = 0x0d;
154    /**
155     * USB class for video devices.
156     */
157    public static final int USB_CLASS_VIDEO = 0x0e;
158    /**
159     * USB class for wireless controller devices.
160     */
161    public static final int USB_CLASS_WIRELESS_CONTROLLER = 0xe0;
162    /**
163     * USB class for wireless miscellaneous devices.
164     */
165    public static final int USB_CLASS_MISC = 0xef;
166    /**
167     * Application specific USB class.
168     */
169    public static final int USB_CLASS_APP_SPEC = 0xfe;
170    /**
171     * Vendor specific USB class.
172     */
173    public static final int USB_CLASS_VENDOR_SPEC = 0xff;
174
175    /**
176     * Boot subclass for HID devices.
177     */
178    public static final int USB_INTERFACE_SUBCLASS_BOOT = 1;
179    /**
180     * Vendor specific USB subclass.
181     */
182    public static final int USB_SUBCLASS_VENDOR_SPEC = 0xff;
183}
184