-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
199 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
#include "text_payload.hpp" | ||
|
||
namespace ArduinoNDEF | ||
{ | ||
namespace Field | ||
{ | ||
|
||
TextPayload *TextPayload::from_text(const char *text, const char *language_code) | ||
{ | ||
if (text == nullptr || language_code == nullptr) | ||
return nullptr; | ||
|
||
uint32_t language_code_length = strlen(language_code); | ||
|
||
if (language_code_length != 2 && language_code_length != 5) | ||
return nullptr; | ||
if (language_code_length == 5 && language_code[2] != '-') | ||
return nullptr; | ||
|
||
uint32_t header_length = 1 + language_code_length; | ||
uint8_t header[header_length]; | ||
header[0] = language_code_length; | ||
memcpy(header + 1, language_code, language_code_length); | ||
|
||
uint32_t text_length = strlen(text); | ||
uint32_t payload_length = header_length + text_length; | ||
|
||
auto payload_data = new uint8_t[payload_length]; | ||
if (payload_data == nullptr) | ||
return nullptr; | ||
|
||
memcpy(payload_data, header, header_length); | ||
memcpy(payload_data + header_length, text, text_length); | ||
|
||
return new TextPayload(payload_data, payload_length); | ||
} | ||
|
||
const char *TextPayload::to_text() const | ||
{ | ||
auto language_code_length = _data[0]; | ||
auto header_length = /* language_length */ 1 + /* language */ language_code_length; | ||
auto text_length = _length - header_length; | ||
auto text = new char[text_length + 1]; | ||
|
||
if (text == nullptr) | ||
return nullptr; | ||
|
||
memcpy(text, _data + header_length, text_length); | ||
text[text_length] = '\0'; | ||
|
||
return text; | ||
} | ||
|
||
const char *TextPayload::to_language_code() const | ||
{ | ||
auto language_code_length = _data[0]; | ||
auto language_code = new char[language_code_length + 1]; | ||
|
||
if (language_code == nullptr) | ||
return nullptr; | ||
|
||
memcpy(language_code, _data + 1, language_code_length); | ||
language_code[language_code_length] = '\0'; | ||
|
||
return language_code; | ||
} | ||
|
||
} // namespace Field | ||
} // namespace ArduinoNDEF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#pragma once | ||
|
||
#include "payload.hpp" | ||
|
||
namespace ArduinoNDEF | ||
{ | ||
namespace Field | ||
{ | ||
|
||
class TextPayload : public Payload | ||
{ | ||
public: | ||
/** | ||
* @brief Create a NDEF text payload | ||
* @param text The text | ||
* @param language_code The language | ||
* @return A pointer to a new NDEF text payload object | ||
*/ | ||
static TextPayload *from_text(const char *text, const char *language_code); | ||
|
||
/** | ||
* @brief Get the text | ||
* @return The text C-string | ||
* @note Memory is allocated for the text string and it is the responsibility of the | ||
* caller to free it | ||
*/ | ||
const char *to_text() const; | ||
|
||
/** | ||
* @brief Get the language code | ||
* @return The language code C-string | ||
* @note Memory is allocated for the language code string and it is the | ||
* responsibility of the caller to free it | ||
*/ | ||
const char *to_language_code() const; | ||
|
||
private: | ||
TextPayload(const uint8_t *data, uint8_t length) : | ||
Payload(data, length, OwnershipUnique) | ||
{ | ||
} | ||
}; | ||
|
||
} // namespace Field | ||
} // namespace ArduinoNDEF |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters