WriteFile到HID供应商输出报告返回1,因为OutputReportByteLength为0

时间:2018-02-24 00:15:11

标签: winapi hid wdk

我正试图通过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结构。

的CreateFile

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

WriteFile的

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 
*/

0 个答案:

没有答案