如何解决使用 LibUsbDotNet 写入端点时出现 Win32ErrorWinUSB 上的 alt 接口错误?
我正在尝试将 C++ 库移植到 .NET,但我无法让它工作,我不明白出了什么问题。我看到的唯一大变化是,在带有 libusb 的 C++ 库中,我必须将 alt 接口设置设置为 1,但在 LibUsbDotNet 中,这在 Windows 上是不可能的,因为 WinUsbDevice 没有任何用于 alt 接口的设置器,只有一个 getter(报告它是 0,与 libusb 不同)。
这是一个最小的代码,它在interruptEndpointWriter.Write上失败,返回Win32Error:
from flask import Flask,request
import requests
app = Flask(__name__)
@app.route("/data",methods=['GET'])
def data():
url = request.args.get("url")
print(url)
headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML,like Gecko) Cafari/537.36'}
r = requests.get(url,headers=headers)
print(r.text)
return {"ok": True}
if __name__ == "__main__":
app.run()
这是原始的 C++ 代码。这工作正常。
foreach (UsbRegistry usbRegistry in UsbDevice.AllDevices)
{
if (usbRegistry.Pid == HELIOS_PID && usbRegistry.Vid == HELIOS_VID)
{
if (usbRegistry.Open(out UsbDevice dac))
{
IUsbDevice libUsbDevice = dac as IUsbDevice;
if (libUsbDevice != null)
{
// (This code doesn't run because WinUsb devices do not implement these this interface,even though it's possible with C++ libusb)
libUsbDevice.ClaimInterface(0);
libUsbDevice.SetAltInterface(1);
}
using (var interruptEndpointWriter = dac.OpenEndpointWriter(WriteEndpointID.Ep06,EndpointType.Interrupt))
{
var errorCode = interruptEndpointWriter.Write(new byte[] { 0x03,0 },16,out int writeTransferLength);
if (errorCode == ErrorCode.Ok && writeTransferLength == 2)
{
Console.WriteLine("OK");
}
}
}
}
}
我做错了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。