读取HID设备数据时ReadFile超时的问题
以前都是搞应用开发的,现在突然来了个紧急任务,软件要和一个USB(HID)设备进行通信。
毫无头绪,只好硬着头皮上网查了一大堆资料。现在查找设备、发送数据都成功了,但一直读不到数据。
我用UPS Hound来抓数据,发现设备一直在向PC发数据,大约20ms一次,但我的程序就是收不到!
设备描述符如下:
#define DESNUM 0x26
char code ReportDescriptor[DESNUM] =
{
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x85, 0x01, // REPORT_ID (1)
0x95, 0x0f, // REPORT_COUNT (15)
0x75, 0x08, // REPORT_SIZE (8)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x85, 0x02, // REPORT_ID (2)
0x95, 0x04, // REPORT_COUNT (4)
0x75, 0x08, // REPORT_SIZE (8)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x09, 0x01, // USAGE (Vendor Usage 1)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0xc0 // END_COLLECTION
};
不管是同步还是异步方式读写数据,情况都类似:
WriteFile()成功,但HidD_SetOutputReport()却不行,GetLastError显示错误号为121,查了一下是超时;
ReadFile()和HidD_GetInputReport(),这两个都超时!如果采用同步的方式ReadFile,程序直接就卡死在那里了。
请各位高手帮忙分析一下,问题可能出在哪?需要我贴一下UPS Hound抓的数据包吗?