Jump to content
Abschaltung Forum zum 03.01.2024 ×

beyondbytes

Members
  • Gesamte Inhalte

    5
  • Benutzer seit

  • Letzter Besuch

Beiträge erstellt von beyondbytes

  1. Es gibt ja noch die Möglichkeit zur Ansteuerung über PC/SC alternativ zur CT-API.

    Aber ich bin schon etwas weiter gekommen mit der CT-API.

    Beim Ausführen der Methode GetCardMonStatus() erhalte ich den Fehler "Tag 80". Was bedeutet das?

    Bevor jemand fragt: Das Kartenlesegerät ist angeschlossen und es steckt eine Versichertenkarte drin.

    Der Fehler tritt hier auf (siehe Kommentar im Code):

    Const CT_DEST_CARD = 0
    Const CT_DEST_CT = 1
    Const CT_DEST_APPLICATION = 2
    
    Declare Function init Lib "Ctrsct32" Alias "CT_init" (ctn As UInt16, pn As UInt16) As Int8
    Declare Function data Lib "Ctrsct32" Alias "CT_data" (ctn As UInt16, ByRef dad As Int8, ByRef sad As Int8, lenc As UInt16, command As Ptr, ByRef lenr As UInt16, response As Ptr) As Int8
    Declare Function close1 Lib "Ctrsct32" Alias "CT_close" (ctn As UInt16) As Int8
    
    Var Dad As Int8 = CT_DEST_CT
    Var Sad As Int8 = CT_DEST_APPLICATION
    Var nRelevantByte As Integer = 0
    
    Var Cmd As New MemoryBlock(5)
    Cmd.Int8Value(0) = &h20
    Cmd.Int8Value(1) = &h13
    Cmd.Int8Value(2) = &h00
    Cmd.Int8Value(3) = &h80
    Cmd.Int8Value(4) = &h00
    Var Lc As UInt16 = Cmd.Size
    
    Var Rsp As New MemoryBlock(65535)
    Var Lr As UInt16 = Rsp.Size
    
    Var nRet As Integer = -1
    
    nRet = data(1, Dad, Sad, Lc, Cmd, lr, Rsp)
    
    If nRet < 0 Then
      Return "error nret < 0"
    End If
    
    If Lr < 3 Then
      return "error lr < 3"
    End If
    
    If CType((Rsp.Int8Value(lr - 2) * &h0100) + (Rsp.Int8Value(Lr - 1)), UInt16) <> &h9000 Then
      Return "error h0100"
    End If
    
    Select Case Lr
    Case 3
      nRelevantByte = 0
    Case 4
      nRelevantByte = 0
    Case 5
      If ((Rsp.Int8Value(0) <> &h80) Or (Rsp.Int8Value(1) <> &h01)) Then
        return "error h80" // hier tritt der Fehler auf
      End If
      nRelevantByte = 2
    Else
      Return "error default case"
    End Select
    
    If CType(rsp.Int8Value(nRelevantByte) And 1, Boolean) Then
      return "Card inserted"
    Else
      return "Card released"
    End If

     

  2. Hallo René,

    ich verwende nun in meinem Projekt CTAPI.

    Declare Function init Lib "Ctrsct32" Alias "CT_init" (ctn As UInt16, pn As UInt16) As Int8
    Declare Function data Lib "Ctrsct32" Alias "CT_data" (ctn As UInt16, ByRef dad As Int8, ByRef sad As Int8, lenc As UInt16, command As Ptr, ByRef lenr As UInt16, response As Ptr) As Int8
    Declare Function close1 Lib "Ctrsct32" Alias "CT_close" (ctn As UInt16) As Int8
    
    Var value_init As Int8
    Var value_close As Int8
    Var value_data As Int8
    
    Try 
      value_init = init(1,1)
      If value_init = 0 Then
        MessageBox("success")
        
      Else
        MessageBox(value_init.ToString)
      End If
    Catch e As FunctionNotFoundException
      MessageBox(e.Message)
    End Try
    
    value_close = close1(1)

    Ich nehme an, dass der Rückgabewert 0 der Funktion CT_init bedeutet, dass die Initialisierung erfolgreich war. Ist das korrekt?

    Ansonsten frage ich mich, wie man die Funktion CT_data verwendet? Zu der Funktion CT_data steht in der Doku nur eine kurze Beschreibung. Das hilft mir aber in dem Fall nicht so viel weiter.

    Ich möchte Krankenkassen Chipkarten auslesen. Dazu gibt es von der Gematik ein PDF-Dokument: https://www.dkgev.de/fileadmin/default/Mediapool/2_Themen/2.1_Digitalisierung_Daten/2.1.5._Telematik-Infrastruktur/2.1.5.2_Einfuehrung_und_Betrieb/2013_11_06_364_eGK_Veroeffentlichung_Dokuaenderungen.pdf

    Vielleicht übersehe ich da auch etwas, würde mich freuen, wenn man mir dazu etwas sagen kann.

×
×
  • Neu erstellen...

Wichtige Information

Diese Website verwendet Cookies – nähere Informationen dazu und zu Ihren Rechten als Benutzer finden Sie in unserer Datenschutzerklärung am Ende der Seite. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und direkt unsere Website besuchen zu können.