📄 rbcchap9.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 + -