【问题标题】:Write usb bulk windows with winusb用winusb写usb批量windows
【发布时间】:2018-04-27 13:26:50
【问题描述】:

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

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

我使用 QT 5.9 和 VS2015

【问题讨论】:

    标签: qt usb winusb


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多