0

我试图使用 USB 设备的 bulkout 端点发送一些数据。我可以使用 createfile 和 SetupDiGetDeviceInterfaceDetail 打开 USB 设备(corsair k65rgb 键盘)接口 2(控制照明)。但是我使用 HidD_SetFeature 写入数据的示例代码。并且从usb嗅探器编写urb函数类接口(使用控制端点)但是当我打开corsair cue软件时它使用urb函数批量或中断传输。

所以我知道它可以发送批量数据。但是我不知道该怎么做谢谢

我使用 QT 5.9 和 VS2015

4

1 回答 1

0

您可以尝试使用 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;

}

查看以下参考以获取更多详细信息:参考:

于 2018-08-31T08:24:29.130 回答