Lecture d'informations provenant du port COM 4

gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011 - 12 janv. 2007 à 17:44
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011 - 16 janv. 2007 à 10:02
Bonjour,


J'ai fait l'acquisition d'un système de vote (un récepteur Radio Frequency ainsi que plusieurs télécommandes) connecté en USB (COM 4 émulé).

Le vendeur propose un SDK, un fichier dll pour décoder le paquets qui arrivent par ce port. Et donne quelques faibles indications pour créer un programme en vb6 :
(http://www.h-itt.com/h-itt_manual_10.html)
 
Private Declare Function hitt_inspect Lib "H-ITTSDK.dll" (ByRef Bytes As Byte, id As Long, key_code As Long) As Long
' ....
Dim bytTest() As Byte
Dim lngId As Long
Dim lngKeyCode As Long
Dim lngReturn As Long
'....
' read from COM port into bytTest
' consult VB documentation for reading from COM port
lngReturn = hitt_inspect(bytTest(0), lngId, lngKeyCode)
'inspect lngReturn for success or failure

_____________________________________________________
J'ai réalisé mon propre petit programme, mais j'ai du mal à faire passer les infos qui arrivent dans la fonction, comme ils le préconisent  (erreur d'execustion 13 , type incompatible)

Private Declare Function hitt_inspect Lib "H-ITTSDK.dll" (ByRef Bytes As Byte, id As Long, key_code As Long) As Long
Dim tampon$



Private Sub Form_Load()
With MSComm1
.CommPort = 4
.Handshaking = 0
.RThreshold = 1
.RTSEnable = True
.Settings = "115200,n,8,1"
.SThreshold = 1
.InputMode = 1
.PortOpen = True
End With
End Sub



Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
      tampon$ = tampon$ & MSComm1.Input
End Select
End Sub



Private Sub Command1_Click
Dim bytTest() As Byte
Dim lngId As Long
Dim lngKeyCode As Long
Dim lngReturn As Long



Debug.Print tampon$ ' je récupère une chaîne de caractères qui, selon la touche appuyée, ressemble à ceci : ?à? àà??à???àà



lngReturn = hitt_inspect(bytTest(tampon$), lngId, lngKeyCode) ' l'erreur arrive ici
Debug.Print lngId ' je devrais pouvoir récupérer l'ID de la télécommande
Debug.Print lngKeyCode ' je devrais pouvoir récupérer la touche appuyée



tampon$ = ""
End Sub


Est-ce qu'à première vue je vais quelque chose qu'il ne faut pas ??? merci pour toute aide.

PS : j'ai demandé de l'assistance au vendeur du produit, mais elle n'arrive pas vite.....
Gribouillex

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
12 janv. 2007 à 18:05
oui, en fait c'est un tableau de byte que tu doit passer à ta fonction.

En fait il ne faut pas que tu lise une chaine de caractère sur le port COM, mais que tu remplisse ton tableau bytTest avec ces caractères.

Ensuite tu dois passer l'adresse de ton tableau à ta dll. L'adresse d'un tableau en VB se passe en passant le tout premier élément (bytTest(0)) du tableau par référence (byRef).

Alors soit tu modifie le code de lecture du port com pour remplir le tableau. Soit tu rajoute une boucle pour remplir le tableau à partir de ta variable tampon$.

Dans tous les cas, ton appel de la fonction doit etre ainsi :
lngReturn = hitt_inspect(bytTest( 0 ), lngId, lngKeyCode)

---- Sevyc64  (alias Casy) ----<hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 18:08
tampon$ est une chaîne de caractères !
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 18:09
Ah !

Salut Casy (croisés).
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 janv. 2007 à 18:13
Salut
Bah oui, type incompatible :
lngReturn = hitt_inspect(bytTest(tampon$), lngId, lngKeyCode)
bytTest(tampon$) --> L'index d'un tableau doit être un numérique, pas une chaine

En fait, ce qu'il te faut, c'est transformer ta chaine tampon$ en un tableau de 10 Bytes (d'après la doc)
ReDim bytTest(9)   ' Les index commencent à 0
For r = 0 To (Len(tampon$) - 1)
   bytTest(r) = Asc(Mid$(tampon$, r + 1, 1))
Next r

et fournir à la fonction l'info sous la forme indiquée dans la doc :
lngReturn = hitt_inspect(bytTest(0), lngId, lngKeyCode)

Donc, si tampon$ contient plus de 10 caractères, il faudra que tu refasses appel à la DLL pour les 10 caractères suivants jusqu'à épuisement --> mettre en pratique les fonctions de découpage/recherche sur chaine : Len, Left, Mid, Right, Instr ...

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
12 janv. 2007 à 18:25
Un peu de lecture pour Gribouillex :

http://www.di-mgt.com.au/bytearrays.html

Je n'ai pas trouvé en français, désolé !
0
gribouillex Messages postés 172 Date d'inscription lundi 10 octobre 2005 Statut Membre Dernière intervention 16 mai 2011
16 janv. 2007 à 10:02
Merci pour toutes ces réponses. J'ai appris beaucoup..
D'un autre côté, le developpeur de l'outil m'a donné quelques indications qui viennent corroborer vos remarques, si bien que maintenant, j'arrive à utiliser le matériel impeccablement.


 


Merci encore
0
Rejoignez-nous