mbed-os/features/nfc/nfc/NFCNDEFCapable.h

131 lines
3.3 KiB
C++

/* mbed Microcontroller Library
* Copyright (c) 2018 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MBED_NFC_NDEF_CAPABLE_H
#define MBED_NFC_NDEF_CAPABLE_H
#include <stdint.h>
#include "platform/Span.h"
#include "NFCDefinitions.h"
#include "nfc/stack/ndef/ndef.h"
#include "nfc/acore/acore/ac_buffer.h"
#include "nfc/acore/acore/ac_buffer_reader.h"
#include "nfc/acore/acore/ac_buffer_builder.h"
namespace mbed {
namespace nfc {
/**
* @addtogroup nfc
* @{
*/
/**
* The base class for all endpoints that can support NDEF content.
*/
class NFCNDEFCapable {
public:
/**
* Construct a NFCNDEFCapable instance.
* @param[in] buffer a bytes array used to store NDEF messages
*/
NFCNDEFCapable(const Span<uint8_t> &buffer);
/**
* Check if this instance actually supports NDEF content.
*
* @return whether NDEF content is supported
*/
virtual bool is_ndef_supported() const
{
return false;
}
struct Delegate {
/**
* Parse a NDEF message.
*
* @param[in] buffer a buffer containing the message to parse
*/
virtual void parse_ndef_message(const Span<const uint8_t> &buffer) { }
/**
* Build a NDEF message.
*
* @param[in] buffer a mutable buffer in which the message should be stored
*
* @return the number of bytes actually used
*/
virtual size_t build_ndef_message(const Span<uint8_t> &buffer)
{
return 0;
}
protected:
~Delegate() {}
};
protected:
/**
* Parse a NDEF message.
*
* @param[in] buffer a buffer containing a NDEF message
*/
void parse_ndef_message(const ac_buffer_t &buffer);
/**
* Build NDEF message.
*
* @param[in,out] buffer_builder a buffer builder in which to create the NDEF message.
* The backing buffer is guaranteed to be continuous.
*/
void build_ndef_message(ac_buffer_builder_t &buffer_builder);
/**
* Retrieve underlying NDEF message instance
* @return pointer to NDEF message instance
*/
ndef_msg_t *ndef_message();
private:
/**
* Get the delegate that will receive events generated by this class.
*
* @return the delegate instance to use
*/
virtual Delegate *ndef_capable_delegate();
// Callbacks from NDEF stack
static nfc_err_t s_ndef_encode(ndef_msg_t *pTag, ac_buffer_builder_t *pBufferBldr, void *pUserData);
static nfc_err_t s_ndef_decode(ndef_msg_t *pTag, ac_buffer_t *pBuffer, void *pUserData);
nfc_err_t ndef_encode(ac_buffer_builder_t *pBufferBldr);
nfc_err_t ndef_decode(ac_buffer_t *pBuffer);
ndef_msg_t _ndef_message;
};
/**
* @}
*/
} // namespace nfc
} // namespace mbed
#endif