text: /*
   * Description:
   *
   * These are the USB descriptors that are provided to the host for
   *  identification and configuration during the enumeration phase.
   *
   * Portions from the STM32F10x USB Full Speed Device Library
   *
   * License:
   *
   * Copyright 2012 Crystalfontz America, Inc.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  /* Includes ------------------------------------------------------------------*/
  #include "usb_lib.h"
  #include "usb_desc.h"
  
  /* USB Standard Device Descriptor */
  const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
    {
      0x12,   /* bLength */
      USB_DEVICE_DESCRIPTOR_TYPE,     /* bDescriptorType */
      0x00,
      0x02,   /* bcdUSB = 2.00 */
      0x02,   /* bDeviceClass: CDC */
      0x00,   /* bDeviceSubClass */
      0x00,   /* bDeviceProtocol */
      0x40,   /* bMaxPacketSize0 */
      0x3B,
      0x22,   /* idVendor = 0x223B */
      0x04,
      0x00,   /* idProduct = 0x0004 */
      0x00,
      0x02,   /* bcdDevice = 2.00 */
      1,              /* Index of string descriptor describing manufacturer */
      2,              /* Index of string descriptor describing product */
      3,              /* Index of string descriptor describing the device's serial number */
      0x01    /* bNumConfigurations */
    };
  
  const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
    {
      /*Configuration Descriptor*/
      0x09,   /* bLength: Configuration Descriptor size */
      USB_CONFIGURATION_DESCRIPTOR_TYPE,      /* bDescriptorType: Configuration */
      VIRTUAL_COM_PORT_SIZ_CONFIG_DESC,       /* wTotalLength:no of returned bytes */
      0x00,
      0x02,   /* bNumInterfaces: 2 interface */
      0x01,   /* bConfigurationValue: Configuration value */
      0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
      0xC0,   /* bmAttributes: self powered */
      0x32,   /* MaxPower 0 mA */
      /*Interface Descriptor*/
      0x09,   /* bLength: Interface Descriptor size */
      USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: Interface */
      /* Interface descriptor type */
      0x00,   /* bInterfaceNumber: Number of Interface */
      0x00,   /* bAlternateSetting: Alternate setting */
      0x01,   /* bNumEndpoints: One endpoints used */
      0x02,   /* bInterfaceClass: Communication Interface Class */
      0x02,   /* bInterfaceSubClass: Abstract Control Model */
      0x01,   /* bInterfaceProtocol: Common AT commands */
      0x00,   /* iInterface: */
      /*Header Functional Descriptor*/
      0x05,   /* bLength: Endpoint Descriptor size */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x00,   /* bDescriptorSubtype: Header Func Desc */
      0x10,   /* bcdCDC: spec release number */
      0x01,
      /*Call Management Functional Descriptor*/
      0x05,   /* bFunctionLength */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x01,   /* bDescriptorSubtype: Call Management Func Desc */
      0x00,   /* bmCapabilities: D0+D1 */
      0x01,   /* bDataInterface: 1 */
      /*ACM Functional Descriptor*/
      0x04,   /* bFunctionLength */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
      0x02,   /* bmCapabilities */
      /*Union Functional Descriptor*/
      0x05,   /* bFunctionLength */
      0x24,   /* bDescriptorType: CS_INTERFACE */
      0x06,   /* bDescriptorSubtype: Union func desc */
      0x00,   /* bMasterInterface: Communication class interface */
      0x01,   /* bSlaveInterface0: Data Class Interface */
      /*Endpoint 2 Descriptor*/
      0x07,   /* bLength: Endpoint Descriptor size */
      USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
      0x82,   /* bEndpointAddress: (IN2) */
      0x03,   /* bmAttributes: Interrupt */
      VIRTUAL_COM_PORT_INT_SIZE,      /* wMaxPacketSize: */
      0x00,
      0xFF,   /* bInterval: */
      /*Data class interface descriptor*/
      0x09,   /* bLength: Endpoint Descriptor size */
      USB_INTERFACE_DESCRIPTOR_TYPE,  /* bDescriptorType: */
      0x01,   /* bInterfaceNumber: Number of Interface */
      0x00,   /* bAlternateSetting: Alternate setting */
      0x02,   /* bNumEndpoints: Two endpoints used */
      0x0A,   /* bInterfaceClass: CDC */
      0x00,   /* bInterfaceSubClass: */
      0x00,   /* bInterfaceProtocol: */
      0x00,   /* iInterface: */
      /*Endpoint 3 Descriptor*/
      0x07,   /* bLength: Endpoint Descriptor size */
      USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
      0x03,   /* bEndpointAddress: (OUT3) */
      0x02,   /* bmAttributes: Bulk */
      VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
      0x00,
      0x00,   /* bInterval: ignore for Bulk transfer */
      /*Endpoint 1 Descriptor*/
      0x07,   /* bLength: Endpoint Descriptor size */
      USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: Endpoint */
      0x81,   /* bEndpointAddress: (IN1) */
      0x02,   /* bmAttributes: Bulk */
      VIRTUAL_COM_PORT_DATA_SIZE,             /* wMaxPacketSize: */
      0x00,
      0x00    /* bInterval */
    };
  
  /* USB String Descriptors */
  const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID] =
    {
      VIRTUAL_COM_PORT_SIZ_STRING_LANGID,
      USB_STRING_DESCRIPTOR_TYPE,
      0x09,
      0x04 /* LangID = 0x0409: U.S. English */
    };
  