Home | History | Annotate | Download | only in usb
      1 /*
      2  * Gadget Function Driver for Android USB accessories
      3  *
      4  * Copyright (C) 2011 Google, Inc.
      5  * Author: Mike Lockwood <lockwood (at) 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