首页 文章

用winusb写usb批量窗口

提问于
浏览
0

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

所以我知道可以发送批量数据 . 但我失去了如何做到这一点谢谢你

我使用QT 5.9和VS2015

1 回答

  • 0

    您可以尝试使用winusb调用 WinUsb_WritePipe() 来使用批量传输来传输数据 .

    在我们使用WinUsb调用之前需要一个接口句柄 . 它是通过使用setupApi调用并在找到所需设备之后获得的 . 使用 CreateFile() 调用打开文件句柄并执行 WinUsb_Initialise() 以获取接口句柄 . 我们可以使用此接口句柄进行进一步的WinUsb调用 . 对于批量传输,我们还需要管道( endpoints )信息,这些信息可以通过 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;
    
    }
    

    有关详细信息,请查看以下参考:请参阅:

相关问题