diff --git a/TEF6686_ESP32.ino b/TEF6686_ESP32.ino index 6f3e432..f2e56f0 100644 --- a/TEF6686_ESP32.ino +++ b/TEF6686_ESP32.ino @@ -129,7 +129,7 @@ byte regionold; byte rotarymode; byte showmodulation; byte showSWMIBand = 1; -byte SNR; +uint8_t SNR; byte SNRold; byte specialstepOIRT; byte stepsize; @@ -679,7 +679,7 @@ void loop() { if (millis() >= lowsignaltimer + 300) { lowsignaltimer = millis(); - if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); + if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if (screenmute == true) readRds(); if (menu == false) { doSquelch(); @@ -688,7 +688,7 @@ void loop() { } } else { - if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); + if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if (menu == false) { doSquelch(); readRds(); @@ -698,7 +698,7 @@ void loop() { } if (menu == true && menuopen == true && menupage == 1 && menuoption == 110) { - if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); + if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if (millis() >= lowsignaltimer + 500 || change2 == true) { lowsignaltimer = millis(); change2 = false; @@ -1379,7 +1379,7 @@ void SelectBand() { LimitAMFrequency(); radio.SetFreqAM(frequency_AM); doBW; - radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); + radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if (screenmute == false) radio.clearRDS(fullsearchrds); BuildDisplay(); tft.setFreeFont(FONT7); if (region == 0) tft.drawString("PI:", 216, 191, GFXFF); @@ -1403,7 +1403,7 @@ void SelectBand() { radio.SetFreq(frequency); freqold = frequency_AM; doBW; - radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); + radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if (screenmute == false) radio.clearRDS(fullsearchrds); BuildDisplay(); } } @@ -3274,7 +3274,7 @@ void ShowAdvancedRDS() { MSold = radio.rds.MS; } - rds_clock = ((hour() < 10 ? "0" : "") + String(hour()) + ":" + (minute() < 10 ? "0" : "") + String(minute())); + rds_clock = ((hour() < 10 ? "0" : "") + String(hour()) + ":" + (minute() < 10 ? "0" : "") + String(minute())); if (radio.rds.hasCT == true && rds_clock != rds_clockold) { tft.setFreeFont(FONT7); tft.setTextColor(BackgroundColor); @@ -4253,9 +4253,6 @@ void ShowFreq(int mode) { void ShowSignalLevel() { if (screenmute == false) { - if (band == BAND_FM) SNR = int(0.46222375 * (float)(SStatus / 10) - 0.082495118 * (float)(USN / 10)) + 10; else SNR = -((int8_t)(USN / 10)); - if (band != BAND_FM && SNR > 50) SNR = 0; - if (millis() >= snrupdatetimer + TIMER_SNR_TIMER) { snrupdatetimer = millis(); @@ -4263,14 +4260,14 @@ void ShowSignalLevel() { if (SNR > (SNRold + 1) || SNR < (SNRold - 1)) { tft.setFreeFont(FONT7); tft.setTextColor(BackgroundColor); - if (SNRold == 99) tft.drawRightString("--", 294, 164, GFXFF); else tft.drawRightString(String(SNRold), 294, 164, GFXFF); + if (SNRold == 0) tft.drawRightString("--", 294, 164, GFXFF); else tft.drawRightString(String(SNRold), 294, 164, GFXFF); tft.setTextColor(PrimaryColor, BackgroundColor); if (tuned == true) { - tft.drawRightString(String(SNR), 294, 164, GFXFF); + if (SNR == 0) tft.drawRightString("--", 294, 164, GFXFF); else tft.drawRightString(String(SNR), 294, 164, GFXFF); SNRold = SNR; } else { tft.drawRightString("--", 294, 164, GFXFF); - SNRold = 99; + SNRold = 0; } } } @@ -5093,7 +5090,7 @@ void Communication() { radio.clearRDS(fullsearchrds); freqold = frequency_AM; doBW; - radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); + radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if (screenmute == false) radio.clearRDS(fullsearchrds); BuildDisplay(); } ShowFreq(0); @@ -5405,7 +5402,7 @@ void XDRGTKRoutine() { DataPrint(String(freq_scan * 10, DEC)); DataPrint(" = "); delay(10); - if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus); + if (band == BAND_FM) radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); else radio.getStatusAM(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); DataPrint(String((SStatus / 10) + 10, DEC)); DataPrint(", "); } @@ -5677,7 +5674,7 @@ void Seek(bool mode) { delay(50); ShowFreq(0); if (XDRGTKUSB == true || XDRGTKTCP == true) if (band == BAND_FM) DataPrint("T" + String(frequency * 10) + "\n"); else DataPrint("T" + String(frequency_AM) + "\n"); - radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus); + radio.getStatus(SStatus, USN, WAM, OStatus, BW, MStatus, SNR); if ((USN < 200) && (WAM < 230) && (OStatus < 80 && OStatus > -80) && (Squelch < SStatus || Squelch == 920)) { seek = false; diff --git a/src/TEF6686.cpp b/src/TEF6686.cpp index bfd07cd..299511f 100644 --- a/src/TEF6686.cpp +++ b/src/TEF6686.cpp @@ -206,22 +206,24 @@ bool TEF6686::getProcessing(uint16_t &highcut, uint16_t &stereo, uint16_t &sthib return stband_4; } -bool TEF6686::getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation) { - bool result = devTEF_Radio_Get_Quality_Status(&level, &USN, &WAM, &offset, &bandwidth, &modulation); +bool TEF6686::getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, uint8_t &snr) { + bool result = devTEF_Radio_Get_Quality_Status(&level, &USN, &WAM, &offset, &bandwidth, &modulation, &snr); return level; return USN; return WAM; return bandwidth; return modulation; + return snr; } -bool TEF6686::getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation) { - bool result = devTEF_Radio_Get_Quality_Status_AM(&level, &noise, &cochannel, &offset, &bandwidth, &modulation); +bool TEF6686::getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, uint8_t &snr) { + bool result = devTEF_Radio_Get_Quality_Status_AM(&level, &noise, &cochannel, &offset, &bandwidth, &modulation, &snr); return level; return noise; return cochannel; return bandwidth; return modulation; + return snr; } void TEF6686::readRDS(bool showrdserrors) diff --git a/src/TEF6686.h b/src/TEF6686.h index 59bd6ce..a04cee5 100644 --- a/src/TEF6686.h +++ b/src/TEF6686.h @@ -107,7 +107,7 @@ typedef struct _rds_ { String PTYN; char stationType[18]; char picode[6]; - uint16_t hour, minutes, day, month, year, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; + uint16_t hour, minute, day, month, year, offsetplusmin, rdsA, rdsB, rdsC, rdsD, rdsErr; int8_t offset; unsigned int ECC; unsigned int LIC; @@ -166,8 +166,8 @@ class TEF6686 { void SetFreq(uint16_t frequency); void SetFreqAM(uint16_t frequency); bool getProcessing(uint16_t &highcut, uint16_t &stereo, uint16_t &sthiblend, uint8_t &stband_1, uint8_t &stband_2, uint8_t &stband_3, uint8_t &stband_4); - bool getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation); - bool getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation); + bool getStatus(int16_t &level, uint16_t &USN, uint16_t &WAM, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, uint8_t &snr); + bool getStatusAM(int16_t &level, uint16_t &noise, uint16_t &cochannel, int16_t &offset, uint16_t &bandwidth, uint16_t &modulation, uint8_t &snr); bool getIdentification(uint16_t &device, uint16_t &hw_version, uint16_t &sw_version); void setSoftmuteFM(uint8_t mode); void setSoftmuteAM(uint8_t mode); diff --git a/src/Tuner_Drv_Lithio.cpp b/src/Tuner_Drv_Lithio.cpp index ecf6d5b..f45c506 100644 --- a/src/Tuner_Drv_Lithio.cpp +++ b/src/Tuner_Drv_Lithio.cpp @@ -206,7 +206,7 @@ bool devTEF_Radio_Get_Processing_Status (uint16_t *highcut, uint16_t *stereo, ui return r; } -bool devTEF_Radio_Get_Quality_Status (int16_t *level, uint16_t *usn, uint16_t *wam, int16_t *offset, uint16_t *bandwidth, uint16_t *mod) { +bool devTEF_Radio_Get_Quality_Status (int16_t *level, uint16_t *usn, uint16_t *wam, int16_t *offset, uint16_t *bandwidth, uint16_t *mod, uint8_t *snr) { uint8_t buf[14]; uint16_t r = devTEF_Get_Cmd(TEF_FM, Cmd_Get_Quality_Data, buf, sizeof(buf)); @@ -216,10 +216,11 @@ bool devTEF_Radio_Get_Quality_Status (int16_t *level, uint16_t *usn, uint16_t *w *offset = Convert8bto16b(buf + 8); *bandwidth = Convert8bto16b(buf + 10) / 10; *mod = Convert8bto16b(buf + 12) / 10; + *snr = int(0.46222375 * (float)(*level) / 10 - 0.082495118 * (float)(*usn) / 10) + 10; return r; } -bool devTEF_Radio_Get_Quality_Status_AM (int16_t *level, uint16_t *noise, uint16_t *cochannel, int16_t *offset, uint16_t *bandwidth, uint16_t *mod) { +bool devTEF_Radio_Get_Quality_Status_AM (int16_t *level, uint16_t *noise, uint16_t *cochannel, int16_t *offset, uint16_t *bandwidth, uint16_t *mod, uint8_t *snr) { uint8_t buf[14]; uint16_t r = devTEF_Get_Cmd(TEF_AM, Cmd_Get_Quality_Data, buf, sizeof(buf)); @@ -229,6 +230,7 @@ bool devTEF_Radio_Get_Quality_Status_AM (int16_t *level, uint16_t *noise, uint16 *offset = Convert8bto16b(buf + 8); *bandwidth = Convert8bto16b(buf + 10) / 10; *mod = Convert8bto16b(buf + 12) / 10; + if (*noise / 10 > 40) *snr = 0; else *snr = -((int8_t)(*noise / 10)); return r; } diff --git a/src/Tuner_Drv_Lithio.h b/src/Tuner_Drv_Lithio.h index 64e3e29..6c5d090 100644 --- a/src/Tuner_Drv_Lithio.h +++ b/src/Tuner_Drv_Lithio.h @@ -64,9 +64,9 @@ bool devTEF_Set_Cmd(TEF_MODULE module, uint8_t cmd, uint16_t len, ...); bool devTEF_Radio_Get_Identification (uint16_t *device, uint16_t *hw_version, uint16_t *sw_version); bool devTEF_Radio_Tune_To (uint16_t frequency ); bool devTEF_Radio_Tune_AM (uint16_t frequency ); -bool devTEF_Radio_Get_Quality_Status (int16_t *level, uint16_t *usn, uint16_t *wam, int16_t *offset, uint16_t *bandwidth, uint16_t *mod); +bool devTEF_Radio_Get_Quality_Status (int16_t *level, uint16_t *usn, uint16_t *wam, int16_t *offset, uint16_t *bandwidth, uint16_t *mod, uint8_t *snr); bool devTEF_Radio_Get_Processing_Status (uint16_t *highcut, uint16_t *stereo, uint16_t *sthiblend, uint8_t *stband_1, uint8_t *stband_2, uint8_t *stband_3, uint8_t *stband_4); -bool devTEF_Radio_Get_Quality_Status_AM (int16_t *level, uint16_t *noise, uint16_t *cochannel, int16_t *offset, uint16_t *bandwidth, uint16_t *mod); +bool devTEF_Radio_Get_Quality_Status_AM (int16_t *level, uint16_t *noise, uint16_t *cochannel, int16_t *offset, uint16_t *bandwidth, uint16_t *mod, uint8_t *snr); bool devTEF_APPL_Get_Operation_Status(uint8_t *bootstatus); bool devTEF_Audio_Set_Mute(uint8_t mode); bool devTEF_Audio_Set_Volume(int16_t volume);