diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index 708cd896747..95b721e67d4 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -11,6 +11,8 @@ #ifdef ARCH_PORTDUINO #include "PortduinoGlue.h" +#include +#include #include #endif @@ -60,6 +62,11 @@ void tftSetup(void) } else #elif defined(USE_FRAMEBUFFER) if (portduino_config.displayPanel == fb) { + // Rotation from yaml Display.OffsetRotate: 1=90, 2=180, 3=270 deg + char rbuf[4]; + snprintf(rbuf, sizeof(rbuf), "%d", portduino_config.displayRotate ? (portduino_config.displayOffsetRotate & 3) : 0); + if (setenv("MESHTASTIC_FB_ROTATION", rbuf, 1) != 0) + LOG_ERROR("Failed to set MESHTASTIC_FB_ROTATION, framebuffer will use its default rotation"); if (portduino_config.displayWidth && portduino_config.displayHeight) displayConfig = DisplayDriverConfig(DisplayDriverConfig::device_t::FB, (uint16_t)portduino_config.displayWidth, (uint16_t)portduino_config.displayHeight); diff --git a/src/mesh/InterfacesTemplates.cpp b/src/mesh/InterfacesTemplates.cpp index 6e27b56f394..78d08b05fb9 100644 --- a/src/mesh/InterfacesTemplates.cpp +++ b/src/mesh/InterfacesTemplates.cpp @@ -27,7 +27,7 @@ template class LR11x0Interface; template class LR11x0Interface; template class LR11x0Interface; #endif -#if defined(USE_LR2021) && RADIOLIB_EXCLUDE_LR2021 != 1 +#if (defined(USE_LR2021) || defined(ARCH_PORTDUINO)) && RADIOLIB_EXCLUDE_LR2021 != 1 template class LR20x0Interface; #endif #ifdef ARCH_STM32WL diff --git a/src/mesh/LR11x0Interface.cpp b/src/mesh/LR11x0Interface.cpp index bb87ca7ae98..c54ae91a6b1 100644 --- a/src/mesh/LR11x0Interface.cpp +++ b/src/mesh/LR11x0Interface.cpp @@ -379,4 +379,8 @@ template int16_t LR11x0Interface::getCurrentRSSI() #endif return (int16_t)round(rssi); } + +// Don't leak the aliases into the files InterfacesTemplates.cpp includes after this one. +#undef rfswitch_dio_pins +#undef rfswitch_table #endif diff --git a/src/mesh/LR2021Interface.cpp b/src/mesh/LR2021Interface.cpp index 9aa4d5f1ab0..a3ae448caea 100644 --- a/src/mesh/LR2021Interface.cpp +++ b/src/mesh/LR2021Interface.cpp @@ -1,6 +1,6 @@ #include "configuration.h" -#if defined(USE_LR2021) && RADIOLIB_EXCLUDE_LR2021 != 1 +#if (defined(USE_LR2021) || defined(ARCH_PORTDUINO)) && RADIOLIB_EXCLUDE_LR2021 != 1 #include "LR2021Interface.h" #include "error.h" diff --git a/src/mesh/LR20x0Interface.cpp b/src/mesh/LR20x0Interface.cpp index 3e5ec925060..c7d00e3ab31 100644 --- a/src/mesh/LR20x0Interface.cpp +++ b/src/mesh/LR20x0Interface.cpp @@ -1,6 +1,6 @@ #include "configuration.h" -#if defined(USE_LR2021) && RADIOLIB_EXCLUDE_LR2021 != 1 +#if (defined(USE_LR2021) || defined(ARCH_PORTDUINO)) && RADIOLIB_EXCLUDE_LR2021 != 1 #include "LR20x0Interface.h" #include "error.h" #include "mesh/NodeDB.h" @@ -381,4 +381,9 @@ template int16_t LR20x0Interface::getCurrentRSSI() float rssi = lora.getRSSI(false, true); return (int16_t)round(rssi); } + +// Don't leak the aliases into the files InterfacesTemplates.cpp includes after this one. +#undef lr20x0_rfswitch_dio_pins +#undef lr20x0_rfswitch_table +#undef LR20x0 #endif diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 9c199f5a7cd..208e8603d91 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -401,6 +401,8 @@ std::unique_ptr initLoRa() return std::unique_ptr(new LR1121Interface(hal, cs, irq, rst, busy)); case use_llcc68: return std::unique_ptr(new LLCC68Interface(hal, cs, irq, rst, busy)); + case use_lr2021: + return std::unique_ptr(new LR2021Interface(hal, cs, irq, rst, busy)); case use_simradio: return std::unique_ptr(new SimRadio); default: diff --git a/src/platform/portduino/PortduinoGlue.cpp b/src/platform/portduino/PortduinoGlue.cpp index 750396769a7..dd0f663f0f9 100644 --- a/src/platform/portduino/PortduinoGlue.cpp +++ b/src/platform/portduino/PortduinoGlue.cpp @@ -899,6 +899,10 @@ bool loadConfig(const char *configPath) portduino_config.lr1110_max_power = yamlConfig["Lora"]["LR1110_MAX_POWER"].as(22); if (yamlConfig["Lora"]["LR1120_MAX_POWER"]) portduino_config.lr1120_max_power = yamlConfig["Lora"]["LR1120_MAX_POWER"].as(13); + if (yamlConfig["Lora"]["LR2021_MAX_POWER"]) + portduino_config.lr2021_max_power = yamlConfig["Lora"]["LR2021_MAX_POWER"].as(22); + if (yamlConfig["Lora"]["LR2021_MAX_POWER_HF"]) + portduino_config.lr2021_max_power_hf = yamlConfig["Lora"]["LR2021_MAX_POWER_HF"].as(12); if (yamlConfig["Lora"]["RF95_MAX_POWER"]) portduino_config.rf95_max_power = yamlConfig["Lora"]["RF95_MAX_POWER"].as(20); diff --git a/src/platform/portduino/PortduinoGlue.h b/src/platform/portduino/PortduinoGlue.h index b5a47787e12..a6797c29236 100644 --- a/src/platform/portduino/PortduinoGlue.h +++ b/src/platform/portduino/PortduinoGlue.h @@ -47,7 +47,8 @@ enum lora_module_enum { use_lr1110, use_lr1120, use_lr1121, - use_llcc68 + use_llcc68, + use_lr2021 }; struct pinMapping { @@ -76,9 +77,10 @@ std::string exec(const char *cmd); extern struct portduino_config_struct { // Lora - std::map loraModules = { - {use_simradio, "sim"}, {use_autoconf, "auto"}, {use_rf95, "RF95"}, {use_sx1262, "sx1262"}, {use_sx1268, "sx1268"}, - {use_sx1280, "sx1280"}, {use_lr1110, "lr1110"}, {use_lr1120, "lr1120"}, {use_lr1121, "lr1121"}, {use_llcc68, "LLCC68"}}; + std::map loraModules = {{use_simradio, "sim"}, {use_autoconf, "auto"}, {use_rf95, "RF95"}, + {use_sx1262, "sx1262"}, {use_sx1268, "sx1268"}, {use_sx1280, "sx1280"}, + {use_lr1110, "lr1110"}, {use_lr1120, "lr1120"}, {use_lr1121, "lr1121"}, + {use_llcc68, "LLCC68"}, {use_lr2021, "lr2021"}}; std::map screen_names = {{x11, "X11"}, {fb, "FB"}, {st7789, "ST7789"}, {st7735, "ST7735"}, {st7735s, "ST7735S"}, {st7796, "ST7796"}, @@ -100,6 +102,8 @@ extern struct portduino_config_struct { int sx128x_max_power = 13; int lr1110_max_power = 22; int lr1120_max_power = 13; + int lr2021_max_power = 22; + int lr2021_max_power_hf = 12; int rf95_max_power = 20; bool dio2_as_rf_switch = false; int dio3_tcxo_voltage = 0; @@ -287,6 +291,10 @@ extern struct portduino_config_struct { out << YAML::Key << "LR1110_MAX_POWER" << YAML::Value << lr1110_max_power; if (lr1120_max_power != 13) out << YAML::Key << "LR1120_MAX_POWER" << YAML::Value << lr1120_max_power; + if (lr2021_max_power != 22) + out << YAML::Key << "LR2021_MAX_POWER" << YAML::Value << lr2021_max_power; + if (lr2021_max_power_hf != 12) + out << YAML::Key << "LR2021_MAX_POWER_HF" << YAML::Value << lr2021_max_power_hf; if (rf95_max_power != 20) out << YAML::Key << "RF95_MAX_POWER" << YAML::Value << rf95_max_power; diff --git a/variants/native/portduino/platformio.ini b/variants/native/portduino/platformio.ini index 006a4d0b286..76d3fec8294 100644 --- a/variants/native/portduino/platformio.ini +++ b/variants/native/portduino/platformio.ini @@ -431,7 +431,8 @@ build_src_filter = + + + + + - - - + ; template-only, amalgamated into InterfacesTemplates.cpp + - + + + +