mirror of https://github.com/ARMmbed/mbed-os.git
NFC: Integrate nfc targets with Span
The goal is to play nicely with the NDEF message framework.pull/7822/head
parent
dcf38eec50
commit
b985b2c00b
|
@ -26,6 +26,8 @@
|
||||||
#include "NFCDefinitions.h"
|
#include "NFCDefinitions.h"
|
||||||
#include "NFCControllerDriver.h"
|
#include "NFCControllerDriver.h"
|
||||||
|
|
||||||
|
#include "platform/Span.h"
|
||||||
|
|
||||||
namespace mbed {
|
namespace mbed {
|
||||||
namespace nfc {
|
namespace nfc {
|
||||||
|
|
||||||
|
@ -93,9 +95,8 @@ public:
|
||||||
* @param[in] driver a pointer to a NFCControllerDriver instance
|
* @param[in] driver a pointer to a NFCControllerDriver instance
|
||||||
* @param[in] queue a pointer to the events queue to use
|
* @param[in] queue a pointer to the events queue to use
|
||||||
* @param[in] ndef_buffer a bytes array used to store NDEF messages
|
* @param[in] ndef_buffer a bytes array used to store NDEF messages
|
||||||
* @param[in] ndef_buffer_sz the array size in bytes
|
|
||||||
*/
|
*/
|
||||||
NFCController(NFCControllerDriver *driver, events::EventQueue *queue, uint8_t *ndef_buffer, size_t ndef_buffer_sz);
|
NFCController(NFCControllerDriver *driver, events::EventQueue *queue, const Span<uint8_t> &ndef_buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the NFC controller
|
* Initialize the NFC controller
|
||||||
|
@ -174,8 +175,7 @@ private:
|
||||||
Timeout _timeout;
|
Timeout _timeout;
|
||||||
Delegate *_delegate;
|
Delegate *_delegate;
|
||||||
bool _discovery_running;
|
bool _discovery_running;
|
||||||
uint8_t *_ndef_buffer;
|
Span<uint8_t> _ndef_buffer;
|
||||||
size_t _ndef_buffer_sz;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -51,9 +51,8 @@ public:
|
||||||
* @param[in] driver a pointer to a NFCEEPROMDriver instance
|
* @param[in] driver a pointer to a NFCEEPROMDriver instance
|
||||||
* @param[in] queue a pointer to the events queue to use
|
* @param[in] queue a pointer to the events queue to use
|
||||||
* @param[in] ndef_buffer a bytes array used to store NDEF messages
|
* @param[in] ndef_buffer a bytes array used to store NDEF messages
|
||||||
* @param[in] ndef_buffer_sz the array size in bytes
|
|
||||||
*/
|
*/
|
||||||
NFCEEPROM(NFCEEPROMDriver *driver, events::EventQueue *queue, uint8_t *ndef_buffer, size_t ndef_buffer_sz);
|
NFCEEPROM(NFCEEPROMDriver *driver, events::EventQueue *queue, const Span<uint8_t> &ndef_buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The NFCEEPROM delegate. Users of the NFCEEPROM class need to implement this delegate's methods to receive events.
|
* The NFCEEPROM delegate. Users of the NFCEEPROM class need to implement this delegate's methods to receive events.
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include "platform/Span.h"
|
||||||
|
|
||||||
#include "NFCDefinitions.h"
|
#include "NFCDefinitions.h"
|
||||||
|
|
||||||
#include "nfc/stack/ndef/ndef.h"
|
#include "nfc/stack/ndef/ndef.h"
|
||||||
|
@ -42,9 +44,8 @@ public:
|
||||||
/**
|
/**
|
||||||
* Construct a NFCNDEFCapable instance.
|
* Construct a NFCNDEFCapable instance.
|
||||||
* @param[in] buffer a bytes array used to store NDEF messages
|
* @param[in] buffer a bytes array used to store NDEF messages
|
||||||
* @param[in] buffer_size the array size in bytes
|
|
||||||
*/
|
*/
|
||||||
NFCNDEFCapable(uint8_t *buffer, size_t buffer_size);
|
NFCNDEFCapable(const Span<uint8_t>& buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if this instance actually supports NDEF content.
|
* Check if this instance actually supports NDEF content.
|
||||||
|
@ -61,18 +62,17 @@ public:
|
||||||
* Parse a NDEF message.
|
* Parse a NDEF message.
|
||||||
*
|
*
|
||||||
* @param[in] buffer a buffer containing the message to parse
|
* @param[in] buffer a buffer containing the message to parse
|
||||||
* @param[in] size the buffer's size
|
|
||||||
*/
|
*/
|
||||||
virtual void parse_ndef_message(const uint8_t *buffer, size_t size) { }
|
virtual void parse_ndef_message(const Span<const uint8_t> &buffer) { }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build a NDEF message.
|
* Build a NDEF message.
|
||||||
*
|
*
|
||||||
* @param[in] buffer a mutable buffer in which the message should be stored
|
* @param[in] buffer a mutable buffer in which the message should be stored
|
||||||
* @param[in] capacity the buffer's capacity
|
*
|
||||||
* @return the number of bytes actually used
|
* @return the number of bytes actually used
|
||||||
*/
|
*/
|
||||||
virtual size_t build_ndef_message(uint8_t *buffer, size_t capacity)
|
virtual size_t build_ndef_message(const Span<uint8_t> &buffer)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include "NFCNDEFCapable.h"
|
#include "NFCNDEFCapable.h"
|
||||||
#include "stack/tech/iso7816/iso7816_app.h"
|
#include "stack/tech/iso7816/iso7816_app.h"
|
||||||
|
|
||||||
|
#include "platform/Span.h"
|
||||||
|
|
||||||
namespace mbed {
|
namespace mbed {
|
||||||
namespace nfc {
|
namespace nfc {
|
||||||
|
|
||||||
|
@ -47,7 +49,7 @@ public:
|
||||||
* @param[in] buffer a bytes array used to store NDEF messages
|
* @param[in] buffer a bytes array used to store NDEF messages
|
||||||
* @param[in] buffer_size the array size in bytes
|
* @param[in] buffer_size the array size in bytes
|
||||||
*/
|
*/
|
||||||
NFCRemoteInitiator(NFCController *controller, uint8_t *buffer, size_t buffer_size);
|
NFCRemoteInitiator(NFCController *controller, const Span<uint8_t>& buffer);
|
||||||
virtual ~NFCRemoteInitiator();
|
virtual ~NFCRemoteInitiator();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
#include "NFCDefinitions.h"
|
#include "NFCDefinitions.h"
|
||||||
#include "NFCNDEFCapable.h"
|
#include "NFCNDEFCapable.h"
|
||||||
|
|
||||||
|
#include "platform/Span.h"
|
||||||
|
|
||||||
namespace mbed {
|
namespace mbed {
|
||||||
namespace nfc {
|
namespace nfc {
|
||||||
|
|
||||||
|
@ -41,9 +43,8 @@ public:
|
||||||
* Create a NFCTarget.
|
* Create a NFCTarget.
|
||||||
*
|
*
|
||||||
* @param[in] buffer a bytes array used to store NDEF messages
|
* @param[in] buffer a bytes array used to store NDEF messages
|
||||||
* @param[in] buffer_size the array size in bytes
|
|
||||||
*/
|
*/
|
||||||
NFCTarget(uint8_t *buffer, size_t buffer_size);
|
NFCTarget(const Span<uint8_t> &buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NFCTarget destructor
|
* NFCTarget destructor
|
||||||
|
|
|
@ -28,6 +28,8 @@
|
||||||
#include "nfc/acore/acore/ac_buffer_builder.h"
|
#include "nfc/acore/acore/ac_buffer_builder.h"
|
||||||
#include "nfc/stack/tech/type4/type4_target.h"
|
#include "nfc/stack/tech/type4/type4_target.h"
|
||||||
|
|
||||||
|
#include "platform/Span.h"
|
||||||
|
|
||||||
namespace mbed {
|
namespace mbed {
|
||||||
namespace nfc {
|
namespace nfc {
|
||||||
|
|
||||||
|
@ -48,7 +50,7 @@ public:
|
||||||
* @param[in] buffer a bytes array used to store NDEF messages
|
* @param[in] buffer a bytes array used to store NDEF messages
|
||||||
* @param[in] buffer_size the array size in bytes
|
* @param[in] buffer_size the array size in bytes
|
||||||
*/
|
*/
|
||||||
Type4RemoteInitiator(NFCController *controller, uint8_t *buffer, size_t buffer_size);
|
Type4RemoteInitiator(NFCController *controller, const Span<uint8_t> &buffer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type4RemoteInitiator destructor.
|
* Type4RemoteInitiator destructor.
|
||||||
|
|
|
@ -23,8 +23,8 @@
|
||||||
using namespace mbed;
|
using namespace mbed;
|
||||||
using namespace mbed::nfc;
|
using namespace mbed::nfc;
|
||||||
|
|
||||||
NFCController::NFCController(NFCControllerDriver *driver, events::EventQueue *queue, uint8_t *ndef_buffer, size_t ndef_buffer_sz) :
|
NFCController::NFCController(NFCControllerDriver *driver, events::EventQueue *queue, const Span<uint8_t> &ndef_buffer) :
|
||||||
_driver(driver), _queue(queue), _transceiver(NULL), _scheduler(NULL), _delegate(NULL), _discovery_running(false), _ndef_buffer(ndef_buffer), _ndef_buffer_sz(ndef_buffer_sz)
|
_driver(driver), _queue(queue), _transceiver(NULL), _scheduler(NULL), _delegate(NULL), _discovery_running(false), _ndef_buffer(ndef_buffer)
|
||||||
{
|
{
|
||||||
_driver->set_delegate(this);
|
_driver->set_delegate(this);
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ void NFCController::polling_callback(nfc_err_t ret)
|
||||||
if (!transceiver_is_initiator_mode(_transceiver)) {
|
if (!transceiver_is_initiator_mode(_transceiver)) {
|
||||||
nfc_tech_t active_tech = transceiver_get_active_techs(_transceiver);
|
nfc_tech_t active_tech = transceiver_get_active_techs(_transceiver);
|
||||||
if (active_tech.nfc_iso_dep_a || active_tech.nfc_iso_dep_b) {
|
if (active_tech.nfc_iso_dep_a || active_tech.nfc_iso_dep_b) {
|
||||||
Type4RemoteInitiator *type4_remote_initiator_ptr = new (std::nothrow) Type4RemoteInitiator(this, _ndef_buffer, _ndef_buffer_sz);
|
Type4RemoteInitiator *type4_remote_initiator_ptr = new (std::nothrow) Type4RemoteInitiator(this, _ndef_buffer);
|
||||||
if (type4_remote_initiator_ptr != NULL) {
|
if (type4_remote_initiator_ptr != NULL) {
|
||||||
SharedPtr<NFCRemoteInitiator> type4_remote_initiator(type4_remote_initiator_ptr);
|
SharedPtr<NFCRemoteInitiator> type4_remote_initiator(type4_remote_initiator_ptr);
|
||||||
if (_delegate != NULL) {
|
if (_delegate != NULL) {
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
using namespace mbed;
|
using namespace mbed;
|
||||||
using namespace mbed::nfc;
|
using namespace mbed::nfc;
|
||||||
|
|
||||||
NFCEEPROM::NFCEEPROM(NFCEEPROMDriver *driver, events::EventQueue *queue, uint8_t *ndef_buffer, size_t ndef_buffer_sz) : NFCTarget(ndef_buffer, ndef_buffer_sz),
|
NFCEEPROM::NFCEEPROM(NFCEEPROMDriver *driver, events::EventQueue *queue, const Span<uint8_t> &ndef_buffer) : NFCTarget(ndef_buffer),
|
||||||
_delegate(NULL), _driver(driver), _initialized(false), _current_op(nfc_eeprom_idle), _ndef_buffer_read_sz(0), _eeprom_address(0), _operation_result(NFC_ERR_UNKNOWN)
|
_delegate(NULL), _driver(driver), _initialized(false), _current_op(nfc_eeprom_idle), _ndef_buffer_read_sz(0), _eeprom_address(0), _operation_result(NFC_ERR_UNKNOWN)
|
||||||
{
|
{
|
||||||
_driver->set_delegate(this);
|
_driver->set_delegate(this);
|
||||||
|
|
|
@ -25,9 +25,9 @@
|
||||||
using namespace mbed;
|
using namespace mbed;
|
||||||
using namespace mbed::nfc;
|
using namespace mbed::nfc;
|
||||||
|
|
||||||
NFCNDEFCapable::NFCNDEFCapable(uint8_t *buffer, size_t buffer_size) : _delegate(NULL)
|
NFCNDEFCapable::NFCNDEFCapable(const Span<uint8_t>& buffer) : _delegate(NULL)
|
||||||
{
|
{
|
||||||
ndef_msg_init(&_ndef_message, s_ndef_encode, s_ndef_decode, buffer, buffer_size, this);
|
ndef_msg_init(&_ndef_message, s_ndef_encode, s_ndef_decode, buffer.data(), buffer.size(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NFCNDEFCapable::set_ndef_delegate(NFCNDEFCapable::Delegate *delegate)
|
void NFCNDEFCapable::set_ndef_delegate(NFCNDEFCapable::Delegate *delegate)
|
||||||
|
@ -40,14 +40,14 @@ void NFCNDEFCapable::parse_ndef_message(const ac_buffer_t &buffer)
|
||||||
ac_buffer_t reader;
|
ac_buffer_t reader;
|
||||||
ac_buffer_dup(&reader, &buffer);
|
ac_buffer_dup(&reader, &buffer);
|
||||||
if (_delegate != NULL) {
|
if (_delegate != NULL) {
|
||||||
_delegate->parse_ndef_message(ac_buffer_reader_current_buffer_pointer(&reader), ac_buffer_reader_current_buffer_length(&reader));
|
_delegate->parse_ndef_message(make_const_Span(ac_buffer_reader_current_buffer_pointer(&reader), ac_buffer_reader_current_buffer_length(&reader)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NFCNDEFCapable::build_ndef_message(ac_buffer_builder_t &buffer_builder)
|
void NFCNDEFCapable::build_ndef_message(ac_buffer_builder_t &buffer_builder)
|
||||||
{
|
{
|
||||||
if (_delegate != NULL) {
|
if (_delegate != NULL) {
|
||||||
size_t count = _delegate->build_ndef_message(ac_buffer_builder_write_position(&buffer_builder), ac_buffer_builder_writable(&buffer_builder));
|
size_t count = _delegate->build_ndef_message(make_Span(ac_buffer_builder_write_position(&buffer_builder), ac_buffer_builder_writable(&buffer_builder)));
|
||||||
ac_buffer_builder_write_n_skip(&buffer_builder, count);
|
ac_buffer_builder_write_n_skip(&buffer_builder, count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
using namespace mbed;
|
using namespace mbed;
|
||||||
using namespace mbed::nfc;
|
using namespace mbed::nfc;
|
||||||
|
|
||||||
NFCRemoteInitiator::NFCRemoteInitiator(NFCController *controller, uint8_t *buffer, size_t buffer_size) :
|
NFCRemoteInitiator::NFCRemoteInitiator(NFCController *controller, const Span<uint8_t> &buffer) :
|
||||||
NFCRemoteEndpoint(controller), NFCNDEFCapable(buffer, buffer_size)
|
NFCRemoteEndpoint(controller), NFCNDEFCapable(buffer)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
using namespace mbed;
|
using namespace mbed;
|
||||||
using namespace mbed::nfc;
|
using namespace mbed::nfc;
|
||||||
|
|
||||||
NFCTarget::NFCTarget(uint8_t *buffer, size_t buffer_size) :
|
NFCTarget::NFCTarget(const Span<uint8_t> &buffer) :
|
||||||
NFCNDEFCapable(buffer, buffer_size)
|
NFCNDEFCapable(buffer)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
using namespace mbed;
|
using namespace mbed;
|
||||||
using namespace mbed::nfc;
|
using namespace mbed::nfc;
|
||||||
|
|
||||||
Type4RemoteInitiator::Type4RemoteInitiator(NFCController *controller, uint8_t *buffer, size_t buffer_size) :
|
Type4RemoteInitiator::Type4RemoteInitiator(NFCController *controller, const Span<uint8_t> &buffer) :
|
||||||
NFCRemoteInitiator(controller, buffer, buffer_size),
|
NFCRemoteInitiator(controller, buffer),
|
||||||
_is_connected(false), _is_disconnected(false)
|
_is_connected(false), _is_disconnected(false)
|
||||||
{
|
{
|
||||||
// Init ISO7816
|
// Init ISO7816
|
||||||
|
|
Loading…
Reference in New Issue