Topic: How does Android poll for NFC devices?

Hi Guys,

I am working with a contactless reader to communicate with my Android device.

I have observed that any point in time I cannot connect to my Android device using P2P. If I want to connect to initiate an Android Beam transfer I must continuously try to connect to the device multiple times over a one second period.

An NFC Android device can detect contactless cards, NFC P2P targets and NFC P2P initiators i.e. 3 different modes. I am beginning to think that there is some kind of polling going on behind the scenes that switches between the three modes very quickly.

This means that at any given point in time when I try to connect to the phone, it may or may not be in the correct mode and will fail. This is why I need to attempt multiple connections.

I have been looking at the Android source to try and figure this out with no real luck. here is the most promising file I have seen yet but it still makes no sense.

Also, I have posted this question on StackOverflow and received the following answer, which seems to be correct. I'm just wondering if anybody here could elaborate.

I am beginning to think that there is some kind of polling going on behind the scenes that switches between the three modes very quickly.

Exactly this is going on. The different technologies gets time-multiplexed. It's much more than three modes though. Typically a NFC device will poll for:

Reader ISO14443 A
Reader ISO14443 B
Reader FeliCa (aka tag type 3)
Reader ISO15693
Card Emulation ISO14443 A
Card Emulation ISO14443 B
Card Emulation Felica
Peer-to-Peer mode uses Reader A, Reader FeliCa as initiator. Card emulation A and card emulation Felica are also used as Peer-to-Peer Target mode technology.

The exact timing of the polling is not public and you will not find much about that in the source-code. This is handled by the NFC chip internally.

Any pointers to some more information on this would be great. Thanks.