阅读:2275回复:4
求助:USB HID设备无法访问题
前几天发了个帖子求助,为什么没有人回复,是发的不对吗,再发一次,继续求助.
我在做一块usb声卡,这是一个USB Composite Device,Firmware写完了,现在想做pc host的app,要对HID的endpoint4写数据,打开设备的时候能得到设备路径,但是无法读写,部分代码如下。 //Open the USB device char completeDeviceName[MAX_PATH] = ""; strcat(completeDeviceName, functionClassDeviceData->DevicePath); // strcat(completeDeviceName, "\\pipe4"); HANDLE hDevice = CreateFile( completeDeviceName, 0,//GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL); /*completeDeviceName的值为"\\?\hid#vid_0451&pid_2100&mi_03#7&f15c21&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}"*? if (! WriteFile(hDevice, pData, iLen, &dwWrite, lpOverlapped)) long lLastError = ::GetLastError();/*这里得到的错误号为5:拒绝访问。如果用CreateFile(completeDeviceName,GENERIC_WRITE | GENERIC_READ,...),则错误号为1784:提供给请求操作的用户缓冲区无效。*/ 请各位帮忙看一下,可能是什么地方出问题了,多谢。 |
|
沙发#
发布于:2007-11-01 15:36
不会,不过我帮你顶下!
|
|
板凳#
发布于:2007-11-03 19:46
在吗? 问题解了吗?
|
|
地板#
发布于:2007-11-04 11:03
以前有这样的帖子说是hid设备被系统以独占方式打开的,自己写的ap是不能访问的,
不知道现在有没有人解决这个问题。 |
|
地下室#
发布于:2007-11-05 15:38
引用第3楼lijie123456于2007-11-04 11:03发表的 : 关于HID类设备被系统以独占的方式打开的问题,我曾经遇到过。 那是把设备定义成标准鼠标、标准键盘时,在应用程序中,按照一般的访问HID类设备的程序调用顺序:HidD_GetHidGuid()、SetupDiGetClassDevs()、SetupDiEnumDeviceInterfaces()、SetupDiGetDeviceInterfaceDetail()、CreateFile()的方式是无法获取可读写的设备句柄的。 后来把HID设备定义成自定义的类型(Vendor Defined)后,就不存在这个问题了。 |
|