lidazhi1023 发表于 2018-7-27 16:44:50

坐等大神答疑

imgroot 发表于 2018-7-31 05:35:31

jyl518-283289 发表于 2018-7-27 14:24
1、USBD_HID_ConfigDesc 里面End point的 wMaxPacketSize 值已由0x04改0x08,此值前期改过不管用,可能是只 ...

HID_EPIN_SIZE 改了没有?不然描述符里虽然说 wMaxPacketSize 是0x8, 但是你的设备因为USB 驱动配置原因自己发不出去 0x8个字节

另外,我说的HID REPORT SIZE 不是 HID_MOUSE_REPORT_DESC_SIZE, 这个可能给你搞糊涂了。HID_MOUSE_REPORT_DESC_SIZE 是 USB HID 描述符本身的大小 (见HID_MOUSE_ReportDesc)。 在这个 USB HID 描述符里面会告诉操作系统这个设备的HID REPORT是多少字节,如何去处理,等等细节。你学习下USB HID规范就了解了。HID_MOUSE_ReportDesc这个array里面奥妙很多的。

具体请看 http://notes.iopush.net/stm32-custom-usb-hid-step-by-step-2/ 和 http://damogranlabs.com/2016/03/stm32-custom-usb-hid-device-yes-please/

jyl518-283289 发表于 2018-8-3 11:30:56

imgroot 发表于 2018-7-31 05:35
HID_EPIN_SIZE 改了没有?不然描述符里虽然说 wMaxPacketSize 是0x8, 但是你的设备因为USB 驱动配置原因 ...

非常感谢,回答的很详细,这二天工作又忙 了,等空了再研究下。

jyl518-283289 发表于 2018-8-31 13:48:02

imgroot 发表于 2018-7-31 05:35
HID_EPIN_SIZE 改了没有?不然描述符里虽然说 wMaxPacketSize 是0x8, 但是你的设备因为USB 驱动配置原因 ...

非常感谢,谢谢您的耐心解答,终于搞定了。
个人总结下:
1、主要还是我对描述报告“HID_MOUSE_ReportDesc”没理解。
2、现将HID_EPIN_SIZE改为5,并在“HID_MOUSE_ReportDesc”中要发送的数据改为5个,且HID_MOUSE_REPORT_DESC_SIZE改为数组(HID_MOUSE_ReportDesc)实际大小后OK了。
3、改这个东西好像没有赛普拉斯的方便。

yelm 发表于 2018-10-12 14:59:33

好贴,顶起!

yelm 发表于 2018-10-12 15:02:41

imgroot 发表于 2018-7-27 04:00
不对。 你要改的是USBD_HID_ConfigDesc 里面End point的 wMaxPacketSize 值。
同时,要让操作系统能够理解 ...
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc __ALIGN_END =
{
0x05,   0x01,
0x09,   0x02,
0xA1,   0x01,
0x09,   0x01,

0xA1,   0x00,
0x05,   0x09,
0x19,   0x01,
0x29,   0x03,

0x15,   0x00,
0x25,   0x01,
0x95,   0x03,
0x75,   0x01,

0x81,   0x02,
0x95,   0x01,
0x75,   0x05,
0x81,   0x01,

0x05,   0x01,
0x09,   0x30,
0x09,   0x31,
0x09,   0x38,

0x15,   0x81,
0x25,   0x7F,
0x75,   0x40, //0x75,   0x08,//此处由原来0x8字节改成0x40(64)字节,发送变成一次发送成功
0x95,   0x03,

0x81,   0x06,
0xC0,   0x09,
0x3c,   0x05,
0xff,   0x09,

0x01,   0x15,
0x00,   0x25,
0x01,   0x75,
0x01,   0x95,

0x02,   0xb1,
0x22,   0x75,
0x06,   0x95,
0x01,   0xb1,

0x01,   0xc0

};

yelm 发表于 2018-10-12 17:50:14

但是目标是一次发送64个字节,楼主有解决么?像楼主那样改最多一次只能发20~30个字节

imgroot 发表于 2018-10-12 22:33:36

有可能你的ENDPOINT大小没有改?把HID_MOUSE_ReportDesc注释一下才贴上来好分析。你也可以用usbview.exe或者 lsusb 看看,确保所有应该设置为64 byte的地方都已经改过。

yelm 发表于 2018-10-13 09:44:55

imgroot 发表于 2018-10-12 22:33
有可能你的ENDPOINT大小没有改?把HID_MOUSE_ReportDesc注释一下才贴上来好分析。你也可以用usbview.exe或 ...

#define HID_IN_EP                      0x81
#define HID_OUT_EP                   0x01
       
#define HID_IN_PACKET            64//4
#define HID_OUT_PACKET          64// 4

你说的ENDPOINT大小应该是我这的HID_IN_PACKET和HID_OUT_PACKET吧,有改的。
HID_MOUSE_ReportDesc里的值我是照搬ST的DEVICE HID例子来的,它里边也没有解释,我只是估计改0x75或者0x95开头的。
另外USBVIEW的结果如下
Device Descriptor:
bcdUSB:             0x0200
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64)
idVendor:         0x0483 (STMicroelectronics)
idProduct:          0x5710
bcdDevice:          0x0200
iManufacturer:      0x01
iProduct:             0x02
iSerialNumber:      0x03
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:   Full
Device Address:       0x05
Open Pipes:            2

Endpoint Descriptor:
bEndpointAddress:   0x81
Transfer Type:   Interrupt
wMaxPacketSize:   0x0040 (64)
bInterval:            0x0A

Endpoint Descriptor:
bEndpointAddress:   0x01
Transfer Type:   Interrupt
wMaxPacketSize:   0x0040 (64)
bInterval:            0x0A

imgroot 发表于 2018-11-1 21:36:54

我看了下你在16楼的帖子,你可能对HID Descriptor不熟悉。光靠改Report Size从8到64,操作系统是不会理解的。同时需要给这64byte里面每一个字节的意义都要和操作系统描述。

这篇文章不错 http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/
你可以用这个来确认HID Descriptor http://eleccelerator.com/usbdescreqparser/

推荐用Linux,因为直接一行命令 cat /sys/kernel/debug/hid/<interface>/rdesc 然后你的HID descriptor就一幕了然。如果有任何错误内核dmesg会有相应信息。在windows上面我不太清楚如何来看。
页: 1 [2]
查看完整版本: USBD_HID_SendReport只能发送4个字节