Merge pull request #661 from flyoob/main

This commit is contained in:
Sjef Verhoeven PE5PVB
2024-09-17 11:59:22 +02:00
committed by GitHub
2 changed files with 196 additions and 2 deletions

View File

@@ -38,6 +38,10 @@
#define DYNAMIC_SPI_SPEED // uncomment to enable dynamic SPI Speed https://github.com/ohmytime/TFT_eSPI_DynamicSpeed
#ifdef DEEPELEC_DP_66X
#define EXT_IRQ 14
#endif
#ifdef ARS
TFT_eSPI tft = TFT_eSPI(320, 240);
#else
@@ -149,7 +153,7 @@ byte BWset;
byte BWsetAM;
byte BWsetFM;
byte charwidth = 8;
#ifdef CHINA_PORTABLE
#if defined(CHINA_PORTABLE) || defined(DEEPELEC_DP_66X)
byte hardwaremodel = PORTABLE_ILI9341;
#else
byte hardwaremodel = BASE_ILI9341;
@@ -640,6 +644,10 @@ void setup() {
attachInterrupt(digitalPinToInterrupt(ROTARY_PIN_A), read_encoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(ROTARY_PIN_B), read_encoder, CHANGE);
#ifdef DEEPELEC_DP_66X
pinMode(EXT_IRQ, INPUT_PULLUP);
#endif
tft.setSwapBytes(true);
tft.fillScreen(BackgroundColor);
@@ -784,6 +792,20 @@ void setup() {
}
tftPrint(0, "Patch: v" + String(TEF), 160, 202, ActiveColor, ActiveColorSmooth, 28);
#ifdef DEEPELEC_DP_66X
bool extIO_dect = false;
// Device address 0x20
// Set PORT0/PORT1 as input
Wire.beginTransmission(0x20);
Wire.write(0x06);
Wire.write(0xFF);
Wire.write(0xFF);
if (Wire.endTransmission() == 0) {
extIO_dect = true;
tftPrint(-1, "HW:DP-666", 240, 152, PrimaryColor, PrimaryColorSmooth, 16);
}
#endif
if (analogRead(BATTERY_PIN) < 200) batterydetect = false;
if (wifi) {
@@ -1241,6 +1263,20 @@ void loop() {
}
}
#ifdef DEEPELEC_DP_66X
if (digitalRead(EXT_IRQ) == LOW) {
int num;
num = GetNum();
if (num != -1)
{
if (!screenmute && !menu && !advancedRDS && !afscreen)
{
NumpadProcess(num);
}
}
}
#endif
if (screensaverset) {
if (screensaver_IRQ)
{
@@ -4263,7 +4299,11 @@ void DefaultSettings(byte userhardwaremodel) {
EEPROM.writeByte(EE_BYTE_SHOWRDSERRORS, 1);
EEPROM.writeByte(EE_BYTE_TEF, 0);
if (userhardwaremodel == BASE_ILI9341) EEPROM.writeByte(EE_BYTE_DISPLAYFLIP, 0); else EEPROM.writeByte(EE_BYTE_DISPLAYFLIP, 1);
#ifdef DEEPELEC_DP_66X
EEPROM.writeByte(EE_BYTE_ROTARYMODE, 1);
#else
EEPROM.writeByte(EE_BYTE_ROTARYMODE, 0);
#endif
EEPROM.writeByte(EE_BYTE_STEPSIZE, 0);
EEPROM.writeByte(EE_BYTE_TUNEMODE, 0);
EEPROM.writeByte(EE_BYTE_OPTENC, 0);
@@ -4908,3 +4948,156 @@ void ClearMemoryRange(uint8_t start, uint8_t stop) {
presets[pos].frequency = EE_PRESETS_FREQUENCY;
}
}
#ifdef DEEPELEC_DP_66X
byte numval[16] = {
2, 3, 127, 5, 6, 0, 9, 13, 8, 7, 4, 1, 0, 0, 0, 0
};
int GetNum(void)
{
int16_t temp;
int cnt = 0;
unsigned int num;
Wire.beginTransmission(0x20);
Wire.write(0x00);
Wire.endTransmission();
Wire.requestFrom(0x20, 2);
if (Wire.available() == 2)
{
temp = Wire.read() & 0xFF;
temp |= (Wire.read() & 0xFF) * 256;
for (int i = 0; i < 16; i++) {
if ((temp & 0x01) == 0)
{
num = numval[i];
cnt ++;
}
temp >>= 1;
}
if (cnt == 1)
return num;
}
return -1;
}
void ShowNum(int val)
{
switch (freqfont) {
case 0: FrequencySprite.loadFont(FREQFONT0); break;
case 1: FrequencySprite.loadFont(FREQFONT1); break;
case 2: FrequencySprite.loadFont(FREQFONT2); break;
case 3: FrequencySprite.loadFont(FREQFONT3); break;
case 4: FrequencySprite.loadFont(FREQFONT4); break;
case 5: FrequencySprite.loadFont(FREQFONT5); break;
}
FrequencySprite.setTextDatum(TR_DATUM);
FrequencySprite.fillSprite(BackgroundColor);
FrequencySprite.setTextColor(FreqColor, FreqColorSmooth, false);
FrequencySprite.drawString(String(val) + " ", 218, -6);
FrequencySprite.pushSprite(46, 46);
FrequencySprite.unloadFont();
}
void TuneFreq(int temp)
{
aftest = true;
aftimer = millis();
if (band == BAND_FM) {
while (temp < (LowEdgeSet * 10)) temp = temp*10;
if (temp > (HighEdgeSet * 10)) {
if (edgebeep) EdgeBeeper();
} else {
frequency = temp;
}
radio.SetFreq(frequency);
}
else if (band == BAND_OIRT) {
while (temp < (LowEdgeOIRTSet * 10)) temp = temp*10;
if (temp > HighEdgeOIRTSet) {
if (edgebeep) EdgeBeeper();
} else {
frequency_OIRT = temp;
}
radio.SetFreq(frequency_OIRT);
}
else if (band == BAND_LW) {
while (temp < LWLowEdgeSet) temp = temp*10;
if (temp > LWHighEdgeSet) {
if (edgebeep) EdgeBeeper();
} else {
frequency_AM = temp;
}
radio.SetFreqAM(frequency_AM);
frequency_LW = frequency_AM;
}
else if (band == BAND_MW) {
while (temp < MWLowEdgeSet) temp = temp*10;
if (temp > MWHighEdgeSet) {
if (edgebeep) EdgeBeeper();
} else {
frequency_AM = temp;
}
radio.SetFreqAM(frequency_AM);
frequency_MW = frequency_AM;
}
else if (band == BAND_SW) {
while (temp < SWLowEdgeSet) temp = temp*10;
if (temp > SWHighEdgeSet) {
if (edgebeep) EdgeBeeper();
} else {
frequency_AM = temp;
}
radio.SetFreqAM(frequency_AM);
frequency_SW = frequency_AM;
}
radio.clearRDS(fullsearchrds);
if (RDSSPYUSB) Serial.print("G:\r\nRESET-------\r\n\r\n");
if (RDSSPYTCP) RemoteClient.print("G:\r\nRESET-------\r\n\r\n");
}
void NumpadProcess(int num)
{
static bool input_mode = false;
static int freq_in = 0;
if (scandxmode) {
if (num == 127) { // DX
cancelDXScan();
}
} else {
if (num == 127) { // DX
startFMDXScan();
}
else if (num == 13) { // Enter
if (freq_in != 0) {
TuneFreq(freq_in);
if (XDRGTKUSB || XDRGTKTCP) {
if (band == BAND_FM) DataPrint("M0\nT" + String(frequency * 10) + "\n"); else if (band == BAND_OIRT) DataPrint("M0\nT" + String(frequency_OIRT * 10) + "\n"); else DataPrint("M1\nT" + String(frequency_AM) + "\n");
}
if (!memorystore) {
if (!memtune) radio.clearRDS(fullsearchrds);
memtune = false;
ShowFreq(0);
store = true;
}
}
freq_in = 0;
}
else { // Num
if (freq_in/10000 == 0) {
freq_in = freq_in*10 + num;
}
ShowNum(freq_in);
}
}
}
#endif

View File

@@ -5,5 +5,6 @@
// #define HAS_AIR_BAND // uncomment to enable Air Band(Make sure you have Air Band extend board)
// #define CHINA_PORTABLE // uncomment for China Portable build (Simplified Chinese)
// #define DEEPELEC_DP_66X // uncomment for DEEPELEC Portable DP-66X build (Simplified Chinese)
#endif
#endif