2

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?

Michael Roland
  • 39,663
  • 10
  • 99
  • 206
perceptron
  • 167
  • 2
  • 13
  • 1
    An obvious approach would be to see if there is some way in which you can attempt to use the unique method such that it will fail gracefully if it is not available, or allow you to catch the resulting exception / fault. Or you could try to see what modules/drivers are loaded or configured (if /proc/config.gz exists, as it often does). Last resort would be to maintain a list of compatible devices/builds and utilize that as a guide. – Chris Stratton Jul 02 '13 at 18:27

3 Answers3

1

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...

Community
  • 1
  • 1
NFC guy
  • 10,151
  • 3
  • 27
  • 58
  • thanks for your suggestion. As of now, in order to find out if it is a Braodcom chip, I am searching for "android.nfc.tech.NdefFormatable" and "android.nfc.tech.Ndef" in the techlist. If one of the class is supported bu the ISO15693 tag, I conclude that the device has a broadcom part.It seems to be working perfectly for me. – perceptron Jul 05 '13 at 19:37
  • Yes when I said, "the only ISO15693 tags that are supported are the NXP ICODE tags", I meant that reading and writing NDEF messages on ISO15693 tags is only supported on NXP ICODE tags. – perceptron Jul 05 '13 at 19:37
  • I agree with NFC guy about "MifareClassic support check". 1. NXP added ISO 15693 format capability to its newer FW. So checking for ISO 15693 formatable is not a good option anymore. 2. Because MifareClassic is an old NXP product, not a standard NFC Forum Type, Broadcom will not add support for it. Thus, "MifareClassic support check" is the good option. You can use this app https://play.google.com/store/apps/details?id=com.inoapp.cardinfo. It's based on the "MifareClassic support" check. I've been using it to verify "MifareClassic support check". So far, it's pretty reliable check. – Trung Mar 13 '14 at 15:31
0

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.

Alex
  • 271
  • 3
  • 8
-2

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

Lee Wang
  • 47
  • 1
  • 5