我正在尝试为 Android 创建一个 maui 应用程序,可以与特定的 hid 设备通信并控制它。我已经找到了 USB 设备,并且据我所知我已连接到该设备。但尝试通过控制传输发送命令似乎是一个问题。虽然控制传输方法返回一个值,该值应指示消息已发送,但我在设备上看不到任何内容。
所以我认为我的问题在于 Xamarin controlTransfer 需要作为参数的 UsbAdressing。我尝试只使用 UsbAdressing.Out,并尝试将我期望的值 0x21 转换为 UsbAdressing。这对我不起作用。有没有人有幸让控制转移工作?
所以我找到了一个解决方案,但我什至没有因为没有问我原来的问题而感到难过,因为这看起来很荒谬。 TL:DR 我们通过让 hid 设备固件接受 0x23 而不是仅 0x21 的请求类型来使其正常工作。
现在以防万一有人想要完整的故事,我和为我试图连接的 hid 设备制作固件的人检查了固件,设备期望 0x21 作为请求类型。我们不明白为什么,当我将带有强制类型转换的 controltransfer 发送到 0x21 时,它不起作用。因此,我们将其插入硬件 USB 调试器,发现发送的前 8 位之一在 0x21 时发生了变化。我不能更具体,因为我对它的了解更少。但 0x21 并不存在于前 8 位(即设置数据包)中。
然后我们测试了,如果我使用 0x23 作为请求类型,会发生什么,我们观察到它在 8 位中可见。显然 hid 设备上没有发生任何事情,因为没有 0x23 的命令。 Soooo 固件人员只是复制粘贴了适用于 0x21 的代码,并告诉它如果是 0x23 也会发生。这立即奏效了。他、我和第三个人对此感到非常困惑,但是嘿,它起作用了。我们最好的猜测是 Android 上的 0x21 是保留的或其他什么,即使我们找不到任何说明这一点的资源。
这是为了防止其他人碰巧遇到类似的情况。