/************************************************************************
*File : Usbchap9.c *
*By : hugang, [email protected] *
************************************************************************/
#include "armusb.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#define CONFIG_DESCRIPTOR_LENGTH sizeof(USB_CONFIGURATION_DESCRIPTOR) \
+ sizeof(USB_INTERFACE_DESCRIPTOR) \
+ (NUM_ENDPOINTS * sizeof(USB_ENDPOINT_DESCRIPTOR))
extern CONTROL_XFER ControlData;
extern IO_REQUEST ioRequest;
extern ARMUSBFLAGS bUSBFlags;
/******************************************以下为配置描述符**********************************************/
//设备描述符
USB_DEVICE_DESCRIPTOR DeviceDescr =
{
sizeof(USB_DEVICE_DESCRIPTOR), // 设备描述符长度, =0x12
USB_DEVICE_DESCRIPTOR_TYPE, // 设备描述符类型, =0x01
0x0110, // 协议版本, =1.10
USB_DEVICE_CLASS_RESERVED, // 设备类型
0, // 设备子类
0, // 设备协议
EP0_PACKET_SIZE, // 端点0最大数据包大小, =0x10
0x0471, // PHILIPS公司的设备ID
0x0888, // 设备制造商定的产品ID
0x0100, // 设备系列号
0, // iManufacturer
0, // iProduct
0, // iSerialNumber
1 // 可能配置数
};
//配置描述符
USB_CONFIGURATION_DESCRIPTOR ConfigDescr =
{
sizeof(USB_CONFIGURATION_DESCRIPTOR), // 配置描述符的长度, =0x09
USB_CONFIGURATION_DESCRIPTOR_TYPE, // 配置描述符的类型, =0x02
CONFIG_DESCRIPTOR_LENGTH, // 描述符总长度 =0x2e
1, // 只支持1个接口
1, // 配置值
0, // 字符串描述符指针(无)
0x40, // 自供电
0x32 // 最大功耗(100mA)
};
//接口描述符
USB_INTERFACE_DESCRIPTOR InterfaceDescr =
{
sizeof(USB_INTERFACE_DESCRIPTOR), // 接口描述符长度, =0x09
USB_INTERFACE_DESCRIPTOR_TYPE, // 接口描述符类型, =0x04
0, // 接口数,只有1个
0, // 可选配置,只有1个
NUM_ENDPOINTS, // 除端点0的端点索引数目 =0x04
USB_CLASS_MASS_STORAGE, // 设备类型
USB_SUBCLASS_MASS_STORAGE, // 子类代码
USB_PROTOCOL_MASS_STORAGE, // 协议代码
0 // 字符串描述符指针(无)
};
//端点1发送描述符
USB_ENDPOINT_DESCRIPTOR EP1_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x81, // 端点1IN
USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03
EP1_PACKET_SIZE, // 端点最大包的大小, =0x10
10 // 传输间隔时间, =10ms
};
//端点1接收描述符
USB_ENDPOINT_DESCRIPTOR EP1_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x01, // 端点1OUT
USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03
EP1_PACKET_SIZE, // 端点最大包的大小, =0x10
10 // 传输间隔时间, =10ms
};
//端点2发送描述符
USB_ENDPOINT_DESCRIPTOR EP2_TXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x82, // 端点2IN
USB_ENDPOINT_TYPE_BULK, // 批量传输, =0x02
EP2_PACKET_SIZE, // 端点最大包的大小, =0x40
10 // 批量传输时该设置无效
};
//端点2接收描述符
USB_ENDPOINT_DESCRIPTOR EP2_RXDescr =
{
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x02, // 端点2OUT
USB_ENDPOINT_TYPE_BULK, // 批量传输, =0x02
EP2_PACKET_SIZE, // 端点最大包的大小, =0x40
10 // 批量传输时该设置无效
};
USB_TOTAL_DESCRIPTOR TotalDescriptor=
{
sizeof(USB_CONFIGURATION_DESCRIPTOR), // 配置描述符的长度, =0x09
USB_CONFIGURATION_DESCRIPTOR_TYPE, // 配置描述符的类型, =0x02
CONFIG_DESCRIPTOR_LENGTH, // 描述符总长度 =0x2e
1, // 只支持1个接口
1, // 配置值
0, // 字符串描述符指针(无)
0x40, // 自供电
0x32, // 最大功耗(100mA)
sizeof(USB_INTERFACE_DESCRIPTOR), // 接口描述符长度, =0x09
USB_INTERFACE_DESCRIPTOR_TYPE, // 接口描述符类型, =0x04
0, // 接口数,只有1个
0, // 可选配置,只有1个
NUM_ENDPOINTS, // 除端点0的端点索引数目 =0x04
0xdc,//USB_CLASS_MASS_STORAGE, // 设备类型
0xa0,//USB_SUBCLASS_MASS_STORAGE, // 子类代码
0xb0,//USB_PROTOCOL_MASS_STORAGE, // 协议代码
0, // 字符串描述符指针(无)
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x81, // 端点1IN
USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03
EP1_PACKET_SIZE, // 端点最大包的大小, =0x10
10, // 传输间隔时间,
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x01, // 端点1OUT
USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03
EP1_PACKET_SIZE, // 端点最大包的大小, =0x10
10, // 传输间隔时间,
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x82, // 端点2IN
USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03
EP2_PACKET_SIZE, // 端点最大包的大小, =0x40
10, // 批量传输时该设置无效
sizeof(USB_ENDPOINT_DESCRIPTOR), // 端点描述符长度, =0x07
USB_ENDPOINT_DESCRIPTOR_TYPE, // 端点描述符类型, =0x05
0x02, // 端点2OUT
USB_ENDPOINT_TYPE_INTERRUPT, // 中断传输, =0x03
EP2_PACKET_SIZE, // 端点最大包的大小, =0x40
10 // 批量传输时该设置无效
};
/******************************以下为USB标准请求程序调用到的子程序***************************************/
/********************************************************************************************************
*保留子程序 *
********************************************************************************************************/
void reserved(void)
{
UsbStallEp0();
}
/********************************************************************************************************
*类型:1000-0000,0001,0010 *
*请求:获取状态 *
*值 :0 *
*索引:设备,接口,端点 *
*长度:2 *
*数据:设备,接口或端点的状态 *
********************************************************************************************************/
void UsbClassRequestGetStatus(void)
{
unsigned char endp, txdat[2];
// 读取请求类型中的接收方
unsigned char bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT_MASK;
unsigned char c;
if (bRecipient == USB_RECIPIENT_DEVICE)
{ // 返回设备状态
if(bUSBFlags.bits.bRemote_Wakeup == 1)
txdat[0] = 3; // 支持远程唤醒,自供电
else
txdat[0] = 1; // 支持自供电
txdat[1]=0;
UsbSingleTransmit(txdat, 2);
DEBUGF(USB_CHAP9_DEBUG, ("GetStatus Device\n"));
}
else if (bRecipient == USB_RECIPIENT_INTERFACE)
{ // 返回接口状态
txdat[0]=0;
txdat[1]=0;
UsbSingleTransmit(txdat, 2); // 发送数据
DEBUGF(USB_CHAP9_DEBUG, ("GetStatus Interface\n"));
}
else if (bRecipient == USB_RECIPIENT_ENDPOINT)
{ // 返回端点状态
endp = (unsigned char)(ControlData.DeviceRequest.wIndex & USB_ENDPOINT_NUMBER_MASK);
if (ControlData.DeviceRequest.wIndex & (unsigne
usb.rar_usb_usb 读写
版权申诉
5星 · 超过95%的资源 126 浏览量
2022-09-14
14:58:50
上传
评论
收藏 174KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- index.jsp
- Screenshot_20240521_090410_com.huawei.android.launcher.jpg
- 单文件制作工具 7.0.2.3851-x86-x64
- Linux命令.xmind
- 基于Transformer实现的跨域Cross-view实时Map-view语义分割算法-附项目源码-优质项目实战.zip
- linux常用命令大全-.zip
- 2024彩虹聚合DNS管理系统源码 管理系统快速开发平台 聚合平台管理.zip
- elasticsearch介绍-.zip
- nodejs安装及环境配置-.zip
- 谷歌浏览器自动化测试版113.0.5672.0(包含linux,windows32/64,mac三个版本,不会自动更新)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