From bf44b0566d778b1097b1e0a46103f97ddff3210a Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Mon, 31 Jul 2023 20:04:55 +0200 Subject: [PATCH] Update radiotext Plus --- TEF6686_ESP32.ino | 4 +- src/TEF6686.cpp | 16 +++++- src/TEF6686.h | 2 +- src/language.h | 130 ++++++++++++++++++++++++++-------------------- 4 files changed, 90 insertions(+), 62 deletions(-) diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 9a6a5e4..b232431 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -3399,7 +3399,7 @@ void ShowAdvancedRDS() { eonstringold = eonstring; String rtplusstring; - if (radio.rds.hasRDSplus) rtplusstring = "1) " + String(radio.rds.RTContent1) + " - 2) " + String(radio.rds.RTContent2) + " "; else rtplusstring = myLanguage[language][89]; + if (radio.rds.hasRDSplus) rtplusstring = String(myLanguage[language][radio.rds.rdsplusTag1]) + ": " + String(radio.rds.RTContent1) + " - " + String(myLanguage[language][radio.rds.rdsplusTag2]) + ": " + String(radio.rds.RTContent2) + " "; else rtplusstring = myLanguage[language][89]; if (hasrtplusold != radio.rds.hasRDSplus) { if (radio.rds.hasRDSplus) tftPrint(-1, "RT+", 124, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "RT+", 124, 51, GreyoutColor, BackgroundColor, FONT16); hasrtplusold = radio.rds.hasRDSplus; @@ -5091,7 +5091,7 @@ void Communication() { XDRGTKTCP = true; RemoteClient.print("o1,0\n"); store = true; - } else if (RDSSPYTCP == false && XDRGTKTCP == false && data_str.length() < 5 && data_str == ("*D*R?F")) + } else if (RDSSPYTCP == false && XDRGTKTCP == false && data_str.length() < 6 && data_str == ("*D*R?F")) { RDSSPYTCP = true; } else if (RDSSPYTCP == true) { diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index 4943baf..6494d55 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -734,8 +734,8 @@ void TEF6686::readRDS(bool showrdserrors) case RDS_GROUP_13A: { // RT+ decoding if (rds.correct && rtplusblock == rdsblock && rds.hasRDSplus) { // Are we in the right RT+ block and is all ok to go? - uint16_t content_type_1 = ((rds.rdsB & 0x07) << 3) + (rds.rdsC >> 13); - uint16_t content_type_2 = ((rds.rdsC & 0x01) << 5) + (rds.rdsD >> 11); + rds.rdsplusTag1 = ((rds.rdsB & 0x07) << 3) + (rds.rdsC >> 13); + rds.rdsplusTag2 = ((rds.rdsC & 0x01) << 5) + (rds.rdsD >> 11); uint16_t start_marker_1 = (rds.rdsC >> 7) & 0x3F; uint16_t length_marker_1 = (rds.rdsC >> 1) & 0x3F; uint16_t start_marker_2 = (rds.rdsD >> 5) & 0x3F; @@ -743,6 +743,18 @@ void TEF6686::readRDS(bool showrdserrors) togglebit = bitRead(lowByte(rds.rdsB), 4); runningbit = bitRead(lowByte(rds.rdsB), 3); + switch (rds.rdsplusTag1) { + case 1 ... 53: rds.rdsplusTag1 += 111; break; + case 59 ... 63: rds.rdsplusTag1 += 105; break; + default: rds.rdsplusTag1 = 169; break; + } + + switch (rds.rdsplusTag2) { + case 1 ... 53: rds.rdsplusTag2 += 111; break; + case 59 ... 63: rds.rdsplusTag2 += 105; break; + default: rds.rdsplusTag2 = 169; break; + } + if (togglebit) { for (int i = 0; i < 45; i++) { RDSplus1[i] = 0; diff --git a/src/TEF6686.h b/src/TEF6686.h index 5a5d872..596bc98 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -126,7 +126,7 @@ typedef struct _rds_ { String PTYN; char stationType[18]; char picode[7]; - uint16_t hour, minute, day, month, year, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr, correctPI; + uint16_t hour, minute, day, month, year, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr, correctPI, rdsplusTag1, rdsplusTag2; int8_t offset; unsigned int ECC; unsigned int LIC; diff --git a/src/language.h b/src/language.h index f651519..fea9d48 100644 --- a/src/language.h +++ b/src/language.h @@ -1,6 +1,6 @@ // [number of languages][number of texts][max. length of text] -static const char* const myLanguage[16][169] = { +static const char* const myLanguage[16][170] = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -169,7 +169,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + " " // 169 }, { "Nederlands", // Dutch @@ -281,66 +282,67 @@ static const char* const myLanguage[16][169] = { "OIRT", // 106 "Rotating while screen off", // 107 "Model selector", // 108 - "Base (ILI9341)", // 109 + "Basis (ILI9341)", // 109 "Portable (ILI9341)", // 110 "Portable touch (ILI9341)", // 111 - "Title", // 112 + "Titel", // 112 "Album", // 113 - "Track", // 114 - "Artist", // 115 - "Composition", // 116 - "Movement", // 117 - "Conductor", // 118 - "Composer", // 119 + "Nummer", // 114 + "Artiest", // 115 + "Compositie", // 116 + "Deel", // 117 + "Dirigent", // 118 + "Componist", // 119 "Band", // 120 - "Comment", // 121 + "Opmerking", // 121 "Genre", // 122 - "News", // 123 - "Local news", // 124 - "Stockmarket", // 125 + "Nieuws", // 123 + "Lokaal nieuws", // 124 + "Financiële beurs", // 125 "Sport", // 126 - "Lottery", // 127 - "Horoscope", // 128 - "Daily Diversion", // 129 - "Health", // 130 - "Event", // 131 + "Loterij", // 127 + "Horoscoop", // 128 + "Dagelijkse grap", // 129 + "Gezondheid", // 130 + "Evenement", // 131 "Scene", // 132 - "Cinema", // 133 + "Bioscoop", // 133 "TV", // 134 - "Date/time", //135 - "Weather", // 136 - "Traffic", // 137 + "Datum/tijd", //135 + "Weer", // 136 + "Verkeer", // 137 "Alarm", // 138 - "Advertisement", // 139 + "Advertentie", // 139 "Website", // 140 - "Other", // 141 - "Short PS", // 142 - "Long PS", // 143 - "Now", // 144 - "Next", //145 - "Part", // 146 + "Overige", // 141 + "Korte naam", // 142 + "Lange naam", // 143 + "Nu", // 144 + "Straks", //145 + "Deel", // 146 "Host", // 147 - "Editor", // 148 - "Frequency", // 149 + "Regiseur", // 148 + "Frequentie", // 149 "Homepage", // 150 - "Subchannel", // 151 + "Subkanaal", // 151 "Hotline", // 152 - "Studio phone", // 153 - "Phone", // 154 + "Studio telefoon", // 153 + "Telefoon", // 154 "SMS studio", // 155 "SMS", // 156 "Email hotline", // 157 "Email studio", // 158 "Email", // 159 "Chat", // 160 - "Chat centre", // 161 - "Vote question", // 162 - "Vote centre", // 163 - "Place", // 164 - "Appointment", // 165 - "Identifier", // 166 - "Purchase", // 167 - "Get data" // 168 + "Chat centrum", // 161 + "Stemming", // 162 + "Stemcentrum", // 163 + "Plaats", // 164 + "Afspraak", // 165 + "Identificatie", // 166 + "Aankoop", // 167 + "Verkrijg data", // 168 + "" // 169 }, { "Polski", // Polish @@ -511,7 +513,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Hrvatski", // Croatian @@ -682,7 +685,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Ελληνικά", // Greek @@ -853,7 +857,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Romana", // Romanian @@ -1024,7 +1029,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Deutsch", // German @@ -1195,7 +1201,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Czech", // Czech @@ -1366,7 +1373,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Slovak", // Slovak @@ -1537,7 +1545,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Français", // French @@ -1708,7 +1717,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Български", // Bulgarian @@ -1879,7 +1889,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Русский", // Russian @@ -2050,7 +2061,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Українська", // Ukranian @@ -2221,7 +2233,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Italiano", // Italian @@ -2392,7 +2405,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Simplified Chinese", // Simplified Chinese @@ -2563,7 +2577,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 }, { "Norsk", // Norwegian @@ -2734,7 +2749,8 @@ static const char* const myLanguage[16][169] = { "Appointment", // 165 "Identifier", // 166 "Purchase", // 167 - "Get data" // 168 + "Get data", // 168 + "" // 169 } };