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