Ich habe vor ein paar Tagen mit Visual Basic 2010 angefangen
Ich dachte mir für den Anfang ein wenig mit meinem CardReader und ein paar SmartCards zu spielen.
Soweit so gut^^
Habe auch schon erste Erfolge verzeichnen können.
Das Ansteuern der seriellen Schnittstelle geht gut.
Nun zu meinem eigentlichen Problem und zu ein paar Fragen^^
Wenn ich über einen Reset der Karte den ATR angezeigt bekommen möchte stimmt noch etwas nicht
Es werden noch ein paar bytes falsch angezeigt.
Man sagte mir nun ich soll das mit einem Timer lösen.
Bekomme es nur nicht hin.
Hier mal mein Code:
Ja ich weiß die Buttons und Textfelder muss ich noch besser beschriften^^
Wie gesagt ich bekomme was angezeigt, aber beim ATR sind ein paar
bytes falsch und bei fast jedem Reset werden immer ein paar bytes
angezeigt, also es kommt auch nicht immer das gleiche Ergebnis.
Ich muss wohl einen Zwischen ReadExisting und der Umrechnung in HEX machen.
Auch wenn ich ein CMD an die Karte senden möchte ist die erwartetet Antwort nicht die, die kommen müsste und sie ist zu kurz.
Aber ich habe keinen Schimmer wie.
So dann noch eine Frage:
Wie lasse ich mir später aus einer Kartenanwort nur bestimmt Sachen anzeigen?
Mal als Beispiel wenn sie mit 01 12 23 45 56 78 89 0A 0B 0C 0E 0F antwortet möchte ich sagen wir mal nur:
35689ABCD angezeigt bekommen
Und nun die vorerst letzte Frage^^
Hier wird eine Checksum berechnet die am Ende jedes Strings mit zur Karte gesendet werden soll
Mache ich das später so?
Ich dachte mir für den Anfang ein wenig mit meinem CardReader und ein paar SmartCards zu spielen.
Soweit so gut^^
Habe auch schon erste Erfolge verzeichnen können.
Das Ansteuern der seriellen Schnittstelle geht gut.
Nun zu meinem eigentlichen Problem und zu ein paar Fragen^^
Wenn ich über einen Reset der Karte den ATR angezeigt bekommen möchte stimmt noch etwas nicht
Es werden noch ein paar bytes falsch angezeigt.
Man sagte mir nun ich soll das mit einem Timer lösen.
Bekomme es nur nicht hin.
Hier mal mein Code:
VB.NET-Quellcode
- Public Class Form1
- Dim TheHex As Object
- Dim a As Object
- Dim Final As Object
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 'Schnitstelle öffnen, Buttons freigeben und ATR auswerfen
- Try
- SerialPort1.PortName = TextBox28.Text
- SerialPort1.BaudRate = TextBox31.Text
- SerialPort1.Open()
- Button1.Enabled = False
- Button2.Enabled = True
- Button3.Enabled = True
- Button4.Enabled = True
- Button4.Enabled = True
- Button5.Enabled = True
- Button6.Enabled = True
- Button7.Enabled = True
- Catch ex As Exception
- MsgBox("Verbindung zum Reader konnte nicht hergestellt werden")
- End Try
- SerialPort1.RtsEnable = True
- SerialPort1.RtsEnable = False
- SerialPort1.DtrEnable = True
- SerialPort1.RtsEnable = False
- a = SerialPort1.ReadExisting()
- Final = ""
- For i = 1 To Len(a)
- TheHex = (Hex(Asc(Mid(a, i, 1))))
- If Len(TheHex) = 1 Then TheHex = "0" & TheHex
- Final = Final & TheHex + " "
- Next i
- TextBox1.Text = ("ATR: " + Final)
- End Sub
- Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
- ' Beenden und Schnittstelle schließen fals offen
- If SerialPort1.IsOpen = True Then
- SerialPort1.Close()
- End If
- End Sub
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- ' CMD test
- SerialPort1.Write(Chr(&H0) + Chr(&H1) + Chr(&H2) + Chr(&H3) + Chr(&H4) + Chr(&H5) + Chr(&H6))
- a = SerialPort1.ReadExisting()
- Final = ""
- For i = 1 To Len(a)
- TheHex = (Hex(Asc(Mid(a, i, 1))))
- If Len(TheHex) = 1 Then TheHex = "0" & TheHex
- Final = Final & TheHex + " "
- Next i
- TextBox14.Text = ("RX: " + Final)
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- ' Schnittstelle schließen und Buttons sperren
- SerialPort1.Close()
- Button1.Enabled = True
- Button2.Enabled = False
- Button3.Enabled = False
- Button4.Enabled = False
- Button4.Enabled = False
- Button5.Enabled = False
- Button6.Enabled = False
- Button7.Enabled = False
- End Sub
- Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
- ' Reset
- a = SerialPort1.ReadExisting()
- Final = SerialPort1.ReadExisting()
- For i = 1 To Len(a)
- TheHex = (Hex(Asc(Mid(a, i, 1))))
- If Len(TheHex) = 1 Then TheHex = "0" + TheHex
- Final = Final + TheHex + " "
- Next i
- SerialPort1.RtsEnable = True
- SerialPort1.RtsEnable = False
- SerialPort1.DtrEnable = True
- SerialPort1.RtsEnable = False
- TextBox1.Text = Final
- End Sub
- End Class
Ja ich weiß die Buttons und Textfelder muss ich noch besser beschriften^^
Wie gesagt ich bekomme was angezeigt, aber beim ATR sind ein paar
bytes falsch und bei fast jedem Reset werden immer ein paar bytes
angezeigt, also es kommt auch nicht immer das gleiche Ergebnis.
Ich muss wohl einen Zwischen ReadExisting und der Umrechnung in HEX machen.
Auch wenn ich ein CMD an die Karte senden möchte ist die erwartetet Antwort nicht die, die kommen müsste und sie ist zu kurz.
Aber ich habe keinen Schimmer wie.
So dann noch eine Frage:
Wie lasse ich mir später aus einer Kartenanwort nur bestimmt Sachen anzeigen?
Mal als Beispiel wenn sie mit 01 12 23 45 56 78 89 0A 0B 0C 0E 0F antwortet möchte ich sagen wir mal nur:
35689ABCD angezeigt bekommen
Und nun die vorerst letzte Frage^^
Hier wird eine Checksum berechnet die am Ende jedes Strings mit zur Karte gesendet werden soll
Mache ich das später so?