[STM32F1] hid 设备写可以,读收不到数据,bus hound可以看到数据

[复制链接]
2027|3
 楼主| lanmanck 发表于 2017-6-15 14:02 | 显示全部楼层 |阅读模式
各位大侠,目前端点和报告描述符大小均改为64,枚举没问题,pc向stm32写没问题,我在单片机里100ms发一次数据给pc,用bushound也看到有,但是pc用readfile+异步一直error_io_pending,不用异步就一直挂起,不知道啥原因啊?能给解答下吗?

hidin.gif

PC端的,使用同步模式:
reader = CreateFile(HidFunctionClassData->DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL);
HidD_GetPreparsedData(hd, &PreparsedData);
HidP_GetCaps(PreparsedData, &Capabilities); // 取得报告的长度


Read函数:
  1. BYTE rBuffer[1024] = { 0 };
  2.                 DWORD dwRet;
  3.                 BOOL bRet=0;
  4.                 DWORD error;
  5.                 int ret = 0;

  6.                 rBuffer[0] = G_dwInputID;// ; // 描述符的input=7

  7.                 // 长度为 实际的数据正文+一个byte的报告ID. 设置过小,即小于报告的长度,会返回1784号错误
  8.                 // 用overlap会出现 ERROR_IO_PENDING (997)的错误,不用就会一直挂死
  9.                 bRet = ReadFile(handle, rBuffer, Capabilities.InputReportByteLength, &dwRet, NULL);
  10.                
  11.                 if (GetLastError() != 0) {
  12.                         error = GetLastError();
  13.                         ret = error*(-1);
  14.                         return ret;
  15.                 }



lxyppc 发表于 2017-6-15 14:46 来自手机 | 显示全部楼层
capabilities这个结构体里面的各个值是多大
readfile的时候前面那个id值应该就让他保持为0
 楼主| lanmanck 发表于 2017-6-15 17:00 | 显示全部楼层
应该是stm32固件问题,现在对着例程挨个修改了,哎
yiy 发表于 2017-6-15 20:46 | 显示全部楼层
没用过这个功能,学习学习,等待高手。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:跟阿里云拼了: http://www.qcloud.com/redirect.php?redirect=1001&cps_key=361a94179534e81fbc22912619cc97ef

154

主题

400

帖子

3

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