Skip to content

NFC Data Exchange Format (NDEF)

MiraOS supports NFC on supported platforms, see the NFC core API here.

NDEF is a standardised data format specification by the NFC Forum, used to describe a set of actions to be encoded onto a NFC tag, or to be exchanged between two active NFC devices.

The majority of NFC enabled devices (phones, readers, etc) support reading and/or writing NDEF messages from/to NFC tags.

At a basic level, an NDEF record contains two components:

  • A record type used to contextualise the payload data
  • Payload data

Together these two components represent the action to be taken by the devices when the NFC tag is touched. NDEF supports a fairly limited set of actions. More complex actions can be implemented with customised software running on the phone, tabled, or other touching devices.

Multiple records can be written to an NFC tag; however many software applications only act on the 1st record.

Enums

mira_nfc_ndef_tnf_t

Name Value Description
MIRA_NFC_NDEF_TNF_EMPTY 0
MIRA_NFC_NDEF_TNF_WELL_KNOWN_TYPE 1
MIRA_NFC_NDEF_TNF_MIME_TYPE 2
MIRA_NFC_NDEF_TNF_ABSOLUTE_URI 3
MIRA_NFC_NDEF_TNF_EXTERNAL_TYPE 4
MIRA_NFC_NDEF_TNF_UNKNOWN 5
MIRA_NFC_NDEF_TNF_UNCHANGED 6
MIRA_NFC_NDEF_TNF_RESERVED 7

Structs

mira_nfc_ndef_record_t

Type Name Description
uint16_t index
mira_bool_t chunk
mira_nfc_ndef_tnf_t type_name_format
mira_size_t type_length
uint8_t * type
mira_size_t id_length
uint8_t * id
mira_size_t payload_length
uint8_t * payload

Structs

mira_nfc_ndef_iter_t

Type Name Description
uint8_t * cur
mira_size_t length
uint16_t index
mira_bool_t last_record

Structs

mira_nfc_ndef_writer_t

Type Name Description
uint8_t * start
uint8_t * ptr
uint8_t * last
mira_size_t left

Functions

mira_nfc_ndef_iter_start

void mira_nfc_ndef_iter_start(
    mira_nfc_ndef_iter_t*    iter,
    mira_nfc_ndef_record_t*  record,
    uint8_t*                 msg_data,
    mira_size_t              msg_length);

mira_nfc_ndef_iter_next

void mira_nfc_ndef_iter_next(
    mira_nfc_ndef_iter_t*    iter,
    mira_nfc_ndef_record_t*  record);

mira_nfc_ndef_iter_valid

mira_bool_t mira_nfc_ndef_iter_valid(
    mira_nfc_ndef_iter_t*  iter);

mira_nfc_ndef_get_by_index

mira_bool_t mira_nfc_ndef_get_by_index(
    mira_nfc_ndef_record_t*  record,
    mira_size_t              index,
    uint8_t*                 msg_data,
    mira_size_t              msg_length);

mira_nfc_ndef_get_by_id

mira_bool_t mira_nfc_ndef_get_by_id(
    mira_nfc_ndef_record_t*  record,
    const uint8_t*           id,
    mira_size_t              id_length,
    uint8_t*                 msg_data,
    mira_size_t              msg_length);

mira_nfc_ndef_get_by_id_str

mira_bool_t mira_nfc_ndef_get_by_id_str(
    mira_nfc_ndef_record_t*  record,
    const char*              id,
    uint8_t*                 msg_data,
    mira_size_t              msg_length);

mira_nfc_ndef_write_start

mira_status_t mira_nfc_ndef_write_start(
    mira_nfc_ndef_writer_t*  writer,
    uint8_t*                 data,
    mira_size_t              length);

mira_nfc_ndef_write_end

mira_status_t mira_nfc_ndef_write_end(
    mira_nfc_ndef_writer_t*  writer,
    mira_size_t*             length);

mira_nfc_ndef_write_inplace

mira_status_t mira_nfc_ndef_write_inplace(
    mira_nfc_ndef_writer_t*  writer,
    mira_nfc_ndef_tnf_t      type_name_format,
    uint8_t*                 *type,
    mira_size_t              type_length,
    uint8_t*                 *id,
    mira_size_t              id_length,
    uint8_t*                 *payload,
    mira_size_t              payload_length);

mira_nfc_ndef_write_copy

mira_status_t mira_nfc_ndef_write_copy(
    mira_nfc_ndef_writer_t*  writer,
    mira_nfc_ndef_tnf_t      type_name_format,
    const uint8_t*           type,
    mira_size_t              type_length,
    const uint8_t*           id,
    mira_size_t              id_length,
    const uint8_t*           payload,
    mira_size_t              payload_length);