markTimer 1.82
--------------

**************************************
*            ATTENZIONE!!!           *
* Se e' la prima volta che lo usate  *
*  programma su questo computer, va  *
*     precedentemente eseguito       *
*           'Calibrator'             *
**************************************

Con questo software e' possibile inviare comandi alle SEKA SmartCard (tramite un normale SmartMouse) e leggerne il tempo di risposta. I tempi sono indicati in termini di 'cicli di clock' della card.
Sebbene sia possibile utilizzare il programma anche con tre differenti frequenze di clock (3,57 - 6,00 - 8,86 MHz), le letture dei tempi sono significative solo in modalita' 3,57 MHz(3,579545) ed il tempo in microsecondi potra' essere ricavato dividendo le letture (in cicli di clock) per 3,579545.

----------

Vediamo adesso il significato dei vari pulsanti...

Pulsante 'Open COM'/'Disconnect':
Apre la comunicazione con la porta seriale, se non si verificano problemi allora invia un reset alla card ed abilita gli altri pulsanti.


Pulsante 'Quick Open':
Apre la comunicazione con la porta seriale SENZA eseguire altro (quindi, senza reset e senza verifica della kard). Questa opzione e' utile quando si fanno delle prove con altri software e poi si vuol passare a markTimer in maniera 'trasparente' per la card.

Sotto a tali pulsanti e' presente un riquadro di selezione del clock dello SmartMouse, esistono tre opzioni:

- 3,57 MHz
- 6,00 MHz
- 8,86 MHz *** Non supportato da tutte le card ***

Il timing delle INS e' significativo solo nella modalita' 3,57 MHz.


Pulsante 'Reset':
Invia un impulso di reset alla card, la durata dell'impulso (in millisecondi) e' fissata dal valore presente nel box 'Reset pulse'. A seguito del reset:

- se l'ATR e' SEKA-standard saranno indicati i tempi di ricezione del primo e del secondo byte ('3B' ed 'F7') e la versione della card;

- nel caso in cui si abbia l'ATR '3B 90 01' (tipico di molte 6.0 'fritte' con zzbug), saranno indicati i tempi di ricezione del primo e del secondo byte ('3B' e '90') e la scritta 'Card EEPROM error';

- negli altri casi si avra' la scritta 'ATR unknown', senza misura dei tempi;


Pulsante 'Serv. ATR':
Esegue la prova del 'reset con I/O basso', cioe' si invia un impulso di reset mantenendo la linea di I/O a livello basso, a seguito di questo reset le Siemens 2.0/3.0/4.1/6.0 rispondono con una sequenza di byte diversa dall'ATR classico, la quale  che rappresenta il contenuto della parte bassa dell'EEPROM (il cosiddetto 'CMS data'). Le altre card, invece, rispondono con l'ATR standard. Per questo tipo di reset non sono indicati i tempi di risposta.

- nel caso di card Siemens comparira' la scritta 'Card V6.0 - Service ATR' oppure 'Card V2.0/3.0/4.1 - Service ATR';

- nel caso delle altre card SEKA comparira' la scritta 'Standard ATR' (VEDI NOTA);

- negli altri casi si avra' la scritta 'ATR unknown';

NOTA: Le card che non prevedono il service ATR, quando trovano la linea di I/O a livello basso, attendono che la linea torni alta e, non appena questo succede, inviano il byte '3B'...se il tempo che intercorre tra la risalita dell'I/O e l'inizio dell'invio del byte e' troppo breve, allora la seriale male interpreta il dato ricevuto.

Al termine del reset con I/O basso viene inviato un reset normale alla card, che quindi e' immediatamente pronta a ricevere comandi. 


