This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

NFC_T4T_EVENT_NDEF_READ event not working every time

Hello,

i am working on an app using Android to read and write an NDEF record using SDK 14 type 4 tag.

I start the process by reading the record with the following Android sequence:

Ndef ndef = Ndef.get(mTag);
ndef.connect();
NdefMessage ndefMessage = ndef.getNdefMessage();
ndef.close();

This produces an NFC_T4T_EVENT_NDEF_READ event on the Nordic side as expected.

After this, i write a record to the NRF52. The record is received. This produces an NFC_T4T_EVENT_NDEF_UPDATED event as expected.

After this, i update the record on the NRF52. Then i read the record with the exact same sequence as before. This time, no NFC_T4T_EVENT_NDEF_READ event is produced, even though my debugs in hal_nfc_t4t.c clearly show, that the record is read and sent properly to the Android device.

Is this some known feature or bug? It seems that only one NFC_T4T_EVENT_NDEF_READ event is produced per session when using Android Ndef library. After the NRF52 NFC interface has been reset, i can get one event. The record read works just fine, and the Android SW receives the correct data. Only the event is missing, which i need for my control flow.

Has anyone else encountered this problem, and found a solution or at least a workaround?

BR, tommi

Parents
  • Well, you are right that the NFC_T4T_EVENT_NDEF_READ event is produced only once per session when the last byte of NDEF message is read (the tag needs to reenter the NFC field to start the new session). We will try to improve the documentation in the next releases, because it seems to be not clear enough.

  • I am not that familiar with Android SDK, but this is probably the last byte that Ndef.getMessage() reads.

    You can take a look at the writable_ndef_msg example and its default NDEF message generation (copypasted code block):

    uint32_t size = sizeof(m_ndef_msg_buf);
    err_code = ndef_file_default_message(m_ndef_msg_buf, &size);
    APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("The last byte of NDEF message: 0x%02X", m_ndef_msg_buf[size-1]);
    

    I added the last line to clarify what is the last byte from the nordic NFC library perspective (so you can compare with Android output). Of course, the different NDEF message may change the position of the last byte.

Reply
  • I am not that familiar with Android SDK, but this is probably the last byte that Ndef.getMessage() reads.

    You can take a look at the writable_ndef_msg example and its default NDEF message generation (copypasted code block):

    uint32_t size = sizeof(m_ndef_msg_buf);
    err_code = ndef_file_default_message(m_ndef_msg_buf, &size);
    APP_ERROR_CHECK(err_code);
    NRF_LOG_INFO("The last byte of NDEF message: 0x%02X", m_ndef_msg_buf[size-1]);
    

    I added the last line to clarify what is the last byte from the nordic NFC library perspective (so you can compare with Android output). Of course, the different NDEF message may change the position of the last byte.

Children
No Data
Related