Support für O2Micro OZ776 unter Windows Vista x64?

Bei Problemen / Fragen zu Chipkarten oder Kartenlesern sind Sie hier richtig
Antworten
Jtb
Beiträge: 8
Registriert: Mi 22. Nov 2006, 21:12

Support für O2Micro OZ776 unter Windows Vista x64?

Beitrag von Jtb »

Hi,

ich habe ein neues Notebook (Dell Latitude D830) und Dell liefert zwar Treiber für den Smartcard-Reader (O2Micro OZ776) aber in dem Treiberpaket ist keine CT-API DLL :(

Die 32-bit ct32.dll aus dem Treiber für Vista x86 funktioniert leider nicht.
Dell-Support habe ich schon angetriggert, aber ich weiß nicht ob da was rauskommt.

Gibt es die Möglichkeit eine CT-API DLL von woanders zu bekommen? Oder ist die Hersteller-spezifisch?
Benutzeravatar
ALF
Site Admin
Beiträge: 12437
Registriert: Do 9. Okt 2003, 14:21
Wohnort: Leingarten

Beitrag von ALF »

Hallo,

Sie benötigen in der Regel eine spezifische CT-API-DLL.

Falls Sie keine CT-API für Ihren Leser bekommen, so melden Sie sich bitte über unser Support-Center.
Evtl. können wir Ihnen weiterhelfen.

MfG
ALF
ckudritzki
Beiträge: 1
Registriert: Do 7. Feb 2008, 20:17

Gibt es überhaupt eine CT-API für Vista

Beitrag von ckudritzki »

Dear all,

in Anlehnung an den vorigen Beitrag, bin ich unter Vista 32-bit nicht in der Lage eine CT-API auf meinem Rechner hinzubasteln, die Alf und meinem Leser gerecht wird. Auch setze ein Dell LAT D630 mit OZ776 ein.

Wenn es für 64-bit eine Lösung gäbe, müsste das für 32-bit fast einfacher sein. Hat jemand von Euch Erfahrung?
Gruß
Carsten
Jtb
Beiträge: 8
Registriert: Mi 22. Nov 2006, 21:12

Beitrag von Jtb »

Hallo ckudritzki,

ich habe mir gerade testweise wieder ein 32bit System installiert - und der Reader funktionierte auch nicht :(

Irgendwas muss an der ct32.dll nicht stimmen. Die DLL wird als CTAPI erkannt aber bei der Suche nach dem Port kommt kein Ergebnis :(
Markus
Beiträge: 5
Registriert: Mi 13. Feb 2008, 10:31

Beitrag von Markus »

Hallo,
ich habe das selbe Problem mit einem Dell D630 unter WinXP 32 Bit.

Die DLL wird auch bei mir als CTAPI erkannt, aber es wird kein Port gefunden.
Jtb
Beiträge: 8
Registriert: Mi 22. Nov 2006, 21:12

Beitrag von Jtb »

Es scheint also generelles Problem mit der CT32.dll zu sein.
Ich schreibe mal eine Support-Mail...
Markus
Beiträge: 5
Registriert: Mi 13. Feb 2008, 10:31

Beitrag von Markus »

CT_init(0, 0) der ct32.dll behauptet das es erfolgreich war.
Was man CT_data übergeben soll weiß ich aber nicht.
Wenn ich hier noch irgendwas testen soll, mache ich das gerne.

Gruß Markus
Jtb
Beiträge: 8
Registriert: Mi 22. Nov 2006, 21:12

Beitrag von Jtb »

Markus hat geschrieben:CT_init(0, 0) der ct32.dll behauptet das es erfolgreich war.
Was man CT_data übergeben soll weiß ich aber nicht.
Wenn ich hier noch irgendwas testen soll, mache ich das gerne.


dann pack ich mal mein Proekt aus Smartcard-Systeme aus:

Code: Alles auswählen

#define CLA      0
#define INS      1
#define P1      2
#define P2      3
#define LC      4

/// Quell- und Zieladressen für Kommandos an der CT-API-Schnittstelle
#define CT      0x01
#define HOST   0x02
#define ICC1   0x00
#define ICC2   0x02
#define ICC3   0x03
#define ICC4   0x04
#define ICC5   0x05
#define ICC6   0x06
#define ICC7   0x07
#define ICC8   0x08
#define ICC9   0x09
#define ICC10   0x0a
#define ICC11   0x0b
#define ICC12   0x0c
#define ICC13   0x0d
#define ICC14   0x0e

IU8 dad, sad;
IU8 cmd[256];
IU8 resp[256];
IU16 i, lenc, lenr;

// CT_INIT


    // REQUEST ICC
   dad =   CT;
   sad =   HOST;
   cmd[CLA] =         0x20;
   cmd[INS] =         0x12;
   cmd[P1] =         0x01;
   cmd[P2] =         0x01;
   cmd[LC] =         0x01;
   cmd[5] =         0x0a; // waiting time
   cmd[5+cmd[LC]] =   0x00;
   lenc =   (IU16)(5 + cmd[LC] + 1);
   lenr =   256;
   printf("Please insert card\n");
   if (CT_data(ctn, &dad, &sad, lenc, cmd, &lenr, resp) != OK) {
      printf("CT_data failed\n");
       return;
   }
    printf("Antwort: ");
    for (i = 0; i < lenr; i++)
        printf("%02X ", resp[i]);
    printf("\n");


Du musst den Code ein wenig überarbeiten ;)


Ansonsten habe ich auch eine Rückmeldung vom Support: Alf Banco v3 soll PS/SC unterstützen - dann braucht man nicht mehr die CTAPI :D
Allerdings ist die Version noch in Entwicklung und es gibt noch keine Beta...
Markus
Beiträge: 5
Registriert: Mi 13. Feb 2008, 10:31

Beitrag von Markus »

Ich kann als ctn und pn übergeben was ich will,
die Antwort lautet immer 0x00 0x00 0x00.
Auch wenn keine Chipkarte im Lesegerät ist.

Alle Funktionen kehren aber auch immer mit OK zurück.
Irgendwas stimmt mit der Dll nicht, würde ich sagen.
Jtb
Beiträge: 8
Registriert: Mi 22. Nov 2006, 21:12

Beitrag von Jtb »

Markus hat geschrieben:Ich kann als ctn und pn übergeben was ich will,
die Antwort lautet immer 0x00 0x00 0x00.
Auch wenn keine Chipkarte im Lesegerät ist.

Alle Funktionen kehren aber auch immer mit OK zurück.
Irgendwas stimmt mit der Dll nicht, würde ich sagen.


mmh, CT_INIT braucht keine Karte.
Aber vielleicht sollte man sich die dll wirklich mal genauer anschauen..
Markus
Beiträge: 5
Registriert: Mi 13. Feb 2008, 10:31

Beitrag von Markus »

Ich habe mich schlecht ausgedrückt.

0x00 0x00 ist die Antwort von CT_data mit den Werten aus deinem Code. Der Aufruf kehrt auch sofort erflogreich zurück, mit und ohne Karte.

CT_init liefert immer OK, egal was für eine pn ich wähle.

Entweder mache ich etwas grundsätzlich falsch, oder die ct32.dll funktioniert einfach nicht richtig.

Code: Alles auswählen

from ctypes import *

ctn = c_ushort(0)
pn = c_ushort(0)

print windll.ct32.CT_init(ctn, pn)

dad = c_ubyte(0x01)
sad = c_ubyte(0x02)

lenc = c_ushort(7)
commandType = c_ushort * 7
command = commandType(
                        0x20,
                        0x12,
                        0x01,
                        0x01,
                        0x01,
                        0x0a, # waiting time
                        0x00
                       )

lenr = c_ushort(256)
responseType = c_ubyte * 256
response = responseType()

print windll.ct32.CT_data(ctn, dad, sad, byref(lenc), command, byref(lenr), response)
for i in range(lenr.value):
    print "0x%02x" % response[i],
print

print windll.ct32.CT_close(ctn)


Das ist der PythonCode mit dem ich teste mit der Ausgabe.

Code: Alles auswählen

0
0
0x00 0x00
0
Markus
Beiträge: 5
Registriert: Mi 13. Feb 2008, 10:31

Beitrag von Markus »

die Zeile

Code: Alles auswählen

print windll.ct32.CT_data(ctn, dad, sad, byref(lenc), command, byref(lenr), response)

muss

Code: Alles auswählen

print windll.ct32.CT_data(ctn, byref(dad), byref(sad), lenc, command, byref(lenr), response)
heissen.

Die CT-API liefert aber trotzdem kein anderes Ergebnis.
Dafür funktioniert die Datei nun mit einem Reiner SCT pinpad wenn man die dll austauscht.
Antworten