7778|17

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用VC编写与HID设备通信程序遇到问题! [复制链接]

大家好,现在情况是这样的,HID设备可以正常枚举并且Windows提示可以使用,我也基本知道了在 VC中如何访问HID设备,但是现在的问题是,CreateFile之后可以得到正确的句炳,并且HidD_GetAttributes,HidD_GetPreparsedData以及HidP_GetCaps都正确得到了预期数据,但是我试图用WriteFile()或者HidD_SetOutputReport()时就提示出错,我查了出错代码是"invalid function",请问这是什么原因啊,实现搞不明白?PS:我上MSDN看了,步骤都是这样的,怎么会invalid呢?这是应该跟固件没有关系吧?是跟系统有关吗,我的是XP?

最新回复

楼主,我现在做的是usb和hid设备通信,可以看看你的源代码吗?我的邮箱是fj2461429@163.com  详情 回复 发表于 2012-7-5 10:10

点评

楼主,我现在做的是usb和hid设备通信,可以看看你的源代码吗?我的邮箱是fj2461429@163.com  详情 回复 发表于 2012-7-5 10:10
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你用特征报告(HidD_SetFeature())看看,主要看你下面是怎么模拟的HID接口描述符。
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
up,我也碰到类似的问题。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
我也是这样问题不过使用HidD_SetFeature()连接错误,那位师傅成功拉,麻烦告诉小弟一下
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
俺也遇到过,问了几个人也没弄明白

  1.         if( !HidD_GetPreparsedData( hHid, &PreparsedData ) )
  2.         {
  3.                 return -1;   //-7
  4.         }

  5.         if( !HidP_GetCaps( PreparsedData, &Capabilities ) )
  6.         {
  7.                 return -2;  //-7
  8.         }

  9.         if( !HidP_GetValueCaps( HidP_Output, &valueCaps, ( PUSHORT )&len, PreparsedData ) )
  10.         {
  11.                  return -3;   //-7
  12.         }
复制代码
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
支持搂主,收藏
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

7
 
有问题请先GOOGLE,BAIDU
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

8
 
问的问题都没有什么建设性的意见,真是惨啊!估计我想问的更没人理了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
应该跟Firmware有关,像鼠标,键盘啊这类HID设备是不能读写的。
书上好像说过,驱动可以通过USBDI发个SetFeafure可以去设置
键盘的指示灯,或者方向盘的力反馈啊。所知道的就这些...
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

10
 
读肯定是没问题的. 但写好像有点问题. 我有OK的读取HID设备数据的VC6程序. 不知道怎么上传
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

11
 
用DeviceIOcontrol不行吗?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
我也碰到了这个问题
好像确实是鼠标等HID设备不能读写
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

13
 
问题解决了么,方法共享下~
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

14
 

  1.     OVERLAPPED ol;
  2.     ol.Offset = 0;
  3.     ol.OffsetHigh = 0;
  4.     ol.hEvent = hIOWaiter;


  5.     DWORD recvdBytes;
  6.     ResetEvent(hIOWaiter);
  7.     if(!ReadFile(hDevice, recvDataBuf, 8, &recvdBytes, &ol))
  8.    {         
  9.         DWORD err = GetLastError();
  10.         ...
  11.    }
复制代码

现象一样,句柄可以CreateFile获得,ReadFile后GetLastError()得到1784代码。
无解中...
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
顶一下。。。。。
用ReadFile可以将数据读出来,但是用WriteFile就会出现87错误,
不知道是怎么回事。。。。
谁有解决方案,参考一下呀。。。QQ:174636594
 
 
 

回复

52

帖子

0

TA的资源

一粒金砂(初级)

16
 
ReadFile(hDevice, recvDataBuf, bytestoread, &recvdBytes, &ol)
刚才出现1784错误,发现是bytestoread赋的值太小的原因。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

17
 
    前段时间研究过,在写上层程序前,保证你的HID设备报告描述符没有问题.如果返回87错误,是因为HID设备中的报告描述符一般会添加一个ReportID,因此你定义的ReadFile()接收缓冲区数组要多加一个字节,并且数组的第一个元素要与你报告描述符设定的一样(一般为00)。.WriteFile()返回1784错误也是因为ReportID,你发送给系统缓冲区数据的数组也要多一个字节用于存储你报告描述符设定的ReportID的值(一般为00)。
    这里有个例子,你可以参考下.
   http://blog.eeworld.net/kevinyujm/archive/2009/06/12/4264506.aspx
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

18
 

回复 楼主 mpc 的帖子

楼主,我现在做的是usb和hid设备通信,可以看看你的源代码吗?我的邮箱是fj2461429@163.com
 
个人签名珍惜现在
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表