www.mikrocontroller.net

Forum: Compiler & IDEs Chipkartenleser mit CT-API unter Linux


Autor: Alex G. (alex94) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mal wieder ein Problem, klar sonst würde ich hier nicht posten 
:)
Mein Problem ist folgendes: Ich habe mir den 5€ Chipkartenterminal von 
Pollin zugelegt. Diesen möchte ich jetzt unter Linux mithilfe der CT-API 
ansteuern. Eine entsprechende CT-API linux library gibt es von Kobil.
Im Anhang befindet sich das Header file der Library. Im Internet gibt es 
mehrere Dokumente die die drei Funktionen der CT-API beschreiben(im 
Anhang ctapi11.pdf). Diese drei Funktionen sind auch in der Linux 
Library vorhanden.
Ich habe mir mal ein kleines Testprogramm in C geschrieben das den Leser 
initialisiert, ein Kommando an die Chipkarte schickt und dann den Leser 
wieder beendet. Komischerweise klappt das Initalisieren und das Beenden 
des Lesers einwandfrei (Die LED am Leser geht an und aus) nur beim 
senden des Kommandos tut sich nichts, kein Response rein garnichts.

Das hier ist mein Testprogramm:
...
#include <ct_api.h> 

int main() {

unsigned char response[300];
char res;
unsigned short int ctn,lenr;
unsigned char sad, dad;
unsigned char command[300];
unsigned int lenc;
unsigned short int lengthresponse = 500;
unsigned short int lengthdata = 500;
lenc = 5;

command[0]=0x20;
command[1]=0x12;
command[2]=0x01;
command[3]=0x00;
command[4]=0x00;


CT_init(1,1);

ctn = 1;
lenr = 300;
sad = 0x00;
dad = 0x02;

res=CT_data(1, &dad, &sad, lengthdata, "Data", &lengthresponse, response);

CT_close(1);

printf("\nRESPONSE:\n%s",response);
printf("\nRES:%c",res);
}

Zum kompilieren benutze ich folgenden Befehl:
$ gcc -Iinclude -Llib -o smarti smarti.c -lct -lm
Die Lib heißt libct.so

Laut der Header datei müsste die Funktion CT_data einen Wert 
zurückgeben,
OK oder ein Error. Doch leider ist der Rückgabewert res nur ein paar 
kryptische zeichen, die sich in jedem Durchlauf ändern. Auch response
ist nur nicht verwertbarer Müll.

Ich hoffe ihr könnt mir helfen.

Grüße
Alex

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll res wirklich ein char sein?

Autor: Ein Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probier mal printf("res = %d\n", res);

Autor: Alex G. (alex94) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> probier mal printf("res = %d\n", res);
vielen Danke so bekomme ich wenigstens eine gescheite Rückgabe,
ich bekomme immer eine null als Rückgabe, null bedautet so viel wie OK.
Aber der chipkartenleser wir dadurch immer noch nicht richtig 
angesprochen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.