Fixed theme selector

Also finished EON in API
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-07-06 20:36:19 +02:00
parent aa0b041f33
commit 00d78899f6
4 changed files with 193 additions and 117 deletions
+33 -53
View File
@@ -88,6 +88,7 @@ int batupdatetimer;
byte BWset; byte BWset;
byte colorinvert; byte colorinvert;
byte ContrastSet; byte ContrastSet;
byte CurrentTheme;
byte displayflip; byte displayflip;
byte ECCold; byte ECCold;
byte EQset; byte EQset;
@@ -166,8 +167,6 @@ int ActiveColor;
int OptimizerColor; int OptimizerColor;
int RDSColor; int RDSColor;
int StereoColor; int StereoColor;
int CurrentTheme;
int16_t OStatus; int16_t OStatus;
int16_t SAvg; int16_t SAvg;
int16_t SAvg2; int16_t SAvg2;
@@ -250,8 +249,8 @@ WiFiUDP Udp;
void setup() { void setup() {
setupmode = true; setupmode = true;
EEPROM.begin(265); EEPROM.begin(261);
if (EEPROM.readByte(43) != 28) DefaultSettings(); if (EEPROM.readByte(43) != 29) DefaultSettings();
frequency = EEPROM.readUInt(0); frequency = EEPROM.readUInt(0);
VolSet = EEPROM.readInt(4); VolSet = EEPROM.readInt(4);
@@ -302,7 +301,7 @@ void setup() {
HighEdgeOIRTSet = EEPROM.readUInt(254); HighEdgeOIRTSet = EEPROM.readUInt(254);
colorinvert = EEPROM.readByte(258); colorinvert = EEPROM.readByte(258);
deepsleep = EEPROM.readByte(259); deepsleep = EEPROM.readByte(259);
CurrentTheme = EEPROM.readInt(260); CurrentTheme = EEPROM.readByte(260);
LWLowEdgeSet = FREQ_LW_LOW_EDGE_MIN; // later will read from flash LWLowEdgeSet = FREQ_LW_LOW_EDGE_MIN; // later will read from flash
LWHighEdgeSet = FREQ_LW_HIGH_EDGE_MAX; // later will read from flash LWHighEdgeSet = FREQ_LW_HIGH_EDGE_MAX; // later will read from flash
@@ -350,7 +349,7 @@ void setup() {
tft.init(); tft.init();
tft.invertDisplay(colorinvert); tft.invertDisplay(colorinvert);
doTheme();
if (displayflip == 0) { if (displayflip == 0) {
#ifdef ARS #ifdef ARS
tft.setRotation(0); tft.setRotation(0);
@@ -471,7 +470,7 @@ void setup() {
uint16_t device; uint16_t device;
uint16_t hw; uint16_t hw;
uint16_t sw; uint16_t sw;
doTheme();
radio.getIdentification(device, hw, sw); radio.getIdentification(device, hw, sw);
if (TEF != (highByte(hw) * 100 + highByte(sw))) SetTunerPatch(); if (TEF != (highByte(hw) * 100 + highByte(sw))) SetTunerPatch();
tft.fillRect(120, 230, 16, 6, PrimaryColor); tft.fillRect(120, 230, 16, 6, PrimaryColor);
@@ -717,7 +716,7 @@ void SleepWake(bool isSleep) {
analogWrite(CONTRASTPIN, 0); analogWrite(CONTRASTPIN, 0);
StoreFrequency(); StoreFrequency();
if (deepsleep) radio.power(1); if (deepsleep) radio.power(1);
}else { } else {
if (deepsleep) { if (deepsleep) {
ESP.restart(); ESP.restart();
} }
@@ -1237,10 +1236,10 @@ void ModeButtonPress() {
tft.setFreeFont(FONT14); tft.setFreeFont(FONT14);
tft.setTextColor(ActiveColor, BackgroundColor); tft.setTextColor(ActiveColor, BackgroundColor);
tft.setCursor (70, 60); tft.setCursor (70, 60);
tft.drawString("NOT POSSIBLE", 70, 60, GFXFF); tft.drawString(myLanguage[language][86], 70, 60, GFXFF);
delay(1000); delay(1000);
tft.setTextColor(BackgroundColor); tft.setTextColor(BackgroundColor);
tft.drawString("NOT POSSIBLE", 70, 60, GFXFF); tft.drawString(myLanguage[language][86], 70, 60, GFXFF);
ShowFreq(0); ShowFreq(0);
} else { } else {
if (menu == false) { if (menu == false) {
@@ -1308,7 +1307,7 @@ void ModeButtonPress() {
EEPROM.writeUInt(254, HighEdgeOIRTSet); EEPROM.writeUInt(254, HighEdgeOIRTSet);
EEPROM.writeByte(258, colorinvert); EEPROM.writeByte(258, colorinvert);
EEPROM.writeByte(259, deepsleep); EEPROM.writeByte(259, deepsleep);
EEPROM.writeInt(260, CurrentTheme); EEPROM.writeByte(260, CurrentTheme);
EEPROM.commit(); EEPROM.commit();
Serial.end(); Serial.end();
if (wifi) remoteip = IPAddress (WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], subnetclient); if (wifi) remoteip = IPAddress (WiFi.localIP()[0], WiFi.localIP()[1], WiFi.localIP()[2], subnetclient);
@@ -1734,10 +1733,9 @@ void ButtonPress() {
switch (menuoption) { switch (menuoption) {
case 30: case 30:
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(myLanguage[language][77], 150, 70, 4); tft.drawCentreString(myLanguage[language][77], 155, 70, GFXFF);
doTheme();
tft.setTextColor(TFT_WHITE); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(CurrentThemeString, 150, 110, 4); tft.drawCentreString(CurrentThemeString, 155, 110, GFXFF);
break; break;
case 50: case 50:
@@ -2145,15 +2143,12 @@ void KeyUp() {
switch (menuoption) { switch (menuoption) {
case 30: case 30:
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawCentreString(CurrentThemeString, 150, 110, 4); tft.drawCentreString(CurrentThemeString, 155, 110, GFXFF);
CurrentTheme += 1; CurrentTheme ++;
if (CurrentTheme > 7) { if (CurrentTheme > 7) CurrentTheme = 0;
CurrentTheme = 0;
}
doTheme(); doTheme();
tft.setTextColor(ActiveColor); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(CurrentThemeString, 150, 110, 4); tft.drawCentreString(CurrentThemeString, 155, 110, GFXFF);
break; break;
case 70: case 70:
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
@@ -2536,16 +2531,14 @@ void KeyDown() {
switch (menuoption) { switch (menuoption) {
case 30: case 30:
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
tft.drawCentreString(CurrentThemeString, 150, 110, 4); tft.drawCentreString(CurrentThemeString, 155, 110, GFXFF);
CurrentTheme -= 1; CurrentTheme --;
if (CurrentTheme < 0) { if (CurrentTheme > 7) CurrentTheme = 7;
CurrentTheme = 7;
}
doTheme(); doTheme();
tft.setTextColor(ActiveColor); tft.setTextColor(TFT_WHITE);
tft.drawCentreString(CurrentThemeString, 150, 110, 4); tft.drawCentreString(CurrentThemeString, 155, 110, GFXFF);
break; break;
case 70: case 70:
tft.setTextColor(TFT_BLACK); tft.setTextColor(TFT_BLACK);
if (deepsleep) tft.drawCentreString(myLanguage[language][75], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][76], 155, 110, GFXFF); if (deepsleep) tft.drawCentreString(myLanguage[language][75], 155, 110, GFXFF); else tft.drawCentreString(myLanguage[language][76], 155, 110, GFXFF);
@@ -4822,7 +4815,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = TFT_RED; StereoColor = TFT_RED;
RDSColor = PrimaryColor; RDSColor = PrimaryColor;
CurrentThemeString = "Default"; CurrentThemeString = myLanguage[language][78];
break; break;
case 1: // Cyan theme case 1: // Cyan theme
PrimaryColor = 0x0F3F; PrimaryColor = 0x0F3F;
@@ -4835,7 +4828,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = 0xF3F; StereoColor = 0xF3F;
RDSColor = 0xFFFF; RDSColor = 0xFFFF;
CurrentThemeString = "Cyan"; CurrentThemeString = myLanguage[language][79];
break; break;
case 2: // Crimson theme case 2: // Crimson theme
PrimaryColor = 0xF8C3; PrimaryColor = 0xF8C3;
@@ -4848,7 +4841,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = 0xF8C3; StereoColor = 0xF8C3;
RDSColor = 0xFFFF; RDSColor = 0xFFFF;
CurrentThemeString = "Crimson"; CurrentThemeString = myLanguage[language][80];
break; break;
case 3: // Monochrome theme case 3: // Monochrome theme
PrimaryColor = 0xFFFF; PrimaryColor = 0xFFFF;
@@ -4861,7 +4854,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = 0xFFFF; StereoColor = 0xFFFF;
RDSColor = 0xFFFF; RDSColor = 0xFFFF;
CurrentThemeString = "Monochrome"; CurrentThemeString = myLanguage[language][81];
break; break;
case 4: // Volcano theme case 4: // Volcano theme
PrimaryColor = 0xFC00; PrimaryColor = 0xFC00;
@@ -4874,7 +4867,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = 0xFC00; StereoColor = 0xFC00;
RDSColor = 0xFFFF; RDSColor = 0xFFFF;
CurrentThemeString = "Volcano"; CurrentThemeString = myLanguage[language][82];
break; break;
case 5: // Dendro theme case 5: // Dendro theme
PrimaryColor = TFT_GREEN; PrimaryColor = TFT_GREEN;
@@ -4887,7 +4880,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = TFT_GREEN; StereoColor = TFT_GREEN;
RDSColor = PrimaryColor; RDSColor = PrimaryColor;
CurrentThemeString = "Dendro"; CurrentThemeString = myLanguage[language][83];
break; break;
case 6: // Sakura theme case 6: // Sakura theme
PrimaryColor = 0xF3D5; PrimaryColor = 0xF3D5;
@@ -4900,7 +4893,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 1; OptimizerColor = 1;
StereoColor = 0xF3D5; StereoColor = 0xF3D5;
RDSColor = ActiveColor; RDSColor = ActiveColor;
CurrentThemeString = "Sakura"; CurrentThemeString = myLanguage[language][84];
break; break;
case 7: // Whiteout theme case 7: // Whiteout theme
PrimaryColor = 0x0000; PrimaryColor = 0x0000;
@@ -4913,20 +4906,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
OptimizerColor = 0xFFDF; OptimizerColor = 0xFFDF;
StereoColor = 0x0000; StereoColor = 0x0000;
RDSColor = 0x0000; RDSColor = 0x0000;
CurrentThemeString = "Whiteout"; CurrentThemeString = myLanguage[language][85];
break;
default:
PrimaryColor = 0xFFE0;
SecondaryColor = 0xFFFF;
FrequencyColor = 0xFFE0;
FrameColor = 0x001F;
GreyoutColor = 0x38E7;
BackgroundColor = 0x0000;
ActiveColor = 0xFFFF;
OptimizerColor = 1;
StereoColor = TFT_RED;
RDSColor = PrimaryColor;
CurrentThemeString = "Default";
break; break;
} }
} }
@@ -5000,7 +4980,7 @@ void passwordcrypt() {
} }
void DefaultSettings() { void DefaultSettings() {
EEPROM.writeByte(43, 28); EEPROM.writeByte(43, 29);
EEPROM.writeUInt(0, 10000); EEPROM.writeUInt(0, 10000);
EEPROM.writeInt(4, 0); EEPROM.writeInt(4, 0);
EEPROM.writeUInt(8, 0); EEPROM.writeUInt(8, 0);
@@ -5052,6 +5032,6 @@ void DefaultSettings() {
EEPROM.writeUInt(254, 0); EEPROM.writeUInt(254, 0);
EEPROM.writeByte(258, 0); EEPROM.writeByte(258, 0);
EEPROM.writeByte(259, 0); EEPROM.writeByte(259, 0);
EEPROM.writeInt(260, 0); EEPROM.writeByte(260, 0);
EEPROM.commit(); EEPROM.commit();
} }
+55 -42
View File
@@ -420,8 +420,7 @@ void TEF6686::readRDS(bool showrdserrors)
} }
} break; } break;
case RDS_GROUP_4A: case RDS_GROUP_4A: {
case RDS_GROUP_4B: {
if (rds.correct) { if (rds.correct) {
// CT // CT
uint32_t mjd; uint32_t mjd;
@@ -561,47 +560,57 @@ void TEF6686::readRDS(bool showrdserrors)
break; break;
case RDS_GROUP_14A: { case RDS_GROUP_14A: {
if (rds.correct) rds.hasEON = true; // Group is there, so we have EON // EON
if (rds.correct) {
rds.hasEON = true; // Group is there, so we have EON
bool isValuePresent = false; bool isValuePresent = false;
for (int i = 0; i < 5; i++) { for (int i = 0; i < 5; i++) {
if (eon[i].pi == rds.rdsD) { if (eon[i].pi == rds.rdsD) { // Check if EON is already in array
isValuePresent = true; isValuePresent = true;
break; break;
} }
} }
if (!isValuePresent) { if (!isValuePresent) {
eon[eon_counter].pi = rds.rdsD; eon[eon_counter].pi = rds.rdsD; // Store PI on next array
eon_counter++; eon_counter++;
} }
offset = rds.rdsB & 0x0F;
if (offset < 4) {
byte position;
for (position = 0; position < 5; position++) {
if (eon[position].pi == rds.rdsD) {
break;
}
}
eon[position].ps[(offset * 2) + 0] = rds.rdsC >> 8; // First character of segment
eon[position].ps[(offset * 2) + 1] = rds.rdsC & 0xFF; // Second character of segment
eon[position].ps[(offset * 2) + 2] = '\0'; // Endmarker of segment
}
// if (offset == 5 && rds.rdsD == 0xF202) { offset = rds.rdsB & 0x0F; // Read offset
// if (((rds.rdsC >> 8) * 10 +8750) == currentfreq) {
// uint16_t mapped = ((rds.rdsC & 0xFF) * 10 + 8750);
// Serial.print(currentfreq);
// Serial.print("\t");
// Serial.println(mapped);
// }
// }
// for (int i = 0; i < 5; i++) Serial.println(String(i) + "\t" + String(eon[i].pi,HEX) + "\t" + String(eon[i].ps)); if (offset < 4) {
// Serial.println("----"); byte position;
for (position = 0; position < 5; position++) {
} if (eon[position].pi == rds.rdsD) { // Find position in array
break;
}
}
eon_buffer2[position][(offset * 2) + 0] = eon_buffer[position][(offset * 2) + 0]; // Make a copy of the PS buffer
eon_buffer2[position][(offset * 2) + 1] = eon_buffer[position][(offset * 2) + 1];
eon_buffer[position][(offset * 2) + 0] = rds.rdsC >> 8; // First character of segment
eon_buffer[position][(offset * 2) + 1] = rds.rdsC & 0xFF; // Second character of segment
eon_buffer[position][(offset * 2) + 2] = '\0'; // Endmarker of segment
if (offset > 2) { // Last chars are received
if (eon_buffer[position] != eon_buffer2[position]) { // When difference between old and new, let's go...
RDScharConverter(eon_buffer[position], EONPStext, sizeof(EONPStext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
String utf8String = convertToUTF8(EONPStext); // Convert RDS characterset to ASCII
eon[position].ps = extractUTF8Substring(utf8String, 0, 8, true); // Make sure PS does not exceed 8 characters
}
}
if (offset > 4 && offset < 9) {
if (((rds.rdsC >> 8) * 10 + 8750) == currentfreq) { // Check if mapped frequency belongs to current frequency
eon[position].mappedfreq = ((rds.rdsC & 0xFF) * 10 + 8750); // Add mapped frequency to array
}
}
}
}
}
break; break;
} }
} }
@@ -643,10 +652,14 @@ void TEF6686::clearRDS (bool fullsearchrds)
for (i = 0; i < 18; i++) rds.stationType[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 < 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;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
eon[i].pi = 0; eon[i].pi = 0;
for (int y = 0; y < 9; y++) eon[i].ps[y] = 0; for (int y = 0; y < 9; y++) {
eon_buffer[i][y] = 0;
eon_buffer2[i][y] = 0;
}
eon[i].ps = "";
} }
for (i = 0; i < 45; i++) { for (i = 0; i < 45; i++) {
+13 -11
View File
@@ -141,16 +141,16 @@ typedef struct _af_ {
} af_; } af_;
typedef struct _eon_ { typedef struct _eon_ {
uint16_t mappedfreq; uint16_t mappedfreq;
uint16_t pi; uint16_t pi;
char ps[9]; String ps;
} eon_; } eon_;
class TEF6686 { class TEF6686 {
public: public:
af_ af[50]; af_ af[50];
eon_ eon[5]; eon_ eon[5];
rds_ rds; rds_ rds;
void readRDS(bool showrdserrors); void readRDS(bool showrdserrors);
void SetFreq(uint16_t frequency); void SetFreq(uint16_t frequency);
@@ -201,16 +201,17 @@ class TEF6686 {
String extractUTF8Substring(const String& utf8String, size_t start, size_t length, bool under); String extractUTF8Substring(const String& utf8String, size_t start, size_t length, bool under);
char ps_buffer[9]; char ps_buffer[9];
char ps_buffer2[9]; char ps_buffer2[9];
char ptyn_buffer[9]; char ptyn_buffer[9];
char eon_buffer[9]; char eon_buffer[9][5];
char eon_buffer2[9][5];
bool ps_process; bool ps_process;
bool rt_process; bool rt_process;
char rt_buffer[65]; char rt_buffer[65];
char rt_buffer2[65]; char rt_buffer2[65];
bool useRTPlus = true; bool useRTPlus = true;
bool checkDouble (uint16_t value); bool checkDouble (uint16_t value);
bool checkDoubleEON (uint16_t value); bool checkDoubleEON (uint16_t value);
byte eon_counter; byte eon_counter;
bool ABold; bool ABold;
char stationTextBuffer[65]; char stationTextBuffer[65];
uint64_t doublecheck; uint64_t doublecheck;
@@ -219,11 +220,12 @@ class TEF6686 {
uint16_t rdsDprevious; uint16_t rdsDprevious;
bool rtABold; bool rtABold;
wchar_t PStext[9] = L""; wchar_t PStext[9] = L"";
wchar_t PTYNtext[9] = L""; wchar_t EONPStext[9] = L"";
wchar_t PTYNtext[9] = L"";
byte ps_counter; byte ps_counter;
char musicArtist[45]; char musicArtist[45];
char musicTitle[45]; char musicTitle[45];
char stationHost[45]; char stationHost[45];
char stationEvent[45]; char stationEvent[45];
uint16_t currentfreq; uint16_t currentfreq;
}; };
+92 -11
View File
@@ -1,6 +1,6 @@
// [number of languages][number of texts][max. length of text] // [number of languages][number of texts][max. length of text]
static const char myLanguage[9][78][85] = { static const char myLanguage[9][87][85] = {
{ "English", // English { "English", // English
"Rotary direction changed", // 1 "Rotary direction changed", // 1
"Please release button", // 2 "Please release button", // 2
@@ -78,7 +78,16 @@ static const char myLanguage[9][78][85] = {
"Power options", // 74 "Power options", // 74
"Deep sleep", // 75 "Deep sleep", // 75
"Screen off", // 76 "Screen off", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Nederlands", // Dutch { "Nederlands", // Dutch
@@ -158,8 +167,17 @@ static const char myLanguage[9][78][85] = {
"Power options", // 74 "Power options", // 74
"Deep sleep", // 75 "Deep sleep", // 75
"Screen off", // 76 "Screen off", // 76
"Theme" // 77 "Theme", // 77
}, // "Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NIET MOGELIJK" // 86
}, //
{ "Polski", // Polish { "Polski", // Polish
"Kierunek obrotu zmieniony", // 1 "Kierunek obrotu zmieniony", // 1
@@ -238,7 +256,16 @@ static const char myLanguage[9][78][85] = {
"Opcje zasilania", // 74 "Opcje zasilania", // 74
"Glebokie uspienie", // 75 "Glebokie uspienie", // 75
"Wylacz ekran", // 76 "Wylacz ekran", // 76
"Motyw" // 77 "Motyw", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Hrvatski", // Croatian { "Hrvatski", // Croatian
@@ -318,7 +345,16 @@ static const char myLanguage[9][78][85] = {
"Power options", // 74 "Power options", // 74
"Deep sleep", // 75 "Deep sleep", // 75
"Screen off", // 76 "Screen off", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Ελληνικά", // Greek { "Ελληνικά", // Greek
@@ -398,7 +434,16 @@ static const char myLanguage[9][78][85] = {
"Επιλογές ενέργειας", // 74 "Επιλογές ενέργειας", // 74
"Βαθιά αναμονή", // 75 "Βαθιά αναμονή", // 75
"Οθόνη κλειστή", // 76 "Οθόνη κλειστή", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Romana", // Romanian { "Romana", // Romanian
@@ -478,7 +523,16 @@ static const char myLanguage[9][78][85] = {
"Power options", // 74 "Power options", // 74
"Deep sleep", // 75 "Deep sleep", // 75
"Screen off", // 76 "Screen off", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Deutsch", // German { "Deutsch", // German
@@ -558,7 +612,16 @@ static const char myLanguage[9][78][85] = {
"Energieeinstellungen", // 74 "Energieeinstellungen", // 74
"Komplett aus", // 75 "Komplett aus", // 75
"Bildschirm aus", // 76 "Bildschirm aus", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Czech", // Czech { "Czech", // Czech
@@ -638,7 +701,16 @@ static const char myLanguage[9][78][85] = {
"Power options", // 74 "Power options", // 74
"Deep sleep", // 75 "Deep sleep", // 75
"Screen off", // 76 "Screen off", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
{ "Slovak", // Slovak { "Slovak", // Slovak
@@ -718,6 +790,15 @@ static const char myLanguage[9][78][85] = {
"Power options", // 74 "Power options", // 74
"Deep sleep", // 75 "Deep sleep", // 75
"Screen off", // 76 "Screen off", // 76
"Theme" // 77 "Theme", // 77
"Default", // 78
"Cyan", // 79
"Crimson", // 80
"Monochrome", // 81
"Volcano", // 82
"Dendro", // 83
"Sakura", // 84
"Whiteout", // 85
"NOT POSSIBLE" // 86
}, },
}; };