#include 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 */ }