各位大侠,目前端点和报告描述符大小均改为64,枚举没问题,pc向stm32写没问题,我在单片机里100ms发一次数据给pc,用bushound也看到有,但是pc用readfile+异步一直error_io_pending,不用异步就一直挂起,不知道啥原因啊?能给解答下吗?
PC端的,使用同步模式:
reader = CreateFile(HidFunctionClassData->DevicePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES)NULL, OPEN_EXISTING, 0, NULL);
HidD_GetPreparsedData(hd, &PreparsedData);
HidP_GetCaps(PreparsedData, &Capabilities); // 取得报告的长度
Read函数:
BYTE rBuffer[1024] = { 0 };
DWORD dwRet;
BOOL bRet=0;
DWORD error;
int ret = 0;
rBuffer[0] = G_dwInputID;// ; // 描述符的input=7
// 长度为 实际的数据正文+一个byte的报告ID. 设置过小,即小于报告的长度,会返回1784号错误
// 用overlap会出现 ERROR_IO_PENDING (997)的错误,不用就会一直挂死
bRet = ReadFile(handle, rBuffer, Capabilities.InputReportByteLength, &dwRet, NULL);
if (GetLastError() != 0) {
error = GetLastError();
ret = error*(-1);
return ret;
}
|