1/*
2 * Copyright (C) 2013 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 com.android.accessorydisplay.sink;
18
19// Constants from kernel include/linux/usb/f_accessory.h
20final class UsbAccessoryConstants {
21    /* Use Google Vendor ID when in accessory mode */
22    public static final int USB_ACCESSORY_VENDOR_ID = 0x18D1;
23
24    /* Product ID to use when in accessory mode */
25    public static final int USB_ACCESSORY_PRODUCT_ID = 0x2D00;
26
27    /* Product ID to use when in accessory mode and adb is enabled */
28    public static final int USB_ACCESSORY_ADB_PRODUCT_ID = 0x2D01;
29
30    /* Indexes for strings sent by the host via ACCESSORY_SEND_STRING */
31    public static final int ACCESSORY_STRING_MANUFACTURER = 0;
32    public static final int ACCESSORY_STRING_MODEL = 1;
33    public static final int ACCESSORY_STRING_DESCRIPTION = 2;
34    public static final int ACCESSORY_STRING_VERSION = 3;
35    public static final int ACCESSORY_STRING_URI = 4;
36    public static final int ACCESSORY_STRING_SERIAL = 5;
37
38    /* Control request for retrieving device's protocol version
39     *
40     *  requestType:    USB_DIR_IN | USB_TYPE_VENDOR
41     *  request:        ACCESSORY_GET_PROTOCOL
42     *  value:          0
43     *  index:          0
44     *  data            version number (16 bits little endian)
45     *                     1 for original accessory support
46     *                     2 adds HID and device to host audio support
47     */
48    public static final int ACCESSORY_GET_PROTOCOL = 51;
49
50    /* Control request for host to send a string to the device
51     *
52     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
53     *  request:        ACCESSORY_SEND_STRING
54     *  value:          0
55     *  index:          string ID
56     *  data            zero terminated UTF8 string
57     *
58     *  The device can later retrieve these strings via the
59     *  ACCESSORY_GET_STRING_* ioctls
60     */
61    public static final int ACCESSORY_SEND_STRING = 52;
62
63    /* Control request for starting device in accessory mode.
64     * The host sends this after setting all its strings to the device.
65     *
66     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
67     *  request:        ACCESSORY_START
68     *  value:          0
69     *  index:          0
70     *  data            none
71     */
72    public static final int ACCESSORY_START = 53;
73
74    /* Control request for registering a HID device.
75     * Upon registering, a unique ID is sent by the accessory in the
76     * value parameter. This ID will be used for future commands for
77     * the device
78     *
79     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
80     *  request:        ACCESSORY_REGISTER_HID_DEVICE
81     *  value:          Accessory assigned ID for the HID device
82     *  index:          total length of the HID report descriptor
83     *  data            none
84     */
85    public static final int ACCESSORY_REGISTER_HID = 54;
86
87    /* Control request for unregistering a HID device.
88     *
89     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
90     *  request:        ACCESSORY_REGISTER_HID
91     *  value:          Accessory assigned ID for the HID device
92     *  index:          0
93     *  data            none
94     */
95    public static final int ACCESSORY_UNREGISTER_HID = 55;
96
97    /* Control request for sending the HID report descriptor.
98     * If the HID descriptor is longer than the endpoint zero max packet size,
99     * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
100     * commands. The data for the descriptor must be sent sequentially
101     * if multiple packets are needed.
102     *
103     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
104     *  request:        ACCESSORY_SET_HID_REPORT_DESC
105     *  value:          Accessory assigned ID for the HID device
106     *  index:          offset of data in descriptor
107     *                      (needed when HID descriptor is too big for one packet)
108     *  data            the HID report descriptor
109     */
110    public static final int ACCESSORY_SET_HID_REPORT_DESC = 56;
111
112    /* Control request for sending HID events.
113     *
114     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
115     *  request:        ACCESSORY_SEND_HID_EVENT
116     *  value:          Accessory assigned ID for the HID device
117     *  index:          0
118     *  data            the HID report for the event
119     */
120    public static final int ACCESSORY_SEND_HID_EVENT = 57;
121
122    /* Control request for setting the audio mode.
123     *
124     *  requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
125     *  request:        ACCESSORY_SET_AUDIO_MODE
126     *  value:          0 - no audio
127     *                     1 - device to host, 44100 16-bit stereo PCM
128     *  index:          0
129     *  data            none
130     */
131    public static final int ACCESSORY_SET_AUDIO_MODE = 58;
132
133    private UsbAccessoryConstants() {
134    }
135}
136