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


von Alex G. (alex94) Benutzerseite


Angehängte Dateien:

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:
1
...
2
#include <ct_api.h> 
3
4
int main() {
5
6
unsigned char response[300];
7
char res;
8
unsigned short int ctn,lenr;
9
unsigned char sad, dad;
10
unsigned char command[300];
11
unsigned int lenc;
12
unsigned short int lengthresponse = 500;
13
unsigned short int lengthdata = 500;
14
lenc = 5;
15
16
command[0]=0x20;
17
command[1]=0x12;
18
command[2]=0x01;
19
command[3]=0x00;
20
command[4]=0x00;
21
22
23
CT_init(1,1);
24
25
ctn = 1;
26
lenr = 300;
27
sad = 0x00;
28
dad = 0x02;
29
30
res=CT_data(1, &dad, &sad, lengthdata, "Data", &lengthresponse, response);
31
32
CT_close(1);
33
34
printf("\nRESPONSE:\n%s",response);
35
printf("\nRES:%c",res);
36
}

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

von Peter (Gast)


Lesenswert?

Soll res wirklich ein char sein?

von Ein Gast (Gast)


Lesenswert?

probier mal printf("res = %d\n", res);

von Alex G. (alex94) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.