mirror of https://github.com/ARMmbed/mbed-os.git
87 lines
2.6 KiB
C++
87 lines
2.6 KiB
C++
/* mbed Microcontroller Library
|
|
* Copyright (c) 2018 ARM Limited
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include "NFCNDEFCapable.h"
|
|
|
|
#include "acore/ac_buffer.h"
|
|
#include "acore/ac_buffer_reader.h"
|
|
#include "acore/ac_buffer_builder.h"
|
|
|
|
#include "ndef/ndef.h"
|
|
|
|
using namespace mbed;
|
|
using namespace mbed::nfc;
|
|
|
|
NFCNDEFCapable::NFCNDEFCapable(const Span<uint8_t> &buffer)
|
|
{
|
|
ndef_msg_init(&_ndef_message, s_ndef_encode, s_ndef_decode, buffer.data(), buffer.size(), this);
|
|
}
|
|
|
|
void NFCNDEFCapable::parse_ndef_message(const ac_buffer_t &buffer)
|
|
{
|
|
ac_buffer_t reader;
|
|
ac_buffer_dup(&reader, &buffer);
|
|
|
|
Delegate *delegate = ndef_capable_delegate();
|
|
if (delegate != NULL) {
|
|
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)
|
|
{
|
|
Delegate *delegate = ndef_capable_delegate();
|
|
if (delegate != NULL) {
|
|
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);
|
|
}
|
|
}
|
|
|
|
nfc_err_t NFCNDEFCapable::s_ndef_encode(ndef_msg_t *pTag, ac_buffer_builder_t *pBufferBldr, void *pUserData)
|
|
{
|
|
NFCNDEFCapable *self = (NFCNDEFCapable *)pUserData;
|
|
return self->ndef_encode(pBufferBldr);
|
|
}
|
|
|
|
nfc_err_t NFCNDEFCapable::s_ndef_decode(ndef_msg_t *pTag, ac_buffer_t *pBuffer, void *pUserData)
|
|
{
|
|
NFCNDEFCapable *self = (NFCNDEFCapable *)pUserData;
|
|
return self->ndef_decode(pBuffer);
|
|
}
|
|
|
|
nfc_err_t NFCNDEFCapable::ndef_encode(ac_buffer_builder_t *pBufferBldr)
|
|
{
|
|
build_ndef_message(*pBufferBldr);
|
|
return NFC_OK;
|
|
}
|
|
|
|
nfc_err_t NFCNDEFCapable::ndef_decode(ac_buffer_t *pBuffer)
|
|
{
|
|
parse_ndef_message(*pBuffer);
|
|
return NFC_OK;
|
|
}
|
|
|
|
ndef_msg_t *NFCNDEFCapable::ndef_message()
|
|
{
|
|
return &_ndef_message;
|
|
}
|
|
|
|
NFCNDEFCapable::Delegate *NFCNDEFCapable::ndef_capable_delegate()
|
|
{
|
|
return NULL;
|
|
}
|