2015-08-25 1 views
1

Je tente d'établir une communication via USB HID avec un Arduino Leonardo en utilisant C# sur Windows 10. J'ai pu énumérer et récupérer l'objet HidDevice mais je ne peux pas recevoir de données.Windows 10: Communication HID en 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); 

Cette méthode de lecture est ce que les articles MSDN utilisés aussi bien, mais il ne me donner aucun résultat. Si quelqu'un a un aperçu de ce que je pourrais faire de différent ou de mal, ce serait très apprécié!

EDIT: Il suffit d'ajouter un peu plus d'informations ici, j'ai installé un événement pour déclencher la réception du InputReport, et l'événement se déclenche à l'intervalle de jeu que je vous envoie des messages de l'Arduino qui me porte à croire qu'il est le paquet/message/données correct. Le seul problème est que ces données sont toujours vides, même si j'ai vérifié qu'un message réel non nul est envoyé.

Répondre

0

J'ai réussi à comprendre cela finalement et il y a quelques bizarreries. La façon dont j'ai réussi à faire fonctionner cela était avec ce qui précède, mais mes données n'étaient pas là où je m'attendais initialement. Après avoir trouvé mon appareil, j'attaché un événement InputReceived qui ressemble à ceci:

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); 
    } 

Cela devrait vous faire passer un message de chaîne lisible par l'homme à partir de votre appareil.

Un bit supplémentaire à compter du 22/09/2015 est que lors du déploiement de votre application universelle dans le magasin, votre fichier appxmanifest écrase le contenu, ce qui signifie que votre application déployée n'aura PAS accès à votre appareil. Je l'ai signalé le bug, il a été reconnu par Microsoft et devrait être corrigé avec la prochaine mise à jour de Visual Studio 2015.

Edit: Bonne vidéo va dans beaucoup de détails - https://channel9.msdn.com/Events/Build/2013/2-924b