Le premier site francophone dédié au développement Pocket PC


 
   

Contourner le bug du contrôle liaison série de eVB

Le contrôle liaison série de eVB semble très mal fonctionner lorsqu'on l'utilise avec l'IRDA. En effet, il envoie bien les données mais impossible de recevoir les réponses, le buffer d'entrée reste désespérément vide. Ce problème a été plusieurs fois évoqué sur le forum eVB de .

Une petite DLL pour contourner le problème : VBSerial.dll

J'ai donc décidé de créer une petite DLL pour contourner le problème. Cette DLL fonctionne parfaitement avec l'IRDA mais pour le moment a des problèmes avec les ports com classiques (c'est un comble non ?). Je publie qu'en même la DLL dans cette version pour que ceux qui ont le problème avec l'IRDA puissent commencer à l'utiliser en attendant la version finale (appauvrie en bugs).

4 fonctions et c'est tout

Cette DLL publie 4 fonctions que l'on déclare sous eVB de la manière suivante :

Declare Function SerialOpen Lib "VBSerial.dll" (ByVal pPort As String, ByVal pBaudRate As Long, ByVal pParity As String, ByVal pStopBits As String) As Boolean

Declare Function SerialClose Lib "VBSerial.dll" () As Boolean

Declare Function SerialWrite Lib "VBSerial.dll" (ByVal wOutput As String) As Boolean

Declare Function SerialRead Lib "VBSerial.dll" (ByVal wBuffer As String, ByVal wMaxSize As Long) As Boolean

Declare Function SerialInBufferCount Lib "VBSerial.dll" (ByRef wSize As Long) As Boolean

SerialOpen

Il faut utiliser cette fonction pour ouvrir le port de communication. Elle retourne True si la fonction arrive à ouvrir le port avec les paramètres demandés.

Cette fonction prend 4 paramètres :

Paramètre
En clair c'est quoi ?
Valeurs possibles
pPort Port à ouvrir "COM1:" ou "COM2:" ou "COM3:" etc...
pBaudRate Vitesse de connexion 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200, 128000, 256000
pParity Parité à utiliser "N" pour pas de parité, "E" pour paire, "M" pour mask, "S" pour space, "O" pour impaire.
pStopBits Nombre de bits de stop "1" ou "1.5" ou "2"

SerialClose

Lorsque vous avez terminé d'utiliser le port série ouvert avec la fonction "SerialOpen", il faut le fermer. Cette fonction ne prend pas de paramètre. Elle retourne True si la fermeture est possible.

SerialRead

Cette fonction permet de lire le contenu du buffer d'entrée. Si il n'y a rien à lire la chaine placée en entrée n'est pas modifiée. Si la lecture est possible cette fonction retourne True.

Paramètre
En clair c'est quoi ?
wBuffer Chaine devant recevoir le contenu du buffer d'entrée.
wMaxSize Nombre de caractères à transférer au maximum

Il est important de signaler que wBuffer doit être "préchargé" afin d'allouer assez de place mémoire avant de l'utiliser comme paramètre de cette fonction :

Dim wBuffer As String
Dim k As Integer
         
 wBuffer = String(1000, Chr(0))
 If SerialRead(wBuffer, 1000) Then
  k = InStr(wBuffer, Chr(0))
  If k > 0 Then wBuffer = Mid(wBuffer, 1, k - 1)
  If wBuffer <> "" Then MsgBox wBuffer
End If


SerialWrite

Cette fonction permet d'envoyer des caractères sur la liaison série. Il suffit de passer en paramètres la chaine à envoyer. Si l'écriture réussit elle retourne True.

En cas de problèmes

N'hésitez pas à utiliser les services du forum dédié aux DLLs pour eVB si vous rencontrez des problèmes avec cette DLL ou sa mise en oeuvre.

 

Sources eVC++ de VBSerial.dll
Sources eVB du programme d'exemple.

VBSerial.dll pour processeur ARM

Stéphane Sibué

 
       
   
 
   
Copyright 2001-2004 - Tous droits réservés
 
   

iPAQ est un produit de COMPAQ.
Visual Tools est un produit de Microsoft Corporation.
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.