add CFG_TUD_DESC_AUTO for auto descritpor (device, config)
This commit is contained in:
		@@ -65,7 +65,6 @@ int main(void)
 | 
			
		||||
  print_greeting();
 | 
			
		||||
 | 
			
		||||
  tusb_init();
 | 
			
		||||
  tud_set_descriptors(&usb_desc_init);
 | 
			
		||||
 | 
			
		||||
  while (1)
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
@@ -50,22 +50,25 @@
 | 
			
		||||
#define CFG_TUSB_RHPORT0_MODE     OPT_MODE_DEVICE
 | 
			
		||||
 | 
			
		||||
#define CFG_TUSB_DEBUG            2
 | 
			
		||||
 | 
			
		||||
#define CFG_TUSB_OS               OPT_OS_NONE // be passed from IDE/command line for easy project switching
 | 
			
		||||
//#define CFG_TUD_TASK_PRIO         0              // be passed from IDE/command line for easy project switching
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
// DEVICE CONFIGURATION
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
#define CFG_TUD_ENDOINT0_SIZE     64
 | 
			
		||||
//#define CFG_TUD_TASK_PRIO         0              // be passed from IDE/command line for easy project switching
 | 
			
		||||
 | 
			
		||||
#define CFG_TUD_DESC_AUTO         1
 | 
			
		||||
 | 
			
		||||
// #define CFG_TUD_DESC_VID          0xCAFE
 | 
			
		||||
// #define CFG_TUD_DESC_PID          0x0001
 | 
			
		||||
 | 
			
		||||
//------------- CLASS -------------//
 | 
			
		||||
#define CFG_TUD_HID_KEYBOARD      0
 | 
			
		||||
#define CFG_TUD_HID_MOUSE         0
 | 
			
		||||
#define CFG_TUD_HID_GENERIC       0 // not supported yet
 | 
			
		||||
#define CFG_TUD_MSC               1
 | 
			
		||||
#define CFG_TUD_CDC               1
 | 
			
		||||
#define CFG_TUD_MSC               1
 | 
			
		||||
 | 
			
		||||
#define CFG_TUD_HID_KEYBOARD      0 // TODO need update
 | 
			
		||||
#define CFG_TUD_HID_MOUSE         0 // TODO need update
 | 
			
		||||
#define CFG_TUD_HID_GENERIC       0 // TODO need update
 | 
			
		||||
 | 
			
		||||
/*------------------------------------------------------------------*/
 | 
			
		||||
