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 0000000000..c74ec06a4c Binary files /dev/null and b/features/nfc/doc/uml_diagram_ndef_message_builder_diagram.png differ 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