C++ WINUSB_ControlTransfer只能在设备上可用的两个接口之一上使用,而不能在另一个接口上使用
我正在使用该设备,它有两个接口。可以在下面的链接中找到USB设备上的lsusb信息。 摄像机有两个接口,第一个是iAP接口,第二个是com.thermal.pit206接口。我基于iAP接口编写了我的应用程序,因为。我之所以选择iAP接口,是因为其他人都在GitHub上这么做了,所以我也照做了 我能够在iAP接口上使用Winusb_ControlTrasnfer函数。我可以初始化WinUSB句柄,并使用它发送和获取命令以及读取管道 但是,当我使用com.thermal.pit206接口时,我仍然可以初始化WinUSB句柄,但我无法发送或获取命令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接口时,我仍
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句柄?对于这两个接口,它们都是批量的。因此,无论我使用什么接口,它都应该转到同一个端点进行控制。