#include "ndef_record_text.h" #include "ndef_record.h" namespace esphome { namespace nfc { static const char *const TAG = "nfc.ndef_record_text"; NdefRecordText::NdefRecordText(const std::vector &payload) { if (payload.empty()) { ESP_LOGE(TAG, "Record payload too short"); return; } uint8_t language_code_length = payload[0] & 0b00111111; // Todo, make use of encoding bit? if (1 + language_code_length > payload.size()) { ESP_LOGE(TAG, "Record payload too short for language code"); return; } this->language_code_ = std::string(payload.begin() + 1, payload.begin() + 1 + language_code_length); this->text_ = std::string(payload.begin() + 1 + language_code_length, payload.end()); this->tnf_ = TNF_WELL_KNOWN; this->type_ = "T"; } std::vector NdefRecordText::get_encoded_payload() { std::vector data; uint8_t flag_byte = this->language_code_.length() & 0b00111111; // UTF8 assumed data.push_back(flag_byte); data.insert(data.end(), this->language_code_.begin(), this->language_code_.end()); data.insert(data.end(), this->text_.begin(), this->text_.end()); return data; } } // namespace nfc } // namespace esphome