The OpenPCD console is a quick-and-dirty VC++ project for the OpenPCD reader, allowing me to send individual commands (hex code) to an ISO 14443 (RFID) card – in my case a DESFire EV1 from NXP.


Using the MinGW (GCC) Compiler Suite the librfid-tool library (part of librfid) was modified so the console was able to initialize the OpenPCD reader and activate the card (anticollision). I also introduce a new function that serves as communication interface between the PCD and PICC:

extern int exchange_block(char *cmd, unsigned int clen, char *ret, unsigned int *rlen, unsigned int timeout, unsigned int flags);

The function simply forwards the parameters to the internal routines of the librfid library.


Unfortunately I have to confirm the issues with the OpenPCD reader as often discussed (but never solved) on their mailing list. The USB reader needs to be re-plugged (or reset using the debug cable) in order to get a defined state again (even with the unmodified code). The device also seems to suffer from a timing issue, so that the return code (of a valid command) does not always match the actual state. This behavior is very annoying if you depend on a previously received message – i.e. authenticate using a challenge response protocol.