Skip to content

Commit c9ee59f

Browse files
author
Qinghao Shi
authored
Merge pull request #87 from mprse/NFC_examples
Add NFC examples
2 parents 0b659e7 + 5a932e5 commit c9ee59f

File tree

9 files changed

+178
-0
lines changed

9 files changed

+178
-0
lines changed

.circleci/config.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,5 @@ jobs:
3030
mbed config root .
3131
mbed update
3232
mbed add https://github.com/c1728p9/AudioPlayer
33+
mbed add https://github.com/ARMmbed/mbed-nfc-m24sr
3334
mbed test --compile -m K64F -t GCC_ARM -n sinppet-* --app-config=sinppet/TESTS/test.json -v

APIs_NFC/MessageBuilder/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## MessageBuilder Example
2+
3+
This MessageBuilder example shows how to build an NDEF message into a user-provided buffer. `URI`, `Text` and `Mime` types can be serialized in the builder with the help of the member function `append_as_record`.

APIs_NFC/MessageBuilder/main.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
* Copyright (c) 2006-2020 Arm Limited and affiliates.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
#include "mbed.h"
6+
#include "nfc/ndef/MessageBuilder.h"
7+
#include "nfc/ndef/common/URI.h"
8+
#include "nfc/ndef/common/Text.h"
9+
#include "nfc/ndef/common/util.h"
10+
11+
using mbed::nfc::ndef::MessageBuilder;
12+
using mbed::nfc::ndef::common::Text;
13+
using mbed::nfc::ndef::common::URI;
14+
using mbed::nfc::ndef::common::span_from_cstr;
15+
16+
int main()
17+
{
18+
uint8_t message_data[128];
19+
const Span<uint8_t, 128> buffer(message_data, sizeof(message_data));
20+
21+
MessageBuilder builder(buffer);
22+
23+
URI uri(URI::HTTPS_WWW, span_from_cstr("mbed.com"));
24+
Text text(Text::UTF8, span_from_cstr("en-US"), span_from_cstr("Mbed website"));
25+
26+
uri.append_as_record(builder);
27+
text.append_as_record(builder, /* last record */ true);
28+
29+
printf("Message size: %d bytes\r\n", builder.get_message().size());
30+
}

APIs_NFC/NFCController/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# NFCController example
2+
3+
This example shows how to use an NFC controller.

APIs_NFC/NFCController/main.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) 2006-2020 Arm Limited and affiliates.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
#include "stdint.h"
6+
#include "NFC.h"
7+
#include "events/EventQueue.h"
8+
#include "nfc/controllers/PN512Driver.h"
9+
#include "nfc/controllers/PN512SPITransportDriver.h"
10+
11+
static uint8_t ndef_buffer[1024] = {0};
12+
13+
int main()
14+
{
15+
mbed::nfc::PN512SPITransportDriver pn512_transport(D11, D12, D13, D10, A1, A0);
16+
mbed::nfc::PN512Driver pn512_driver(&pn512_transport);
17+
events::EventQueue queue;
18+
mbed::nfc::NFCController nfc(&pn512_driver, &queue, ndef_buffer);
19+
20+
// ...
21+
}

APIs_NFC/NFC_EEPROM/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# NFCEEPROM example
2+
3+
This example shows how to use an NFCEEPROM class.

