[USB编程] USB自定义HID收发数据问题

[复制链接]
 楼主| 菜鸟同学 发表于 2016-9-9 16:05 | 显示全部楼层 |阅读模式
本帖最后由 菜鸟同学 于 2016-9-9 16:13 编辑

本人使用STM32 按照修改,
  1. <div class="blockcode"><blockquote>  /* Initialize Endpoint 1 */
  2.   SetEPType(ENDP1, EP_INTERRUPT);
  3.   SetEPTxAddr(ENDP1, ENDP1_TXADDR);
  4.   SetEPTxCount(ENDP1, 64);
  5.   SetEPRxStatus(ENDP1, EP_RX_DIS);
  6.   SetEPTxStatus(ENDP1, EP_TX_NAK);
  7.        
  8.           /* Initialize Endpoint 2 */
  9.   SetEPRxAddr(ENDP1, ENDP1_RXADDR);
  10.   SetEPRxCount(ENDP1, 64);
  11.         //SetEPRxStatus(ENDP1, EP_TX_DIS);
  12.   SetEPRxStatus(ENDP1, EP_RX_VALID);


  1. /* 27 */
  2.     0x07,          /*bLength: Endpoint Descriptor size*/
  3.     USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/

  4.     0x81,          /*bEndpointAddress: Endpoint Address (IN)*/
  5.     0x03,          /*bmAttributes: Interrupt endpoint*/
  6.     0x40,          /*wMaxPacketSize: 64 Byte max */
  7.     0x00,
  8.     0x0A,          /*bInterval: Polling Interval (2 ms)*/
  9.     /* 34 */
  10.                 /* 27 */
  11.     0x07,          /*bLength: Endpoint Descriptor size*/
  12.     USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/

  13.     0x01,          /*bEndpointAddress: Endpoint Address (OUT)*/
  14.     0x03,          /*bmAttributes: Interrupt endpoint*/
  15.     0x40,          /*wMaxPacketSize: 64 Byte max */
  16.     0x00,
  17.     0x0A,          /*bInterval: Polling Interval (2 ms)*/

  1.         0x05,0xFF,// USAGE_PAGE (Generic Desktop)
  2.                 0x09,0xFF,// USER DEFINE
  3.                 0xA1,0x01,// COLLECT
  4.                 0x05,0x01,// USAGE PAGE1
  5.                 0x19, 0x00,                    //   USAGE_MINIMUM (Keyboard LeftControl)
  6.                 0x29, 0xFF,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
  7.                 0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
  8.                 0x25, 0xFF,                    //   LOGICAL_MAXIMUM (1)
  9.                 0x75, 0x08,                    //   REPORT_SIZE (8)   // size ÊÇ´óС
  10.                 0x95, 0x40,                    //   REPORT_COUNT (64) // 64 ¸ö
  11.     0x81, 0x02,                    //   INPUT (Cnst,Var,Abs)
  12.                 0x05, 0x02,                    //   USAGE_PAGE(2)
  13.                 0x19, 0x00,                    //   USAGE_MINIMUM (Keyboard LeftControl)
  14.                 0x29, 0xFF,                    //   USAGE_MAXIMUM (Keyboard Right GUI)
  15.                 0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
  16.                 0x25, 0xFF,                    //   LOGICAL_MAXIMUM (1)
  17.                 0x75, 0x08,                    //   REPORT_SIZE (8)   // size ÊÇ´óС
  18.                 0x95, 0x40,                    //   REPORT_COUNT (64) // 64 ¸ö
  19.     0x91, 0x02,                    //   OUTPUT (Cnst,Var,Abs)
  20.     0xc0,                          // END_COLLECTION 25
 楼主| 菜鸟同学 发表于 2016-9-9 16:08 | 显示全部楼层
按照上面的代码,在端点一定义了一个收发的64byte的自定义HID设备,我用单片机能给上位机发送数据,
使用监控软件能看到数据发送到上位机,但是上位机发送到下位机的时候,Getlasterror 997,堆叠 io进行中
  1. buff[0] = 0;
  2.         buff[65] = 0;
  3.         ResetEvent(write_overlap.hEvent);
  4.     w_flag = WriteFile(w_hdevhandle,buff,65,NULL,&write_overlap);
  5. //        WaitForSingleObject(write_overlap.hEvent, 500);
  6.         if(w_flag == 0)
  7.         w_flag = GetLastError();
 楼主| 菜鸟同学 发表于 2016-9-9 20:50 | 显示全部楼层
没有人遇到吗,我发现这个自定义HID发送数据速度太慢了。
 楼主| 菜鸟同学 发表于 2016-9-12 19:09 | 显示全部楼层
MicroLCD 发表于 2016-9-10 18:08
如果觉得开发USB HID麻烦,使用CH9326最方便。立创商城上有卖,我用过。

谢谢,这个和芯片没有啥关系,我用这个做升级使用,就是很多不是很明白。
insignal 发表于 2016-9-19 09:57 | 显示全部楼层
菜鸟同学 发表于 2016-9-16 00:28
我自己实现了自定义HID上下位机,开始很多不明白,感觉这方面的资料浅淡的描述了下,很多迷糊,为什么这 ...

分析代码是很费时间的事
这没法靠别人
 楼主| 菜鸟同学 发表于 2016-9-20 15:05 | 显示全部楼层
版主长期不在,这个板块有啥意思,名存实亡。
windknief 发表于 2016-10-6 23:04 | 显示全部楼层
HID的速率依照您的裝置來決定, Full Speed最快1ms發送一次數據
您的WaitForSingleObject必須在一個迴圈(Loop)內一直執行,直到函式回傳的值0( WAIT_OBJECT_0) 而非997(ERROR_IO_PENDDING)
再呼叫dwResult = GetOverlappedResult(w_hdevhandle, ,&write_overlap, &ByteWritten, FALSE);
此時ByteWritten就是送出的資料長度了
15551292451 发表于 2018-9-7 11:55 | 显示全部楼层
菜鸟同学 发表于 2016-9-12 19:09
谢谢,这个和芯片没有啥关系,我用这个做升级使用,就是很多不是很明白。 ...

你好 你的免驱usb升级的做好了吗?

评论

我做好了  发表于 2018-9-30 17:02
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

707

帖子

9

粉丝
快速回复 在线客服 返回列表 返回顶部