Delphi-PRAXiS
Seite 6 von 7   « Erste     456 7      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Smartcard auslesen, Kommandos senden (https://www.delphipraxis.net/164316-smartcard-auslesen-kommandos-senden.html)

Bummi 9. Nov 2011 18:08

AW: Smartcard auslesen, Kommandos senden
 
Dann bau sie aus ...

newuser01 9. Nov 2011 18:50

AW: Smartcard auslesen, Kommandos senden
 
Zitat:

Zitat von Bummi (Beitrag 1135357)
Dann bau sie aus ...

kleiner Tipp?

Und zwei mal hinternander erst atr und dann serial übergeben geht nicht in ComPortRxChar. Wie kann ich das realisieren? Kann ich nicht ComPort.ReadStr im Button verwenden und erst das eine zb. ATR dann das andere zb. Serial ausgeben? usw.

Delphi-Quellcode:

ComPort.ReadStr(s,Count);
FInBuffer := FInBuffer + s; // globale variable
e_atr.Text := Hexit(FInBuffer);

ComPort.ReadStr(s,Count);
FInBuffer := FInBuffer + s; // globale variable
e_serial.Text := Hexit(FInBuffer);

Bummi 9. Nov 2011 18:56

AW: Smartcard auslesen, Kommandos senden
 
Zitat:

kleiner Tipp?
hier einfach + '$' und gegf. +' ' rausnehmen?
Delphi-Quellcode:
Function Hexit(const s:AnsiString):String;
var
 i:Integer;
begin
 Result := '';
 for I := 1 to Length(s) do Result := Result +'$' +IntToHex(Byte(s[i]),2) +' ';
end;
in #21 hatte ich geschrieben

Zitat:

InterpretInbuffer; // Eine Prozedur die den Puffer auswertet, komplette Nachrichten extrahiert, aus dem Puffer entfernt und verarbeitet
so würde ich es machen ...

newuser01 9. Nov 2011 19:18

AW: Smartcard auslesen, Kommandos senden
 
Zitat:

Zitat von Bummi (Beitrag 1135371)
Zitat:

kleiner Tipp?
hier einfach + '$' und gegf. +' ' rausnehmen?
Delphi-Quellcode:
Function Hexit(const s:AnsiString):String;
var
 i:Integer;
begin
 Result := '';
 for I := 1 to Length(s) do Result := Result +'$' +IntToHex(Byte(s[i]),2) +' ';
end;
in #21 hatte ich geschrieben

Zitat:

InterpretInbuffer; // Eine Prozedur die den Puffer auswertet, komplette Nachrichten extrahiert, aus dem Puffer entfernt und verarbeitet
so würde ich es machen ...

das mit den '$' hat schon mal geklappt :thumb:

InterpretInbuffer meinst du so?

Delphi-Quellcode:
procedure Tfrm_main.InterpretInbuffer;
var
     i:Integer;
     part:AnsiString;
begin
     i := Pos(#10,FInBuffer);
     Memo1.Lines.Add(FInBuffer);
     while i>0 do
        begin
           Part := Copy(FInBuffer,1,i-1);
           FInBuffer := Copy(FInBuffer,i+1,Length(FInBuffer));
           Memo2.Lines.Add(Part);
           i := Pos(#10,FInBuffer);
        end;
end;
und dann so

Delphi-Quellcode:
procedure Tfrm_main.ComPortRxChar(Sender: TObject; Count: Integer);
var
s:AnsiString;
begin

ComPort.ReadStr(s,Count);
FInBuffer := FInBuffer + s; // globale variable
InterPretInbuffer;

end;
Wird aber dann in im Memo1 blos das:

Delphi-Quellcode:
;Ÿ!IRDETO ACS
;Ÿ!IRDETO ACS„Uÿ€m
angezeigt. Kannst du das ein bischen erklären mit den InterPretInbuffer ?


Nachtrag: Hexausgabe hab ich berichtigt, wenns so korrekt ist ;-)
Delphi-Quellcode:
procedure Tfrm_main.InterpretInbuffer;
var
     i:Integer;
     part:AnsiString;
begin
     i := Pos(#10,Hexit(FInBuffer));
     Memo1.Lines.Add(Hexit(FInBuffer));
     while i>0 do
        begin
           Part := Copy(Hexit(FInBuffer),1,i-1);
           FInBuffer := Copy(Hexit(FInBuffer),i+1,Length(Hexit(FInBuffer)));
           Memo1.Lines.Add(Part);
           i := Pos(#10,Hexit(FInBuffer));
        end;
end;

newuser01 9. Nov 2011 19:49

AW: Smartcard auslesen, Kommandos senden
 
jetzt wird im Memo1 der ATR so ausgegeben

3B 9F 21 0E 49 52 44 45 54 4F 20 41 43 53
3B 9F 21 0E 49 52 44 45 54 4F 20 41 43 53 03 84 55 FF 80 6D

Ich bekomm noch graue Haare. Und wenn ich noch ein ComPort.WriteStr nach dem Kartenreset hinzugüge dann würfelt der mir alles durcheinander :(

newuser01 9. Nov 2011 20:15

AW: Smartcard auslesen, Kommandos senden
 
ich hab jetzt mal ein ein sleep benutzt

Delphi-Quellcode:
//Kartenreset
ComPort.FlowControl.ControlRTS := rtsEnable;
ComPort.FlowControl.ControlRTS := rtsDisable;
ComPort.FlowControl.ControlDTR := dtrEnable;
ComPort.FlowControl.ControlDTR := dtrDisable;

sleep(500);
jetzt wird der ATR in Memo1 in der ersten zeile Memo.Lines.strings[0]angezeigt. Das Sleep bewirkt bestimmt sowas wie ein Delay damit die Karte genug Zeit hat zum antworten denn ComPortRxCharist ja nehme ich zumindest mal an, ständigg auf die Lauer ob was rein kommt. Und wenns zu schnell kommt, kommen die nächsten Daten zack in die nächste zeile oder? liege ich da falsch?

totti14 9. Nov 2011 20:25

AW: Smartcard auslesen, Kommandos senden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi newuser01,
was hast Du vor :?

Soll das so aussehen wir bei mir :)

newuser01 9. Nov 2011 20:28

AW: Smartcard auslesen, Kommandos senden
 
Zitat:

Zitat von totti14 (Beitrag 1135393)
Hi newuser01,
was hast Du vor :?

Soll das so aussehen wir bei mir :)


ja genau, du weist schon was ich will :-D auslesen und CMDs senden

newuser01 9. Nov 2011 20:29

AW: Smartcard auslesen, Kommandos senden
 
Bei ComPort.WriteStr sieht egal ob ich sleep eintrage oder nicht die Ausgabe immer so auch in Memo1 = 4 Zeilen

Delphi-Quellcode:
procedure Tfrm_main.btn_readcardClick(Sender: TObject);
begin

ComPort.Port := 'COM2';
ComPort.BaudRate := br9600;
ComPort.DataBits := dbEight;
ComPort.Parity.Bits := prEven;
ComPort.StopBits := sbOneStopBit;

sleep(500);

ComPort.WriteStr(#$01#$02#$00#$00#$00#$00#$3C);
Memo1 Ausgabe

01 02 00 00 00 00 3C
01 02 00 00 00 00 3C 01 02 00 00 00 00 00 14 30 32 36 37 32 32
01 02 00 00 00 00 3C 01 02 00 00 00 00 00 14 30 32 36 37 32 32 32 34 31 35 00 00 00 00 00 00 00 00 00 00
01 02 00 00 00 00 3C 01 02 00 00 00 00 00 14 30 32 36 37 32 32 32 34 31 35 00 00 00 00 00 00 00 00 00 00 29

newuser01 9. Nov 2011 20:32

AW: Smartcard auslesen, Kommandos senden
 
welche Komponente benutzt du @totti ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Seite 6 von 7   « Erste     456 7      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz