[acao-it] Lettori RFID

Daniele Orlandi daniele at orlandi.com
Sat Jun 6 14:58:45 CEST 2015


Ciao,

Ho verificato che le schede RFID per l'accesso sono leggibili da normali
lettori RFID 125 kHz, ne ho quindi ordinati alcuni USB che collegheremo a:

- PC Massimo
- Terminali schede
- Terminale Bar

Il dispositivo USB viene visto come una tastiera, quando viene passata
un tag RFID trasmette il codice univoco della tessera seguito da <cr>

Roberto:
Come soluzione veloce potresti modificare FXvoli in modo che se, alla
schermata in cui chiede il codice pilota, riceve una stringa di 10
caratteri seguita da <cr> va sul database e cerca a quale pilota è
associata la scheda con quel codice.

Questa tabella con le associazioni al momento manca e andrà creata, come
andrà creata un'interfaccia per fare l'associazione. I dettagli di
queste ultime li vedremo quando avremo il protocollo di configurazione
delle sbarre (e il sw funzionante).

Sarebbe anche opportuno reimplementare l'autenticazione se viene usato
il codice pilota.

Per gestire il caso del pilota che vuol fare la scheda a nome di un
altro si potrebbe fare una funziona apposita "Fai la scheda a nome di un
altro" che chiede il codice pilota del pilota da impersonare.

Così facendo sapremmo sempre e comunque chi agisce e potremmo
identificarlo in caso di addebiti sospetti.




Detto questo, però, il modo più giusto di gestire i lettori RFID è di
prendere il controllo del device e di parlarci direttamente:

Bisogna aggiungere una regola di udev in
/etc/udev/rules.d/90-rfid-reader.rules in modo che crei un symlink
/dev/input/rfid e che dia i permessi di gruppo del device al gruppo
"terminale".

Si apre il device e si fa un ioctl EVIOCGRAB in modo da prendere l'uso
esclusivo del device (e non lasciare che gli eventi finiscano nella
tastiera).

Poi si leggono dal device le strutture che contengono l'evento.

In Java non so se c'è qualcosa di già fatto per ricevere i dati da
un'altra tastiera

====================================================================
dev = open("/dev/input/rfid", O_RDONLY);

ioctl(dev, EVIOCGRAB, 1);

struct input_event ev[64];
int rd;

while (1) {
    if ((rd = read(dev, ev, size * 64)) < size) {
        break;
    }

    value = ev[0].value;

    if (value != ' ' && ev[1].value == 1 && ev[1].type == 1) {
        printf ("Code[%d]\n", (ev[1].code));
    }
}
====================================================================

Il vantaggio è che l'evento puoi riceverlo in qualunque momento senza
dover distinguerlo dai tasti di una tastiera.

Ciao,


More information about the It mailing list