Bonjour à tous.

Je souhaiterais lire et écrire sur le port rs232 d'un lecteur de carte phoenix en mode asynchrone.

Pour la partie lecture, j'ai réussi grace à un post de shinning, merci à lui.

Voici d'ailleur le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function IGetBuffer(Count : Integer):String;
    var
    Buffer : array[0..255] of byte;
    I : Integer;
    S : String;
    begin
      Form1.ComPort1.Read(Buffer, Count);
      S:= '';
      for I := 0 to Count - 1 do
      //Inversion binaire avec NOT puis Swap pour asynchrone
      S := S + IntToHex(ReverseByte(NOT Buffer[I]),2)+ ' ';
      result := TrimRight(S);
    end;
 
function ReverseByte(const X : byte) : byte ;
    const A : array [$0..$F] of byte =
      ($0,$8,$4,$C,$2,$A,$6,$E,$1,$9,$5,$D,$3,$B,$7,$F) ;
    begin
      ReverseByte := (A[X and $0F] shl 4) or (A[X shr 4])
    end ;
Par contre pour l'écriture, je ne m'en sors pas.
J'arrive à écrire quelque chose mais la valeur en retour n'est pas bonne.

Voici le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function WriteBuffer(Buffer : string): Boolean; 
// Données hexa exemple 'de0002ca00'
  var
  B : Byte;
  CmdLen : byte;
  i : integer;
 
  begin
    CmdLen := Length(Buffer);
    i:=1;
    while i < CmdLen do
    begin
      B := strtoint('$'+(Buffer[i])+(Buffer[i+1]));
      Form1.ComPort1.Write(B, 1);
      Form1.ComPort1.Read (B, 1);
      i := i+2;
      Sleep(50);
    end;
    Sleep(250);
end;
Dois-je aussi swaper et inverser les bytes en écriture?

Je vous remercie d'avance pour votre aide.