Pulsante 'Send':
Invia i byte presenti nella finestra-comandi. Se il comando e' di tipo CARD-to-CAM, sono ignorati gli eventuali byte successivi alla LEN della risposta, se invece il comando e' CAM-to-CARD si ha il calcolo automatico della lunghezza del comando ed il successivo invio (NOTA: e' possibile disabilitare l'AutoLEN, tramite l'apposito pulsante). Nella finestra di log e' riportato il comando inviato ed il tempo di risposta (se leggibile).
Possibili risposte sono:

- No answer from card
Quando la card non risponde...

- XX bytes received [ XXXX cc / XXXX cc ]
Quando, a seguito dell'invio dell'header del comando, risponde con uno o piu' byte. I tempi di risposta si riferiscono al primo e secondo byte.;

- 1 byte received (no ACK)
Quando l'unico byte di risposta non e' l'ACK byte;

- ACK, but NO data
Quando e' stato inviato un comando CAM-to-CARD e dopo il corpo dell'INS non si ha risposta;

- ANS [ XXXX cc ]
Si ha a seguito dell'invio di un comando CAM-to-CARD e si e' ricevuto risposta.


Pulsante 'Multisend':
Esegue l'invio ciclico di un comando. Se durante la procedura si ha un errore, il ciclo di interrompe. E' comunque possiblie fermare il processo in qualunque momento tramite il tasto sinistro del mouse. Il box sotto al pulsante indica la modalita' di funzionamento:

- Loop 1st
Invia piu' volte il primo comando e mostra tutte le risposte;
- Loop 2nd (utile per C1 34/32)
Invia il primo comando, poi invia piu' volte il secondo, mostrando tutte le risposte;
- Average
Invia piu' volte il primo comando e mostra la media aritmetica di tutti i tempi di risposta;
- Maximum
Invia piu' volte il primo comando e mostra il massimo tra tutti i tempi di risposta;
- Minimum
Invia piu' volte il primo comando e mostra il minimo tra tutti i tempi di risposta;

Il numero di volte che deve essere inviato si imposta tramite l'altro box alla destra del pulsante 'Multisend' (da 1 a 4096). C'e' un'ulteriore modalita':

- Reset Bug
Invia ciclicamente "reset + comando", il processo termina quando si ottiene uno status diverso da 9600.
 
NOTA: Mentre si fa un 'Multisend' consiglio di non eseguire nessuna operazione col PC (e di disabilitare lo ScreenSaver...) onde evitare letture 'sballate' dei tempi.


Pulsante 'Copy':
Copia negli appunti/clipboard le righe evidenziate nella finestra di LOG.

Pulsante 'Clear log':
Cancella il contenuto della finestra di log.

Pulsante 'Clear Cmd':
Cancella il contenuto della finestra comandi.

Pulsante 'Setup':
Apre la finestra di configurazione del programma

Pulsante 'Quit':
Si esce dal programma, memorizzando la configurazione della porta seriale (Nota: la memorizzazione avviene nel file di Registro->HKEY_LOCAL_MACHINE\\Software\\SmartTimer\\).



Il BOX Command Hunter
---------------------

Pulsante 'Scan'
Invia piu' volte un comando, variando il valore di un byte ad ogni lancio. La procedura puo' essere interrotta premendo il tasto sinistro del mouse.

Sono presenti alcuni parametri per lo scan:

- Index
Posizione del byte da variare. Valori maggiori della lunghezza del comando provocheranno la variazione dell'ultimo byte.

- From
Valore iniziale del byte da variare.

- To
Valore finale del byte da variare.
Se 'From' > 'To' il conteggio inizia da 'From', giunge a 0xFF, riparte da 0x00 ed arriva fino a 'To'.

- Status
Se durante il ciclo la card risponde con questi status byte la procedura si ferma. A questo punto, tramite le caselle 'Update' e' possibile aggiornare automaticamente il comando ('Update Cmd') oppure il valore del byte iniziale della ricerca ('Update Prm').

Pulsante 'CMD studio'
Apre la finestra per la costruzione e l'analisi delle INS 38/3C/40.


Finestra di configurazione del programma
----------------------------------------

- Riquadro 'COM config'
'Port'
Indica la porta seriale a cui e' collegato lo SmartMouse. Nel menu sono presenti solamente la COM1 e la COM2, ma ho lasciato la possibilita' di impostare 'a mano' una qualsiasi porta da COM1 a COM8: basta evidenziare la cifra accanto a COM e digitare un valore da 1 ad 8. 

'Reset lenght'
Indica la durata in millisecondi dell'impulso di reset. 

'ATR timeout'
Indica il massimo tempo di attesa in millisecondi per la ricezione dei byte dell'ATR.

'CMD timeout'
Indica il massimo tempo di attesa in millisecondi tra la ricezione di un byte ed un altro, durante l'esecuzione dei comandi.


- Riquadro 'Timer config' (sconsigliata la modifica!!!):
Questo controllo modifica direttamente l'algoritmo che si occupa della lettura dei tempi (l'avevo messo per debug...e l'ho lasciato!), a valori maggiori corrispondono minori fluttuazioni dei tempi di risposta a parita' di comando inviato, cio' va a scapito della precisione della lettura. Sconsiglio di modificare cio' che trovate nel riquadro . Premendo il pulsante 'Auto Span' si fissa il valore ottimale (che e' anche quello di default).


Finestra per lo studio delle INS
--------------------------------

Questa finestra serve nel corso della costruzione MANUALE delle INS 38/3C/40.


- 'Header'
E' l'intestazione del comando, nel classico standard ISO:

CLA INS P1 P2 LEN

Il riquadro serve per inserire l'istruzione (ammessse solo 38/3C/40) ed i parametri P1/P2. La LEN e' calcolata in automatico sulla base del contenuto del comando.


- 'Bytes S-Encrypted + 82 + Signature'

In questo box va inserita la parte di comando in SE, comprensivo di P3 e relativi dati. I dati devono necessariamente concludersi con 82 + Signature. Spuntando la casella '82 auto-fix' e' possibile inserire automaticamente il Nano 82 in giusta posizione (il nono byte a partire dal fondo vine sostituito dal valore 82).

NOTA: sono ammessi minimo 17 byte, cioe' 8 di dati + 82 + signature.


- 'Bytes in plain'

Qui si inseriscono i byte che rimarranno in chiaro, cioe' quelli tra la signature ed i 90 byte in envelope/SSE. Per aiutare nel riempimento sono presenti due indicatori

> Plain lenght : il numero di byte in chiaro introdotti
> WORD-sum mod 0x4000 : la somma delle WORD in chiaro (modulo 0x4000), secondo sulla base della parita'/disparita' di P3.

- 'Bytes under envelope'

Il comando viene concluso dai 90 byte in envelope/SSE, i primi 88 sono automaticamente imposti a 0, mentre NLB e LB sono a scelta oppure auto-impostabili col pulsante 'Find P5'


- Pulsante 'Find P5'

Sulla base della lunghezza del comando, della INS utilizzata e del provider vendono automaticamente determinati i valori di NLB e LB che generano un valore di P5 corretto (cioe' che tale da individuare la giusta posizione del Nano 82).
Questa opzione funziona solo per il provider 0000 e per gli Italiani (0070, 0071, 0072, 0073).


- 'Command Window'

Qui e' presente il comando costruito, che puo' essere copiato/incollato nella finestra comandi principale.


- Pulsante 'D1'

Evidenzia, nella finestra comandi, qual'e' il byte corrispondente al dato D1 dell'INS 38 (il dato del Nano 16).


- Pulsante 'D2 D3'

Evidenzia, nella finestra comandi, quali sono i byte corrispondenti ai dati D2 D3 dell'INS 38 (i dati del Nano 2A).


- Pulsante '86 data'
  
Evidenzia, nella finestra comandi, quali sono i byte corrispondenti ai dati del Nano 86 per l'INS 38.


- Pulsante 'Parsing'

Evidenzia, nella finestra comandi, i byte compresi tra i dati di P3 ed il Nano 82, corrispondenti ai dati che successivamente subiranno parsing ed esecuzione.


- Pulsate 'Hide'
Nasconde la finestra, mantenedo memorizzati i dati fino alla chiusura del programma.



History
-------

*************************************
* IMPORTANTE!!!                     *
* Il programma e' stato scritto e   *
* compilato sotto Win 98 ed e'      *
* stato sviluppato sotto Win XP.    *
* Ogni info relativa a test su      *
* Win 95/ME/NT/2k e' apprezzata,    *
* tnx a lot!                        *
*************************************  


Un ringraziamento particolare a tutti coloro che si sono prestati al ruolo di betatester :)


v0.1 -public beta-
Il programma fa solo il reset della carta, ne identifica la versione e misura il tempo di invio del primo e secondo byte dell'ATR. La misura e' affetta da un'incertezza dipendente dalla risoluzione del "performance_timer" interno al computer, comunque i dati rilevati col software sono coerenti con le letture fatte con l'oscilloscopio (e non e' poco!). 


v0.2 -public beta-
Introdotta l'interfaccia grafica; 
Timing dell'ATR espresso in cicli di clock della card, anziche' in secondi; 
Aggiunta la possibilita' di selezionare la porta seriale; 


v0.5 -internal beta-
Riscritte tutte le routine di gestione della porta seriale;
Aggiunta la gestione dell'invio comandi e relativa log-window;
Aggiunta la possibilita' di ricevere il 'Service ATR';
Riordinata ed ampliata la finestra del programma;
Il timeout in lettura e' ora impostabile;
L'ampiezza dell'impulso di reset e' impostabile;


v1.0 [tre sotto-release]

1.0u -uncalibrated-
Versione per debug della comunicazione PC<->CARD, essa e' completamente funzionante, ma con routine di taratura del timer disabilitata, quindi i tempi misurati sono 'sballati'.
Aggiunto il salvataggio della configurazione nel file di registro;
Aggiunto il tasto 'Multisend', calcolo del tempo di risposta basato su piu' lanci consecutivi dello stesso comando;

1.0p -public release-
Qualche piccolo ritocco alla grafica del programma;
Attivata la routine di auto-calibrazione;

1.0d -debug release-
Scoperto un grosso BUG ... su Win XP non riesce a connettersi, compare sempre la scritta 'Please check card or serial port'. Questa versione differisce dalla precedente per l'aggiunta di alcune routine di debug, per scoprire dove fallisce la connessione alla porta seriale.


v1.2 -public release-
Migliorata la routine di auto-calibrazione: ho diviso la routine in due sezioni, la prima risiede in un software a parte che si occupa della taratura del timer, la seconda e' rimasta all'interno di questo programma e si occupa di bilanciare i ritardi dovuti agli altri thread attivi nel sistema.
Eliminato il riquadro indicante la presenza della FIFO.
I valori di timeout per il reset e per i comandi sono adesso distinti.
Sostituita la routine di gestione della LOG window.


v1.5 -public release-
Semplificata la routine di comunicazione seriale per migliorare la compatibilita' con Win XP;
Eliminato l'obbligo di disabilitazione del buffer FIFO;
Modificato il testo dei messaggi generati dal programma;
Introdotto uno slider per l'impostazione dello SPAN (vedi);
Modificata la finestra dei comandi, adesso si possono inviare piu' comandi in sequenza;


v1.6 -public release-
Creata una finestra a parte per il Setup del programma;
Modificate le opzioni del 'Multisend': introdotto il Reset Bug e la possibilita' di un Loop sul secondo comando (utile per C1 34/32), eliminata la modalita' SCAN (e sostituita col box 'Command Hunter')
Adesso e' possibile interrompere il 'Multisend' tramite il tasto sinistro del mouse.


v1.7 -public release-
Spostati ed ingranditi alcuni pulsanti;
Aggiunta la "connessione veloce" (Quick Open)
Il clock e' adesso selezionabile (3,57-6,00-8,86 MHz);
Qualche aggiustamento alla finestra 'Scan';
Aggiunto la possibilita' di NON usare l'autoLEN;
Nuova finestra: 'CMD studio', per fare esperimenti con la V7 ;)

v1.8 -public release-
Corretto un bug nella finestra CMD studio;
Riposizionamento dei pulsanti;
Aggiunto il pulsante 'Clear CMD';
Piccoli aggiustamenti alla routine di comunicazione seriale;

v1.82 -public release-
Aggiunto il ripristino della porta seriale all'uscita dal programma;
Altro bug corretto nella finestra CMD studio;


Appendice: TABELLA DI CALIBRAZIONE
----------------------------------

Ogni versione di SmartTimer ha bisogno del suo Calibrator ...

  Versione  |  Versione 
 SmartTimer | Calibrator
            |  da usare
------------+-------------------
 v0.1       |  NESSUNA
------------+-------------------
 v0.2       |  NESSUNA
------------+-------------------
 v0.5       |  NESSUNA
------------+-------------------
 v1.0 u/p/d |  NESSUNA
------------+-------------------
 v1.2       | Calibrator I
------------+-------------------
 v1.5       | Calibrator II/III
------------+-------------------
 v1.6       | Calibrator II/III
------------+-------------------
 v1.7       | Calibrator II/III
------------+-------------------
 v1.8/1.82  | Calibrator II/III
------------+-------------------

