⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rbcchap9.c

📁 smartARM2400 USB OTG例程
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               RbcChap9nDescr.c
** Latest modified Date:    2007-10-8
** Latest Version:          1.0
** Descriptions:            
**
**--------------------------------------------------------------------------------------------------------
** Created by:              Lizhenming
** Created date:            2007-09-18
** Version:                 1.0
** Descriptions:            The original version
**
*********************************************************************************************************/
#include    "RbcBasicType.h"
#include    "HAL4RBC.h"
#include    "RBCCmd.h"
#include    "RBC.h"
#include    "TPBulk.h"
#include    "RbcChap9.h"

/*********************************************************************************************************
  USB 专用类请求     
*********************************************************************************************************/
#define     __USB_CLASS_REQUEST_USBSTOR_RESET         0xFF              /*  批量传输的大容量存储器复位  */ 
#define     __USB_CLASS_REQUEST_USBSTOR_GETMAXLUN     0xFE              /*  获取最大逻辑单元数目        */

void (*__GrbcClassDeviceRequest[2])(void) =
{
	__tpbulkResetATA,                                                   /*  批量传输的大容量存储器复位  */        
    __tpbulkGetMaxLUN                                                   /*  获取最大逻辑单元数目        */
};

/*********************************************************************************************************
** Function name:           rbcClassDevReq
**
** Descriptions:            USB大容量类专用请求
**
** input parameters:        req     请求号:USB_CLASS_REQUEST_USBSTOR_RESET         0xFF
                                            USB_CLASS_REQUEST_USBSTOR_GETMAXLUN     0xFE
** output parameters:       无  
** Returned value:          无
**
*********************************************************************************************************/
void rbcClassDevReq(__uint8 req)
{
    req = (__uint8)(0xff - req);
    if (req < 2){
        (*__GrbcClassDeviceRequest[req])();
    }
}

/*
 *  如果定义了__USE_RBC_DESCR,则使用本文件的设备描述符和配置描述符
 */
#ifdef      __USE_RBC_DESCR

/*********************************************************************************************************
   USB控制端口及批量端口最大数据包宏定义(根据USB设备调整)                                                                                  
*********************************************************************************************************/
#define     __RBC_EP0_PACKET_SIZE     64                                /*  端点0最大包大小             */
#define     __BULKEP_PACKET_SIZE      64                                /*  批量传输物理端点数据包大小  */
  
/*********************************************************************************************************
  设备描述符和配置描述符定义
*********************************************************************************************************/
/*
 *  设备描述符
 */
const USB_DEVICE_DESCRIPTOR __GrbcDeviceDescr =
{
	sizeof(USB_DEVICE_DESCRIPTOR),                                    /*  设备描述符长度              */
	__USB_DEVICE_DESCRIPTOR_TYPE,                                       /*  设备描述符类型=01           */	
    0x00,0x02,                                                          /*  协议版本                    */
    0,                                                                  /*  测试设备类型                */
	0,                                                                  /*  设备子类                    */
    0,                                                                  /*  设备协议                    */
	__RBC_EP0_PACKET_SIZE,                                              /*  端点0最大数据包大小,=10H   */

	0x93,0x06,                                                          /*  厂商标志(由USB标准赋值)   */

	0x03,0x00,                                                          /*  产品标志(由厂商赋值)      */
    0x00,0x01,                                                          /*  设备系列号                  */
    
    __STR_INDEX_MANUFACTURER,                                           /*  厂商描述符字符串索引,=01H   */
	__STR_INDEX_PRODUCT,                                                /*  产品描述符字符串索引,=02H   */
	__STR_INDEX_SERIALNUMBER,                                           /*  设序列号字符串索引,=03H     */
    1                                                                   /*  可能备置数                  */
};


#define __NUM_ENDPOINTS   2

#define __CONFIG_DESCRIPTOR_LENGTH    (sizeof(USB_CONFIGURATION_DESCRIPTOR) + \
                                       sizeof(USB_OTG_DESCRIPTOR) + \
                                       sizeof(USB_INTERFACE_DESCRIPTOR) + \
                                      (__NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR)))

