summaryrefslogtreecommitdiffstats
path: root/src/MuxElements.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2019-01-29 15:55:17 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2019-01-29 15:55:17 +0100
commit4acf7a34c202293884739b40af699943d7e8e9d9 (patch)
tree1f6b2d0a8c3646723c7785aa1f3fad25b7aadc1f /src/MuxElements.cpp
parent2346b17f650e56f70046e95a54f356a8e3e29107 (diff)
downloaddabmux-4acf7a34c202293884739b40af699943d7e8e9d9.tar.gz
dabmux-4acf7a34c202293884739b40af699943d7e8e9d9.tar.bz2
dabmux-4acf7a34c202293884739b40af699943d7e8e9d9.zip
Add partial FIG2 label support
Add support for Ensemble label, programme services and components, although the implementation for the component label is not properly tested. (data services still to be done) Neither short labels nor UCS-2 are not yet implemented. Also, support for draftETSI TS 103 176 which redefines the meaning of Rfa is still pending.
Diffstat (limited to 'src/MuxElements.cpp')
-rw-r--r--src/MuxElements.cpp61
1 files changed, 36 insertions, 25 deletions
diff --git a/src/MuxElements.cpp b/src/MuxElements.cpp
index 9c1fc7a..5bdbcdc 100644
--- a/src/MuxElements.cpp
+++ b/src/MuxElements.cpp
@@ -184,13 +184,13 @@ const string AnnouncementCluster::get_parameter(const string& parameter) const
int DabLabel::setLabel(const std::string& label)
{
try {
- auto ebu_label = charset_converter.convert(label, false);
+ auto ebu_label = charset_converter.utf8_to_ebu(label, false);
size_t len = ebu_label.length();
if (len > DABLABEL_LENGTH) {
return -3;
}
- m_label = ebu_label;
+ m_fig1_label = ebu_label;
}
catch (const utf8::exception& e) {
etiLog.level(warn) << "Failed to convert label '" << label <<
@@ -201,10 +201,10 @@ int DabLabel::setLabel(const std::string& label)
return -3;
}
- m_label = label;
+ m_fig1_label = label;
}
- m_flag = 0xFF00; // truncate the label to the eight first characters
+ m_fig1_flag = 0xFF00; // truncate the label to the eight first characters
return 0;
}
@@ -212,23 +212,23 @@ int DabLabel::setLabel(const std::string& label)
int DabLabel::setLabel(const std::string& label, const std::string& short_label)
{
DabLabel newlabel;
- newlabel.m_flag = 0xFF00;
+ newlabel.m_fig1_flag = 0xFF00;
try {
- newlabel.m_label = charset_converter.convert(label, false);
+ newlabel.m_fig1_label = charset_converter.utf8_to_ebu(label, false);
- size_t len = newlabel.m_label.length();
+ size_t len = newlabel.m_fig1_label.length();
if (len > DABLABEL_LENGTH) {
return -3;
}
- int flag = newlabel.setShortLabel(
- charset_converter.convert(short_label, false));
+ int flag = newlabel.setFIG1ShortLabel(
+ charset_converter.utf8_to_ebu(short_label, false));
if (flag < 0) {
return flag;
}
- m_flag = flag & 0xFFFF;
+ m_fig1_flag = flag & 0xFFFF;
}
catch (const utf8::exception& e) {
etiLog.level(warn) << "Failed to convert label '" << label <<
@@ -241,8 +241,8 @@ int DabLabel::setLabel(const std::string& label, const std::string& short_label)
return -3;
}
- newlabel.m_label = label;
- newlabel.m_flag = 0xFF00;
+ newlabel.m_fig1_label = label;
+ newlabel.m_fig1_flag = 0xFF00;
int result = newlabel.setLabel(label);
if (result < 0) {
@@ -250,16 +250,16 @@ int DabLabel::setLabel(const std::string& label, const std::string& short_label)
}
/* First check if we can actually create the short label */
- int flag = newlabel.setShortLabel(short_label);
+ int flag = newlabel.setFIG1ShortLabel(short_label);
if (flag < 0) {
return flag;
}
- m_flag = flag & 0xFFFF;
+ m_fig1_flag = flag & 0xFFFF;
}
// short label is valid.
- m_label = newlabel.m_label;
+ m_fig1_label = newlabel.m_fig1_label;
return 0;
}
@@ -280,7 +280,7 @@ int DabLabel::setLabel(const std::string& label, const std::string& short_label)
* -1 if the short_label is not a representable
* -2 if the short_label is too long
*/
-int DabLabel::setShortLabel(const std::string& slabel)
+int DabLabel::setFIG1ShortLabel(const std::string& slabel)
{
const char* slab = slabel.c_str();
uint16_t flag = 0x0;
@@ -288,8 +288,8 @@ int DabLabel::setShortLabel(const std::string& slabel)
/* Iterate over the label and set the bits in the flag
* according to the characters in the slabel
*/
- for (size_t i = 0; i < m_label.size(); ++i) {
- if (*slab == m_label[i]) {
+ for (size_t i = 0; i < m_fig1_label.size(); ++i) {
+ if (*slab == m_fig1_label[i]) {
flag |= 0x8000 >> i;
if (*(++slab) == '\0') {
break;
@@ -321,26 +321,37 @@ int DabLabel::setShortLabel(const std::string& slabel)
const string DabLabel::long_label() const
{
- return charset_converter.convert_ebu_to_utf8(m_label);
+ return charset_converter.ebu_to_utf8(m_fig1_label);
}
const string DabLabel::short_label() const
{
stringstream shortlabel;
- for (size_t i = 0; i < m_label.size(); ++i) {
- if (m_flag & 0x8000 >> i) {
- shortlabel << m_label[i];
+ for (size_t i = 0; i < m_fig1_label.size(); ++i) {
+ if (m_fig1_flag & 0x8000 >> i) {
+ shortlabel << m_fig1_label[i];
}
}
- return charset_converter.convert_ebu_to_utf8(shortlabel.str());
+ return charset_converter.ebu_to_utf8(shortlabel.str());
+}
+
+const string DabLabel::fig2_label() const
+{
+ return m_fig2_label;
+}
+
+int DabLabel::setFIG2Label(const std::string& label)
+{
+ m_fig2_label = label;
+ return 0;
}
void DabLabel::writeLabel(uint8_t* buf) const
{
memset(buf, ' ', DABLABEL_LENGTH);
- if (m_label.size() <= DABLABEL_LENGTH) {
- std::copy(m_label.begin(), m_label.end(), (char*)buf);
+ if (m_fig1_label.size() <= DABLABEL_LENGTH) {
+ std::copy(m_fig1_label.begin(), m_fig1_label.end(), (char*)buf);
}
}