00001 /********************************************************************************* 00002 00003 Copyright 2006-2008 MakingThings 00004 00005 Licensed under the Apache License, 00006 Version 2.0 (the "License"); you may not use this file except in compliance 00007 with the License. You may obtain a copy of the License at 00008 00009 http://www.apache.org/licenses/LICENSE-2.0 00010 00011 Unless required by applicable law or agreed to in writing, software distributed 00012 under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR 00013 CONDITIONS OF ANY KIND, either express or implied. See the License for 00014 the specific language governing permissions and limitations under the License. 00015 00016 *********************************************************************************/ 00017 00018 /* 00019 - DESCRIPTOR DEFINITIONS - 00020 */ 00021 00022 /* String descriptors used during the enumeration process. 00023 These take the form: 00024 00025 { 00026 Length of descriptor, 00027 Descriptor type, 00028 Data 00029 } 00030 */ 00031 00032 const portCHAR pxLanguageStringDescriptor[] = 00033 { 00034 4, 00035 usbDESCRIPTOR_TYPE_STRING, 00036 0x09, 0x04 00037 }; 00038 00039 const portCHAR pxManufacturerStringDescriptor[] = 00040 { 00041 26, 00042 usbDESCRIPTOR_TYPE_STRING, 00043 00044 'M', 0x00, 'a', 0x00, 'k', 0x00, 'i', 0x00, 'n', 0x00, 'g', 0x00, 00045 'T', 0x00, 'h', 0x00, 'i', 0x00, 'n', 0x00, 'g', 0x00, 's', 0x00 00046 }; 00047 00048 const portCHAR pxProductStringDescriptor[] = 00049 { 00050 39, 00051 usbDESCRIPTOR_TYPE_STRING, 00052 00053 'M', 0x00, 'a', 0x00, 'k', 0x00, 'e', 0x00, ' ', 0x00, 00054 'C', 0x00, 'o', 0x00, 'n', 0x00, 't', 0x00, 'r', 0x00, 'o', 0x00, 'l', 0x00, 'l', 0x00, 'e', 0x00, 'r', 0x00, ' ', 0x00, 00055 'K', 0x00, 'i', 0x00, 't', 0x00 00056 }; 00057 00058 const portCHAR pxConfigurationStringDescriptor[] = 00059 { 00060 38, 00061 usbDESCRIPTOR_TYPE_STRING, 00062 00063 'C', 0x00, 'o', 0x00, 'n', 0x00, 'f', 0x00, 'i', 0x00, 'g', 0x00, 'u', 0x00, 'r', 0x00, 'a', 0x00, 't', 0x00, 'i', 0x00, 00064 'o', 0x00, 'n', 0x00, ' ', 0x00, 'N', 0x00, 'a', 0x00, 'm', 0x00, 'e', 0x00 00065 }; 00066 00067 const portCHAR pxInterfaceStringDescriptor[] = 00068 { 00069 30, 00070 usbDESCRIPTOR_TYPE_STRING, 00071 00072 'I', 0x00, 'n', 0x00, 't', 0x00, 'e', 0x00, 'r', 0x00, 'f', 0x00, 'a', 0x00, 'c', 0x00, 'e', 0x00, ' ', 0x00, 'N', 0x00, 00073 'a', 0x00, 'm', 0x00, 'e', 0x00 00074 }; 00075 00076 /* Device should properly be 0x134A:0x9001, using 0x05F9:0xFFFF for Linux testing */ 00077 const char pxDeviceDescriptor[] = 00078 { 00079 /* Device descriptor */ 00080 0x12, /* bLength */ 00081 0x01, /* bDescriptorType */ 00082 0x10, 0x01, /* bcdUSBL */ 00083 0x02, /* bDeviceClass: */ 00084 0x00, /* bDeviceSubclass: */ 00085 0x00, /* bDeviceProtocol: */ 00086 0x08, /* bMaxPacketSize0 */ 00087 0x03, 0xEB, /* idVendorL */ 00088 0x20, 0x09, /* idProductL */ 00089 0x10, 0x01, /* bcdDeviceL */ 00090 usbMANUFACTURER_STRING, /* iManufacturer */ 00091 usbPRODUCT_STRING, /* iProduct */ 00092 0x00, /* SerialNumber */ 00093 0x01 /* bNumConfigs */ 00094 }; 00095 00096 const char pxConfigDescriptor[] = { 00097 00098 /* Configuration 1 descriptor 00099 Here we define two interfaces (0 and 1) and a total of 3 endpoints. 00100 Interface 0 is a CDC Abstract Control Model interface with one interrupt-in endpoint. 00101 Interface 1 is a CDC Data Interface class, with a bulk-in and bulk-out endpoint. 00102 Endpoint 0 gets used as the CDC management element. 00103 */ 00104 0x09, /* CbLength */ 00105 0x02, /* CbDescriptorType */ 00106 0x43, 0x00, /* CwTotalLength 2 EP + Control ? */ 00107 0x02, /* CbNumInterfaces */ 00108 0x01, /* CbConfigurationValue */ 00109 usbCONFIGURATION_STRING,/* CiConfiguration */ 00110 usbBUS_POWERED, /* CbmAttributes Bus powered + Remote Wakeup*/ 00111 0x32, /* CMaxPower: 100mA */ 00112 00113 /* Communication Class Interface Descriptor Requirement */ 00114 0x09, /* bLength */ 00115 0x04, /* bDescriptorType */ 00116 0x00, /* bInterfaceNumber */ 00117 0x00, /* bAlternateSetting */ 00118 0x01, /* bNumEndpoints */ 00119 0x02, /* bInterfaceClass: Comm Interface Class */ 00120 0x02, /* bInterfaceSubclass: Abstract Control Model*/ 00121 0x01, /* bInterfaceProtocol */ //LIAM experimenting here. 00122 usbINTERFACE_STRING,/* iInterface */ 00123 00124 /* Header Functional Descriptor */ 00125 0x05, /* bLength */ 00126 0x24, /* bDescriptor type: CS_INTERFACE */ 00127 0x01, /* bDescriptor subtype: Header Func Desc*/ //LIAM experimenting here. 00128 0x01, 0x01, /* bcdCDC:1.1 */ //LIAM experimenting here. 00129 00130 /* ACM Functional Descriptor */ 00131 0x04, /* bFunctionLength */ 00132 0x24, /* bDescriptor type: CS_INTERFACE */ 00133 0x02, /* bDescriptor subtype: ACM Func Desc */ 00134 0x06, /* bmCapabilities: We don't support squat*/ //LIAM experimenting here. 00135 00136 /* Union Functional Descriptor */ 00137 0x05, /* bFunctionLength */ 00138 0x24, /* bDescriptor type: CS_INTERFACE */ 00139 0x06, /* bDescriptor subtype: Union Func Desc */ 00140 0x00, /* bMasterInterface: CDC Interface */ 00141 0x01, /* bSlaveInterface0: Data Class Interface*/ 00142 00143 /* Call Management Functional Descriptor 00144 0 in D1 and D0 indicates that device does not handle call management*/ 00145 0x05, /* bFunctionLength */ 00146 0x24, /* bDescriptor type: CS_INTERFACE */ 00147 0x01, /* bDescriptor subtype: Call Management Func*/ 00148 0x01, /* bmCapabilities: D1 + D0 */ //LIAM experimenting here. 00149 0xFF, /* bDataInterface: Data Class Interface 1*/ //LIAM experimenting here. 00150 00151 /* CDC Control - Endpoint 3 descriptor 00152 This endpoint serves as a notification element. */ 00153 00154 0x07, /* bLength */ 00155 0x05, /* bDescriptorType */ 00156 0x83, /* bEndpointAddress, Endpoint 03 - IN */ 00157 0x03, /* bmAttributes INT */ 00158 0x08, 0x00, /* wMaxPacketSize: 8 bytes */ 00159 0xFF, /* bInterval */ 00160 00161 /* Data Class Interface Descriptor Requirement */ 00162 0x09, /* bLength */ 00163 0x04, /* bDescriptorType */ 00164 0x01, /* bInterfaceNumber */ 00165 0x00, /* bAlternateSetting */ 00166 0x02, /* bNumEndPoints */ 00167 0x0A, /* bInterfaceClass */ 00168 0x00, /* bInterfaceSubclass */ 00169 0x01, /* bInterfaceProtocol */ 00170 0x00, /* iInterface */ 00171 00172 /* CDC Data - Endpoint 1 descriptor */ 00173 0x07, /* bLenght */ 00174 0x05, /* bDescriptorType */ 00175 0x01, /* bEndPointAddress, Endpoint 01 - OUT */ 00176 0x02, /* bmAttributes BULK */ 00177 64, /* wMaxPacketSize */ 00178 0x00, 00179 0x00, /* bInterval */ 00180 00181 /* CDC Data - Endpoint 2 descriptor */ 00182 0x07, /* bLength */ 00183 0x05, /* bDescriptorType */ 00184 0x82, /* bEndPointAddress, Endpoint 02 - IN */ 00185 0x02, /* bmAttributes BULK */ 00186 64, /* wMaxPacketSize */ 00187 0x00, 00188 0x00 /* bInterval */ 00189 }; 00190
The Make Controller Kit is an open source project maintained by MakingThings.
MakingThings code is released under the Apache 2.0 license.
Bug tracker, development wiki and status can be found at http://dev.makingthings.com.
This document was last updated on 18 May 2009.