我正试图通过i2c-hid从Windows获取数据到我的微控制器。如果我连接到linux主机(Raspberry PI),我的工作就是。但在Windows 10上,WriteFile和HidD_SetOutputReport都返回1(ERROR_INVALID_FUNCTION)。我相信这是因为HidP_GetCaps返回的CAPS结构中的OutputReportByteLength是0(InputReportByteLength也是0,同样的问题)。我与这些输入和输出报告并行的功能报告具有预期的长度,我可以获取和设置功能报告。为什么Windows错误地解析了我的报表描述符?请注意,我已尝试重新排列描述符中的功能,输出和输入部分的顺序,并且功能报告始终有效(CAPS中的字节长度为977),输入和输出报告始终返回0表示字节长度。 CAPS结构。
devHandle = CreateFile(currentInterface,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, // no SECURITY_ATTRIBUTES structure
OPEN_EXISTING, // No special create flags
0, // No special attributes
NULL); // No template file
UINT8 buf[9];
buf[0] = 0x9; // Report ID = 9
success = WriteFile(
device->file, // HANDLE hFile,
buf, // LPVOID lpBuffer,
sizeof(buf), // DWORD nNumberOfBytesToRead,
&bytes_written, // LPDWORD lpNumberOfBytesRead,
NULL // LPOVERLAPPED lpOverlapped
);
//-------------------------------
// Decoded Application Collection
//-------------------------------
/*
06 00FF (GLOBAL) USAGE_PAGE 0xFF00 Vendor-defined
09 01 (LOCAL) USAGE 0xFF000001
A1 01 (MAIN) COLLECTION 0x00000001 Application (Usage=0xFF000001: Page=Vendor-defined, Usage=, Type=)
85 01 (GLOBAL) REPORT_ID 0x01 (1)
09 01 (LOCAL) USAGE 0xFF000001 <-- Warning: Undocumented usage
14 (GLOBAL) LOGICAL_MINIMUM (0)
26 FF00 (GLOBAL) LOGICAL_MAXIMUM 0x00FF (255)
75 08 (GLOBAL) REPORT_SIZE 0x08 (8) Number of bits per field
96 D003 (GLOBAL) REPORT_COUNT 0x03D0 (976) Number of fields
B1 02 (MAIN) FEATURE 0x00000002 (976 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
85 09 (GLOBAL) REPORT_ID 0x09 (9)
09 01 (LOCAL) USAGE 0xFF000001 <-- Warning: Undocumented usage
95 08 (GLOBAL) REPORT_COUNT 0x08 (8) Number of fields
91 02 (MAIN) OUTPUT 0x00000002 (8 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
09 01 (LOCAL) USAGE 0xFF000001 <-- Warning: Undocumented usage
95 40 (GLOBAL) REPORT_COUNT 0x40 (64) Number of fields
81 02 (MAIN) INPUT 0x00000002 (64 fields x 8 bits) 0=Data 1=Variable 0=Absolute 0=NoWrap 0=Linear 0=PrefState 0=NoNull 0=NonVolatile 0=Bitmap
C0 (MAIN) END_COLLECTION Application
*/