const USB_DESCRIPTOR __GrbcDescr =
{
/*
 *  配置描述符
 */
{
	sizeof(USB_CONFIGURATION_DESCRIPTOR),		                        /*  配置描述符长度,= 09H        */
	__USB_CONFIGURATION_DESCRIPTOR_TYPE,			                    /*  配置描述符类型,= 02H        */    
	__CONFIG_DESCRIPTOR_LENGTH,0x00,				                    /*  描述符总长度, = 0020H       */
	1,											                        /*  只支持1个接口               */
	1,											                        /*  配置值                      */
	0,											                        /*  字符串描述符指针(无)        */
	0xC0,										                        /*  自供电,不支持远程唤醒       */
	0										                            /*  最大功耗                    */
},
/*
 *  OTG描述符
 */
{
    3,                                                                  /*  描述符大小                  */
    9,                                                                  /*  OTG类型 9                   */
    3                                                                   /*  位映像,支持HNP和SRP         */
},
/*
 *  接口描述符
 */
{
	sizeof(USB_INTERFACE_DESCRIPTOR),			                        /*  接口描述符长度,= 09H        */
	__USB_INTERFACE_DESCRIPTOR_TYPE,				                    /*  接口描述符类型,= 04H        */
	0,											                        /*  接口数,只有1个              */
	0,											                        /*  可选配置,只有1个            */
	__NUM_ENDPOINTS,								                    /*  除端点0的端点索引数目,= 02H */
	
	__USB_CLASS_CODE_MASSSTORAGE_CLASS_DEVICE,                          /*  类型代号(由USB指定),=08H */
	__USB_SUBCLASS_CODE_SCSI,                                           /*  子类型代码(由USB指定)=06H */
	__USB_PROTOCOL_CODE_BULK,                                           /*  协议代码(由厂商指定)=50H  */
	
	0											                        /*  字符串描述符索引            */
},

/*
 *  批量端点输入
 */
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),			                        /*  端点描述符长度,= 07H        */
	__USB_ENDPOINT_DESCRIPTOR_TYPE,				                        /*  端点描述符类型,= 05H        */    
	0x82,							                                    /*  批量端点 IN(2)              */
	__USB_ENDPOINT_TYPE_BULK,						                    /*  批量传输,= 02H              */
	__BULKEP_PACKET_SIZE,0x00,					                        /*  端点最大包的大小,= 0040H    */
	10											                        /*  批量传输时该设置无效        */
},

/*
 *  批量端点输出
 */
{
	sizeof(USB_ENDPOINT_DESCRIPTOR),			                        /*  端点描述符长度,= 07H        */
	__USB_ENDPOINT_DESCRIPTOR_TYPE,				                        /*  端点描述符类型,= 05H        */    
	0x02,								                                /*  批量端点 OUT(2)             */
	__USB_ENDPOINT_TYPE_BULK,						                    /*  批量传输,= 02H              */
	__BULKEP_PACKET_SIZE,0x00,					                        /*  端点最大包的大小,= 0040H    */
	10											                        /*  批量传输时该设置无效        */
}
};

/*
 *  字符串描述符语言编码
 */
const __USB_STRING_LANGUAGE_DESCRIPTOR  __strLanguage =
{
	sizeof(__USB_STRING_LANGUAGE_DESCRIPTOR),
	__USB_STRING_DESCRIPTOR_TYPE,
	0x09,0x04
};


/*
 *  厂商描述符
 */
const __USB_STRING_MANUFACTURER_DESCRIPTOR  __strManufacturer =
{
	sizeof(__USB_STRING_MANUFACTURER_DESCRIPTOR),
	__USB_STRING_DESCRIPTOR_TYPE,
	{
	'P', 0,	'h', 0,	'i', 0,	'l', 0,	'i', 0,	'p', 0,	's', 0,
	' ', 0,	'A', 0,	'P', 0,	'I', 0,	'C', 0}
};


/*
 *  产品描述符
 */
const __USB_STRING_PRODUCT_DESCRIPTOR  __strProduct =
{
	sizeof(__USB_STRING_PRODUCT_DESCRIPTOR),
	__USB_STRING_DESCRIPTOR_TYPE,
	{
	'U', 0,	'S', 0,	'B', 0,	'-', 0,	'I', 0,	'D', 0,	'E', 0,
	' ', 0,	'A', 0,	'd', 0,	'a', 0,	'p', 0,	't', 0,	'e', 0,
    'r', 0}
};


/*
 *  设备出厂编码
 */
const __USB_STRING_SERIALNUMBER_DESCRIPTOR  __strSerialNum =
{
	sizeof(__USB_STRING_SERIALNUMBER_DESCRIPTOR),
	__USB_STRING_DESCRIPTOR_TYPE,
   {
	'0',0,	'0',0,	'0',0,	'0',0,	'0',0,	'0',0,	'0',0,
	'0',0,	'0',0,	'0',0,	'0',0,	'1',0}
};

#endif                                                                  /*  #ifdef      __USE_RBC_DESCR */

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -