This tutorial is about reading rfid cards, but is very specific to a certain chip type. However I feel the information is overal useful. I created the blog entry, and reposting in this forum, because there's practically 0 information on the internet related to this subject, and it would have saved me a TON of time if there had been. Hopefully this can help some poor soul that was stuck in my position. I'm sure there are many code ineffeciencies , and I'd be glad for any suggestions on improvements or rewrites if you know a better way.
The entry is at my blog http://osikes.blogspot.com/2011/01/fun-with-rfid.html.
But I'll post it here as well.
---------------------------FUN WITH RFID-------------------------------------
Recently I've been attempting to take advantage of the fancy new hardware packed into the Nexus S. More specifically reading rfid cards using the Nexus's nfc hardware. This turned out to be a bit more tricky than I thought.
Google provides source code for a demo application that will greatly aid you in figuring out the api. The android.nfc btw is stupid simple. In fact you don't have to worry about connections, listeners, any of that stuff. The google nfc service is always on, constantly polling for new card scans. When it detects a card, it issues a nfc intent. You just have to make sure that your applications manifest file, is setup for that intent.
As in: Make sure to have this in your main activity.
Also make sure you enable nfc permissions and hardware requirement.
Next in your main activity all you have to do is use the getIntent() to retreive information picked up from a scan. Once again , 'YOU DONT HAVE TO WORRY ABOUT LISTENING FOR SCANS ' which is awesome!
This one above line, retrieves the unique id from the rfid chip, and pushes it into a bytearray.
Now that you have your card_id in the array, you cant just push it out to screen. By default android attempt to convert the bytearray to UTF-8, so you would get some weird symbols. In my case I needed the hexadecimal from that to store in a DB. I'm going to list the exact sort of rfid chip I dealt with, in hopes that this will help someone else attempting to do something similar. This is because there is 0 information on the internet that will help you figure this out otherwise. With the exception of a technical specification document that I'll link.
My card type and rfid chip:
High quality CR80 30mil white PVC RFID
cards HF Icode SLI
Operating frequency 125KHZ
Link to documentation: http://www.nxp.com/acrobat_download2/ot ... 052611.pdf
Your chip type is important, because it will let you know how to read your uid. In the case of my chip, it's a 64 uid, with MSB as the left most.
This is very important in being able to correctly convert your bytearray to binary, hex whatever. There's several code examples of how to convert to hex, but unless you know if you're dealing with little endian, big endian, where your lsb, msb is, it won't work, even though you'll get a hex output.
In my case I used the below function
//Modified from function, I found on internet to suit specific needs.(Not trying to take credit )
Using this, I was able to successfully parse though the bits of my 8 bytes, and convert all necessary to hex. I really hope this helps someone, and I'm sure there are many glaring inefficiencies with this code, and any comments left with suggestions to improve it are greatly appreciated.