APIs_NFC/NFC_EEPROM/main.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright (c) 2006-2020 Arm Limited and affiliates.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
#include "stdint.h"
6+
7+
#include "NFC.h"
8+
#include "events/EventQueue.h"
9+
#include "m24sr_driver.h"
10+
11+
static uint8_t ndef_buffer[1024] = {0};
12+
13+
int main()
14+
{
15+
mbed::nfc::vendor::ST::M24srDriver m24sr_driver(D14, D15);
16+
events::EventQueue queue;
17+
mbed::nfc::NFCEEPROM nfc(&m24sr_driver, &queue, ndef_buffer);
18+
19+
// ...
20+
nfc.write_ndef_message();
21+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## SimpleMessageParser Example
2+
3+
This SimpleMessageParser example shows how to parse NDEF messages.

APIs_NFC/SimpleMessageParser/main.cpp

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Copyright (c) 2006-2020 Arm Limited and affiliates.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
#include "mbed.h"
6+
#include "nfc/ndef/MessageBuilder.h"
7+
#include "nfc/ndef/common/URI.h"
8+
#include "nfc/ndef/common/Text.h"
9+
#include "nfc/ndef/common/util.h"
10+
#include "nfc/ndef/common/SimpleMessageParser.h"
11+
12+
using mbed::nfc::ndef::Record;
13+
using mbed::nfc::ndef::RecordType;
14+
using mbed::nfc::ndef::RecordID;
15+
using mbed::nfc::ndef::MessageParser;
16+
using mbed::nfc::ndef::common::Text;
17+
using mbed::nfc::ndef::common::URI;
18+
using mbed::nfc::ndef::common::Mime;
19+
using mbed::nfc::ndef::MessageBuilder;
20+
using mbed::nfc::ndef::common::span_from_cstr;
21+
using mbed::nfc::ndef::common::SimpleMessageParser;
22+
23+
int main()
24+
{
25+
uint8_t message_data[512];
26+
const Span<uint8_t, 512> buffer(message_data, sizeof(message_data));
27+
28+
MessageBuilder builder(buffer);
29+
30+
Text text(Text::UTF8, span_from_cstr("en-US"), span_from_cstr("Mbed website"));
31+
URI uri(URI::HTTPS_WWW, span_from_cstr("mbed.com"));
32+
33+
uri.append_as_record(builder);
34+
text.append_as_record(builder, /* last record */ true);
35+
36+
SimpleMessageParser parser;
37+
struct : SimpleMessageParser::Delegate {
38+
virtual void on_parsing_started()
39+
{
40+
printf("parsing started\r\n");
41+
}
42+
43+
virtual void on_text_parsed(const Text &text, const RecordID &)
44+
{
45+
printf("Text record parsed.\r\n");
46+
printf(
47+
"\tlanguage: %.*s\r\n",
48+
text.get_language_code().size(), text.get_language_code().data()
49+
);
50+
printf("\ttext: %.*s\r\n", text.get_text().size(), text.get_text().data());
51+
}
52+
53+
virtual void on_uri_parsed(const URI &uri, const RecordID &)
54+
{
55+
printf("URI parsed.\r\n");
56+
printf("\tid: %d\r\n", uri.get_id());
57+
printf("\tvalue: %.*s\r\n", uri.get_uri_field().size(), uri.get_uri_field().data());
58+
}
59+
60+
virtual void on_mime_parsed(const Mime &mime, const RecordID &)
61+
{
62+
printf("Mime object parsed.\r\n");
63+
printf("\ttype: %.*s\r\n", mime.get_mime_type().size(), mime.get_mime_type().data());
64+
printf("\tcontent size: %d\r\n", mime.get_mime_content().size());
65+
}
66+
67+
virtual void on_unknown_record_parsed(const Record &record)
68+
{
69+
printf("Unknown record parsed.\r\n");
70+
printf(
71+
"\ttype: %d, type_value: %.*s\r\n",
72+
record.type.tnf, record.type.value.size(), record.type.value.data()
73+
);
74+
printf(
75+
"\tpayload size: %d, payload: %.*s\r\n",
76+
record.payload.size(), record.payload.size(), record.payload.data()
77+
);
78+
}
79+
80+
virtual void on_parsing_terminated()
81+
{
82+
printf("parsing terminated\r\n");
83+
}
84+
85+
virtual void on_parsing_error(MessageParser::error_t error)
86+
{
87+
printf("Parsing error: %d\r\n", error);
88+
}
89+
} delegate;
90+
91+
parser.set_delegate(&delegate);
92+
parser.parse(buffer);
93+
}

0 commit comments

Comments
 (0)