2015-08-25 2 views
1

Я пытаюсь установить связь через USB HID с Arduino Leonardo, используя C# в Windows 10. Я смог перечислить и получить объект HidDevice, но я не могу получить никаких данных.Windows 10: HID-связь в C#

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 используется как хорошо, но это не предоставили мне никаких результатов. Если у кого-то есть понимание того, что я могу сделать по-другому или я ошибаюсь, это было бы очень признательно!

EDIT: Просто добавив немного больше информации здесь, я имею установку событие, чтобы вызвать при получении InputReport и триггеры событий в заданном интервале, что я посылающего сообщения от Arduino, которая приводит меня в это поверить является правильным пакетом/сообщением/данными. Одна проблема заключается в том, что эти данные всегда пусты, несмотря на то, что я проверил, что отправляется фактическое ненулевое сообщение.

ответ

0

Мне удалось понять это окончательно, и есть несколько причуд. То, как мне удалось заставить это работать, было выше, но мои данные были не там, где я ожидал. После нахождения моего устройства, я прикрепил событие 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); 
    } 

Это вы должны получить читаемый строковое сообщение человека с вашего устройства.

Дополнительный бит от 9/22/2015 заключается в том, что при развертывании вашего универсального приложения в хранилище ваш файл appxmanifest перезаписывает содержимое, что означает, что ваше развернутое приложение НЕ будет иметь доступ к вашему устройству. Я сообщил об ошибке, она была признана Microsoft и должна быть исправлена ​​при следующем обновлении Visual Studio 2015.

Edit: Хорошее видео вдаваясь много деталей - https://channel9.msdn.com/Events/Build/2013/2-924b

Смежные вопросы