我在做一块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:提供给请求操作的用户缓冲区无效。*/
请各位帮忙看一下,可能是什么地方出问题了,多谢。
可能firmware有问题,描述符你是怎么定义的?
我的也一样. 如果将HID类设为键盘/鼠标的话. 是无法用CreateFile打开该设备的. 后来我就改为游戏手柄类. 结果OK.
我怀疑是windows操作系统占用了该设备.
HID类设为键盘/鼠标
系统标识为独占了吧,所以打开读写失败的.
楼上能不能将你的usb声卡完整的源代码放在帖子上!
能行吗?.....