2020-01-14 23:30:39 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/* 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  The  MIT  License  ( MIT ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Copyright  ( c )  2019  Ha  Thach  ( tinyusb . org ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Permission  is  hereby  granted ,  free  of  charge ,  to  any  person  obtaining  a  copy 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  of  this  software  and  associated  documentation  files  ( the  " Software " ) ,  to  deal 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  in  the  Software  without  restriction ,  including  without  limitation  the  rights 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  to  use ,  copy ,  modify ,  merge ,  publish ,  distribute ,  sublicense ,  and / or  sell 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  copies  of  the  Software ,  and  to  permit  persons  to  whom  the  Software  is 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  furnished  to  do  so ,  subject  to  the  following  conditions : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  The  above  copyright  notice  and  this  permission  notice  shall  be  included  in 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  all  copies  or  substantial  portions  of  the  Software . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  THE  SOFTWARE  IS  PROVIDED  " AS IS " ,  WITHOUT  WARRANTY  OF  ANY  KIND ,  EXPRESS  OR 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  IMPLIED ,  INCLUDING  BUT  NOT  LIMITED  TO  THE  WARRANTIES  OF  MERCHANTABILITY , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  FITNESS  FOR  A  PARTICULAR  PURPOSE  AND  NONINFRINGEMENT .  IN  NO  EVENT  SHALL  THE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  AUTHORS  OR  COPYRIGHT  HOLDERS  BE  LIABLE  FOR  ANY  CLAIM ,  DAMAGES  OR  OTHER 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  LIABILITY ,  WHETHER  IN  AN  ACTION  OF  CONTRACT ,  TORT  OR  OTHERWISE ,  ARISING  FROM , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  OUT  OF  OR  IN  CONNECTION  WITH  THE  SOFTWARE  OR  THE  USE  OR  OTHER  DEALINGS  IN 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  THE  SOFTWARE . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  This  file  is  part  of  the  TinyUSB  stack . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/** \ingroup group_usbd
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *   @ {  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifndef _TUSB_USBD_H_ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define _TUSB_USBD_H_ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# ifdef __cplusplus 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 extern  " C "  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "common/tusb_common.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  "dcd.h" 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Application API
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Init device stack
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  tud_init  ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Task function should be called in main/rtos loop
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								void  tud_task  ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interrupt handler, name alias to DCD
 
							 
						 
					
						
							
								
									
										
										
										
											2020-04-06 17:24:22 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# define tud_irq_handler   dcd_irq_handler 
 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-14 23:30:39 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Check if device is connected and configured
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  tud_mounted ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Check if device is suspended
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  tud_suspended ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Check if device is ready to transfer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  inline  bool  tud_ready ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  tud_mounted ( )  & &  ! tud_suspended ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Remote wake up host, only if suspended and enabled by host
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  tud_remote_wakeup ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-04-09 11:42:42 +07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								static  inline  bool  tud_disconnect ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  TU_VERIFY ( dcd_disconnect ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  dcd_disconnect ( TUD_OPT_RHPORT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								static  inline  bool  tud_connect ( void ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  TU_VERIFY ( dcd_connect ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  dcd_connect ( TUD_OPT_RHPORT ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								} 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-14 23:30:39 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Carry out Data and Status stage of control transfer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - If len = 0, it is equivalent to sending status only
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - If len > wLength : it will be truncated
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  tud_control_xfer ( uint8_t  rhport ,  tusb_control_request_t  const  *  request ,  void *  buffer ,  uint16_t  len ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Send STATUS (zero length) packet
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								bool  tud_control_status ( uint8_t  rhport ,  tusb_control_request_t  const  *  request ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Application Callbacks (WEAK is optional)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when received GET DEVICE DESCRIPTOR request
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Application return pointer to descriptor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint8_t  const  *  tud_descriptor_device_cb ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when received GET BOS DESCRIPTOR request
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Application return pointer to descriptor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  uint8_t  const  *  tud_descriptor_bos_cb ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when received GET CONFIGURATION DESCRIPTOR request
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								uint8_t  const  *  tud_descriptor_configuration_cb ( uint8_t  index ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when received GET STRING DESCRIPTOR request
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
 
							 
						 
					
						
							
								
									
										
										
										
											2020-02-26 13:07:15 +08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								uint16_t  const *  tud_descriptor_string_cb ( uint8_t  index ,  uint16_t  langid ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-14 23:30:39 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when device is mounted (configured)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  void  tud_mount_cb ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when device is unmounted
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  void  tud_umount_cb ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when usb bus is suspended
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Within 7ms, device must draw an average of current less than 2.5 mA from bus
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  void  tud_suspend_cb ( bool  remote_wakeup_en ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when usb bus is resumed
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  void  tud_resume_cb ( void ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Invoked when received control request with VENDOR TYPE
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  bool  tud_vendor_control_request_cb ( uint8_t  rhport ,  tusb_control_request_t  const  *  request ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								TU_ATTR_WEAK  bool  tud_vendor_control_complete_cb ( uint8_t  rhport ,  tusb_control_request_t  const  *  request ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Binary Device Object Store (BOS) Descriptor Templates
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_DESC_LEN      5 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// total length, number of device caps
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_DESCRIPTOR(_total_len, _caps_num) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_BOS ,  U16_TO_U8S_LE ( _total_len ) ,  _caps_num 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Device Capability Platform 128-bit UUID + Data
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_PLATFORM_DESCRIPTOR(...) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  4 + TU_ARGS_NUM ( __VA_ARGS__ ) ,  TUSB_DESC_DEVICE_CAPABILITY ,  DEVICE_CAPABILITY_PLATFORM ,  0x00 ,  __VA_ARGS__ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- WebUSB BOS Platform -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Descriptor Length
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_WEBUSB_DESC_LEN         24 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Vendor Code, iLandingPage
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_WEBUSB_DESCRIPTOR(_vendor_code, _ipage) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  TUD_BOS_PLATFORM_DESCRIPTOR ( TUD_BOS_WEBUSB_UUID ,  U16_TO_U8S_LE ( 0x0100 ) ,  _vendor_code ,  _ipage ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_WEBUSB_UUID   \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  0x38 ,  0xB6 ,  0x08 ,  0x34 ,  0xA9 ,  0x09 ,  0xA0 ,  0x47 ,  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  0x8B ,  0xFD ,  0xA0 ,  0x76 ,  0x88 ,  0x15 ,  0xB6 ,  0x65 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- Microsoft OS 2.0 Platform -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_MICROSOFT_OS_DESC_LEN   28 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Total Length of descriptor set, vendor code
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_MS_OS_20_DESCRIPTOR(_desc_set_len, _vendor_code) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  TUD_BOS_PLATFORM_DESCRIPTOR ( TUD_BOS_MS_OS_20_UUID ,  U32_TO_U8S_LE ( 0x06030000 ) ,  U16_TO_U8S_LE ( _desc_set_len ) ,  _vendor_code ,  0 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_BOS_MS_OS_20_UUID \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  0xDF ,  0x60 ,  0xDD ,  0xD8 ,  0x89 ,  0x45 ,  0xC7 ,  0x4C ,  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  0x9C ,  0xD2 ,  0x65 ,  0x9D ,  0x9E ,  0x64 ,  0x8A ,  0x9F 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Configuration & Interface Descriptor Templates
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//--------------------------------------------------------------------+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- Configuration -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CONFIG_DESC_LEN   (9) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-31 10:53:47 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								// Config number, interface count, string index, total length, attribute, power in mA
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CONFIG_DESCRIPTOR(config_num, _itfcount, _stridx, _total_len, _attribute, _power_ma) \ 
 
							 
						 
					
						
							
								
									
										
										
										
											2020-03-30 13:34:56 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_CONFIGURATION ,  U16_TO_U8S_LE ( _total_len ) ,  _itfcount ,  config_num ,  _stridx ,  TU_BIT ( 7 )  |  _attribute ,  ( _power_ma ) / 2 
							 
						 
					
						
							
								
									
										
										
										
											2020-01-14 23:30:39 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- CDC -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 66 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CDC_DESC_LEN  (8+9+5+5+4+5+7+9+7+7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// CDC Descriptor Template
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, EP notification address and size, EP data address (out, in) and size.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CDC_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface Associate */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  8 ,  TUSB_DESC_INTERFACE_ASSOCIATION ,  _itfnum ,  2 ,  TUSB_CLASS_CDC ,  CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL ,  CDC_COMM_PROTOCOL_ATCOMMAND ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Control Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  1 ,  TUSB_CLASS_CDC ,  CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL ,  CDC_COMM_PROTOCOL_ATCOMMAND ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Header */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_HEADER ,  U16_TO_U8S_LE ( 0x0120 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Call */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_CALL_MANAGEMENT ,  0 ,  ( uint8_t ) ( ( _itfnum )  +  1 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC ACM: support line request */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  4 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT ,  2 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Union */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_UNION ,  _itfnum ,  ( uint8_t ) ( ( _itfnum )  +  1 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Notification */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _ep_notif ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _ep_notif_size ) ,  16 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Data Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  ( uint8_t ) ( ( _itfnum ) + 1 ) ,  0 ,  2 ,  TUSB_CLASS_CDC_DATA ,  0 ,  0 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- MSC -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 23 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_MSC_DESC_LEN    (9 + 7 + 7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, EP Out & EP In address, EP size
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_MSC_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  2 ,  TUSB_CLASS_MSC ,  MSC_SUBCLASS_SCSI ,  MSC_PROTOCOL_BOT ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- HID -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 25 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_HID_DESC_LEN    (9 + 9 + 7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// HID Input only descriptor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, protocol, report descriptor len, EP In address, size & polling interval
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_HID_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epin, _epsize, _ep_interval) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  1 ,  TUSB_CLASS_HID ,  ( uint8_t ) ( ( _boot_protocol )  ?  HID_SUBCLASS_BOOT  :  0 ) ,  _boot_protocol ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* HID descriptor */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  HID_DESC_TYPE_HID ,  U16_TO_U8S_LE ( 0x0111 ) ,  0 ,  1 ,  HID_DESC_TYPE_REPORT ,  U16_TO_U8S_LE ( _report_desc_len ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _epsize ) ,  _ep_interval 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 32 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_HID_INOUT_DESC_LEN    (9 + 9 + 7 + 7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// HID Input & Output descriptor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, protocol, report descriptor len, EP OUT & IN address, size & polling interval
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_HID_INOUT_DESCRIPTOR(_itfnum, _stridx, _boot_protocol, _report_desc_len, _epout, _epin, _epsize, _ep_interval) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  2 ,  TUSB_CLASS_HID ,  ( uint8_t ) ( ( _boot_protocol )  ?  HID_SUBCLASS_BOOT  :  0 ) ,  _boot_protocol ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* HID descriptor */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  HID_DESC_TYPE_HID ,  U16_TO_U8S_LE ( 0x0111 ) ,  0 ,  1 ,  HID_DESC_TYPE_REPORT ,  U16_TO_U8S_LE ( _report_desc_len ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _epsize ) ,  _ep_interval ,  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _epsize ) ,  _ep_interval 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- MIDI -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor (96 bytes)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_MIDI_DESC_LEN (9 + 9 + 9 + 7 + 6 + 6 + 9 + 9 + 7 + 5 + 7 + 5) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// MIDI simple descriptor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - 1 Embedded Jack In connected to 1 External Jack Out
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// - 1 Embedded Jack out connected to 1 External Jack In
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_MIDI_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Audio Control (AC) Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  0 ,  TUSB_CLASS_AUDIO ,  AUDIO_SUBCLASS_CONTROL ,  AUDIO_PROTOCOL_V1 ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* AC Header */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_CS_INTERFACE ,  AUDIO_CS_INTERFACE_HEADER ,  U16_TO_U8S_LE ( 0x0100 ) ,  U16_TO_U8S_LE ( 0x0009 ) ,  1 ,  ( uint8_t ) ( ( _itfnum ) + 1 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MIDI Streaming (MS) Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  ( uint8_t ) ( ( _itfnum ) + 1 ) ,  0 ,  2 ,  TUSB_CLASS_AUDIO ,  AUDIO_SUBCLASS_MIDI_STREAMING ,  AUDIO_PROTOCOL_V1 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS Header */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_CS_INTERFACE ,  MIDI_CS_INTERFACE_HEADER ,  U16_TO_U8S_LE ( 0x0100 ) ,  U16_TO_U8S_LE ( 0x0025 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS In Jack (Embedded) */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  6 ,  TUSB_DESC_CS_INTERFACE ,  MIDI_CS_INTERFACE_IN_JACK ,  MIDI_JACK_EMBEDDED ,  1 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS In Jack (External) */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  6 ,  TUSB_DESC_CS_INTERFACE ,  MIDI_CS_INTERFACE_IN_JACK ,  MIDI_JACK_EXTERNAL ,  2 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS Out Jack (Embedded), connected to In Jack External */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_CS_INTERFACE ,  MIDI_CS_INTERFACE_OUT_JACK ,  MIDI_JACK_EMBEDDED ,  3 ,  1 ,  2 ,  1 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS Out Jack (External), connected to In Jack Embedded */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_CS_INTERFACE ,  MIDI_CS_INTERFACE_OUT_JACK ,  MIDI_JACK_EXTERNAL ,  4 ,  1 ,  1 ,  1 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS Endpoint (connected to embedded jack in) */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_ENDPOINT ,  MIDI_CS_ENDPOINT_GENERAL ,  1 ,  1 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* MS Endpoint (connected to embedded jack out) */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_ENDPOINT ,  MIDI_CS_ENDPOINT_GENERAL ,  1 ,  3 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- TUD_USBTMC/USB488 -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_APP_CLASS    (TUSB_CLASS_APPLICATION_SPECIFIC) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_APP_SUBCLASS 0x03u 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_PROTOCOL_STD    0x00u 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_PROTOCOL_USB488 0x01u 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//   Interface number, number of endpoints, EP string index, USB_TMC_PROTOCOL*, bulk-out endpoint ID,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//   bulk-in endpoint ID
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_IF_DESCRIPTOR(_itfnum, _bNumEndpoints, _stridx, _itfProtocol) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/* Interface */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  0x09 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0x00 ,  _bNumEndpoints ,  TUD_USBTMC_APP_CLASS ,  TUD_USBTMC_APP_SUBCLASS ,  _itfProtocol ,  _stridx 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_IF_DESCRIPTOR_LEN 9u 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_BULK_DESCRIPTORS(_epout, _epin, _bulk_epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/* Endpoint Out */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _bulk_epsize ) ,  0u ,  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/* Endpoint In */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _bulk_epsize ) ,  0u 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_BULK_DESCRIPTORS_LEN (7u+7u) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/* optional interrupt endpoint */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// _int_pollingInterval : for LS/FS, expressed in frames (1ms each). 16 may be a good number?
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_INT_DESCRIPTOR(_ep_interrupt, _ep_interrupt_size, _int_pollingInterval ) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								7 ,  TUSB_DESC_ENDPOINT ,  _ep_interrupt ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _ep_interrupt_size ) ,  0x16 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_USBTMC_INT_DESCRIPTOR_LEN (7u) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- Vendor -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_VENDOR_DESC_LEN  (9+7+7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, EP Out & IN address, EP size
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_VENDOR_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  2 ,  TUSB_CLASS_VENDOR_SPECIFIC ,  0x00 ,  0x00 ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- DFU Runtime -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_DFU_APP_CLASS    (TUSB_CLASS_APPLICATION_SPECIFIC) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_DFU_APP_SUBCLASS 0x01u 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptr: 18 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_DFU_RT_DESC_LEN (9 + 9) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// DFU runtime descriptor
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, attributes, detach timeout, transfer size
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_DFU_RT_DESCRIPTOR(_itfnum, _stridx, _attr, _timeout, _xfer_size) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  0 ,  TUD_DFU_APP_CLASS ,  TUD_DFU_APP_SUBCLASS ,  DFU_PROTOCOL_RT ,  _stridx ,  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Function */  \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  DFU_DESC_FUNCTIONAL ,  _attr ,  U16_TO_U8S_LE ( _timeout ) ,  U16_TO_U8S_LE ( _xfer_size ) ,  U16_TO_U8S_LE ( 0x0101 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-02 21:15:01 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								//------------- CDC-ECM -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 62 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CDC_ECM_DESC_LEN  (9+5+5+13+7+9+7+7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// CDC-ECM Descriptor Template
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, description string index, MAC address string index, EP notification address and size, EP data address (out, in), and size, max segment size.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CDC_ECM_DESCRIPTOR(_itfnum, _desc_stridx, _mac_stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize, _maxsegmentsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Control Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  1 ,  TUSB_CLASS_CDC ,  CDC_COMM_SUBCLASS_ETHERNET_NETWORKING_CONTROL_MODEL ,  0 ,  _desc_stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC-ECM Header */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_HEADER ,  U16_TO_U8S_LE ( 0x0120 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC-ECM Union */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_UNION ,  _itfnum ,  ( uint8_t ) ( ( _itfnum )  +  1 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC-ECM Functional Descriptor */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  13 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_ETHERNET_NETWORKING ,  _mac_stridx ,  0 ,  0 ,  0 ,  0 ,  U16_TO_U8S_LE ( _maxsegmentsize ) ,  U16_TO_U8S_LE ( 0 ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Notification */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _ep_notif ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _ep_notif_size ) ,  1 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Data Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  ( uint8_t ) ( ( _itfnum ) + 1 ) ,  0 ,  2 ,  TUSB_CLASS_CDC_DATA ,  0 ,  0 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- RNDIS -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#if 0 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Windows XP */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define TUD_RNDIS_ITF_CLASS    TUSB_CLASS_CDC 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define TUD_RNDIS_ITF_SUBCLASS CDC_COMM_SUBCLASS_ABSTRACT_CONTROL_MODEL 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define TUD_RNDIS_ITF_PROTOCOL CDC_COMM_PROTOCOL_MICROSOFT_RNDIS 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# else 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Windows 7+ */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define TUD_RNDIS_ITF_CLASS    0xE0 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define TUD_RNDIS_ITF_SUBCLASS 0x01 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # define TUD_RNDIS_ITF_PROTOCOL 0x03 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 66 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_RNDIS_DESC_LEN  (8+9+5+5+4+5+7+9+7+7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// RNDIS Descriptor Template
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, string index, EP notification address and size, EP data address (out, in) and size.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_RNDIS_DESCRIPTOR(_itfnum, _stridx, _ep_notif, _ep_notif_size, _epout, _epin, _epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Interface Association */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  8 ,  TUSB_DESC_INTERFACE_ASSOCIATION ,  _itfnum ,  2 ,  TUD_RNDIS_ITF_CLASS ,  TUD_RNDIS_ITF_SUBCLASS ,  TUD_RNDIS_ITF_PROTOCOL ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Control Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  1 ,  TUD_RNDIS_ITF_CLASS ,  TUD_RNDIS_ITF_SUBCLASS ,  TUD_RNDIS_ITF_PROTOCOL ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC-ACM Header */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_HEADER ,  U16_TO_U8S_LE ( 0x0110 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Call Management */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_CALL_MANAGEMENT ,  0 ,  ( uint8_t ) ( ( _itfnum )  +  1 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* ACM */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  4 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_ABSTRACT_CONTROL_MANAGEMENT ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Union */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  5 ,  TUSB_DESC_CS_INTERFACE ,  CDC_FUNC_DESC_UNION ,  _itfnum ,  ( uint8_t ) ( ( _itfnum )  +  1 ) , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Notification */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _ep_notif ,  TUSB_XFER_INTERRUPT ,  U16_TO_U8S_LE ( _ep_notif_size ) ,  1 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* CDC Data Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  ( uint8_t ) ( ( _itfnum ) + 1 ) ,  0 ,  2 ,  TUSB_CLASS_CDC_DATA ,  0 ,  0 ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								//------------- CDC-EEM -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Length of template descriptor: 23 bytes
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CDC_EEM_DESC_LEN  (9+7+7) 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// CDC-EEM Descriptor Template
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// Interface number, description string index, EP data address (out, in) and size.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define TUD_CDC_EEM_DESCRIPTOR(_itfnum, _stridx, _epout, _epin, _epsize) \ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* EEM Interface */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  9 ,  TUSB_DESC_INTERFACE ,  _itfnum ,  0 ,  2 ,  TUSB_CLASS_CDC ,  CDC_COMM_SUBCLASS_ETHERNET_EMULATION_MODEL ,  CDC_COMM_PROTOCOL_ETHERNET_EMULATION_MODEL ,  _stridx , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint In */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epin ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 , \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  /* Endpoint Out */ \
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  7 ,  TUSB_DESC_ENDPOINT ,  _epout ,  TUSB_XFER_BULK ,  U16_TO_U8S_LE ( _epsize ) ,  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-01-14 23:30:39 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifdef __cplusplus 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif  /* _TUSB_USBD_H_ */ 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/** @} */