Bienvenu(e)! Identification Créer un nouveau profil

Recherche avancée

synchronisation data HID ?

Envoyé par sniper59 
synchronisation data HID ?
vendredi 16 septembre 2011 18:28:56
bonjour a tous,

dans mon projet, j'envoie des data par usb sur un périphérique HID
j'arrive parfaitement à envoyer et à recevoir les données
j'utilise mchid.dll et mcHIDInterface.vb pour mon appli

seulement maintenant je voudrais synchroniser l'ensemble
ex :
envoie data1
attente ack
envoie data2
attente ack
etc...

mais helas, j'y arrive pas, j'ai tenté une boucle while avec l'utilisation d'un flag
mais lorsque je fais ça, je ne reçois plus aucun ack

si je n'utilise pas cette boucle, les ack arrivent sans probleme, mais j'ai vraiment besoin de savoir par l'ack si la trame que j'ai envoyé a été bien éxecuter (le pic derriere effectue differentes fonctions)

une petite aide serait la bienvenue , merci

voila mon code:
pour l'envoie
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim testboucle As Integer
 
        ' RESET
        Commande_PC = Asc("R" )
        BufferOut(0) = 0
        BufferOut(1) = Asc("R" )
        BufferOut(2) = Asc("E" )
        BufferOut(3) = Asc("S" )
        BufferOut(4) = Asc("E" )
        BufferOut(5) = Asc("T" )
        BufferOut(6) = Asc(" " )
        hidWriteEx(VendorID, ProductID, BufferOut(0)) ' envoie la commande RESET au target
 
        While (reset_flag = 0)
        'attente que le reset se fasse ...
        End While
 
        ' FLASH
        BufferOut(0) = 0
        BufferOut(1) = Asc("F" )
        BufferOut(2) = Asc("L" )
        BufferOut(3) = Asc("A" )
        BufferOut(4) = Asc("S" )
        BufferOut(5) = Asc("H" )
        BufferOut(6) = Asc(" " )
        hidWriteEx(VendorID, ProductID, BufferOut(0)) ' envoie la commande FLASH au target
 
...
 
  End Sub


et pour la reception

Public Sub OnRead(ByVal pHandle As Integer)
        '*****************************************************************
        ' on read event...
        '*****************************************************************
        ' read the data (don't forget, pass the whole array)...
        If hidRead(pHandle, BufferIn(0)) Then
            ' ** YOUR CODE HERE **
            ' first byte is the report ID, e.g. BufferIn(0)
            ' the other bytes are the data from the microcontroller...
            If Commande_PC = Asc("R" ) Then
                    reset_flag = 1
                   ...
            End If
        End If
    End Sub

Re: synchronisation data HID ?
vendredi 16 septembre 2011 20:58:40
Salut,

Je suppose que OnRead s'appelle dès qu'il reçoit une trame USB. Je pense que ton probleme vient dans le fait que ta boucle while bouffe ton thread et que dès lors le programme ne passe jamais par OnRead().

Il faut dès lors que tu crées deux threads, mais je ne sais pas trop comment ça marche en VB.

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: synchronisation data HID ?
vendredi 16 septembre 2011 21:15:16
bonjour

oui c'est axactement ça mon probleme
une fois rentré dans la boucle while, l'appel a onread() ne se fait plus automatiquement angry smiley

si je lance un "monitor" maison de data hid, je reçois bien ma data , mais dans l'autre appli...

vait regarder du coté des threads... mais la c'est pas gagné, suis débutant en vb.net eye rolling smiley
Re: synchronisation data HID ?
mercredi 21 septembre 2011 06:20:05
De manière général, on ne met pas de while (reset_flag = 0) dans un programme de ce type, ou du moins pas dans la partie principale car tu bloques toute ton application.

Soit tu crées des threads, soit tu crées de nouvelles procédures qui seront appelées depuis OnRead. Et les conditions d'accès à cette procédure (si tu est en mode flash, apres un reset, ...) sont définies quand tu cliques sur ton bouton

A++

Benjamin

.: [www.roboticus.org] :. Control your own world !
Re: synchronisation data HID ?
mercredi 21 septembre 2011 06:20:06
De manière général, on ne met pas de while (reset_flag = 0) dans un programme de ce type, ou du moins pas dans la partie principale car tu bloques toute ton application.

Soit tu crées des threads, soit tu crées de nouvelles procédures qui seront appelées depuis OnRead. Et les conditions d'accès à cette procédure (si tu est en mode flash, apres un reset, ...) sont définies quand tu cliques sur ton bouton

A++

Benjamin

.: [www.roboticus.org] :. Control your own world !
Seuls les utilisateurs enregistrés peuvent poster des messages dans ce forum.

Cliquez ici pour vous connecter