mirror of
https://github.com/lora-aprs/LoRa_APRS_iGate.git
synced 2025-12-06 07:42:00 +01:00
changes
ini: - update ftp lib to 0.9.5 - remove all board configs config: - add ntp server seetting - add board config code: - add board finder - NO_GLOBAL_INSTANCES - ntp server config - modem config update (not found bugs fixed) libs: - update common lib - update ntp lib
This commit is contained in:
parent
42d735fade
commit
7a0f3661dc
|
|
@ -53,5 +53,6 @@
|
|||
"user": [
|
||||
{ "name":"ftp", "password":"ftp" }
|
||||
]
|
||||
}
|
||||
},
|
||||
"ntp_server": "pool.ntp.org"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 3a244e533140c3447a081e032614b6684d433499
|
||||
Subproject commit b93d7b8a5bcab57d4bf453ba6ce1352b61e5cd37
|
||||
|
|
@ -12,7 +12,7 @@ lib_deps =
|
|||
sandeepmistry/LoRa @ 0.7.2
|
||||
peterus/APRS-Decoder-Lib @ 0.0.5
|
||||
peterus/APRS-IS-Lib @ 0.0.7
|
||||
peterus/ESP-FTP-Server-Lib @ 0.9.4
|
||||
peterus/ESP-FTP-Server-Lib @ 0.9.5
|
||||
check_tool = cppcheck
|
||||
check_flags =
|
||||
cppcheck: --suppress=*:*.pio\* --inline-suppr lib/common/src
|
||||
|
|
@ -21,38 +21,7 @@ monitor_flags = --raw
|
|||
#upload_protocol = espota
|
||||
#upload_port = <CALLSIGN>.local
|
||||
|
||||
[env:heltec_wifi_lora_32_v1]
|
||||
board = ttgo-lora32-v1
|
||||
build_flags = -Werror -Wall -DHELTEC_WIFI_LORA_32_V1
|
||||
|
||||
[env:heltec_wifi_lora_32_v2]
|
||||
board = ttgo-lora32-v1
|
||||
build_flags = -Werror -Wall -DHELTEC_WIFI_LORA_32_V2
|
||||
|
||||
[env:ttgo-lora32-v1]
|
||||
board = ttgo-lora32-v1
|
||||
build_flags = -Werror -Wall -DTTGO_LORA32_V1
|
||||
|
||||
[env:ttgo-lora32-v2]
|
||||
board = ttgo-lora32-v1
|
||||
build_flags = -Werror -Wall -DTTGO_LORA32_V2
|
||||
|
||||
[env:ttgo-t-beam-v1]
|
||||
board = ttgo-t-beam
|
||||
build_flags = -Werror -Wall -DTTGO_T_Beam_V1_0
|
||||
|
||||
[env:ttgo-t-beam-v0_7]
|
||||
board = ttgo-t-beam
|
||||
build_flags = -Werror -Wall -DTTGO_T_Beam_V0_7
|
||||
|
||||
[env:TrackerD-OE1ACM]
|
||||
[env:lora_board]
|
||||
board = esp32doit-devkit-v1
|
||||
build_flags = -Werror -Wall -DTRACKERD
|
||||
|
||||
[env:ttgo-poe-v1_0]
|
||||
board = esp32doit-devkit-v1
|
||||
build_flags = -Werror -Wall -DETH_BOARD -DETH_BOARD_V1_0
|
||||
|
||||
[env:ttgo-poe-v1_2]
|
||||
board = esp32doit-devkit-v1
|
||||
build_flags = -Werror -Wall -DETH_BOARD -DETH_BOARD_V1_2
|
||||
build_flags = -Werror -Wall -DNO_GLOBAL_INSTANCES
|
||||
|
|
|
|||
|
|
@ -12,17 +12,19 @@
|
|||
#include <FTPFilesystem.h>
|
||||
|
||||
#include "logger.h"
|
||||
|
||||
#include "BoardFinder.h"
|
||||
#include "LoRa_APRS.h"
|
||||
|
||||
#include "pins.h"
|
||||
#include "display.h"
|
||||
#include "project_configuration.h"
|
||||
|
||||
#if defined(ARDUINO_T_Beam) && !defined(ARDUINO_T_Beam_V0_7)
|
||||
#ifdef NO_GLOBAL_INSTANCES
|
||||
HardwareSerial Serial(0);
|
||||
ArduinoOTAClass ArduinoOTA;
|
||||
#endif
|
||||
|
||||
#include "power_management.h"
|
||||
PowerManagement powerManagement;
|
||||
#endif
|
||||
|
||||
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
|
||||
hw_timer_t * timer = NULL;
|
||||
|
|
@ -33,11 +35,12 @@ volatile uint secondsSinceDisplay = 0;
|
|||
|
||||
WiFiMulti WiFiMulti;
|
||||
WiFiUDP ntpUDP;
|
||||
NTPClient timeClient(ntpUDP, 60*60);
|
||||
NTPClient * timeClient;
|
||||
FTPServer ftpServer;
|
||||
Configuration * Config;
|
||||
std::shared_ptr<BoardConfig> boardConfig;
|
||||
APRS_IS * aprs_is = 0;
|
||||
LoRa_APRS lora_aprs;
|
||||
LoRa_APRS * lora_aprs;
|
||||
std::shared_ptr<APRSMessage> BeaconMsg;
|
||||
|
||||
volatile bool eth_connected = false;
|
||||
|
|
@ -45,11 +48,8 @@ volatile bool eth_connected = false;
|
|||
String create_lat_aprs(double lat);
|
||||
String create_long_aprs(double lng);
|
||||
|
||||
#ifdef ETH_BOARD
|
||||
void setup_eth();
|
||||
#else
|
||||
void setup_wifi();
|
||||
#endif
|
||||
|
||||
void load_config();
|
||||
void setup_wifi();
|
||||
|
|
@ -66,52 +66,83 @@ std::map<uint, std::shared_ptr<APRSMessage>> lastMessages;
|
|||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
|
||||
#if defined(ARDUINO_T_Beam) && !defined(ARDUINO_T_Beam_V0_7)
|
||||
Wire.begin(SDA, SCL);
|
||||
if (!powerManagement.begin(Wire))
|
||||
{
|
||||
logPrintlnI("AXP192 init done!");
|
||||
}
|
||||
else
|
||||
{
|
||||
logPrintlnE("AXP192 init failed!");
|
||||
}
|
||||
powerManagement.activateLoRa();
|
||||
powerManagement.activateOLED();
|
||||
powerManagement.deactivateGPS();
|
||||
#endif
|
||||
|
||||
Logger::instance().setSerial(&Serial);
|
||||
delay(500);
|
||||
logPrintlnA("LoRa APRS iGate & Digi by OE5BPA (Peter Buchegger)");
|
||||
logPrintlnA("Version: 20.49.0-dev");
|
||||
setup_display();
|
||||
|
||||
ProjectConfigurationManagement confmg;
|
||||
Config = confmg.readConfiguration();
|
||||
|
||||
BoardFinder finder;
|
||||
boardConfig = finder.getBoardConfig(Config->board);
|
||||
if(boardConfig == 0)
|
||||
{
|
||||
boardConfig = finder.searchBoardConfig();
|
||||
if(boardConfig == 0)
|
||||
{
|
||||
logPrintlnE("Board config not set and search failed!");
|
||||
while (true)
|
||||
{
|
||||
}
|
||||
}
|
||||
Config->board = boardConfig->Name;
|
||||
confmg.writeConfiguration(Config);
|
||||
logPrintlnI("will restart board now!");
|
||||
ESP.restart();
|
||||
}
|
||||
logPrintI("Board ");
|
||||
logPrintI(boardConfig->Name);
|
||||
logPrintlnI(" loaded.");
|
||||
|
||||
if(boardConfig->Type == eTTGO_T_Beam_V1_0)
|
||||
{
|
||||
TwoWire wire(0);
|
||||
wire.begin(boardConfig->OledSda, boardConfig->OledScl);
|
||||
if (!powerManagement.begin(wire))
|
||||
{
|
||||
logPrintlnI("AXP192 init done!");
|
||||
}
|
||||
else
|
||||
{
|
||||
logPrintlnE("AXP192 init failed!");
|
||||
}
|
||||
powerManagement.activateLoRa();
|
||||
powerManagement.activateOLED();
|
||||
powerManagement.deactivateGPS();
|
||||
}
|
||||
|
||||
logPrintlnW("LoRa APRS iGate & Digi by OE5BPA (Peter Buchegger)");
|
||||
logPrintlnW("Version: 20.49.0-dev");
|
||||
setup_display(boardConfig);
|
||||
show_display("OE5BPA", "LoRa APRS iGate & Digi", "by Peter Buchegger", "20.49.0-dev", 3000);
|
||||
|
||||
load_config();
|
||||
setup_lora();
|
||||
#ifdef ETH_BOARD
|
||||
setup_eth();
|
||||
setup_ota();
|
||||
setup_ntp();
|
||||
setup_ftp();
|
||||
setup_aprs_is();
|
||||
#else
|
||||
if(Config->wifi.active)
|
||||
timeClient = new NTPClient(ntpUDP, Config->ntpServer.c_str());
|
||||
if(boardConfig->Type == eETH_BOARD)
|
||||
{
|
||||
setup_wifi();
|
||||
setup_eth();
|
||||
setup_ota();
|
||||
setup_ntp();
|
||||
setup_ftp();
|
||||
setup_aprs_is();
|
||||
}
|
||||
else
|
||||
{
|
||||
// make sure wifi and bt is off if we don't need it:
|
||||
WiFi.mode(WIFI_OFF);
|
||||
btStop();
|
||||
if(Config->wifi.active)
|
||||
{
|
||||
setup_wifi();
|
||||
setup_ota();
|
||||
setup_ntp();
|
||||
setup_ftp();
|
||||
}
|
||||
else
|
||||
{
|
||||
// make sure wifi and bt is off if we don't need it:
|
||||
WiFi.mode(WIFI_OFF);
|
||||
btStop();
|
||||
}
|
||||
if(Config->aprs_is.active) setup_aprs_is();
|
||||
}
|
||||
if(Config->aprs_is.active) setup_aprs_is();
|
||||
#endif
|
||||
setup_timer();
|
||||
|
||||
if(Config->display.overwritePin != 0)
|
||||
|
|
@ -133,7 +164,7 @@ void loop()
|
|||
{
|
||||
secondsSinceDisplay = 0;
|
||||
display_is_on = true;
|
||||
setup_display();
|
||||
setup_display(boardConfig);
|
||||
} else
|
||||
if(!Config->display.alwaysOn && secondsSinceDisplay > Config->display.timeout && display_is_on)
|
||||
{
|
||||
|
|
@ -178,7 +209,7 @@ void loop()
|
|||
if(Config->wifi.active || eth_connected) ArduinoOTA.handle();
|
||||
if(Config->wifi.active && WiFiMulti.run() != WL_CONNECTED)
|
||||
{
|
||||
setup_display(); secondsSinceDisplay = 0; display_is_on = true;
|
||||
setup_display(boardConfig); secondsSinceDisplay = 0; display_is_on = true;
|
||||
logPrintlnE("WiFi not connected!");
|
||||
show_display("ERROR", "WiFi not connected!");
|
||||
delay(1000);
|
||||
|
|
@ -186,7 +217,7 @@ void loop()
|
|||
}
|
||||
if((eth_connected && !aprs_is->connected()) || (Config->aprs_is.active && !aprs_is->connected()))
|
||||
{
|
||||
setup_display(); secondsSinceDisplay = 0; display_is_on = true;
|
||||
setup_display(boardConfig); secondsSinceDisplay = 0; display_is_on = true;
|
||||
logPrintI("connecting to APRS-IS server: ");
|
||||
logPrintI(Config->aprs_is.server);
|
||||
logPrintI(" on port: ");
|
||||
|
|
@ -205,22 +236,22 @@ void loop()
|
|||
if(Config->aprs_is.active && aprs_is->available() > 0)
|
||||
{
|
||||
String str = aprs_is->getMessage();
|
||||
logPrintD("[" + timeClient.getFormattedTime() + "] ");
|
||||
logPrintD("[" + timeClient->getFormattedTime() + "] ");
|
||||
logPrintlnD(str);
|
||||
}
|
||||
if(lora_aprs.hasMessage())
|
||||
if(lora_aprs->hasMessage())
|
||||
{
|
||||
std::shared_ptr<APRSMessage> msg = lora_aprs.getMessage();
|
||||
std::shared_ptr<APRSMessage> msg = lora_aprs->getMessage();
|
||||
|
||||
setup_display(); secondsSinceDisplay = 0; display_is_on = true;
|
||||
show_display(Config->callsign, timeClient.getFormattedTime() + " LoRa", "RSSI: " + String(lora_aprs.packetRssi()) + ", SNR: " + String(lora_aprs.packetSnr()), msg->toString());
|
||||
logPrintD("[" + timeClient.getFormattedTime() + "] ");
|
||||
setup_display(boardConfig); secondsSinceDisplay = 0; display_is_on = true;
|
||||
show_display(Config->callsign, timeClient->getFormattedTime() + " LoRa", "RSSI: " + String(lora_aprs->packetRssi()) + ", SNR: " + String(lora_aprs->packetSnr()), msg->toString());
|
||||
logPrintD("[" + timeClient->getFormattedTime() + "] ");
|
||||
logPrintD(" Received packet '");
|
||||
logPrintD(msg->toString());
|
||||
logPrintD("' with RSSI ");
|
||||
logPrintD(String(lora_aprs.packetRssi()));
|
||||
logPrintD(String(lora_aprs->packetRssi()));
|
||||
logPrintD(" and SNR ");
|
||||
logPrintlnD(String(lora_aprs.packetSnr()));
|
||||
logPrintlnD(String(lora_aprs->packetSnr()));
|
||||
|
||||
if(Config->aprs_is.active)
|
||||
{
|
||||
|
|
@ -233,9 +264,9 @@ void loop()
|
|||
logPrintD("Message already received as repeater: '");
|
||||
logPrintD(msg->toString());
|
||||
logPrintD("' with RSSI ");
|
||||
logPrintD(String(lora_aprs.packetRssi()));
|
||||
logPrintD(String(lora_aprs->packetRssi()));
|
||||
logPrintD(" and SNR ");
|
||||
logPrintlnD(String(lora_aprs.packetSnr()));
|
||||
logPrintlnD(String(lora_aprs->packetSnr()));
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -253,16 +284,16 @@ void loop()
|
|||
|
||||
if(foundMsg == lastMessages.end())
|
||||
{
|
||||
setup_display(); secondsSinceDisplay = 0; display_is_on = true;
|
||||
show_display(Config->callsign, "RSSI: " + String(lora_aprs.packetRssi()) + ", SNR: " + String(lora_aprs.packetSnr()), msg->toString(), 0);
|
||||
setup_display(boardConfig); secondsSinceDisplay = 0; display_is_on = true;
|
||||
show_display(Config->callsign, "RSSI: " + String(lora_aprs->packetRssi()) + ", SNR: " + String(lora_aprs->packetSnr()), msg->toString(), 0);
|
||||
logPrintD("Received packet '");
|
||||
logPrintD(msg->toString());
|
||||
logPrintD("' with RSSI ");
|
||||
logPrintD(String(lora_aprs.packetRssi()));
|
||||
logPrintD(String(lora_aprs->packetRssi()));
|
||||
logPrintD(" and SNR ");
|
||||
logPrintlnD(String(lora_aprs.packetSnr()));
|
||||
logPrintlnD(String(lora_aprs->packetSnr()));
|
||||
msg->setPath(String(Config->callsign) + "*");
|
||||
lora_aprs.sendMessage(msg);
|
||||
lora_aprs->sendMessage(msg);
|
||||
lastMessages.insert({secondsSinceStartup, msg});
|
||||
}
|
||||
else
|
||||
|
|
@ -270,9 +301,9 @@ void loop()
|
|||
logPrintD("Message already received (timeout): '");
|
||||
logPrintD(msg->toString());
|
||||
logPrintD("' with RSSI ");
|
||||
logPrintD(String(lora_aprs.packetRssi()));
|
||||
logPrintD(String(lora_aprs->packetRssi()));
|
||||
logPrintD(" and SNR ");
|
||||
logPrintlnD(String(lora_aprs.packetSnr()));
|
||||
logPrintlnD(String(lora_aprs->packetSnr()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -294,20 +325,20 @@ void loop()
|
|||
if(beacon_digi)
|
||||
{
|
||||
beacon_digi = false;
|
||||
setup_display(); secondsSinceDisplay = 0; display_is_on = true;
|
||||
setup_display(boardConfig); secondsSinceDisplay = 0; display_is_on = true;
|
||||
show_display(Config->callsign, "Beacon to HF...");
|
||||
logPrintD("[" + timeClient.getFormattedTime() + "] ");
|
||||
logPrintD("[" + timeClient->getFormattedTime() + "] ");
|
||||
logPrintlnD(BeaconMsg->encode());
|
||||
lora_aprs.sendMessage(BeaconMsg);
|
||||
lora_aprs->sendMessage(BeaconMsg);
|
||||
logPrintlnD("finished TXing...");
|
||||
show_display(Config->callsign, "Standby...");
|
||||
}
|
||||
if(beacon_aprs_is)
|
||||
{
|
||||
beacon_aprs_is = false;
|
||||
setup_display(); secondsSinceDisplay = 0; display_is_on = true;
|
||||
setup_display(boardConfig); secondsSinceDisplay = 0; display_is_on = true;
|
||||
show_display(Config->callsign, "Beacon to APRS-IS Server...");
|
||||
logPrintD("[" + timeClient.getFormattedTime() + "] ");
|
||||
logPrintD("[" + timeClient->getFormattedTime() + "] ");
|
||||
logPrintlnD(BeaconMsg->encode());
|
||||
aprs_is->sendMessage(BeaconMsg);
|
||||
show_display(Config->callsign, "Standby...");
|
||||
|
|
@ -326,15 +357,13 @@ void load_config()
|
|||
{}
|
||||
}
|
||||
|
||||
#ifndef ETH_BOARD
|
||||
if(Config->aprs_is.active && !Config->wifi.active)
|
||||
if(boardConfig->Type != eETH_BOARD && Config->aprs_is.active && !Config->wifi.active)
|
||||
{
|
||||
logPrintlnE("You have to activate Wifi for APRS IS to work, please check your settings!");
|
||||
show_display("ERROR", "You have to activate Wifi for APRS IS to work, please check your settings!");
|
||||
while (true)
|
||||
{}
|
||||
}
|
||||
#endif
|
||||
|
||||
if(KEY_BUILTIN != 0 && Config->display.overwritePin == 0)
|
||||
{
|
||||
|
|
@ -343,7 +372,6 @@ void load_config()
|
|||
logPrintlnI("Configuration loaded!");
|
||||
}
|
||||
|
||||
#ifdef ETH_BOARD
|
||||
void WiFiEvent(WiFiEvent_t event)
|
||||
{
|
||||
switch (event) {
|
||||
|
|
@ -384,14 +412,23 @@ void setup_eth()
|
|||
{
|
||||
WiFi.onEvent(WiFiEvent);
|
||||
|
||||
pinMode(NRST, OUTPUT);
|
||||
digitalWrite(NRST, 0);
|
||||
#define ETH_POWER_PIN -1
|
||||
#define ETH_TYPE ETH_PHY_LAN8720
|
||||
#define ETH_ADDR 0
|
||||
#define ETH_MDC_PIN 23
|
||||
#define ETH_MDIO_PIN 18
|
||||
#define ETH_NRST 5
|
||||
#define ETH_CLK ETH_CLOCK_GPIO17_OUT // TTGO PoE V1.0
|
||||
//#define ETH_CLK ETH_CLOCK_GPIO0_OUT // TTGO PoE V1.2
|
||||
|
||||
pinMode(ETH_NRST, OUTPUT);
|
||||
digitalWrite(ETH_NRST, 0);
|
||||
delay(200);
|
||||
digitalWrite(NRST, 1);
|
||||
digitalWrite(ETH_NRST, 1);
|
||||
delay(200);
|
||||
digitalWrite(NRST, 0);
|
||||
digitalWrite(ETH_NRST, 0);
|
||||
delay(200);
|
||||
digitalWrite(NRST, 1);
|
||||
digitalWrite(ETH_NRST, 1);
|
||||
|
||||
ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK);
|
||||
while(!eth_connected)
|
||||
|
|
@ -399,7 +436,7 @@ void setup_eth()
|
|||
sleep(1);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
void setup_wifi()
|
||||
{
|
||||
WiFi.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
|
||||
|
|
@ -422,7 +459,6 @@ void setup_wifi()
|
|||
logPrintlnD(WiFi.localIP().toString());
|
||||
show_display("INFO", "WiFi connected", "IP: ", WiFi.localIP().toString(), 2000);
|
||||
}
|
||||
#endif
|
||||
|
||||
void setup_ota()
|
||||
{
|
||||
|
|
@ -466,18 +502,20 @@ void setup_ota()
|
|||
|
||||
void setup_lora()
|
||||
{
|
||||
lora_aprs.setRxFrequency(Config->lora.frequencyRx);
|
||||
lora_aprs.setTxFrequency(Config->lora.frequencyTx);
|
||||
if (!lora_aprs.begin(lora_aprs.getRxFrequency()))
|
||||
lora_aprs = new LoRa_APRS(boardConfig);
|
||||
if (!lora_aprs->begin(lora_aprs->getRxFrequency()))
|
||||
{
|
||||
logPrintlnE("Starting LoRa failed!");
|
||||
show_display("ERROR", "Starting LoRa failed!");
|
||||
while (1);
|
||||
}
|
||||
lora_aprs.setTxPower(Config->lora.power);
|
||||
lora_aprs.setSpreadingFactor(Config->lora.spreadingFactor);
|
||||
lora_aprs.setSignalBandwidth(Config->lora.signalBandwidth);
|
||||
lora_aprs.setCodingRate4(Config->lora.codingRate4);
|
||||
lora_aprs->setRxFrequency(Config->lora.frequencyRx);
|
||||
lora_aprs->setTxFrequency(Config->lora.frequencyTx);
|
||||
lora_aprs->setTxPower(Config->lora.power);
|
||||
lora_aprs->setSpreadingFactor(Config->lora.spreadingFactor);
|
||||
lora_aprs->setSignalBandwidth(Config->lora.signalBandwidth);
|
||||
lora_aprs->setCodingRate4(Config->lora.codingRate4);
|
||||
lora_aprs->enableCrc();
|
||||
logPrintlnI("LoRa init done!");
|
||||
show_display("INFO", "LoRa init done!", 2000);
|
||||
|
||||
|
|
@ -491,8 +529,8 @@ void setup_lora()
|
|||
|
||||
void setup_ntp()
|
||||
{
|
||||
timeClient.begin();
|
||||
while(!timeClient.forceUpdate())
|
||||
timeClient->begin();
|
||||
while(!timeClient->forceUpdate())
|
||||
{
|
||||
logPrintlnW("NTP Client force update issue! Waiting 1 sek...");
|
||||
show_display("WARN", "NTP Client force update issue! Waiting 1 sek...", 1000);
|
||||
|
|
|
|||
|
|
@ -61,6 +61,11 @@ Configuration * ProjectConfigurationManagement::readProjectConfiguration(Dynamic
|
|||
us.password = "ftp";
|
||||
conf->ftp.users.push_back(us);
|
||||
}
|
||||
if(data.containsKey("ntp_server"))
|
||||
conf->ntpServer = data["ntp_server"].as<String>();
|
||||
|
||||
if(data.containsKey("board"))
|
||||
conf->board = data["board"].as<String>();
|
||||
|
||||
return conf;
|
||||
}
|
||||
|
|
@ -106,4 +111,7 @@ void ProjectConfigurationManagement::writeProjectConfiguration(Configuration * c
|
|||
v["name"] = u.name;
|
||||
v["password"] = u.password;
|
||||
}
|
||||
data["ntp_server"] = conf->ntpServer;
|
||||
|
||||
data["board"] = conf->board;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public:
|
|||
std::list<User> users;
|
||||
};
|
||||
|
||||
Configuration() : callsign("NOCALL-10") {};
|
||||
Configuration() : callsign("NOCALL-10"), board(""), ntpServer("pool.ntp.org") {};
|
||||
|
||||
String callsign;
|
||||
Wifi wifi;
|
||||
|
|
@ -105,6 +105,8 @@ public:
|
|||
LoRa lora;
|
||||
Display display;
|
||||
Ftp ftp;
|
||||
String board;
|
||||
String ntpServer;
|
||||
};
|
||||
|
||||
class ProjectConfigurationManagement : public ConfigurationManagement
|
||||
|
|
|
|||
Loading…
Reference in a new issue