From cfec12adb5cda4fcd92f4fd0f3424687eb5e8878 Mon Sep 17 00:00:00 2001 From: Vincent Coubard Date: Tue, 31 Jul 2018 14:31:14 +0100 Subject: [PATCH] NFC Design: Add note about NDEF Message construction. --- features/nfc/doc/nfc_design.md | 13 +++- ...l_diagram_ndef_message_builder_diagram.png | Bin 0 -> 44260 bytes ...l_diagram_ndef_message_builder_diagram.txt | 64 ++++++++++++++++++ 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 features/nfc/doc/uml_diagram_ndef_message_builder_diagram.png create mode 100644 features/nfc/doc/uml_diagram_ndef_message_builder_diagram.txt diff --git a/features/nfc/doc/nfc_design.md b/features/nfc/doc/nfc_design.md index 23b0c2fb98..dedd53d8de 100644 --- a/features/nfc/doc/nfc_design.md +++ b/features/nfc/doc/nfc_design.md @@ -436,7 +436,15 @@ virtual void on_parsing_terminated(); ### Serialization -**TBD** +The class `MessageBuilder` is used to map a record into an NDEF message. It +includes a data buffer that contains the _raw_ message. Client code use the +functions `append_record` to append a new record into the message being built. + +![ndef_message_builder_diagram] + +For convenience, serialization functions for common types are provided as well as +a specialized `MessageBuilder` named `SimpleMessageBuilder` that exposes them +in an object oriented fashion. ## HAL APIs @@ -508,4 +516,5 @@ There are currently at least four event queues (Plaftorm, BLE, USB, IP) in mbed [ndef_message_parser_diagram]: uml_diagram_ndef_message_parser.png [ndef_record_parser_diagram]: uml_diagram_ndef_record_parser.png [ndef_common_parsers_diagram]: uml_diagram_ndef_common_parsers.png -[ndef_simple_parser_diagram]: uml_diagram_ndef_simple_parser.png \ No newline at end of file +[ndef_simple_parser_diagram]: uml_diagram_ndef_simple_parser.png +[ndef_message_builder_diagram]: uml_diagram_ndef_message_builder_diagram.png \ No newline at end of file diff --git a/features/nfc/doc/uml_diagram_ndef_message_builder_diagram.png b/features/nfc/doc/uml_diagram_ndef_message_builder_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c74ec06a4cf4a4def30acfb88b725165e44540ab GIT binary patch literal 44260 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 Ja*kfS@o&FxwtD~o literal 0 HcmV?d00001 diff --git a/features/nfc/doc/uml_diagram_ndef_message_builder_diagram.txt b/features/nfc/doc/uml_diagram_ndef_message_builder_diagram.txt new file mode 100644 index 0000000000..286fcbe813 --- /dev/null +++ b/features/nfc/doc/uml_diagram_ndef_message_builder_diagram.txt @@ -0,0 +1,64 @@ +@startuml + +package ndef { + +class MessageBuilder { + +MessageBuilder(uint8_t* buffer, size_t capacity) + +~MessageBuilder() + +bool append_record(const RecordType& type, const RecordPayload* payload, bool is_last_record = false) + +bool append_record(const Record& record) + +const uint8_t* get_data() const; + +size_t get_data_size() const; +} + +class Record { +} + +class RecordType{ +} + +class RecordPayload{ +} + +class RecordID{ +} + +Record *-- RecordType +Record *-- "0..1" RecordPayload +Record *-- "0..1" RecordID + +Record - MessageBuilder: insert > + +} + +package common { + +class SimpleMessageBuilder { + +SimpleMessageBuilder(uint8_t* buffer, size_t capacity) + +~SimpleMessageBuilder() + +bool append_uri(const URI&) + +bool append_text(const Text&) + +bool append_mime(const Mime&) +} + +class URI { ++friend bool append_record(ndef::MessageBuilder&, const URI&) +} + +class Text { ++friend bool append_record(ndef::MessageBuilder&, const Text&) +} + +class Mime { ++friend bool append_record(ndef::MessageBuilder&, const Mime&) +} + +SimpleMessageBuilder --|> MessageBuilder + +URI -- SimpleMessageBuilder: wrap > +Text -- SimpleMessageBuilder: wrap > +Mime -- SimpleMessageBuilder: wrap > + +} + +@enduml \ No newline at end of file