C++ WINUSB_ControlTransfer只能在设备上可用的两个接口之一上使用,而不能在另一个接口上使用

C++ WINUSB_ControlTransfer只能在设备上可用的两个接口之一上使用,而不能在另一个接口上使用,c++,interface,usb,winusb,C++,Interface,Usb,Winusb,我正在使用该设备,它有两个接口。可以在下面的链接中找到USB设备上的lsusb信息。 摄像机有两个接口,第一个是iAP接口,第二个是com.thermal.pit206接口。我基于iAP接口编写了我的应用程序,因为。我之所以选择iAP接口,是因为其他人都在GitHub上这么做了,所以我也照做了 我能够在iAP接口上使用Winusb_ControlTrasnfer函数。我可以初始化WinUSB句柄,并使用它发送和获取命令以及读取管道 但是,当我使用com.thermal.pit206接口时,我仍

我正在使用该设备,它有两个接口。可以在下面的链接中找到USB设备上的lsusb信息。

摄像机有两个接口,第一个是iAP接口,第二个是com.thermal.pit206接口。我基于iAP接口编写了我的应用程序,因为。我之所以选择iAP接口,是因为其他人都在GitHub上这么做了,所以我也照做了

我能够在iAP接口上使用Winusb_ControlTrasnfer函数。我可以初始化WinUSB句柄,并使用它发送和获取命令以及读取管道

但是,当我使用com.thermal.pit206接口时,我仍然可以初始化WinUSB句柄,但我无法发送或获取命令

void CommandTransfer(WINUSB_INTERFACE_HANDLE winIHandle, UCHAR requestTypeI, UCHAR requestI, USHORT valueI, USHORT indexI, USHORT lengthI, PUCHAR dataIn)
{
    WINUSB_SETUP_PACKET packet;
    ZeroMemory(&packet, sizeof(WINUSB_SETUP_PACKET));
    packet.RequestType = requestTypeI;
    packet.Request = requestI;
    packet.Value = valueI;
    packet.Index = indexI;
    packet.Length = lengthI;

    ULONG dataLength = 0;

    if (!WinUsb_ControlTransfer(winIHandle, packet, dataIn, lengthI, &dataLength, NULL))
    {
        printf("ERROR: WinUsb_ControlTransfer, Windows Error Code - %d \n", GetLastError());
    }
} 
在上面,您可以看到我用来向设备发送命令的代码副本

我不明白为什么在使用iAP接口时可以向设备发送命令,但在使用com.thermal.pir206接口时,我无法这样做


谢谢!非常感谢任何有用的链接/信息。

WinUsb\u ControlTransfer()函数仅适用于默认端点零,该端点始终为
control
类型


上述
lsusb
输出上所有其他接口中的端点均为
bulk
类型。这些将需要使用
WinUsb\u ReadPipe()
WinUsb\u writepe()
函数。

谢谢。是的,这是有道理的。但为什么WinUsb_ControlTransfer()函数适用于使用iAP接口而不是com.thermal.pit206制作的WinUsb句柄?对于这两个接口,它们都是批量的。因此,无论我使用什么接口,它都应该转到同一个端点进行控制。