用VC编写与HID设备通信程序遇到问题!

fantasyzhang 2007-06-26 08:25:31
大家好,现在情况是这样的,HID设备可以正常枚举并且Windows提示可以使用,我也基本知道了在 VC中如何访问HID设备,但是现在的问题是,CreateFile之后可以得到正确的句炳,并且HidD_GetAttributes,HidD_GetPreparsedData以及HidP_GetCaps都正确得到了预期数据,但是我试图用WriteFile()或者HidD_SetOutputReport()时就提示出错,我查了出错代码是"invalid function",请问这是什么原因啊,实现搞不明白?PS:我上MSDN看了,步骤都是这样的,怎么会invalid呢?这是应该跟固件没有关系吧?是跟系统有关吗,我的是XP?
...全文
1362 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
piaopiaohu123 2010-02-02
  • 打赏
  • 举报
回复
前段时间研究过,在写上层程序前,保证你的HID设备报告描述符没有问题.如果返回87错误,是因为HID设备中的报告描述符一般会添加一个ReportID,因此你定义的ReadFile()接收缓冲区数组要多加一个字节,并且数组的第一个元素要与你报告描述符设定的一样(一般为00)。.WriteFile()返回1784错误也是因为ReportID,你发送给系统缓冲区数据的数组也要多一个字节用于存储你报告描述符设定的ReportID的值(一般为00)。
这里有个例子,你可以参考下.
http://blog.csdn.net/kevinyujm/archive/2009/06/12/4264506.aspx
adaizhang 2010-02-02
  • 打赏
  • 举报
回复
ReadFile(hDevice, recvDataBuf, bytestoread, &recvdBytes, &ol)
刚才出现1784错误,发现是bytestoread赋的值太小的原因。
wljun739 2009-10-28
  • 打赏
  • 举报
回复
顶一下。。。。。
用ReadFile可以将数据读出来,但是用WriteFile就会出现87错误,
不知道是怎么回事。。。。
谁有解决方案,参考一下呀。。。QQ:174636594
footway 2008-06-26
  • 打赏
  • 举报
回复

OVERLAPPED ol;
ol.Offset = 0;
ol.OffsetHigh = 0;
ol.hEvent = hIOWaiter;


DWORD recvdBytes;
ResetEvent(hIOWaiter);
if(!ReadFile(hDevice, recvDataBuf, 8, &recvdBytes, &ol))
{
DWORD err = GetLastError();
...
}

现象一样,句柄可以CreateFile获得,ReadFile后GetLastError()得到1784代码。
无解中...
footway 2008-06-22
  • 打赏
  • 举报
回复
问题解决了么,方法共享下~
exzz 2008-06-10
  • 打赏
  • 举报
回复
我也碰到了这个问题
好像确实是鼠标等HID设备不能读写
linuxpgy 2008-06-10
  • 打赏
  • 举报
回复
用DeviceIOcontrol不行吗?
cokeliu 2008-06-02
  • 打赏
  • 举报
回复
读肯定是没问题的. 但写好像有点问题. 我有OK的读取HID设备数据的VC6程序. 不知道怎么上传
柚木卤鹅 2008-05-31
  • 打赏
  • 举报
回复
应该跟Firmware有关,像鼠标,键盘啊这类HID设备是不能读写的。
书上好像说过,驱动可以通过USBDI发个SetFeafure可以去设置
键盘的指示灯,或者方向盘的力反馈啊。所知道的就这些...
liupeiyuan777 2008-05-11
  • 打赏
  • 举报
回复
问的问题都没有什么建设性的意见,真是惨啊!估计我想问的更没人理了。
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
支持搂主,收藏
用户 昵称 2008-03-04
  • 打赏
  • 举报
回复
俺也遇到过,问了几个人也没弄明白

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

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

if( !HidP_GetValueCaps( HidP_Output, &valueCaps, ( PUSHORT )&len, PreparsedData ) )
{
return -3; //-7
}
levelgxw 2008-03-04
  • 打赏
  • 举报
回复
我也是这样问题不过使用HidD_SetFeature()连接错误,那位师傅成功拉,麻烦告诉小弟一下
footway 2007-08-31
  • 打赏
  • 举报
回复
up,我也碰到类似的问题。
chotqy 2007-06-30
  • 打赏
  • 举报
回复
你用特征报告(HidD_SetFeature())看看,主要看你下面是怎么模拟的HID接口描述符。
史上最全USB HID开发资料,悉心整理一个月,亲自测试。 涉及STM32 C51 8051F例子都有源码,VC上位机例子以及源码,USB协议,HID协议,USB抓包工具,开发文档,开发过程文档。 详细内容就不都说了,看目录。 有了这个资料包,你再说开发不了USB HID,打死我都不信! 好资料当然一分都不能少! 目录: STM32_USB_HID_PC_demo:USB HID Demonstrator Release软件和文档 STM32_USB_HID_分析:STM32 USB HID 固件学习分析 STM32_USB_HID_例子:STM32 USB HID方式收发例子。 STM32_USB_HID_学习心得:基于STM32 的USB程序开发笔记、修改STM32的USB例程为自己所用、初涉USB,初学者USB入门总结——枚举。 STM32_固件库说明文档:STM32_USB_Demo例子的中文说明文档。 STM32F107 鼠标USB改 HID数据发送程序。 USB_HID_8051F例子。 USB_HID_C51源码。 USB_HID_PC_源码:PC端打开HID设备、读写操作实例。 USB_HID_PC接收发送工具:用于调试USB HID设备,就相当于串口工具啦。自己写好了HID设备,用它接收发送调试非常方便。 USB_HID_PC通信详解:PC端HID读写操作说明。 USB_HID_VC++6.0_入门级例子:简单读写USB HID设备,很好的参考作用。 USB_HID_VC++6.0_入门级例子开发步骤(图解说明,真详细啊!):一步一步手把把手教你开发VC++6.0 USB HID程序。 USB_HID_VC++6.0读写设备源码:简单打开HID设备,读写源码,参考的好例子。 USB_HID_VC++6.0源码:出具雏形的VC++6.0 USB HID 工具源码。非常完善了,可以直接当工具使用,关键是有源码! USB_HID_开发过程详细说明:长篇论文一篇,详细说明HID开发过程,包括下位机、上位机、HID驱动的开发,牛! USB_HID协议(英文)。 USB_STM32_HID开发笔记:里面有USB设备枚举的详细过程,抓包说明的哦。当然包括开发过程啦。令牌包、握手包、数据包中的数据都看得到。 USB_URB分析:抓包工具抓到的数据包的详细解析。 USB_VC教程:短论文一篇,用VC++编写USB接口通信程序,简洁扼要说明VC++6.0开发步骤,提纲挈领,值得一看! USB2.0协议(英文)。 USB技术规范(中文):中文的USB技术规范说明,中文的! USB抓包软件:两种抓包工具,bushound和usbtrace。都是破解版,哈哈,自己偷着乐吧! 深入解析STM32_USB库:STM32 USB的库说明。

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