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

3
在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 7编写的Windows DDK接口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 /应用程序总是有效的。建议?谢谢。

2个回答

1

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


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库配合使用。


这不是包清单的问题。我已经按照正确的方式制作了我的清单,但在尝试使用 GetInputReportAsync 方法时仍然遇到了相同的错误。虽然我没有任何问题通过 InputReportReceived 事件获取输入报告。文档中的备注也非常令人困惑,它说尽管有显式的 GetInputReportAsync 方法,但你应该通过 InputReportReceived 事件参数访问报告。 - Artur Wyszomirski
1
你能再分享一次第一个链接下的文章吗?因为它已经无法访问了。:/ - Artur Wyszomirski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接