Guest User

Corrected

a guest
Feb 14th, 2012
631
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.21 KB | None | 0 0
  1. /*----------------------------------------------------------------------------
  2. * U S B - K e r n e l
  3. *----------------------------------------------------------------------------
  4. * Name: usbdesc.c
  5. * Purpose: USB Descriptors
  6. * Version: V1.20
  7. *----------------------------------------------------------------------------
  8. * This software is supplied "AS IS" without any warranties, express,
  9. * implied or statutory, including but not limited to the implied
  10. * warranties of fitness for purpose, satisfactory quality and
  11. * noninfringement. Keil extends you a royalty-free right to reproduce
  12. * and distribute executable files created using this software for use
  13. * on NXP Semiconductors LPC family microcontroller devices only. Nothing
  14. * else gives you the right to use this software.
  15. *
  16. * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
  17. *----------------------------------------------------------------------------
  18. * History:
  19. * V1.20 Changed string descriptor handling
  20. * V1.00 Initial Version
  21. *----------------------------------------------------------------------------*/
  22. #include "type.h"
  23.  
  24. #include "usb.h"
  25. #include "audio.h"
  26. #include "usbcfg.h"
  27. #include "usbdesc.h"
  28.  
  29.  
  30. /* USB Standard Device Descriptor */
  31. const uint8_t USB_DeviceDescriptor[] = {
  32. USB_DEVICE_DESC_SIZE, /* bLength */
  33. USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */
  34. WBVAL(0x0200), /* 2.00 */ /* bcdUSB */
  35. 0x00, /* bDeviceClass */
  36. 0x00, /* bDeviceSubClass */
  37. 0x00, /* bDeviceProtocol */
  38. USB_MAX_PACKET0, /* bMaxPacketSize0 */
  39. WBVAL(0x1FD4), /* idVendor */
  40. WBVAL(0x4064), /* idProduct */
  41. WBVAL(0x0100), /* 1.00 */ /* bcdDevice */
  42. 0x01, /* iManufacturer */
  43. 0x02, /* iProduct */
  44. 0x03, /* iSerialNumber */
  45. 0x01 /* bNumConfigurations: one possible configuration*/
  46. };
  47.  
  48. /* USB Configuration Descriptor */
  49. /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
  50. const uint8_t USB_ConfigDescriptor[] = {
  51. /* Configuration 1 */
  52. USB_CONFIGUARTION_DESC_SIZE, /* bLength */
  53. USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */
  54. WBVAL( /* wTotalLength */
  55. USB_CONFIGUARTION_DESC_SIZE +
  56. USB_INTERFACE_DESC_SIZE +
  57. AUDIO_CONTROL_INTERFACE_DESC_SZ(1) +
  58. AUDIO_INPUT_TERMINAL_DESC_SIZE +
  59. AUDIO_FEATURE_UNIT_DESC_SZ(1,1) +
  60. AUDIO_OUTPUT_TERMINAL_DESC_SIZE +
  61. AUDIO_INPUT_TERMINAL_DESC_SIZE +
  62. AUDIO_OUTPUT_TERMINAL_DESC_SIZE +
  63. USB_INTERFACE_DESC_SIZE +
  64. USB_INTERFACE_DESC_SIZE +
  65. AUDIO_STREAMING_INTERFACE_DESC_SIZE +
  66. AUDIO_STREAMING_GENERAL +
  67. AUDIO_FORMAT_TYPE_I_DESC_SZ(1) +
  68. AUDIO_STANDARD_ENDPOINT_DESC_SIZE +
  69. AUDIO_STREAMING_ENDPOINT_DESC_SIZE +
  70. USB_INTERFACE_DESC_SIZE +
  71. USB_INTERFACE_DESC_SIZE +
  72. AUDIO_STREAMING_INTERFACE_DESC_SIZE +
  73. AUDIO_FORMAT_TYPE_I_DESC_SZ(1) +
  74. AUDIO_STANDARD_ENDPOINT_DESC_SIZE +
  75. AUDIO_STREAMING_ENDPOINT_DESC_SIZE
  76.  
  77. ),
  78. 0x03, /* bNumInterfaces */
  79. 0x01, /* bConfigurationValue */
  80. 0x00, /* iConfiguration */
  81. USB_CONFIG_BUS_POWERED, /* bmAttributes */
  82. USB_CONFIG_POWER_MA(100), /* bMaxPower */
  83. /* Interface 0, Alternate Setting 0, Audio Control */
  84. USB_INTERFACE_DESC_SIZE, /* bLength */
  85. USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  86. 0x00, /* bInterfaceNumber */
  87. 0x00, /* bAlternateSetting */
  88. 0x00, /* bNumEndpoints */
  89. USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
  90. AUDIO_SUBCLASS_AUDIOCONTROL, /* bInterfaceSubClass */
  91. AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
  92. 0x00, /* iInterface */
  93. /* Audio Control Interface */
  94. AUDIO_CONTROL_INTERFACE_DESC_SZ(1), /* bLength */
  95. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  96. AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */
  97. WBVAL(0x0100), /* 1.00 */ /* bcdADC */
  98. WBVAL( /* wTotalLength */
  99. AUDIO_CONTROL_INTERFACE_DESC_SZ(1) +
  100. AUDIO_INPUT_TERMINAL_DESC_SIZE +
  101. AUDIO_FEATURE_UNIT_DESC_SZ(1,1) +
  102. AUDIO_OUTPUT_TERMINAL_DESC_SIZE
  103. ),
  104. 0x01, /* bInCollection */
  105. 0x01, /* baInterfaceNr */
  106. //0x02, /* baInterfaceNr */
  107. /* Audio Input Terminal (Speaker)*/
  108. AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */
  109. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  110. AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */
  111. 0x01, /* bTerminalID */
  112. WBVAL(AUDIO_TERMINAL_USB_STREAMING), /* wTerminalType */
  113. 0x00, /* bAssocTerminal */
  114. 0x01, /* bNrChannels */
  115. WBVAL(AUDIO_CHANNEL_M), /* wChannelConfig */
  116. 0x00, /* iChannelNames */
  117. 0x00, /* iTerminal */
  118. /* Audio Feature Unit */
  119. AUDIO_FEATURE_UNIT_DESC_SZ(1,1), /* bLength */
  120. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  121. AUDIO_CONTROL_FEATURE_UNIT, /* bDescriptorSubtype */
  122. 0x02, /* bUnitID */
  123. 0x01, /* bSourceID */
  124. 0x01, /* bControlSize */
  125. AUDIO_CONTROL_MUTE |
  126. AUDIO_CONTROL_VOLUME, /* bmaControls(0) */
  127. 0x00, /* bmaControls(1) */
  128. 0x00, /* iTerminal */
  129. /* Audio Output Terminal (Speaker)*/
  130. AUDIO_OUTPUT_TERMINAL_DESC_SIZE, /* bLength */
  131. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  132. AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */
  133. 0x03, /* bTerminalID */
  134. WBVAL(AUDIO_TERMINAL_SPEAKER), /* wTerminalType */
  135. 0x00, /* bAssocTerminal */
  136. 0x02, /* bSourceID */
  137. 0x00, /* iTerminal */
  138. /* Audio Audio Input Terminal (Microphone) */
  139. AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */
  140. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  141. AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */
  142. 0x04, /* bTerminalID */
  143. WBVAL(AUDIO_TERMINAL_MICROPHONE), /* wTerminalType */
  144. 0x00, /* bAssocTerminal */
  145. 0x01, /* bNrChannels */
  146. WBVAL(AUDIO_CHANNEL_M), /* wChannelConfig */
  147. 0x00, /* iChannelNames */
  148. 0x00, /* iTerminal */
  149. /* Audio Output Terminal (Microphone) */
  150. AUDIO_OUTPUT_TERMINAL_DESC_SIZE, /* bLength */
  151. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  152. AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */
  153. 0x05, /* bTerminalID */
  154. WBVAL(AUDIO_TERMINAL_USB_STREAMING), /* wTerminalType */
  155. 0x00, /* bAssocTerminal */
  156. 0x04, /* bSourceID */
  157. 0x00, /* iTerminal */
  158.  
  159.  
  160.  
  161.  
  162.  
  163. /* Interface 1, Alternate Setting 0, Audio Streaming - Zero Bandwith */
  164. USB_INTERFACE_DESC_SIZE, /* bLength */
  165. USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  166. 0x01, /* bInterfaceNumber */
  167. 0x00, /* bAlternateSetting */
  168. 0x00, /* bNumEndpoints */
  169. USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
  170. AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
  171. AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
  172. 0x00, /* iInterface */
  173. /* Interface 1, Alternate Setting 1, Audio Streaming - Operational */
  174. USB_INTERFACE_DESC_SIZE, /* bLength */
  175. USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  176. 0x01, /* bInterfaceNumber */
  177. 0x01, /* bAlternateSetting */
  178. 0x01, /* bNumEndpoints */
  179. USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
  180. AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
  181. AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
  182. 0x00, /* iInterface */
  183. /* Audio Streaming Interface */
  184. AUDIO_STREAMING_INTERFACE_DESC_SIZE, /* bLength */
  185. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  186. AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */
  187. 0x01, /* bTerminalLink */
  188. 0x00, /* bDelay */
  189. WBVAL(AUDIO_FORMAT_PCM), /* wFormatTag */
  190. /* Audio Type I Format */
  191. AUDIO_FORMAT_TYPE_I_DESC_SZ(1), /* bLength */
  192. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  193. AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */
  194. AUDIO_FORMAT_TYPE_I, /* bFormatType */
  195. 0x01, /* bNrChannels */
  196. 0x02, /* bSubFrameSize */
  197. 16, /* bBitResolution */
  198. 0x01, /* bSamFreqType */
  199. B3VAL(32000), /* tSamFreq */
  200. /* Endpoint - Standard Descriptor */
  201. AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */
  202. USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
  203. USB_ENDPOINT_OUT(3), /* bEndpointAddress */
  204. USB_ENDPOINT_TYPE_ISOCHRONOUS, /* bmAttributes */
  205. WBVAL(66), /* wMaxPacketSize */
  206. 0x01, /* bInterval */
  207. 0x00, /* bRefresh */
  208. 0x00, /* bSynchAddress */
  209. /* Endpoint - Audio Streaming */
  210. AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength */
  211. AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
  212. AUDIO_ENDPOINT_GENERAL, /* bDescriptor */
  213. 0x00, /* bmAttributes */
  214. 0x00, /* bLockDelayUnits */
  215. WBVAL(0x0000), /* wLockDelay */
  216.  
  217. /* Interface 1, Alternate Setting 0, Audio Streaming - Zero Bandwith*/
  218. USB_INTERFACE_DESC_SIZE, /* bLength */
  219. USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  220. 0x02, /* bInterfaceNumber */
  221. 0x00, /* bAlternateSetting */
  222. 0x00, /* bNumEndpoints */
  223. USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
  224. AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
  225. AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
  226. 0x00, /* iInterface */
  227. /* Interface 1, Alternate Setting 1, Audio Streaming - Operational */
  228. USB_INTERFACE_DESC_SIZE, /* bLength */
  229. USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  230. 0x02, /* bInterfaceNumber */
  231. 0x01, /* bAlternateSetting */
  232. 0x01, /* bNumEndpoints */
  233. USB_DEVICE_CLASS_AUDIO, /* bInterfaceClass */
  234. AUDIO_SUBCLASS_AUDIOSTREAMING, /* bInterfaceSubClass */
  235. AUDIO_PROTOCOL_UNDEFINED, /* bInterfaceProtocol */
  236. 0x00, /* iInterface */
  237. /* Audio Streaming Interface */
  238. AUDIO_STREAMING_INTERFACE_DESC_SIZE, /* bLength */
  239. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  240. AUDIO_SUBCLASS_AUDIOCONTROL, /* bDescriptorSubtype */
  241. 0x05, /* bTerminalLink (output terminal microphone) */
  242. 0x01, /* bDelay */
  243. WBVAL(AUDIO_FORMAT_PCM), /* wFormatTag */
  244. /* Audio Type I Format */
  245. AUDIO_FORMAT_TYPE_I_DESC_SZ(1), /* bLength */
  246. AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
  247. AUDIO_SUBCLASS_AUDIOSTREAMING , /* bDescriptorSubtype */
  248. AUDIO_FORMAT_TYPE_I, /* bFormatType */
  249. 0x01, /* bNrChannels */
  250. 0x02, /* bSubFrameSize */
  251. 16, /* bBitResolution */
  252. 0x01, /* bSamFreqType */
  253. B3VAL(32000), /* tSamFreq */
  254. /* Endpoint - Standard Descriptor */
  255. AUDIO_STANDARD_ENDPOINT_DESC_SIZE, /* bLength */
  256. USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
  257. USB_ENDPOINT_IN(3), /* bEndpointAddress */
  258. USB_ENDPOINT_TYPE_ISOCHRONOUS, /* bmAttributes */
  259. WBVAL(66), /* wMaxPacketSize */
  260. 0x01, /* bInterval */
  261. 0x00, /* bRefresh */
  262. 0x00, /* bSynchAddress */
  263. /* Endpoint - Audio Streaming */
  264. AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength */
  265. AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */
  266. AUDIO_ENDPOINT_GENERAL, /* bDescriptor */
  267. 0x00, /* bmAttributes */
  268. 0x00, /* bLockDelayUnits */
  269. WBVAL(0x0000), /* wLockDelay */
  270.  
  271. /* Terminator */
  272. 0 /* bLength */
  273. };
  274.  
  275. /* USB String Descriptor (optional) */
  276. const uint8_t USB_StringDescriptor[] = {
  277. /* Index 0x00: LANGID Codes */
  278. 0x04, /* bLength */
  279. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  280. WBVAL(0x0409), /* US English */ /* wLANGID */
  281. /* Index 0x01: Manufacturer */
  282. (13*2 + 2), /* bLength (13 Char + Type + lenght) */
  283. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  284. 'N',0,
  285. 'X',0,
  286. 'P',0,
  287. ' ',0,
  288. 'S',0,
  289. 'e',0,
  290. 'm',0,
  291. 'i',0,
  292. 'c',0,
  293. 'o',0,
  294. 'n',0,
  295. 'd',0,
  296. ' ',0,
  297. /* Index 0x02: Product */
  298. (20*2 + 2), /* bLength ( 20 Char + Type + lenght) */
  299. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  300. 'N',0,
  301. 'X',0,
  302. 'P',0,
  303. ' ',0,
  304. 'L',0,
  305. 'P',0,
  306. 'C',0,
  307. '1',0,
  308. '7',0,
  309. 'x',0,
  310. 'x',0,
  311. ' ',0,
  312. 'S',0,
  313. 'p',0,
  314. 'e',0,
  315. 'a',0,
  316. 'k',0,
  317. 'e',0,
  318. 'r',0,
  319. ' ',0,
  320. /* Index 0x03: Serial Number */
  321. (12*2 + 2), /* bLength (12 Char + Type + lenght) */
  322. USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
  323. 'D',0,
  324. 'E',0,
  325. 'M',0,
  326. 'O',0,
  327. '0',0,
  328. '0',0,
  329. '0',0,
  330. '0',0,
  331. '0',0,
  332. '0',0,
  333. '0',0,
  334. '0',0,
  335. };
Advertisement
Add Comment
Please, Sign In to add comment