TNEP for polling device
The poller library provides functionality to implement the Tag NDEF Exchange Protocol (TNEP) for a polling device.
The poller library is used in the NFC: TNEP poller sample.
Initialization
To initialize the poller library, call nfc_tnep_poller_init()
and provide the TX buffer and callback structure as parameters.
To ensure that the polling device discovers the tag, the initialization must be performed as required by the tag type.
Configuration
After reading the NDEF message from the NFC tag, the library can use the nfc_tnep_poller_svc_search()
function to look for the initial NDEF message that contains the Service Parameters records.
If the initial message has valid Service Parameters records, the polling device can select a service using nfc_tnep_poller_svc_select()
.
After finishing all operations on the service, the service should be deselected by using one of the following options:
Selecting another service
Exchanging data with single response communication mode
The polling device can use single response communication mode to exchange the NDEF message according to the NFC Forum TNEP specification (chapter 5).
Exchanging data is possible only when a service is selected. The data is exchanged in the NDEF read procedure or the NDEF write procedure.
To exchange data, use nfc_tnep_poller_svc_write()
or nfc_tnep_poller_on_ndef_read()
.
Note
These operations are asynchronous.
When the polling device finishes the NDEF read procedure or the NDEF write procedure, the application should inform the library about this by calling nfc_tnep_poller_on_ndef_read()
or nfc_tnep_poller_on_ndef_write()
, respectively.
API documentation
include/tnep/poller.h
subsys/tnep/poller.c
- group nfc_tnep_poller
TNEP Protocol for NFC Poller API.
Enums
Functions
-
int nfc_tnep_poller_init(const struct nfc_tnep_buf *tx_buf)
Initialize the NFC TNEP Poller Device.
- Parameters:
tx_buf – [in] Pointer to TNEP Poller Tx buffer.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
void nfc_tnep_poller_cb_register(struct nfc_tnep_poller_cb *cb)
Register TNEP Poller callbacks.
Register callbacks to monitor the TNEP Poller data exchange.
- Parameters:
cb – Callback struct.
-
int nfc_tnep_poller_api_set(const struct nfc_tnep_poller_ndef_api *api, enum nfc_tnep_tag_type tag_type)
Set NDEF API for the NFC TNEP Poller Device.
This function provides API for NDEF operation and indicates the NFC Device Tag Type. API can be changed in runtime but it must be set immediately after NFC Poller Device detects Tag Type during the Device Activation Activity.
- Parameters:
api – [in] Pointer to the NDEF API structure.
tag_type – [in] NFC Device Tag Type.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_svc_search(const struct nfc_ndef_msg_desc *ndef_msg, struct nfc_ndef_tnep_rec_svc_param *param, uint8_t *cnt)
Search if NDEF Message contains TNEP Service Parameters Records.
Function for searching the TNEP Service Parameters Records in the given NDEF Message. NDEF Message has to be stored until all operations on services are finished.
- Parameters:
ndef_msg – [in] The NDEF Message which can be the Initial TNEP Message.
param – [out] Pointer to structure where found service parameters will be stored.
cnt – [inout] Count of service parameters which can be stored as an input. Count of found services parameters as an output.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_svc_select(const struct nfc_tnep_buf *svc_buf, const struct nfc_ndef_tnep_rec_svc_param *svc, uint32_t max_ndef_area_size)
Select the TNEP Service.
Function for selecting the given service. After service is selected NFC Poller waits a specific amount of time to perform the NDEF Read procedure to get new data from the NFC Tag device. This operation is asynchronous.
- Parameters:
svc_buf – [in] Pointer to the buffer for new data from the NFC TNEP Tag Device. Buffer must be stored until the Select procedure is finished.
svc – [in] Pointer to The TNEP Service to select.
max_ndef_area_size – [in] Maximum size of NDEF Message.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_svc_deselect(void)
Deselect the TNEP Service.
Function for deselecting the TNEP service. Service can be deselected also by selecting the other TNEP service without calling this function.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_svc_read(const struct nfc_tnep_buf *svc_buf)
Read the TNEP Service data.
Function for reading the TNEP Service data. The Service must be selected first. This operation is asynchronous.
- Parameters:
svc_buf – [inout] Pointer to buffer for data to read. It must be kept until this operation is finished.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_svc_write(const struct nfc_ndef_msg_desc *msg, const struct nfc_tnep_buf *resp_buf)
Write the TNEP Service data.
Function for writing the TNEP Service data. The Service must be selected first. After successful writing, library attempts to read new Service data after the specific amount of time. This operation is asynchronous.
- Parameters:
msg – [in] Pointer to the NDEF Message which will be written.
resp_buf – [in] Pointer to received data buffer. Buffer must be stored until the update procedure is finished.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_on_ndef_read(const uint8_t *data, size_t len)
Indicate NDEF data read.
This function must be called immediately after NFC Reader/Writer Device read new NDEF message from NFC TNEP Tag Device.
- Parameters:
data – [in] NDEF Read raw data.
len – [in] Read data length.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
int nfc_tnep_poller_on_ndef_write(void)
Indicate NDEF data write operation finish.
This function must be called immediately after NFC Reader/Writer Device write NDEF message on NFC TNEP Tag Device.
- Return values:
0 – If the operation was successful. Otherwise, a (negative) error code is returned.
-
const struct nfc_ndef_tnep_rec_svc_param *active_service_get(void)
Get the selected/active service.
- Return values:
Pointer – to the selected/active service. If no selected/active service then NULL pointer is returned.
-
struct nfc_tnep_poller_msg
- #include <poller.h>
TNEP Poller Message structure.
This structure contains NDEF Message pointer and TNEP status received from TNEP Status Message after the Tag Device received valid Service Select Message.
Public Members
-
enum nfc_tnep_status_value status
TNEP Status Type.
-
const struct nfc_ndef_msg_desc *msg
TNEP NDEF Message contains additional NDEF Records and NDEF Status Record.
-
enum nfc_tnep_status_value status
-
struct nfc_tnep_poller_ndef_api
- #include <poller.h>
TNEP Poller API structure.
This structure is used to provide an API for NFC NDEF Message operations like reading and writing. Depending on the connected tag type, appropriate API should be used.
Public Members
-
int (*ndef_read)(uint8_t *ndef_buf, uint16_t ndef_len)
Function used to read the NDEF Message.
It is called when TNEP Poller has to read NDEF data from NFC TNEP Tag Device.
- Param ndef_buf:
[out] Pointer to buffer where NDEF Message will be stored. This buffer has to be kept until the read operation is finished.
- Param ndef_len:
[in] Size of the NDEF Buffer
- Retval 0:
If the operation was successful. Otherwise, a (negative) error code is returned.
-
int (*ndef_update)(const uint8_t *ndef_buf, uint16_t ndef_len)
Function used to write the NDEF Message.
It is called when TNEP Poller attempts to update NDEF data on NFC TNEP Tag Device.
- Param ndef_buf:
[in] Buffer with NDEF Message to write. Buffer has to be kept until the write operation is finished.
- Param ndef_len:
[in] Length of NDEF Message to write.
- Retval 0:
If the operation was successful. Otherwise, a (negative) error code is returned.
-
int (*ndef_read)(uint8_t *ndef_buf, uint16_t ndef_len)
-
struct nfc_tnep_poller_cb
- #include <poller.h>
TNEP Poller callback structure.
Public Members
-
void (*svc_selected)(const struct nfc_ndef_tnep_rec_svc_param *param, const struct nfc_tnep_poller_msg *msg, bool timeout)
Function called when TNEP Service was selected.
Note
Service should be deselected in case of received timeout. The nfc_tnep_poller_svc_deselect should be used to it.
- Param param:
[in] Pointer to the selected service parameters.
- Param msg:
[in] Pointer to TNEP Poller Message structure contains status and received additional NDEF data.
- Param timeout:
[in] Indicates that TNEP Tag Device does not prepare NDEF Message within time.
-
void (*svc_deselected)(void)
Function called when current active TNEP Service was deselected.
-
void (*svc_received)(const struct nfc_ndef_tnep_rec_svc_param *param, const struct nfc_tnep_poller_msg *msg, bool timeout)
Function called when TNEP Service was read.
Note
Service should be deselected in case of received timeout. The nfc_tnep_poller_svc_deselect should be used to it.
- Param param:
[in] Pointer to the selected service parameters.
- Param msg:
[in] Pointer to TNEP Poller Message structure contains status and received additional NDEF data.
- Param timeout:
[in] Indicates that TNEP Tag Device does not prepare NDEF Message within time.
-
void (*svc_sent)(const struct nfc_ndef_tnep_rec_svc_param *param, const struct nfc_tnep_poller_msg *rsp_msg, bool timeout)
Function called when TNEP Service was written.
Note
Service should be deselected in case of received timeout. The nfc_tnep_poller_svc_deselect should be used to it.
- Param param:
[in] Pointer to the selected service parameters.
- Param rsp_msg:
[in] Pointer to TNEP Poller Message structure contains status and received response with additional NDEF data.
- Param timeout:
[in] Indicates that TNEP Tag Device does not prepare NDEF Message within time.
-
void (*error)(int err)
Function called when an internal error in TNEP Poller library was detected.
- Param err:
[in] Detected error code.
-
void (*svc_selected)(const struct nfc_ndef_tnep_rec_svc_param *param, const struct nfc_tnep_poller_msg *msg, bool timeout)
-
struct nfc_tnep_buf
- #include <poller.h>
TNEP Poller buffer structure.
-
int nfc_tnep_poller_init(const struct nfc_tnep_buf *tx_buf)