/* * Copyright (C) 2008 The Android Open Source Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ static unsigned short manufacturer_string[] = { (TYPE_STRING << 8) | (12 * 2), 'G', 'o', 'o', 'g', 'l', 'e', ',', ' ', 'I', 'n', 'c', }; static unsigned short product_string[] = { (TYPE_STRING << 8) | (12 * 2), 'A', 'n', 'd', 'r', 'o', 'i', 'd', ' ', '1', '.', '0', }; static unsigned short default_string[] = { (TYPE_STRING << 8) | (8 * 2), 'd', 'e', 'f', 'a', 'u', 'l', 't', }; static unsigned short language_table[] = { (TYPE_STRING << 8) | 4, 0x0409, // LANGID for US English }; static unsigned char device_desc[] = { 18, // length TYPE_DEVICE, // type 0x10, 0x02, // usb spec rev 1.00 0x00, // class 0x00, // subclass 0x00, // protocol 0x40, // max packet size 0xD1, 0x18, // vendor id 0x0D, 0xD0, // product id 0x00, 0x01, // version 1.0 0x01, // manufacturer str idx 0x02, // product str idx 0x00, // serial number index 0x01, // number of configs, }; static unsigned char config_desc[] = { 0x09, // length TYPE_CONFIGURATION, 0x20, 0x00, // total length 0x01, // # interfaces 0x01, // config value 0x00, // config string 0x80, // attributes 0x80, // XXX max power (250ma) 0x09, // length TYPE_INTERFACE, 0x00, // interface number 0x00, // alt number 0x02, // # endpoints 0xFF, 0x42, 0x03, 0x00, // interface string 0x07, // length TYPE_ENDPOINT, 0x81, // in, #1 0x02, // bulk 0x00, 0x02, // max packet 512 0x00, // interval 0x07, // length TYPE_ENDPOINT, 0x01, // out, #1 0x02, // bulk 0x00, 0x02, // max packet 512 0x01, // interval }; static unsigned char config_desc_fs[] = { 0x09, // length TYPE_CONFIGURATION, 0x20, 0x00, // total length 0x01, // # interfaces 0x01, // config value 0x00, // config string 0x80, // attributes 0x80, // XXX max power (250ma) 0x09, // length TYPE_INTERFACE, 0x00, // interface number 0x00, // alt number 0x02, // # endpoints 0xFF, 0x42, 0x03, 0x00, // interface string 0x07, // length TYPE_ENDPOINT, 0x81, // in, #1 0x02, // bulk 0x40, 0x00, // max packet 64 0x00, // interval 0x07, // length TYPE_ENDPOINT, 0x01, // out, #1 0x02, // bulk 0x40, 0x00, // max packet 64 0x00, // interval }; typedef struct { void *data; unsigned short length; unsigned short id; } dtable; #define ID(type,num) ((type << 8) | num) static dtable descr_hs[] = { { device_desc, sizeof(device_desc), ID(TYPE_DEVICE, 0) }, { config_desc, sizeof(config_desc), ID(TYPE_CONFIGURATION, 0) }, { manufacturer_string, sizeof(manufacturer_string), ID(TYPE_STRING, 1) }, { product_string, sizeof(product_string), ID(TYPE_STRING, 2) }, { default_string, sizeof(default_string), ID(TYPE_STRING, 4) }, { language_table, sizeof(language_table), ID(TYPE_STRING, 0) }, { 0, 0, 0 }, }; static dtable descr_fs[] = { { device_desc, sizeof(device_desc), ID(TYPE_DEVICE, 0) }, { config_desc_fs, sizeof(config_desc), ID(TYPE_CONFIGURATION, 0) }, { manufacturer_string, sizeof(manufacturer_string), ID(TYPE_STRING, 1) }, { product_string, sizeof(product_string), ID(TYPE_STRING, 2) }, { default_string, sizeof(default_string), ID(TYPE_STRING, 4) }, { language_table, sizeof(language_table), ID(TYPE_STRING, 0) }, { 0, 0, 0 }, };