In order to finally get something working for my thesis I decided to move from NFCIP communication to Bluetooth for now. So far that seems to work much better, except the connection time.
It’s rather easy to write a Java app running on a normal PC (the host) using the BlueCove stack to communicate with the phone and write a MIDlet that acts as a middle man between a contactless ISO14443 card and the host. I did this to test the Bluetooth communication and it seems to work 🙂
For now I created a BTChannel class that implements the javax.smartcardio.CardChannel API so it’s easy to modify existing applications that use the Java Smart Card API to use the Bluetooth link. On the phone I created a small MIDlet that acts as a Bluetooth server and waits for a connection from a client. As soon as you keep a card close to the phone it sends the APDU received over Bluetooth from the host to the smart card and relays the results back to the host.
Maybe I can find some time to finish this and turn it into a TerminalFactory provider where all bluetooth devices in the vicinity with the “relay” MIDlet running are seen as card readers.