Fix for DUE - no host support on native USB if SD card not enabled (#10148)
This commit is contained in:
		
				
					committed by
					
						
						Scott Lahteine
					
				
			
			
				
	
			
			
			
						parent
						
							772810fb24
						
					
				
				
					commit
					bbfbf90797
				
			@@ -54,11 +54,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
//! @{
 | 
					//! @{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef SDSUPPORT
 | 
					#define LUN_0                ENABLE    //!< SD/MMC Card over MCI Slot 0.
 | 
				
			||||||
  #define LUN_0              ENABLE    //!< SD/MMC Card over MCI Slot 0.
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
  #define LUN_0              DISABLE
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#define LUN_1                DISABLE
 | 
					#define LUN_1                DISABLE
 | 
				
			||||||
#define LUN_2                DISABLE
 | 
					#define LUN_2                DISABLE
 | 
				
			||||||
#define LUN_3                DISABLE
 | 
					#define LUN_3                DISABLE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -114,48 +114,51 @@
 | 
				
			|||||||
#define  USB_DEVICE_SPECIFIC_REQUEST()  usb_task_other_requests()
 | 
					#define  USB_DEVICE_SPECIFIC_REQUEST()  usb_task_other_requests()
 | 
				
			||||||
//@}
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					#if ENABLED(SDSUPPORT)
 | 
				
			||||||
 * USB Device low level configuration
 | 
					  /**
 | 
				
			||||||
 * When only one interface is used, these configurations are defined by the class module.
 | 
					   * USB Device low level configuration
 | 
				
			||||||
 * For composite device, these configuration must be defined here
 | 
					   * When only one interface is used, these configurations are defined by the class module.
 | 
				
			||||||
 * @{
 | 
					   * For composite device, these configuration must be defined here
 | 
				
			||||||
 */
 | 
					   * @{
 | 
				
			||||||
//! Control endpoint size
 | 
					   */
 | 
				
			||||||
#define  USB_DEVICE_EP_CTRL_SIZE       64
 | 
					  //! Control endpoint size
 | 
				
			||||||
 | 
					  #define  USB_DEVICE_EP_CTRL_SIZE       64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Two interfaces for this device (CDC COM + CDC DATA + MSC)
 | 
					  //! Two interfaces for this device (CDC COM + CDC DATA + MSC)
 | 
				
			||||||
#define  USB_DEVICE_NB_INTERFACE       3
 | 
					  #define  USB_DEVICE_NB_INTERFACE       3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! 5 endpoints used by CDC and MSC interfaces
 | 
					  //! 5 endpoints used by CDC and MSC interfaces
 | 
				
			||||||
#if SAM3U
 | 
					  #if SAM3U
 | 
				
			||||||
// (3 | USB_EP_DIR_IN)  // CDC Notify endpoint
 | 
					  // (3 | USB_EP_DIR_IN)  // CDC Notify endpoint
 | 
				
			||||||
// (6 | USB_EP_DIR_IN)  // CDC TX
 | 
					  // (6 | USB_EP_DIR_IN)  // CDC TX
 | 
				
			||||||
// (5 | USB_EP_DIR_OUT) // CDC RX
 | 
					  // (5 | USB_EP_DIR_OUT) // CDC RX
 | 
				
			||||||
// (1 | USB_EP_DIR_IN)  // MSC IN
 | 
					  // (1 | USB_EP_DIR_IN)  // MSC IN
 | 
				
			||||||
// (2 | USB_EP_DIR_OUT) // MSC OUT
 | 
					  // (2 | USB_EP_DIR_OUT) // MSC OUT
 | 
				
			||||||
#  define  USB_DEVICE_MAX_EP           6
 | 
					  #  define  USB_DEVICE_MAX_EP           6
 | 
				
			||||||
#  if defined(USB_DEVICE_HS_SUPPORT)
 | 
					  #  if defined(USB_DEVICE_HS_SUPPORT)
 | 
				
			||||||
// In HS mode, size of bulk endpoints are 512
 | 
					  // In HS mode, size of bulk endpoints are 512
 | 
				
			||||||
// If CDC and MSC endpoints all uses 2 banks, DPRAM is not enough: 4 bulk
 | 
					  // If CDC and MSC endpoints all uses 2 banks, DPRAM is not enough: 4 bulk
 | 
				
			||||||
// endpoints requires 4K bytes. So reduce the number of banks of CDC bulk
 | 
					  // endpoints requires 4K bytes. So reduce the number of banks of CDC bulk
 | 
				
			||||||
// endpoints to use less DPRAM. Keep MSC setting to keep MSC performance.
 | 
					  // endpoints to use less DPRAM. Keep MSC setting to keep MSC performance.
 | 
				
			||||||
#     define  UDD_BULK_NB_BANK(ep) ((ep == 5 || ep== 6) ? 1 : 2)
 | 
					  #     define  UDD_BULK_NB_BANK(ep) ((ep == 5 || ep== 6) ? 1 : 2)
 | 
				
			||||||
#endif
 | 
					  #endif
 | 
				
			||||||
#else
 | 
					  #else
 | 
				
			||||||
// (3 | USB_EP_DIR_IN)  // CDC Notify endpoint
 | 
					  // (3 | USB_EP_DIR_IN)  // CDC Notify endpoint
 | 
				
			||||||
// (4 | USB_EP_DIR_IN)  // CDC TX
 | 
					  // (4 | USB_EP_DIR_IN)  // CDC TX
 | 
				
			||||||
// (5 | USB_EP_DIR_OUT) // CDC RX
 | 
					  // (5 | USB_EP_DIR_OUT) // CDC RX
 | 
				
			||||||
// (1 | USB_EP_DIR_IN)  // MSC IN
 | 
					  // (1 | USB_EP_DIR_IN)  // MSC IN
 | 
				
			||||||
// (2 | USB_EP_DIR_OUT) // MSC OUT
 | 
					  // (2 | USB_EP_DIR_OUT) // MSC OUT
 | 
				
			||||||
#  define  USB_DEVICE_MAX_EP           5
 | 
					  #  define  USB_DEVICE_MAX_EP           5
 | 
				
			||||||
#  if SAM3XA && defined(USB_DEVICE_HS_SUPPORT)
 | 
					  #  if SAM3XA && defined(USB_DEVICE_HS_SUPPORT)
 | 
				
			||||||
// In HS mode, size of bulk endpoints are 512
 | 
					  // In HS mode, size of bulk endpoints are 512
 | 
				
			||||||
// If CDC and MSC endpoints all uses 2 banks, DPRAM is not enough: 4 bulk
 | 
					  // If CDC and MSC endpoints all uses 2 banks, DPRAM is not enough: 4 bulk
 | 
				
			||||||
// endpoints requires 4K bytes. So reduce the number of banks of CDC bulk
 | 
					  // endpoints requires 4K bytes. So reduce the number of banks of CDC bulk
 | 
				
			||||||
// endpoints to use less DPRAM. Keep MSC setting to keep MSC performance.
 | 
					  // endpoints to use less DPRAM. Keep MSC setting to keep MSC performance.
 | 
				
			||||||
#     define  UDD_BULK_NB_BANK(ep) ((ep == 4 || ep== 5) ? 1 : 2)
 | 
					  #     define  UDD_BULK_NB_BANK(ep) ((ep == 4 || ep== 5) ? 1 : 2)
 | 
				
			||||||
#  endif
 | 
					  #  endif
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//@}
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//@}
 | 
					//@}
 | 
				
			||||||
@@ -195,107 +198,112 @@
 | 
				
			|||||||
//! Enable id string of interface to add an extra USB string
 | 
					//! Enable id string of interface to add an extra USB string
 | 
				
			||||||
#define  UDI_CDC_IAD_STRING_ID            4
 | 
					#define  UDI_CDC_IAD_STRING_ID            4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					#if ENABLED(SDSUPPORT)
 | 
				
			||||||
 * USB CDC low level configuration
 | 
					  /**
 | 
				
			||||||
 * In standalone these configurations are defined by the CDC module.
 | 
					   * USB CDC low level configuration
 | 
				
			||||||
 * For composite device, these configuration must be defined here
 | 
					   * In standalone these configurations are defined by the CDC module.
 | 
				
			||||||
 * @{
 | 
					   * For composite device, these configuration must be defined here
 | 
				
			||||||
 */
 | 
					   * @{
 | 
				
			||||||
//! Endpoint numbers definition
 | 
					   */
 | 
				
			||||||
#if SAM3U
 | 
					  //! Endpoint numbers definition
 | 
				
			||||||
#  define  UDI_CDC_COMM_EP_0             (3 | USB_EP_DIR_IN) // Notify endpoint
 | 
					  #if SAM3U
 | 
				
			||||||
#  define  UDI_CDC_DATA_EP_IN_0          (6 | USB_EP_DIR_IN) // TX
 | 
					  #  define  UDI_CDC_COMM_EP_0             (3 | USB_EP_DIR_IN) // Notify endpoint
 | 
				
			||||||
#  define  UDI_CDC_DATA_EP_OUT_0         (5 | USB_EP_DIR_OUT)// RX
 | 
					  #  define  UDI_CDC_DATA_EP_IN_0          (6 | USB_EP_DIR_IN) // TX
 | 
				
			||||||
 | 
					  #  define  UDI_CDC_DATA_EP_OUT_0         (5 | USB_EP_DIR_OUT)// RX
 | 
				
			||||||
 | 
					  #else
 | 
				
			||||||
 | 
					  #  define  UDI_CDC_COMM_EP_0             (3 | USB_EP_DIR_IN) // Notify endpoint
 | 
				
			||||||
 | 
					  #  define  UDI_CDC_DATA_EP_IN_0          (4 | USB_EP_DIR_IN) // TX
 | 
				
			||||||
 | 
					  #  define  UDI_CDC_DATA_EP_OUT_0         (5 | USB_EP_DIR_OUT)// RX
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! Interface numbers
 | 
				
			||||||
 | 
					  #define  UDI_CDC_COMM_IFACE_NUMBER_0   0
 | 
				
			||||||
 | 
					  #define  UDI_CDC_DATA_IFACE_NUMBER_0   1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Configuration of MSC interface
 | 
				
			||||||
 | 
					   * @{
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  //! Vendor name and Product version of MSC interface
 | 
				
			||||||
 | 
					  #define UDI_MSC_GLOBAL_VENDOR_ID            \
 | 
				
			||||||
 | 
					     'M', 'A', 'R', 'L', 'I', 'N', '3', 'D'
 | 
				
			||||||
 | 
					  #define UDI_MSC_GLOBAL_PRODUCT_VERSION            \
 | 
				
			||||||
 | 
					     '1', '.', '0', '0'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! Interface callback definition
 | 
				
			||||||
 | 
					  #define  UDI_MSC_ENABLE_EXT()          usb_task_msc_enable()
 | 
				
			||||||
 | 
					  #define  UDI_MSC_DISABLE_EXT()         usb_task_msc_disable()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! Enable id string of interface to add an extra USB string
 | 
				
			||||||
 | 
					  #define  UDI_MSC_STRING_ID             5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * USB MSC low level configuration
 | 
				
			||||||
 | 
					   * In standalone these configurations are defined by the MSC module.
 | 
				
			||||||
 | 
					   * For composite device, these configuration must be defined here
 | 
				
			||||||
 | 
					   * @{
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  //! Endpoint numbers definition
 | 
				
			||||||
 | 
					  #define  UDI_MSC_EP_IN                 (1 | USB_EP_DIR_IN)
 | 
				
			||||||
 | 
					  #define  UDI_MSC_EP_OUT                (2 | USB_EP_DIR_OUT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! Interface number
 | 
				
			||||||
 | 
					  #define  UDI_MSC_IFACE_NUMBER          2
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Description of Composite Device
 | 
				
			||||||
 | 
					   * @{
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  //! USB Interfaces descriptor structure
 | 
				
			||||||
 | 
					  #define UDI_COMPOSITE_DESC_T \
 | 
				
			||||||
 | 
					    usb_iad_desc_t       udi_cdc_iad; \
 | 
				
			||||||
 | 
					    udi_cdc_comm_desc_t  udi_cdc_comm; \
 | 
				
			||||||
 | 
					    udi_cdc_data_desc_t  udi_cdc_data; \
 | 
				
			||||||
 | 
					    udi_msc_desc_t       udi_msc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! USB Interfaces descriptor value for Full Speed
 | 
				
			||||||
 | 
					  #define UDI_COMPOSITE_DESC_FS \
 | 
				
			||||||
 | 
					    .udi_cdc_iad   = UDI_CDC_IAD_DESC_0, \
 | 
				
			||||||
 | 
					    .udi_cdc_comm  = UDI_CDC_COMM_DESC_0, \
 | 
				
			||||||
 | 
					    .udi_cdc_data  = UDI_CDC_DATA_DESC_0_FS, \
 | 
				
			||||||
 | 
					    .udi_msc       = UDI_MSC_DESC_FS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! USB Interfaces descriptor value for High Speed
 | 
				
			||||||
 | 
					  #define UDI_COMPOSITE_DESC_HS \
 | 
				
			||||||
 | 
					    .udi_cdc_iad   = UDI_CDC_IAD_DESC_0, \
 | 
				
			||||||
 | 
					    .udi_cdc_comm  = UDI_CDC_COMM_DESC_0, \
 | 
				
			||||||
 | 
					    .udi_cdc_data  = UDI_CDC_DATA_DESC_0_HS, \
 | 
				
			||||||
 | 
					    .udi_msc       = UDI_MSC_DESC_HS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! USB Interface APIs
 | 
				
			||||||
 | 
					  #define UDI_COMPOSITE_API \
 | 
				
			||||||
 | 
					    &udi_api_cdc_comm, \
 | 
				
			||||||
 | 
					    &udi_api_cdc_data, \
 | 
				
			||||||
 | 
					    &udi_api_msc
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * USB Device Driver Configuration
 | 
				
			||||||
 | 
					   * @{
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  //@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  //! The includes of classes and other headers must be done at the end of this file to avoid compile error
 | 
				
			||||||
 | 
					  #include "udi_cdc.h"
 | 
				
			||||||
 | 
					  #include "udi_msc.h"
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#  define  UDI_CDC_COMM_EP_0             (3 | USB_EP_DIR_IN) // Notify endpoint
 | 
					  #include "udi_cdc_conf.h"
 | 
				
			||||||
#  define  UDI_CDC_DATA_EP_IN_0          (4 | USB_EP_DIR_IN) // TX
 | 
					 | 
				
			||||||
#  define  UDI_CDC_DATA_EP_OUT_0         (5 | USB_EP_DIR_OUT)// RX
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Interface numbers
 | 
					 | 
				
			||||||
#define  UDI_CDC_COMM_IFACE_NUMBER_0   0
 | 
					 | 
				
			||||||
#define  UDI_CDC_DATA_IFACE_NUMBER_0   1
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Configuration of MSC interface
 | 
					 | 
				
			||||||
 * @{
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
//! Vendor name and Product version of MSC interface
 | 
					 | 
				
			||||||
#define UDI_MSC_GLOBAL_VENDOR_ID            \
 | 
					 | 
				
			||||||
   'M', 'A', 'R', 'L', 'I', 'N', '3', 'D'
 | 
					 | 
				
			||||||
#define UDI_MSC_GLOBAL_PRODUCT_VERSION            \
 | 
					 | 
				
			||||||
   '1', '.', '0', '0'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! Interface callback definition
 | 
					 | 
				
			||||||
#define  UDI_MSC_ENABLE_EXT()          usb_task_msc_enable()
 | 
					 | 
				
			||||||
#define  UDI_MSC_DISABLE_EXT()         usb_task_msc_disable()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! Enable id string of interface to add an extra USB string
 | 
					 | 
				
			||||||
#define  UDI_MSC_STRING_ID                5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * USB MSC low level configuration
 | 
					 | 
				
			||||||
 * In standalone these configurations are defined by the MSC module.
 | 
					 | 
				
			||||||
 * For composite device, these configuration must be defined here
 | 
					 | 
				
			||||||
 * @{
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
//! Endpoint numbers definition
 | 
					 | 
				
			||||||
#define  UDI_MSC_EP_IN                 (1 | USB_EP_DIR_IN)
 | 
					 | 
				
			||||||
#define  UDI_MSC_EP_OUT                (2 | USB_EP_DIR_OUT)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! Interface number
 | 
					 | 
				
			||||||
#define  UDI_MSC_IFACE_NUMBER          2
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Description of Composite Device
 | 
					 | 
				
			||||||
 * @{
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
//! USB Interfaces descriptor structure
 | 
					 | 
				
			||||||
#define UDI_COMPOSITE_DESC_T \
 | 
					 | 
				
			||||||
  usb_iad_desc_t       udi_cdc_iad; \
 | 
					 | 
				
			||||||
  udi_cdc_comm_desc_t  udi_cdc_comm; \
 | 
					 | 
				
			||||||
  udi_cdc_data_desc_t  udi_cdc_data; \
 | 
					 | 
				
			||||||
  udi_msc_desc_t       udi_msc
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! USB Interfaces descriptor value for Full Speed
 | 
					 | 
				
			||||||
#define UDI_COMPOSITE_DESC_FS \
 | 
					 | 
				
			||||||
  .udi_cdc_iad   = UDI_CDC_IAD_DESC_0, \
 | 
					 | 
				
			||||||
  .udi_cdc_comm  = UDI_CDC_COMM_DESC_0, \
 | 
					 | 
				
			||||||
  .udi_cdc_data  = UDI_CDC_DATA_DESC_0_FS, \
 | 
					 | 
				
			||||||
  .udi_msc       = UDI_MSC_DESC_FS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! USB Interfaces descriptor value for High Speed
 | 
					 | 
				
			||||||
#define UDI_COMPOSITE_DESC_HS \
 | 
					 | 
				
			||||||
  .udi_cdc_iad   = UDI_CDC_IAD_DESC_0, \
 | 
					 | 
				
			||||||
  .udi_cdc_comm  = UDI_CDC_COMM_DESC_0, \
 | 
					 | 
				
			||||||
  .udi_cdc_data  = UDI_CDC_DATA_DESC_0_HS, \
 | 
					 | 
				
			||||||
  .udi_msc       = UDI_MSC_DESC_HS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! USB Interface APIs
 | 
					 | 
				
			||||||
#define UDI_COMPOSITE_API \
 | 
					 | 
				
			||||||
  &udi_api_cdc_comm, \
 | 
					 | 
				
			||||||
  &udi_api_cdc_data, \
 | 
					 | 
				
			||||||
  &udi_api_msc
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * USB Device Driver Configuration
 | 
					 | 
				
			||||||
 * @{
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
//@}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//! The includes of classes and other headers must be done at the end of this file to avoid compile error
 | 
					 | 
				
			||||||
#include "udi_cdc.h"
 | 
					 | 
				
			||||||
#include "udi_msc.h"
 | 
					 | 
				
			||||||
#include "usb_task.h"
 | 
					#include "usb_task.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif // _CONF_USB_H_
 | 
					#endif // _CONF_USB_H_
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										156
									
								
								Marlin/src/HAL/HAL_DUE/usb/udi_cdc_conf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								Marlin/src/HAL/HAL_DUE/usb/udi_cdc_conf.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \brief Default CDC configuration for a USB Device with a single interface
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \asf_license_start
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \page License
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright notice,
 | 
				
			||||||
 | 
					 *    this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. The name of Atmel may not be used to endorse or promote products derived
 | 
				
			||||||
 | 
					 *    from this software without specific prior written permission.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. This software may only be redistributed and used in connection with an
 | 
				
			||||||
 | 
					 *    Atmel microcontroller product.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
 | 
				
			||||||
 | 
					 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 | 
				
			||||||
 | 
					 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \asf_license_stop
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _UDI_CDC_CONF_H_
 | 
				
			||||||
 | 
					#define _UDI_CDC_CONF_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "usb_protocol_cdc.h"
 | 
				
			||||||
 | 
					#include "conf_usb.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef  UDI_CDC_PORT_NB
 | 
				
			||||||
 | 
					# define  UDI_CDC_PORT_NB 1
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					extern "C" {
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \addtogroup udi_cdc_group_single_desc
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Control endpoint size (Endpoint 0)
 | 
				
			||||||
 | 
					#define  USB_DEVICE_EP_CTRL_SIZE       64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if XMEGA
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \name Endpoint configuration on XMEGA
 | 
				
			||||||
 | 
					 * The XMEGA supports a IN and OUT endpoint with the same number endpoint,
 | 
				
			||||||
 | 
					 * thus XMEGA can support up to 7 CDC interfaces.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					//@{
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_0          ( 1 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_0         ( 2 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_0             ( 2 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_1          ( 3 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_1         ( 4 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_1             ( 4 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_2          ( 5 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_2         ( 6 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_2             ( 6 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_3          ( 7 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_3         ( 8 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_3             ( 8 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_4          ( 9 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_4         (10 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_4             (10 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_5          (11 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_5         (12 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_5             (12 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_6          (13 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_6         (14 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_6             (14 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					//! 2 endpoints numbers used per CDC interface
 | 
				
			||||||
 | 
					#define  USB_DEVICE_MAX_EP             (2*UDI_CDC_PORT_NB)
 | 
				
			||||||
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \name Default endpoint configuration
 | 
				
			||||||
 | 
					 * The USBB, UDP, UDPHS and UOTGHS interfaces can support up to 2 CDC interfaces.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					//@{
 | 
				
			||||||
 | 
					#  if UDI_CDC_PORT_NB > 2
 | 
				
			||||||
 | 
					#    error USBB, UDP, UDPHS and UOTGHS interfaces have not enought endpoints.
 | 
				
			||||||
 | 
					#  endif
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_IN_0          (1 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_EP_OUT_0         (2 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_EP_0             (3 | USB_EP_DIR_IN)  // Notify endpoint
 | 
				
			||||||
 | 
					#  if SAM3U
 | 
				
			||||||
 | 
					     /* For 3U max endpoint size of 4 is 64, use 5 and 6 as bulk tx and rx */
 | 
				
			||||||
 | 
					#    define  UDI_CDC_DATA_EP_IN_1          (6 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#    define  UDI_CDC_DATA_EP_OUT_1         (5 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#    define  UDI_CDC_COMM_EP_1             (4 | USB_EP_DIR_IN)  // Notify
 | 
				
			||||||
 | 
					#  else
 | 
				
			||||||
 | 
					#    define  UDI_CDC_DATA_EP_IN_1          (4 | USB_EP_DIR_IN)  // TX
 | 
				
			||||||
 | 
					#    define  UDI_CDC_DATA_EP_OUT_1         (5 | USB_EP_DIR_OUT) // RX
 | 
				
			||||||
 | 
					#    define  UDI_CDC_COMM_EP_1             (6 | USB_EP_DIR_IN)  // Notify
 | 
				
			||||||
 | 
					#  endif
 | 
				
			||||||
 | 
					//! 3 endpoints used per CDC interface
 | 
				
			||||||
 | 
					#undef USB_DEVICE_MAX_EP   // undefine this definition in header file
 | 
				
			||||||
 | 
					#define  USB_DEVICE_MAX_EP             (3*UDI_CDC_PORT_NB)
 | 
				
			||||||
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \name Default Interface numbers
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					//@{
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_0   0
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_0   1
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_1   2
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_1   3
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_2   4
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_2   5
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_3   6
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_3   7
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_4   8
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_4   9
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_5   10
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_5   11
 | 
				
			||||||
 | 
					#define  UDI_CDC_COMM_IFACE_NUMBER_6   12
 | 
				
			||||||
 | 
					#define  UDI_CDC_DATA_IFACE_NUMBER_6   13
 | 
				
			||||||
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef __cplusplus
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif // _UDI_CDC_CONF_H_
 | 
				
			||||||
							
								
								
									
										259
									
								
								Marlin/src/HAL/HAL_DUE/usb/udi_cdc_desc.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								Marlin/src/HAL/HAL_DUE/usb/udi_cdc_desc.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,259 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \file
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \brief Default descriptors for a USB Device with a single interface CDC
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (c) 2009-2016 Atmel Corporation. All rights reserved.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \asf_license_start
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \page License
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					 * modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 1. Redistributions of source code must retain the above copyright notice,
 | 
				
			||||||
 | 
					 *    this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 2. 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 3. The name of Atmel may not be used to endorse or promote products derived
 | 
				
			||||||
 | 
					 *    from this software without specific prior written permission.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * 4. This software may only be redistributed and used in connection with an
 | 
				
			||||||
 | 
					 *    Atmel microcontroller product.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
 | 
				
			||||||
 | 
					 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | 
				
			||||||
 | 
					 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 | 
				
			||||||
 | 
					 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * \asf_license_stop
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef ARDUINO_ARCH_SAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "conf_usb.h"
 | 
				
			||||||
 | 
					#include "udd.h"
 | 
				
			||||||
 | 
					#include "udc_desc.h"
 | 
				
			||||||
 | 
					#include "udi_cdc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if DISABLED(SDSUPPORT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \defgroup udi_cdc_group_single_desc USB device descriptors for a single interface
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The following structures provide the USB device descriptors required for
 | 
				
			||||||
 | 
					 * USB Device with a single interface CDC.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * It is ready to use and do not require more definition.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @{
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Two interfaces for a CDC device
 | 
				
			||||||
 | 
					#define  USB_DEVICE_NB_INTERFACE       (2*UDI_CDC_PORT_NB)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_LPM_SUPPORT
 | 
				
			||||||
 | 
					# define USB_VERSION   USB_V2_1
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					# define USB_VERSION   USB_V2_0
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! USB Device Descriptor
 | 
				
			||||||
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {
 | 
				
			||||||
 | 
					  .bLength                   = sizeof(usb_dev_desc_t),
 | 
				
			||||||
 | 
					  .bDescriptorType           = USB_DT_DEVICE,
 | 
				
			||||||
 | 
					  .bcdUSB                    = LE16(USB_VERSION),
 | 
				
			||||||
 | 
					#if UDI_CDC_PORT_NB > 1
 | 
				
			||||||
 | 
					  .bDeviceClass              = 0,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  .bDeviceClass              = CDC_CLASS_DEVICE,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					  .bDeviceSubClass           = 0,
 | 
				
			||||||
 | 
					  .bDeviceProtocol           = 0,
 | 
				
			||||||
 | 
					  .bMaxPacketSize0           = USB_DEVICE_EP_CTRL_SIZE,
 | 
				
			||||||
 | 
					  .idVendor                  = LE16(USB_DEVICE_VENDOR_ID),
 | 
				
			||||||
 | 
					  .idProduct                 = LE16(USB_DEVICE_PRODUCT_ID),
 | 
				
			||||||
 | 
					  .bcdDevice                 = LE16((USB_DEVICE_MAJOR_VERSION << 8)
 | 
				
			||||||
 | 
					      | USB_DEVICE_MINOR_VERSION),
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_MANUFACTURE_NAME
 | 
				
			||||||
 | 
					  .iManufacturer = 1,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  .iManufacturer             = 0,  // No manufacture string
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_PRODUCT_NAME
 | 
				
			||||||
 | 
					  .iProduct = 2,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  .iProduct                  = 0,  // No product string
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#if (defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER)
 | 
				
			||||||
 | 
					  .iSerialNumber = 3,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  .iSerialNumber             = 0,  // No serial string
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					  .bNumConfigurations = 1
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
 | 
					//! USB Device Qualifier Descriptor for HS
 | 
				
			||||||
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE usb_dev_qual_desc_t udc_device_qual = {
 | 
				
			||||||
 | 
					  .bLength                   = sizeof(usb_dev_qual_desc_t),
 | 
				
			||||||
 | 
					  .bDescriptorType           = USB_DT_DEVICE_QUALIFIER,
 | 
				
			||||||
 | 
					  .bcdUSB                    = LE16(USB_VERSION),
 | 
				
			||||||
 | 
					#if UDI_CDC_PORT_NB > 1
 | 
				
			||||||
 | 
					  .bDeviceClass              = 0,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  .bDeviceClass              = CDC_CLASS_DEVICE,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					  .bDeviceSubClass           = 0,
 | 
				
			||||||
 | 
					  .bDeviceProtocol           = 0,
 | 
				
			||||||
 | 
					  .bMaxPacketSize0           = USB_DEVICE_EP_CTRL_SIZE,
 | 
				
			||||||
 | 
					  .bNumConfigurations        = 1
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_LPM_SUPPORT
 | 
				
			||||||
 | 
					//! USB Device Qualifier Descriptor
 | 
				
			||||||
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE usb_dev_lpm_desc_t udc_device_lpm = {
 | 
				
			||||||
 | 
					  .bos.bLength               = sizeof(usb_dev_bos_desc_t),
 | 
				
			||||||
 | 
					  .bos.bDescriptorType       = USB_DT_BOS,
 | 
				
			||||||
 | 
					  .bos.wTotalLength          = LE16(sizeof(usb_dev_bos_desc_t) + sizeof(usb_dev_capa_ext_desc_t)),
 | 
				
			||||||
 | 
					  .bos.bNumDeviceCaps        = 1,
 | 
				
			||||||
 | 
					  .capa_ext.bLength          = sizeof(usb_dev_capa_ext_desc_t),
 | 
				
			||||||
 | 
					  .capa_ext.bDescriptorType  = USB_DT_DEVICE_CAPABILITY,
 | 
				
			||||||
 | 
					  .capa_ext.bDevCapabilityType = USB_DC_USB20_EXTENSION,
 | 
				
			||||||
 | 
					  .capa_ext.bmAttributes     = USB_DC_EXT_LPM,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Structure for USB Device Configuration Descriptor
 | 
				
			||||||
 | 
					COMPILER_PACK_SET(1)
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					  usb_conf_desc_t conf;
 | 
				
			||||||
 | 
					#if UDI_CDC_PORT_NB == 1
 | 
				
			||||||
 | 
					  udi_cdc_comm_desc_t udi_cdc_comm_0;
 | 
				
			||||||
 | 
					  udi_cdc_data_desc_t udi_cdc_data_0;
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#  define UDI_CDC_DESC_STRUCTURE(index, unused) \
 | 
				
			||||||
 | 
					  usb_iad_desc_t      udi_cdc_iad_##index; \
 | 
				
			||||||
 | 
					  udi_cdc_comm_desc_t udi_cdc_comm_##index; \
 | 
				
			||||||
 | 
					  udi_cdc_data_desc_t udi_cdc_data_##index;
 | 
				
			||||||
 | 
					  MREPEAT(UDI_CDC_PORT_NB, UDI_CDC_DESC_STRUCTURE, ~)
 | 
				
			||||||
 | 
					#  undef UDI_CDC_DESC_STRUCTURE
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					} udc_desc_t;
 | 
				
			||||||
 | 
					COMPILER_PACK_RESET()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! USB Device Configuration Descriptor filled for full and high speed
 | 
				
			||||||
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE udc_desc_t udc_desc_fs = {
 | 
				
			||||||
 | 
					  .conf.bLength              = sizeof(usb_conf_desc_t),
 | 
				
			||||||
 | 
					  .conf.bDescriptorType      = USB_DT_CONFIGURATION,
 | 
				
			||||||
 | 
					  .conf.wTotalLength         = LE16(sizeof(udc_desc_t)),
 | 
				
			||||||
 | 
					  .conf.bNumInterfaces       = USB_DEVICE_NB_INTERFACE,
 | 
				
			||||||
 | 
					  .conf.bConfigurationValue  = 1,
 | 
				
			||||||
 | 
					  .conf.iConfiguration       = 0,
 | 
				
			||||||
 | 
					  .conf.bmAttributes         = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR,
 | 
				
			||||||
 | 
					  .conf.bMaxPower            = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER),
 | 
				
			||||||
 | 
					#if UDI_CDC_PORT_NB == 1
 | 
				
			||||||
 | 
					  .udi_cdc_comm_0            = UDI_CDC_COMM_DESC_0,
 | 
				
			||||||
 | 
					  .udi_cdc_data_0            = UDI_CDC_DATA_DESC_0_FS,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#  define UDI_CDC_DESC_FS(index, unused) \
 | 
				
			||||||
 | 
					  .udi_cdc_iad_##index             = UDI_CDC_IAD_DESC_##index,\
 | 
				
			||||||
 | 
					  .udi_cdc_comm_##index            = UDI_CDC_COMM_DESC_##index,\
 | 
				
			||||||
 | 
					  .udi_cdc_data_##index            = UDI_CDC_DATA_DESC_##index##_FS,
 | 
				
			||||||
 | 
					  MREPEAT(UDI_CDC_PORT_NB, UDI_CDC_DESC_FS, ~)
 | 
				
			||||||
 | 
					#  undef UDI_CDC_DESC_FS
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE udc_desc_t udc_desc_hs = {
 | 
				
			||||||
 | 
					  .conf.bLength              = sizeof(usb_conf_desc_t),
 | 
				
			||||||
 | 
					  .conf.bDescriptorType      = USB_DT_CONFIGURATION,
 | 
				
			||||||
 | 
					  .conf.wTotalLength         = LE16(sizeof(udc_desc_t)),
 | 
				
			||||||
 | 
					  .conf.bNumInterfaces       = USB_DEVICE_NB_INTERFACE,
 | 
				
			||||||
 | 
					  .conf.bConfigurationValue  = 1,
 | 
				
			||||||
 | 
					  .conf.iConfiguration       = 0,
 | 
				
			||||||
 | 
					  .conf.bmAttributes         = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR,
 | 
				
			||||||
 | 
					  .conf.bMaxPower            = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER),
 | 
				
			||||||
 | 
					#if UDI_CDC_PORT_NB == 1
 | 
				
			||||||
 | 
					  .udi_cdc_comm_0            = UDI_CDC_COMM_DESC_0,
 | 
				
			||||||
 | 
					  .udi_cdc_data_0            = UDI_CDC_DATA_DESC_0_HS,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#  define UDI_CDC_DESC_HS(index, unused) \
 | 
				
			||||||
 | 
					  .udi_cdc_iad_##index             = UDI_CDC_IAD_DESC_##index, \
 | 
				
			||||||
 | 
					  .udi_cdc_comm_##index            = UDI_CDC_COMM_DESC_##index, \
 | 
				
			||||||
 | 
					  .udi_cdc_data_##index            = UDI_CDC_DATA_DESC_##index##_HS,
 | 
				
			||||||
 | 
					  MREPEAT(UDI_CDC_PORT_NB, UDI_CDC_DESC_HS, ~)
 | 
				
			||||||
 | 
					#  undef UDI_CDC_DESC_HS
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * \name UDC structures which content all USB Device definitions
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					//@{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Associate an UDI for each USB interface
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE udi_api_t *udi_apis[USB_DEVICE_NB_INTERFACE] = {
 | 
				
			||||||
 | 
					#  define UDI_CDC_API(index, unused) \
 | 
				
			||||||
 | 
					  &udi_api_cdc_comm, \
 | 
				
			||||||
 | 
					  &udi_api_cdc_data,
 | 
				
			||||||
 | 
					  MREPEAT(UDI_CDC_PORT_NB, UDI_CDC_API, ~)
 | 
				
			||||||
 | 
					#  undef UDI_CDC_API
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Add UDI with USB Descriptors FS & HS
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE udc_config_speed_t udc_config_fs[1] = { {
 | 
				
			||||||
 | 
					  .desc          = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_fs,
 | 
				
			||||||
 | 
					  .udi_apis = udi_apis,
 | 
				
			||||||
 | 
					}};
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE udc_config_speed_t udc_config_hs[1] = { {
 | 
				
			||||||
 | 
					  .desc          = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_hs,
 | 
				
			||||||
 | 
					  .udi_apis = udi_apis,
 | 
				
			||||||
 | 
					}};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Add all information about USB Device in global structure for UDC
 | 
				
			||||||
 | 
					UDC_DESC_STORAGE udc_config_t udc_config = {
 | 
				
			||||||
 | 
					  .confdev_lsfs = &udc_device_desc,
 | 
				
			||||||
 | 
					  .conf_lsfs = udc_config_fs,
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
 | 
					  .confdev_hs = &udc_device_desc,
 | 
				
			||||||
 | 
					  .qualifier = &udc_device_qual,
 | 
				
			||||||
 | 
					  .conf_hs = udc_config_hs,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef USB_DEVICE_LPM_SUPPORT
 | 
				
			||||||
 | 
					  .conf_bos = &udc_device_lpm.bos,
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					  .conf_bos = NULL,
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//@}
 | 
				
			||||||
 | 
					//@}
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
@@ -50,6 +50,8 @@
 | 
				
			|||||||
#include "udd.h"
 | 
					#include "udd.h"
 | 
				
			||||||
#include "udc_desc.h"
 | 
					#include "udc_desc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if ENABLED(SDSUPPORT)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * \defgroup udi_group_desc Descriptors for a USB Device
 | 
					 * \defgroup udi_group_desc Descriptors for a USB Device
 | 
				
			||||||
 * composite
 | 
					 * composite
 | 
				
			||||||
@@ -62,33 +64,33 @@
 | 
				
			|||||||
//! USB Device Descriptor
 | 
					//! USB Device Descriptor
 | 
				
			||||||
COMPILER_WORD_ALIGNED
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {
 | 
					UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {
 | 
				
			||||||
	.bLength                   = sizeof(usb_dev_desc_t),
 | 
					  .bLength                   = sizeof(usb_dev_desc_t),
 | 
				
			||||||
	.bDescriptorType           = USB_DT_DEVICE,
 | 
					  .bDescriptorType           = USB_DT_DEVICE,
 | 
				
			||||||
	.bcdUSB                    = LE16(USB_V2_0),
 | 
					  .bcdUSB                    = LE16(USB_V2_0),
 | 
				
			||||||
	.bDeviceClass              = 0,
 | 
					  .bDeviceClass              = 0,
 | 
				
			||||||
	.bDeviceSubClass           = 0,
 | 
					  .bDeviceSubClass           = 0,
 | 
				
			||||||
	.bDeviceProtocol           = 0,
 | 
					  .bDeviceProtocol           = 0,
 | 
				
			||||||
	.bMaxPacketSize0           = USB_DEVICE_EP_CTRL_SIZE,
 | 
					  .bMaxPacketSize0           = USB_DEVICE_EP_CTRL_SIZE,
 | 
				
			||||||
	.idVendor                  = LE16(USB_DEVICE_VENDOR_ID),
 | 
					  .idVendor                  = LE16(USB_DEVICE_VENDOR_ID),
 | 
				
			||||||
	.idProduct                 = LE16(USB_DEVICE_PRODUCT_ID),
 | 
					  .idProduct                 = LE16(USB_DEVICE_PRODUCT_ID),
 | 
				
			||||||
	.bcdDevice                 = LE16((USB_DEVICE_MAJOR_VERSION << 8)
 | 
					  .bcdDevice                 = LE16((USB_DEVICE_MAJOR_VERSION << 8)
 | 
				
			||||||
		| USB_DEVICE_MINOR_VERSION),
 | 
					    | USB_DEVICE_MINOR_VERSION),
 | 
				
			||||||
#ifdef USB_DEVICE_MANUFACTURE_NAME
 | 
					#ifdef USB_DEVICE_MANUFACTURE_NAME
 | 
				
			||||||
	.iManufacturer             = 1,
 | 
					  .iManufacturer             = 1,
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	.iManufacturer             = 0,  // No manufacture string
 | 
					  .iManufacturer             = 0,  // No manufacture string
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#ifdef USB_DEVICE_PRODUCT_NAME
 | 
					#ifdef USB_DEVICE_PRODUCT_NAME
 | 
				
			||||||
	.iProduct                  = 2,
 | 
					  .iProduct                  = 2,
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	.iProduct                  = 0,  // No product string
 | 
					  .iProduct                  = 0,  // No product string
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#if (defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER)
 | 
					#if (defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER)
 | 
				
			||||||
	.iSerialNumber             = 3,
 | 
					  .iSerialNumber             = 3,
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	.iSerialNumber             = 0,  // No serial string
 | 
					  .iSerialNumber             = 0,  // No serial string
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	.bNumConfigurations        = 1
 | 
					  .bNumConfigurations        = 1
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -96,52 +98,52 @@ UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {
 | 
				
			|||||||
//! USB Device Qualifier Descriptor for HS
 | 
					//! USB Device Qualifier Descriptor for HS
 | 
				
			||||||
COMPILER_WORD_ALIGNED
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
UDC_DESC_STORAGE usb_dev_qual_desc_t udc_device_qual = {
 | 
					UDC_DESC_STORAGE usb_dev_qual_desc_t udc_device_qual = {
 | 
				
			||||||
	.bLength                   = sizeof(usb_dev_qual_desc_t),
 | 
					  .bLength                   = sizeof(usb_dev_qual_desc_t),
 | 
				
			||||||
	.bDescriptorType           = USB_DT_DEVICE_QUALIFIER,
 | 
					  .bDescriptorType           = USB_DT_DEVICE_QUALIFIER,
 | 
				
			||||||
	.bcdUSB                    = LE16(USB_V2_0),
 | 
					  .bcdUSB                    = LE16(USB_V2_0),
 | 
				
			||||||
	.bDeviceClass              = 0,
 | 
					  .bDeviceClass              = 0,
 | 
				
			||||||
	.bDeviceSubClass           = 0,
 | 
					  .bDeviceSubClass           = 0,
 | 
				
			||||||
	.bDeviceProtocol           = 0,
 | 
					  .bDeviceProtocol           = 0,
 | 
				
			||||||
	.bMaxPacketSize0           = USB_DEVICE_EP_CTRL_SIZE,
 | 
					  .bMaxPacketSize0           = USB_DEVICE_EP_CTRL_SIZE,
 | 
				
			||||||
	.bNumConfigurations        = 1
 | 
					  .bNumConfigurations        = 1
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Structure for USB Device Configuration Descriptor
 | 
					//! Structure for USB Device Configuration Descriptor
 | 
				
			||||||
COMPILER_PACK_SET(1)
 | 
					COMPILER_PACK_SET(1)
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	usb_conf_desc_t conf;
 | 
					  usb_conf_desc_t conf;
 | 
				
			||||||
	UDI_COMPOSITE_DESC_T;
 | 
					  UDI_COMPOSITE_DESC_T;
 | 
				
			||||||
} udc_desc_t;
 | 
					} udc_desc_t;
 | 
				
			||||||
COMPILER_PACK_RESET()
 | 
					COMPILER_PACK_RESET()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! USB Device Configuration Descriptor filled for FS
 | 
					//! USB Device Configuration Descriptor filled for FS
 | 
				
			||||||
COMPILER_WORD_ALIGNED
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
UDC_DESC_STORAGE udc_desc_t udc_desc_fs = {
 | 
					UDC_DESC_STORAGE udc_desc_t udc_desc_fs = {
 | 
				
			||||||
	.conf.bLength              = sizeof(usb_conf_desc_t),
 | 
					  .conf.bLength              = sizeof(usb_conf_desc_t),
 | 
				
			||||||
	.conf.bDescriptorType      = USB_DT_CONFIGURATION,
 | 
					  .conf.bDescriptorType      = USB_DT_CONFIGURATION,
 | 
				
			||||||
	.conf.wTotalLength         = LE16(sizeof(udc_desc_t)),
 | 
					  .conf.wTotalLength         = LE16(sizeof(udc_desc_t)),
 | 
				
			||||||
	.conf.bNumInterfaces       = USB_DEVICE_NB_INTERFACE,
 | 
					  .conf.bNumInterfaces       = USB_DEVICE_NB_INTERFACE,
 | 
				
			||||||
	.conf.bConfigurationValue  = 1,
 | 
					  .conf.bConfigurationValue  = 1,
 | 
				
			||||||
	.conf.iConfiguration       = 0,
 | 
					  .conf.iConfiguration       = 0,
 | 
				
			||||||
	.conf.bmAttributes         = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR,
 | 
					  .conf.bmAttributes         = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR,
 | 
				
			||||||
	.conf.bMaxPower            = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER),
 | 
					  .conf.bMaxPower            = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER),
 | 
				
			||||||
	UDI_COMPOSITE_DESC_FS
 | 
					  UDI_COMPOSITE_DESC_FS
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef USB_DEVICE_HS_SUPPORT
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
//! USB Device Configuration Descriptor filled for HS
 | 
					//! USB Device Configuration Descriptor filled for HS
 | 
				
			||||||
COMPILER_WORD_ALIGNED
 | 
					COMPILER_WORD_ALIGNED
 | 
				
			||||||
UDC_DESC_STORAGE udc_desc_t udc_desc_hs = {
 | 
					UDC_DESC_STORAGE udc_desc_t udc_desc_hs = {
 | 
				
			||||||
	.conf.bLength              = sizeof(usb_conf_desc_t),
 | 
					  .conf.bLength              = sizeof(usb_conf_desc_t),
 | 
				
			||||||
	.conf.bDescriptorType      = USB_DT_CONFIGURATION,
 | 
					  .conf.bDescriptorType      = USB_DT_CONFIGURATION,
 | 
				
			||||||
	.conf.wTotalLength         = LE16(sizeof(udc_desc_t)),
 | 
					  .conf.wTotalLength         = LE16(sizeof(udc_desc_t)),
 | 
				
			||||||
	.conf.bNumInterfaces       = USB_DEVICE_NB_INTERFACE,
 | 
					  .conf.bNumInterfaces       = USB_DEVICE_NB_INTERFACE,
 | 
				
			||||||
	.conf.bConfigurationValue  = 1,
 | 
					  .conf.bConfigurationValue  = 1,
 | 
				
			||||||
	.conf.iConfiguration       = 0,
 | 
					  .conf.iConfiguration       = 0,
 | 
				
			||||||
	.conf.bmAttributes         = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR,
 | 
					  .conf.bmAttributes         = USB_CONFIG_ATTR_MUST_SET | USB_DEVICE_ATTR,
 | 
				
			||||||
	.conf.bMaxPower            = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER),
 | 
					  .conf.bMaxPower            = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER),
 | 
				
			||||||
	UDI_COMPOSITE_DESC_HS
 | 
					  UDI_COMPOSITE_DESC_HS
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -153,31 +155,31 @@ UDC_DESC_STORAGE udc_desc_t udc_desc_hs = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
//! Associate an UDI for each USB interface
 | 
					//! Associate an UDI for each USB interface
 | 
				
			||||||
UDC_DESC_STORAGE udi_api_t *udi_apis[USB_DEVICE_NB_INTERFACE] = {
 | 
					UDC_DESC_STORAGE udi_api_t *udi_apis[USB_DEVICE_NB_INTERFACE] = {
 | 
				
			||||||
	UDI_COMPOSITE_API
 | 
					  UDI_COMPOSITE_API
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Add UDI with USB Descriptors FS
 | 
					//! Add UDI with USB Descriptors FS
 | 
				
			||||||
UDC_DESC_STORAGE udc_config_speed_t   udc_config_lsfs[1] = {{
 | 
					UDC_DESC_STORAGE udc_config_speed_t   udc_config_lsfs[1] = {{
 | 
				
			||||||
	.desc          = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_fs,
 | 
					  .desc          = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_fs,
 | 
				
			||||||
	.udi_apis      = udi_apis,
 | 
					  .udi_apis      = udi_apis,
 | 
				
			||||||
}};
 | 
					}};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef USB_DEVICE_HS_SUPPORT
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
//! Add UDI with USB Descriptors HS
 | 
					//! Add UDI with USB Descriptors HS
 | 
				
			||||||
UDC_DESC_STORAGE udc_config_speed_t   udc_config_hs[1] = {{
 | 
					UDC_DESC_STORAGE udc_config_speed_t   udc_config_hs[1] = {{
 | 
				
			||||||
	.desc          = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_hs,
 | 
					  .desc          = (usb_conf_desc_t UDC_DESC_STORAGE*)&udc_desc_hs,
 | 
				
			||||||
	.udi_apis      = udi_apis,
 | 
					  .udi_apis      = udi_apis,
 | 
				
			||||||
}};
 | 
					}};
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//! Add all information about USB Device in global structure for UDC
 | 
					//! Add all information about USB Device in global structure for UDC
 | 
				
			||||||
UDC_DESC_STORAGE udc_config_t udc_config = {
 | 
					UDC_DESC_STORAGE udc_config_t udc_config = {
 | 
				
			||||||
	.confdev_lsfs = &udc_device_desc,
 | 
					  .confdev_lsfs = &udc_device_desc,
 | 
				
			||||||
	.conf_lsfs = udc_config_lsfs,
 | 
					  .conf_lsfs = udc_config_lsfs,
 | 
				
			||||||
#ifdef USB_DEVICE_HS_SUPPORT
 | 
					#ifdef USB_DEVICE_HS_SUPPORT
 | 
				
			||||||
	.confdev_hs = &udc_device_desc,
 | 
					  .confdev_hs = &udc_device_desc,
 | 
				
			||||||
	.qualifier = &udc_device_qual,
 | 
					  .qualifier = &udc_device_qual,
 | 
				
			||||||
	.conf_hs = udc_config_hs,
 | 
					  .conf_hs = udc_config_hs,
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -186,3 +188,4 @@ UDC_DESC_STORAGE udc_config_t udc_config = {
 | 
				
			|||||||
//@}
 | 
					//@}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -50,24 +50,30 @@
 | 
				
			|||||||
#include <Arduino.h>
 | 
					#include <Arduino.h>
 | 
				
			||||||
#include <Reset.h>
 | 
					#include <Reset.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static volatile bool main_b_msc_enable = false;
 | 
					#if ENABLED(SDSUPPORT)
 | 
				
			||||||
 | 
					  static volatile bool main_b_msc_enable = false;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
static volatile bool main_b_cdc_enable = false;
 | 
					static volatile bool main_b_cdc_enable = false;
 | 
				
			||||||
static volatile bool main_b_dtr_active = false;
 | 
					static volatile bool main_b_dtr_active = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void HAL_idletask(void) {
 | 
					void HAL_idletask(void) {
 | 
				
			||||||
  // Attend SD card access from the USB MSD -- Prioritize access to improve speed
 | 
					  #if ENABLED(SDSUPPORT)
 | 
				
			||||||
  int delay = 2;
 | 
					    // Attend SD card access from the USB MSD -- Prioritize access to improve speed
 | 
				
			||||||
  while (main_b_msc_enable && --delay > 0) {
 | 
					    int delay = 2;
 | 
				
			||||||
    if (udi_msc_process_trans()) delay = 10000;
 | 
					    while (main_b_msc_enable && --delay > 0) {
 | 
				
			||||||
 | 
					      if (udi_msc_process_trans()) delay = 10000;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Reset the watchdog, just to be sure
 | 
					      // Reset the watchdog, just to be sure
 | 
				
			||||||
    REG_WDT_CR = WDT_CR_WDRSTT | WDT_CR_KEY(0xA5);
 | 
					      REG_WDT_CR = WDT_CR_WDRSTT | WDT_CR_KEY(0xA5);
 | 
				
			||||||
  }
 | 
					    }
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool usb_task_msc_enable(void)                { return ((main_b_msc_enable = true)); }
 | 
					#if ENABLED(SDSUPPORT)
 | 
				
			||||||
void usb_task_msc_disable(void)               { main_b_msc_enable = false; }
 | 
					  bool usb_task_msc_enable(void)                { return ((main_b_msc_enable = true)); }
 | 
				
			||||||
bool usb_task_msc_isenabled(void)             { return main_b_msc_enable; }
 | 
					  void usb_task_msc_disable(void)               { main_b_msc_enable = false; }
 | 
				
			||||||
 | 
					  bool usb_task_msc_isenabled(void)             { return main_b_msc_enable; }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool usb_task_cdc_enable(const uint8_t port)  { return ((main_b_cdc_enable = true)); }
 | 
					bool usb_task_cdc_enable(const uint8_t port)  { return ((main_b_cdc_enable = true)); }
 | 
				
			||||||
void usb_task_cdc_disable(const uint8_t port) { main_b_cdc_enable = false; main_b_dtr_active = false; }
 | 
					void usb_task_cdc_disable(const uint8_t port) { main_b_cdc_enable = false; main_b_dtr_active = false; }
 | 
				
			||||||
@@ -192,11 +198,17 @@ static USB_MicrosoftExtendedPropertiesDescriptor microsoft_extended_properties_d
 | 
				
			|||||||
bool usb_task_extra_string(void) {
 | 
					bool usb_task_extra_string(void) {
 | 
				
			||||||
  static uint8_t udi_msft_magic[] = "MSFT100\xEE";
 | 
					  static uint8_t udi_msft_magic[] = "MSFT100\xEE";
 | 
				
			||||||
  static uint8_t udi_cdc_name[] = "CDC interface";
 | 
					  static uint8_t udi_cdc_name[] = "CDC interface";
 | 
				
			||||||
  static uint8_t udi_msc_name[] = "MSC interface";
 | 
					  #if ENABLED(SDSUPPORT)
 | 
				
			||||||
 | 
					    static uint8_t udi_msc_name[] = "MSC interface";
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  struct extra_strings_desc_t {
 | 
					  struct extra_strings_desc_t {
 | 
				
			||||||
    usb_str_desc_t header;
 | 
					    usb_str_desc_t header;
 | 
				
			||||||
    le16_t string[Max(Max(sizeof(udi_cdc_name) - 1, sizeof(udi_msc_name) - 1), sizeof(udi_msft_magic) - 1)];
 | 
					    #if ENABLED(SDSUPPORT)
 | 
				
			||||||
 | 
					      le16_t string[Max(Max(sizeof(udi_cdc_name) - 1, sizeof(udi_msc_name) - 1), sizeof(udi_msft_magic) - 1)];
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
 | 
					      le16_t string[Max(sizeof(udi_cdc_name) - 1, sizeof(udi_msft_magic) - 1)];
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  static UDC_DESC_STORAGE struct extra_strings_desc_t extra_strings_desc = {
 | 
					  static UDC_DESC_STORAGE struct extra_strings_desc_t extra_strings_desc = {
 | 
				
			||||||
    .header.bDescriptorType = USB_DT_STRING
 | 
					    .header.bDescriptorType = USB_DT_STRING
 | 
				
			||||||
@@ -211,10 +223,12 @@ bool usb_task_extra_string(void) {
 | 
				
			|||||||
    str_lgt = sizeof(udi_cdc_name) - 1;
 | 
					    str_lgt = sizeof(udi_cdc_name) - 1;
 | 
				
			||||||
    str = udi_cdc_name;
 | 
					    str = udi_cdc_name;
 | 
				
			||||||
    break;
 | 
					    break;
 | 
				
			||||||
  case UDI_MSC_STRING_ID:
 | 
					  #if ENABLED(SDSUPPORT)
 | 
				
			||||||
    str_lgt = sizeof(udi_msc_name) - 1;
 | 
					    case UDI_MSC_STRING_ID:
 | 
				
			||||||
    str = udi_msc_name;
 | 
					      str_lgt = sizeof(udi_msc_name) - 1;
 | 
				
			||||||
    break;
 | 
					      str = udi_msc_name;
 | 
				
			||||||
 | 
					      break;
 | 
				
			||||||
 | 
					  #endif
 | 
				
			||||||
  case 0xEE:
 | 
					  case 0xEE:
 | 
				
			||||||
    str_lgt = sizeof(udi_msft_magic) - 1;
 | 
					    str_lgt = sizeof(udi_msft_magic) - 1;
 | 
				
			||||||
    str = udi_msft_magic;
 | 
					    str = udi_msft_magic;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user