Skip to content

Commit cfec12a

Browse files
committed
NFC Design: Add note about NDEF Message construction.
1 parent 7ed2a78 commit cfec12a

File tree

3 files changed

+75
-2
lines changed

3 files changed

+75
-2
lines changed

features/nfc/doc/nfc_design.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,7 +436,15 @@ virtual void on_parsing_terminated();
436436
437437
### Serialization
438438
439-
**TBD**
439+
The class `MessageBuilder` is used to map a record into an NDEF message. It
440+
includes a data buffer that contains the _raw_ message. Client code use the
441+
functions `append_record` to append a new record into the message being built.
442+
443+
![ndef_message_builder_diagram]
444+
445+
For convenience, serialization functions for common types are provided as well as
446+
a specialized `MessageBuilder` named `SimpleMessageBuilder` that exposes them
447+
in an object oriented fashion.
440448
441449
## HAL APIs
442450
@@ -508,4 +516,5 @@ There are currently at least four event queues (Plaftorm, BLE, USB, IP) in mbed
508516
[ndef_message_parser_diagram]: uml_diagram_ndef_message_parser.png
509517
[ndef_record_parser_diagram]: uml_diagram_ndef_record_parser.png
510518
[ndef_common_parsers_diagram]: uml_diagram_ndef_common_parsers.png
511-
[ndef_simple_parser_diagram]: uml_diagram_ndef_simple_parser.png
519+
[ndef_simple_parser_diagram]: uml_diagram_ndef_simple_parser.png
520+
[ndef_message_builder_diagram]: uml_diagram_ndef_message_builder_diagram.png
Loading
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
@startuml
2+
3+
package ndef {
4+
5+
class MessageBuilder {
6+
+MessageBuilder(uint8_t* buffer, size_t capacity)
7+
+~MessageBuilder()
8+
+bool append_record(const RecordType& type, const RecordPayload* payload, bool is_last_record = false)
9+
+bool append_record(const Record& record)
10+
+const uint8_t* get_data() const;
11+
+size_t get_data_size() const;
12+
}
13+
14+
class Record {
15+
}
16+
17+
class RecordType{
18+
}
19+
20+
class RecordPayload{
21+
}
22+
23+
class RecordID{
24+
}
25+
26+
Record *-- RecordType
27+
Record *-- "0..1" RecordPayload
28+
Record *-- "0..1" RecordID
29+
30+
Record - MessageBuilder: insert >
31+
32+
}
33+
34+
package common {
35+
36+
class SimpleMessageBuilder {
37+
+SimpleMessageBuilder(uint8_t* buffer, size_t capacity)
38+
+~SimpleMessageBuilder()
39+
+bool append_uri(const URI&)
40+
+bool append_text(const Text&)
41+
+bool append_mime(const Mime&)
42+
}
43+
44+
class URI {
45+
+friend bool append_record(ndef::MessageBuilder&, const URI&)
46+
}
47+
48+
class Text {
49+
+friend bool append_record(ndef::MessageBuilder&, const Text&)
50+
}
51+
52+
class Mime {
53+
+friend bool append_record(ndef::MessageBuilder&, const Mime&)
54+
}
55+
56+
SimpleMessageBuilder --|> MessageBuilder
57+
58+
URI -- SimpleMessageBuilder: wrap >
59+
Text -- SimpleMessageBuilder: wrap >
60+
Mime -- SimpleMessageBuilder: wrap >
61+
62+
}
63+
64+
@enduml

0 commit comments

Comments
 (0)