Newsgroup: it.comp.lang.delphi
Titolo: Delphi e lettore Smartcard seriale.... come posso fare?

Ciao a tutti...
I have a reader of SC (Smart Card) ISO 7816..... that isn't compatible with
PC/SC Microsoft standard.... it's only a reader linked via serial port,
without driver etc (i made it... and it reads cards with a lot of software).
Ho un lettore di SmartCard ISO 7816 (uguali alle GSM, quelle delle pay-tv
ecc...) il mio lettore, autocostruito nn è compatibile con le librerie
Microsoft PC/SC in quanto nn ha ovviamente driver; è collegato alla seriale
direttamente e comunica con molti software x smanettare su SC.
Per usare la porta seriale in Delphi ho istallato un componente il ComPort
comport -> 
http://www2.arnes.si/~sopecrni/download.html
(Sto' usando D7)
Ho trovato q.cosa di utile riguardo alle api PC/SC, ma io devo x forza usare
la porta seriale solamente.
Api e software x interfacce PC/SC (quindi a pagamento)... sono fornite anke
da MS... e cmq sono abbastanza diffuse:
http://vertebra.cbcu.cam.ac.uk/delphi-PCSC.html
******
Con il componente ComPort io posso aprire la porta.... ed una volta aperta
quando inserisco la S.C. ricevo il segnale RLSD.... i settaggi (baud,
parity, stopbits, databits e flowcontrol sono gli stessi ke uso con i prg
preesistenti, quindi) dovrebbero essere giusti.
Ora, come posso usare la S.C.? c'è q.cuno ke ha esperienza con questo tipo
di interfacce?
Una volta aperta la porta posso mandare dei caratteri al lettore.... ma la
S.C. come dialoga? ascii?
Dagli esempi del comport potrei spedire i caratteri AT con il componente:
comport.writestr('AT',2); ed un eventuale modem mi dovrebbe rispondere
'OK'....  che dovrei leggere con:  comport.readstr(buffer, len);
Tuttavia la S.C. nn mi risponde, anke xkè io dovrei mandare prima un RESET
al quale la SC dovrebbe rispondere con l'ATR (Answer to Reset)...
Q.cuno sa' come faccio a resettare la card?
Il reset potrebbe essere anke software (e quindi dei caratteri ben
precisi... ma quali?)
Una volta resettata la card dovrei poter mandare comandi ISO7816:
CLA INS P1 P2 Len ......DATA....... Eod.
Quello ke ho scoperto del reset hardware:
Table 3.3. Contact definitions for smart card
----------------------------------------------------------------------------
---- 
C1 VCC Power connection
C2 RST Reset
C3 CLK Clock signal line etween the reader and the s c.
C4 RFU Reserved for future use.
C5 GND Ground
C6 VPP Programming power connection
C7 I/O Input/output line
C8 RFU Reserved for future use
Scusate se ho scritto molto, ma volevo darvi + informazioni possibili.....
anke xkè sono alla frutta, dopo una settimana di ricerche... sono veramente
a corto di idee.
Se q.cuno ha sviluppato programmi x smartcard mi potrebbe consigliare.... o
far vedere qualke procedure ke ha usato... se possibile... o 
q.ke
 esempio.
Se q.cuno sa' dove andar a leggere su internet DOC o tutorial utili.... ben
vengano!! Io ho trovato veramente poco.
Grazie
****************************************************************
ALLEGO QUI SOTTO INFORMAZIONI SULL'INTERFACCIA CHE USO: LO
SMARTMOUSE/PHOENIX da 3,57 e 6 MHz
What is Phoenix and Smartmouse?
Phoenix and Smartmouse are two types of interfaces which is used to
communicate with smartcards.
The only difference between phoenix and smartmouse is the polarity of the
reset signal, and most softwares for it will run on both types.
There are many phoenix and smartmouse interfaces available on the market and
it's a very basic construction:
All data sent on the comport is sent to the card and back to the computer
(loop back)
Any data sent by the card is directly send to the computer.
The cards reset signal is operated by the RTS signal on the comport.
A 3.58MHz oscillator is supplied by the interface to the card.
A very important fact to know about the phoenix/smartmouse mode is that it
can only be used for smartcards that are not empty, since there must be some
sort of software on the smartcard that receives the data send by the
computer. This is one of the reason why you cannot program empty cards with
it. Another reason is that the phoenix/smartmouse interface is not capable
of delivering any programming voltage.
There is also phoenix/smartmouse interfaces operating at other speeds than
3.58MHz, for example 6MHz but the Multiprogrammer 3.5 will only use 3.58MHz,
this is normally not any problem because all cards can be run with 3.58MHz
and most phoenix/smartmouse software can adjust the baudrate on the comport
to suit with the 3.58MHz oscillator.

le smartcard hanno un chip nel quale c'è un firmware, anzi, per meglio dire
un vero e proprio file-system organizzato ad albero.
Ora, usando la roba di winsozz si usano delle stringhe di comando dette apdu
(o adpu, ora non ricordo), che dipendono da tale file-system.
Quindi, i comandi di lettura e scrittura inviati tramite gli apdu si basano
sul file system registrato sulla card.
Io uso dei lettori usb con smartcard e mi appoggio ad una dll fatta dal
produttore della smartcard che altro non fa che esporre un ristretto numero
di funzioni che altro non sono che astrazioni di questi apdu.
Ho 2 tipi di card diverse.
Una, a sola lettura.
L'altra nella quale il file system prevede la possibilità di scrittura ma
sulla quale esiste un file system che mi da la possibilità della scrittura.
Ergo: il problema non è mandare i comandi al lettore, quanto COSA mandare al
lettore, e il cosa dipende dal file system della card che metti nel lettore.
Ciò che hai allegato nel tuo post sono specifiche HW.
Se tu fornissi qualche dettaglio in + potrei cercare di darti qualche
dritta.
Anche se sono molto curioso sul lettore seriale autocostruito, in verità...
Mi passi qualche info anche su questo?
Bye
A


Che io sappia... il lettore funziona così:
Tutti i dati inviati alla porta seriale vengono inviati alla carta e
ritornano al computer (loop back) (quello ke io prima ho chiamato echo).
Ogni dato inviato dalla carta è direttamente inviato al computer.
Il segnale di reset della carta è gestito dall' RTS della porta COM.