2013-05-06 12:50:19 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/*!
  
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @ file      usbd . c 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-06 12:50:19 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    @ author    hathach  ( tinyusb . org ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    @ section  LICENSE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Software  License  Agreement  ( BSD  License ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Copyright  ( c )  2013 ,  hathach  ( tinyusb . org ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    All  rights  reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    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.  Neither  the  name  of  the  copyright  holders  nor  the 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    names  of  its  contributors  may  be  used  to  endorse  or  promote  products 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    derived  from  this  software  without  specific  prior  written  permission . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    THIS  SOFTWARE  IS  PROVIDED  BY  THE  COPYRIGHT  HOLDERS  ' ' AS  IS ' '  AND  ANY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    EXPRESS  OR  IMPLIED  WARRANTIES ,  INCLUDING ,  BUT  NOT  LIMITED  TO ,  THE  IMPLIED 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    WARRANTIES  OF  MERCHANTABILITY  AND  FITNESS  FOR  A  PARTICULAR  PURPOSE  ARE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    DISCLAIMED .  IN  NO  EVENT  SHALL  THE  COPYRIGHT  HOLDER  BE  LIABLE  FOR  ANY 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    DIRECT ,  INDIRECT ,  INCIDENTAL ,  SPECIAL ,  EXEMPLARY ,  OR  CONSEQUENTIAL  DAMAGES 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( INCLUDING ,  BUT  NOT  LIMITED  TO ,  PROCUREMENT  OF  SUBSTITUTE  GOODS  OR  SERVICES ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    LOSS  OF  USE ,  DATA ,  OR  PROFITS ;  OR  BUSINESS  INTERRUPTION )  HOWEVER  CAUSED  AND 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-06 12:50:19 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ON  ANY  THEORY  OF  LIABILITY ,  WHETHER  IN  CONTRACT ,  STRICT  LIABILITY ,  OR  TORT 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ( INCLUDING  NEGLIGENCE  OR  OTHERWISE )  ARISING  IN  ANY  WAY  OUT  OF  THE  USE  OF  THIS 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-06 12:50:19 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    SOFTWARE ,  EVEN  IF  ADVISED  OF  THE  POSSIBILITY  OF  SUCH  DAMAGE . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    This  file  is  part  of  the  tinyusb  stack . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								*/  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								/**************************************************************************/  
						 
					
						
							
								
									
										
										
										
											2012-11-29 17:52:57 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "tusb_option.h" 
  
						 
					
						
							
								
									
										
										
										
											2012-11-29 17:52:57 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# if MODE_DEVICE_SUPPORTED 
  
						 
					
						
							
								
									
										
										
										
											2012-11-29 17:52:57 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# define _TINY_USB_SOURCE_FILE_ 
  
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// INCLUDE
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "tusb.h" 
  
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "tusb_descriptors.h" // TODO callback include 
  
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "usbd_dcd.h" 
  
						 
					
						
							
								
									
										
										
										
											2012-12-04 18:18:29 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// MACRO CONSTANT TYPEDEF
  
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								usbd_device_info_t  usbd_devices [ CONTROLLER_DEVICE_NUMBER ] ;  
						 
					
						
							
								
									
										
										
										
											2013-05-28 15:24:27 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// TODO fix/compress number of class driver
  
						 
					
						
							
								
									
										
										
										
											2013-06-21 13:11:16 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  device_class_driver_t  const  usbd_class_drivers [ TUSB_CLASS_MAPPED_INDEX_START ]  =  
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if DEVICE_CLASS_HID 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    [ TUSB_CLASS_HID ]  =  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . open             =  hidd_open , 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-16 14:41:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . control_request  =  hidd_control_request , 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        . isr              =  hidd_isr 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# if TUSB_CFG_DEVICE_MSC 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    [ TUSB_CLASS_MSC ]  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . open             =  mscd_open , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . control_request  =  mscd_control_request , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        . isr              =  mscd_isr 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2012-11-29 17:52:57 +07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// INTERNAL OBJECT & FUNCTION DECLARATION
  
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								static  tusb_error_t  usbd_string_descriptor_init ( void ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// APPLICATION INTERFACE
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-06-14 19:06:33 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								bool  tusbd_is_configured ( uint8_t  coreid )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  usbd_devices [ coreid ] . state  = =  TUSB_DEVICE_STATE_CONFIGURED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-21 13:11:16 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// IMPLEMENTATION
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  usbd_bus_reset ( uint32_t  coreid )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  memclr_ ( & usbd_devices [ coreid ] ,  sizeof ( usbd_device_info_t ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								tusb_error_t  usbh_set_configure_received ( uint8_t  coreid ,  uint8_t  config_number )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  dcd_controller_set_configuration ( coreid ,  config_number ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  usbd_devices [ coreid ] . state  =  TUSB_DEVICE_STATE_CONFIGURED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 14:13:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  //------------- parse configuration & open drivers -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint8_t *  p_desc_configure  =  ( uint8_t * )  & app_tusb_desc_configuration ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint8_t *  p_desc  =  p_desc_configure  +  sizeof ( tusb_descriptor_configuration_t ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 14:13:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  while (  p_desc  <  p_desc_configure  +  ( ( tusb_descriptor_configuration_t * ) p_desc_configure ) - > wTotalLength  ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 14:13:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    ASSERT (  TUSB_DESC_TYPE_INTERFACE  = =  p_desc [ DESCRIPTOR_OFFSET_TYPE ] ,  TUSB_ERROR_NOT_SUPPORTED_YET  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 14:13:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    uint8_t  class_index ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    tusb_descriptor_interface_t *  p_desc_interface  =  ( tusb_descriptor_interface_t * )  p_desc ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 17:16:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 14:13:06 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    class_index  =  p_desc_interface - > bInterfaceClass ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ASSERT (  class_index  ! =  0  & &  usbd_class_drivers [ class_index ] . open  ! =  NULL ,  TUSB_ERROR_NOT_SUPPORTED_YET  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ASSERT (  0  = =  usbd_devices [ coreid ] . interface2class [ p_desc_interface - > bInterfaceNumber ] ,  TUSB_ERROR_FAILED ) ;  // duplicate interface number TODO alternate setting
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    usbd_devices [ coreid ] . interface2class [ p_desc_interface - > bInterfaceNumber ]  =  class_index ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    uint16_t  length = 0 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ASSERT_STATUS (  usbd_class_drivers [ class_index ] . open (  coreid ,  p_desc_interface ,  & length  )  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ASSERT (  length  > =  sizeof ( tusb_descriptor_interface_t ) ,  TUSB_ERROR_FAILED  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //      usbh_devices[new_addr].flag_supported_class |= BIT_(class_index);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    p_desc  + =  length ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 17:16:41 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 12:20:00 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  TUSB_ERROR_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								tusb_error_t  std_get_descriptor ( uint8_t  coreid ,  tusb_control_request_t  *  p_request )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  tusb_std_descriptor_type_t  const  desc_type  =  p_request - > wValue  > >  8 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint8_t  const  desc_index  =  u16_low_u8 (  p_request - > wValue  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  switch  (  desc_type  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  TUSB_DESC_TYPE_DEVICE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      dcd_pipe_control_xfer ( coreid ,  TUSB_DIR_DEV_TO_HOST ,  & app_tusb_desc_device , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            min16_of (  p_request - > wLength ,  sizeof ( tusb_descriptor_device_t ) )  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  TUSB_DESC_TYPE_CONFIGURATION : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      dcd_pipe_control_xfer ( coreid ,  TUSB_DIR_DEV_TO_HOST ,  & app_tusb_desc_configuration , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            min16_of (  p_request - > wLength ,  sizeof ( app_tusb_desc_configuration ) )  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  TUSB_DESC_TYPE_STRING : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      uint8_t  * p_string  =  ( uint8_t * )  & app_tusb_desc_strings ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      for ( uint8_t  index  = 0 ;  index  <  desc_index ;  index + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        p_string  + =  ( * p_string ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      dcd_pipe_control_xfer ( coreid ,  TUSB_DIR_DEV_TO_HOST ,  p_string ,  * p_string ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    default : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  TUSB_ERROR_DCD_CONTROL_REQUEST_NOT_SUPPORT ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  TUSB_ERROR_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  usbd_setup_received_isr ( uint8_t  coreid ,  tusb_control_request_t  *  p_request )  
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  usbd_device_info_t  * p_device  =  & usbd_devices [ coreid ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  tusb_error_t  error  =  TUSB_ERROR_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  switch ( p_request - > bmRequestType_bit . recipient ) 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-14 18:22:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    //------------- Standard Control such as those in enumeration -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  TUSB_REQUEST_RECIPIENT_DEVICE : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      switch  (  p_request - > bRequest  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  TUSB_REQUEST_GET_DESCRIPTOR : 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          error  =  std_get_descriptor ( coreid ,  p_request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        case  TUSB_REQUEST_SET_ADDRESS : 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-30 14:16:45 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          dcd_controller_set_address ( coreid ,  ( uint8_t )  p_request - > wValue ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          usbd_devices [ coreid ] . state  =  TUSB_DEVICE_STATE_ADDRESSED ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          dcd_pipe_control_xfer ( coreid ,  TUSB_DIR_HOST_TO_DEV ,  NULL ,  0 ) ;  // zero length
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        case  TUSB_REQUEST_SET_CONFIGURATION : 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 14:19:56 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          usbh_set_configure_received ( coreid ,  ( uint8_t )  p_request - > wValue ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          dcd_pipe_control_xfer ( coreid ,  TUSB_DIR_HOST_TO_DEV ,  NULL ,  0 ) ;  // zero length
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        default :  error  =  TUSB_ERROR_DCD_CONTROL_REQUEST_NOT_SUPPORT ;  break ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    //------------- Class/Interface Specific Reqequest -------------//
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    case  TUSB_REQUEST_RECIPIENT_INTERFACE : 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      tusb_std_class_code_t  class_code  =  p_device - > interface2class [  u16_low_u8 ( p_request - > wIndex )  ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ASSERT_INT_WITHIN ( TUSB_CLASS_AUDIO ,  TUSB_CLASS_AUDIO_VIDEO ,  class_code ,  VOID_RETURN ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      if  (  usbd_class_drivers [ class_code ] . control_request  ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      { 
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        error  =  usbd_class_drivers [ class_code ] . control_request ( coreid ,  p_request ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    default :  error  =  TUSB_ERROR_DCD_CONTROL_REQUEST_NOT_SUPPORT ;  break ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if ( TUSB_ERROR_NONE  ! =  error ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  {  // Response with Protocol Stall if request is not supported
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    dcd_pipe_control_stall ( coreid ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ASSERT ( error  = =  TUSB_ERROR_NONE ,  VOID_RETURN ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-14 18:22:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								tusb_error_t  usbd_init  ( void )  
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ASSERT_STATUS  (  usbd_string_descriptor_init ( )  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ASSERT_STATUS  (  dcd_init ( )  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-01 21:54:08 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  dcd_controller_connect ( 0 ) ;   // TODO USB1
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  TUSB_ERROR_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-21 13:11:16 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// USBD-CLASS API
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								tusb_error_t  usbd_pipe_open ( uint8_t  coreid ,  tusb_descriptor_interface_t  const  *  p_interfacae ,  tusb_descriptor_endpoint_t  const  *  p_endpoint_desc )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  TUSB_ERROR_NONE ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								// USBD-DCD API
  
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  usbd_xfer_isr ( endpoint_handle_t  edpt_hdl ,  tusb_event_t  event ,  uint32_t  xferred_bytes )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-11-01 12:11:26 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//  usbd_device_info_t *p_device = &usbd_devices[edpt_hdl.coreid];
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint8_t  class_index  =  std_class_code_to_index ( edpt_hdl . class_code ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( class_index  = =  0 )  // Control Transfer
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } else  if  ( usbd_class_drivers [ class_index ] . isr ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    usbd_class_drivers [ class_index ] . isr ( edpt_hdl ,  event ,  xferred_bytes ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ASSERT ( false ,  VOID_RETURN ) ;  // something wrong, no one claims the isr's source
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2013-10-29 16:29:48 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2013-10-29 11:27:25 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//void usbd_isr(uint8_t coreid, tusb_event_t event)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//{
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//  switch(event)
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//  {
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//    case TUSB_EVENT_BUS_RESET:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//      usbd_bus_reset(coreid);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//    break;
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//    case TUSB_EVENT_SETUP_RECEIVED:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//      usbd_setup_received(coreid);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//    break;
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//    default:
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//      ASSERT(false, (void) 0);
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//    break;
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//  }
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//}
  
						 
					
						
							
								
									
										
										
										
											2013-06-08 02:50:10 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// HELPER
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								//--------------------------------------------------------------------+
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								static  tusb_error_t  usbd_string_descriptor_init ( void )  
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  ASSERT_INT (  STRING_LEN_BYTE2UNICODE ( sizeof ( TUSB_CFG_DEVICE_STRING_MANUFACTURER ) - 1 ) , 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             app_tusb_desc_strings . manufacturer . bLength ,  TUSB_ERROR_USBD_DESCRIPTOR_STRING ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  ASSERT_INT (  STRING_LEN_BYTE2UNICODE ( sizeof ( TUSB_CFG_DEVICE_STRING_PRODUCT ) - 1 )      , 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             app_tusb_desc_strings . product . bLength      ,  TUSB_ERROR_USBD_DESCRIPTOR_STRING ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-06-03 14:31:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  ASSERT_INT (  STRING_LEN_BYTE2UNICODE ( sizeof ( TUSB_CFG_DEVICE_STRING_SERIAL ) - 1 )       , 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              app_tusb_desc_strings . serial . bLength       ,  TUSB_ERROR_USBD_DESCRIPTOR_STRING ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for ( uint32_t  i = 0 ;  i  <  sizeof ( TUSB_CFG_DEVICE_STRING_MANUFACTURER ) - 1 ;  i + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    app_tusb_desc_strings . manufacturer . unicode_string [ i ]  =  ( uint16_t )  TUSB_CFG_DEVICE_STRING_MANUFACTURER [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for ( uint32_t  i = 0 ;  i  <  sizeof ( TUSB_CFG_DEVICE_STRING_PRODUCT ) - 1 ;  i + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    app_tusb_desc_strings . product . unicode_string [ i ]  =  ( uint16_t )  TUSB_CFG_DEVICE_STRING_PRODUCT [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for ( uint32_t  i = 0 ;  i  <  sizeof ( TUSB_CFG_DEVICE_STRING_SERIAL ) - 1 ;  i + + ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 21:24:40 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    app_tusb_desc_strings . serial . unicode_string [ i ]  =  ( uint16_t )  TUSB_CFG_DEVICE_STRING_SERIAL [ i ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-05-31 18:21:31 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2013-05-23 13:22:46 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  TUSB_ERROR_NONE ; 
							 
						 
					
						
							
								
									
										
										
										
											2013-01-16 12:43:17 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
									
										
										
										
											2013-06-21 13:11:16 +07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# endif