簡體   English   中英

Windows 10:C#中的HID通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM