Question

Is there a way to figure out the NFC stack (or chipset) on the Android device? I am creating an app with a custom implementation for NfcV class (ISO15693 tags). Turns out on older devices like Nexus S, Galaxy S2, Nexus 7 the NFC chipset is from NXP and the only ISO15693 tags that are supported are the NXP ICODE tags. I have a custom implementation that relies on the transceive function. It works beautifully with TI and ST Micro tags. But the problem is, on devices like Nexus 10, Nexus 4 and SGS4 Google started using Broadcom NFC transceiver and their NFC stack which has native support for ISO15693 tags. Is it possible to identify the NFC chipset programmatically? If so how?

Was it helpful?

Solution

The NXP NFC-based devices all support MifareClassic tags, while the Broadcom-based ones don't have this support. You could check in your app whether that support is present, as explained in https://stackoverflow.com/a/15833191/1202968.

When you write "the only ISO15693 tags that are supported are the NXP ICODE tags", I think you mean that reading and writing NDEF messages on ISO15693 tags is only supported on NXP ICODE tags for such devices (because communication works fine using ISO 15693 commands on these NXP-based NFC devices). If/when (if ever) these devices get updated to also support NDEF message storage on other ISO15693 tags, the trick to check for MifareClassic support will no longer work, obviously...

OTHER TIPS

guessing here but you could try a catch all tech filter like

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>    
       <tech>android.nfc.tech.NfcA</tech>       
    </tech-list>
</resources>

Which reads most of the cards I have tried not supported by the Broadcom chips. You can then check for an empty or null NdefMessage. If it contains information then it is an NXP chip. Otherwise its Broadcom.

This does break the concept of having very narrow filters but im not sure how you would do it otherwise.

This also might not work for the s4 because the custom Samsung firmware just dismisses non-compatible tags.

There might also be another way because when you scan a tag the exact techlist (all compatible ones) show in a logcat.

I strongly doubt it´s possible. All hardware information can usually be accessed through: http://developer.android.com/reference/android/os/Build.html

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top