Windows 10 UWP HID DLL读取输入报告失败

时间:2016-11-11 21:51:49

标签: usb report uwp hid

使用Windows 10 UWP C#编程访问HID USB设备时遇到问题。

  • 找到设备(GetDeviceSelector,DeviceInformation)没问题,打开设备没问题(FromIdAsync)。
  • 我也可以发送输出报告没问题(CreateOutputReport,为消息添加一个字节数组,SendOutputReportAsync),USB设备通过打开LED正确反应。
  • 无论我尝试包含不同的报告ID,我都无法回读输入报告(GetInputReportAsync)。尝试执行此操作时,设备仍然有效,而不是null。

我仔细检查了VID,PID,使用情况页面和ID。这些都没有违反我在文档中找到的任何内容,而不是尝试使用顶级使用页面。

我仔细检查了设备中的固件及其USB描述符。设备管理器在Windows 7或10中很满意,没有报告任何问题。我可以通过我使用Windows DDK编写的接口DLL访问Windows 7或10中的设备,以便与Windows 7和测试应用程序一起使用,并在Windows 7或10中发送/接收。我可以设置LED,读取值,等等,所有功能都有效。

我已连接USB分析仪并且数据包在那里,但GetInputReportAsync函数不会返回任何数据,只是一个例外“连接到系统的设备无法运行。(HRESULT异常:0x8007001F)”

使用Window 10 Home,启用开发者模式。已经尝试过Visual Studio 2015社区版和VS 2015 Pro试用版。我在GitHub上尝试了Windows-universal-samples-master和CustomHidDeviceAccess项目,没有运气,我的设备与本演示中使用的设备略有不同。

以前有人见过这个吗?有没有一些技巧或特殊方法来做到这一点?我在Windows 10或我的项目中缺少一个设置吗?十六进制FF中是否有某些使用页面?我不能用于UWP的范围?或某些报告ID?只是想知道为什么我总是在尝试通过C#UWP获取输入报告时出现异常以及为什么我的DDK DLL / app始终有效。建议?谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我想打赌这是一个权限问题。如果您没有在软件包清单中正确指定权限,则可以遍历设备,但无法连接。阅读本文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配合使用。