xref: /OK3568_Linux_fs/kernel/include/uapi/linux/usb/f_accessory.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Gadget Function Driver for Android USB accessories
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Copyright (C) 2011 Google, Inc.
5*4882a593Smuzhiyun  * Author: Mike Lockwood <lockwood@android.com>
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * This software is licensed under the terms of the GNU General Public
8*4882a593Smuzhiyun  * License version 2, as published by the Free Software Foundation, and
9*4882a593Smuzhiyun  * may be copied, distributed, and modified under those terms.
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful,
12*4882a593Smuzhiyun  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13*4882a593Smuzhiyun  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*4882a593Smuzhiyun  * GNU General Public License for more details.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifndef _UAPI_LINUX_USB_F_ACCESSORY_H
19*4882a593Smuzhiyun #define _UAPI_LINUX_USB_F_ACCESSORY_H
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /* Use Google Vendor ID when in accessory mode */
22*4882a593Smuzhiyun #define USB_ACCESSORY_VENDOR_ID 0x18D1
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* Product ID to use when in accessory mode */
26*4882a593Smuzhiyun #define USB_ACCESSORY_PRODUCT_ID 0x2D00
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun /* Product ID to use when in accessory mode and adb is enabled */
29*4882a593Smuzhiyun #define USB_ACCESSORY_ADB_PRODUCT_ID 0x2D01
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /* Indexes for strings sent by the host via ACCESSORY_SEND_STRING */
32*4882a593Smuzhiyun #define ACCESSORY_STRING_MANUFACTURER   0
33*4882a593Smuzhiyun #define ACCESSORY_STRING_MODEL          1
34*4882a593Smuzhiyun #define ACCESSORY_STRING_DESCRIPTION    2
35*4882a593Smuzhiyun #define ACCESSORY_STRING_VERSION        3
36*4882a593Smuzhiyun #define ACCESSORY_STRING_URI            4
37*4882a593Smuzhiyun #define ACCESSORY_STRING_SERIAL         5
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /* Control request for retrieving device's protocol version
40*4882a593Smuzhiyun  *
41*4882a593Smuzhiyun  *	requestType:    USB_DIR_IN | USB_TYPE_VENDOR
42*4882a593Smuzhiyun  *	request:        ACCESSORY_GET_PROTOCOL
43*4882a593Smuzhiyun  *	value:          0
44*4882a593Smuzhiyun  *	index:          0
45*4882a593Smuzhiyun  *	data            version number (16 bits little endian)
46*4882a593Smuzhiyun  *                     1 for original accessory support
47*4882a593Smuzhiyun  *                     2 adds HID and device to host audio support
48*4882a593Smuzhiyun  */
49*4882a593Smuzhiyun #define ACCESSORY_GET_PROTOCOL  51
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun /* Control request for host to send a string to the device
52*4882a593Smuzhiyun  *
53*4882a593Smuzhiyun  *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
54*4882a593Smuzhiyun  *	request:        ACCESSORY_SEND_STRING
55*4882a593Smuzhiyun  *	value:          0
56*4882a593Smuzhiyun  *	index:          string ID
57*4882a593Smuzhiyun  *	data            zero terminated UTF8 string
58*4882a593Smuzhiyun  *
59*4882a593Smuzhiyun  *  The device can later retrieve these strings via the
60*4882a593Smuzhiyun  *  ACCESSORY_GET_STRING_* ioctls
61*4882a593Smuzhiyun  */
62*4882a593Smuzhiyun #define ACCESSORY_SEND_STRING   52
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun /* Control request for starting device in accessory mode.
65*4882a593Smuzhiyun  * The host sends this after setting all its strings to the device.
66*4882a593Smuzhiyun  *
67*4882a593Smuzhiyun  *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
68*4882a593Smuzhiyun  *	request:        ACCESSORY_START
69*4882a593Smuzhiyun  *	value:          0
70*4882a593Smuzhiyun  *	index:          0
71*4882a593Smuzhiyun  *	data            none
72*4882a593Smuzhiyun  */
73*4882a593Smuzhiyun #define ACCESSORY_START         53
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* Control request for registering a HID device.
76*4882a593Smuzhiyun  * Upon registering, a unique ID is sent by the accessory in the
77*4882a593Smuzhiyun  * value parameter. This ID will be used for future commands for
78*4882a593Smuzhiyun  * the device
79*4882a593Smuzhiyun  *
80*4882a593Smuzhiyun  *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
81*4882a593Smuzhiyun  *	request:        ACCESSORY_REGISTER_HID_DEVICE
82*4882a593Smuzhiyun  *	value:          Accessory assigned ID for the HID device
83*4882a593Smuzhiyun  *	index:          total length of the HID report descriptor
84*4882a593Smuzhiyun  *	data            none
85*4882a593Smuzhiyun  */
86*4882a593Smuzhiyun #define ACCESSORY_REGISTER_HID         54
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /* Control request for unregistering a HID device.
89*4882a593Smuzhiyun  *
90*4882a593Smuzhiyun  *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
91*4882a593Smuzhiyun  *	request:        ACCESSORY_REGISTER_HID
92*4882a593Smuzhiyun  *	value:          Accessory assigned ID for the HID device
93*4882a593Smuzhiyun  *	index:          0
94*4882a593Smuzhiyun  *	data            none
95*4882a593Smuzhiyun  */
96*4882a593Smuzhiyun #define ACCESSORY_UNREGISTER_HID         55
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun /* Control request for sending the HID report descriptor.
99*4882a593Smuzhiyun  * If the HID descriptor is longer than the endpoint zero max packet size,
100*4882a593Smuzhiyun  * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
101*4882a593Smuzhiyun  * commands. The data for the descriptor must be sent sequentially
102*4882a593Smuzhiyun  * if multiple packets are needed.
103*4882a593Smuzhiyun  *
104*4882a593Smuzhiyun  *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
105*4882a593Smuzhiyun  *	request:        ACCESSORY_SET_HID_REPORT_DESC
106*4882a593Smuzhiyun  *	value:          Accessory assigned ID for the HID device
107*4882a593Smuzhiyun  *	index:          offset of data in descriptor
108*4882a593Smuzhiyun  *                      (needed when HID descriptor is too big for one packet)
109*4882a593Smuzhiyun  *	data            the HID report descriptor
110*4882a593Smuzhiyun  */
111*4882a593Smuzhiyun #define ACCESSORY_SET_HID_REPORT_DESC         56
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun /* Control request for sending HID events.
114*4882a593Smuzhiyun  *
115*4882a593Smuzhiyun  *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
116*4882a593Smuzhiyun  *	request:        ACCESSORY_SEND_HID_EVENT
117*4882a593Smuzhiyun  *	value:          Accessory assigned ID for the HID device
118*4882a593Smuzhiyun  *	index:          0
119*4882a593Smuzhiyun  *	data            the HID report for the event
120*4882a593Smuzhiyun  */
121*4882a593Smuzhiyun #define ACCESSORY_SEND_HID_EVENT         57
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /* Control request for setting the audio mode.
124*4882a593Smuzhiyun  *
125*4882a593Smuzhiyun  *	requestType:	USB_DIR_OUT | USB_TYPE_VENDOR
126*4882a593Smuzhiyun  *	request:        ACCESSORY_SET_AUDIO_MODE
127*4882a593Smuzhiyun  *	value:          0 - no audio
128*4882a593Smuzhiyun  *                     1 - device to host, 44100 16-bit stereo PCM
129*4882a593Smuzhiyun  *	index:          0
130*4882a593Smuzhiyun  *	data            none
131*4882a593Smuzhiyun  */
132*4882a593Smuzhiyun #define ACCESSORY_SET_AUDIO_MODE         58
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun /* ioctls for retrieving strings set by the host */
135*4882a593Smuzhiyun #define ACCESSORY_GET_STRING_MANUFACTURER   _IOW('M', 1, char[256])
136*4882a593Smuzhiyun #define ACCESSORY_GET_STRING_MODEL          _IOW('M', 2, char[256])
137*4882a593Smuzhiyun #define ACCESSORY_GET_STRING_DESCRIPTION    _IOW('M', 3, char[256])
138*4882a593Smuzhiyun #define ACCESSORY_GET_STRING_VERSION        _IOW('M', 4, char[256])
139*4882a593Smuzhiyun #define ACCESSORY_GET_STRING_URI            _IOW('M', 5, char[256])
140*4882a593Smuzhiyun #define ACCESSORY_GET_STRING_SERIAL         _IOW('M', 6, char[256])
141*4882a593Smuzhiyun /* returns 1 if there is a start request pending */
142*4882a593Smuzhiyun #define ACCESSORY_IS_START_REQUESTED        _IO('M', 7)
143*4882a593Smuzhiyun /* returns audio mode (set via the ACCESSORY_SET_AUDIO_MODE control request) */
144*4882a593Smuzhiyun #define ACCESSORY_GET_AUDIO_MODE            _IO('M', 8)
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun #endif /* _UAPI_LINUX_USB_F_ACCESSORY_H */
147