You've already forked TEF6686_ESP32
Some changes
This commit is contained in:
@@ -356,7 +356,7 @@ void TEF6686::getStatus(int16_t *level, uint16_t *USN, uint16_t *WAM, int16_t *o
|
||||
|
||||
void TEF6686::getStatusAM(int16_t *level, uint16_t *noise, uint16_t *cochannel, int16_t *offset, uint16_t *bandwidth, uint16_t *audiolevel, int8_t *snr) {
|
||||
uint8_t buf[14];
|
||||
devTEF_Get_Cmd(TEF_AM, Cmd_Get_Quality_Data, buf, sizeof(buf));
|
||||
devTEF_Get_Cmd(TEF_AM, Cmd_Get_Quality_Status, buf, sizeof(buf));
|
||||
if(level != NULL) *level = Convert8bto16b(buf + 2);
|
||||
if(noise != NULL) *noise = Convert8bto16b(buf + 4);
|
||||
if(cochannel != NULL) *cochannel = Convert8bto16b(buf + 6);
|
||||
|
||||
@@ -35,7 +35,7 @@ uint8_t devTEF_APPL_Get_Operation_Status() {
|
||||
|
||||
void devTEF_Radio_Get_Quality_Status(uint16_t *status, int16_t *level, uint16_t *usn, uint16_t *wam, int16_t *offset, uint16_t *bandwidth, uint16_t *audiolevel, int8_t *snr) {
|
||||
uint8_t buf[14];
|
||||
devTEF_Get_Cmd(TEF_FM, Cmd_Get_Quality_Data, buf, sizeof(buf));
|
||||
devTEF_Get_Cmd(TEF_FM, Cmd_Get_Quality_Status, buf, sizeof(buf));
|
||||
if(status != NULL) *status = Convert8bto16b(buf);
|
||||
if(level != NULL) *level = Convert8bto16b(buf + 2);
|
||||
if(usn != NULL) *usn = Convert8bto16b(buf + 4);
|
||||
|
||||
@@ -15,6 +15,7 @@ using fs::FS;
|
||||
#include "system_console.h"
|
||||
#include "core.h"
|
||||
#include "main.h"
|
||||
#include "logbook.h"
|
||||
|
||||
Console console(&tft);
|
||||
RTC_DATA_ATTR bool gpio_chip = false;
|
||||
@@ -1646,7 +1647,7 @@ void KeyUp() {
|
||||
case TUNE_MI_BAND:
|
||||
if (showSWMIBand) {
|
||||
if (displayflip) ToggleSWMIBand(true);
|
||||
else ToggleSWMIBand(REVERSE);
|
||||
else ToggleSWMIBand(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1704,7 +1705,7 @@ void KeyDown() {
|
||||
break;
|
||||
case TUNE_MI_BAND:
|
||||
if (showSWMIBand) {
|
||||
if (displayflip) ToggleSWMIBand(REVERSE);
|
||||
if (displayflip) ToggleSWMIBand(false);
|
||||
else ToggleSWMIBand(true);
|
||||
} break;
|
||||
}
|
||||
|
||||
@@ -249,6 +249,7 @@ String XDRGTK_key;
|
||||
Detector<String, 1> XDRGTKRDS{""};
|
||||
uint16_t BW;
|
||||
uint16_t MStatus;
|
||||
bool modLevelForceRedraw = true;
|
||||
uint16_t SWMIBandPos;
|
||||
uint16_t SWMIBandPosold;
|
||||
uint16_t TouchCalData[5];
|
||||
|
||||
@@ -2996,6 +2996,7 @@ void BuildDisplay() {
|
||||
rdsstatscreen = false;
|
||||
advancedRDS = false;
|
||||
BWtune = false;
|
||||
modLevelForceRedraw = true;
|
||||
|
||||
tft.fillScreen(BackgroundColor);
|
||||
tft.drawRect(0, 0, 320, 240, FrameColor);
|
||||
@@ -3116,8 +3117,8 @@ void BuildDisplay() {
|
||||
radio.rds.hasTMC.call();
|
||||
radio.rds.hasCT.call();
|
||||
radio.rds.hasRTplus.call();
|
||||
MPold = 99;
|
||||
USold = 99;
|
||||
MPold = 100;
|
||||
USold = 100;
|
||||
}
|
||||
|
||||
void MenuUpDown(bool dir) {
|
||||
|
||||
79
src/main.cpp
79
src/main.cpp
@@ -11,12 +11,15 @@
|
||||
#include "FREQFONT.h"
|
||||
#include "touch.h"
|
||||
#include "rds.h"
|
||||
#include "logbook.h"
|
||||
#include "comms.h"
|
||||
|
||||
void Touch_IRQ_Handler() {
|
||||
touch_detect = true;
|
||||
}
|
||||
|
||||
void read_encoder() {
|
||||
if(i2c_pc_control) return;
|
||||
if (!digitalRead(ROTARY_PIN_A) || !digitalRead(ROTARY_PIN_B)) {
|
||||
uint32_t dt = millis() - rotarytimer;
|
||||
if (dt >= 45) {
|
||||
@@ -182,16 +185,8 @@ void later_setup_periph() {
|
||||
|
||||
void setup() {
|
||||
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
|
||||
gpio_set_drive_capability((gpio_num_t)5, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)16, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)17, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)18, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)19, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)21, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)22, GPIO_DRIVE_CAP_0);
|
||||
gpio_set_drive_capability((gpio_num_t)23, GPIO_DRIVE_CAP_0);
|
||||
|
||||
analogWriteFrequency(5000);
|
||||
analogWriteFrequency(6700); // six seven
|
||||
|
||||
EEPROM.begin(EE_TOTAL_CNT);
|
||||
|
||||
@@ -452,8 +447,6 @@ void setup() {
|
||||
console.reset();
|
||||
}
|
||||
|
||||
#include "comms.h"
|
||||
|
||||
void handleWiFi() {
|
||||
if (wifi && !menu) {
|
||||
webserver.handleClient();
|
||||
@@ -530,26 +523,39 @@ void ShowAudioLevel() {
|
||||
|
||||
peakholdold = constrain(peakholdold, 0, 86);
|
||||
|
||||
HSV hsv1 = RGB565toHSV(ModBarInsignificantColor);
|
||||
HSV hsv2 = RGB565toHSV(ModBarSignificantColor);
|
||||
// Skip redraw when nothing changed
|
||||
static int prevDisplayedSegments = -1;
|
||||
static int prevPeakhold = -1;
|
||||
if (!modLevelForceRedraw && DisplayedSegments == prevDisplayedSegments && peakholdold == prevPeakhold) return;
|
||||
modLevelForceRedraw = false;
|
||||
|
||||
int gradientStart = (86 * 25) / 100;
|
||||
int gradientEnd = (86 * 60) / 100;
|
||||
// Pre-computed gradient color lookup table (cached, recomputed only on theme change)
|
||||
static uint16_t modGradient[87];
|
||||
static uint16_t cachedInsigColor = 0;
|
||||
static uint16_t cachedSigColor = 0;
|
||||
static bool gradientReady = false;
|
||||
|
||||
for (int i = 0; i < min(DisplayedSegments, gradientStart); i++) tft.fillRect(16 + 2 * i, 133, 2, 6, ModBarInsignificantColor);
|
||||
|
||||
if (DisplayedSegments > gradientStart) {
|
||||
for (int i = gradientStart; i < min(DisplayedSegments, gradientEnd); i++) {
|
||||
float h = map(i, gradientStart, gradientEnd, hsv1.h, hsv2.h);
|
||||
float s = map(i, gradientStart, gradientEnd, hsv1.s * 100, hsv2.s * 100) / 100.0;
|
||||
float v = map(i, gradientStart, gradientEnd, hsv1.v * 100, hsv2.v * 100) / 100.0;
|
||||
tft.fillRect(16 + 2 * i, 133, 2, 6, HSVtoRGB565(h, s, v));
|
||||
if (!gradientReady || cachedInsigColor != ModBarInsignificantColor || cachedSigColor != ModBarSignificantColor) {
|
||||
HSV hsv1 = RGB565toHSV(ModBarInsignificantColor);
|
||||
HSV hsv2 = RGB565toHSV(ModBarSignificantColor);
|
||||
int gStart = (86 * 25) / 100;
|
||||
int gEnd = (86 * 60) / 100;
|
||||
for (int i = 0; i < 87; i++) {
|
||||
if (i < gStart) modGradient[i] = ModBarInsignificantColor;
|
||||
else if (i < gEnd) {
|
||||
float h = map(i, gStart, gEnd, hsv1.h, hsv2.h);
|
||||
float s = map(i, gStart, gEnd, hsv1.s * 100, hsv2.s * 100) / 100.0;
|
||||
float v = map(i, gStart, gEnd, hsv1.v * 100, hsv2.v * 100) / 100.0;
|
||||
modGradient[i] = HSVtoRGB565(h, s, v);
|
||||
} else modGradient[i] = ModBarSignificantColor;
|
||||
}
|
||||
cachedInsigColor = ModBarInsignificantColor;
|
||||
cachedSigColor = ModBarSignificantColor;
|
||||
gradientReady = true;
|
||||
}
|
||||
|
||||
if (DisplayedSegments > gradientEnd) {
|
||||
for (int i = gradientEnd; i < DisplayedSegments; i++) tft.fillRect(16 + 2 * i, 133, 2, 6, ModBarSignificantColor);
|
||||
}
|
||||
// Draw bar segments using cached gradient colors
|
||||
for (int i = 0; i < DisplayedSegments; i++) tft.fillRect(16 + 2 * i, 133, 2, 6, modGradient[i]);
|
||||
|
||||
int greyStart = 16 + 2 * DisplayedSegments;
|
||||
int greyWidth = 2 * (87 - DisplayedSegments);
|
||||
@@ -559,6 +565,9 @@ void ShowAudioLevel() {
|
||||
tft.fillRect(peakHoldPosition, 133, 2, 6, (MStatus > 80) ? ModBarSignificantColor : PrimaryColor);
|
||||
|
||||
if (millis() - peakholdmillis >= 1000 && (peakholdold <= DisplayedSegments || peakholdold >= 86)) tft.fillRect(peakHoldPosition, 133, 2, 6, GreyoutColor);
|
||||
|
||||
prevDisplayedSegments = DisplayedSegments;
|
||||
prevPeakhold = peakholdold;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -948,7 +957,7 @@ void ShowBattery() {
|
||||
else return;
|
||||
|
||||
float v = analogReadMilliVolts(BATTERY_PIN) * 0.002; // 0.002 converts to volts plus corrects the /2 voltage divider
|
||||
byte battery = map(constrain(v, BATTERY_LOW_VALUE, BATTERY_FULL_VALUE), BATTERY_LOW_VALUE, BATTERY_FULL_VALUE, 0, BAT_LEVEL_STAGE);
|
||||
byte battery = map(constrain(v, BATTERY_LOW_VALUE, BATTERY_FULL_VALUE), BATTERY_LOW_VALUE, BATTERY_FULL_VALUE, 0, 32);
|
||||
byte batteryprobe = map(constrain(v, BATTERY_LOW_VALUE, BATTERY_FULL_VALUE), BATTERY_LOW_VALUE, BATTERY_FULL_VALUE, 0, 50);
|
||||
if (batteryold != batteryprobe) {
|
||||
if (batterydetect) {
|
||||
@@ -962,7 +971,7 @@ void ShowBattery() {
|
||||
|
||||
if (batteryoptions != BATTERY_VALUE && batteryoptions != BATTERY_PERCENT && battery != 0) {
|
||||
if(v > BATTERY_FULL_VALUE) tft.fillRoundRect(279, 8, 32, 16, 2, ActiveColor);
|
||||
else tft.fillRoundRect(279, 8, battery * 8, 16, 2, SecondaryColor);
|
||||
else tft.fillRoundRect(279, 8, battery, 16, 2, SecondaryColor);
|
||||
} else tft.fillRoundRect(279, 8, 32, 16, 2, BackgroundColor);
|
||||
}
|
||||
batteryold = batteryprobe;
|
||||
@@ -1359,7 +1368,7 @@ void loop() {
|
||||
if (screensavertriggered) {
|
||||
if (!touchrotating) {
|
||||
rotary = 0;
|
||||
WakeToSleep(REVERSE);
|
||||
WakeToSleep(false);
|
||||
} else {
|
||||
if (BWtune) doBWtuneUp(); else KeyUp();
|
||||
}
|
||||
@@ -1378,7 +1387,7 @@ void loop() {
|
||||
if (screensavertriggered) {
|
||||
if (!touchrotating) {
|
||||
rotary = 0;
|
||||
WakeToSleep(REVERSE);
|
||||
WakeToSleep(false);
|
||||
} else {
|
||||
if (BWtune) doBWtuneDown(); else KeyDown();
|
||||
}
|
||||
@@ -1395,7 +1404,7 @@ void loop() {
|
||||
if (digitalRead(BANDBUTTON) == LOW) {
|
||||
tottimer = millis();
|
||||
if (screensavertriggered) {
|
||||
WakeToSleep(REVERSE);
|
||||
WakeToSleep(false);
|
||||
while (digitalRead(BANDBUTTON) == LOW);
|
||||
} else BANDBUTTONPress();
|
||||
}
|
||||
@@ -1403,7 +1412,7 @@ void loop() {
|
||||
if (digitalRead(ROTARY_BUTTON) == LOW) {
|
||||
tottimer = millis();
|
||||
if (screensavertriggered) {
|
||||
WakeToSleep(REVERSE);
|
||||
WakeToSleep(false);
|
||||
while (digitalRead(ROTARY_BUTTON) == LOW);
|
||||
} else if (!afscreen && !rdsstatscreen) ButtonPress();
|
||||
}
|
||||
@@ -1411,7 +1420,7 @@ void loop() {
|
||||
if (digitalRead(MODEBUTTON) == LOW) {
|
||||
tottimer = millis();
|
||||
if (screensavertriggered) {
|
||||
WakeToSleep(REVERSE);
|
||||
WakeToSleep(false);
|
||||
while (digitalRead(MODEBUTTON) == LOW);
|
||||
} else if(!screenmute) ModeButtonPress();
|
||||
}
|
||||
@@ -1419,13 +1428,13 @@ void loop() {
|
||||
if (digitalRead(BWBUTTON) == LOW && !BWtune) {
|
||||
tottimer = millis();
|
||||
if (screensavertriggered) {
|
||||
WakeToSleep(REVERSE);
|
||||
WakeToSleep(false);
|
||||
while (digitalRead(BWBUTTON) == LOW);
|
||||
} else if(!screenmute) BWButtonPress();
|
||||
}
|
||||
|
||||
if (digitalRead(EXT_IRQ) == LOW) {
|
||||
if (screensavertriggered) WakeToSleep(REVERSE);
|
||||
if (screensavertriggered) WakeToSleep(false);
|
||||
int num = GetNum();
|
||||
if (!screenmute && !BWtune && !menu && !advancedRDS && !rdsstatscreen && !afscreen && num != -1) NumpadProcess(num);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
#include "nonvolatile.h"
|
||||
#include "globals.h"
|
||||
#include "logbook.h"
|
||||
|
||||
void StoreFrequency() {
|
||||
switch (band) {
|
||||
|
||||
@@ -491,9 +491,7 @@ void showCT() {
|
||||
time_t t = rtc.getEpoch();
|
||||
|
||||
t += Timezone * 3600; // Convert offset from hours to seconds
|
||||
if (NTPupdated) {
|
||||
if (autoDST && isDST(t)) t += 3600;
|
||||
}
|
||||
if (autoDST && isDST(t)) t += 3600;
|
||||
|
||||
auto localtm = localtime(&t);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user