我试图使用USB设备的批量端点发送一些数据。我可以使用createfile和SetupDiGetDeviceInterfaceDetail打开usb设备(corsair k65rgb键盘)接口2(它控制照明)。但是示例代码我使用HidD_SetFeature写入数据。并且从usb嗅探器它写入urb函数classe接口(使用控制端点)但是当我打开corsair cue软件时它使用urb函数批量或中断传输。
所以我知道可以发送批量数据。但我迷失了怎么办谢谢
我使用的是QT 5.9和VS2015
您可以尝试使用winusb调用WinUsb_WritePipe()来使用批量传输来传输数据。 在我们使用WinUsb调用之前需要一个接口句柄。它是通过使用setupApi调用并在找到所需设备之后获得的。使用CreateFile()调用打开文件句柄并执行WinUsb_Initialise()以获取接口句柄。我们可以使用此接口句柄进行进一步的WinUsb调用。对于批量传输,我们还需要管道(端点)信息,这些信息可以通过WinUsb_QueryPipe()调用获得。 检查以下参考以获取winusb调用列表: https://docs.microsoft.com/en-us/windows/desktop/api/winusb/ 这是使用winusb调用进行批量传输的示例代码。
BOOL WriteToBulkEndpoint(WINUSB_INTERFACE_HANDLE hDeviceHandle, UCHAR* pID, ULONG* pcbWritten)
{
if (hDeviceHandle==INVALID_HANDLE_VALUE || !pID || !pcbWritten)
{
return FALSE;
}
BOOL bResult = TRUE;
UCHAR szBuffer[] = "Hello World";
ULONG cbSize = strlen(szBuffer);
ULONG cbSent = 0;
bResult = WinUsb_WritePipe(hDeviceHandle, *pID, szBuffer, cbSize, &cbSent, 0);
if(!bResult)
{
goto done;
}
printf("Wrote to pipe %d: %s \nActual data transferred: %d.\n", *pID, szBuffer, cbSent);
*pcbWritten = cbSent;
done:
return bResult;
}
有关详细信息,请查看以下参考:请参阅: