From 39dcbe16bca9c5e5925f63635c4e4b6f83439e3e Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sat, 23 Sep 2023 14:08:44 +0000 Subject: [PATCH 01/13] add first board --- arch/esp32/esp32.ini | 55 +++++++++++++++++++++ platformio.ini | 85 ++++++++++++++++++++++++-------- suppressions.txt | 49 ++++++++++++++++++ variants/tlora_v2/platformio.ini | 7 +++ variants/tlora_v2/variant.h | 18 +++++++ 5 files changed, 194 insertions(+), 20 deletions(-) create mode 100644 arch/esp32/esp32.ini create mode 100644 suppressions.txt create mode 100644 variants/tlora_v2/platformio.ini create mode 100644 variants/tlora_v2/variant.h diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini new file mode 100644 index 0000000..d2311ca --- /dev/null +++ b/arch/esp32/esp32.ini @@ -0,0 +1,55 @@ +; Common settings for ESP targes, mixin with extends = esp32_base +[esp32_base] +extends = arduino_base +platform = platformio/espressif32 @ 6.3.2 + +build_src_filter = + ${arduino_base.build_src_filter} - - - - + +upload_speed = 921600 +debug_init_break = tbreak setup +monitor_filters = esp32_exception_decoder + +;board_build.filesystem = littlefs + +# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. +# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h +# This overrides the BLE logging default of LOG_LEVEL_INFO (1) from: .pio/libdeps/tbeam/NimBLE-Arduino/src/esp_nimble_cfg.h +build_flags = + ${arduino_base.build_flags} + -Wall +; -Wextra + -Isrc/platform/esp32 + -std=c++2a +; -std=c++11 + -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG + -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG + -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL + -DAXP_DEBUG_PORT=Serial + -DCONFIG_BT_NIMBLE_ENABLED + -DCONFIG_NIMBLE_CPP_LOG_LEVEL=2 + -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 + -DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=5120 + -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING + -DSERIAL_BUFFER_SIZE=4096 + ;-DDEBUG_HEAP + +;lib_deps = +; ${arduino_base.lib_deps} +; ${networking_base.lib_deps} +; ${environmental_base.lib_deps} +; h2zero/NimBLE-Arduino@^1.4.1 +; jgromes/RadioLib@^6.1.0 +; https://github.com/lewisxhe/XPowersLib.git#84b7373faea3118b6c37954d52f98b8a337148d6 + +;lib_ignore = +; segger_rtt +; ESP32 BLE Arduino + +; leave this commented out to avoid breaking Windows +;upload_port = /dev/ttyUSB0 +;monitor_port = /dev/ttyUSB0 + +; customize the partition table +; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables +;board_build.partitions = partition-table.csv diff --git a/platformio.ini b/platformio.ini index f813a45..cbc6510 100644 --- a/platformio.ini +++ b/platformio.ini @@ -9,14 +9,49 @@ ; https://docs.platformio.org/page/projectconf.html [platformio] -default_envs = lora_board +;default_envs = tbeam +;default_envs = tbeam-s3-core +;default_envs = heltec-v1 +;default_envs = heltec-v2_0 +;default_envs = heltec-v2_1 +;default_envs = tlora-v1 +;default_envs = tlora_v1_3 +default_envs = tlora-v2 +;default_envs = tlora-v2-1-1_6 + +extra_configs = + arch/*/*.ini + variants/*/platformio.ini [env] -platform = espressif32 @ 6.3.2 -framework = arduino -lib_ldf_mode = deep+ +;extra_scripts = bin/platformio-custom.py + +build_flags = -Wno-missing-field-initializers + -Wno-format +; -Isrc -Isrc/mesh -Isrc/mesh/generated -Isrc/gps -Isrc/buzz -Wl,-Map,.pio/build/output.map +; -DUSE_THREAD_NAMES +; -DTINYGPS_OPTION_NO_CUSTOM_FIELDS +; -DPB_ENABLE_MALLOC=1 + -DRADIOLIB_EXCLUDE_CC1101 + -DRADIOLIB_EXCLUDE_NRF24 + -DRADIOLIB_EXCLUDE_RF69 + -DRADIOLIB_EXCLUDE_SX1231 + -DRADIOLIB_EXCLUDE_SI443X + -DRADIOLIB_EXCLUDE_RFM2X + -DRADIOLIB_EXCLUDE_AFSK + -DRADIOLIB_EXCLUDE_HELLSCHREIBER + -DRADIOLIB_EXCLUDE_MORSE + -DRADIOLIB_EXCLUDE_RTTY + -DRADIOLIB_EXCLUDE_SSTV + -DRADIOLIB_EXCLUDE_AX25 + -DRADIOLIB_EXCLUDE_DIRECT_RECEIVE + -DRADIOLIB_EXCLUDE_BELL + -DRADIOLIB_EXCLUDE_PAGER + -DRADIOLIB_EXCLUDE_FSK4 + -DRADIOLIB_EXCLUDE_APRS + monitor_speed = 115200 -monitor_raw = yes + lib_deps = bblanchon/ArduinoJson @ 6.21.3 lewisxhe/AXP202X_Library @ 1.1.3 @@ -27,23 +62,33 @@ lib_deps = mikalhart/TinyGPSPlus @ 1.0.3 shaggydog/OneButton @ 1.5.0 jgromes/RadioLib @ 6.1.0 + check_tool = cppcheck -check_flags = cppcheck: --std=c++20 --suppress=*:*.pio\* --inline-suppr --suppress=unusedFunction -DCPPCHECK --force lib -ilib/TimeLib check_skip_packages = yes -test_build_src = yes -# activate for OTA Update, use the CALLSIGN from is-cfg.json as upload_port: -#upload_protocol = espota -#upload_port = .local +check_flags = + --suppressions-list=suppressions.txt + --inline-suppr -[env:lora_board] -board = esp32doit-devkit-v1 -build_flags = -Werror -Wall -DUNITY_INCLUDE_PRINT_FORMATTED +;check_flags = cppcheck: --std=c++20 --suppress=*:*.pio\* --inline-suppr --suppress=unusedFunction --suppress=shadowFunction:*TimeLib.cpp --suppress=unreadVariable:*TimeLib.cpp --suppress=badBitmaskCheck:*project_configuration.cpp +;test_build_src = yes -[env:lora_v3_board] -board = heltec_wifi_lora_32_V3 -build_flags = -Werror -Wall -DUNITY_INCLUDE_PRINT_FORMATTED +[arduino_base] +framework = arduino +lib_deps = + ${env.lib_deps} -[env:lora_board_debug] -board = esp32doit-devkit-v1 -build_flags = -Werror -Wall -DCORE_DEBUG_LEVEL=5 -DUNITY_INCLUDE_PRINT_FORMATTED -build_type = debug +build_flags = ${env.build_flags} -Os -DRADIOLIB_SPI_PARANOID=0 +build_src_filter = ${env.build_src_filter} - + +;[env:lora_board] +;board = esp32doit-devkit-v1 +;build_flags = -Werror -Wall -DUNITY_INCLUDE_PRINT_FORMATTED +; +;[env:lora_v3_board] +;board = heltec_wifi_lora_32_V3 +;build_flags = -Werror -Wall -DUNITY_INCLUDE_PRINT_FORMATTED +; +;[env:lora_board_debug] +;board = esp32doit-devkit-v1 +;build_flags = -Werror -Wall -DCORE_DEBUG_LEVEL=5 -DUNITY_INCLUDE_PRINT_FORMATTED +;build_type = debug diff --git a/suppressions.txt b/suppressions.txt new file mode 100644 index 0000000..4c5c794 --- /dev/null +++ b/suppressions.txt @@ -0,0 +1,49 @@ +// cppcheck suppressions +assertWithSideEffect + +// TODO: need to come back to these +//duplInheritedMember + +// TODO: +// "Using memset() on struct which contains a floating point number." +// tried: +// if (std::is_floating_point::value) { +// p = 0; +// in src/mesh/MemoryPool.h +//memsetClassFloat + +//knownConditionTrueFalse + +// no real downside/harm in these +//unusedFunction +//unusedPrivateFunction + +// most likely due to a cppcheck configuration issue (like missing an include) +//syntaxError + +// try to quiet a few +//useInitializationList:src/main.cpp +//useInitializationList + +// I don't want to go back and cast function pointers just to appease a tools insatiable thirst for immutability +//constParameterCallback + +//redundantInitialization + +//cstyleCast:src/mesh/MemoryPool.h:71 +//cstyleCast + +// ignore stuff that is not ours +*:.pio/* +*:*/libdeps/* +*:*/generated/* +//noExplicitConstructor:*/mqtt/* +//postfixOperator:*/mqtt/* + +// these two caused issues +//missingOverride +//virtualCallInConstructor + +//passedByValue:*/RedirectablePrint.h + +//internalAstError:*/CrossPlatformCryptoEngine.cpp diff --git a/variants/tlora_v2/platformio.ini b/variants/tlora_v2/platformio.ini new file mode 100644 index 0000000..208d98c --- /dev/null +++ b/variants/tlora_v2/platformio.ini @@ -0,0 +1,7 @@ + +[env:tlora-v2] +extends = esp32_base +board = ttgo-lora32-v1 +board_level = extra +build_flags = + ${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2 diff --git a/variants/tlora_v2/variant.h b/variants/tlora_v2/variant.h new file mode 100644 index 0000000..c52db5b --- /dev/null +++ b/variants/tlora_v2/variant.h @@ -0,0 +1,18 @@ +#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage +#define ADC_CHANNEL ADC1_GPIO35_CHANNEL + +#define I2C_SDA 21 // I2C pins for this board +#define I2C_SCL 22 + +#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost +#define LED_PIN 25 // If defined we will blink this LED +#define BUTTON_PIN \ + 0 // If defined, this will be used for user button presses, if your board doesn't have a physical switch, you can wire one + // between this pin and ground +#define BUTTON_NEED_PULLUP + +#define USE_RF95 +#define LORA_DIO0 26 // a No connect on the SX1262 module +#define LORA_RESET 14 +#define LORA_DIO1 33 // Must be manually wired: https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436 +#define LORA_DIO2 32 // Not really used From 08dc8380bc8933794a8b4e6d6361428f2d4ba1ba Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Tue, 26 Sep 2023 17:31:32 +0000 Subject: [PATCH 02/13] remove BoardFinder and implement first boards (not all are still supported) --- arch/esp32/esp32.ini | 36 +----- arch/esp32/esp32s3.ini | 2 + platformio.ini | 31 ++--- src/BoardFinder/BoardFinder.cpp | 165 ------------------------- src/BoardFinder/BoardFinder.h | 139 --------------------- src/Display/Display.cpp | 30 +++-- src/Display/Display.h | 3 +- src/LoRaModem.cpp | 25 +++- src/LoRaModem.h | 10 +- src/LoRa_APRS_iGate.cpp | 83 ++++--------- src/System/System.cpp | 10 +- src/System/System.h | 4 - src/System/TaskManager.h | 1 - src/TaskBeacon.cpp | 18 +-- src/TaskDisplay.cpp | 2 +- src/TaskEth.cpp | 42 +++---- src/TaskRadiolib.cpp | 20 +-- src/TaskRadiolib.h | 1 - src/project_configuration.h | 1 - suppressions.txt | 47 +------ test/test_BoardFinder/test.cpp | 78 ------------ variants/heltec_v1/platformio.ini | 6 + variants/heltec_v2/platformio.ini | 6 + variants/heltec_v3/platformio.ini | 5 + variants/t_internet_poe/platformio.ini | 5 + variants/tbeam/platformio.ini | 6 + variants/tlora_v1/platformio.ini | 5 + variants/tlora_v2/platformio.ini | 3 +- variants/tlora_v2/variant.h | 18 --- 29 files changed, 166 insertions(+), 636 deletions(-) create mode 100644 arch/esp32/esp32s3.ini delete mode 100644 src/BoardFinder/BoardFinder.cpp delete mode 100644 src/BoardFinder/BoardFinder.h delete mode 100644 test/test_BoardFinder/test.cpp create mode 100644 variants/heltec_v1/platformio.ini create mode 100644 variants/heltec_v2/platformio.ini create mode 100644 variants/heltec_v3/platformio.ini create mode 100644 variants/t_internet_poe/platformio.ini create mode 100644 variants/tbeam/platformio.ini create mode 100644 variants/tlora_v1/platformio.ini delete mode 100644 variants/tlora_v2/variant.h diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini index d2311ca..efae249 100644 --- a/arch/esp32/esp32.ini +++ b/arch/esp32/esp32.ini @@ -4,52 +4,22 @@ extends = arduino_base platform = platformio/espressif32 @ 6.3.2 build_src_filter = - ${arduino_base.build_src_filter} - - - - + ${arduino_base.build_src_filter} upload_speed = 921600 -debug_init_break = tbreak setup monitor_filters = esp32_exception_decoder ;board_build.filesystem = littlefs -# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. -# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h -# This overrides the BLE logging default of LOG_LEVEL_INFO (1) from: .pio/libdeps/tbeam/NimBLE-Arduino/src/esp_nimble_cfg.h build_flags = ${arduino_base.build_flags} -Wall ; -Wextra -Isrc/platform/esp32 -std=c++2a -; -std=c++11 -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG - -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL -DAXP_DEBUG_PORT=Serial - -DCONFIG_BT_NIMBLE_ENABLED - -DCONFIG_NIMBLE_CPP_LOG_LEVEL=2 - -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 - -DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=5120 - -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING - -DSERIAL_BUFFER_SIZE=4096 - ;-DDEBUG_HEAP -;lib_deps = -; ${arduino_base.lib_deps} -; ${networking_base.lib_deps} -; ${environmental_base.lib_deps} -; h2zero/NimBLE-Arduino@^1.4.1 -; jgromes/RadioLib@^6.1.0 -; https://github.com/lewisxhe/XPowersLib.git#84b7373faea3118b6c37954d52f98b8a337148d6 - -;lib_ignore = -; segger_rtt -; ESP32 BLE Arduino - -; leave this commented out to avoid breaking Windows -;upload_port = /dev/ttyUSB0 -;monitor_port = /dev/ttyUSB0 - -; customize the partition table -; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables -;board_build.partitions = partition-table.csv +lib_deps = + ${arduino_base.lib_deps} diff --git a/arch/esp32/esp32s3.ini b/arch/esp32/esp32s3.ini new file mode 100644 index 0000000..377c6c0 --- /dev/null +++ b/arch/esp32/esp32s3.ini @@ -0,0 +1,2 @@ +[esp32s3_base] +extends = esp32_base diff --git a/platformio.ini b/platformio.ini index cbc6510..95f358e 100644 --- a/platformio.ini +++ b/platformio.ini @@ -26,24 +26,22 @@ extra_configs = [env] ;extra_scripts = bin/platformio-custom.py -build_flags = -Wno-missing-field-initializers - -Wno-format -; -Isrc -Isrc/mesh -Isrc/mesh/generated -Isrc/gps -Isrc/buzz -Wl,-Map,.pio/build/output.map -; -DUSE_THREAD_NAMES -; -DTINYGPS_OPTION_NO_CUSTOM_FIELDS -; -DPB_ENABLE_MALLOC=1 +build_flags = + -Wl,-Map,.pio/build/output.map -DRADIOLIB_EXCLUDE_CC1101 -DRADIOLIB_EXCLUDE_NRF24 -DRADIOLIB_EXCLUDE_RF69 -DRADIOLIB_EXCLUDE_SX1231 -DRADIOLIB_EXCLUDE_SI443X -DRADIOLIB_EXCLUDE_RFM2X + -DRADIOLIB_EXCLUDE_RFM9X + -DRADIOLIB_EXCLUDE_SX128X -DRADIOLIB_EXCLUDE_AFSK + -DRADIOLIB_EXCLUDE_AX25 -DRADIOLIB_EXCLUDE_HELLSCHREIBER -DRADIOLIB_EXCLUDE_MORSE -DRADIOLIB_EXCLUDE_RTTY -DRADIOLIB_EXCLUDE_SSTV - -DRADIOLIB_EXCLUDE_AX25 -DRADIOLIB_EXCLUDE_DIRECT_RECEIVE -DRADIOLIB_EXCLUDE_BELL -DRADIOLIB_EXCLUDE_PAGER @@ -69,26 +67,13 @@ check_flags = --suppressions-list=suppressions.txt --inline-suppr -;check_flags = cppcheck: --std=c++20 --suppress=*:*.pio\* --inline-suppr --suppress=unusedFunction --suppress=shadowFunction:*TimeLib.cpp --suppress=unreadVariable:*TimeLib.cpp --suppress=badBitmaskCheck:*project_configuration.cpp -;test_build_src = yes +test_build_src = yes [arduino_base] framework = arduino lib_deps = ${env.lib_deps} -build_flags = ${env.build_flags} -Os -DRADIOLIB_SPI_PARANOID=0 +build_flags = ${env.build_flags} -Os build_src_filter = ${env.build_src_filter} - - -;[env:lora_board] -;board = esp32doit-devkit-v1 -;build_flags = -Werror -Wall -DUNITY_INCLUDE_PRINT_FORMATTED -; -;[env:lora_v3_board] -;board = heltec_wifi_lora_32_V3 -;build_flags = -Werror -Wall -DUNITY_INCLUDE_PRINT_FORMATTED -; -;[env:lora_board_debug] -;board = esp32doit-devkit-v1 -;build_flags = -Werror -Wall -DCORE_DEBUG_LEVEL=5 -DUNITY_INCLUDE_PRINT_FORMATTED -;build_type = debug +debug_init_break = tbreak setup diff --git a/src/BoardFinder/BoardFinder.cpp b/src/BoardFinder/BoardFinder.cpp deleted file mode 100644 index f4ed539..0000000 --- a/src/BoardFinder/BoardFinder.cpp +++ /dev/null @@ -1,165 +0,0 @@ -#include "BoardFinder.h" -#include "PowerManagement/power_management.h" -#include - -#define MODULE_NAME "BoardFinder" - -OledPins::OledPins(int8_t sda, int8_t scl, int8_t reset, int8_t addr) : Sda(sda), Scl(scl), Reset(reset), Addr(addr) { -} - -LoraPins::LoraPins(int8_t sck, int8_t miso, int8_t mosi, int8_t cs, int8_t reset, int8_t irq, LoraModem modem) : Sck(sck), Miso(miso), Mosi(mosi), CS(cs), Reset(reset), IRQ(irq), Modem(modem) { -} - -GpsPins::GpsPins(int8_t rx, int8_t tx) : Rx(rx), Tx(tx) { -} - -EthernetPins::EthernetPins(int8_t mdc, int8_t mdio, int8_t nreset, int8_t addr, int8_t power, eth_clock_mode_t clk, eth_phy_type_t type) : MDC(mdc), MDIO(mdio), nReset(nreset), Addr(addr), Power(power), CLK(clk), Type(type) { -} - -ButtonPins::ButtonPins(int8_t pin) : Pin(pin) { -} - -BoardConfig::BoardConfig(String name, BoardType type, OledPins oled, LoraPins lora, GpsPins gps, EthernetPins ethernet, ButtonPins button, bool needcheckpowerchip, bool powercheckstatus) : Name(name), Type(type), Oled(oled), Lora(lora), Gps(gps), Ethernet(ethernet), Button(button), needCheckPowerChip(needcheckpowerchip), powerCheckStatus(powercheckstatus) { -} - -BoardFinder::BoardFinder(const std::list &boardConfigs) : _boardConfigs(boardConfigs) { -} - -BoardConfig const *BoardFinder::searchBoardConfig(logging::Logger &logger) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "looking for a board config."); - logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "searching for OLED..."); - - for (BoardConfig const *boardconf : _boardConfigs) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, MODULE_NAME, "trying board config: %s", boardconf->Name.c_str()); - if (boardconf->needCheckPowerChip && checkPowerConfig(boardconf, logger) == boardconf->powerCheckStatus) { - PowerManagement powerManagement; - Wire.begin(boardconf->Oled.Sda, boardconf->Oled.Scl); - powerManagement.begin(Wire); - powerManagement.activateOLED(); - Wire.end(); - } else if (boardconf->needCheckPowerChip) { - continue; - } - if (checkOledConfig(boardconf, logger)) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "found a board config: %s", boardconf->Name.c_str()); - return boardconf; - } - } - - logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "could not find OLED, will search for the modem now..."); - - for (BoardConfig const *boardconf : _boardConfigs) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, MODULE_NAME, "trying board config: %s", boardconf->Name.c_str()); - if (boardconf->needCheckPowerChip && checkPowerConfig(boardconf, logger) == boardconf->powerCheckStatus) { - PowerManagement powerManagement; - Wire.begin(boardconf->Oled.Sda, boardconf->Oled.Scl); - powerManagement.begin(Wire); - powerManagement.activateLoRa(); - Wire.end(); - } - if (checkModemConfig(boardconf)) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "found a board config: %s", boardconf->Name.c_str()); - return boardconf; - } - } - - logger.log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "could not find a board config!"); - - return 0; -} - -BoardConfig const *BoardFinder::getBoardConfig(String name) { - std::_List_const_iterator elem = std::find_if(_boardConfigs.begin(), _boardConfigs.end(), [&](BoardConfig const *conf) { - return conf->Name == name; - }); - if (elem == _boardConfigs.end()) { - return 0; - } - return *elem; -} - -bool BoardFinder::checkOledConfig(BoardConfig const *boardConfig, logging::Logger &logger) { - if (boardConfig->Oled.Reset != -1) { - pinMode(boardConfig->Oled.Reset, OUTPUT); - digitalWrite(boardConfig->Oled.Reset, HIGH); - delay(1); - digitalWrite(boardConfig->Oled.Reset, LOW); - delay(10); - digitalWrite(boardConfig->Oled.Reset, HIGH); - } - if (!Wire.begin(boardConfig->Oled.Sda, boardConfig->Oled.Scl)) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "issue with wire"); - return false; - } - Wire.beginTransmission(boardConfig->Oled.Addr); - if (!Wire.endTransmission()) { - Wire.end(); - return true; - } - Wire.end(); - return false; -} - -bool BoardFinder::checkModemConfig(BoardConfig const *boardConfig) { - pinMode(boardConfig->Lora.Reset, OUTPUT); - digitalWrite(boardConfig->Lora.Reset, LOW); - delay(10); - digitalWrite(boardConfig->Lora.Reset, HIGH); - delay(10); - - pinMode(boardConfig->Lora.CS, OUTPUT); - digitalWrite(boardConfig->Lora.CS, HIGH); - - SPI.begin(boardConfig->Lora.Sck, boardConfig->Lora.Miso, boardConfig->Lora.Mosi, boardConfig->Lora.CS); - - digitalWrite(boardConfig->Lora.CS, LOW); - - SPI.beginTransaction(SPISettings(8E6, MSBFIRST, SPI_MODE0)); - SPI.transfer(0x42); - uint8_t response = SPI.transfer(0x00); - SPI.endTransaction(); - digitalWrite(boardConfig->Lora.CS, HIGH); - SPI.end(); - if (response == 0x12) { - return true; - } - return false; -} - -bool BoardFinder::checkPowerConfig(BoardConfig const *boardConfig, logging::Logger &logger) { - if (!Wire.begin(boardConfig->Oled.Sda, boardConfig->Oled.Scl)) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "issue with wire"); - return false; - } - Wire.beginTransmission(0x34); - Wire.write(0x03); - Wire.endTransmission(); - - Wire.requestFrom(0x34, 1); - int response = Wire.read(); - Wire.endTransmission(); - Wire.end(); - - logger.log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, MODULE_NAME, "wire response: %d", response); - if (response == 0x03) { - logger.log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, MODULE_NAME, "power chip found!"); - return true; - } - logger.log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, MODULE_NAME, "power chip NOT found"); - return false; -} - -// clang-format off -BoardConfig TTGO_LORA32_V1 ("TTGO_LORA32_V1", eTTGO_LORA32_V1, OledPins( 4, 15), LoraPins( 5, 19, 27, 18, 14, 26, eSX1278)); -BoardConfig TTGO_LORA32_V2 ("TTGO_LORA32_V2", eTTGO_LORA32_V2, OledPins(21, 22), LoraPins( 5, 19, 27, 18, 14, 26, eSX1278)); -BoardConfig TTGO_T_Beam_V0_7 ("TTGO_T_Beam_V0_7", eTTGO_T_Beam_V0_7, OledPins(21, 22), LoraPins( 5, 19, 27, 18, 14, 26, eSX1278), GpsPins(15, 12), EthernetPins(), ButtonPins(38), true); -BoardConfig TTGO_T_Beam_V1_0 ("TTGO_T_Beam_V1_0", eTTGO_T_Beam_V1_0, OledPins(21, 22), LoraPins( 5, 19, 27, 18, 14, 26, eSX1278), GpsPins(12, 34), EthernetPins(), ButtonPins(38), true, true); -BoardConfig LILYGO_POE_ETH_BOARD ("LILYGO_POE_ETH_BOARD", eLILYGO_POE_ETH_BOARD, OledPins(33, 32), LoraPins(14, 2, 15, 12, 4, 36, eSX1278), GpsPins(), EthernetPins(23, 18, 5, 0, -1, ETH_CLOCK_GPIO17_OUT, ETH_PHY_LAN8720)); -BoardConfig WT32_ETH_BOARD ("WT32_ETH_BOARD", eWT32_ETH_BOARD, OledPins(17, 5), LoraPins( 4, 12, 14, 15, 33, 32, eSX1278), GpsPins(), EthernetPins(23, 18, -1, 1, 16, ETH_CLOCK_GPIO0_IN, ETH_PHY_LAN8720)); -BoardConfig TRACKERD ("TRACKERD", eTRACKERD, OledPins( 5, 4), LoraPins(18, 19, 23, 16, 14, 26, eSX1278)); -BoardConfig HELTEC_WIFI_LORA_32_V1 ("HELTEC_WIFI_LORA_32_V1", eHELTEC_WIFI_LORA_32_V1, OledPins( 4, 15, 16), LoraPins( 5, 19, 27, 18, 14, 26, eSX1278)); -BoardConfig HELTEC_WIFI_LORA_32_V2 ("HELTEC_WIFI_LORA_32_V2", eHELTEC_WIFI_LORA_32_V2, OledPins( 4, 15, 16), LoraPins( 5, 19, 27, 18, 14, 26, eSX1278)); -BoardConfig HELTEC_WIFI_LORA_32_V3 ("HELTEC_WIFI_LORA_32_V3", eHELTEC_WIFI_LORA_32_V3, OledPins(17, 18, 21), LoraPins( 9, 11, 10, 8, 12, 14, eSX1268)); -BoardConfig GUALTHERIUS_LORAHAM_v100("GUALTHERIUS_LORAHAM_v100", eGUALTHERIUS_LORAHAM_v100, OledPins(17, 16), LoraPins(18, 19, 23, 5, 13, 35, eSX1278)); -BoardConfig GUALTHERIUS_LORAHAM_v106("GUALTHERIUS_LORAHAM_v106", eGUALTHERIUS_LORAHAM_v106, OledPins(17, 16), LoraPins(18, 19, 23, 2, 13, 35, eSX1278)); -// clang-format on diff --git a/src/BoardFinder/BoardFinder.h b/src/BoardFinder/BoardFinder.h deleted file mode 100644 index 09d4f2d..0000000 --- a/src/BoardFinder/BoardFinder.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef BOARD_FINDER_H_ -#define BOARD_FINDER_H_ - -#include -#include - -#include -#include -#include -#include - -#include - -class OledPins { -public: - explicit OledPins(int8_t sda, int8_t scl, int8_t reset = -1, int8_t addr = 0x3C); - - int8_t Sda; - int8_t Scl; - int8_t Reset; - int8_t Addr; -}; - -enum LoraModem { - eSX1278, - eSX1268, -}; - -class LoraPins { -public: - explicit LoraPins(int8_t sck, int8_t miso, int8_t mosi, int8_t cs, int8_t reset, int8_t irq, LoraModem modem); - - int8_t Sck; - int8_t Miso; - int8_t Mosi; - int8_t CS; - int8_t Reset; - int8_t IRQ; - LoraModem Modem; -}; - -class GpsPins { -public: - explicit GpsPins(int8_t rx = -1, int8_t tx = -1); - - int8_t Rx; - int8_t Tx; -}; - -class EthernetPins { -public: - explicit EthernetPins(int8_t mdc = -1, int8_t mdio = -1, int8_t nreset = -1, int8_t addr = 0, int8_t power = -1, eth_clock_mode_t clk = ETH_CLOCK_GPIO17_OUT, eth_phy_type_t type = ETH_PHY_LAN8720); - - int8_t MDC; - int8_t MDIO; - int8_t nReset; - int8_t Addr; - int8_t Power; - - eth_clock_mode_t CLK; - eth_phy_type_t Type; - - bool isEthernetBoard() const { - return MDC != -1; - } -}; - -class ButtonPins { -public: - explicit ButtonPins(int8_t pin = -1); - - int8_t Pin; -}; - -enum BoardType { - eHELTEC_WIFI_LORA_32_V1, - eHELTEC_WIFI_LORA_32_V2, - eHELTEC_WIFI_LORA_32_V3, - eTTGO_LORA32_V1, - eTTGO_LORA32_V2, - eTTGO_T_Beam_V0_7, - eTTGO_T_Beam_V1_0, - eLILYGO_POE_ETH_BOARD, - eWT32_ETH_BOARD, - eTRACKERD, - eGUALTHERIUS_LORAHAM_v100, - eGUALTHERIUS_LORAHAM_v106 -}; - -class BoardConfig { -public: - explicit BoardConfig(String name, BoardType type, OledPins oled, LoraPins lora, GpsPins gps = GpsPins(), EthernetPins ethernet = EthernetPins(), ButtonPins button = ButtonPins(), bool needcheckpowerchip = false, bool powercheckstatus = false); - - String Name; - BoardType Type; - - OledPins Oled; - LoraPins Lora; - GpsPins Gps; - EthernetPins Ethernet; - - ButtonPins Button; - - bool needCheckPowerChip; - bool powerCheckStatus; -}; - -class BoardFinder { -public: - explicit BoardFinder(const std::list &boardConfigs); - - BoardConfig const *searchBoardConfig(logging::Logger &logger); - - BoardConfig const *getBoardConfig(String name); - -#ifndef UNIT_TEST -private: -#endif - const std::list &_boardConfigs; - - bool checkOledConfig(BoardConfig const *boardConfig, logging::Logger &logger); - bool checkModemConfig(BoardConfig const *boardConfig); - bool checkPowerConfig(BoardConfig const *boardConfig, logging::Logger &logger); -}; - -extern BoardConfig TTGO_LORA32_V1; -extern BoardConfig TTGO_LORA32_V2; -extern BoardConfig TTGO_T_Beam_V0_7; -extern BoardConfig TTGO_T_Beam_V1_0; -extern BoardConfig LILYGO_POE_ETH_BOARD; -extern BoardConfig WT32_ETH_BOARD; -extern BoardConfig TRACKERD; -extern BoardConfig HELTEC_WIFI_LORA_32_V1; -extern BoardConfig HELTEC_WIFI_LORA_32_V2; -extern BoardConfig HELTEC_WIFI_LORA_32_V3; -extern BoardConfig GUALTHERIUS_LORAHAM_v100; -extern BoardConfig GUALTHERIUS_LORAHAM_v106; - -#endif diff --git a/src/Display/Display.cpp b/src/Display/Display.cpp index 5ae5212..844d756 100644 --- a/src/Display/Display.cpp +++ b/src/Display/Display.cpp @@ -8,18 +8,26 @@ Display::Display() : _disp(0), _statusFrame(0), _displaySaveMode(false) { Display::~Display() { } -void Display::setup(BoardConfig const *const boardConfig) { - if (boardConfig->Oled.Reset != -1) { - pinMode(boardConfig->Oled.Reset, OUTPUT); - digitalWrite(boardConfig->Oled.Reset, HIGH); - delay(1); - digitalWrite(boardConfig->Oled.Reset, LOW); - delay(10); - digitalWrite(boardConfig->Oled.Reset, HIGH); - } - Wire.begin(boardConfig->Oled.Sda, boardConfig->Oled.Scl); - _disp = new SSD1306(&Wire, boardConfig->Oled.Addr); +void Display::setup() { + Serial.println("oled reset"); +#ifdef RESET_OLED + pinMode(RESET_OLED, OUTPUT); + digitalWrite(RESET_OLED, HIGH); + delay(1); + digitalWrite(RESET_OLED, LOW); + delay(10); + digitalWrite(RESET_OLED, HIGH); +#endif + Serial.println("Wire begin"); +#if defined(OLED_SDA) && defined(OLED_SCL) + Wire.begin(OLED_SDA, OLED_SCL); +#else + Wire.begin(SDA, SCL); +#endif + Serial.println("SSD1306 init"); + _disp = new SSD1306(&Wire, 0x3C); + Serial.println("SSD1306 setup"); Bitmap bitmap(_disp->getWidth(), _disp->getHeight()); _disp->display(&bitmap); diff --git a/src/Display/Display.h b/src/Display/Display.h index d1b6b76..54d6ddf 100644 --- a/src/Display/Display.h +++ b/src/Display/Display.h @@ -1,7 +1,6 @@ #ifndef DISPLAY_H_ #define DISPLAY_H_ -#include "BoardFinder/BoardFinder.h" #include "Display/SSD1306.h" #include "System/Timer.h" #include @@ -27,7 +26,7 @@ public: Display(); ~Display(); - void setup(BoardConfig const *const boardConfig); + void setup(); // setup functions void showSpashScreen(String firmwareTitle, String version); void setStatusFrame(std::shared_ptr frame); diff --git a/src/LoRaModem.cpp b/src/LoRaModem.cpp index 57e4f99..5889a7c 100644 --- a/src/LoRaModem.cpp +++ b/src/LoRaModem.cpp @@ -1,15 +1,21 @@ #include "LoRaModem.h" // SX1278 +#ifdef USE_SX1278 Modem_SX1278::Modem_SX1278() : _radio(0) { } -int16_t Modem_SX1278::begin(const LoraPins &lora_pins, const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) { +int16_t Modem_SX1278::begin(const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) { float _frequencyRx = (float)lora_config.frequencyRx / 1000000; float BWkHz = (float)lora_config.signalBandwidth / 1000; - SPI.begin(lora_pins.Sck, lora_pins.Miso, lora_pins.Mosi, lora_pins.CS); - _module = new Module(lora_pins.CS, lora_pins.IRQ, lora_pins.Reset); +#if defined(LORA_SCK) && defined(LORA_MISO) && defined(LORA_MOSI) && defined(LORA_CS) + SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS); + _module = new Module(LORA_CS, LORA_IRQ, LORA_RST); +#else + SPI.begin(SCK, MISO, MOSI, SS); + _module = new Module(SS, DIO0, RST_LoRa); +#endif _radio = new SX1278(_module); int16_t state = _radio->begin(_frequencyRx, BWkHz, lora_config.spreadingFactor, lora_config.codingRate4, RADIOLIB_SX127X_SYNC_WORD, lora_config.power, preambleLength, lora_config.gainRx); @@ -67,15 +73,21 @@ uint8_t Modem_SX1278::getModemStatus() { } // SX1262 +#elif defined(USE_SX1268) Modem_SX1268::Modem_SX1268() : _radio(0) { } -int16_t Modem_SX1268::begin(const LoraPins &lora_pins, const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) { +int16_t Modem_SX1268::begin(const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) { float _frequencyRx = (float)lora_config.frequencyRx / 1000000; float BWkHz = (float)lora_config.signalBandwidth / 1000; - SPI.begin(lora_pins.Sck, lora_pins.Miso, lora_pins.Mosi, lora_pins.CS); - _module = new Module(lora_pins.CS, lora_pins.IRQ, lora_pins.Reset, 13); +#if defined(LORA_SCK) && defined(LORA_MISO) && defined(LORA_MOSI) && defined(LORA_CS) + SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS); + _module = new Module(LORA_CS, LORA_IRQ, LORA_RST, BUSY_LoRa); +#else + SPI.begin(SCK, MISO, MOSI, SS); + _module = new Module(SS, DIO0, RST_LoRa, BUSY_LoRa); +#endif _radio = new SX1262(_module); int16_t state = _radio->begin(_frequencyRx, BWkHz, lora_config.spreadingFactor, lora_config.codingRate4, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, lora_config.power, preambleLength); @@ -131,3 +143,4 @@ float Modem_SX1268::getFrequencyError() { uint8_t Modem_SX1268::getModemStatus() { return 0; } +#endif diff --git a/src/LoRaModem.h b/src/LoRaModem.h index 28a514b..fac6c17 100644 --- a/src/LoRaModem.h +++ b/src/LoRaModem.h @@ -3,7 +3,6 @@ #include -#include "BoardFinder/BoardFinder.h" #include "project_configuration.h" class LoRaModem { @@ -14,7 +13,7 @@ public: virtual ~LoRaModem() { } - virtual int16_t begin(const LoraPins &lora_pins, const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) = 0; + virtual int16_t begin(const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) = 0; virtual int16_t readData(String &str) = 0; @@ -33,11 +32,12 @@ protected: Module *_module; }; +#ifdef USE_SX1278 class Modem_SX1278 : public LoRaModem { public: Modem_SX1278(); - int16_t begin(const LoraPins &lora_pins, const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) override; + int16_t begin(const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) override; int16_t readData(String &str) override; @@ -56,11 +56,12 @@ private: SX1278 *_radio; }; +#elif defined(USE_SX1268) class Modem_SX1268 : public LoRaModem { public: Modem_SX1268(); - int16_t begin(const LoraPins &lora_pins, const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) override; + int16_t begin(const Configuration::LoRa &lora_config, const uint16_t preambleLength, void (*setFlag)()) override; int16_t readData(String &str) override; @@ -78,5 +79,6 @@ public: private: SX1262 *_radio; }; +#endif #endif diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index a22e9b8..06a4555 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -2,7 +2,6 @@ #include #include "APRS-IS/APRS-IS.h" -#include "BoardFinder/BoardFinder.h" #include "PowerManagement/power_management.h" #include "System/System.h" #include "System/TaskManager.h" @@ -57,68 +56,35 @@ void setup() { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "LoRa APRS iGate by OE5BPA (Peter Buchegger)"); LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Version: %s", VERSION); - std::list boardConfigs; - boardConfigs.push_back(&TTGO_LORA32_V1); - boardConfigs.push_back(&TTGO_LORA32_V2); - boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V1); - boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V2); - boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V3); - boardConfigs.push_back(&LILYGO_POE_ETH_BOARD); - boardConfigs.push_back(&WT32_ETH_BOARD); - boardConfigs.push_back(&TRACKERD); - boardConfigs.push_back(&GUALTHERIUS_LORAHAM_v100); - boardConfigs.push_back(&GUALTHERIUS_LORAHAM_v106); - boardConfigs.push_back(&TTGO_T_Beam_V0_7); - boardConfigs.push_back(&TTGO_T_Beam_V1_0); - ProjectConfigurationManagement confmg(LoRaSystem.getLogger()); confmg.readConfiguration(LoRaSystem.getLogger(), userConfig); - BoardFinder finder(boardConfigs); - BoardConfig const *boardConfig = finder.getBoardConfig(userConfig.board); - if (!boardConfig) { - boardConfig = finder.searchBoardConfig(LoRaSystem.getLogger()); - if (!boardConfig) { - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "Board config not set and search failed!"); - while (true) - ; - } else { - userConfig.board = boardConfig->Name; - confmg.writeConfiguration(LoRaSystem.getLogger(), userConfig); - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "will restart board now!"); - ESP.restart(); - } - } - - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Board %s loaded.", boardConfig->Name.c_str()); - - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Will start watchdog now..."); + /*LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Will start watchdog now..."); if (esp_task_wdt_init(10, true) != ESP_OK) { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "Watchdog init failed!"); } else { if (esp_task_wdt_add(NULL) != ESP_OK) { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "Watchdog add failed!"); } - } + }*/ - if (boardConfig->Type == eTTGO_T_Beam_V1_0) { - Wire.begin(boardConfig->Oled.Sda, boardConfig->Oled.Scl); - PowerManagement powerManagement; - if (!powerManagement.begin(Wire)) { - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "AXP192 init done!"); - } else { - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "AXP192 init failed!"); - } - powerManagement.activateLoRa(); - powerManagement.activateOLED(); - if (userConfig.beacon.use_gps) { - powerManagement.activateGPS(); - } else { - powerManagement.deactivateGPS(); - } +#ifdef TBEAM_V10 + Wire.begin(SDA, SCL); + PowerManagement powerManagement; + if (!powerManagement.begin(Wire)) { + LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "AXP192 init done!"); + } else { + LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "AXP192 init failed!"); } + powerManagement.activateLoRa(); + powerManagement.activateOLED(); + if (userConfig.beacon.use_gps) { + powerManagement.activateGPS(); + } else { + powerManagement.deactivateGPS(); + } +#endif - LoRaSystem.setBoardConfig(boardConfig); LoRaSystem.setUserConfig(&userConfig); LoRaSystem.getTaskManager().addTask(&displayTask); LoRaSystem.getTaskManager().addTask(&modemTask); @@ -131,10 +97,11 @@ void setup() { LoRaSystem.getTaskManager().addAlwaysRunTask(&wifiTask); tcpip = true; } - if (boardConfig->Ethernet.isEthernetBoard()) { - LoRaSystem.getTaskManager().addAlwaysRunTask(ðTask); - tcpip = true; - } + +#ifdef TINTERNET_POE + LoRaSystem.getTaskManager().addAlwaysRunTask(ðTask); + tcpip = true; +#endif if (tcpip) { LoRaSystem.getTaskManager().addTask(&otaTask); @@ -152,7 +119,7 @@ void setup() { } } - esp_task_wdt_reset(); + // esp_task_wdt_reset(); LoRaSystem.getTaskManager().setup(LoRaSystem); LoRaSystem.getDisplay().showSpashScreen("LoRa APRS iGate", VERSION); @@ -161,7 +128,7 @@ void setup() { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "You have to change your settings in 'data/is-cfg.json' and upload it via 'Upload File System image'!"); LoRaSystem.getDisplay().showStatusScreen("ERROR", "You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!"); while (true) { - esp_task_wdt_reset(); + // esp_task_wdt_reset(); } } if ((!userConfig.aprs_is.active) && !(userConfig.digi.active)) { @@ -182,7 +149,7 @@ void setup() { volatile bool syslogSet = false; void loop() { - esp_task_wdt_reset(); + // esp_task_wdt_reset(); LoRaSystem.getTaskManager().loop(LoRaSystem); if (LoRaSystem.isWifiOrEthConnected() && LoRaSystem.getUserConfig()->syslog.active && !syslogSet) { LoRaSystem.getLogger().setSyslogServer(LoRaSystem.getUserConfig()->syslog.server, LoRaSystem.getUserConfig()->syslog.port, LoRaSystem.getUserConfig()->callsign); diff --git a/src/System/System.cpp b/src/System/System.cpp index 008e3a4..3e34abe 100644 --- a/src/System/System.cpp +++ b/src/System/System.cpp @@ -1,24 +1,16 @@ #include "System.h" -System::System() : _boardConfig(0), _userConfig(0), _isEthConnected(false), _isWifiConnected(false) { +System::System() : _userConfig(0), _isEthConnected(false), _isWifiConnected(false) { } System::~System() { } -void System::setBoardConfig(BoardConfig const *const boardConfig) { - _boardConfig = boardConfig; -} - void System::setUserConfig(Configuration const *const userConfig) { _userConfig = userConfig; } -BoardConfig const *const System::getBoardConfig() const { - return _boardConfig; -} - Configuration const *const System::getUserConfig() const { return _userConfig; } diff --git a/src/System/System.h b/src/System/System.h index 7d3ccf6..7976a32 100644 --- a/src/System/System.h +++ b/src/System/System.h @@ -4,7 +4,6 @@ #include #include -#include "BoardFinder/BoardFinder.h" #include "ConfigurationManagement/configuration.h" #include "Display/Display.h" #include "TaskManager.h" @@ -14,10 +13,8 @@ public: System(); ~System(); - void setBoardConfig(BoardConfig const *const boardConfig); void setUserConfig(Configuration const *const userConfig); - BoardConfig const *const getBoardConfig() const; Configuration const *const getUserConfig() const; TaskManager &getTaskManager(); Display &getDisplay(); @@ -27,7 +24,6 @@ public: logging::Logger &getLogger(); private: - BoardConfig const *_boardConfig; Configuration const *_userConfig; TaskManager _taskManager; Display _display; diff --git a/src/System/TaskManager.h b/src/System/TaskManager.h index ce949d1..1c1c51c 100644 --- a/src/System/TaskManager.h +++ b/src/System/TaskManager.h @@ -5,7 +5,6 @@ #include #include -#include "BoardFinder/BoardFinder.h" #include "ConfigurationManagement/configuration.h" #include "Display/Display.h" diff --git a/src/TaskBeacon.cpp b/src/TaskBeacon.cpp index 4c172a1..312e30e 100644 --- a/src/TaskBeacon.cpp +++ b/src/TaskBeacon.cpp @@ -22,21 +22,23 @@ void BeaconTask::pushButton() { } bool BeaconTask::setup(System &system) { - if (_instances++ == 0 && system.getBoardConfig()->Button.Pin != -1) { - _userButton = OneButton(system.getBoardConfig()->Button.Pin, true, true); +#ifdef KEY_BUILTIN + if (_instances++ == 0 && KEY_BUILTIN != 0) { + _userButton = OneButton(KEY_BUILTIN, true, true); _userButton.attachClick(pushButton); _send_update = false; } +#endif _useGps = system.getUserConfig()->beacon.use_gps; if (_useGps) { - if (system.getBoardConfig()->Gps.Rx != -1) { - _ss.begin(9600, SERIAL_8N1, system.getBoardConfig()->Gps.Tx, system.getBoardConfig()->Gps.Rx); - } else { - system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "NO GPS found."); - _useGps = false; - } +#if defined(GPS_RX_PIN) && defined(GPS_TX_PIN) + _ss.begin(9600, SERIAL_8N1, GPS_TX_PIN, GPS_RX_PIN); +#else + system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, getName(), "NO GPS found."); + _useGps = false; +#endif } // setup beacon _beacon_timer.setTimeout(system.getUserConfig()->beacon.timeout * 60 * 1000); diff --git a/src/TaskDisplay.cpp b/src/TaskDisplay.cpp index 6d3ab19..ddb8a01 100644 --- a/src/TaskDisplay.cpp +++ b/src/TaskDisplay.cpp @@ -10,7 +10,7 @@ DisplayTask::~DisplayTask() { } bool DisplayTask::setup(System &system) { - system.getDisplay().setup(system.getBoardConfig()); + system.getDisplay().setup(); if (system.getUserConfig()->display.turn180) { system.getDisplay().turn180(); } diff --git a/src/TaskEth.cpp b/src/TaskEth.cpp index e185bce..552e7b6 100644 --- a/src/TaskEth.cpp +++ b/src/TaskEth.cpp @@ -78,27 +78,27 @@ EthTask::~EthTask() { bool EthTask::setup(System &system) { WiFi.onEvent(WiFiEvent); - if (system.getBoardConfig()->Ethernet.nReset != -1) { - pinMode(system.getBoardConfig()->Ethernet.nReset, OUTPUT); - digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0); - delay(200); - digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1); - delay(200); - digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0); - delay(200); - digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1); - } - - ETH.begin(system.getBoardConfig()->Ethernet.Addr, system.getBoardConfig()->Ethernet.Power, system.getBoardConfig()->Ethernet.MDC, system.getBoardConfig()->Ethernet.MDIO, system.getBoardConfig()->Ethernet.Type, system.getBoardConfig()->Ethernet.CLK); - - if (!system.getUserConfig()->network.DHCP) { - ETH.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2); - } - if (system.getUserConfig()->network.hostname.overwrite) { - ETH.setHostname(system.getUserConfig()->network.hostname.name.c_str()); - } else { - ETH.setHostname(system.getUserConfig()->callsign.c_str()); - } + // if (system.getBoardConfig()->Ethernet.nReset != -1) { + // pinMode(system.getBoardConfig()->Ethernet.nReset, OUTPUT); + // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0); + // delay(200); + // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1); + // delay(200); + // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0); + // delay(200); + // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1); + // } + // + // ETH.begin(system.getBoardConfig()->Ethernet.Addr, system.getBoardConfig()->Ethernet.Power, system.getBoardConfig()->Ethernet.MDC, system.getBoardConfig()->Ethernet.MDIO, system.getBoardConfig()->Ethernet.Type, system.getBoardConfig()->Ethernet.CLK); + // + // if (!system.getUserConfig()->network.DHCP) { + // ETH.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2); + //} + // if (system.getUserConfig()->network.hostname.overwrite) { + // ETH.setHostname(system.getUserConfig()->network.hostname.name.c_str()); + //} else { + // ETH.setHostname(system.getUserConfig()->callsign.c_str()); + //} return true; } diff --git a/src/TaskRadiolib.cpp b/src/TaskRadiolib.cpp index 332b822..6536a9d 100644 --- a/src/TaskRadiolib.cpp +++ b/src/TaskRadiolib.cpp @@ -25,17 +25,17 @@ bool RadiolibTask::setup(System &system) { const uint16_t preambleLength = 8; - if (system.getBoardConfig()->Lora.Modem == eSX1278) { - system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, getName(), "[%s] using SX1278", timeString().c_str()); - _modem = new Modem_SX1278(); - } else if (system.getBoardConfig()->Lora.Modem == eSX1268) { - system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, getName(), "[%s] using SX1268", timeString().c_str()); - _modem = new Modem_SX1268(); - } else { - system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, getName(), "[%s] Modem not correctly defined!", timeString().c_str()); - } +#ifdef USE_SX1278 + system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, getName(), "[%s] using SX1278", timeString().c_str()); + _modem = new Modem_SX1278(); +#elif defined(USE_SX1268) + system.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_DEBUG, getName(), "[%s] using SX1268", timeString().c_str()); + _modem = new Modem_SX1268(); +#else +#error "Modem not correctly defined!" +#endif - int16_t state = _modem->begin(system.getBoardConfig()->Lora, system.getUserConfig()->lora, preambleLength, setFlag); + int16_t state = _modem->begin(system.getUserConfig()->lora, preambleLength, setFlag); if (state != RADIOLIB_ERR_NONE) { decodeError(system, state); } diff --git a/src/TaskRadiolib.h b/src/TaskRadiolib.h index bb57a0f..f11c285 100644 --- a/src/TaskRadiolib.h +++ b/src/TaskRadiolib.h @@ -1,7 +1,6 @@ #ifndef TASK_LORA_H_ #define TASK_LORA_H_ -#include "BoardFinder/BoardFinder.h" #include "LoRaModem.h" #include "System/TaskManager.h" #include "project_configuration.h" diff --git a/src/project_configuration.h b/src/project_configuration.h index de0d383..dd30523 100644 --- a/src/project_configuration.h +++ b/src/project_configuration.h @@ -1,7 +1,6 @@ #ifndef PROJECT_CONFIGURATION_H_ #define PROJECT_CONFIGURATION_H_ -#include "BoardFinder/BoardFinder.h" #include "ConfigurationManagement/configuration.h" class Configuration { diff --git a/suppressions.txt b/suppressions.txt index 4c5c794..08a00e5 100644 --- a/suppressions.txt +++ b/suppressions.txt @@ -1,49 +1,14 @@ // cppcheck suppressions -assertWithSideEffect -// TODO: need to come back to these -//duplInheritedMember +unusedFunction -// TODO: -// "Using memset() on struct which contains a floating point number." -// tried: -// if (std::is_floating_point::value) { -// p = 0; -// in src/mesh/MemoryPool.h -//memsetClassFloat +// ignore "external" library issues +shadowFunction:*TimeLib.cpp +unreadVariable:*TimeLib.cpp -//knownConditionTrueFalse - -// no real downside/harm in these -//unusedFunction -//unusedPrivateFunction - -// most likely due to a cppcheck configuration issue (like missing an include) -//syntaxError - -// try to quiet a few -//useInitializationList:src/main.cpp -//useInitializationList - -// I don't want to go back and cast function pointers just to appease a tools insatiable thirst for immutability -//constParameterCallback - -//redundantInitialization - -//cstyleCast:src/mesh/MemoryPool.h:71 -//cstyleCast +// ignore bitmask from ArduinoJson +badBitmaskCheck:*project_configuration.cpp // ignore stuff that is not ours *:.pio/* *:*/libdeps/* -*:*/generated/* -//noExplicitConstructor:*/mqtt/* -//postfixOperator:*/mqtt/* - -// these two caused issues -//missingOverride -//virtualCallInConstructor - -//passedByValue:*/RedirectablePrint.h - -//internalAstError:*/CrossPlatformCryptoEngine.cpp diff --git a/test/test_BoardFinder/test.cpp b/test/test_BoardFinder/test.cpp deleted file mode 100644 index 83230d8..0000000 --- a/test/test_BoardFinder/test.cpp +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include - -#include "BoardFinder/BoardFinder.h" - -std::list boardConfigs; -logging::Logger logger; -BoardFinder *finder = 0; - -void setUp(void) { - boardConfigs.push_back(&TTGO_LORA32_V1); - boardConfigs.push_back(&TTGO_LORA32_V2); - boardConfigs.push_back(&TTGO_T_Beam_V1_0); - boardConfigs.push_back(&LILYGO_POE_ETH_BOARD); - boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V1); - boardConfigs.push_back(&HELTEC_WIFI_LORA_32_V2); - - finder = new BoardFinder(boardConfigs); - - logger.setSerial(&Serial); -} - -void tearDown(void) { - delete finder; - finder = 0; -} - -void test_oled_found(void) { - bool found = false; - for (auto boardConfig : boardConfigs) { - if (finder->checkOledConfig(boardConfig, logger)) { - TEST_PRINTF("found: %s", boardConfig->Name.c_str()); - found = true; - break; - } - } - TEST_ASSERT_TRUE(found); -} - -void test_modem_found(void) { - bool found = false; - for (auto boardConfig : boardConfigs) { - if (finder->checkModemConfig(boardConfig)) { - TEST_PRINTF("found: %s", boardConfig->Name.c_str()); - found = true; - break; - } - } - TEST_ASSERT_TRUE(found); -} - -void test_search_board_config(void) { - BoardConfig const *boardConfig = finder->searchBoardConfig(logger); - TEST_ASSERT_NOT_NULL(boardConfig); -} - -void test_get_board_config(void) { - BoardConfig const *boardConfig = finder->getBoardConfig("LILYGO_POE_ETH_BOARD"); - TEST_ASSERT_NOT_NULL(boardConfig); -} - -void test_get_board_config_negative(void) { - BoardConfig const *boardConfig = finder->getBoardConfig("NO BOARD"); - TEST_ASSERT_NULL(boardConfig); -} - -void setup() { - UNITY_BEGIN(); - RUN_TEST(test_oled_found); - RUN_TEST(test_modem_found); - RUN_TEST(test_search_board_config); - RUN_TEST(test_get_board_config); - RUN_TEST(test_get_board_config_negative); - UNITY_END(); -} - -void loop() { -} diff --git a/variants/heltec_v1/platformio.ini b/variants/heltec_v1/platformio.ini new file mode 100644 index 0000000..79dbbb1 --- /dev/null +++ b/variants/heltec_v1/platformio.ini @@ -0,0 +1,6 @@ +[env:heltec-v1] +extends = esp32_base +board_level = extra +board = heltec_wifi_lora_32 +build_flags = + ${esp32_base.build_flags} -DHELTEC_V1 -DUSE_SX1278 diff --git a/variants/heltec_v2/platformio.ini b/variants/heltec_v2/platformio.ini new file mode 100644 index 0000000..22b0520 --- /dev/null +++ b/variants/heltec_v2/platformio.ini @@ -0,0 +1,6 @@ +[env:heltec-v2_0] +extends = esp32_base +board = heltec_wifi_lora_32_V2 +board_level = extra +build_flags = + ${esp32_base.build_flags} -DHELTEC_V2_0 -DUSE_SX1278 diff --git a/variants/heltec_v3/platformio.ini b/variants/heltec_v3/platformio.ini new file mode 100644 index 0000000..2f37728 --- /dev/null +++ b/variants/heltec_v3/platformio.ini @@ -0,0 +1,5 @@ +[env:heltec-v3] +extends = esp32s3_base +board = heltec_wifi_lora_32_V3 +build_flags = + ${esp32s3_base.build_flags} -DHELTEC_V3 -DUSE_SX1268 diff --git a/variants/t_internet_poe/platformio.ini b/variants/t_internet_poe/platformio.ini new file mode 100644 index 0000000..d475dc3 --- /dev/null +++ b/variants/t_internet_poe/platformio.ini @@ -0,0 +1,5 @@ +[env:t_internet_poe] +extends = esp32_base +board = esp32doit-devkit-v1 +build_flags = + ${esp32_base.build_flags} -DTINTERNET_POE -DOLED_SDA=33 -DOLED_SCL=32 -DLORA_SCK=14 -DLORA_MISO=2 -DLORA_MOSI=15 -DLORA_CS=12 -DLORA_IRQ=36 -DLORA_RST=4 -DUSE_SX1278 diff --git a/variants/tbeam/platformio.ini b/variants/tbeam/platformio.ini new file mode 100644 index 0000000..0fffcb1 --- /dev/null +++ b/variants/tbeam/platformio.ini @@ -0,0 +1,6 @@ +; The 1.0 release of the TBEAM board +[env:tbeam] +extends = esp32_base +board = ttgo-t-beam +build_flags = + ${esp32_base.build_flags} -DTBEAM_V10 -DUSE_SX1278 -DGPS_RX_PIN=34 -DGPS_TX_PIN=12 diff --git a/variants/tlora_v1/platformio.ini b/variants/tlora_v1/platformio.ini new file mode 100644 index 0000000..d61fd6d --- /dev/null +++ b/variants/tlora_v1/platformio.ini @@ -0,0 +1,5 @@ +[env:tlora-v1] +extends = esp32_base +board = ttgo-lora32-v1 +build_flags = + ${esp32_base.build_flags} -DTLORA_V1 -DRESET_OLED=16 -DUSE_SX1278 diff --git a/variants/tlora_v2/platformio.ini b/variants/tlora_v2/platformio.ini index 208d98c..1716998 100644 --- a/variants/tlora_v2/platformio.ini +++ b/variants/tlora_v2/platformio.ini @@ -1,7 +1,6 @@ - [env:tlora-v2] extends = esp32_base board = ttgo-lora32-v1 board_level = extra build_flags = - ${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2 + ${esp32_base.build_flags} -DTLORA_V2 -DUSE_SX1278 diff --git a/variants/tlora_v2/variant.h b/variants/tlora_v2/variant.h deleted file mode 100644 index c52db5b..0000000 --- a/variants/tlora_v2/variant.h +++ /dev/null @@ -1,18 +0,0 @@ -#define BATTERY_PIN 35 // A battery voltage measurement pin, voltage divider connected here to measure battery voltage -#define ADC_CHANNEL ADC1_GPIO35_CHANNEL - -#define I2C_SDA 21 // I2C pins for this board -#define I2C_SCL 22 - -#define VEXT_ENABLE 21 // active low, powers the oled display and the lora antenna boost -#define LED_PIN 25 // If defined we will blink this LED -#define BUTTON_PIN \ - 0 // If defined, this will be used for user button presses, if your board doesn't have a physical switch, you can wire one - // between this pin and ground -#define BUTTON_NEED_PULLUP - -#define USE_RF95 -#define LORA_DIO0 26 // a No connect on the SX1262 module -#define LORA_RESET 14 -#define LORA_DIO1 33 // Must be manually wired: https://www.thethingsnetwork.org/forum/t/big-esp32-sx127x-topic-part-3/18436 -#define LORA_DIO2 32 // Not really used From 36511531ae3d009f787e7647e3076b7aaf237a82 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Wed, 27 Sep 2023 19:31:35 +0000 Subject: [PATCH 03/13] update tbeam axp2101 --- .vscode/settings.json | 6 +- platformio.ini | 2 +- src/LoRa_APRS_iGate.cpp | 29 +-- src/PowerManagement/power_management.cpp | 217 +++++++++++++++++++++-- src/PowerManagement/power_management.h | 78 +++++++- variants/tbeam/platformio.ini | 3 +- variants/tbeam_axp2101/platformio.ini | 5 + 7 files changed, 302 insertions(+), 38 deletions(-) create mode 100644 variants/tbeam_axp2101/platformio.ini diff --git a/.vscode/settings.json b/.vscode/settings.json index 9f66321..d3dcb64 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -43,6 +43,8 @@ "streambuf": "cpp", "cinttypes": "cpp", "utility": "cpp", - "typeinfo": "cpp" + "typeinfo": "cpp", + "string": "cpp", + "string_view": "cpp" } -} \ No newline at end of file +} diff --git a/platformio.ini b/platformio.ini index 95f358e..7caacfb 100644 --- a/platformio.ini +++ b/platformio.ini @@ -52,7 +52,7 @@ monitor_speed = 115200 lib_deps = bblanchon/ArduinoJson @ 6.21.3 - lewisxhe/AXP202X_Library @ 1.1.3 + lewisxhe/XPowersLib @ 0.1.8 peterus/APRS-Decoder-Lib @ 0.0.6 peterus/esp-logger @ 1.0.0 peterus/ESP-FTP-Server-Lib @ 0.14.0 diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 06a4555..0f44123 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -35,6 +35,15 @@ TaskQueue> toMQTT; System LoRaSystem; Configuration userConfig; +#ifdef HAS_AXP192 +AXP192 axp; +PowerManagement *powerManagement = &axp; +#endif +#ifdef HAS_AXP2101 +AXP2101 axp; +PowerManagement *powerManagement = &axp; +#endif + DisplayTask displayTask; // ModemTask modemTask(fromModem, toModem); RadiolibTask modemTask(fromModem, toModem); @@ -68,21 +77,21 @@ void setup() { } }*/ -#ifdef TBEAM_V10 +#if defined(HAS_AXP192) || defined(HAS_AXP2101) Wire.begin(SDA, SCL); - PowerManagement powerManagement; - if (!powerManagement.begin(Wire)) { - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "AXP192 init done!"); + if (powerManagement->begin(Wire)) { + LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "PMU", "init done!"); } else { - LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "AXP192 init failed!"); + LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, "PMU", "init failed!"); } - powerManagement.activateLoRa(); - powerManagement.activateOLED(); + powerManagement->activateLoRa(); + powerManagement->activateOLED(); if (userConfig.beacon.use_gps) { - powerManagement.activateGPS(); + powerManagement->activateGPS(); } else { - powerManagement.deactivateGPS(); + powerManagement->deactivateGPS(); } + // powerManagement->activateMeasurement(); #endif LoRaSystem.setUserConfig(&userConfig); @@ -98,7 +107,7 @@ void setup() { tcpip = true; } -#ifdef TINTERNET_POE +#ifdef T_INTERNET_POE LoRaSystem.getTaskManager().addAlwaysRunTask(ðTask); tcpip = true; #endif diff --git a/src/PowerManagement/power_management.cpp b/src/PowerManagement/power_management.cpp index 99037be..06af01f 100644 --- a/src/PowerManagement/power_management.cpp +++ b/src/PowerManagement/power_management.cpp @@ -1,37 +1,218 @@ +#include +#include #include "power_management.h" -PowerManagement::PowerManagement() : axp() { +AXP192::AXP192() { } -bool PowerManagement::begin(TwoWire &port) { - bool result = axp.begin(port, AXP192_SLAVE_ADDRESS); - if (!result) { - axp.setDCDC1Voltage(3300); +// cppcheck-suppress unusedFunction +bool AXP192::begin(TwoWire &port) { + _pmu = new XPowersAXP192(port); + if (!_pmu->init()) { + delete _pmu; + _pmu = 0; + return false; } - return result; + + // lora radio power channel + _pmu->setPowerChannelVoltage(XPOWERS_LDO2, 3300); + + // oled module power channel, + // disable it will cause abnormal communication between boot and AXP power supply, + // do not turn it off + _pmu->setPowerChannelVoltage(XPOWERS_DCDC1, 3300); + + // gnss module power channel - now turned on in setGpsPower + _pmu->setPowerChannelVoltage(XPOWERS_LDO3, 3300); + + // protected oled power source + //_pmu->setProtectedChannel(XPOWERS_DCDC1); + // protected esp32 power source + _pmu->setProtectedChannel(XPOWERS_DCDC3); + + // disable not use channel + _pmu->disablePowerOutput(XPOWERS_DCDC2); + + // disable all axp chip interrupt + _pmu->disableIRQ(XPOWERS_AXP192_ALL_IRQ); + + // Set constant current charging current + _pmu->setChargerConstantCurr(XPOWERS_AXP192_CHG_CUR_780MA); + + // Set up the charging voltage + _pmu->setChargeTargetVoltage(XPOWERS_AXP192_CHG_VOL_4V2); + + _pmu->setChargingLedMode(XPOWERS_CHG_LED_CTRL_CHG); + + return true; } -void PowerManagement::activateLoRa() { - axp.setPowerOutPut(AXP192_LDO2, AXP202_ON); +// cppcheck-suppress unusedFunction +void AXP192::activateLoRa() { + _pmu->enablePowerOutput(XPOWERS_LDO2); } -void PowerManagement::deactivateLoRa() { - axp.setPowerOutPut(AXP192_LDO2, AXP202_OFF); +// cppcheck-suppress unusedFunction +void AXP192::deactivateLoRa() { + _pmu->disablePowerOutput(XPOWERS_LDO2); } -void PowerManagement::activateGPS() { - axp.setPowerOutPut(AXP192_LDO3, AXP202_ON); +// cppcheck-suppress unusedFunction +void AXP192::activateGPS() { + _pmu->enablePowerOutput(XPOWERS_LDO3); } -void PowerManagement::deactivateGPS() { - axp.setPowerOutPut(AXP192_LDO3, AXP202_OFF); +// cppcheck-suppress unusedFunction +void AXP192::deactivateGPS() { + _pmu->disablePowerOutput(XPOWERS_LDO3); } -void PowerManagement::activateOLED() { - axp.setPowerOutPut(AXP192_DCDC1, AXP202_ON); +// cppcheck-suppress unusedFunction +void AXP192::activateOLED() { + _pmu->enablePowerOutput(XPOWERS_DCDC1); } -void PowerManagement::deactivateOLED() { - axp.setPowerOutPut(AXP192_DCDC1, AXP202_OFF); +// cppcheck-suppress unusedFunction +void AXP192::deactivateOLED() { + _pmu->disablePowerOutput(XPOWERS_DCDC1); +} + +// cppcheck-suppress unusedFunction +void AXP192::activateMeasurement() { + _pmu->enableBattVoltageMeasure(); +} + +// cppcheck-suppress unusedFunction +void AXP192::deactivateMeasurement() { + _pmu->disableBattVoltageMeasure(); +} + +// cppcheck-suppress unusedFunction +double AXP192::getBatteryVoltage() { + return _pmu->getBattVoltage() / 1000.0; +} + +// cppcheck-suppress unusedFunction +double AXP192::getBatteryChargeDischargeCurrent() { + if (isCharging()) { + return ((XPowersAXP192 *)_pmu)->getBatteryChargeCurrent(); + } + return -1.0 * ((XPowersAXP192 *)_pmu)->getBattDischargeCurrent(); +} + +bool AXP192::isBatteryConnect() { + return _pmu->isBatteryConnect(); +} + +bool AXP192::isCharging() { + return _pmu->isCharging(); +} + +AXP2101::AXP2101() { +} + +// cppcheck-suppress unusedFunction +bool AXP2101::begin(TwoWire &port) { + _pmu = new XPowersAXP2101(port); + if (!_pmu->init()) { + delete _pmu; + _pmu = 0; + return false; + } + + // Unuse power channel + _pmu->disablePowerOutput(XPOWERS_DCDC2); + _pmu->disablePowerOutput(XPOWERS_DCDC3); + _pmu->disablePowerOutput(XPOWERS_DCDC4); + _pmu->disablePowerOutput(XPOWERS_DCDC5); + _pmu->disablePowerOutput(XPOWERS_ALDO1); + _pmu->disablePowerOutput(XPOWERS_ALDO4); + _pmu->disablePowerOutput(XPOWERS_BLDO1); + _pmu->disablePowerOutput(XPOWERS_BLDO2); + _pmu->disablePowerOutput(XPOWERS_DLDO1); + _pmu->disablePowerOutput(XPOWERS_DLDO2); + + // GNSS RTC PowerVDD 3300mV + _pmu->setPowerChannelVoltage(XPOWERS_VBACKUP, 3300); + _pmu->enablePowerOutput(XPOWERS_VBACKUP); + + // LoRa VDD 3300mV + _pmu->setPowerChannelVoltage(XPOWERS_ALDO2, 3300); + _pmu->enablePowerOutput(XPOWERS_ALDO2); + + // GNSS VDD 3300mV + _pmu->setPowerChannelVoltage(XPOWERS_ALDO3, 3300); + _pmu->enablePowerOutput(XPOWERS_ALDO3); + + // disable all axp chip interrupt + _pmu->disableIRQ(XPOWERS_AXP2101_ALL_IRQ); + + // Set constant current charging current + _pmu->setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_800MA); + + // Set up the charging voltage + _pmu->setChargeTargetVoltage(XPOWERS_AXP2101_CHG_VOL_4V2); + + _pmu->setChargingLedMode(XPOWERS_CHG_LED_CTRL_CHG); + + return true; +} + +// cppcheck-suppress unusedFunction +void AXP2101::activateLoRa() { + _pmu->enablePowerOutput(XPOWERS_ALDO2); +} + +// cppcheck-suppress unusedFunction +void AXP2101::deactivateLoRa() { + _pmu->disablePowerOutput(XPOWERS_ALDO2); +} + +// cppcheck-suppress unusedFunction +void AXP2101::activateGPS() { + _pmu->enablePowerOutput(XPOWERS_ALDO3); +} + +// cppcheck-suppress unusedFunction +void AXP2101::deactivateGPS() { + _pmu->disablePowerOutput(XPOWERS_ALDO3); +} + +// cppcheck-suppress unusedFunction +void AXP2101::activateOLED() { + _pmu->enablePowerOutput(XPOWERS_DCDC1); +} + +// cppcheck-suppress unusedFunction +void AXP2101::deactivateOLED() { + _pmu->disablePowerOutput(XPOWERS_DCDC1); +} + +// cppcheck-suppress unusedFunction +void AXP2101::activateMeasurement() { + _pmu->enableBattVoltageMeasure(); +} + +// cppcheck-suppress unusedFunction +void AXP2101::deactivateMeasurement() { + _pmu->disableBattVoltageMeasure(); +} + +// cppcheck-suppress unusedFunction +double AXP2101::getBatteryVoltage() { + return _pmu->getBattVoltage() / 1000.0; +} + +// cppcheck-suppress unusedFunction +double AXP2101::getBatteryChargeDischargeCurrent() { + return 0.0; +} + +bool AXP2101::isBatteryConnect() { + return _pmu->isBatteryConnect(); +} + +bool AXP2101::isCharging() { + return _pmu->isCharging(); } diff --git a/src/PowerManagement/power_management.h b/src/PowerManagement/power_management.h index 156c144..45ff6ea 100644 --- a/src/PowerManagement/power_management.h +++ b/src/PowerManagement/power_management.h @@ -1,12 +1,43 @@ #ifndef POWER_MANAGEMENT_H_ #define POWER_MANAGEMENT_H_ -#include -#include +#include +#include class PowerManagement { public: - PowerManagement(); + ~PowerManagement() { + } + + virtual bool begin(TwoWire &port) = 0; + + virtual void activateLoRa() = 0; + virtual void deactivateLoRa() = 0; + + virtual void activateGPS() = 0; + virtual void deactivateGPS() = 0; + + virtual void activateOLED() = 0; + virtual void deactivateOLED() = 0; + + virtual void activateMeasurement() = 0; + virtual void deactivateMeasurement() = 0; + + virtual double getBatteryVoltage() = 0; + + virtual double getBatteryChargeDischargeCurrent() = 0; + + virtual bool isBatteryConnect() = 0; + virtual bool isCharging() = 0; + +protected: + XPowersLibInterface *_pmu = 0; +}; + +class AXP192 : public PowerManagement { +public: + AXP192(); + bool begin(TwoWire &port); void activateLoRa(); @@ -18,8 +49,45 @@ public: void activateOLED(); void deactivateOLED(); -private: - AXP20X_Class axp; + void enableChgLed(); + void disableChgLed(); + + void activateMeasurement(); + void deactivateMeasurement(); + + double getBatteryVoltage(); + double getBatteryChargeDischargeCurrent(); + + bool isBatteryConnect(); + bool isCharging(); +}; + +class AXP2101 : public PowerManagement { +public: + AXP2101(); + + bool begin(TwoWire &port); + + void activateLoRa(); + void deactivateLoRa(); + + void activateGPS(); + void deactivateGPS(); + + void activateOLED(); + void deactivateOLED(); + + void enableChgLed(); + void disableChgLed(); + + void activateMeasurement(); + void deactivateMeasurement(); + + double getBatteryVoltage(); + double getBatteryChargeDischargeCurrent(); + + bool isBatteryConnect(); + bool isCharging(); }; #endif diff --git a/variants/tbeam/platformio.ini b/variants/tbeam/platformio.ini index 0fffcb1..a21ee20 100644 --- a/variants/tbeam/platformio.ini +++ b/variants/tbeam/platformio.ini @@ -1,6 +1,5 @@ -; The 1.0 release of the TBEAM board [env:tbeam] extends = esp32_base board = ttgo-t-beam build_flags = - ${esp32_base.build_flags} -DTBEAM_V10 -DUSE_SX1278 -DGPS_RX_PIN=34 -DGPS_TX_PIN=12 + ${esp32_base.build_flags} -DTBEAM_V10 -DUSE_SX1278 -DGPS_RX_PIN=34 -DGPS_TX_PIN=12 -DHAS_AXP192 diff --git a/variants/tbeam_axp2101/platformio.ini b/variants/tbeam_axp2101/platformio.ini new file mode 100644 index 0000000..704e2dc --- /dev/null +++ b/variants/tbeam_axp2101/platformio.ini @@ -0,0 +1,5 @@ +[env:tbeam_axp2101] +extends = esp32_base +board = ttgo-t-beam +build_flags = + ${esp32_base.build_flags} -DTBEAM_V12_AXP2101 -DUSE_SX1278 -DGPS_RX_PIN=34 -DGPS_TX_PIN=12 -DHAS_AXP2101 From b4e7d8853b37d0a11758e5553bc5809a67a7b3fd Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Wed, 27 Sep 2023 19:31:55 +0000 Subject: [PATCH 04/13] update t internet poe --- src/TaskEth.cpp | 44 ++++++++++++++------------ variants/t_internet_poe/platformio.ini | 5 ++- 2 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/TaskEth.cpp b/src/TaskEth.cpp index 552e7b6..af04781 100644 --- a/src/TaskEth.cpp +++ b/src/TaskEth.cpp @@ -78,27 +78,29 @@ EthTask::~EthTask() { bool EthTask::setup(System &system) { WiFi.onEvent(WiFiEvent); - // if (system.getBoardConfig()->Ethernet.nReset != -1) { - // pinMode(system.getBoardConfig()->Ethernet.nReset, OUTPUT); - // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0); - // delay(200); - // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1); - // delay(200); - // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 0); - // delay(200); - // digitalWrite(system.getBoardConfig()->Ethernet.nReset, 1); - // } - // - // ETH.begin(system.getBoardConfig()->Ethernet.Addr, system.getBoardConfig()->Ethernet.Power, system.getBoardConfig()->Ethernet.MDC, system.getBoardConfig()->Ethernet.MDIO, system.getBoardConfig()->Ethernet.Type, system.getBoardConfig()->Ethernet.CLK); - // - // if (!system.getUserConfig()->network.DHCP) { - // ETH.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2); - //} - // if (system.getUserConfig()->network.hostname.overwrite) { - // ETH.setHostname(system.getUserConfig()->network.hostname.name.c_str()); - //} else { - // ETH.setHostname(system.getUserConfig()->callsign.c_str()); - //} +#ifdef T_INTERNET_POE + if (ETH_NRESET != -1) { + pinMode(ETH_NRESET, OUTPUT); + digitalWrite(ETH_NRESET, 0); + delay(200); + digitalWrite(ETH_NRESET, 1); + delay(200); + digitalWrite(ETH_NRESET, 0); + delay(200); + digitalWrite(ETH_NRESET, 1); + } + + ETH.begin(ETH_ADDR, ETH_POWER, ETH_MDC, ETH_MDIO, (eth_phy_type_t)ETH_TYPE, (eth_clock_mode_t)ETH_CLOCK); + + if (!system.getUserConfig()->network.DHCP) { + ETH.config(system.getUserConfig()->network.static_.ip, system.getUserConfig()->network.static_.gateway, system.getUserConfig()->network.static_.subnet, system.getUserConfig()->network.static_.dns1, system.getUserConfig()->network.static_.dns2); + } + if (system.getUserConfig()->network.hostname.overwrite) { + ETH.setHostname(system.getUserConfig()->network.hostname.name.c_str()); + } else { + ETH.setHostname(system.getUserConfig()->callsign.c_str()); + } +#endif return true; } diff --git a/variants/t_internet_poe/platformio.ini b/variants/t_internet_poe/platformio.ini index d475dc3..c481092 100644 --- a/variants/t_internet_poe/platformio.ini +++ b/variants/t_internet_poe/platformio.ini @@ -2,4 +2,7 @@ extends = esp32_base board = esp32doit-devkit-v1 build_flags = - ${esp32_base.build_flags} -DTINTERNET_POE -DOLED_SDA=33 -DOLED_SCL=32 -DLORA_SCK=14 -DLORA_MISO=2 -DLORA_MOSI=15 -DLORA_CS=12 -DLORA_IRQ=36 -DLORA_RST=4 -DUSE_SX1278 + ${esp32_base.build_flags} -DT_INTERNET_POE + -DOLED_SDA=33 -DOLED_SCL=32 + -DLORA_SCK=14 -DLORA_MISO=2 -DLORA_MOSI=15 -DLORA_CS=12 -DLORA_IRQ=36 -DLORA_RST=4 -DUSE_SX1278 + -DETH_MDC=23 -DETH_MDIO=18 -DETH_NRESET=5 -DETH_ADDR=0 -DETH_POWER=-1 -DETH_CLOCK=3 -DETH_TYPE=0 From 5d07ae9e1c790af8b7bb63cf025540978123b996 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 22 Oct 2023 08:24:10 +0200 Subject: [PATCH 05/13] add t-beam-s3-core --- boards/tbeam-s3-core.json | 46 +++++++++++++++++++++ variants/tbeam-s3-core/pins_arduino.h | 57 +++++++++++++++++++++++++++ variants/tbeam-s3-core/platformio.ini | 9 +++++ 3 files changed, 112 insertions(+) create mode 100644 boards/tbeam-s3-core.json create mode 100644 variants/tbeam-s3-core/pins_arduino.h create mode 100644 variants/tbeam-s3-core/platformio.ini diff --git a/boards/tbeam-s3-core.json b/boards/tbeam-s3-core.json new file mode 100644 index 0000000..52c511c --- /dev/null +++ b/boards/tbeam-s3-core.json @@ -0,0 +1,46 @@ +{ + "build": { + "arduino": { + "ldscript": "esp32s3_out.ld" + }, + "core": "esp32", + "extra_flags": [ + "-DBOARD_HAS_PSRAM", + "-DLILYGO_TBEAM_S3_CORE", + "-DARDUINO_USB_CDC_ON_BOOT=1", + "-DARDUINO_USB_MODE=0", + "-DARDUINO_RUNNING_CORE=1", + "-DARDUINO_EVENT_RUNNING_CORE=1" + ], + "f_cpu": "240000000L", + "f_flash": "80000000L", + "flash_mode": "qio", + "hwids": [ + [ + "0X303A", + "0x1001" + ] + ], + "mcu": "esp32s3", + "variant": "tbeam-s3-core" + }, + "connectivity": [ + "wifi" + ], + "debug": { + "openocd_target": "esp32s3.cfg" + }, + "frameworks": [ + "arduino" + ], + "name": "LilyGo TBeam-S3-Core", + "upload": { + "flash_size": "8MB", + "maximum_ram_size": 327680, + "maximum_size": 8388608, + "require_upload_port": true, + "speed": 921600 + }, + "url": "http://www.lilygo.cn/", + "vendor": "LilyGo" +} diff --git a/variants/tbeam-s3-core/pins_arduino.h b/variants/tbeam-s3-core/pins_arduino.h new file mode 100644 index 0000000..c1c8061 --- /dev/null +++ b/variants/tbeam-s3-core/pins_arduino.h @@ -0,0 +1,57 @@ +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define USB_VID 0x303a +#define USB_PID 0x1001 + +#define EXTERNAL_NUM_INTERRUPTS 46 +#define NUM_DIGITAL_PINS 48 +#define NUM_ANALOG_INPUTS 20 + +#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1) +#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1) +#define digitalPinHasPWM(p) (p < 46) + +#define TX 43 +#define RX 44 + +// The default Wire will be mapped to PMU and RTC +#define SDA 42 +#define SCL 41 + +// Wire1 will be mapped to display and QMC6310 sensor +#define OLED_SDA 17 +#define OLED_SCL 18 + +// Default SPI will be mapped to Radio +#define SS 10 +#define MOSI 11 +#define MISO 13 +#define SCK 12 + +#define LORA_CS 10 +#define LORA_MOSI 11 +#define LORA_MISO 13 +#define LORA_SCK 12 +#define DIO0 -1 +#define RST_LoRa 5 +#define BUSY_LoRa 4 + +#define LORA_IRQ 1 +#define LORA_RST 5 + +// Another SPI bus shares SD card and QMI8653 inertial measurement sensor +#define SPI_MOSI (35) +#define SPI_SCK (36) +#define SPI_MISO (37) +#define SPI_CS (47) +#define IMU_CS (34) + +#define SDCARD_CS SPI_CS +#define IMU_INT (33) +// #define PMU_IRQ (40) +#define RTC_INT (14) + +#endif /* Pins_Arduino_h */ diff --git a/variants/tbeam-s3-core/platformio.ini b/variants/tbeam-s3-core/platformio.ini new file mode 100644 index 0000000..372d8d9 --- /dev/null +++ b/variants/tbeam-s3-core/platformio.ini @@ -0,0 +1,9 @@ +[env:tbeam-s3-core] +extends = esp32s3_base +board = tbeam-s3-core +build_flags = + ${esp32s3_base.build_flags} -Ivariants/tbeam-s3-core -DUSE_SX1268 -DHAS_AXP2101 -DGPS_RX_PIN=9 -DGPS_TX_PIN=8 + +#-DI2C_SDA=17 -DI2C_SCL=18 -DI2C_SDA1=42 -DI2C_SCL1=41 +# I2C_SDA1 and I2C_SCL1 - Used for PMU management and PCF8563 +# I2C_SDA and I2C_SCL - For QMC6310 sensors and screens From 4dca83c2cc019f494137096a86add625c9dfa24c Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 22 Oct 2023 08:24:23 +0200 Subject: [PATCH 06/13] remove debug prints in display --- src/Display/Display.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Display/Display.cpp b/src/Display/Display.cpp index 844d756..61f4496 100644 --- a/src/Display/Display.cpp +++ b/src/Display/Display.cpp @@ -9,7 +9,6 @@ Display::~Display() { } void Display::setup() { - Serial.println("oled reset"); #ifdef RESET_OLED pinMode(RESET_OLED, OUTPUT); digitalWrite(RESET_OLED, HIGH); @@ -18,16 +17,13 @@ void Display::setup() { delay(10); digitalWrite(RESET_OLED, HIGH); #endif - Serial.println("Wire begin"); #if defined(OLED_SDA) && defined(OLED_SCL) Wire.begin(OLED_SDA, OLED_SCL); #else Wire.begin(SDA, SCL); #endif - Serial.println("SSD1306 init"); _disp = new SSD1306(&Wire, 0x3C); - Serial.println("SSD1306 setup"); Bitmap bitmap(_disp->getWidth(), _disp->getHeight()); _disp->display(&bitmap); From a6e8085f316c33e1aaf0677632365a5067e5866a Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 22 Oct 2023 12:39:20 +0200 Subject: [PATCH 07/13] print board name on startup --- platformio.ini | 2 +- src/Board.cpp | 26 ++++++++++++++++++++++++++ src/Board.h | 8 ++++++++ src/Display/Display.cpp | 4 +++- src/Display/Display.h | 2 +- src/LoRa_APRS_iGate.cpp | 21 ++++++++++++--------- variants/tbeam-s3-core/platformio.ini | 2 +- 7 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 src/Board.cpp create mode 100644 src/Board.h diff --git a/platformio.ini b/platformio.ini index 7caacfb..234690d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -16,7 +16,7 @@ ;default_envs = heltec-v2_1 ;default_envs = tlora-v1 ;default_envs = tlora_v1_3 -default_envs = tlora-v2 +;default_envs = tlora-v2 ;default_envs = tlora-v2-1-1_6 extra_configs = diff --git a/src/Board.cpp b/src/Board.cpp new file mode 100644 index 0000000..d59d4f5 --- /dev/null +++ b/src/Board.cpp @@ -0,0 +1,26 @@ +#include "Board.h" + +String getBoardName() { +#if defined(HELTEC_V1) + return "Heltec V1"; +#elif defined(HELTEC_V2_0) + return "Heltec V2"; +#elif defined(HELTEC_V3) + return "Heltec V3"; +#elif defined(T_INTERNET_POE) + return "T-Internet PoE"; +#elif defined(TBEAM_V10) + return "T-Beam V1.0 and V1.1"; +#elif defined(TBEAM_V12_AXP2101) + return "T-Beam V1.2 AXP2101"; +#elif defined(TBEAM_S3_CORE) + return "T-Beam S3 Core"; +#elif defined(TLORA_V1) + return "T-LoRa32 V1"; +#elif defined(TLORA_V2) + return "T-LoRa32 V2"; +#else +#error "Board not defined!" +#endif + return ""; +} diff --git a/src/Board.h b/src/Board.h new file mode 100644 index 0000000..20a9adb --- /dev/null +++ b/src/Board.h @@ -0,0 +1,8 @@ +#ifndef BOARD_H_ +#define BOARD_H_ + +#include + +String getBoardName(); + +#endif diff --git a/src/Display/Display.cpp b/src/Display/Display.cpp index 61f4496..525eb0b 100644 --- a/src/Display/Display.cpp +++ b/src/Display/Display.cpp @@ -95,12 +95,14 @@ void Display::setStatusFrame(std::shared_ptr frame) { _statusFrame = frame; } -void Display::showSpashScreen(String firmwareTitle, String version) { +void Display::showSpashScreen(String firmwareTitle, String version, String boardname) { Bitmap bitmap(_disp); bitmap.drawString(0, 10, firmwareTitle); bitmap.drawString(0, 20, version); bitmap.drawString(0, 35, "by Peter Buchegger"); bitmap.drawString(30, 45, "OE5BPA"); + bitmap.drawString(0, 55, "for board"); + bitmap.drawString(0, 65, boardname); _disp->display(&bitmap); } diff --git a/src/Display/Display.h b/src/Display/Display.h index 54d6ddf..7474f3b 100644 --- a/src/Display/Display.h +++ b/src/Display/Display.h @@ -28,7 +28,7 @@ public: void setup(); // setup functions - void showSpashScreen(String firmwareTitle, String version); + void showSpashScreen(String firmwareTitle, String version, String boardname); void setStatusFrame(std::shared_ptr frame); void showStatusScreen(String header, String text); diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 0f44123..5ace9e3 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -1,12 +1,14 @@ #ifndef UNIT_TEST #include +#include +#include + #include "APRS-IS/APRS-IS.h" +#include "Board.h" #include "PowerManagement/power_management.h" #include "System/System.h" #include "System/TaskManager.h" -#include -#include #include "TaskAprsIs.h" #include "TaskBeacon.h" @@ -61,21 +63,22 @@ void setup() { Serial.begin(115200); LoRaSystem.getLogger().setSerial(&Serial); setWiFiLogger(&LoRaSystem.getLogger()); - delay(500); + delay(1000); LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "LoRa APRS iGate by OE5BPA (Peter Buchegger)"); LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Version: %s", VERSION); + LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Board: %s", getBoardName().c_str()); ProjectConfigurationManagement confmg(LoRaSystem.getLogger()); confmg.readConfiguration(LoRaSystem.getLogger(), userConfig); - /*LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Will start watchdog now..."); + LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_INFO, MODULE_NAME, "Will start watchdog now..."); if (esp_task_wdt_init(10, true) != ESP_OK) { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "Watchdog init failed!"); } else { if (esp_task_wdt_add(NULL) != ESP_OK) { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_WARN, MODULE_NAME, "Watchdog add failed!"); } - }*/ + } #if defined(HAS_AXP192) || defined(HAS_AXP2101) Wire.begin(SDA, SCL); @@ -128,16 +131,16 @@ void setup() { } } - // esp_task_wdt_reset(); + esp_task_wdt_reset(); LoRaSystem.getTaskManager().setup(LoRaSystem); - LoRaSystem.getDisplay().showSpashScreen("LoRa APRS iGate", VERSION); + LoRaSystem.getDisplay().showSpashScreen("LoRa APRS iGate", VERSION, getBoardName()); if (userConfig.callsign == "NOCALL-10") { LoRaSystem.getLogger().log(logging::LoggerLevel::LOGGER_LEVEL_ERROR, MODULE_NAME, "You have to change your settings in 'data/is-cfg.json' and upload it via 'Upload File System image'!"); LoRaSystem.getDisplay().showStatusScreen("ERROR", "You have to change your settings in 'data/is-cfg.json' and upload it via \"Upload File System image\"!"); while (true) { - // esp_task_wdt_reset(); + esp_task_wdt_reset(); } } if ((!userConfig.aprs_is.active) && !(userConfig.digi.active)) { @@ -158,7 +161,7 @@ void setup() { volatile bool syslogSet = false; void loop() { - // esp_task_wdt_reset(); + esp_task_wdt_reset(); LoRaSystem.getTaskManager().loop(LoRaSystem); if (LoRaSystem.isWifiOrEthConnected() && LoRaSystem.getUserConfig()->syslog.active && !syslogSet) { LoRaSystem.getLogger().setSyslogServer(LoRaSystem.getUserConfig()->syslog.server, LoRaSystem.getUserConfig()->syslog.port, LoRaSystem.getUserConfig()->callsign); diff --git a/variants/tbeam-s3-core/platformio.ini b/variants/tbeam-s3-core/platformio.ini index 372d8d9..7d68186 100644 --- a/variants/tbeam-s3-core/platformio.ini +++ b/variants/tbeam-s3-core/platformio.ini @@ -2,7 +2,7 @@ extends = esp32s3_base board = tbeam-s3-core build_flags = - ${esp32s3_base.build_flags} -Ivariants/tbeam-s3-core -DUSE_SX1268 -DHAS_AXP2101 -DGPS_RX_PIN=9 -DGPS_TX_PIN=8 + ${esp32s3_base.build_flags} -Ivariants/tbeam-s3-core -DTBEAM_S3_CORE -DUSE_SX1268 -DHAS_AXP2101 -DGPS_RX_PIN=9 -DGPS_TX_PIN=8 #-DI2C_SDA=17 -DI2C_SCL=18 -DI2C_SDA1=42 -DI2C_SCL1=41 # I2C_SDA1 and I2C_SCL1 - Used for PMU management and PCF8563 From 7fbdee1dcd02197ed06cfab55982576a02305f25 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sat, 30 Dec 2023 23:17:39 +0100 Subject: [PATCH 08/13] remove strange usb mode --- boards/tbeam-s3-core.json | 1 - 1 file changed, 1 deletion(-) diff --git a/boards/tbeam-s3-core.json b/boards/tbeam-s3-core.json index 52c511c..09c439a 100644 --- a/boards/tbeam-s3-core.json +++ b/boards/tbeam-s3-core.json @@ -8,7 +8,6 @@ "-DBOARD_HAS_PSRAM", "-DLILYGO_TBEAM_S3_CORE", "-DARDUINO_USB_CDC_ON_BOOT=1", - "-DARDUINO_USB_MODE=0", "-DARDUINO_RUNNING_CORE=1", "-DARDUINO_EVENT_RUNNING_CORE=1" ], From 0ba2a0d074d8c0c8cdb91309896f461c7f542243 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 31 Dec 2023 00:13:19 +0100 Subject: [PATCH 09/13] workflow update --- .github/workflows/build_check.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml index ab2ee2e..5eebcc6 100644 --- a/.github/workflows/build_check.yml +++ b/.github/workflows/build_check.yml @@ -7,6 +7,9 @@ on: jobs: build: name: Compile Firmware + strategy: + matrix: + boards: [heltec-v1, tlora-v1, tbeam, t_internet_poe, heltec-v3, tlora-v2, heltec-v2_0, tbeam-s3-core, tbeam_axp2101] runs-on: ubuntu-latest steps: - uses: actions/cache@v3 @@ -27,12 +30,12 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - name: Build PlatformIO Project - run: pio run + run: pio run -e ${{ matrix.boards }} - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: firmware - path: .pio/build/lora_board/firmware.bin + path: .pio/build/**/firmware.bin formatting-check: name: Formatting Check @@ -68,7 +71,7 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - name: Run PlatformIO Check - run: pio check --fail-on-defect high --fail-on-defect medium --fail-on-defect low -e lora_board + run: pio check --fail-on-defect high --fail-on-defect medium --fail-on-defect low cppcheck-docker: name: Run cppcheck in Docker From 79dc53bc7dfaf70a1b60d313eee6fbf5e1e95cd6 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 31 Dec 2023 00:45:06 +0100 Subject: [PATCH 10/13] build_check.yml aktualisieren --- .github/workflows/build_check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml index 5eebcc6..355a718 100644 --- a/.github/workflows/build_check.yml +++ b/.github/workflows/build_check.yml @@ -103,3 +103,4 @@ jobs: github_token: ${{ secrets.PAT }} workflow_file_name: lora_aprs_igate.yml github_user: peterus + ref: ${{ github.ref_name }} From 4a5c1b7463f5fa9655f3f67462096f2cc342fdb8 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 31 Dec 2023 01:00:08 +0100 Subject: [PATCH 11/13] build_check.yml aktualisieren --- .github/workflows/build_check.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_check.yml b/.github/workflows/build_check.yml index 355a718..5f4b12f 100644 --- a/.github/workflows/build_check.yml +++ b/.github/workflows/build_check.yml @@ -92,15 +92,14 @@ jobs: name: Cppcheck Report path: output - hw_testing: - name: Hardware Testing - runs-on: ubuntu-latest - steps: - - uses: convictional/trigger-workflow-and-wait@v1.6.5 - with: - owner: peterus - repo: ESP-Boards - github_token: ${{ secrets.PAT }} - workflow_file_name: lora_aprs_igate.yml - github_user: peterus - ref: ${{ github.ref_name }} +# hw_testing: +# name: Hardware Testing +# runs-on: ubuntu-latest +# steps: +# - uses: convictional/trigger-workflow-and-wait@v1.6.5 +# with: +# owner: peterus +# repo: ESP-Boards +# github_token: ${{ secrets.PAT }} +# workflow_file_name: lora_aprs_igate.yml +# github_user: peterus From b0b20ea496e0539dc88eb24b5f643f1647c9d000 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 31 Dec 2023 10:59:43 +0100 Subject: [PATCH 12/13] fixing cppcheck --- src/PowerManagement/power_management.cpp | 4 +- src/PowerManagement/power_management.h | 58 +++++++++++------------- src/TaskBeacon.h | 2 +- 3 files changed, 29 insertions(+), 35 deletions(-) diff --git a/src/PowerManagement/power_management.cpp b/src/PowerManagement/power_management.cpp index 06af01f..6689686 100644 --- a/src/PowerManagement/power_management.cpp +++ b/src/PowerManagement/power_management.cpp @@ -96,9 +96,9 @@ double AXP192::getBatteryVoltage() { // cppcheck-suppress unusedFunction double AXP192::getBatteryChargeDischargeCurrent() { if (isCharging()) { - return ((XPowersAXP192 *)_pmu)->getBatteryChargeCurrent(); + return static_cast(_pmu)->getBatteryChargeCurrent(); } - return -1.0 * ((XPowersAXP192 *)_pmu)->getBattDischargeCurrent(); + return -1.0 * static_cast(_pmu)->getBattDischargeCurrent(); } bool AXP192::isBatteryConnect() { diff --git a/src/PowerManagement/power_management.h b/src/PowerManagement/power_management.h index 45ff6ea..98625bb 100644 --- a/src/PowerManagement/power_management.h +++ b/src/PowerManagement/power_management.h @@ -38,56 +38,50 @@ class AXP192 : public PowerManagement { public: AXP192(); - bool begin(TwoWire &port); + bool begin(TwoWire &port) override; - void activateLoRa(); - void deactivateLoRa(); + void activateLoRa() override; + void deactivateLoRa() override; - void activateGPS(); - void deactivateGPS(); + void activateGPS() override; + void deactivateGPS() override; - void activateOLED(); - void deactivateOLED(); + void activateOLED() override; + void deactivateOLED() override; - void enableChgLed(); - void disableChgLed(); + void activateMeasurement() override; + void deactivateMeasurement() override; - void activateMeasurement(); - void deactivateMeasurement(); + double getBatteryVoltage() override; + double getBatteryChargeDischargeCurrent() override; - double getBatteryVoltage(); - double getBatteryChargeDischargeCurrent(); - - bool isBatteryConnect(); - bool isCharging(); + bool isBatteryConnect() override; + bool isCharging() override; }; class AXP2101 : public PowerManagement { public: AXP2101(); - bool begin(TwoWire &port); + bool begin(TwoWire &port) override; - void activateLoRa(); - void deactivateLoRa(); + void activateLoRa() override; + void deactivateLoRa() override; - void activateGPS(); - void deactivateGPS(); + void activateGPS() override; + void deactivateGPS() override; - void activateOLED(); - void deactivateOLED(); + void activateOLED() override; + void deactivateOLED() override; - void enableChgLed(); - void disableChgLed(); + void activateMeasurement() override; + void deactivateMeasurement() override; - void activateMeasurement(); - void deactivateMeasurement(); + double getBatteryVoltage() override; + double getBatteryChargeDischargeCurrent() override; - double getBatteryVoltage(); - double getBatteryChargeDischargeCurrent(); - - bool isBatteryConnect(); - bool isCharging(); + bool isBatteryConnect() override; + bool isCharging() override; }; #endif diff --git a/src/TaskBeacon.h b/src/TaskBeacon.h index 0a8c565..39af9b2 100644 --- a/src/TaskBeacon.h +++ b/src/TaskBeacon.h @@ -31,7 +31,7 @@ private: static uint _instances; static OneButton _userButton; static bool _send_update; - static void pushButton(); + static void pushButton(); // cppcheck-suppress unusedPrivateFunction }; #endif From e6e946dc37d05c5e8442d3aa0b0929a7d9fc733f Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Sun, 31 Dec 2023 11:06:59 +0100 Subject: [PATCH 13/13] fixing cppcheck --- src/LoRa_APRS_iGate.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp index 5ace9e3..f2a6797 100644 --- a/src/LoRa_APRS_iGate.cpp +++ b/src/LoRa_APRS_iGate.cpp @@ -112,10 +112,10 @@ void setup() { #ifdef T_INTERNET_POE LoRaSystem.getTaskManager().addAlwaysRunTask(ðTask); - tcpip = true; + tcpip = true; // cppcheck-suppress redundantAssignment #endif - if (tcpip) { + if (tcpip) { // cppcheck-suppress knownConditionTrueFalse LoRaSystem.getTaskManager().addTask(&otaTask); LoRaSystem.getTaskManager().addTask(&ntpTask); if (userConfig.ftp.active) {