打印

usb 键盘问题

[复制链接]
1916|8
手机看帖
扫描二维码
随时随地手机跟帖
沙发
sz_kd| | 2010-12-20 12:23 | 只看该作者
设置不同的Endpoint,一个作为输入,一个作为输出。

使用特权

评论回复
板凳
here.hou.qqcom|  楼主 | 2010-12-20 14:55 | 只看该作者
我也是这么想的,比如endpoint1作输出,endpoint2做输入
可是我看圈圈的usb键盘代码里面,使用的配置是0x81和0x01,2个endpoint地址都是1

使用特权

评论回复
地板
sz_kd| | 2010-12-20 15:00 | 只看该作者
哦,贴上完整端点描述符代码看看

使用特权

评论回复
5
here.hou.qqcom|  楼主 | 2010-12-20 16:02 | 只看该作者
code uint8 ConfigurationDescriptor[9+9+9+7+7]=
{
/***************配置描述符***********************/
//bLength字段。配置描述符的长度为9字节。
0x09,

//bDescriptorType字段。配置描述符编号为0x02。
0x02,

//wTotalLength字段。配置描述符集合的总长度,
//包括配置描述符本身、接口描述符、类描述符、端点描述符等。
sizeof(ConfigurationDescriptor)&0xFF, //低字节
(sizeof(ConfigurationDescriptor)>>8)&0xFF, //高字节

//bNumInterfaces字段。该配置包含的接口数,只有一个接口。
0x01,

//bConfiguration字段。该配置的值为1。
0x01,

//iConfigurationz字段,该配置的字符串索引。这里没有,为0。
0x00,

//bmAttributes字段,该设备的属性。由于我们的板子是总线供电的,
//并且我们不想实现远程唤醒的功能,所以该字段的值为0x80。
0x80,

//bMaxPower字段,该设备需要的最大电流量。由于我们的板子
//需要的电流不到100mA,因此我们这里设置为100mA。由于每单位
//电流为2mA,所以这里设置为50(0x32)。
0x32,

/*******************接口描述符*********************/
//bLength字段。接口描述符的长度为9字节。
0x09,

//bDescriptorType字段。接口描述符的编号为0x04。
0x04,

//bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。
0x00,

//bAlternateSetting字段。该接口的备用编号,为0。
0x00,

//bNumEndpoints字段。非0端点的数目。该USB键盘需要二个
//中断端点(一个输入一个输出),因此该值为2。
0x02,

//bInterfaceClass字段。该接口所使用的类。USB键盘是HID类,
//HID类的编码为0x03。
0x03,

//bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,
//只规定了一种子类:支持BIOS引导启动的子类。
//USB键盘、鼠标属于该子类,子类代码为0x01。
0x01,

//bInterfaceProtocol字段。如果子类为支持引导启动的子类,
//则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。
0x01,

//iConfiguration字段。该接口的字符串索引值。这里没有,为0。
0x00,

/******************HID描述符************************/
//bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。
0x09,

//bDescriptorType字段。HID描述符的编号为0x21。
0x21,

//bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。
0x10,
0x01,

//bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。
0x21,

//bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。
0x01,

//bDescritporType字段。下级描述符的类型,为报告描述符,编号为0x22。
0x22,

//bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。
sizeof(ReportDescriptor)&0xFF,
(sizeof(ReportDescriptor)>>8)&0xFF,

/**********************输入端点描述符***********************/
//bLength字段。端点描述符长度为7字节。
0x07,

//bDescriptorType字段。端点描述符编号为0x05。
0x05,

//bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。
//D7位表示数据方向,输入端点D7为1。所以输入端点1的地址为0x81。
0x81,

//bmAttributes字段。D1~D0为端点传输类型选择。
//该端点为中断端点。中断端点的编号为3。其它位保留为0。
0x03,

//wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
//注意低字节在先。
0x10,
0x00,

//bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
0x0A,

/**********************输出端点描述符***********************/
//bLength字段。端点描述符长度为7字节。
0x07,

//bDescriptorType字段。端点描述符编号为0x05。
0x05,

//bEndpointAddress字段。端点的地址。我们使用D12的输出端点1。
//D7位表示数据方向,输出端点D7为0。所以输出端点1的地址为0x01。
0x01,


//bmAttributes字段。D1~D0为端点传输类型选择。
//该端点为中断端点。中断端点的编号为3。其它位保留为0。
0x03,

//wMaxPacketSize字段。该端点的最大包长。端点1的最大包长为16字节。
//注意低字节在先。
0x10,
0x00,

//bInterval字段。端点查询的时间,我们设置为10个帧时间,即10ms。
0x0A
};
////////////////////////配置描述符集合完毕//////////////////////////

使用特权

评论回复
6
sz_kd| | 2010-12-20 16:33 | 只看该作者
可能不小心写错了吧,你把输出端点地址改成02试试。

使用特权

评论回复
7
here.hou.qqcom|  楼主 | 2010-12-20 16:37 | 只看该作者
只在看他的代码,还没做板子
http://www.edufujitsu.org/myspace/blog/show_155426.html#
从链接上看出错的可能性不大,毕竟是整个打包的

使用特权

评论回复
8
sz_kd| | 2010-12-20 16:51 | 只看该作者
端点1已经做了输入端点,那么输出端点设置成另外的端点

使用特权

评论回复
9
here.hou.qqcom|  楼主 | 2010-12-20 17:02 | 只看该作者
有空了试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