/* CLASS DRIVER
 | 
			
		||||
 
 | 
			
		||||
@@ -38,202 +38,6 @@
 | 
			
		||||
 | 
			
		||||
#include "tusb_descriptors.h"
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
// USB DEVICE DESCRIPTOR
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
tusb_desc_device_t const desc_device =
 | 
			
		||||
{
 | 
			
		||||
    .bLength            = sizeof(tusb_desc_device_t),
 | 
			
		||||
    .bDescriptorType    = TUSB_DESC_DEVICE,
 | 
			
		||||
    .bcdUSB             = 0x0200,
 | 
			
		||||
 | 
			
		||||
    // Use Interface Association Descriptor (IAD) for CDC
 | 
			
		||||
    // As required by USB Specs IAD's subclass must be common class (2) and protocol must be IAD (1)
 | 
			
		||||
    .bDeviceClass       = TUSB_CLASS_MISC,
 | 
			
		||||
    .bDeviceSubClass    = MISC_SUBCLASS_COMMON,
 | 
			
		||||
    .bDeviceProtocol    = MISC_PROTOCOL_IAD,
 | 
			
		||||
 | 
			
		||||
    .bMaxPacketSize0    = CFG_TUD_ENDOINT0_SIZE,
 | 
			
		||||
 | 
			
		||||
    .idVendor           = CFG_VENDORID,
 | 
			
		||||
    .idProduct          = CFG_PRODUCTID,
 | 
			
		||||
    .bcdDevice          = 0x0100,
 | 
			
		||||
 | 
			
		||||
    .iManufacturer      = 0x01,
 | 
			
		||||
    .iProduct           = 0x02,
 | 
			
		||||
    .iSerialNumber      = 0x03,
 | 
			
		||||
 | 
			
		||||
    .bNumConfigurations = 0x01
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
// USB COFNIGURATION DESCRIPTOR
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
app_descriptor_configuration_t const desc_configuration =
 | 
			
		||||
{
 | 
			
		||||
    .configuration =
 | 
			
		||||
    {
 | 
			
		||||
        .bLength             = sizeof(tusb_desc_configuration_t),
 | 
			
		||||
        .bDescriptorType     = TUSB_DESC_CONFIGURATION,
 | 
			
		||||
 | 
			
		||||
        .wTotalLength        = sizeof(app_descriptor_configuration_t),
 | 
			
		||||
        .bNumInterfaces      = ITF_TOTAL,
 | 
			
		||||
 | 
			
		||||
        .bConfigurationValue = 1,
 | 
			
		||||
        .iConfiguration      = 0x00,
 | 
			
		||||
        .bmAttributes        = TUSB_DESC_CONFIG_ATT_BUS_POWER,
 | 
			
		||||
        .bMaxPower           = TUSB_DESC_CONFIG_POWER_MA(500)
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    // IAD points to CDC Interfaces
 | 
			
		||||
    .cdc =
 | 
			
		||||
    {
 | 
			
		||||
      .iad =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength           = sizeof(tusb_desc_interface_assoc_t),
 | 
			
		||||
          .bDescriptorType   = TUSB_DESC_INTERFACE_ASSOCIATION,
 | 
			
		||||
 | 
			
		||||
          .bFirstInterface   = ITF_NUM_CDC,
 | 
			
		||||
          .bInterfaceCount   = 2,
 | 
			
		||||
 | 
			
		||||
          .bFunctionClass    = TUSB_CLASS_CDC,
 | 
			
		||||
          .bFunctionSubClass = CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL,
 | 
			
		||||
          .bFunctionProtocol = CDC_COMM_PROTOCOL_ATCOMMAND,
 | 
			
		||||
          .iFunction         = 0
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      //------------- CDC Communication Interface -------------//
 | 
			
		||||
      .comm_itf =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength            = sizeof(tusb_desc_interface_t),
 | 
			
		||||
          .bDescriptorType    = TUSB_DESC_INTERFACE,
 | 
			
		||||
          .bInterfaceNumber   = ITF_NUM_CDC,
 | 
			
		||||
          .bAlternateSetting  = 0,
 | 
			
		||||
          .bNumEndpoints      = 1,
 | 
			
		||||
          .bInterfaceClass    = TUSB_CLASS_CDC,
 | 
			
		||||
          .bInterfaceSubClass = CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL,
 | 
			
		||||
          .bInterfaceProtocol = CDC_COMM_PROTOCOL_ATCOMMAND,
 | 
			
		||||
          .iInterface         = 0x00
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .header =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength            = sizeof(cdc_desc_func_header_t),
 | 
			
		||||
          .bDescriptorType    = TUSB_DESC_CLASS_SPECIFIC,
 | 
			
		||||
          .bDescriptorSubType = CDC_FUNC_DESC_HEADER,
 | 
			
		||||
          .bcdCDC             = 0x0120
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .call =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength            = sizeof(cdc_desc_func_call_management_t),
 | 
			
		||||
          .bDescriptorType    = TUSB_DESC_CLASS_SPECIFIC,
 | 
			
		||||
          .bDescriptorSubType = CDC_FUNC_DESC_CALL_MANAGEMENT,
 | 
			
		||||
          .bmCapabilities     = { 0 },
 | 
			
		||||
          .bDataInterface     = ITF_NUM_CDC+1,
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .acm =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength            = sizeof(cdc_desc_func_acm_t),
 | 
			
		||||
          .bDescriptorType    = TUSB_DESC_CLASS_SPECIFIC,
 | 
			
		||||
          .bDescriptorSubType = CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT,
 | 
			
		||||
          .bmCapabilities     = { // 0x02
 | 
			
		||||
              .support_line_request = 1,
 | 
			
		||||
          }
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .union_func =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength                  = sizeof(cdc_desc_func_union_t), // plus number of
 | 
			
		||||
          .bDescriptorType          = TUSB_DESC_CLASS_SPECIFIC,
 | 
			
		||||
          .bDescriptorSubType       = CDC_FUNC_DESC_UNION,
 | 
			
		||||
          .bControlInterface        = ITF_NUM_CDC,
 | 
			
		||||
          .bSubordinateInterface    = ITF_NUM_CDC+1,
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .ep_notif =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength          = sizeof(tusb_desc_endpoint_t),
 | 
			
		||||
          .bDescriptorType  = TUSB_DESC_ENDPOINT,
 | 
			
		||||
          .bEndpointAddress = CDC_EDPT_NOTIF,
 | 
			
		||||
          .bmAttributes     = { .xfer = TUSB_XFER_INTERRUPT },
 | 
			
		||||
          .wMaxPacketSize   = { .size = CDC_EDPT_NOTIF_SIZE },
 | 
			
		||||
          .bInterval        = 0x10
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      //------------- CDC Data Interface -------------//
 | 
			
		||||
      .data_itf =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength            = sizeof(tusb_desc_interface_t),
 | 
			
		||||
          .bDescriptorType    = TUSB_DESC_INTERFACE,
 | 
			
		||||
          .bInterfaceNumber   = ITF_NUM_CDC+1,
 | 
			
		||||
          .bAlternateSetting  = 0x00,
 | 
			
		||||
          .bNumEndpoints      = 2,
 | 
			
		||||
          .bInterfaceClass    = TUSB_CLASS_CDC_DATA,
 | 
			
		||||
          .bInterfaceSubClass = 0,
 | 
			
		||||
          .bInterfaceProtocol = 0,
 | 
			
		||||
          .iInterface         = 0x00
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .ep_out =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength          = sizeof(tusb_desc_endpoint_t),
 | 
			
		||||
          .bDescriptorType  = TUSB_DESC_ENDPOINT,
 | 
			
		||||
          .bEndpointAddress = CDC_EDPT_OUT,
 | 
			
		||||
          .bmAttributes     = { .xfer = TUSB_XFER_BULK },
 | 
			
		||||
          .wMaxPacketSize   = { .size = CDC_EDPT_SIZE },
 | 
			
		||||
      .bInterval        = 0
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .ep_in =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength          = sizeof(tusb_desc_endpoint_t),
 | 
			
		||||
          .bDescriptorType  = TUSB_DESC_ENDPOINT,
 | 
			
		||||
          .bEndpointAddress = CDC_EDPT_IN,
 | 
			
		||||
          .bmAttributes     = { .xfer = TUSB_XFER_BULK },
 | 
			
		||||
          .wMaxPacketSize   = { .size = CDC_EDPT_SIZE },
 | 
			
		||||
          .bInterval        = 0
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    .msc =
 | 
			
		||||
    {
 | 
			
		||||
      .interface =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength            = sizeof(tusb_desc_interface_t),
 | 
			
		||||
          .bDescriptorType    = TUSB_DESC_INTERFACE,
 | 
			
		||||
          .bInterfaceNumber   = ITF_NUM_MSC,
 | 
			
		||||
          .bAlternateSetting  = 0x00,
 | 
			
		||||
          .bNumEndpoints      = 2,
 | 
			
		||||
          .bInterfaceClass    = TUSB_CLASS_MSC,
 | 
			
		||||
          .bInterfaceSubClass = MSC_SUBCLASS_SCSI,
 | 
			
		||||
          .bInterfaceProtocol = MSC_PROTOCOL_BOT,
 | 
			
		||||
          .iInterface         = 0x07
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .ep_out =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength          = sizeof(tusb_desc_endpoint_t),
 | 
			
		||||
          .bDescriptorType  = TUSB_DESC_ENDPOINT,
 | 
			
		||||
          .bEndpointAddress = MSC_EDPT_OUT,
 | 
			
		||||
          .bmAttributes     = { .xfer = TUSB_XFER_BULK },
 | 
			
		||||
          .wMaxPacketSize   = { .size = MSC_EDPT_SIZE},
 | 
			
		||||
          .bInterval        = 1
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      .ep_in =
 | 
			
		||||
      {
 | 
			
		||||
          .bLength          = sizeof(tusb_desc_endpoint_t),
 | 
			
		||||
          .bDescriptorType  = TUSB_DESC_ENDPOINT,
 | 
			
		||||
          .bEndpointAddress = MSC_EDPT_IN,
 | 
			
		||||
          .bmAttributes     = { .xfer = TUSB_XFER_BULK },
 | 
			
		||||
          .wMaxPacketSize   = { .size = MSC_EDPT_SIZE},
 | 
			
		||||
          .bInterval        = 1
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
// STRING DESCRIPTORS
 | 
			
		||||
//--------------------------------------------------------------------+
 | 
			
		||||
@@ -241,7 +45,7 @@ app_descriptor_configuration_t const desc_configuration =
 | 
			
		||||
#define ENDIAN_BE16_FROM( high, low) ENDIAN_BE16(high << 8 | low)
 | 
			
		||||
 | 
			
		||||
// array of pointer to string descriptors
 | 
			
		||||
uint16_t const * const string_descriptor_arr [] =
 | 
			
		||||
uint16_t const * const string_desc_arr [] =
 | 
			
		||||
{
 | 
			
		||||
    [0] = (uint16_t []) { // supported language
 | 
			
		||||
        ENDIAN_BE16_FROM( STRING_LEN_UNICODE(1), TUSB_DESC_STRING ),
 | 
			
		||||
@@ -284,11 +88,12 @@ uint16_t const * const string_descriptor_arr [] =
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*------------- Variable used by tud_set_descriptors -------------*/
 | 
			
		||||
tud_desc_init_t usb_desc_init =
 | 
			
		||||
// tud_desc_set is required by tinyusb stack
 | 
			
		||||
// since CFG_TUD_DESC_AUTO is enabled, we only need to set string_arr 
 | 
			
		||||
tud_desc_set_t tud_desc_set =
 | 
			
		||||
{
 | 
			
		||||
    .device              = (uint8_t const * ) &desc_device,
 | 
			
		||||
    .configuration       = (uint8_t const * ) &desc_configuration,
 | 
			
		||||
    .string_arr          = (uint8_t const **) string_descriptor_arr,
 | 
			
		||||
    .device     = NULL,
 | 
			
		||||
    .config     = NULL,
 | 
			
		||||
    .string_arr = (uint8_t const **) string_desc_arr,
 | 
			
		||||
    .hid_report = NULL
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -115,6 +115,6 @@ typedef struct ATTR_PACKED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
extern tud_desc_init_t usb_desc_init;
 | 
			
		||||
extern tud_desc_set_t usb_desc_init;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user