windows10 UWP HID DLL读输入报告失败



Windows 10 UWP c#编程访问HID USB设备时出现问题。

  • 我没有问题找到一个设备(GetDeviceSelector, DeviceInformation),没有麻烦打开设备(FromIdAsync)。
  • 我也可以发送它一个输出报告没有问题(CreateOutputReport,为消息添加字节数组,SendOutputReportAsync)和USB设备通过打开LED正确反应。
  • 无论我尝试包括不同的报告id,我都无法读取输入报告(GetInputReportAsync)。当尝试这样做时,设备仍然有效且不为空。
我已经仔细检查了VID, PID, Usage Page和ID。这些都没有违反我能在文档中找到的任何东西,没有试图使用顶级使用页面。

我已经仔细检查了设备及其USB描述符中的固件。设备管理器在Windows 7或10中运行正常,没有问题报告。我可以通过我用Windows DDK编写的用于Windows 7和测试应用程序的接口DLL访问Windows 7或10中的设备,并在Windows 7或10中正常发送/接收。我可以设置LED,回读值等,所有功能工作。

我已经连接了USB分析仪和数据包在那里,但是GetInputReportAsync函数不会返回任何数据,只是一个异常"连接到系统的设备不工作。"(异常从HRESULT: 0x8007001F)"

使用windows 10 Home,启用开发人员模式。尝试过Visual Studio 2015 Community Edition和VS 2015 Pro试用版。我在GitHub上尝试了Windows-universal-samples-master和CustomHidDeviceAccess项目,没有运气,我的设备与本演示中使用的设备有点不同。

有人见过这个吗?有什么技巧或特殊的方法来做到这一点吗?在Windows 10或我的项目中是否缺少设置?在十六进制FF中有特定的使用页面吗?我不能使用UWP的范围?或者某些报告id ?只是想知道为什么当我试图通过c# UWP获得输入报告时,我总是得到一个异常,为什么我的DDK DLL/应用程序总是工作。建议吗?谢谢。

显然不能仅仅调用GetInputReportAsync()函数来读取报告。相反,我能让它工作的唯一方法是向我的设备添加一个事件处理程序,通过InputReportReceived处理输入报告的接收。然后,在我发送输出报告之后,等待事件处理程序触发并通知从设备返回的输入报告数据,即对我的命令的回复。这似乎是唯一的方法,我可以让它在这个配置上工作。

我想打赌这是一个权限问题。如果您没有在包清单中准确地指定权限,则可以遍历设备,但无法连接。阅读这篇文章http://www.idevstream.com/?p=322。它帮我弄清楚了清单上到底需要写些什么。

这是一个让我难倒的工作样本:https://github.com/MelbourneDeveloper/Ledger.Net/blob/master/src/Ledger.Net.UWPUnitTest/Package.appxmanifest。它可以很好地与库https://github.com/MelbourneDeveloper/Hid.Net一起使用

最新更新