From c4f64279d3c63be3e67b19c7dc9fa8f82b874eb7 Mon Sep 17 00:00:00 2001 From: Sjef Verhoeven PE5PVB Date: Thu, 6 Jul 2023 22:33:30 +0200 Subject: [PATCH] Added LIC and optimised AF in API --- src/TEF6686.cpp | 96 ++++++++---- src/TEF6686.h | 7 +- src/language.h | 407 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 464 insertions(+), 46 deletions(-) diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index f5f51bb..a021ed4 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -357,24 +357,55 @@ void TEF6686::readRDS(bool showrdserrors) if (((bitRead(rds.rdsB, 3)) & 0x1F) == 1) rds.MS = 1; else rds.MS = 2; // Read MS flag //AF decoder - uint8_t af_controlCode = rds.rdsC >> 8; - if ((af_controlCode < 224) && (af_counter < 50)) { - uint16_t buffer0 = (rds.rdsC >> 8); - uint16_t buffer1 = (rds.rdsC & 0xFF); - rds.hasAF = true; - if (buffer0 != 0 && buffer1 != 0) { - buffer0 = buffer0 * 10 + 8750; - buffer1 = buffer1 * 10 + 8750; - bool isDouble = false; - isDouble = checkDouble(buffer0); - if (!isDouble && buffer0 != 0) { - af[af_counter].frequency = buffer0; - af_counter++; + if ((rds.rdsB >> 11) == 0 && af_counter < 50) { + uint16_t buffer0;// = (rds.rdsC >> 8); + uint16_t buffer1;// = (rds.rdsC & 0xFF); + + if ((rds.rdsC >> 8) > 0 && (rds.rdsC >> 8) < 205) buffer0 = (rds.rdsC >> 8) * 10 + 8750; else buffer0 = 0; + if ((rds.rdsC & 0xFF) > 0 && (rds.rdsC & 0xFF) < 205) buffer1 = (rds.rdsC & 0xFF) * 10 + 8750; else buffer1 = 0; + if (buffer0 != 0 || buffer1 != 0) rds.hasAF = true; + + bool isValuePresent = false; + for (int i = 0; i < 50; i++) { + if (buffer0 == currentfreq || buffer0 == 0 || af[i].frequency == buffer0) { + isValuePresent = true; + break; } - isDouble = checkDouble(buffer1); - if (!isDouble && buffer1 != 0) { - af[af_counter].frequency = buffer1; - af_counter++; + } + + if (!isValuePresent) { + af[af_counter].frequency = buffer0; + if ((rds.rdsC & 0xFF) == 205) af[af_counter].filler = true; + af_counter++; + } + + isValuePresent = false; + for (int i = 0; i < 50; i++) { + if (buffer1 == currentfreq || buffer1 == 0 || af[i].frequency == buffer1) { + isValuePresent = true; + break; + } + } + + if (!isValuePresent) { + af[af_counter].frequency = buffer1; + af_counter++; + } + + for (int i = 0; i < 51 - 1; i++) { + for (int j = 0; j < 51 - i - 1; j++) { + // Ignore elements with value 0 + if (af[j].frequency == 0) continue; + + if (af[j].frequency > af[j + 1].frequency && af[j + 1].frequency != 0) { + // Swap the elements + uint16_t temp = af[j].frequency; + bool temp2 = af[j].filler; + af[j].frequency = af[j + 1].frequency; + af[j].filler = af[j + 1].filler; + af[j + 1].frequency = temp; + af[j + 1].filler = temp2; + } } } } @@ -383,10 +414,15 @@ void TEF6686::readRDS(bool showrdserrors) case RDS_GROUP_1A: { if (rds.correct) { - if (rds.rdsC < 255) { // ECC code readout - rds.ECC = rds.rdsC; + if (rds.rdsC >> 12 == 0) { // ECC code readout + rds.ECC = rds.rdsC & 0xff; rds.hasECC = true; } + + if (rds.rdsC >> 12 == 3) { // ECC code readout + rds.LIC = rds.rdsC & 0xff; + rds.hasLIC = true; + } } } break; @@ -607,7 +643,7 @@ void TEF6686::readRDS(bool showrdserrors) eon[position].mappedfreq = ((rds.rdsC & 0xFF) * 10 + 8750); // Add mapped frequency to array } } - + } } } @@ -620,18 +656,6 @@ void TEF6686::readRDS(bool showrdserrors) } } -bool TEF6686::checkDouble (uint16_t value) -{ - for (int i = 0; i < 50; i++) if (af[i].frequency == value)return (true); - return (false); -} - -bool TEF6686::checkDoubleEON (uint16_t value) -{ - for (int i = 0; i < 5; i++) if (eon[i].pi == value)return (true); - return (false); -} - void TEF6686::clearRDS (bool fullsearchrds) { devTEF_Radio_Set_RDS(fullsearchrds); @@ -651,7 +675,11 @@ void TEF6686::clearRDS (bool fullsearchrds) for (i = 0; i < 65; i++) rt_buffer[i] = 0; for (i = 0; i < 18; i++) rds.stationType[i] = 0; for (i = 0; i < 6; i++) rds.picode[i] = 0; - for (i = 0; i < 50; i++) af[i].frequency = 0; + + for (i = 0; i < 50; i++) { + af[i].frequency = 0; + af[i].filler = false; + } for (i = 0; i < 5; i++) { eon[i].pi = 0; @@ -670,8 +698,10 @@ void TEF6686::clearRDS (bool fullsearchrds) } rds.ECC = 0; + rds.LIC = 0; rds.stationTypeCode = 32; rds.hasECC = false; + rds.hasLIC = false; rds.hasRT = false; rds.hasRDS = false; rds.hasTP = false; diff --git a/src/TEF6686.h b/src/TEF6686.h index e7b238d..ba1166b 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -106,7 +106,8 @@ typedef struct _rds_ { char picode[6]; uint16_t hours, minutes, days, months, years, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; int8_t offset; - int ECC; + unsigned int ECC; + unsigned int LIC; bool rdsAerror; bool rdsBerror; bool rdsCerror; @@ -117,6 +118,7 @@ typedef struct _rds_ { bool hasStereo; bool hasRDS; bool hasECC; + bool hasLIC; bool hasRT; bool hasTP; bool hasTA; @@ -138,6 +140,7 @@ typedef struct _rds_ { typedef struct _af_ { uint16_t frequency; + bool filler; } af_; typedef struct _eon_ { @@ -209,8 +212,6 @@ class TEF6686 { char rt_buffer[65]; char rt_buffer2[65]; bool useRTPlus = true; - bool checkDouble (uint16_t value); - bool checkDoubleEON (uint16_t value); byte eon_counter; bool ABold; char stationTextBuffer[65]; diff --git a/src/language.h b/src/language.h index 91b7b9d..e7b8c9b 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 myLanguage[9][87][85] = { +static const char myLanguage[9][130][85] = { { "English", // English "Rotary direction changed", // 1 "Please release button", // 2 @@ -87,7 +87,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Nederlands", // Dutch @@ -176,7 +219,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NIET MOGELIJK" // 86 + "NIET MOGELIJK", // 86 + "Albanees", // 87 + "Bretons", // 88 + "Catalaans", // 89 + "Kroatisch", // 90 + "Welsh", // 91 + "Tsjechisch", // 92 + "Deens", // 93 + "Duits", // 94 + "Engels", // 95 + "Spaans", // 96 + "Esperanto", // 97 + "Ests", // 98 + "Baskisch", // 99 + "Faroese", // 100 + "Frans", // 101 + "Fries", // 102 + "Iers", // 103 + "Gaelic", // 104 + "Gallicisch", // 105 + "IJslands", // 106 + "Italiaans", // 107 + "Laplands", // 108 + "Latijn", // 109 + "Lets", // 110 + "Luxemburgs", // 111 + "Litouws", // 112 + "Hongaars", // 113 + "Maltees", // 114 + "Nederlands", // 115 + "Noors", // 116 + "Occitaans", // 117 + "Pools", // 118 + "Portugees", // 119 + "Roemeens", // 120 + "Reto-Romaans", // 121 + "Servisch", // 122 + "Slowaaks", // 123 + "Sloveens", // 124 + "Fins", // 125 + "Zweeds", // 126 + "Turks", // 127 + "Vlaams", // 128 + "Waals" // 129 }, // { "Polski", // Polish @@ -265,7 +351,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Hrvatski", // Croatian @@ -354,7 +483,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Ελληνικά", // Greek @@ -443,7 +615,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Romana", // Romanian @@ -532,7 +747,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Deutsch", // German @@ -621,7 +879,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Czech", // Czech @@ -710,7 +1011,50 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, { "Slovak", // Slovak @@ -799,6 +1143,49 @@ static const char myLanguage[9][87][85] = { "Dendro", // 83 "Sakura", // 84 "Whiteout", // 85 - "NOT POSSIBLE" // 86 + "NOT POSSIBLE", // 86 + "Albanian", // 87 + "Breton", // 88 + "Catalan", // 89 + "Croatian", // 90 + "Welsh", // 91 + "Czech", // 92 + "Danish", // 93 + "German", // 94 + "English", // 95 + "Spanish", // 96 + "Esperanto", // 97 + "Estonian", // 98 + "Basque", // 99 + "Faroese", // 100 + "French", // 101 + "Frisian", // 102 + "Irish", // 103 + "Gaelic", // 104 + "Galician", // 105 + "Icelandic", // 106 + "Italian", // 107 + "Lappish", // 108 + "Latin", // 109 + "Latvian", // 110 + "Luxembourgian", // 111 + "Lithuanian", // 112 + "Hungarian", // 113 + "Maltese", // 114 + "Dutch", // 115 + "Norwegian", // 116 + "Occitan", // 117 + "Polish", // 118 + "Portuguese", // 119 + "Romanian", // 120 + "Romansh", // 121 + "Serbian", // 122 + "Slovak", // 123 + "Slovene", // 124 + "Finnish", // 125 + "Swedish", // 126 + "Turkish", // 127 + "Flemish", // 128 + "Walloon" // 129 }, };