#include <ctapi.h>
int main(void)
{
unsigned char sad, dad; /* Sender- und Empfänger-Adresse */
unsigned short ctn, /* Terminal Nummer */
lenc, /* Länge Kommand-APDU */
lenr, /* Länge Antwort-APDU */
pn; /* Port Nummer */
char ret; /* Rückgabewert */
unsigned char response[90]; /* Puffer für Antwort-APDU */
unsigned short int trailer; /* Antwort Trailer */
/* CLA INS P1 P2 Lc */
unsigned char REQUEST_ICC[] = {0x20, 0x12, 0x01, 0x00, 0};
/* Initialisierung des Terminals */
ctn = 0; /* Verbindungs Nummer */
pn = 1; /* /dev/ttyS1 */
ret = CT_init(ctn,pn);
if (ret!=OK)
{
printf("Terminal konnte nicht initialisiert werden\n");
exit(1);
}
/* Transaktion vorbereiten */
sad = HOST; /* Sender */
dad = CT; /* Empfänger: Terminal */
lenc = sizeof(REQUEST_ICC); /* Puffergröße für Kommando-APDU ermitteln */
lenr = sizeof(response); /* Puffergröße für Antwort-APDU ermitteln */
/* Transaktion ausführen um Kartentyp ermitteln */
ret = CT_data(ctn, &dad, &sad, lenc, REQUEST_ICC, &lenr, response);
if (ret!=OK)
{
printf("Transaktion fehlgeschlagen!\n");
exit(1);
}
trailer = (response[0]<<8) + response[1]; /* Trailer aus SW1 und SW2 zusammensetzen */
switch(trailer)
{
case 0x9000 : printf("[synchrone ICC] Speicherkarte eingelegt\n");
break;
case 0x9001 : printf("[asynchrone ICC] Prozessorkarte eingelegt\n");
break;
case 0x6200 : printf("keine Karte eingelegt\n");
break;
case 0x6201 : printf("Karte anderweitig in Benutzung\n");
break;
case 0x6400 : printf("Reset der Karte ohne Erfolg\n");
break;
case 0x6900 : printf("Timer-Kommando wird nicht unterstützt\n");
break;
default : printf("Unbekannter Fehler\n");
break;
}
ret = CT_close(ctn); /* Verbindung auflösen */
}