WINUSB_ControlTransfer 只能用于设备上可用的两个接口之一,不能用于另一个
WINUSB_ControlTransfer can only be used on one of the two interfaces available on the device, but not the other
我正在使用该设备,它有两个接口。 USB 设备上的 lsusb 信息可以在下面的 link 中找到。
https://github.com/zougloub/libseek
相机有两个接口,第一个是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接口时,我无法这样做。
谢谢!任何有帮助的 link/信息,我们将不胜感激。
WinUsb_ControlTransfer()
函数仅适用于默认端点零,它始终为 control
类型。
上述lsusb
输出中所有其他接口的端点都是bulk
类型。这些将需要使用 WinUsb_ReadPipe()
或 WinUsb_WritePipe()
函数。
我正在使用该设备,它有两个接口。 USB 设备上的 lsusb 信息可以在下面的 link 中找到。 https://github.com/zougloub/libseek
相机有两个接口,第一个是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接口时,我无法这样做。
谢谢!任何有帮助的 link/信息,我们将不胜感激。
WinUsb_ControlTransfer()
函数仅适用于默认端点零,它始终为 control
类型。
上述lsusb
输出中所有其他接口的端点都是bulk
类型。这些将需要使用 WinUsb_ReadPipe()
或 WinUsb_WritePipe()
函数。