求问,STM32F103,USB通信中报告描述符不能超过64字节的问题。。

2019-07-21 08:15发布

如题,如果HID报告描述符超过64个字节,那么超出的部分都会截断(EP0最多只能发送或者接收64字节数据),剩下的不再发送给PC了,不是应该超出的会分包再次发送给PC的么?
其他的描述符都会分包发送给PC,就是报告描述符不会。。。求问大师们这是哪里的问题?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
lswhome
1楼-- · 2019-07-21 11:25
有的HID设备报告描述符超出了64个字节,结果超出的部分都无法发送给PC,导致PC无法识别,不知道从哪里入手解决这个问题。。。
lswhome
2楼-- · 2019-07-21 16:25
RESULT Joystick_Data_Setup(uint8_t RequestNo)
{
  uint8_t *(*CopyRoutine)(uint16_t);

  CopyRoutine = NULL;
  if ((RequestNo == GET_DESCRIPTOR)
      && (Type_Recipient == (STANDARD_REQUEST | INTERFACE_RECIPIENT))
      && (pInformation->USBwIndex0 == 0))
  {
    if (pInformation->USBwValue1 == REPORT_DESCRIPTOR)
    {
      CopyRoutine = Joystick_GetReportDescriptor;
    }
    else if (pInformation->USBwValue1 == HID_DESCRIPTOR_TYPE)
    {
      CopyRoutine = Joystick_GetHIDDescriptor;
    }

  } /* End of GET_DESCRIPTOR */

  /*** GET_PROTOCOL ***/
       
else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
           && RequestNo == GET_PROTOCOL)
  {
    CopyRoutine = Joystick_GetProtocolValue;
  }
       
  if (CopyRoutine == NULL)
  {
    return USB_UNSUPPORT;
                //return USB_SUCCESS;
  }
  pInformation->Ctrl_Info.CopyData = CopyRoutine;
  pInformation->Ctrl_Info.Usb_wOffset = 0;
  (*CopyRoutine)(0);

  return USB_SUCCESS;
}

是不是要自己想办法在这里分包处理????
lswhome
3楼-- · 2019-07-21 22:07
自己顶。。。
正点原子
4楼-- · 2019-07-21 22:49
帮顶
lswhome
5楼-- · 2019-07-21 23:52
 精彩回答 2  元偷偷看……
程序媛菜鸟
6楼-- · 2019-07-21 23:54
刚开始学USB通信,楼主能不能发个例程给我看看啊(806290344@qq.com),发送和接收函数那边看的浑浑噩噩的,手动比心

一周热门 更多>