GUI optimalisation and bugfixes

Mute symbol added
This commit is contained in:
Sjef Verhoeven PE5PVB
2023-07-20 22:55:12 +02:00
parent 9365ebea7e
commit 3478ae08fa
9 changed files with 22517 additions and 23305 deletions
+229 -155
View File
@@ -2,6 +2,7 @@
#include <EEPROM.h>
#include <Wire.h>
#include <math.h>
#include <FS.h>
#include <TFT_eSPI.h> // https://github.com/Bodmer/TFT_eSPI
#include <TimeLib.h> // https://github.com/PaulStoffregen/Time
#include <Hash.h> // https://github.com/bbx10/Hash_tng
@@ -187,10 +188,10 @@ int Stereostatus;
int volume;
int XDRBWset;
int XDRBWsetold;
int xPos = 6;
int xPos2 = 6;
int xPos3 = 6;
int xPos4 = 6;
int xPos;
int xPos2;
int xPos3;
int xPos4;
int16_t OStatus;
int16_t SAvg;
int16_t SAvg2;
@@ -199,10 +200,12 @@ int8_t LevelOffset;
int8_t LowLevelSet;
int8_t VolSet;
IPAddress remoteip;
String afstringold;
String cryptedpassword;
String CurrentThemeString;
String ECColdtxt;
String eonpsold[11];
String eonstringold;
String LIColdString;
String pinstringold;
String PIold;
@@ -215,6 +218,7 @@ String rds_clockold;
String RDSSPYRDS;
String RDSSPYRDSold;
String RTold;
String rtplusstringold;
String salt;
String saltkey = " ";
String SWMIBandstring = String();
@@ -579,8 +583,10 @@ void setup() {
SelectBand();
setupmode = false;
sprite.createSprite(317, 16);
sprite.createSprite(280, 16);
sprite2.createSprite(172, 16);
sprite.setTextDatum(TL_DATUM);
sprite2.setTextDatum(TL_DATUM);
radio.tone(50, -5, 2000);
if (screensaverset) {
@@ -595,7 +601,7 @@ void loop() {
if (power == true) {
Communication();
if (af && radio.rds.correctPI != 0) {
if (band == BAND_FM && af && radio.rds.correctPI != 0) {
if ((aftest && millis() >= aftimer + 3000) || ((USN > 250 || WAM > 250) && millis() >= aftimer + 1000)) {
aftimer = millis();
aftest = false;
@@ -607,7 +613,7 @@ void loop() {
}
}
if (millis() >= aftimer + 10000) {
if (band == BAND_FM && millis() >= aftimer + 10000) {
aftimer = millis();
if (USN > 150 || WAM > 150) {
frequency = radio.TestAF();
@@ -642,6 +648,7 @@ void loop() {
if (region == 0) tftPrint(-1, "PI:", 216, 197, ActiveColor, ActiveColorSmooth, FONT16);
if (region == 1) tftPrint(-1, "ID:", 216, 197, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, "PS:", 6, 197, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, "RT:", 6, 222, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, "PTY:", 6, 170, ActiveColor, ActiveColorSmooth, FONT16);
if (!showmodulation) tft.drawLine(20, 150, 204, 150, GreyoutColor); else tft.drawLine(20, 150, 204, 150, TFT_DARKGREY);
}
@@ -670,9 +677,10 @@ void loop() {
if (region == 0) tftPrint(-1, "PI:", 216, 197, GreyoutColor, BackgroundColor, FONT16);
if (region == 1) tftPrint(-1, "ID:", 216, 197, GreyoutColor, BackgroundColor, FONT16);
tftPrint(-1, "PS:", 6, 197, GreyoutColor, BackgroundColor, FONT16);
tftPrint(-1, "RT:", 6, 222, GreyoutColor, BackgroundColor, FONT16);
tftPrint(-1, "PTY:", 6, 170, GreyoutColor, BackgroundColor, FONT16);
tft.drawLine(20, 150, 204, 150, GreyoutColor);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, GreyoutColor);
tft.drawBitmap(139, 5, RDSLogo, 35, 22, GreyoutColor);
}
LowLevelInit = false;
}
@@ -1334,11 +1342,12 @@ void SelectBand() {
doBW();
radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR);
if (screenmute == false) radio.clearRDS(fullsearchrds); BuildDisplay();
if (region == 0) tftPrint(-1, "PI:", 216, 197, PrimaryColor, PrimaryColorSmooth, FONT16);
if (region == 1) tftPrint(-1, "ID:", 216, 195, PrimaryColor, PrimaryColorSmooth, FONT16);
tftPrint(-1, "PS:", 6, 197, PrimaryColor, PrimaryColorSmooth, FONT16);
tftPrint(-1, "PTY:", 6, 170, PrimaryColor, PrimaryColorSmooth, FONT16);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, GreyoutColor);
if (region == 0) tftPrint(-1, "PI:", 216, 197, GreyoutColor, BackgroundColor, FONT16);
if (region == 1) tftPrint(-1, "ID:", 216, 195, GreyoutColor, BackgroundColor, FONT16);
tftPrint(-1, "PS:", 6, 197, GreyoutColor, BackgroundColor, FONT16);
tftPrint(-1, "RT:", 6, 222, GreyoutColor, BackgroundColor, FONT16);
tftPrint(-1, "PTY:", 6, 170, GreyoutColor, BackgroundColor, FONT16);
tft.drawBitmap(139, 5, RDSLogo, 35, 22, GreyoutColor);
tft.drawRoundRect(248, 56, 32, 20, 5, GreyoutColor);
tftPrint(0, "iMS", 265, 59, GreyoutColor, BackgroundColor, FONT16);
tft.drawRoundRect(286, 56, 32, 20, 5, GreyoutColor);
@@ -2783,7 +2792,7 @@ void readRds() {
if (advancedRDS) tftPrint(-1, PIold, 244, 76, SecondaryColor, SecondaryColorSmooth, FONT28); else tftPrint(-1, PIold, 244, 191, SecondaryColor, SecondaryColorSmooth, FONT28);
if (advancedRDS) tftPrint(-1, PSold, 38, 76, SecondaryColor, SecondaryColorSmooth, FONT28); else tftPrint(-1, PSold, 38, 191, SecondaryColor, SecondaryColorSmooth, FONT28);
if (advancedRDS) tftPrint(-1, PTYold, 38, 109, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, PTYold, 38, 170, SecondaryColor, SecondaryColorSmooth, FONT16);
if (advancedRDS) tftPrint(-1, String(ptynold), 255, 109, SecondaryColor, SecondaryColorSmooth, FONT16);
if (advancedRDS) tftPrint(-1, String(ptynold), 216, 109, SecondaryColor, SecondaryColorSmooth, FONT16);
if (!advancedRDS) tftPrint(-1, RTold, 1, 229, BackgroundColor, BackgroundColor, FONT16);
dropout = true;
aftest = true;
@@ -2793,7 +2802,7 @@ void readRds() {
if (advancedRDS) tftPrint(-1, PIold, 244, 76, PrimaryColor, PrimaryColorSmooth, FONT28); else tftPrint(-1, PIold, 244, 191, PrimaryColor, PrimaryColorSmooth, FONT28);
if (advancedRDS) tftPrint(-1, PSold, 38, 76, PrimaryColor, PrimaryColorSmooth, FONT28); else tftPrint(-1, PSold, 38, 191, PrimaryColor, PrimaryColorSmooth, FONT28);
if (advancedRDS) tftPrint(-1, PTYold, 38, 109, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(-1, PTYold, 38, 170, PrimaryColor, PrimaryColorSmooth, FONT16);
if (advancedRDS) tftPrint(-1, String(ptynold), 255, 109, PrimaryColor, PrimaryColorSmooth, FONT16);
if (advancedRDS) tftPrint(-1, String(ptynold), 216, 109, PrimaryColor, PrimaryColorSmooth, FONT16);
dropout = false;
}
}
@@ -2942,18 +2951,28 @@ void ShowAdvancedRDS() {
if (radio.rds.hasAF) tftPrint(-1, "AF", 50, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "AF", 50, 51, GreyoutColor, BackgroundColor, FONT16);
hasafold = radio.rds.hasAF;
}
if (millis() - afticker >= 100) { //500
if (xPos2 == 6) {
if (afstring.length() < 20) {
if (afstringold != afstring) {
xPos2 = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite2.drawString(afstring, xPos2, 0, 1);
sprite2.pushSprite(35, 200);
}
} else {
if (millis() - afticker >= 50) {
if (xPos2 == 0) {
if (millis() - aftickerhold >= 2000) {
xPos2 -= 1;//charWidth;
xPos2 --;
aftickerhold = millis();
}
} else {
xPos2 -= 1;//charWidth;
xPos2 --;
aftickerhold = millis();
}
if (xPos2 < -tft.textWidth(afstring) + (charWidth * 21)) xPos2 = 6;
sprite2.setTextDatum(TL_DATUM);
if (xPos2 < -tft.textWidth(afstring) + (charWidth * 16)) xPos2 = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
@@ -2961,6 +2980,8 @@ void ShowAdvancedRDS() {
sprite2.pushSprite(35, 200);
afticker = millis();
}
}
afstringold = afstring;
String eonstring;
if (radio.rds.hasEON) for (byte i = 0; i < radio.eon_counter; i++) eonstring += String(radio.eon[i].picode) + (radio.eon[i].ps.length() > 0 ? String(": " + String(radio.eon[i].ps)) : "") + (radio.eon[i].mappedfreq > 0 ? String(" " + String(radio.eon[i].mappedfreq / 100) + "." + String((radio.eon[i].mappedfreq % 100) / 10)) : "") + (radio.eon[i].mappedfreq2 > 0 ? String(" / " + String(radio.eon[i].mappedfreq2 / 100) + "." + String((radio.eon[i].mappedfreq2 % 100) / 10)) : "") + (radio.eon[i].mappedfreq3 > 0 ? String(" / " + String(radio.eon[i].mappedfreq3 / 100) + "." + String((radio.eon[i].mappedfreq3 % 100) / 10)) : "") + (i == radio.eon_counter - 1 ? " " : " | "); else eonstring = myLanguage[language][88];
@@ -2968,18 +2989,27 @@ void ShowAdvancedRDS() {
if (radio.rds.hasEON) tftPrint(-1, "EON", 153, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "EON", 153, 51, GreyoutColor, BackgroundColor, FONT16);
haseonold = radio.rds.hasEON;
}
if (millis() - eonticker >= 100) { //500
if (xPos3 == 6) {
if (eonstring.length() < 20) {
if (eonstringold != eonstring) {
xPos3 = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite2.drawString(eonstring, xPos3, 0);
sprite2.pushSprite(35, 175);
}
} else {
if (millis() - eonticker >= 50) {
if (xPos3 == 0) {
if (millis() - eontickerhold >= 2000) {
xPos3 -= 1;//charWidth;
xPos3 --;
eontickerhold = millis();
}
} else {
xPos3 -= 1;//charWidth;
xPos3 --;
eontickerhold = millis();
}
if (xPos3 < -tft.textWidth(eonstring) + (charWidth * 21)) xPos3 = 6;
sprite2.setTextDatum(TL_DATUM);
if (xPos3 < -tft.textWidth(eonstring) + (charWidth * 16)) xPos3 = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
@@ -2987,6 +3017,8 @@ void ShowAdvancedRDS() {
sprite2.pushSprite(35, 175);
eonticker = millis();
}
}
eonstringold = eonstring;
String rtplusstring;
if (radio.rds.hasRDSplus) rtplusstring = "1) " + String(radio.rds.RTContent1) + " - 2) " + String(radio.rds.RTContent2) + " "; else rtplusstring = myLanguage[language][89];
@@ -2994,18 +3026,27 @@ void ShowAdvancedRDS() {
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;
}
if (millis() - rtplusticker >= 100) { //350
if (xPos3 == 6) {
if (eonstring.length() < 20) {
if (rtplusstringold != rtplusstring) {
xPos4 = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite2.drawString(rtplusstring, xPos4, 0);
sprite2.pushSprite(35, 150);
}
} else {
if (millis() - rtplusticker >= 50)
if (xPos4 == 0) {
if (millis() - rtplustickerhold >= 2000) {
xPos4 -= 1;//charWidth;
xPos4 --;
rtplustickerhold = millis();
}
} else {
xPos4 -= 1;//charWidth;
xPos4 --;
rtplustickerhold = millis();
}
if (xPos4 < -tft.textWidth(rtplusstring) + (charWidth * 21)) xPos4 = 6;
sprite2.setTextDatum(TL_DATUM);
if (xPos4 < -tft.textWidth(rtplusstring) + (charWidth * 16)) xPos4 = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
@@ -3013,6 +3054,7 @@ void ShowAdvancedRDS() {
sprite2.pushSprite(35, 150);
rtplusticker = millis();
}
rtplusstringold = rtplusstring;
if (TPold != radio.rds.hasTP) {
if (radio.rds.hasTP == true) tftPrint(-1, "TP", 6, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "TP", 6, 51, GreyoutColor, BackgroundColor, FONT16);
@@ -3067,9 +3109,9 @@ void ShowAdvancedRDS() {
if (radio.rds.hasTMC == true) tftPrint(-1, "TMC", 90, 51, SecondaryColor, SecondaryColorSmooth, FONT16); else tftPrint(-1, "TMC", 90, 51, GreyoutColor, BackgroundColor, FONT16);
hastmcold = radio.rds.hasTMC;
}
}
}
void doAF() {
void doAF() {
if (radio.af_counter != af_counterold && radio.rds.hasAF == true) {
if (wifi) {
Udp.beginPacket(remoteip, 9030);
@@ -3089,9 +3131,9 @@ void doAF() {
Udp.endPacket();
}
}
}
}
void showECC() {
void showECC() {
if (ECCold != radio.rds.ECC) {
String ECC;
if (radio.rds.picode[0] == '1') {
@@ -3188,9 +3230,9 @@ void showECC() {
}
ECCold = radio.rds.ECC;
}
}
}
void showPI() {
void showPI() {
if (strcmp(radio.rds.picode, radioIdPrevious)) {
if (advancedRDS) {
tftReplace(-1, PIold, radio.rds.picode, 244, 76, PrimaryColor, PrimaryColorSmooth, FONT28);
@@ -3207,9 +3249,9 @@ void showPI() {
}
strcpy(radioIdPrevious, radio.rds.picode);
}
}
}
void showPTY() {
void showPTY() {
if (strcmp(radio.rds.stationType, programTypePrevious)) {
if (advancedRDS) tftReplace(-1, PTYold, radio.rds.stationType, 38, 109, PrimaryColor, PrimaryColorSmooth, FONT16); else tftReplace(-1, PTYold, radio.rds.stationType, 38, 170, PrimaryColor, PrimaryColorSmooth, FONT16);
PTYold = radio.rds.stationType;
@@ -3221,9 +3263,9 @@ void showPTY() {
}
strcpy(programTypePrevious, radio.rds.stationType);
}
}
}
void showPS() {
void showPS() {
if (radio.rds.stationName != programServicePrevious) {
if (advancedRDS) {
tftReplace(-1, PSold, radio.rds.stationName, 38, 76, PrimaryColor, PrimaryColorSmooth, FONT28);
@@ -3250,48 +3292,60 @@ void showPS() {
}
programServicePrevious = radio.rds.stationName;
}
}
}
void showRadioText() {
void showRadioText() {
if (radio.rds.hasRT && RDSstatus) {
if (millis() - rtticker >= 100) { // 350
if (xPos == 6) {
if (millis() - rttickerhold >= 2000) {
xPos -= 1;//= charWidth;
rttickerhold = millis();
}
} else {
xPos -= 1;//= charWidth;
rttickerhold = millis();
}
if (advancedRDS) {
if (xPos < -tft.textWidth(radio.rds.stationText + " " + radio.rds.stationText32) + (charWidth * 21)) xPos = 6;
if (advancedRDS && radio.rds.stationText.length() < 20) {
xPos = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.setTextDatum(TL_DATUM);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite2.fillSprite(BackgroundColor);
sprite2.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 0, 1);
sprite2.pushSprite(35, 222);
} else {
if (xPos < -tft.textWidth(radio.rds.stationText + " " + radio.rds.stationText32) + (charWidth * 24)) xPos = 6;
sprite.fillSprite(BackgroundColor);
sprite.setTextDatum(TL_DATUM);
} else if (!advancedRDS && radio.rds.stationText.length() < 29) {
if (RTold != radio.rds.stationText + " " + radio.rds.stationText32) {
xPos = 0;
sprite.fillSprite(BackgroundColor);
sprite.loadFont(FONT16);
sprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 0, 1);
sprite.pushSprite(1, 222);
sprite.pushSprite(38, 222);
}
} else {
if (millis() - rtticker >= 50) {
if (xPos == 0) {
if (millis() - rttickerhold >= 2000) {
xPos --;
rttickerhold = millis();
}
} else {
xPos --;
rttickerhold = millis();
}
if (advancedRDS) {
if (xPos < -tft.textWidth(radio.rds.stationText + " " + radio.rds.stationText32) + (charWidth * 16)) xPos = 0;
sprite2.fillSprite(BackgroundColor);
sprite2.loadFont(FONT16);
sprite2.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite2.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 0, 1);
sprite2.pushSprite(35, 222);
} else {
if (xPos < -tft.textWidth(radio.rds.stationText + " " + radio.rds.stationText32) + (charWidth * 26)) xPos = 0;
sprite.fillSprite(BackgroundColor);
sprite.loadFont(FONT16);
sprite.setTextColor(PrimaryColor, PrimaryColorSmooth, false);
sprite.drawString(radio.rds.stationText + " " + radio.rds.stationText32, xPos, 0, 1);
sprite.pushSprite(38, 222);
}
rtticker = millis();
RTold = radio.rds.stationText + " " + radio.rds.stationText32;
cleanup = true;
}
}
} else if (cleanup == true) {
sprite.fillSprite(BackgroundColor);
sprite2.fillSprite(BackgroundColor);
if (advancedRDS) sprite2.pushSprite(35, 222); else sprite.pushSprite(1, 222);
if (advancedRDS) sprite2.pushSprite(35, 222); else sprite.pushSprite(38, 222);
cleanup = false;
}
@@ -3309,9 +3363,10 @@ void showRadioText() {
Udp.endPacket();
}
tft.drawLine(0, 239, 320, 239, FrameColor);
}
RTold = radio.rds.stationText + " " + radio.rds.stationText32;
}
void BuildMenu() {
void BuildMenu() {
advancedRDS = false;
tft.fillScreen(BackgroundColor);
tft.drawRect(0, 0, 320, 240, FrameColor);
@@ -3362,7 +3417,7 @@ void BuildMenu() {
tftPrint(-1, myLanguage[language][45], 14, 116, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][46], 14, 136, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][49], 14, 156, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][49], 14, 176, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][50], 14, 176, ActiveColor, ActiveColorSmooth, FONT16);
if (wifi) tftPrint(-1, String(myLanguage[language][51]) + " IP: " + String(WiFi.localIP().toString()), 14, 196, ActiveColor, ActiveColorSmooth, FONT16); else tftPrint(-1, myLanguage[language][51], 14, 196, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, myLanguage[language][52], 14, 216, ActiveColor, ActiveColorSmooth, FONT16);
@@ -3376,7 +3431,7 @@ void BuildMenu() {
if (radio.rds.underscore) tftPrint(1, myLanguage[language][42], 305, 156, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, myLanguage[language][30], 305, 156, PrimaryColor, PrimaryColorSmooth, FONT16);
if (USBmode) tftPrint(1, "RDS Spy", 305, 176, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, "XDRGTK", 305, 176, PrimaryColor, PrimaryColorSmooth, FONT16);
if (wifi) tftPrint(1, myLanguage[language][42], 305, 196, PrimaryColor, PrimaryColorSmooth, FONT16); else tftPrint(1, myLanguage[language][30], 305, 196, PrimaryColor, PrimaryColorSmooth, FONT16);
tftPrint(1, "->", 305, 196, PrimaryColor, PrimaryColorSmooth, FONT16);
tftPrint(1, ">", 305, 216, PrimaryColor, PrimaryColorSmooth, FONT16);
break;
case 3:
@@ -3436,9 +3491,9 @@ void BuildMenu() {
break;
}
analogWrite(SMETERPIN, 0);
}
}
void MuteScreen(bool setting) {
void MuteScreen(bool setting) {
if (!setting && screenmute) {
screenmute = false;
setupmode = true;
@@ -3452,9 +3507,9 @@ void MuteScreen(bool setting) {
analogWrite(CONTRASTPIN, 0);
tft.writecommand(0x10);
}
}
}
void ShowAFEON() {
void ShowAFEON() {
if (radio.rds.hasAF) {
if (hasafold == false) {
tftPrint(-1, myLanguage[language][87], 6, 54, BackgroundColor, BackgroundColor, FONT16);
@@ -3504,7 +3559,7 @@ void ShowAFEON() {
tftPrint(-1, String(eonpsold[i]), 218, 54 + (15 * i), BackgroundColor, BackgroundColor, FONT16);
eonpsold[i] = radio.eon[i].ps;
}
tftPrint(-1, String(radio.eon[i].ps), 218, 54 + (15 * i), PrimaryColor, PrimaryColorSmooth, FONT16);
tftPrint(-1, String(radio.eon[i].ps), 218, 54 + (15 * i), SecondaryColor, SecondaryColorSmooth, FONT16);
}
if (radio.eon[i].mappedfreq > 0) {
@@ -3518,9 +3573,9 @@ void ShowAFEON() {
if (i == 10) i = 254;
}
}
}
}
void BuildAFScreen() {
void BuildAFScreen() {
if (!afscreen && RDSstatus) {
tft.drawRoundRect(20, 30, 274, 170, 5, ActiveColor);
tft.fillRoundRect(22, 32, 270, 166, 5, BackgroundColor);
@@ -3558,9 +3613,9 @@ void BuildAFScreen() {
programServicePrevious = "0";
for (byte i = 0; i < 11; i++) eonpsold[i] = "";
}
}
}
void BuildAdvancedRDS() {
void BuildAdvancedRDS() {
afscreen = false;
afpage = false;
afpagenr = 0;
@@ -3626,7 +3681,7 @@ void BuildAdvancedRDS() {
tft.drawCircle(81, 15, 9, GreyoutColor);
tft.drawCircle(91, 15, 10, GreyoutColor);
tft.drawCircle(91, 15, 9, GreyoutColor);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, GreyoutColor);
tft.drawBitmap(139, 5, RDSLogo, 35, 22, GreyoutColor);
if (StereoToggle == false) {
tft.drawCircle(86, 15, 10, SecondaryColor);
@@ -3678,9 +3733,9 @@ void BuildAdvancedRDS() {
BWreset = true;
pinstringold = "";
ShowMemoryPos();
}
}
void BuildDisplay() {
void BuildDisplay() {
afscreen = false;
advancedRDS = false;
if (theme == 0) {
@@ -3696,6 +3751,7 @@ void BuildDisplay() {
tft.drawLine(0, 187, 320, 187, FrameColor);
tft.drawLine(0, 218, 320, 218, FrameColor);
tft.drawLine(108, 30, 108, 0, FrameColor);
tft.drawLine(137, 30, 137, 0, FrameColor);
tft.drawLine(174, 30, 174, 0, FrameColor);
tft.drawLine(20, 120, 204, 120, TFT_DARKGREY);
if (!showmodulation) tft.drawLine(20, 150, 204, 150, GreyoutColor); else tft.drawLine(20, 150, 204, 150, TFT_DARKGREY);
@@ -3718,6 +3774,7 @@ void BuildDisplay() {
if (region == 0) tftPrint(-1, "PI:", 216, 197, ActiveColor, ActiveColorSmooth, FONT16);
if (region == 1) tftPrint(-1, "ID:", 216, 197, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, "PS:", 6, 197, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, "RT:", 6, 222, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(-1, "PTY:", 6, 170, ActiveColor, ActiveColorSmooth, FONT16);
tftPrint(0, "S", 7, 107, ActiveColor, ActiveColorSmooth, FONT16);
@@ -3756,7 +3813,7 @@ void BuildDisplay() {
tft.drawCircle(81, 15, 9, GreyoutColor);
tft.drawCircle(91, 15, 10, GreyoutColor);
tft.drawCircle(91, 15, 9, GreyoutColor);
tft.drawBitmap(110, 5, RDSLogo, 67, 22, GreyoutColor);
tft.drawBitmap(139, 5, RDSLogo, 35, 22, GreyoutColor);
if (StereoToggle == false) {
tft.drawCircle(86, 15, 10, SecondaryColor);
tft.drawCircle(86, 15, 9, SecondaryColor);
@@ -3789,9 +3846,9 @@ void BuildDisplay() {
strcpy(radioIdPrevious, "0");
programServicePrevious = "0";
BWreset = true;
}
}
void ShowFreq(int mode) {
void ShowFreq(int mode) {
if (screenmute == false) {
if (setupmode == false) {
if (band == 1) { // Fix Me :take care of 9K/10K Step
@@ -3884,9 +3941,9 @@ void ShowFreq(int mode) {
Udp.endPacket();
}
}
}
}
void ShowSignalLevel() {
void ShowSignalLevel() {
if (screenmute == false) {
if (millis() >= snrupdatetimer + TIMER_SNR_TIMER) {
snrupdatetimer = millis();
@@ -3953,18 +4010,18 @@ void ShowSignalLevel() {
}
}
}
}
}
void ShowRDSLogo(bool RDSstatus) {
void ShowRDSLogo(bool RDSstatus) {
if (screenmute == false) {
if (RDSstatus != RDSstatusold) {
if (RDSstatus) tft.drawBitmap(110, 5, RDSLogo, 67, 22, SecondaryColor); else tft.drawBitmap(110, 5, RDSLogo, 67, 22, GreyoutColor);
if (RDSstatus) tft.drawBitmap(139, 5, RDSLogo, 35, 22, InsignificantColor); else tft.drawBitmap(139, 5, RDSLogo, 35, 22, GreyoutColor);
RDSstatusold = RDSstatus;
}
}
}
}
void ShowStereoStatus() {
void ShowStereoStatus() {
if (StereoToggle == true) {
if (band == BAND_FM) Stereostatus = radio.getStereoStatus(); else Stereostatus = 0;
if (Stereostatus != Stereostatusold) {
@@ -3984,9 +4041,9 @@ void ShowStereoStatus() {
Stereostatusold = Stereostatus;
}
}
}
}
void ShowOffset() {
void ShowOffset() {
if (OStatus != OStatusold) {
if (millis() >= offsetupdatetimer + TIMER_OFFSET_TIMER) {
offsetupdatetimer = millis();
@@ -4085,9 +4142,9 @@ void ShowOffset() {
}
OStatusold = OStatus;
}
}
}
void ShowBW() {
void ShowBW() {
if (millis() >= bwupdatetimer + TIMER_BW_TIMER) {
bwupdatetimer = millis();
} else {
@@ -4105,9 +4162,9 @@ void ShowBW() {
Udp.endPacket();
}
}
}
}
void ShowModLevel() {
void ShowModLevel() {
if (showmodulation) {
int segments;
@@ -4135,9 +4192,9 @@ void ShowModLevel() {
peakholdmillis = millis();
}
}
}
}
void doSquelch() {
void doSquelch() {
if (XDRGTKUSB == false && XDRGTKTCP == false) {
Squelch = analogRead(PIN_POT) / 4 - 100;
if (Squelch > 920) Squelch = 920;
@@ -4166,17 +4223,21 @@ void doSquelch() {
if (Squelch != -1) {
if (Squelch < SStatus || Squelch == -100 || Squelch == 0) {
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
SQ = false;
} else {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
SQ = true;
}
} else {
if (Stereostatus == true) {
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
SQ = false;
} else {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
SQ = true;
}
}
@@ -4204,24 +4265,28 @@ void doSquelch() {
if (seek == false && Squelch != 920) {
if (Squelch < SStatus || Squelch == -100 || Squelch == 0) {
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
SQ = false;
} else {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
SQ = true;
}
} else {
if (seek == false && Stereostatus == true) {
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
SQ = false;
} else {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
SQ = true;
}
}
}
}
}
void updateBW() {
void updateBW() {
if (BWset == 0) {
if (screenmute == false && advancedRDS == false && afscreen == false) {
tft.drawRoundRect(248, 35, 70, 20, 5, ActiveColor);
@@ -4234,9 +4299,9 @@ void updateBW() {
tftPrint(0, "AUTO BW", 282, 38, GreyoutColor, BackgroundColor, FONT16);
}
}
}
}
void updateiMS() {
void updateiMS() {
if (band == BAND_FM) {
if (iMSset == 0) {
if (screenmute == false) {
@@ -4252,9 +4317,9 @@ void updateiMS() {
radio.setiMS(0);
}
}
}
}
void updateEQ() {
void updateEQ() {
if (band == BAND_FM) {
if (EQset == 0) {
if (screenmute == false) {
@@ -4270,9 +4335,9 @@ void updateEQ() {
radio.setEQ(0);
}
}
}
}
void updateSWMIBand() {
void updateSWMIBand() {
switch (SWMIBandPos) {
case SW_MI_BAND_11M:
case SW_MI_BAND_13M:
@@ -4296,9 +4361,9 @@ void updateSWMIBand() {
tftPrint(-1, SWMIBandstringold, 50, 51, BackgroundColor, BackgroundColor, FONT16);
break;
}
}
}
void doBW() {
void doBW() {
if (band == BAND_FM) {
if (BWset > 16) BWset = 0;
@@ -4390,9 +4455,9 @@ void doBW() {
}
updateBW();
BWreset = true;
}
}
void doTuneMode() {
void doTuneMode() {
switch (tunemode) {
case TUNE_MAN:
if (band == BAND_FM) {
@@ -4422,9 +4487,9 @@ void doTuneMode() {
ShowFreq(0);
EEPROM.writeByte(EE_BYTE_TUNEMODE, tunemode);
EEPROM.commit();
}
}
void ShowTuneMode() {
void ShowTuneMode() {
switch (tunemode) {
case TUNE_MAN:
if (band == BAND_SW) {
@@ -4486,9 +4551,9 @@ void ShowTuneMode() {
tftPrint(0, "MEM", 22, 82, GreyoutColor, BackgroundColor, FONT16);
break;
}
}
}
void ShowRSSI() {
void ShowRSSI() {
if (wifi) rssi = WiFi.RSSI(); else rssi = 0;
if (rssiold != rssi) {
rssiold = rssi;
@@ -4507,9 +4572,9 @@ void ShowRSSI() {
tft.drawBitmap(272, 4, WiFi1, 25, 25, PrimaryColor);
}
}
}
}
void ShowBattery() {
void ShowBattery() {
if (millis() >= batupdatetimer + TIMER_BAT_TIMER) {
batupdatetimer = millis();
} else {
@@ -4537,9 +4602,9 @@ void ShowBattery() {
}
batteryold = battery;
}
}
}
void Communication() {
void Communication() {
if (menu == false) {
if (wifi) {
int packetSize = Udp.parsePacket();
@@ -4689,15 +4754,15 @@ void Communication() {
}
if (XDRGTKUSB || XDRGTKTCP) XDRGTKRoutine();
}
}
}
void DataPrint(String string) {
void DataPrint(String string) {
if (XDRGTKUSB) Serial.print(string);
if (XDRGTKTCP) RemoteClient.print(string);
}
}
void XDRGTKRoutine() {
void XDRGTKRoutine() {
if (XDRGTKUSB) {
if (Serial.available())
{
@@ -4992,10 +5057,12 @@ void XDRGTKRoutine() {
VolSet = atoi(buff + 1);
if (VolSet == 0) {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
XDRMute = true;
SQ = true;
} else {
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
radio.setVolume((VolSet - 40) / 10);
XDRMute = false;
}
@@ -5013,6 +5080,7 @@ void XDRGTKRoutine() {
store = true;
XDRMute = false;
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
VolSet = EEPROM.readInt(EE_BYTE_VOLSET);
LowLevelSet = EEPROM.readInt(EE_BYTE_LOWLEVELSET);
softmuteam = EEPROM.readByte(EE_BYTE_SOFTMUTEAM);
@@ -5071,9 +5139,9 @@ void XDRGTKRoutine() {
}
}
DataPrint(String(((SStatus * 100) + 10875) / 1000) + "." + String(((SStatus * 100) + 10875) / 100 % 10) + ", " + String(WAM / 10) + ", " + String(SNR) + "\n");
}
}
void TuneUp() {
void TuneUp() {
aftest = true;
aftimer = millis();
unsigned int temp = 0;
@@ -5152,9 +5220,9 @@ void TuneUp() {
radio.clearRDS(fullsearchrds);
if (RDSSPYUSB == true) Serial.print("G:\r\nRESET-------\r\n\r\n");
if (RDSSPYTCP == true) RemoteClient.print("G:\r\nRESET-------\r\n\r\n");
}
}
void TuneDown() {
void TuneDown() {
aftest = true;
aftimer = millis();
unsigned int temp = 0;
@@ -5233,17 +5301,24 @@ void TuneDown() {
radio.clearRDS(fullsearchrds);
if (RDSSPYUSB == true) Serial.print("G:\r\nRESET-------\r\n\r\n");
if (RDSSPYTCP == true) RemoteClient.print("G:\r\nRESET-------\r\n\r\n");
}
}
void EdgeBeeper() {
void EdgeBeeper() {
bool x = radio.mute;
radio.tone(50, -5, 2000);
if (x) radio.setMute(); else radio.setUnMute();
}
if (x) {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
} else {
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
}
}
void Seek(bool mode) {
void Seek(bool mode) {
if (band == BAND_FM) {
radio.setMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, PrimaryColor);
if (mode == false) TuneDown(); else TuneUp();
delay(50);
ShowFreq(0);
@@ -5255,6 +5330,7 @@ void Seek(bool mode) {
if ((USN < 200) && (WAM < 230) && (OStatus < 80 && OStatus > -80) && (Squelch < SStatus || Squelch == 920)) {
seek = false;
radio.setUnMute();
if (screenmute == false) tft.drawBitmap(110, 5, Speaker, 26, 22, GreyoutColor);
store = true;
} else {
seek = true;
@@ -5262,9 +5338,9 @@ void Seek(bool mode) {
if (RDSSPYTCP == true) RemoteClient.print("G:\r\nRESET-------\r\n\r\n");
}
}
}
}
void SetTunerPatch() {
void SetTunerPatch() {
if (TEF != 101 && TEF != 102 && TEF != 205) {
radio.init(102);
uint16_t device;
@@ -5275,16 +5351,16 @@ void SetTunerPatch() {
tft.fillScreen(BackgroundColor);
analogWrite(CONTRASTPIN, ContrastSet * 2 + 27);
if (TEF == 0) tftPrint(0, myLanguage[language][35], 150, 78, ActiveColor, ActiveColorSmooth, FONT28); else tftPrint(0, myLanguage[language][36], 150, 78, ActiveColor, ActiveColorSmooth, FONT28);
if (TEF == 0) tftPrint(0, myLanguage[language][35], 150, 78, ActiveColor, ActiveColorSmooth, FONT28); else tftPrint(0, myLanguage[language][36] + String(TEF), 150, 78, ActiveColor, ActiveColorSmooth, FONT28);
tftPrint(0, myLanguage[language][37], 150, 108, ActiveColor, ActiveColorSmooth, FONT28);
EEPROM.writeByte(EE_BYTE_TEF, TEF);
EEPROM.commit();
while (true);
for (;;);
}
}
}
void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de/online/rgb565-color-picker/
void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de/online/rgb565-color-picker/
switch (CurrentTheme) {
case 0: // Default PE5PVB theme
PrimaryColor = 0xFFE0;
@@ -5296,7 +5372,7 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
GreyoutColor = 0x38E7;
BackgroundColor = TFT_BLACK;
ActiveColor = 0xFFFF;
ActiveColorSmooth = 0x4208;
ActiveColorSmooth = 0x39E7;
SignificantColor = 0xF800;
SignificantColorSmooth = 0x7C00;
InsignificantColor = 0x07E0;
@@ -5423,9 +5499,9 @@ void doTheme() { // Use this to put your own colors in: http://www.barth-dev.de
CurrentThemeString = myLanguage[language][85];
break;
}
}
}
void read_encoder() {
void read_encoder() {
static uint8_t old_AB = 3;
static int8_t encval = 0;
static const int8_t enc_states[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
@@ -5453,9 +5529,9 @@ void read_encoder() {
encval = 0;
}
}
}
}
void tryWiFi() {
void tryWiFi() {
if (!setupmode) {
tft.drawRoundRect(1, 60, 319, 140, 5, ActiveColor);
tft.fillRoundRect(3, 62, 315, 136, 5, BackgroundColor);
@@ -5468,16 +5544,14 @@ void tryWiFi() {
if (!setupmode) tftPrint(0, myLanguage[language][57], 155, 128, InsignificantColor, InsignificantColorSmooth, FONT28);
wifi = true;
} else {
Server.end();
Udp.stop();
if (!setupmode) tftPrint(0, myLanguage[language][56], 155, 128, SignificantColor, SignificantColorSmooth, FONT28);
wifi = false;
XDRGTKTCP = false;
RDSSPYTCP = false;
}
}
}
void passwordcrypt() {
void passwordcrypt() {
int generated = 0;
while (generated < 16)
{
@@ -5489,9 +5563,9 @@ void passwordcrypt() {
}
salt = saltkey + XDRGTK_key;
cryptedpassword = String(sha1(salt));
}
}
void DefaultSettings() {
void DefaultSettings() {
EEPROM.writeByte(EE_BYTE_CHECKBYTE, EE_CHECKBYTE_VALUE);
EEPROM.writeUInt(EE_UINT16_FREQUENCY_FM, 10000);
EEPROM.writeInt(EE_BYTE_VOLSET, 0);
@@ -5552,9 +5626,9 @@ void DefaultSettings() {
EEPROM.writeByte(EE_BYTE_AF, 0);
EEPROM.writeByte(EE_BYTE_STEREO, 1);
EEPROM.commit();
}
}
void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int color, int smoothcolor, const uint8_t* font) {
void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int color, int smoothcolor, const uint8_t* font) {
tft.loadFont(font);
tft.setTextColor(color, smoothcolor, false);
switch (offset) {
@@ -5564,9 +5638,9 @@ void tftPrint(int8_t offset, const String & text, int16_t x, int16_t y, int colo
}
tft.drawString(text, x, y, 1);
tft.unloadFont();
}
}
void tftReplace(int8_t offset, const String & textold, const String & text, int16_t x, int16_t y, int color, int smoothcolor, const uint8_t* font) {
void tftReplace(int8_t offset, const String & textold, const String & text, int16_t x, int16_t y, int color, int smoothcolor, const uint8_t* font) {
tft.loadFont(font);
tft.setTextColor(BackgroundColor, BackgroundColor, false);
switch (offset) {
@@ -5583,4 +5657,4 @@ void tftReplace(int8_t offset, const String & textold, const String & text, int1
}
tft.drawString(text, x, y);
tft.unloadFont();
}
}
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
View File
+5755 -6030
View File
File diff suppressed because it is too large Load Diff
+14094 -14704
View File
File diff suppressed because it is too large Load Diff
-2
View File
@@ -618,7 +618,6 @@ void TEF6686::readRDS(bool showrdserrors)
RDScharConverter(rt_buffer, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationText = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText = extractUTF8Substring(rds.stationText, 0, 64, true); // Make sure RT does not exceed 64 characters
rds.stationText += " "; // Add extra spaces
for (int i = 0; i < 64; i++) rt_buffer2[i] = rt_buffer[i];
}
@@ -646,7 +645,6 @@ void TEF6686::readRDS(bool showrdserrors)
RDScharConverter(rt_buffer32, RTtext, sizeof(RTtext) / sizeof(wchar_t), true); // Convert 8 bit ASCII to 16 bit ASCII
rds.stationText32 = convertToUTF8(RTtext); // Convert RDS characterset to ASCII
rds.stationText32 = extractUTF8Substring(rds.stationText32, 0, 32, true); // Make sure RT does not exceed 32 characters
rds.stationText32 += " "; // Add extra spaces
}
} break;
+147 -122
View File
@@ -179,138 +179,163 @@ static const uint8_t TEFLogo[] PROGMEM = {
};
static const uint8_t RDSLogo[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x00,
0x07, 0xfc, 0x00, 0x1f, 0xe8, 0x00, 0x03, 0xf8, 0x00,
0x07, 0xff, 0x00, 0x1f, 0xfc, 0x00, 0x0f, 0xfe, 0x00,
0x0f, 0xff, 0x80, 0x3f, 0xff, 0x00, 0x1f, 0xfc, 0x00,
0x0f, 0xff, 0xc0, 0x1f, 0xff, 0x00, 0x3f, 0xf8, 0x00,
0x0f, 0x8f, 0xc0, 0x3e, 0x3f, 0x80, 0x3e, 0x10, 0x00,
0x0f, 0x0f, 0x80, 0x3e, 0x0f, 0xc0, 0x3e, 0x00, 0x00,
0x1f, 0x0f, 0x80, 0x3c, 0x0f, 0x80, 0x7e, 0x00, 0x00,
0x1f, 0x0f, 0x9c, 0x7e, 0x0f, 0xce, 0x7f, 0x80, 0x00,
0x1f, 0xbf, 0x1e, 0x7c, 0x07, 0xce, 0x3f, 0xf0, 0x00,
0x1f, 0xfe, 0x1c, 0x7c, 0x0f, 0x9e, 0x3f, 0xf8, 0x00,
0x1f, 0xfc, 0x1c, 0x7c, 0x0f, 0x9c, 0x1f, 0xf8, 0x00,
0x3f, 0xf0, 0x3c, 0x78, 0x0f, 0x9c, 0x03, 0xf8, 0x00,
0x3e, 0xf8, 0x10, 0xf8, 0x1f, 0x14, 0x00, 0xf8, 0x00,
0x3e, 0xf8, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x00,
0x3e, 0x7c, 0x00, 0xf8, 0xfe, 0x00, 0xe1, 0xf8, 0x00,
0x3c, 0x7e, 0x00, 0xff, 0xfc, 0x00, 0xf7, 0xf0, 0x00,
0x7c, 0x7e, 0x01, 0xff, 0xf8, 0x01, 0xff, 0xe0, 0x00,
0x7c, 0x3f, 0x01, 0xff, 0xe0, 0x03, 0xff, 0xe0, 0x00,
0x7c, 0x3f, 0x01, 0xff, 0x80, 0x00, 0xff, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x01, 0xfe, 0x0f, 0xf0, 0x00,
0x07, 0x03, 0xb8, 0x1c, 0x00,
0x0c, 0xfc, 0xe7, 0xe6, 0x00,
0x1b, 0x86, 0xdc, 0x3b, 0x00,
0x36, 0x79, 0xb3, 0xcd, 0x80,
0x6d, 0xff, 0x6f, 0xf6, 0xc0,
0x5b, 0xfe, 0xdf, 0xfb, 0x40,
0x57, 0xfe, 0xbf, 0xfd, 0x60,
0xd7, 0xfd, 0xbf, 0xfd, 0x60,
0xb7, 0xcd, 0x7e, 0x7d, 0xa0,
0xff, 0x85, 0x7c, 0x3f, 0xe0,
0xff, 0x85, 0x7c, 0x3f, 0xe0,
0xfa, 0x4d, 0x7e, 0x4b, 0xe0,
0xf9, 0x3b, 0x7f, 0xd3, 0xe0,
0x7d, 0x86, 0xfc, 0x37, 0xc0,
0x7e, 0x7d, 0xfb, 0xcf, 0xc0,
0x7f, 0x03, 0xf8, 0x1f, 0xc0,
0x3f, 0xff, 0xff, 0xff, 0x80,
0x1f, 0xff, 0xff, 0xff, 0x00,
0x0f, 0xff, 0xff, 0xfe, 0x00,
0x07, 0xff, 0xbf, 0xfc, 0x00,
0x01, 0xfe, 0x0f, 0xf0, 0x00
};
static const uint8_t Speaker[] PROGMEM = {
0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00,
0x00, 0x38, 0x00, 0x00,
0x00, 0xf8, 0x00, 0x00,
0x01, 0xf8, 0x00, 0x00,
0xff, 0xf8, 0x00, 0x00,
0xff, 0xf8, 0x40, 0x80,
0xff, 0xf8, 0xe1, 0xc0,
0xff, 0xf8, 0x73, 0x80,
0xff, 0xf8, 0x3f, 0x00,
0xff, 0xf8, 0x1e, 0x00,
0xff, 0xf8, 0x1e, 0x00,
0xff, 0xf8, 0x3f, 0x00,
0xff, 0xf8, 0x73, 0x80,
0xff, 0xf8, 0xe1, 0xc0,
0xff, 0xf8, 0x40, 0x80,
0xff, 0xf8, 0x00, 0x00,
0x01, 0xf8, 0x00, 0x00,
0x00, 0xf8, 0x00, 0x00,
0x00, 0x38, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00
};
static const uint8_t WiFi1[] PROGMEM = {
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00
};
static const uint8_t WiFi2[] PROGMEM = {
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00,
0x01, 0xff, 0x80, 0x00,
0x03, 0xff, 0x80, 0x00,
0x03, 0xe7, 0x80, 0x00,
0x01, 0x83, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00,
0x01, 0xff, 0x80, 0x00,
0x03, 0xff, 0x80, 0x00,
0x03, 0xe7, 0x80, 0x00,
0x01, 0x83, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00,
0x00, 0x3c, 0x00, 0x00,
0x00, 0x18, 0x00, 0x00
};
static const uint8_t WiFi3[] PROGMEM = {
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x00, 0x00,
0x01, 0x80, 0xc0, 0x00,
0x02, 0x00, 0x20, 0x00,
0x04, 0x7e, 0x10, 0x00,
0x09, 0x80, 0x88, 0x00,
0x03, 0x00, 0x48, 0x00,
0x0c, 0x00, 0x20, 0x00,
0x04, 0x3e, 0x10, 0x00,
0x00, 0xc1, 0x00, 0x00,
0x01, 0x00, 0xc0, 0x00,
0x01, 0x36, 0x40, 0x00,
0x01, 0x43, 0x80, 0x00,
0x00, 0x80, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x7f, 0x00, 0x00,
0x01, 0x80, 0xc0, 0x00,
0x02, 0x00, 0x20, 0x00,
0x04, 0x7e, 0x10, 0x00,
0x09, 0x80, 0x88, 0x00,
0x03, 0x00, 0x48, 0x00,
0x0c, 0x00, 0x20, 0x00,
0x04, 0x3e, 0x10, 0x00,
0x00, 0xc1, 0x00, 0x00,
0x01, 0x00, 0xc0, 0x00,
0x01, 0x36, 0x40, 0x00,
0x01, 0x43, 0x80, 0x00,
0x00, 0x80, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x04, 0x00, 0x00,
0x00, 0x10, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00
};
static const uint8_t WiFi4[] PROGMEM = {
0x00, 0xff, 0x80, 0x00,
0x03, 0xff, 0xe0, 0x00,
0x0f, 0xff, 0xf8, 0x00,
0x1f, 0xff, 0xfc, 0x00,
0x3f, 0xc1, 0xfe, 0x00,
0x7e, 0x00, 0x3f, 0x80,
0xfc, 0x00, 0x0f, 0x80,
0xf0, 0x7f, 0x07, 0x80,
0x61, 0xff, 0xc3, 0x80,
0x63, 0xff, 0xe1, 0x00,
0x07, 0xff, 0xf0, 0x00,
0x0f, 0xc0, 0xf8, 0x00,
0x0f, 0x00, 0x7c, 0x00,
0x0e, 0x00, 0x38, 0x00,
0x04, 0x3e, 0x08, 0x00,
0x00, 0x7f, 0x80, 0x00,
0x01, 0xff, 0xc0, 0x00,
0x01, 0xff, 0xc0, 0x00,
0x00, 0xe1, 0xc0, 0x00,
0x00, 0x80, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x1e, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00
0x00, 0xff, 0x80, 0x00,
0x03, 0xff, 0xe0, 0x00,
0x0f, 0xff, 0xf8, 0x00,
0x1f, 0xff, 0xfc, 0x00,
0x3f, 0xc1, 0xfe, 0x00,
0x7e, 0x00, 0x3f, 0x80,
0xfc, 0x00, 0x0f, 0x80,
0xf0, 0x7f, 0x07, 0x80,
0x61, 0xff, 0xc3, 0x80,
0x63, 0xff, 0xe1, 0x00,
0x07, 0xff, 0xf0, 0x00,
0x0f, 0xc0, 0xf8, 0x00,
0x0f, 0x00, 0x7c, 0x00,
0x0e, 0x00, 0x38, 0x00,
0x04, 0x3e, 0x08, 0x00,
0x00, 0x7f, 0x80, 0x00,
0x01, 0xff, 0xc0, 0x00,
0x01, 0xff, 0xc0, 0x00,
0x00, 0xe1, 0xc0, 0x00,
0x00, 0x80, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x1e, 0x00, 0x00,
0x00, 0x1c, 0x00, 0x00,
0x00, 0x08, 0x00, 0x00
};