LoRa_APRS_iGate/src/LoRa_APRS_iGate.cpp

152 wiersze
4.8 KiB
C++
Czysty Zwykły widok Historia

#include <map>
2021-01-01 22:23:27 +00:00
#include <logger.h>
2020-03-18 18:49:59 +00:00
#include <APRS-IS.h>
2021-01-01 22:23:27 +00:00
#include <TimeLib.h>
#include <TaskManager.h>
#include "BoardFinder.h"
2021-01-19 22:12:55 +00:00
//#include "display.h"
2021-01-01 22:23:27 +00:00
#include "power_management.h"
#include "project_configuration.h"
2020-03-18 18:49:59 +00:00
#include "TaskAprsIs.h"
2021-01-19 22:12:55 +00:00
#include "TaskDisplay.h"
#include "TaskEth.h"
#include "TaskFTP.h"
#include "TaskLora.h"
#include "TaskNTP.h"
#include "TaskOTA.h"
#include "TaskWifi.h"
String create_lat_aprs(double lat);
String create_long_aprs(double lng);
2020-03-19 12:29:21 +00:00
std::shared_ptr<Configuration> userConfig;
std::shared_ptr<BoardConfig> boardConfig;
HardwareSerial Serial(0);
2020-05-08 21:09:44 +00:00
2020-05-29 19:13:11 +00:00
// cppcheck-suppress unusedFunction
2020-03-18 18:49:59 +00:00
void setup()
{
Serial.begin(115200);
Logger::instance().setSerial(&Serial);
delay(500);
2020-06-01 09:23:48 +00:00
ProjectConfigurationManagement confmg;
2021-01-01 22:23:27 +00:00
userConfig = confmg.readConfiguration();
std::list<std::shared_ptr<BoardConfig>> boardConfigs;
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("TTGO_LORA32_V1", eTTGO_LORA32_V1, 4, 15, 0x3C, 0, 5, 19, 27, 18, 14, 26)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("TTGO_LORA32_V2", eTTGO_LORA32_V2, 21, 22, 0x3C, 0, 5, 19, 27, 18, 14, 26, true)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("TTGO_T_Beam_V0_7", eTTGO_T_Beam_V0_7, 21, 22, 0x3C, 0, 5, 19, 27, 18, 14, 26, true)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("TTGO_T_Beam_V1_0", eTTGO_T_Beam_V1_0, 21, 22, 0x3C, 0, 5, 19, 27, 18, 14, 26, true, true)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("ETH_BOARD", eETH_BOARD, 33, 32, 0x3C, 0, 14, 2, 15, 12, 4, 36)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("TRACKERD", eTRACKERD, 5, 4, 0x3C, 0, 18, 19, 23, 16, 14, 26)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("HELTEC_WIFI_LORA_32_V1", eHELTEC_WIFI_LORA_32_V1, 4, 15, 0x3C, 16, 5, 19, 27, 18, 14, 26)));
boardConfigs.push_back(std::shared_ptr<BoardConfig>(new BoardConfig("HELTEC_WIFI_LORA_32_V2", eHELTEC_WIFI_LORA_32_V2, 4, 15, 0x3C, 16, 5, 19, 27, 18, 14, 26)));
BoardFinder finder(boardConfigs);
boardConfig = finder.getBoardConfig(userConfig->board);
if(boardConfig == 0)
2020-06-01 09:23:48 +00:00
{
boardConfig = finder.searchBoardConfig();
if(boardConfig == 0)
{
logPrintlnE("Board config not set and search failed!");
2021-01-01 22:23:27 +00:00
while(true)
{}
}
2021-01-01 22:23:27 +00:00
userConfig->board = boardConfig->Name;
confmg.writeConfiguration(userConfig);
logPrintlnI("will restart board now!");
ESP.restart();
2020-11-07 23:07:43 +00:00
}
logPrintI("Board ");
logPrintI(boardConfig->Name);
logPrintlnI(" loaded.");
if(boardConfig->Type == eTTGO_T_Beam_V1_0)
2020-11-07 23:07:43 +00:00
{
TwoWire wire(0);
wire.begin(boardConfig->OledSda, boardConfig->OledScl);
2021-01-01 22:23:27 +00:00
std::shared_ptr<PowerManagement> powerManagement = std::shared_ptr<PowerManagement>(new PowerManagement);
if (!powerManagement->begin(wire))
{
logPrintlnI("AXP192 init done!");
}
else
{
logPrintlnE("AXP192 init failed!");
}
2021-01-01 22:23:27 +00:00
powerManagement->activateLoRa();
powerManagement->activateOLED();
powerManagement->deactivateGPS();
2020-06-01 09:23:48 +00:00
}
2020-12-24 20:50:36 +00:00
logPrintlnW("LoRa APRS iGate by OE5BPA (Peter Buchegger)");
logPrintlnW("Version: 20.49.0-dev");
2021-01-19 22:12:55 +00:00
//setup_display(boardConfig);
//show_display("OE5BPA", "LoRa APRS iGate", "by Peter Buchegger", "20.49.0-dev", 3000);
2020-03-18 18:49:59 +00:00
2021-01-01 22:23:27 +00:00
load_config(boardConfig);
2021-01-19 22:12:55 +00:00
TaskManager::instance().addTask(std::shared_ptr<Task>(new DisplayTask()));
2021-01-04 22:10:23 +00:00
TaskManager::instance().addTask(std::shared_ptr<Task>(new LoraTask()));
if(boardConfig->Type == eETH_BOARD)
2020-10-12 19:43:37 +00:00
{
2021-01-04 22:10:23 +00:00
TaskManager::instance().addTask(std::shared_ptr<Task>(new EthTask()));
}
2021-01-04 22:10:23 +00:00
TaskManager::instance().addTask(std::shared_ptr<Task>(new WifiTask()));
TaskManager::instance().addTask(std::shared_ptr<Task>(new OTATask()));
TaskManager::instance().addTask(std::shared_ptr<Task>(new NTPTask()));
TaskManager::instance().addTask(std::shared_ptr<Task>(new FTPTask()));
TaskManager::instance().addTask(std::shared_ptr<Task>(new AprsIsTask()));
2021-01-04 22:10:23 +00:00
TaskManager::instance().setup(userConfig, boardConfig);
2020-05-08 21:09:44 +00:00
2021-01-01 22:23:27 +00:00
if(userConfig->display.overwritePin != 0)
{
2021-01-01 22:23:27 +00:00
pinMode(userConfig->display.overwritePin, INPUT);
pinMode(userConfig->display.overwritePin, INPUT_PULLUP);
}
2020-03-18 18:49:59 +00:00
delay(500);
2020-11-07 23:07:43 +00:00
logPrintlnI("setup done...");
2020-03-18 18:49:59 +00:00
}
2020-05-29 19:13:11 +00:00
// cppcheck-suppress unusedFunction
2020-03-18 18:49:59 +00:00
void loop()
{
2021-01-04 22:10:23 +00:00
TaskManager::instance().loop(userConfig);
2020-11-03 22:35:19 +00:00
}
String create_lat_aprs(double lat)
{
char str[20];
char n_s = 'N';
if(lat < 0)
{
n_s = 'S';
}
lat = std::abs(lat);
sprintf(str, "%02d%05.2f%c", (int)lat, (lat - (double)((int)lat)) * 60.0, n_s);
String lat_str(str);
return lat_str;
}
String create_long_aprs(double lng)
{
char str[20];
char e_w = 'E';
if(lng < 0)
{
e_w = 'W';
}
lng = std::abs(lng);
sprintf(str, "%03d%05.2f%c", (int)lng, (lng - (double)((int)lng)) * 60.0, e_w);
String lng_str(str);
return lng_str;
}