Introduce NFCNDEFCapable class

pull/7426/head
Donatien Garnier 2018-08-03 18:16:26 +01:00
parent 5cb43e6bb3
commit 212ac48a46
1 changed files with 50 additions and 9 deletions

View File

@ -188,13 +188,34 @@ virtual void on_lost();
This is called when this endpoint has been lost and the reference to the shared pointer is about to be released by the controller instance. This is called when this endpoint has been lost and the reference to the shared pointer is about to be released by the controller instance.
#### NFC NDEF Capable
This class is inherited by all endpoints that have the capability of handling NDEF data.
User-facing API:
```cpp
bool is_ndef_supported() const;
void set_ndef_message_parser(ndef::MessageParser* parser) const;
void set_ndef_message_builder(ndef::MessageBuilder* builder) const;
```
The user can select which parser/builder (see below) should be used to handle read/write requests.
API used by descendant classes:
```cpp
void set_ndef_support(bool supported);
ndef::MessageParser* ndef_message_parser();
ndef::MessageBuilder* ndef_message_builder();
```
#### NFC Remote Initiator #### NFC Remote Initiator
This class derives from the base `NFCEndpoint` class. This class derives from the base `NFCEndpoint` and `NFCNDEFCapable` classes.
```cpp ```cpp
bool is_ndef_supported(); bool is_ndef_supported();
size_t nfc_tag_type();
void set_ndef_message(const NDEFMessage& message); void set_ndef_message(const NDEFMessage& message);
void clear_ndef_message(); void clear_ndef_message();
@ -202,11 +223,27 @@ NDEFMessage get_ndef_message();
``` ```
These methods provide access to the NDEF message that we are exposing to the remote initiator. These methods provide access to the NDEF message that we are exposing to the remote initiator.
```cpp
enum nfc_tag_type_t {
nfc_tag_type_1,
nfc_tag_type_2,
nfc_tag_type_3,
nfc_tag_type_4a,
nfc_tag_type_4b,
nfc_tag_type_5
};
```
```cpp
nfc_tag_type_t nfc_tag_type();
```
Additionally the type of NFC tag (1 to 5) which is being emulated can be recovered. Additionally the type of NFC tag (1 to 5) which is being emulated can be recovered.
```cpp ```cpp
bool is_iso7816_supported(); bool is_iso7816_supported();
void add_iso7816_application(const ISO7816App& app); void add_iso7816_application(ISO7816App* app);
``` ```
If supported by the underlying technology (ISO-DEP), a contactless smartcard can be emulated and ISO7816-4 applications can be registered using this API. If supported by the underlying technology (ISO-DEP), a contactless smartcard can be emulated and ISO7816-4 applications can be registered using this API.
@ -235,18 +272,22 @@ This is the base class for NFC targets that can be of two types:
Apart from the actual transport (Wired or NFC), the usage is very similar which explains why these methods are shared across these devices types. Apart from the actual transport (Wired or NFC), the usage is very similar which explains why these methods are shared across these devices types.
This class derives from `NFCNDEFCapable`.
```cpp ```cpp
void write_ndef_message(const NDEFMessage& message) void write_ndef_message();
void erase_ndef_message() void erase_ndef_message();
void read_ndef_message() void read_ndef_message();
``` ```
Calling these functions will trigger the appropriate NDEF parsing/building process if handlers are registered in the `NFCNDEFCapable` instance.
**Delegate** **Delegate**
```cpp ```cpp
void on_ndef_message_written(nfc_err_t result) void on_ndef_message_erased(nfc_err_t result);
void on_ndef_message_erased(nfc_err_t result) void on_ndef_message_written(nfc_err_t result);
void on_ndef_message_read(nfc_err_t result, NDEFMessage* message) void on_ndef_message_read(nfc_err_t result);
``` ```
#### NFC EEPROM #### NFC EEPROM