[英]C# UWP Windows 10 Inter Process Communication with MemoryMappedFiles missing
[英]Windows 10: HID Communication in C#
我試圖在Windows 10上使用C#通過Arduino Leonardo通過USB HID建立通信。我已經能夠枚舉和檢索HidDevice對象,但是我無法接收任何數據。
Package.appxmanifest:
<DeviceCapability Name="humaninterfacedevice">
<Device Id="vidpid:16C0 0486">
<Function Type="usage:FFAB 0200"/>
</Device>
</DeviceCapability>
MainPage.xaml.cs中
HidInputReport testReport = await device.GetInputReportAsync();
DataReader dataReader = DataReader.FromBuffer(testReport.Data);
byte[] fileContent = new byte[dataReader.UnconsumedBufferLength];
dataReader.ReadBytes(fileContent);
textBlock.Text += System.Text.Encoding.UTF8.GetString(fileContent);
這種閱讀方法也是MSDN文章使用的方法,但是沒有提供任何結果。 如果有人對我可以做些什么或做錯了什么有深刻的了解,將不勝感激!
編輯:只是在這里添加更多的信息,我已經設置了一個事件,在接收到InputReport后觸發,並且該事件以我從Arduino發送消息的設置間隔觸發,這使我相信這是正確的數據包/消息/數據。 一個問題是,盡管我已驗證正在發送實際的非零消息,但該數據始終為空。
我終於弄清楚了這一點,並且有一些怪癖。 我設法使它起作用的方法就是上面的方法,但是我的數據並沒有達到我最初的預期。 找到我的設備后,我附加了一個InputReceived事件,它看起來像這樣:
private void ControlDevice_InputReportReceived(HidDevice sender, HidInputReportReceivedEventArgs args)
{
HidInputReport inputReport = args.Report;
IBuffer buffer = inputReport.Data;
DataReader dr = DataReader.FromBuffer(buffer);
byte[] bytes = new byte[inputReport.Data.Length];
dr.ReadBytes(bytes);
String receivedMessage = System.Text.Encoding.ASCII.GetString(bytes);
handleRead_HID(receivedMessage);
}
這應該使您從設備獲得一條人類可讀的字符串消息。
截至2015年9月22日的另外一點是,將通用應用程序部署到商店后,您的appxmanifest文件將覆蓋其內容,這意味着您部署的應用程序將無法訪問您的設備。 我已經報告了該錯誤,Microsoft已確認該錯誤,並且應該在Visual Studio 2015的下一個更新中予以修復。
編輯:優質視頻深入細節-https: //channel9.msdn.com/Events/Build/2013/2-924b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.