Compare commits
27 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
c9ed618a8b | |
|
|
6c7b8f9918 | |
|
|
c2b4b3b92f | |
|
|
f7319ce591 | |
|
|
858162eb9c | |
|
|
100b002309 | |
|
|
3acf73bf5f | |
|
|
53675e8084 | |
|
|
4349019f7b | |
|
|
411753c0aa | |
|
|
ad6aed7f0d | |
|
|
f325c54fc3 | |
|
|
1a3966eadc | |
|
|
ffd3eaeb49 | |
|
|
df03a49123 | |
|
|
58d647bad1 | |
|
|
59988fbaf1 | |
|
|
1ad13e3c09 | |
|
|
ffe1a2f830 | |
|
|
a0fdd78cb1 | |
|
|
95e437cb50 | |
|
|
9c488991e2 | |
|
|
ddcd33b94a | |
|
|
b688391a0e | |
|
|
56d63d0389 | |
|
|
ad5a5ccf18 | |
|
|
92bc0a7667 |
|
|
@ -21,6 +21,8 @@ jobs:
|
|||
chip: esp32
|
||||
- name: heltec_wifi_lora_32_V3
|
||||
chip: esp32s3
|
||||
- name: heltec_wifi_lora_32_V3_2
|
||||
chip: esp32s3
|
||||
- name: heltec_wireless_stick
|
||||
chip: esp32s3
|
||||
- name: heltec_wireless_stick_lite_v3
|
||||
|
|
@ -51,6 +53,10 @@ jobs:
|
|||
chip: esp32
|
||||
- name: ttgo-t-beam-v1_2_SX1262
|
||||
chip: esp32
|
||||
- name: ttgo_t_deck_plus
|
||||
chip: esp32s3
|
||||
- name: ttgo_t_deck_GPS
|
||||
chip: esp32s3
|
||||
- name: ESP32_DIY_LoRa_A7670
|
||||
chip: esp32
|
||||
- name: ESP32_DIY_LoRa_A7670_915
|
||||
|
|
@ -78,7 +84,9 @@ jobs:
|
|||
- name: QRPLabs_LightGateway_1_0
|
||||
chip: esp32s3
|
||||
- name: XIAO_ESP32S3_WIO_SX1262
|
||||
chip: esp32s3
|
||||
chip: esp32s3
|
||||
- name: TROY_LoRa_APRS
|
||||
chip: esp32
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ ____________________________________________________
|
|||
|
||||
- TTGO T-Beam V1.0 , V1.1, V1.2 (also variations with SX1262 and SX1268 LoRa Modules).
|
||||
|
||||
- T-Deck Plus (and also regular T-Deck with/without GPS).
|
||||
|
||||
- HELTEC V2, V3 , Wireless Stick, Wireless Stick Lite, HT-CT62, Wireless Tracker, Wireless Paper.
|
||||
|
||||
- QRP Labs LightGateway 1.0.
|
||||
|
|
@ -52,6 +54,12 @@ ____________________________________________________
|
|||
|
||||
## Timeline (Versions):
|
||||
|
||||
- 2025.01.22 Added LILYGO T-DECK PLUS (and DIY+GPS version) board support.
|
||||
- 2025.01.11 Added HELTEC V3.2 board support.
|
||||
- 2025.01.07 TROY_LoRa_APRS board added. GMT in quarter hour fix and Beacon fix for TNC.
|
||||
- 2025.01.02 Callsign Black List added.
|
||||
- 2024.12.30 Fixed missing validation for correct Digipeater mode when not connected to APRS-IS.
|
||||
- 2024.12.06 APRS-IS connnection and passcode validation added.
|
||||
- 2024.11.06 (Silent Update) Working now with Board "VARIANTS".
|
||||
- 2024.10.29 Added LILYGO Lora32 T3S3 support.
|
||||
- 2024.10.25 Added QRP Labs LightGateway 1.0 support.
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@
|
|||
"externalSleepVoltage": 10.9,
|
||||
"voltageDividerR1": 100.0,
|
||||
"voltageDividerR2": 27.0,
|
||||
"sendVoltageAsTelemetry": true
|
||||
"sendVoltageAsTelemetry": false
|
||||
},
|
||||
"wxsensor": {
|
||||
"active": false,
|
||||
|
|
@ -65,8 +65,8 @@
|
|||
},
|
||||
"syslog": {
|
||||
"active": false,
|
||||
"server": "192.168.0.100",
|
||||
"port": 514
|
||||
"server": "lora.link9.net",
|
||||
"port": 1514
|
||||
},
|
||||
"tnc": {
|
||||
"enableServer": false,
|
||||
|
|
@ -82,7 +82,7 @@
|
|||
"password": ""
|
||||
},
|
||||
"ntp": {
|
||||
"gmtCorrection": 0
|
||||
"gmtCorrection": 0.0
|
||||
},
|
||||
"other": {
|
||||
"rememberStationTime": 30,
|
||||
|
|
@ -92,5 +92,6 @@
|
|||
"rebootMode": false,
|
||||
"rebootModeTime": 6
|
||||
},
|
||||
"personalNote": ""
|
||||
"personalNote": "",
|
||||
"blackList": ""
|
||||
}
|
||||
|
|
@ -573,6 +573,47 @@
|
|||
</div>
|
||||
<hr />
|
||||
|
||||
<div class="row my-5 d-flex align-items-top">
|
||||
<div class="col-lg-3 col-sm-12">
|
||||
<h5>
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="20"
|
||||
height="20"
|
||||
fill="currentColor"
|
||||
class="bi bi-broadcast-pin"
|
||||
viewBox="0 0 16 16"
|
||||
>
|
||||
<path
|
||||
d="M3.05 3.05a7 7 0 0 0 0 9.9.5.5 0 0 1-.707.707 8 8 0 0 1 0-11.314.5.5 0 0 1 .707.707m2.122 2.122a4 4 0 0 0 0 5.656.5.5 0 1 1-.708.708 5 5 0 0 1 0-7.072.5.5 0 0 1 .708.708m5.656-.708a.5.5 0 0 1 .708 0 5 5 0 0 1 0 7.072.5.5 0 1 1-.708-.708 4 4 0 0 0 0-5.656.5.5 0 0 1 0-.708m2.122-2.12a.5.5 0 0 1 .707 0 8 8 0 0 1 0 11.313.5.5 0 0 1-.707-.707 7 7 0 0 0 0-9.9.5.5 0 0 1 0-.707zM6 8a2 2 0 1 1 2.5 1.937V15.5a.5.5 0 0 1-1 0V9.937A2 2 0 0 1 6 8"
|
||||
/>
|
||||
</svg>
|
||||
Black List
|
||||
</h5>
|
||||
<small>Add Callsigns with space between them to Black List them (* wild card allowed)</small>
|
||||
</div>
|
||||
<div class="col-9 mt-2">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<label
|
||||
for="blackList"
|
||||
class="form-label"
|
||||
>Black List</label
|
||||
>
|
||||
<input
|
||||
type="text"
|
||||
name="blackList"
|
||||
id="blackList"
|
||||
class="form-control"
|
||||
placeholder="Station Callsign"
|
||||
oninput="this.value = this.value.toUpperCase();"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<div class="row my-5 d-flex align-items-top">
|
||||
<div class="col-lg-3 col-sm-12">
|
||||
<h5>
|
||||
|
|
@ -1703,9 +1744,9 @@
|
|||
id="ntp.gmtCorrection"
|
||||
placeholder="0"
|
||||
class="form-control"
|
||||
step="1"
|
||||
min="-23"
|
||||
max="23"
|
||||
step="0.25"
|
||||
min="-23.75"
|
||||
max="23.75"
|
||||
/>
|
||||
<span class="input-group-text"
|
||||
>hours</span
|
||||
|
|
|
|||
|
|
@ -137,6 +137,9 @@ function loadSettings(settings) {
|
|||
document.getElementById("beacon.gpsActive").checked = settings.beacon.gpsActive;
|
||||
document.getElementById("beacon.gpsAmbiguity").checked = settings.beacon.gpsAmbiguity;
|
||||
|
||||
// Black List
|
||||
document.getElementById("blackList").value = settings.blackList;
|
||||
|
||||
// Digi
|
||||
document.getElementById("digi.mode").value = settings.digi.mode;
|
||||
document.getElementById("digi.ecoMode").checked = settings.digi.ecoMode;
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 36 KiB |
|
|
@ -50,7 +50,6 @@ public:
|
|||
bool ecoMode;
|
||||
};
|
||||
|
||||
|
||||
class LoraModule {
|
||||
public:
|
||||
long txFreq;
|
||||
|
|
@ -120,11 +119,10 @@ public:
|
|||
|
||||
class NTP {
|
||||
public:
|
||||
int gmtCorrection;
|
||||
float gmtCorrection;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class Configuration {
|
||||
public:
|
||||
String callsign;
|
||||
|
|
@ -135,6 +133,7 @@ public:
|
|||
bool rebootMode;
|
||||
int rebootModeTime;
|
||||
String personalNote;
|
||||
String blackList;
|
||||
std::vector<WiFi_AP> wifiAPs;
|
||||
WiFi_Auto_AP wifiAutoAP;
|
||||
BEACON beacon;
|
||||
|
|
|
|||
|
|
@ -5,14 +5,9 @@
|
|||
|
||||
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
|
||||
|
||||
|
||||
void cleanTFT();
|
||||
void displaySetup();
|
||||
void displayToggle(bool toggle);
|
||||
|
||||
bool shouldCleanTFT(const String& header, const String& line1, const String& line2, const String& line3);
|
||||
bool shouldCleanTFT(const String& header, const String& line1, const String& line2, const String& line3, const String& line4, const String& line5, const String& line6);
|
||||
|
||||
void displayShow(const String& header, const String& line1, const String& line2, const String& line3, int wait = 0);
|
||||
void displayShow(const String& header, const String& line1, const String& line2, const String& line3, const String& line4, const String& line5, const String& line6, int wait = 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ struct LastHeardStation {
|
|||
|
||||
namespace STATION_Utils {
|
||||
|
||||
void loadBlackList();
|
||||
bool checkBlackList(const String& callsign);
|
||||
void deleteNotHeard();
|
||||
void updateLastHeard(const String& station);
|
||||
bool wasHeard(const String& station);
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ ___________________________________________________________________*/
|
|||
#include "A7670_utils.h"
|
||||
#endif
|
||||
|
||||
String versionDate = "2024.12.30";
|
||||
String versionDate = "2025.01.22";
|
||||
Configuration Config;
|
||||
WiFiClient espClient;
|
||||
#ifdef HAS_GPS
|
||||
|
|
@ -79,6 +79,7 @@ void setup() {
|
|||
LoRa_Utils::setup();
|
||||
Utils::validateFreqs();
|
||||
GPS_Utils::setup();
|
||||
STATION_Utils::loadBlackList();
|
||||
|
||||
#ifdef STARTUP_DELAY // (TEST) just to wait for WiFi init of Routers
|
||||
displayShow("", " STARTUP DELAY ...", "", "", 0);
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ namespace APRS_IS_Utils {
|
|||
int firstColonIndex = packet.indexOf(":");
|
||||
if (firstColonIndex > 5 && firstColonIndex < (packet.length() - 1) && packet[firstColonIndex + 1] != '}' && packet.indexOf("TCPIP") == -1) {
|
||||
const String& Sender = packet.substring(3, packet.indexOf(">"));
|
||||
if (Sender != Config.callsign && Utils::checkValidCallsign(Sender)) {
|
||||
if (Sender != Config.callsign && Utils::checkValidCallsign(Sender) && !STATION_Utils::checkBlackList(Sender)) {
|
||||
STATION_Utils::updateLastHeard(Sender);
|
||||
Utils::typeOfPacket(packet.substring(3), 0); // LoRa-APRS
|
||||
const String& AddresseeAndMessage = packet.substring(packet.indexOf("::") + 2);
|
||||
|
|
@ -324,7 +324,7 @@ namespace APRS_IS_Utils {
|
|||
}
|
||||
} else {
|
||||
Utils::print("Received Message from APRS-IS : " + packet);
|
||||
if (STATION_Utils::wasHeard(Addressee)) {
|
||||
if (STATION_Utils::wasHeard(Addressee) && packet.indexOf("EQNS.") == -1 && packet.indexOf("UNIT.") == -1 && packet.indexOf("PARM.") == -1) {
|
||||
STATION_Utils::addToOutputPacketBuffer(buildPacketToTx(packet, 1));
|
||||
displayToggle(true);
|
||||
lastScreenOn = millis();
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ namespace BATTERY_Utils {
|
|||
int sample;
|
||||
int sampleSum = 0;
|
||||
#ifdef ADC_CTRL
|
||||
#if defined(HELTEC_WIRELESS_TRACKER)
|
||||
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3_2)
|
||||
digitalWrite(ADC_CTRL, HIGH);
|
||||
#endif
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V2) || defined(HELTEC_WSL_V3) || defined(HELTEC_WP)
|
||||
|
|
@ -132,7 +132,7 @@ namespace BATTERY_Utils {
|
|||
}
|
||||
|
||||
#ifdef ADC_CTRL
|
||||
#if defined(HELTEC_WIRELESS_TRACKER)
|
||||
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3_2)
|
||||
digitalWrite(ADC_CTRL, LOW);
|
||||
#endif
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V2) || defined(HELTEC_WSL_V3) || defined(HELTEC_WP)
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ void Configuration::writeFile() {
|
|||
|
||||
data["personalNote"] = personalNote;
|
||||
|
||||
data["blackList"] = blackList;
|
||||
|
||||
data["webadmin"]["active"] = webadmin.active;
|
||||
data["webadmin"]["username"] = webadmin.username;
|
||||
data["webadmin"]["password"] = webadmin.password;
|
||||
|
|
@ -209,7 +211,7 @@ bool Configuration::readFile() {
|
|||
webadmin.username = data["webadmin"]["username"] | "admin";
|
||||
webadmin.password = data["webadmin"]["password"] | "";
|
||||
|
||||
ntp.gmtCorrection = data["ntp"]["gmtCorrection"] | 0;
|
||||
ntp.gmtCorrection = data["ntp"]["gmtCorrection"] | 0.0;
|
||||
|
||||
lowPowerMode = data["other"]["lowPowerMode"] | false;
|
||||
lowVoltageCutOff = data["other"]["lowVoltageCutOff"] | 0;
|
||||
|
|
@ -219,7 +221,9 @@ bool Configuration::readFile() {
|
|||
rebootMode = data["other"]["rebootMode"] | false;
|
||||
rebootModeTime = data["other"]["rebootModeTime"] | 6;
|
||||
|
||||
personalNote = data["personalNote"] | "personal note here...";
|
||||
personalNote = data["personalNote"] | "personal note here";
|
||||
|
||||
blackList = data["blackList"] | "station callsign";
|
||||
|
||||
if (wifiAPs.size() == 0) { // If we don't have any WiFi's from config we need to add "empty" SSID for AUTO AP
|
||||
WiFi_AP wifiap;
|
||||
|
|
@ -327,11 +331,13 @@ void Configuration::init() {
|
|||
|
||||
personalNote = "";
|
||||
|
||||
blackList = "";
|
||||
|
||||
webadmin.active = false;
|
||||
webadmin.username = "admin";
|
||||
webadmin.password = "";
|
||||
|
||||
ntp.gmtCorrection = 0;
|
||||
ntp.gmtCorrection = 0.0;
|
||||
|
||||
Serial.println("All is Written!");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ namespace DIGI_Utils {
|
|||
temp = packet.substring(3);
|
||||
Sender = packet.substring(3, packet.indexOf(">"));
|
||||
}
|
||||
if (Sender != Config.callsign) { // Avoid listening to own packets
|
||||
if (Sender != Config.callsign && !STATION_Utils::checkBlackList(Sender)) { // Avoid listening to own packets
|
||||
if (!thirdPartyPacket && !Utils::checkValidCallsign(Sender)) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
105
src/display.cpp
105
src/display.cpp
|
|
@ -9,12 +9,19 @@
|
|||
#include <TFT_eSPI.h>
|
||||
|
||||
TFT_eSPI tft = TFT_eSPI();
|
||||
TFT_eSprite sprite = TFT_eSprite(&tft);
|
||||
|
||||
#ifdef HELTEC_WIRELESS_TRACKER
|
||||
#define bigSizeFont 2
|
||||
#define smallSizeFont 1
|
||||
#define lineSpacing 10
|
||||
#endif
|
||||
#if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
|
||||
#define bigSizeFont 5
|
||||
#define smallSizeFont 2
|
||||
#define lineSpacing 25
|
||||
#endif
|
||||
uint16_t redColor = 0xc8a2;
|
||||
#else
|
||||
#ifdef HAS_EPAPER
|
||||
//
|
||||
|
|
@ -32,16 +39,8 @@
|
|||
|
||||
extern Configuration Config;
|
||||
|
||||
String oldHeader, oldFirstLine, oldSecondLine, oldThirdLine, oldFourthLine, oldFifthLine, oldSixthLine;
|
||||
bool displayFound = false;
|
||||
|
||||
|
||||
void cleanTFT() {
|
||||
#ifdef HAS_TFT
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
#endif
|
||||
}
|
||||
|
||||
void displaySetup() {
|
||||
#ifdef HAS_DISPLAY
|
||||
delay(500);
|
||||
|
|
@ -53,8 +52,15 @@ void displaySetup() {
|
|||
} else {
|
||||
tft.setRotation(1);
|
||||
}
|
||||
pinMode(TFT_BL, OUTPUT);
|
||||
digitalWrite(TFT_BL, HIGH);
|
||||
tft.setTextFont(0);
|
||||
tft.fillScreen(TFT_BLACK);
|
||||
#if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
|
||||
sprite.createSprite(320,240);
|
||||
#else
|
||||
sprite.createSprite(160,80);
|
||||
#endif
|
||||
#else
|
||||
#ifdef HAS_EPAPER
|
||||
//
|
||||
|
|
@ -109,49 +115,30 @@ void displayToggle(bool toggle) {
|
|||
#endif
|
||||
}
|
||||
|
||||
bool shouldCleanTFT(const String& header, const String& line1, const String& line2, const String& line3) {
|
||||
if (oldHeader != header || oldFirstLine != line1 || oldSecondLine != line2 || oldThirdLine != line3) {
|
||||
oldHeader = header;
|
||||
oldFirstLine = line1;
|
||||
oldSecondLine = line2;
|
||||
oldThirdLine = line3;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool shouldCleanTFT(const String& header, const String& line1, const String& line2, const String& line3, const String& line4, const String& line5, const String& line6) {
|
||||
if (oldHeader != header || oldFirstLine != line1 || oldSecondLine != line2 || oldThirdLine != line3 || oldFourthLine != line4 || oldFifthLine != line5 || oldSixthLine != line6) {
|
||||
oldHeader = header;
|
||||
oldFirstLine = line1;
|
||||
oldSecondLine = line2;
|
||||
oldThirdLine = line3;
|
||||
oldFourthLine = line4;
|
||||
oldFifthLine = line5;
|
||||
oldSixthLine = line6;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void displayShow(const String& header, const String& line1, const String& line2, const String& line3, int wait) {
|
||||
#ifdef HAS_DISPLAY
|
||||
const String* const lines[] = {&line1, &line2, &line3};
|
||||
#ifdef HAS_TFT
|
||||
if (shouldCleanTFT(header, line1, line2, line3)) {
|
||||
cleanTFT();
|
||||
}
|
||||
tft.setTextColor(TFT_WHITE,TFT_BLACK);
|
||||
tft.setTextSize(bigSizeFont);
|
||||
tft.setCursor(0, 0);
|
||||
tft.print(header);
|
||||
tft.setTextSize(smallSizeFont);
|
||||
sprite.fillSprite(TFT_BLACK);
|
||||
#if defined(HELTEC_WIRELESS_TRACKER)
|
||||
sprite.fillRect(0, 0, 160, 19, redColor);
|
||||
#endif
|
||||
#if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
|
||||
sprite.fillRect(0, 0, 320, 43, redColor);
|
||||
#endif
|
||||
sprite.setTextFont(0);
|
||||
sprite.setTextSize(bigSizeFont);
|
||||
sprite.setTextColor(TFT_WHITE, redColor);
|
||||
sprite.drawString(header, 3, 3);
|
||||
|
||||
sprite.setTextSize(smallSizeFont);
|
||||
sprite.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
tft.setCursor(0, ((lineSpacing * (2 + i)) - 2));
|
||||
tft.print(*lines[i]);
|
||||
sprite.drawString(*lines[i], 3, (lineSpacing * (2 + i)) - 2);
|
||||
}
|
||||
|
||||
sprite.pushSprite(0,0);
|
||||
#else
|
||||
#ifdef HAS_EPAPER
|
||||
// ... to be continued
|
||||
|
|
@ -180,18 +167,26 @@ void displayShow(const String& header, const String& line1, const String& line2,
|
|||
#ifdef HAS_DISPLAY
|
||||
const String* const lines[] = {&line1, &line2, &line3, &line4, &line5, &line6};
|
||||
#ifdef HAS_TFT
|
||||
if (shouldCleanTFT(header, line1, line2, line3, line4, line5, line6)) {
|
||||
cleanTFT();
|
||||
}
|
||||
tft.setTextColor(TFT_WHITE,TFT_BLACK);
|
||||
tft.setTextSize(bigSizeFont);
|
||||
tft.setCursor(0, 0);
|
||||
tft.print(header);
|
||||
tft.setTextSize(smallSizeFont);
|
||||
sprite.fillSprite(TFT_BLACK);
|
||||
#if defined(HELTEC_WIRELESS_TRACKER)
|
||||
sprite.fillRect(0, 0, 160, 19, redColor);
|
||||
#endif
|
||||
#if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
|
||||
sprite.fillRect(0, 0, 320, 43, redColor);
|
||||
#endif
|
||||
sprite.setTextFont(0);
|
||||
sprite.setTextSize(bigSizeFont);
|
||||
sprite.setTextColor(TFT_WHITE, redColor);
|
||||
sprite.drawString(header, 3, 3);
|
||||
|
||||
sprite.setTextSize(smallSizeFont);
|
||||
sprite.setTextColor(TFT_WHITE, TFT_BLACK);
|
||||
|
||||
for (int i = 0; i < 6; i++) {
|
||||
tft.setCursor(0, ((lineSpacing * (2 + i)) - 2));
|
||||
tft.print(*lines[i]);
|
||||
sprite.drawString(*lines[i], 3, (lineSpacing * (2 + i)) - 2);
|
||||
}
|
||||
|
||||
sprite.pushSprite(0,0);
|
||||
#else
|
||||
#ifdef HAS_EPAPER
|
||||
// ... to be continued
|
||||
|
|
|
|||
|
|
@ -181,10 +181,10 @@ namespace POWER_Utils {
|
|||
|
||||
#ifdef VEXT_CTRL
|
||||
pinMode(VEXT_CTRL,OUTPUT); // GPS + TFT on HELTEC Wireless_Tracker and only for Oled in HELTEC V3
|
||||
#ifndef HELTEC_WSL_V3
|
||||
#if defined(HELTEC_WIRELESS_TRACKER) || defined(HELTEC_V3)
|
||||
digitalWrite(VEXT_CTRL, HIGH);
|
||||
#endif
|
||||
#ifdef HELTEC_WP
|
||||
#if defined(HELTEC_WP) || defined(HELTEC_WS) || defined(HELTEC_V3_2)
|
||||
digitalWrite(VEXT_CTRL, LOW);
|
||||
#endif
|
||||
#endif
|
||||
|
|
@ -201,13 +201,29 @@ namespace POWER_Utils {
|
|||
Wire.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
|
||||
#endif
|
||||
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WP) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY)
|
||||
Wire1.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
|
||||
#endif
|
||||
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WS) || defined(LIGHTGATEWAY_1_0) || defined(TTGO_LORA32_T3S3_V1_2) || defined(HELTEC_V2)
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V3_2) || defined(HELTEC_WS) || defined(LIGHTGATEWAY_1_0) || defined(TTGO_LORA32_T3S3_V1_2) || defined(HELTEC_V2)
|
||||
Wire.begin(OLED_SDA, OLED_SCL);
|
||||
#endif
|
||||
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V3_2) || defined(HELTEC_WP) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY)
|
||||
Wire1.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
|
||||
#endif
|
||||
|
||||
#if defined(TTGO_T_DECK_GPS) || defined(TTGO_T_DECK_PLUS)
|
||||
pinMode(BOARD_POWERON, OUTPUT);
|
||||
digitalWrite(BOARD_POWERON, HIGH);
|
||||
|
||||
pinMode(BOARD_SDCARD_CS, OUTPUT);
|
||||
pinMode(RADIO_CS_PIN, OUTPUT);
|
||||
pinMode(TFT_CS, OUTPUT);
|
||||
|
||||
digitalWrite(BOARD_SDCARD_CS, HIGH);
|
||||
digitalWrite(RADIO_CS_PIN, HIGH);
|
||||
digitalWrite(TFT_CS, HIGH);
|
||||
|
||||
delay(500);
|
||||
Wire.begin(BOARD_I2C_SDA, BOARD_I2C_SCL);
|
||||
#endif
|
||||
|
||||
delay(1000);
|
||||
BATTERY_Utils::setup();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "configuration.h"
|
||||
#include "battery_utils.h"
|
||||
#include "station_utils.h"
|
||||
#include "query_utils.h"
|
||||
#include "lora_utils.h"
|
||||
|
|
@ -10,6 +11,8 @@ extern String versionDate;
|
|||
extern int rssi;
|
||||
extern float snr;
|
||||
extern int freqError;
|
||||
extern bool shouldSleepLowVoltage;
|
||||
extern bool saveNewDigiEcoModeConfig;
|
||||
|
||||
|
||||
namespace QUERY_Utils {
|
||||
|
|
@ -53,12 +56,16 @@ namespace QUERY_Utils {
|
|||
answer.concat("?WHERE on development 73!");
|
||||
} else if (queryQuestion.indexOf("?APRSEEM") == 0 && Config.digi.ecoMode == true) { // Exit Digipeater EcoMode
|
||||
answer = "DigiEcoMode:Stop";
|
||||
Config.digi.ecoMode = false;
|
||||
Config.display.alwaysOn = true;
|
||||
Config.display.timeout = 10;
|
||||
Config.digi.ecoMode = false;
|
||||
Config.display.alwaysOn = true;
|
||||
Config.display.timeout = 10;
|
||||
shouldSleepLowVoltage = true; // to make sure all packets in outputPacketBuffer are sended before restart.
|
||||
saveNewDigiEcoModeConfig = true;
|
||||
} else if (queryQuestion.indexOf("?APRSSEM") == 0 && Config.digi.ecoMode == false) { // Start Digipeater EcoMode
|
||||
answer = "DigiEcoMode:Start";
|
||||
Config.digi.ecoMode = true;
|
||||
Config.digi.ecoMode = true;
|
||||
shouldSleepLowVoltage = true; // to make sure all packets in outputPacketBuffer are sended before restart.
|
||||
saveNewDigiEcoModeConfig = true;
|
||||
} else if (queryQuestion.indexOf("?APRSEMS") == 0) { // Digipeater EcoMode Status
|
||||
answer = (Config.digi.ecoMode) ? "DigiEcoMode:ON" : "DigiEcoMode:OFF";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,10 +16,41 @@ uint32_t lastTxTime = millis();
|
|||
std::vector<LastHeardStation> lastHeardStations;
|
||||
std::vector<String> outputPacketBuffer;
|
||||
std::vector<Packet25SegBuffer> packet25SegBuffer;
|
||||
std::vector<String> blackList;
|
||||
|
||||
bool saveNewDigiEcoModeConfig = false;
|
||||
|
||||
|
||||
namespace STATION_Utils {
|
||||
|
||||
void loadBlackList() {
|
||||
if (Config.blackList != "") {
|
||||
String callsigns = Config.blackList;
|
||||
int spaceIndex = callsigns.indexOf(" ");
|
||||
|
||||
while (spaceIndex >= 0) {
|
||||
blackList.push_back(callsigns.substring(0, spaceIndex));
|
||||
callsigns = callsigns.substring(spaceIndex + 1);
|
||||
spaceIndex = callsigns.indexOf(" ");
|
||||
}
|
||||
callsigns.trim();
|
||||
if (callsigns.length() > 0) blackList.push_back(callsigns); // Add the last word if available
|
||||
}
|
||||
}
|
||||
|
||||
bool checkBlackList(const String& callsign) {
|
||||
for (int i = 0; i < blackList.size(); i++) {
|
||||
if (blackList[i].indexOf("*") >= 0) { // use wild card
|
||||
String wildCard = blackList[i].substring(0, blackList[i].indexOf("*"));
|
||||
if (callsign.startsWith(wildCard))return true;
|
||||
} else {
|
||||
if (blackList[i] == callsign) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void deleteNotHeard() {
|
||||
std::vector<LastHeardStation> lastHeardStation_temp;
|
||||
for (int i = 0; i < lastHeardStations.size(); i++) {
|
||||
|
|
@ -70,6 +101,7 @@ namespace STATION_Utils {
|
|||
Utils::println(" ---> Station not Heard for last 30 min (Not Tx)\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
void clean25SegBuffer() {
|
||||
if (!packet25SegBuffer.empty() && (millis() - packet25SegBuffer[0].receivedTime) > 25 * 1000) packet25SegBuffer.erase(packet25SegBuffer.begin());
|
||||
}
|
||||
|
|
@ -92,13 +124,8 @@ namespace STATION_Utils {
|
|||
int timeToWait = 3 * 1000; // 3 segs between packet Tx and also Rx ???
|
||||
uint32_t lastRx = millis() - lastRxTime;
|
||||
uint32_t lastTx = millis() - lastTxTime;
|
||||
bool saveNewDigiEcoModeConfig = false;
|
||||
if (outputPacketBuffer.size() > 0 && lastTx > timeToWait && lastRx > timeToWait) {
|
||||
LoRa_Utils::sendNewPacket(outputPacketBuffer[0]);
|
||||
if (outputPacketBuffer[0].indexOf("DigiEcoMode:Start") != -1 || outputPacketBuffer[0].indexOf("DigiEcoMode:Stop") != -1) {
|
||||
saveNewDigiEcoModeConfig = true;
|
||||
shouldSleepLowVoltage = true; // to make sure all packets in outputPacketBuffer are sended before restart.
|
||||
}
|
||||
outputPacketBuffer.erase(outputPacketBuffer.begin());
|
||||
lastTxTime = millis();
|
||||
}
|
||||
|
|
@ -110,7 +137,9 @@ namespace STATION_Utils {
|
|||
}
|
||||
}
|
||||
if (saveNewDigiEcoModeConfig) {
|
||||
setCpuFrequencyMhz(80);
|
||||
Config.writeFile();
|
||||
delay(1000);
|
||||
displayToggle(false);
|
||||
ESP.restart();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ namespace Utils {
|
|||
|
||||
void checkBeaconInterval() {
|
||||
uint32_t lastTx = millis() - lastBeaconTx;
|
||||
if (((Config.aprs_is.active && passcodeValid) || Config.digi.mode != 0) && (lastBeaconTx == 0 || lastTx >= Config.beacon.interval * 60 * 1000)) {
|
||||
if (lastBeaconTx == 0 || lastTx >= Config.beacon.interval * 60 * 1000) {
|
||||
beaconUpdate = true;
|
||||
}
|
||||
|
||||
|
|
@ -198,9 +198,7 @@ namespace Utils {
|
|||
#endif
|
||||
|
||||
if (beaconUpdate) {
|
||||
if (!Config.display.alwaysOn && Config.display.timeout != 0) {
|
||||
displayToggle(true);
|
||||
}
|
||||
if (!Config.display.alwaysOn && Config.display.timeout != 0) displayToggle(true);
|
||||
|
||||
if (sendStartTelemetry && Config.battery.sendVoltageAsTelemetry && !Config.wxsensor.active && (Config.battery.sendInternalVoltage || Config.battery.sendExternalVoltage)) {
|
||||
sendInitialTelemetryPackets();
|
||||
|
|
@ -289,7 +287,7 @@ namespace Utils {
|
|||
secondaryBeaconPacket += encodedTelemetry;
|
||||
}
|
||||
|
||||
if (Config.aprs_is.active && Config.beacon.sendViaAPRSIS && !backUpDigiMode) {
|
||||
if (Config.beacon.sendViaAPRSIS && Config.aprs_is.active && passcodeValid && !backUpDigiMode) {
|
||||
Utils::println("-- Sending Beacon to APRSIS --");
|
||||
displayShow(firstLine, secondLine, thirdLine, fourthLine, fifthLine, sixthLine, "SENDING IGATE BEACON", 0);
|
||||
seventhLine = " listening...";
|
||||
|
|
|
|||
|
|
@ -206,13 +206,15 @@ namespace WEB_Utils {
|
|||
|
||||
Config.personalNote = request->getParam("personalNote", true)->value();
|
||||
|
||||
Config.blackList = request->getParam("blackList", true)->value();
|
||||
|
||||
Config.webadmin.active = request->hasParam("webadmin.active", true);
|
||||
if (Config.webadmin.active) {
|
||||
Config.webadmin.username = request->getParam("webadmin.username", true)->value();
|
||||
Config.webadmin.password = request->getParam("webadmin.password", true)->value();
|
||||
}
|
||||
|
||||
Config.ntp.gmtCorrection = request->getParam("ntp.gmtCorrection", true)->value().toInt();
|
||||
Config.ntp.gmtCorrection = request->getParam("ntp.gmtCorrection", true)->value().toFloat();
|
||||
|
||||
Config.writeFile();
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ float newHum, newTemp, newPress, newGas;
|
|||
|
||||
|
||||
Adafruit_BME280 bme280;
|
||||
#ifdef HELTEC_V3
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V3_2)
|
||||
Adafruit_BMP280 bmp280(&Wire1);
|
||||
Adafruit_Si7021 sensor = Adafruit_Si7021();
|
||||
#else
|
||||
|
|
@ -32,7 +32,7 @@ namespace WX_Utils {
|
|||
void getWxModuleAddres() {
|
||||
uint8_t err, addr;
|
||||
for(addr = 1; addr < 0x7F; addr++) {
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY)
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V3_2) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY)
|
||||
Wire1.beginTransmission(addr);
|
||||
err = Wire1.endTransmission();
|
||||
#else
|
||||
|
|
@ -58,7 +58,7 @@ namespace WX_Utils {
|
|||
if (wxModuleAddress != 0x00) {
|
||||
bool wxModuleFound = false;
|
||||
if (wxModuleAddress == 0x76 || wxModuleAddress == 0x77) {
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY)
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_V3_2) || defined(HELTEC_WSL_V3) || defined(HELTEC_WSL_V3_DISPLAY)
|
||||
if (bme280.begin(wxModuleAddress, &Wire1)) {
|
||||
Serial.println("BME280 sensor found");
|
||||
wxModuleType = 1;
|
||||
|
|
@ -115,7 +115,7 @@ namespace WX_Utils {
|
|||
Serial.println("BMP280 Module init done!");
|
||||
break;
|
||||
case 3:
|
||||
#ifndef HELTEC_V3
|
||||
#if !defined(HELTEC_V3) && !defined(HELTEC_V3_2)
|
||||
bme680.setTemperatureOversampling(BME680_OS_1X);
|
||||
bme680.setHumidityOversampling(BME680_OS_1X);
|
||||
bme680.setPressureOversampling(BME680_OS_1X);
|
||||
|
|
@ -195,7 +195,7 @@ namespace WX_Utils {
|
|||
newHum = 0;
|
||||
break;
|
||||
case 3: // BME680
|
||||
#ifndef HELTEC_V3
|
||||
#if !defined(HELTEC_V3) && !defined(HELTEC_V3_2)
|
||||
bme680.performReading();
|
||||
delay(50);
|
||||
if (bme680.endReading()) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef BOARD_PINOUT_H_
|
||||
#define BOARD_PINOUT_H_
|
||||
|
||||
// LoRa Radio
|
||||
#define HAS_SX1278
|
||||
#define RADIO_SCLK_PIN 5
|
||||
#define RADIO_MISO_PIN 19
|
||||
#define RADIO_MOSI_PIN 27
|
||||
#define RADIO_CS_PIN 18
|
||||
#define RADIO_RST_PIN 23
|
||||
#define RADIO_BUSY_PIN 26
|
||||
|
||||
// Display
|
||||
#define HAS_DISPLAY
|
||||
|
||||
#undef OLED_SDA
|
||||
#undef OLED_SCL
|
||||
#undef OLED_RST
|
||||
|
||||
#define OLED_SDA 21
|
||||
#define OLED_SCL 22
|
||||
#define OLED_RST -1
|
||||
|
||||
// GPS
|
||||
#define HAS_GPS
|
||||
#define GPS_RX 12
|
||||
#define GPS_TX 34
|
||||
|
||||
// OTHER
|
||||
#define INTERNAL_LED_PIN 2
|
||||
#define BATTERY_PIN 35
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[env:TROY_LoRa_APRS]
|
||||
board = esp32dev
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
-D TROY_LoRa_APRS
|
||||
lib_deps =
|
||||
${common.lib_deps}
|
||||
${common.display_libs}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
#ifndef BOARD_PINOUT_H_
|
||||
#define BOARD_PINOUT_H_
|
||||
|
||||
// LoRa Radio
|
||||
#define HAS_SX1262
|
||||
#define RADIO_SCLK_PIN 9
|
||||
#define RADIO_MISO_PIN 11
|
||||
#define RADIO_MOSI_PIN 10
|
||||
#define RADIO_CS_PIN 8
|
||||
#define RADIO_RST_PIN 12
|
||||
#define RADIO_DIO1_PIN 14
|
||||
#define RADIO_BUSY_PIN 13
|
||||
|
||||
// Display
|
||||
#define HAS_DISPLAY
|
||||
|
||||
#undef OLED_SDA
|
||||
#undef OLED_SCL
|
||||
#undef OLED_RST
|
||||
|
||||
#define OLED_SDA 17
|
||||
#define OLED_SCL 18
|
||||
#define OLED_RST 21
|
||||
#define OLED_DISPLAY_HAS_RST_PIN
|
||||
|
||||
// Aditional Config
|
||||
#define INTERNAL_LED_PIN 35
|
||||
#define BATTERY_PIN 1
|
||||
#define VEXT_CTRL 36
|
||||
#define ADC_CTRL 37
|
||||
#define BOARD_I2C_SDA 41
|
||||
#define BOARD_I2C_SCL 42
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[env:heltec_wifi_lora_32_V3_2]
|
||||
board = heltec_wifi_lora_32_V3
|
||||
board_build.mcu = esp32s3
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
-D HELTEC_V3_2
|
||||
lib_deps =
|
||||
${common.lib_deps}
|
||||
${common.display_libs}
|
||||
|
|
@ -18,9 +18,9 @@
|
|||
#undef OLED_SCL
|
||||
#undef OLED_RST
|
||||
|
||||
#define OLED_SDA 4
|
||||
#define OLED_SCL 15
|
||||
#define OLED_RST 16
|
||||
#define OLED_SDA 17
|
||||
#define OLED_SCL 18
|
||||
#define OLED_RST 21
|
||||
#define OLED_DISPLAY_HAS_RST_PIN
|
||||
|
||||
// Aditional Config
|
||||
|
|
|
|||
|
|
@ -0,0 +1,36 @@
|
|||
#ifndef BOARD_PINOUT_H_
|
||||
#define BOARD_PINOUT_H_
|
||||
|
||||
// LoRa Radio
|
||||
#define HAS_SX1262
|
||||
#define RADIO_SCLK_PIN 40
|
||||
#define RADIO_MISO_PIN 38
|
||||
#define RADIO_MOSI_PIN 41
|
||||
#define RADIO_CS_PIN 9
|
||||
#define RADIO_RST_PIN 17
|
||||
#define RADIO_DIO1_PIN 45
|
||||
#define RADIO_BUSY_PIN 13
|
||||
|
||||
// Display
|
||||
#define HAS_DISPLAY
|
||||
#define HAS_TFT
|
||||
|
||||
#undef OLED_SDA
|
||||
#undef OLED_SCL
|
||||
#undef OLED_RST
|
||||
|
||||
// GPS
|
||||
#define GPS_RX 43
|
||||
#define GPS_TX 44
|
||||
|
||||
// Aditional Config
|
||||
#define BATTERY_PIN 4
|
||||
|
||||
#define BOARD_POWERON 10
|
||||
#define BOARD_SDCARD_CS 39
|
||||
#define BOARD_BL_PIN 42
|
||||
|
||||
#define BOARD_I2C_SDA 18
|
||||
#define BOARD_I2C_SCL 8
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
[env:ttgo_t_deck_GPS]
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
platform = espressif32 @ 6.3.1
|
||||
board_build.partitions = min_spiffs.csv
|
||||
board = esp32-s3-devkitc-1
|
||||
board_build.mcu = esp32s3
|
||||
board_build.embed_files =
|
||||
data_embed/index.html.gz
|
||||
data_embed/style.css.gz
|
||||
data_embed/script.js.gz
|
||||
data_embed/bootstrap.css.gz
|
||||
data_embed/bootstrap.js.gz
|
||||
data_embed/favicon.png.gz
|
||||
extra_scripts =
|
||||
pre:tools/compress.py
|
||||
debug_tool = esp-prog
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
${common.usb_flags}
|
||||
-D TTGO_T_DECK_PLUS
|
||||
-D BOARD_HAS_PSRAM
|
||||
-D USER_SETUP_LOADED
|
||||
-D ST7789_DRIVER
|
||||
-D TFT_WIDTH=240
|
||||
-D TFT_HEIGHT=320
|
||||
-D TFT_RGB_ORDER=TFT_BGR
|
||||
-D TFT_INVERSION_ON
|
||||
-D TFT_MISO=38
|
||||
-D TFT_MOSI=41
|
||||
-D TFT_SCLK=40
|
||||
-D TFT_CS=12
|
||||
-D TFT_DC=11
|
||||
-D TFT_RST=-1
|
||||
-D TFT_BUSY=-1
|
||||
-D TFT_BL=42
|
||||
-D TFT_BACKLIGHT_ON=1
|
||||
-D TOUCH_CS=-1
|
||||
-D LOAD_GLCD
|
||||
-D LOAD_FONT2
|
||||
-D LOAD_FONT4
|
||||
-D LOAD_FONT6
|
||||
-D LOAD_FONT7
|
||||
-D LOAD_FONT8
|
||||
-D SPI_FREQUENCY=40000000
|
||||
-D SPI_READ_FREQUENCY=16000000
|
||||
lib_deps =
|
||||
${common.lib_deps}
|
||||
bodmer/TFT_eSPI @ 2.5.43
|
||||
https://github.com/mmMicky/TouchLib.git
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#ifndef BOARD_PINOUT_H_
|
||||
#define BOARD_PINOUT_H_
|
||||
|
||||
// LoRa Radio
|
||||
#define HAS_SX1262
|
||||
#define RADIO_SCLK_PIN 40
|
||||
#define RADIO_MISO_PIN 38
|
||||
#define RADIO_MOSI_PIN 41
|
||||
#define RADIO_CS_PIN 9
|
||||
#define RADIO_RST_PIN 17
|
||||
#define RADIO_DIO1_PIN 45
|
||||
#define RADIO_BUSY_PIN 13
|
||||
|
||||
// Display
|
||||
#define HAS_DISPLAY
|
||||
#define HAS_TFT
|
||||
|
||||
#undef OLED_SDA
|
||||
#undef OLED_SCL
|
||||
#undef OLED_RST
|
||||
|
||||
// GPS
|
||||
#define GPS_RX 43
|
||||
#define GPS_TX 44
|
||||
#define GPS_BAUDRATE 38400
|
||||
|
||||
// Aditional Config
|
||||
#define BATTERY_PIN 4
|
||||
|
||||
#define BOARD_POWERON 10
|
||||
#define BOARD_SDCARD_CS 39
|
||||
#define BOARD_BL_PIN 42
|
||||
|
||||
#define BOARD_I2C_SDA 18
|
||||
#define BOARD_I2C_SCL 8
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,50 @@
|
|||
[env:ttgo_t_deck_plus]
|
||||
framework = arduino
|
||||
monitor_speed = 115200
|
||||
platform = espressif32 @ 6.3.1
|
||||
board_build.partitions = min_spiffs.csv
|
||||
board = esp32-s3-devkitc-1
|
||||
board_build.mcu = esp32s3
|
||||
board_build.embed_files =
|
||||
data_embed/index.html.gz
|
||||
data_embed/style.css.gz
|
||||
data_embed/script.js.gz
|
||||
data_embed/bootstrap.css.gz
|
||||
data_embed/bootstrap.js.gz
|
||||
data_embed/favicon.png.gz
|
||||
extra_scripts =
|
||||
pre:tools/compress.py
|
||||
debug_tool = esp-prog
|
||||
build_flags =
|
||||
${common.build_flags}
|
||||
${common.usb_flags}
|
||||
-D TTGO_T_DECK_PLUS
|
||||
-D BOARD_HAS_PSRAM
|
||||
-D USER_SETUP_LOADED
|
||||
-D ST7789_DRIVER
|
||||
-D TFT_WIDTH=240
|
||||
-D TFT_HEIGHT=320
|
||||
-D TFT_RGB_ORDER=TFT_BGR
|
||||
-D TFT_INVERSION_ON
|
||||
-D TFT_MISO=38
|
||||
-D TFT_MOSI=41
|
||||
-D TFT_SCLK=40
|
||||
-D TFT_CS=12
|
||||
-D TFT_DC=11
|
||||
-D TFT_RST=-1
|
||||
-D TFT_BUSY=-1
|
||||
-D TFT_BL=42
|
||||
-D TFT_BACKLIGHT_ON=1
|
||||
-D TOUCH_CS=-1
|
||||
-D LOAD_GLCD
|
||||
-D LOAD_FONT2
|
||||
-D LOAD_FONT4
|
||||
-D LOAD_FONT6
|
||||
-D LOAD_FONT7
|
||||
-D LOAD_FONT8
|
||||
-D SPI_FREQUENCY=40000000
|
||||
-D SPI_READ_FREQUENCY=16000000
|
||||
lib_deps =
|
||||
${common.lib_deps}
|
||||
bodmer/TFT_eSPI @ 2.5.43
|
||||
https://github.com/mmMicky/TouchLib.git
|
||||
Loading…
Reference in New Issue