diff --git a/.github/workflows/daily_packaging.yml b/.github/workflows/daily_packaging.yml
index 63d24687b..eb61554f2 100644
--- a/.github/workflows/daily_packaging.yml
+++ b/.github/workflows/daily_packaging.yml
@@ -30,7 +30,11 @@ jobs:
strategy:
fail-fast: false
matrix:
- series: [plucky, noble, jammy]
+ series:
+ - jammy # 22.04
+ - noble # 24.04
+ - plucky # 25.04
+ - questing # 25.10
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: ppa:meshtastic/daily
diff --git a/.github/workflows/pr_enforce_labels.yml b/.github/workflows/pr_enforce_labels.yml
new file mode 100644
index 000000000..93114e2c7
--- /dev/null
+++ b/.github/workflows/pr_enforce_labels.yml
@@ -0,0 +1,24 @@
+name: Check PR Labels
+
+on:
+ pull_request:
+ types: [opened, edited, labeled, unlabeled, synchronize, reopened]
+
+permissions:
+ pull-requests: read
+ contents: read
+
+jobs:
+ check-label:
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Check for PR labels
+ uses: actions/github-script@v7
+ with:
+ script: |
+ const labels = context.payload.pull_request.labels.map(label => label.name);
+ const requiredLabels = ['bugfix', 'enhancement', 'hardware-support', 'dependencies', 'submodules', 'github_actions', 'trunk'];
+ const hasRequiredLabel = labels.some(label => requiredLabels.includes(label));
+ if (!hasRequiredLabel) {
+ core.setFailed(`PR must have at least one of the following labels before it can be merged: ${requiredLabels.join(', ')}.`);
+ }
diff --git a/.github/workflows/release_channels.yml b/.github/workflows/release_channels.yml
index ed2de1717..e52e67227 100644
--- a/.github/workflows/release_channels.yml
+++ b/.github/workflows/release_channels.yml
@@ -20,7 +20,11 @@ jobs:
strategy:
fail-fast: false
matrix:
- series: [plucky, noble, jammy]
+ series:
+ - jammy # 22.04
+ - noble # 24.04
+ - plucky # 25.04
+ # - questing # 25.10
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: |-
@@ -99,8 +103,9 @@ jobs:
with:
base: ${{ github.event.repository.default_branch }}
branch: create-pull-request/bump-version
+ labels: github_actions
title: Bump release version
- commit-message: automated bumps
+ commit-message: Automated version bumps
add-paths: |
version.properties
debian/changelog
diff --git a/.github/workflows/update_protobufs.yml b/.github/workflows/update_protobufs.yml
index ccdcc19ae..3952d9d02 100644
--- a/.github/workflows/update_protobufs.yml
+++ b/.github/workflows/update_protobufs.yml
@@ -34,7 +34,9 @@ jobs:
uses: peter-evans/create-pull-request@v7
with:
branch: create-pull-request/update-protobufs
+ labels: submodules
title: Update protobufs and classes
+ commit-message: Update protobufs
add-paths: |
protobufs
src/mesh
diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml
index f0271c856..d6a8cc8c1 100644
--- a/.trunk/trunk.yaml
+++ b/.trunk/trunk.yaml
@@ -8,15 +8,15 @@ plugins:
uri: https://github.com/trunk-io/plugins
lint:
enabled:
- - checkov@3.2.450
- - renovate@41.29.1
+ - checkov@3.2.451
+ - renovate@41.38.1
- prettier@3.6.2
- - trufflehog@3.89.2
+ - trufflehog@3.90.0
- yamllint@1.37.1
- bandit@1.8.6
- trivy@0.64.1
- taplo@0.9.3
- - ruff@0.12.2
+ - ruff@0.12.4
- isort@6.0.1
- markdownlint@0.45.0
- oxipng@9.1.5
diff --git a/arch/portduino/portduino.ini b/arch/portduino/portduino.ini
index 03a8a6583..693ab63b7 100644
--- a/arch/portduino/portduino.ini
+++ b/arch/portduino/portduino.ini
@@ -39,7 +39,7 @@ build_flags =
-Isrc/platform/portduino
-DRADIOLIB_EEPROM_UNSUPPORTED
-DPORTDUINO_LINUX_HARDWARE
- -DHAS_UDP_MULTICAST
+ -DHAS_UDP_MULTICAST=1
-lpthread
-lstdc++fs
-lbluetooth
diff --git a/arch/stm32/stm32.ini b/arch/stm32/stm32.ini
index be1ed662f..153ca9f3e 100644
--- a/arch/stm32/stm32.ini
+++ b/arch/stm32/stm32.ini
@@ -23,14 +23,20 @@ build_flags =
-DMESHTASTIC_EXCLUDE_SCREEN=1
-DMESHTASTIC_EXCLUDE_MQTT=1
-DMESHTASTIC_EXCLUDE_BLUETOOTH=1
- -DMESHTASTIC_EXCLUDE_GPS=1
-DMESHTASTIC_EXCLUDE_WIFI=1
-DMESHTASTIC_EXCLUDE_TZ=1 ; Exclude TZ to save some flash space.
+ -DSERIAL_RX_BUFFER_SIZE=256 ; For GPS - the default of 64 is too small.
+ -DHAS_SCREEN=0 ; Always disable screen for STM32, it is not supported.
-DPIO_FRAMEWORK_ARDUINO_NANOLIB_FLOAT_PRINTF ; This is REQUIRED for at least traceroute debug prints - without it the length ends up uninitialized.
- ;-DDEBUG_MUTE
+ -DDEBUG_MUTE ; You can #undef DEBUG_MUTE in certain source files if you need the logs.
-fmerge-all-constants
-ffunction-sections
-fdata-sections
+ -DRADIOLIB_EXCLUDE_SX128X=1
+ -DRADIOLIB_EXCLUDE_SX127X=1
+ -DRADIOLIB_EXCLUDE_LR11X0=1
+ -DHAL_DAC_MODULE_ONLY
+ -DHAL_RNG_MODULE_ENABLED
build_src_filter =
${arduino_base.build_src_filter} - - - - - - - - - - - - - -
diff --git a/bin/org.meshtastic.meshtasticd.metainfo.xml b/bin/org.meshtastic.meshtasticd.metainfo.xml
index 291fe7a7c..116155807 100644
--- a/bin/org.meshtastic.meshtasticd.metainfo.xml
+++ b/bin/org.meshtastic.meshtasticd.metainfo.xml
@@ -87,6 +87,9 @@
+
+ https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.4
+
https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.3
diff --git a/bin/platformio-custom.py b/bin/platformio-custom.py
index be2a9ab71..fc1b4bc2e 100644
--- a/bin/platformio-custom.py
+++ b/bin/platformio-custom.py
@@ -3,6 +3,7 @@
# trunk-ignore-all(flake8/F821): For SConstruct imports
import sys
from os.path import join
+import subprocess
import json
import re
@@ -92,6 +93,17 @@ prefsLoc = projenv["PROJECT_DIR"] + "/version.properties"
verObj = readProps(prefsLoc)
print("Using meshtastic platformio-custom.py, firmware version " + verObj["long"] + " on " + env.get("PIOENV"))
+# get repository owner if git is installed
+try:
+ r_owner = (
+ subprocess.check_output(["git", "config", "--get", "remote.origin.url"])
+ .decode("utf-8")
+ .strip().split("/")
+ )
+ repo_owner = r_owner[-2] + "/" + r_owner[-1].replace(".git", "")
+except subprocess.CalledProcessError:
+ repo_owner = "unknown"
+
jsonLoc = env["PROJECT_DIR"] + "/userPrefs.jsonc"
with open(jsonLoc) as f:
jsonStr = re.sub("//.*","", f.read(), flags=re.MULTILINE)
@@ -117,6 +129,7 @@ flags = [
"-DAPP_VERSION=" + verObj["long"],
"-DAPP_VERSION_SHORT=" + verObj["short"],
"-DAPP_ENV=" + env.get("PIOENV"),
+ "-DAPP_REPO=" + repo_owner,
] + pref_flags
print ("Using flags:")
diff --git a/debian/changelog b/debian/changelog
index b5009028a..02a32f2f1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-meshtasticd (2.7.3.0) UNRELEASED; urgency=medium
+meshtasticd (2.7.4.0) UNRELEASED; urgency=medium
[ Austin Lane ]
* Initial packaging
@@ -31,4 +31,7 @@ meshtasticd (2.7.3.0) UNRELEASED; urgency=medium
[ Ubuntu ]
* GitHub Actions Automatic version bump
- -- Ubuntu Thu, 10 Jul 2025 16:29:27 +0000
+ [ ]
+ * GitHub Actions Automatic version bump
+
+ -- Sat, 19 Jul 2025 11:36:55 +0000
diff --git a/platformio.ini b/platformio.ini
index b1f89e5b4..c0eb6fedb 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -6,7 +6,9 @@ default_envs = tbeam
extra_configs =
arch/*/*.ini
- variants/*/platformio.ini
+ variants/*/platformio.ini ; Remove when all variants migrated to new dir structure
+ variants/*/*/platformio.ini
+ variants/*/diy/*/platformio.ini
src/graphics/niche/InkHUD/PlatformioConfig.ini
description = Meshtastic
diff --git a/protobufs b/protobufs
index 584f0a3a3..15c1fbde8 160000
--- a/protobufs
+++ b/protobufs
@@ -1 +1 @@
-Subproject commit 584f0a3a359103acf0bfce506c1b1fc32c639841
+Subproject commit 15c1fbde882de953dec279160fa984d0e00569d0
diff --git a/src/Power.cpp b/src/Power.cpp
index 522cf774f..298f08e0d 100644
--- a/src/Power.cpp
+++ b/src/Power.cpp
@@ -692,7 +692,16 @@ bool Power::setup()
void Power::shutdown()
{
- LOG_INFO("Shutting Down");
+
+#if HAS_SCREEN
+ if (screen) {
+ screen->showSimpleBanner("Shutting Down...", 0); // stays on screen
+ }
+#endif
+#if !defined(ARCH_STM32WL)
+ playShutdownMelody();
+#endif
+ nodeDB->saveToDisk();
#if defined(ARCH_NRF52) || defined(ARCH_ESP32) || defined(ARCH_RP2040)
#ifdef PIN_LED1
@@ -704,7 +713,11 @@ void Power::shutdown()
#ifdef PIN_LED3
ledOff(PIN_LED3);
#endif
- doDeepSleep(DELAY_FOREVER, false, false);
+ doDeepSleep(DELAY_FOREVER, false, true);
+#elif defined(ARCH_PORTDUINO)
+ exit(EXIT_SUCCESS);
+#else
+ LOG_WARN("FIXME implement shutdown for this platform");
#endif
}
diff --git a/src/buzz/BuzzerFeedbackThread.cpp b/src/buzz/BuzzerFeedbackThread.cpp
index 2bd3158a3..ce762c764 100644
--- a/src/buzz/BuzzerFeedbackThread.cpp
+++ b/src/buzz/BuzzerFeedbackThread.cpp
@@ -47,10 +47,6 @@ int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event)
playComboTune(); // Ping sent feedback
break;
- case INPUT_BROKER_SHUTDOWN:
- playShutdownMelody(); // Shutdown feedback
- break;
-
default:
// For other events, check if it's a printable character
if (event->kbchar >= 32 && event->kbchar <= 126) {
@@ -69,10 +65,7 @@ int32_t BuzzerFeedbackThread::runOnce()
// This thread is primarily event-driven, but we can use runOnce
// for any periodic tasks if needed in the future
- if (needsUpdate) {
- needsUpdate = false;
- // Could add any periodic processing here
- }
+ needsUpdate = false;
// Run every 100ms when active, less frequently when idle
return needsUpdate ? 100 : 1000;
diff --git a/src/gps/GPS.cpp b/src/gps/GPS.cpp
index 345c738d6..3a6b19f64 100644
--- a/src/gps/GPS.cpp
+++ b/src/gps/GPS.cpp
@@ -39,9 +39,9 @@ template std::size_t array_count(const T (&)[N])
return N;
}
-#if defined(NRF52840_XXAA) || defined(NRF52833_XXAA) || defined(ARCH_ESP32) || defined(ARCH_PORTDUINO)
-#if defined(RAK2560)
-HardwareSerial *GPS::_serial_gps = &Serial2;
+#if defined(NRF52840_XXAA) || defined(NRF52833_XXAA) || defined(ARCH_ESP32) || defined(ARCH_PORTDUINO) || defined(ARCH_STM32WL)
+#if defined(GPS_SERIAL_PORT)
+HardwareSerial *GPS::_serial_gps = &GPS_SERIAL_PORT;
#else
HardwareSerial *GPS::_serial_gps = &Serial1;
#endif
diff --git a/src/gps/RTC.cpp b/src/gps/RTC.cpp
index 5054be3f0..d574c9ad0 100644
--- a/src/gps/RTC.cpp
+++ b/src/gps/RTC.cpp
@@ -226,7 +226,14 @@ RTCSetResult perhapsSetRTC(RTCQuality q, struct tm &t)
time_t res = gm_mktime(&t);
struct timeval tv;
tv.tv_sec = res;
- tv.tv_usec = 0; // time.centisecond() * (10 / 1000);
+ tv.tv_usec = 0; // time.centisecond() * (10 / 1000);
+ uint32_t printableEpoch = tv.tv_sec; // Print lib only supports 32 bit but time_t can be 64 bit on some platforms
+#ifdef BUILD_EPOCH
+ if (tv.tv_sec < BUILD_EPOCH) {
+ LOG_WARN("Ignore time (%ld) before build epoch (%ld)!", printableEpoch, BUILD_EPOCH);
+ return RTCSetResultInvalidTime;
+ }
+#endif
// LOG_DEBUG("Got time from GPS month=%d, year=%d, unixtime=%ld", t.tm_mon, t.tm_year, tv.tv_sec);
if (t.tm_year < 0 || t.tm_year >= 300) {
diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp
index efddf0d65..f22a0d8a8 100644
--- a/src/graphics/Screen.cpp
+++ b/src/graphics/Screen.cpp
@@ -386,9 +386,7 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver)
#ifdef T_WATCH_S3
PMU->enablePowerOutput(XPOWERS_ALDO2);
#endif
-#ifdef HELTEC_TRACKER_V1_X
- uint8_t tft_vext_enabled = digitalRead(VEXT_ENABLE);
-#endif
+
#if !ARCH_PORTDUINO
dispdev->displayOn();
#endif
@@ -400,10 +398,7 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver)
dispdev->displayOn();
#ifdef HELTEC_TRACKER_V1_X
- // If the TFT VEXT power is not enabled, initialize the UI.
- if (!tft_vext_enabled) {
- ui->init();
- }
+ ui->init();
#endif
#ifdef USE_ST7789
pinMode(VTFT_CTRL, OUTPUT);
@@ -869,6 +864,8 @@ void Screen::setFrames(FrameFocus focus)
uint8_t previousFrameCount = framesetInfo.frameCount;
FramesetInfo fsi; // Location of specific frames, for applying focus parameter
+ graphics::UIRenderer::rebuildFavoritedNodes();
+
LOG_DEBUG("Show standard frames");
showingNormalScreen = true;
@@ -1004,7 +1001,7 @@ void Screen::setFrames(FrameFocus focus)
// Insert favorite frames *after* collecting them all
if (!favoriteFrames.empty()) {
fsi.positions.firstFavorite = numframes;
- for (auto &f : favoriteFrames) {
+ for (const auto &f : favoriteFrames) {
normalFrames[numframes++] = f;
indicatorIcons.push_back(icon_node);
}
@@ -1379,9 +1376,12 @@ int Screen::handleInputEvent(const InputEvent *event)
menuHandler::clockMenu();
} else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.lora) {
menuHandler::LoraRegionPicker();
- } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.textMessage &&
- devicestate.rx_text_message.from) {
- menuHandler::messageResponseMenu();
+ } else if (this->ui->getUiState()->currentFrame == framesetInfo.positions.textMessage) {
+ if (devicestate.rx_text_message.from) {
+ menuHandler::messageResponseMenu();
+ } else {
+ menuHandler::textMessageBaseMenu();
+ }
} else if (framesetInfo.positions.firstFavorite != 255 &&
this->ui->getUiState()->currentFrame >= framesetInfo.positions.firstFavorite &&
this->ui->getUiState()->currentFrame <= framesetInfo.positions.lastFavorite) {
diff --git a/src/graphics/SharedUIDisplay.cpp b/src/graphics/SharedUIDisplay.cpp
index 7cd876ac5..b458e54e4 100644
--- a/src/graphics/SharedUIDisplay.cpp
+++ b/src/graphics/SharedUIDisplay.cpp
@@ -206,7 +206,7 @@ void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *ti
timeX = screenW - xOffset - timeStrWidth + 3;
// === Show Mail or Mute Icon to the Left of Time ===
- int iconRightEdge = timeX - 1;
+ int iconRightEdge = timeX - 2;
bool showMail = false;
diff --git a/src/graphics/draw/ClockRenderer.cpp b/src/graphics/draw/ClockRenderer.cpp
index 8d7e91000..08466662c 100644
--- a/src/graphics/draw/ClockRenderer.cpp
+++ b/src/graphics/draw/ClockRenderer.cpp
@@ -186,7 +186,7 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1
{
display->clear();
display->setTextAlignment(TEXT_ALIGN_LEFT);
- int line = 1;
+
// === Set Title, Blank for Clock
const char *titleStr = "";
// === Header ===
@@ -218,7 +218,6 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1
hour %= 12;
if (hour == 0)
hour = 12;
- bool isPM = hour >= 12;
snprintf(timeString, sizeof(timeString), "%d:%02d", hour, minute);
} else {
snprintf(timeString, sizeof(timeString), "%02d:%02d", hour, minute);
@@ -230,6 +229,8 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1
#ifdef T_WATCH_S3
float scale = 1.5;
+#elif defined(CHATTER_2)
+ float scale = 1.1;
#else
float scale = 0.75;
if (isHighResolution) {
@@ -285,6 +286,9 @@ void drawDigitalClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int1
int yOffset = (isHighResolution) ? 3 : 1;
#ifdef SENSECAP_INDICATOR
yOffset -= 3;
+#endif
+#ifdef T_DECK
+ yOffset -= 5;
#endif
if (config.display.use_12h_clock) {
display->drawString(startingHourMinuteTextX + xOffset, (display->getHeight() - hourMinuteTextY) - yOffset - 2,
@@ -362,7 +366,7 @@ void drawAnalogClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
// hour hand radius and y coordinate
int16_t hourHandRadius = radius * 0.35;
if (isHighResolution) {
- int16_t hourHandRadius = radius * 0.55;
+ hourHandRadius = radius * 0.55;
}
int16_t hourHandNoonY = centerY - hourHandRadius;
@@ -381,7 +385,7 @@ void drawAnalogClockFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
bool isPM = hour >= 12;
if (config.display.use_12h_clock) {
- bool isPM = hour >= 12;
+ isPM = hour >= 12;
display->setFont(FONT_SMALL);
int yOffset = isHighResolution ? 1 : 0;
#ifdef USE_EINK
diff --git a/src/graphics/draw/DebugRenderer.cpp b/src/graphics/draw/DebugRenderer.cpp
index b1a901f99..5420d1b4b 100644
--- a/src/graphics/draw/DebugRenderer.cpp
+++ b/src/graphics/draw/DebugRenderer.cpp
@@ -483,7 +483,7 @@ void drawLoRaFocused(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x,
}
// ****************************
-// * Memory Screen *
+// * System Screen *
// ****************************
void drawMemoryUsage(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
{
@@ -593,7 +593,19 @@ void drawMemoryUsage(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x,
}
line += 1;
char appversionstr[35];
- snprintf(appversionstr, sizeof(appversionstr), "Ver.: %s", optstr(APP_VERSION));
+ snprintf(appversionstr, sizeof(appversionstr), "Ver: %s", optstr(APP_VERSION));
+ char appversionstr_formatted[40];
+ char *lastDot = strrchr(appversionstr, '.');
+ if (lastDot) {
+ size_t prefixLen = lastDot - appversionstr;
+ strncpy(appversionstr_formatted, appversionstr, prefixLen);
+ appversionstr_formatted[prefixLen] = '\0';
+ strncat(appversionstr_formatted, " (", sizeof(appversionstr_formatted) - strlen(appversionstr_formatted) - 1);
+ strncat(appversionstr_formatted, lastDot + 1, sizeof(appversionstr_formatted) - strlen(appversionstr_formatted) - 1);
+ strncat(appversionstr_formatted, ")", sizeof(appversionstr_formatted) - strlen(appversionstr_formatted) - 1);
+ strncpy(appversionstr, appversionstr_formatted, sizeof(appversionstr) - 1);
+ appversionstr[sizeof(appversionstr) - 1] = '\0';
+ }
int textWidth = display->getStringWidth(appversionstr);
int nameX = (SCREEN_WIDTH - textWidth) / 2;
display->drawString(nameX, getTextPositions(display)[line], appversionstr);
diff --git a/src/graphics/draw/MenuHandler.cpp b/src/graphics/draw/MenuHandler.cpp
index f6b250ebc..83198a7c5 100644
--- a/src/graphics/draw/MenuHandler.cpp
+++ b/src/graphics/draw/MenuHandler.cpp
@@ -344,14 +344,37 @@ void menuHandler::homeBaseMenu()
screen->showOverlayBanner(bannerOptions);
}
+void menuHandler::textMessageBaseMenu()
+{
+ enum optionsNumbers { Back, Preset, Freetext, enumEnd };
+
+ static const char *optionsArray[enumEnd] = {"Back"};
+ static int optionsEnumArray[enumEnd] = {Back};
+ int options = 1;
+ optionsArray[options] = "New Preset Msg";
+ optionsEnumArray[options++] = Preset;
+ if (kb_found) {
+ optionsArray[options] = "New Freetext Msg";
+ optionsEnumArray[options++] = Freetext;
+ }
+
+ BannerOverlayOptions bannerOptions;
+ bannerOptions.message = "Message Action";
+ bannerOptions.optionsArrayPtr = optionsArray;
+ bannerOptions.optionsEnumPtr = optionsEnumArray;
+ bannerOptions.optionsCount = options;
+ bannerOptions.bannerCallback = [](int selected) -> void {
+ if (selected == Preset) {
+ cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST);
+ } else if (selected == Freetext) {
+ cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST);
+ }
+ };
+ screen->showOverlayBanner(bannerOptions);
+}
+
void menuHandler::systemBaseMenu()
{
- // Check if brightness is supported
- bool hasSupportBrightness = false;
-#if defined(ST7789_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || defined(USE_SH1107) || HAS_TFT
- hasSupportBrightness = true;
-#endif
-
enum optionsNumbers { Back, Notifications, ScreenOptions, PowerMenu, Test, enumEnd };
static const char *optionsArray[enumEnd] = {"Back"};
static int optionsEnumArray[enumEnd] = {Back};
@@ -421,11 +444,11 @@ void menuHandler::favoriteBaseMenu()
bannerOptions.optionsEnumPtr = optionsEnumArray;
bannerOptions.optionsCount = options;
bannerOptions.bannerCallback = [](int selected) -> void {
- if (selected == 1) {
+ if (selected == Preset) {
cannedMessageModule->LaunchWithDestination(graphics::UIRenderer::currentFavoriteNodeNum);
- } else if (selected == 2 && kb_found) {
+ } else if (selected == Freetext) {
cannedMessageModule->LaunchFreetextWithDestination(graphics::UIRenderer::currentFavoriteNodeNum);
- } else if ((!kb_found && selected == 2) || (selected == 3 && kb_found)) {
+ } else if (selected == Remove) {
menuHandler::menuQueue = menuHandler::remove_favorite;
screen->runNow();
}
@@ -678,6 +701,7 @@ void menuHandler::TFTColorPickerMenu(OLEDDisplay *display)
bannerOptions.optionsArrayPtr = optionsArray;
bannerOptions.optionsCount = 10;
bannerOptions.bannerCallback = [display](int selected) -> void {
+#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(T_DECK) || HAS_TFT
uint8_t TFT_MESH_r = 0;
uint8_t TFT_MESH_g = 0;
uint8_t TFT_MESH_b = 0;
@@ -729,7 +753,6 @@ void menuHandler::TFTColorPickerMenu(OLEDDisplay *display)
screen->runNow();
}
-#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || HAS_TFT
if (selected != 0) {
display->setColor(BLACK);
display->fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
@@ -792,9 +815,8 @@ void menuHandler::shutdownMenu()
bannerOptions.optionsCount = 2;
bannerOptions.bannerCallback = [](int selected) -> void {
if (selected == 1) {
- IF_SCREEN(screen->showSimpleBanner("Shutting Down...", 0));
- nodeDB->saveToDisk();
- power->shutdown();
+ InputEvent event = {.inputEvent = (input_broker_event)INPUT_BROKER_SHUTDOWN, .kbchar = 0, .touchX = 0, .touchY = 0};
+ inputBroker->injectInputEvent(&event);
} else {
menuQueue = power_menu;
screen->runNow();
@@ -827,8 +849,9 @@ void menuHandler::removeFavoriteMenu()
bannerOptions.optionsCount = 2;
bannerOptions.bannerCallback = [](int selected) -> void {
if (selected == 1) {
+ LOG_INFO("Removing %x as favorite node", graphics::UIRenderer::currentFavoriteNodeNum);
nodeDB->set_favorite(false, graphics::UIRenderer::currentFavoriteNodeNum);
- screen->setFrames(graphics::Screen::FOCUS_PRESERVE);
+ screen->setFrames(graphics::Screen::FOCUS_DEFAULT);
}
};
screen->showOverlayBanner(bannerOptions);
@@ -924,23 +947,28 @@ void menuHandler::screenOptionsMenu()
{
// Check if brightness is supported
bool hasSupportBrightness = false;
-#if defined(ST7789_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || defined(USE_SH1107) || HAS_TFT
+#if defined(ST7789_CS) || defined(USE_OLED) || defined(USE_SSD1306) || defined(USE_SH1106) || defined(USE_SH1107)
hasSupportBrightness = true;
#endif
+#if defined(T_DECK)
+ // TDeck Doesn't seem to support brightness at all, at least not reliably
+ hasSupportBrightness = false;
+#endif
+
enum optionsNumbers { Back, Brightness, ScreenColor };
static const char *optionsArray[4] = {"Back"};
static int optionsEnumArray[4] = {Back};
int options = 1;
// Only show brightness for B&W displays
- if (hasSupportBrightness && !HAS_TFT) {
+ if (hasSupportBrightness) {
optionsArray[options] = "Brightness";
optionsEnumArray[options++] = Brightness;
}
// Only show screen color for TFT displays
-#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || HAS_TFT
+#if defined(HELTEC_MESH_NODE_T114) || defined(HELTEC_VISION_MASTER_T190) || defined(T_DECK) || HAS_TFT
optionsArray[options] = "Screen Color";
optionsEnumArray[options++] = ScreenColor;
#endif
diff --git a/src/graphics/draw/MenuHandler.h b/src/graphics/draw/MenuHandler.h
index 2273dbbed..1f989be79 100644
--- a/src/graphics/draw/MenuHandler.h
+++ b/src/graphics/draw/MenuHandler.h
@@ -48,6 +48,7 @@ class menuHandler
static void ClockFacePicker();
static void messageResponseMenu();
static void homeBaseMenu();
+ static void textMessageBaseMenu();
static void systemBaseMenu();
static void favoriteBaseMenu();
static void positionBaseMenu();
diff --git a/src/graphics/draw/NotificationRenderer.cpp b/src/graphics/draw/NotificationRenderer.cpp
index 7350c204f..d9cf280ac 100644
--- a/src/graphics/draw/NotificationRenderer.cpp
+++ b/src/graphics/draw/NotificationRenderer.cpp
@@ -156,7 +156,7 @@ void NotificationRenderer::drawNumberPicker(OLEDDisplay *display, OLEDDisplayUiS
resetBanner();
return;
}
- if (curSelected == numDigits) {
+ if (curSelected == static_cast(numDigits)) {
alertBannerCallback(currentNumber);
resetBanner();
return;
diff --git a/src/graphics/draw/UIRenderer.cpp b/src/graphics/draw/UIRenderer.cpp
index 9be8b04f4..71d92616f 100644
--- a/src/graphics/draw/UIRenderer.cpp
+++ b/src/graphics/draw/UIRenderer.cpp
@@ -24,6 +24,23 @@ extern graphics::Screen *screen;
namespace graphics
{
NodeNum UIRenderer::currentFavoriteNodeNum = 0;
+std::vector graphics::UIRenderer::favoritedNodes;
+
+void graphics::UIRenderer::rebuildFavoritedNodes()
+{
+ favoritedNodes.clear();
+ size_t total = nodeDB->getNumMeshNodes();
+ for (size_t i = 0; i < total; i++) {
+ meshtastic_NodeInfoLite *n = nodeDB->getMeshNodeByIndex(i);
+ if (!n || n->num == nodeDB->getNodeNum())
+ continue;
+ if (n->is_favorite)
+ favoritedNodes.push_back(n);
+ }
+
+ std::sort(favoritedNodes.begin(), favoritedNodes.end(),
+ [](const meshtastic_NodeInfoLite *a, const meshtastic_NodeInfoLite *b) { return a->num < b->num; });
+}
#if !MESHTASTIC_EXCLUDE_GPS
// GeoCoord object for coordinate conversions
@@ -201,27 +218,7 @@ void UIRenderer::drawNodes(OLEDDisplay *display, int16_t x, int16_t y, const mes
// **********************
void UIRenderer::drawNodeInfo(OLEDDisplay *display, const OLEDDisplayUiState *state, int16_t x, int16_t y)
{
- // --- Cache favorite nodes for the current frame only, to save computation ---
- static std::vector favoritedNodes;
- static int prevFrame = -1;
- // --- Only rebuild favorites list if we're on a new frame ---
- if (state->currentFrame != prevFrame) {
- prevFrame = state->currentFrame;
- favoritedNodes.clear();
- size_t total = nodeDB->getNumMeshNodes();
- for (size_t i = 0; i < total; i++) {
- meshtastic_NodeInfoLite *n = nodeDB->getMeshNodeByIndex(i);
- // Skip nulls and ourself
- if (!n || n->num == nodeDB->getNodeNum())
- continue;
- if (n->is_favorite)
- favoritedNodes.push_back(n);
- }
- // Keep a stable, consistent display order
- std::sort(favoritedNodes.begin(), favoritedNodes.end(),
- [](const meshtastic_NodeInfoLite *a, const meshtastic_NodeInfoLite *b) { return a->num < b->num; });
- }
if (favoritedNodes.empty())
return;
@@ -657,7 +654,7 @@ void UIRenderer::drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *sta
char combinedName[50];
snprintf(combinedName, sizeof(combinedName), "%s (%s)", longNameStr.empty() ? "" : longNameStr.c_str(), shortnameble);
- if (SCREEN_WIDTH - (display->getStringWidth(longName) + display->getStringWidth(shortnameble)) > 10) {
+ if (SCREEN_WIDTH - (display->getStringWidth(combinedName)) > 10) {
size_t len = strlen(combinedName);
if (len >= 3 && strcmp(combinedName + len - 3, " ()") == 0) {
combinedName[len - 3] = '\0'; // Remove the last three characters
@@ -668,7 +665,7 @@ void UIRenderer::drawDeviceFocused(OLEDDisplay *display, OLEDDisplayUiState *sta
nameX, ((rows == 4) ? getTextPositions(display)[line++] : getTextPositions(display)[line++]) + yOffset, combinedName);
} else {
// === LongName Centered ===
- textWidth = display->getStringWidth(longName);
+ textWidth = display->getStringWidth(longNameStr.c_str());
nameX = (SCREEN_WIDTH - textWidth) / 2;
display->drawString(nameX, getTextPositions(display)[line++], longNameStr.c_str());
diff --git a/src/graphics/draw/UIRenderer.h b/src/graphics/draw/UIRenderer.h
index 9e5e8c4b4..3c8e1dd9d 100644
--- a/src/graphics/draw/UIRenderer.h
+++ b/src/graphics/draw/UIRenderer.h
@@ -61,6 +61,8 @@ class UIRenderer
static void drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
static NodeNum currentFavoriteNodeNum;
+ static std::vector favoritedNodes;
+ static void rebuildFavoritedNodes();
// OEM screens
#ifdef USERPREFS_OEM_TEXT
diff --git a/src/input/ButtonThread.cpp b/src/input/ButtonThread.cpp
index ad667f003..233bbefe0 100644
--- a/src/input/ButtonThread.cpp
+++ b/src/input/ButtonThread.cpp
@@ -53,23 +53,21 @@ bool ButtonThread::initButton(const ButtonConfig &config)
},
this);
- if (config.longPress != INPUT_BROKER_NONE) {
- _longPress = config.longPress;
- userButton.attachLongPressStart(
- [](void *callerThread) -> void {
- ButtonThread *thread = (ButtonThread *)callerThread;
- // if (millis() > 30000) // hold off 30s after boot
- thread->btnEvent = BUTTON_EVENT_LONG_PRESSED;
- },
- this);
- userButton.attachLongPressStop(
- [](void *callerThread) -> void {
- ButtonThread *thread = (ButtonThread *)callerThread;
- // if (millis() > 30000) // hold off 30s after boot
- thread->btnEvent = BUTTON_EVENT_LONG_RELEASED;
- },
- this);
- }
+ _longPress = config.longPress;
+ userButton.attachLongPressStart(
+ [](void *callerThread) -> void {
+ ButtonThread *thread = (ButtonThread *)callerThread;
+ // if (millis() > 30000) // hold off 30s after boot
+ thread->btnEvent = BUTTON_EVENT_LONG_PRESSED;
+ },
+ this);
+ userButton.attachLongPressStop(
+ [](void *callerThread) -> void {
+ ButtonThread *thread = (ButtonThread *)callerThread;
+ // if (millis() > 30000) // hold off 30s after boot
+ thread->btnEvent = BUTTON_EVENT_LONG_RELEASED;
+ },
+ this);
if (config.doublePress != INPUT_BROKER_NONE) {
_doublePress = config.doublePress;
@@ -202,11 +200,11 @@ int32_t ButtonThread::runOnce()
break;
}
-
- // Forward long press to InputBroker (but NOT as DOWN/SELECT, just forward a "button long press" event)
- evt.inputEvent = _longPress;
- this->notifyObservers(&evt);
-
+ if (_longPress != INPUT_BROKER_NONE) {
+ // Forward long press to InputBroker (but NOT as DOWN/SELECT, just forward a "button long press" event)
+ evt.inputEvent = _longPress;
+ this->notifyObservers(&evt);
+ }
// Reset combination tracking
waitingForLongPress = false;
@@ -253,7 +251,7 @@ int32_t ButtonThread::runOnce()
// may wake the board immediatedly.
case BUTTON_EVENT_LONG_RELEASED: {
- LOG_INFO("LONG PRESS RELEASE");
+ LOG_INFO("LONG PRESS RELEASE AFTER %u MILLIS", millis() - buttonPressStartTime);
if (millis() > 30000 && _longLongPress != INPUT_BROKER_NONE &&
(millis() - buttonPressStartTime) >= _longLongPressTime) {
evt.inputEvent = _longLongPress;
diff --git a/src/input/ButtonThread.h b/src/input/ButtonThread.h
index 949048de1..bbc8da2a7 100644
--- a/src/input/ButtonThread.h
+++ b/src/input/ButtonThread.h
@@ -18,13 +18,13 @@ struct ButtonConfig {
uint16_t longPressTime = 500;
input_broker_event doublePress = INPUT_BROKER_NONE;
input_broker_event longLongPress = INPUT_BROKER_NONE;
- uint16_t longLongPressTime = 5000;
+ uint16_t longLongPressTime = 3900;
input_broker_event triplePress = INPUT_BROKER_NONE;
input_broker_event shortLong = INPUT_BROKER_NONE;
bool touchQuirk = false;
// Constructor to set required parameter
- ButtonConfig(uint8_t pin = 0) : pinNumber(pin) {}
+ explicit ButtonConfig(uint8_t pin = 0) : pinNumber(pin) {}
};
#ifndef BUTTON_CLICK_MS
@@ -62,7 +62,7 @@ class ButtonThread : public Observable, public concurrency::
BUTTON_EVENT_COMBO_SHORT_LONG,
};
- ButtonThread(const char *name);
+ explicit ButtonThread(const char *name);
int32_t runOnce() override;
OneButton userButton;
void attachButtonInterrupts();
diff --git a/src/input/ExpressLRSFiveWay.cpp b/src/input/ExpressLRSFiveWay.cpp
index 53bcedc63..77f9e9993 100644
--- a/src/input/ExpressLRSFiveWay.cpp
+++ b/src/input/ExpressLRSFiveWay.cpp
@@ -233,14 +233,7 @@ void ExpressLRSFiveWay::sendAdhocPing()
// Contained as one method for easier remapping of buttons by user
void ExpressLRSFiveWay::shutdown()
{
- LOG_INFO("Shutdown from long press");
- powerFSM.trigger(EVENT_PRESS);
- screen->startAlert("Shutting Down...");
- // Don't set alerting = true. We don't want to auto-dismiss this alert.
-
- playShutdownMelody(); // In case user adds a buzzer
-
- shutdownAtMsec = millis() + 3000;
+ sendKey(INPUT_BROKER_SHUTDOWN);
}
void ExpressLRSFiveWay::click()
diff --git a/src/input/cardKbI2cImpl.cpp b/src/input/cardKbI2cImpl.cpp
index 21ecf381a..fcbdd0a3f 100644
--- a/src/input/cardKbI2cImpl.cpp
+++ b/src/input/cardKbI2cImpl.cpp
@@ -67,4 +67,5 @@ void CardKbI2cImpl::init()
}
#endif
inputBroker->registerSource(this);
+ kb_found = true;
}
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index 97f42d2f8..c3e7c2a33 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -286,7 +286,7 @@ void lateInitVariant() {}
*/
void printInfo()
{
- LOG_INFO("S:B:%d,%s", HW_VENDOR, optstr(APP_VERSION));
+ LOG_INFO("S:B:%d,%s,%s,%s", HW_VENDOR, optstr(APP_VERSION), optstr(APP_ENV), optstr(APP_REPO));
}
#ifndef PIO_UNIT_TESTING
void setup()
@@ -524,25 +524,11 @@ void setup()
LOG_INFO("Scan for i2c devices");
#endif
-#if defined(I2C_SDA1) && defined(ARCH_RP2040)
- Wire1.setSDA(I2C_SDA1);
- Wire1.setSCL(I2C_SCL1);
- Wire1.begin();
- i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1);
-#elif defined(I2C_SDA1) && !defined(ARCH_RP2040)
- Wire1.begin(I2C_SDA1, I2C_SCL1);
- i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1);
-#elif defined(NRF52840_XXAA) && (WIRE_INTERFACES_COUNT == 2)
+#if defined(I2C_SDA1) || (defined(NRF52840_XXAA) && (WIRE_INTERFACES_COUNT == 2))
i2cScanner->scanPort(ScanI2C::I2CPort::WIRE1);
#endif
-#if defined(I2C_SDA) && defined(ARCH_RP2040)
- Wire.setSDA(I2C_SDA);
- Wire.setSCL(I2C_SCL);
- Wire.begin();
- i2cScanner->scanPort(ScanI2C::I2CPort::WIRE);
-#elif defined(I2C_SDA) && !defined(ARCH_RP2040)
- Wire.begin(I2C_SDA, I2C_SCL);
+#if defined(I2C_SDA)
i2cScanner->scanPort(ScanI2C::I2CPort::WIRE);
#elif defined(ARCH_PORTDUINO)
if (settingsStrings[i2cdev] != "") {
@@ -1065,8 +1051,9 @@ void setup()
mainDelay.interruptFromISR(&higherWake);
};
userConfigNoScreen.singlePress = INPUT_BROKER_USER_PRESS;
- userConfigNoScreen.longPress = INPUT_BROKER_SHUTDOWN;
- userConfigNoScreen.longPressTime = 5000;
+ userConfigNoScreen.longPress = INPUT_BROKER_NONE;
+ userConfigNoScreen.longPressTime = 500;
+ userConfigNoScreen.longLongPress = INPUT_BROKER_SHUTDOWN;
userConfigNoScreen.doublePress = INPUT_BROKER_SEND_PING;
userConfigNoScreen.triplePress = INPUT_BROKER_GPS_TOGGLE;
UserButtonThread->initButton(userConfigNoScreen);
diff --git a/src/memGet.cpp b/src/memGet.cpp
index ef1102f1e..e8cd177dd 100644
--- a/src/memGet.cpp
+++ b/src/memGet.cpp
@@ -10,6 +10,10 @@
#include "memGet.h"
#include "configuration.h"
+#ifdef ARCH_STM32WL
+#include
+#endif
+
MemGet memGet;
/**
@@ -24,6 +28,9 @@ uint32_t MemGet::getFreeHeap()
return dbgHeapFree();
#elif defined(ARCH_RP2040)
return rp2040.getFreeHeap();
+#elif defined(ARCH_STM32WL)
+ struct mallinfo m = mallinfo();
+ return m.fordblks; // Total free space (bytes)
#else
// this platform does not have heap management function implemented
return UINT32_MAX;
@@ -42,6 +49,9 @@ uint32_t MemGet::getHeapSize()
return dbgHeapTotal();
#elif defined(ARCH_RP2040)
return rp2040.getTotalHeap();
+#elif defined(ARCH_STM32WL)
+ struct mallinfo m = mallinfo();
+ return m.arena; // Non-mmapped space allocated (bytes)
#else
// this platform does not have heap management function implemented
return UINT32_MAX;
diff --git a/src/mesh/MeshPacketQueue.cpp b/src/mesh/MeshPacketQueue.cpp
index f8af81321..a64678a7f 100644
--- a/src/mesh/MeshPacketQueue.cpp
+++ b/src/mesh/MeshPacketQueue.cpp
@@ -121,7 +121,7 @@ meshtastic_MeshPacket *MeshPacketQueue::remove(NodeNum from, PacketId id, bool t
bool MeshPacketQueue::find(const NodeNum from, const PacketId id)
{
for (auto it = queue.begin(); it != queue.end(); it++) {
- const auto p = (*it);
+ const auto *p = *it;
if (getFrom(p) == from && p->id == id) {
return true;
}
diff --git a/src/mesh/MeshService.cpp b/src/mesh/MeshService.cpp
index 297c7b2ed..2cc4197c1 100644
--- a/src/mesh/MeshService.cpp
+++ b/src/mesh/MeshService.cpp
@@ -16,6 +16,7 @@
#include "meshUtils.h"
#include "modules/NodeInfoModule.h"
#include "modules/PositionModule.h"
+#include "modules/RoutingModule.h"
#include "power.h"
#include
#include
@@ -333,6 +334,21 @@ void MeshService::sendMqttMessageToClientProxy(meshtastic_MqttClientProxyMessage
fromNum++;
}
+void MeshService::sendRoutingErrorResponse(meshtastic_Routing_Error error, const meshtastic_MeshPacket *mp)
+{
+ if (!mp) {
+ LOG_WARN("Cannot send routing error response: null packet");
+ return;
+ }
+
+ // Use the routing module to send the error response
+ if (routingModule) {
+ routingModule->sendAckNak(error, mp->from, mp->id, mp->channel);
+ } else {
+ LOG_ERROR("Cannot send routing error response: no routing module");
+ }
+}
+
void MeshService::sendClientNotification(meshtastic_ClientNotification *n)
{
LOG_DEBUG("Send client notification to phone");
diff --git a/src/mesh/MeshService.h b/src/mesh/MeshService.h
index e2e430c03..89d3b15d0 100644
--- a/src/mesh/MeshService.h
+++ b/src/mesh/MeshService.h
@@ -148,6 +148,9 @@ class MeshService
/// Send a ClientNotification to the phone
void sendClientNotification(meshtastic_ClientNotification *cn);
+ /// Send an error response to the phone
+ void sendRoutingErrorResponse(meshtastic_Routing_Error error, const meshtastic_MeshPacket *mp);
+
bool isToPhoneQueueEmpty();
ErrorCode sendQueueStatusToPhone(const meshtastic_QueueStatus &qs, ErrorCode res, uint32_t mesh_packet_id);
diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp
index c8d7364ba..38e213167 100644
--- a/src/mesh/NodeDB.cpp
+++ b/src/mesh/NodeDB.cpp
@@ -1874,7 +1874,7 @@ UserLicenseStatus NodeDB::getLicenseStatus(uint32_t nodeNum)
return info->user.is_licensed ? UserLicenseStatus::Licensed : UserLicenseStatus::NotLicensed;
}
-bool NodeDB::checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t keyToTest)
+bool NodeDB::checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t &keyToTest)
{
if (keyToTest.size == 32) {
uint8_t keyHash[32] = {0};
diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h
index 845f42c76..19fb67b73 100644
--- a/src/mesh/NodeDB.h
+++ b/src/mesh/NodeDB.h
@@ -279,7 +279,7 @@ class NodeDB
bool hasValidPosition(const meshtastic_NodeInfoLite *n);
- bool checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t keyToTest);
+ bool checkLowEntropyPublicKey(const meshtastic_Config_SecurityConfig_public_key_t &keyToTest);
bool backupPreferences(meshtastic_AdminMessage_BackupLocation location);
bool restorePreferences(meshtastic_AdminMessage_BackupLocation location,
diff --git a/src/mesh/PacketHistory.cpp b/src/mesh/PacketHistory.cpp
index 8cac31a3e..3902c1057 100644
--- a/src/mesh/PacketHistory.cpp
+++ b/src/mesh/PacketHistory.cpp
@@ -181,7 +181,7 @@ PacketHistory::PacketRecord *PacketHistory::find(NodeNum sender, PacketId id)
}
/** Insert/Replace oldest PacketRecord in recentPackets. */
-void PacketHistory::insert(PacketRecord &r)
+void PacketHistory::insert(const PacketRecord &r)
{
uint32_t now_millis = millis(); // Should not jump with time changes
uint32_t OldtrxTimeMsec = 0;
@@ -308,7 +308,7 @@ bool PacketHistory::wasRelayer(const uint8_t relayer, const uint32_t id, const N
return false;
}
- PacketRecord *found = find(sender, id);
+ const PacketRecord *found = find(sender, id);
if (found == NULL) {
#if VERBOSE_PACKET_HISTORY
@@ -327,7 +327,7 @@ bool PacketHistory::wasRelayer(const uint8_t relayer, const uint32_t id, const N
/* Check if a certain node was a relayer of a packet in the history given iterator
* @return true if node was indeed a relayer, false if not */
-bool PacketHistory::wasRelayer(const uint8_t relayer, PacketRecord &r)
+bool PacketHistory::wasRelayer(const uint8_t relayer, const PacketRecord &r)
{
for (uint8_t i = 0; i < NUM_RELAYERS; i++) {
if (r.relayed_by[i] == relayer) {
diff --git a/src/mesh/PacketHistory.h b/src/mesh/PacketHistory.h
index d06c9bd2f..9f14a4cf0 100644
--- a/src/mesh/PacketHistory.h
+++ b/src/mesh/PacketHistory.h
@@ -31,11 +31,11 @@ class PacketHistory
/** Insert/Replace oldest PacketRecord in mx_recentPackets.
* @param r PacketRecord to insert or replace */
- void insert(PacketRecord &r); // Insert or replace a packet record in the history
+ void insert(const PacketRecord &r); // Insert or replace a packet record in the history
/* Check if a certain node was a relayer of a packet in the history given iterator
* @return true if node was indeed a relayer, false if not */
- bool wasRelayer(const uint8_t relayer, PacketRecord &r);
+ bool wasRelayer(const uint8_t relayer, const PacketRecord &r);
PacketHistory(const PacketHistory &); // non construction-copyable
PacketHistory &operator=(const PacketHistory &); // non copyable
diff --git a/src/mesh/PhoneAPI.cpp b/src/mesh/PhoneAPI.cpp
index 287de38fa..e0b81bedd 100644
--- a/src/mesh/PhoneAPI.cpp
+++ b/src/mesh/PhoneAPI.cpp
@@ -686,7 +686,8 @@ bool PhoneAPI::handleToRadioPacket(meshtastic_MeshPacket &p)
LOG_WARN("Rate limit portnum %d", p.decoded.portnum);
meshtastic_QueueStatus qs = router->getQueueStatus();
service->sendQueueStatusToPhone(qs, 0, p.id);
- sendNotification(meshtastic_LogRecord_Level_WARNING, p.id, "Text messages can only be sent once every 2 seconds");
+ service->sendRoutingErrorResponse(meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED, &p);
+ // sendNotification(meshtastic_LogRecord_Level_WARNING, p.id, "Text messages can only be sent once every 2 seconds");
return false;
}
lastPortNumToRadio[p.decoded.portnum] = millis();
diff --git a/src/mesh/eth/ethClient.cpp b/src/mesh/eth/ethClient.cpp
index 9c92a6c27..2b4f63512 100644
--- a/src/mesh/eth/ethClient.cpp
+++ b/src/mesh/eth/ethClient.cpp
@@ -68,6 +68,11 @@ static int32_t reconnectETH()
initApiServer();
}
#endif
+#if HAS_UDP_MULTICAST
+ if (udpHandler && config.network.enabled_protocols & meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST) {
+ udpHandler->start();
+ }
+#endif
ethStartupComplete = true;
}
diff --git a/src/mesh/eth/ethClient.h b/src/mesh/eth/ethClient.h
index 9e1745b9f..3adf481d2 100644
--- a/src/mesh/eth/ethClient.h
+++ b/src/mesh/eth/ethClient.h
@@ -2,7 +2,6 @@
#include "configuration.h"
#include
-#include
bool initEthernet();
bool isEthernetAvailable();
diff --git a/src/mesh/generated/meshtastic/admin.pb.h b/src/mesh/generated/meshtastic/admin.pb.h
index 071640b0d..bc0b780b9 100644
--- a/src/mesh/generated/meshtastic/admin.pb.h
+++ b/src/mesh/generated/meshtastic/admin.pb.h
@@ -7,9 +7,9 @@
#include "meshtastic/channel.pb.h"
#include "meshtastic/config.pb.h"
#include "meshtastic/connection_status.pb.h"
+#include "meshtastic/device_ui.pb.h"
#include "meshtastic/mesh.pb.h"
#include "meshtastic/module_config.pb.h"
-#include "meshtastic/device_ui.pb.h"
#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h
index f28daadbd..bd43472b5 100644
--- a/src/mesh/generated/meshtastic/config.pb.h
+++ b/src/mesh/generated/meshtastic/config.pb.h
@@ -102,7 +102,11 @@ typedef enum _meshtastic_Config_DeviceConfig_BuzzerMode {
meshtastic_Config_DeviceConfig_BuzzerMode_NOTIFICATIONS_ONLY = 2,
/* Non-notification system buzzer tones only.
Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts. */
- meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY = 3
+ meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY = 3,
+ /* Direct Message notifications only.
+ Buzzer is enabled only for direct messages and alerts, but not for button presses.
+ External notification config determines the specifics of the notification behavior. */
+ meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY = 4
} meshtastic_Config_DeviceConfig_BuzzerMode;
/* Bit field of boolean configuration options, indicating which optional
@@ -476,7 +480,8 @@ typedef struct _meshtastic_Config_DisplayConfig {
/* Number of seconds the screen stays on after pressing the user button or receiving a message
0 for default of one minute MAXUINT for always on */
uint32_t screen_on_secs;
- /* How the GPS coordinates are formatted on the OLED screen. */
+ /* Deprecated in 2.7.4: Unused
+ How the GPS coordinates are formatted on the OLED screen. */
meshtastic_Config_DisplayConfig_GpsCoordinateFormat gps_format;
/* Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds.
Potentially useful for devices without user buttons. */
@@ -645,8 +650,8 @@ extern "C" {
#define _meshtastic_Config_DeviceConfig_RebroadcastMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_RebroadcastMode)(meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY+1))
#define _meshtastic_Config_DeviceConfig_BuzzerMode_MIN meshtastic_Config_DeviceConfig_BuzzerMode_ALL_ENABLED
-#define _meshtastic_Config_DeviceConfig_BuzzerMode_MAX meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY
-#define _meshtastic_Config_DeviceConfig_BuzzerMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_BuzzerMode)(meshtastic_Config_DeviceConfig_BuzzerMode_SYSTEM_ONLY+1))
+#define _meshtastic_Config_DeviceConfig_BuzzerMode_MAX meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY
+#define _meshtastic_Config_DeviceConfig_BuzzerMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_BuzzerMode)(meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY+1))
#define _meshtastic_Config_PositionConfig_PositionFlags_MIN meshtastic_Config_PositionConfig_PositionFlags_UNSET
#define _meshtastic_Config_PositionConfig_PositionFlags_MAX meshtastic_Config_PositionConfig_PositionFlags_SPEED
diff --git a/src/mesh/generated/meshtastic/deviceonly.pb.h b/src/mesh/generated/meshtastic/deviceonly.pb.h
index f78689cb2..b02b2083d 100644
--- a/src/mesh/generated/meshtastic/deviceonly.pb.h
+++ b/src/mesh/generated/meshtastic/deviceonly.pb.h
@@ -6,10 +6,10 @@
#include
#include
#include "meshtastic/channel.pb.h"
-#include "meshtastic/mesh.pb.h"
-#include "meshtastic/telemetry.pb.h"
#include "meshtastic/config.pb.h"
#include "meshtastic/localonly.pb.h"
+#include "meshtastic/mesh.pb.h"
+#include "meshtastic/telemetry.pb.h"
#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
diff --git a/src/mesh/generated/meshtastic/mesh.pb.h b/src/mesh/generated/meshtastic/mesh.pb.h
index 9e0415198..d1a38b565 100644
--- a/src/mesh/generated/meshtastic/mesh.pb.h
+++ b/src/mesh/generated/meshtastic/mesh.pb.h
@@ -6,11 +6,11 @@
#include
#include "meshtastic/channel.pb.h"
#include "meshtastic/config.pb.h"
+#include "meshtastic/device_ui.pb.h"
#include "meshtastic/module_config.pb.h"
#include "meshtastic/portnums.pb.h"
#include "meshtastic/telemetry.pb.h"
#include "meshtastic/xmodem.pb.h"
-#include "meshtastic/device_ui.pb.h"
#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
@@ -247,32 +247,26 @@ typedef enum _meshtastic_HardwareModel {
meshtastic_HardwareModel_NOMADSTAR_METEOR_PRO = 96,
/* Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin */
meshtastic_HardwareModel_CROWPANEL = 97,
- /* *
- Lilygo LINK32 board with sensors */
+ /* Lilygo LINK32 board with sensors */
meshtastic_HardwareModel_LINK_32 = 98,
- /* *
- Seeed Tracker L1 */
+ /* Seeed Tracker L1 */
meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1 = 99,
- /* *
- Seeed Tracker L1 EINK driver */
+ /* Seeed Tracker L1 EINK driver */
meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1_EINK = 100,
/* Reserved ID for future and past use */
meshtastic_HardwareModel_QWANTZ_TINY_ARMS = 101,
- /* *
- Lilygo T-Deck Pro */
+ /* Lilygo T-Deck Pro */
meshtastic_HardwareModel_T_DECK_PRO = 102,
- /* *
- Lilygo TLora Pager */
+ /* Lilygo TLora Pager */
meshtastic_HardwareModel_T_LORA_PAGER = 103,
- /* *
- GAT562 Mesh Trial Tracker */
+ /* GAT562 Mesh Trial Tracker */
meshtastic_HardwareModel_GAT562_MESH_TRIAL_TRACKER = 104,
- /* *
- RAKwireless WisMesh Tag */
+ /* RAKwireless WisMesh Tag */
meshtastic_HardwareModel_WISMESH_TAG = 105,
- /* *
- RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ */
+ /* RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ */
meshtastic_HardwareModel_RAK3312 = 106,
+ /* Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html */
+ meshtastic_HardwareModel_THINKNODE_M5 = 107,
/* ------------------------------------------------------------------------------------------------------------------------------------------
Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
------------------------------------------------------------------------------------------------------------------------------------------ */
@@ -432,7 +426,10 @@ typedef enum _meshtastic_Routing_Error {
/* Admin packet otherwise checks out, but uses a bogus or expired session key */
meshtastic_Routing_Error_ADMIN_BAD_SESSION_KEY = 36,
/* Admin packet sent using PKC, but not from a public key on the admin key list */
- meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37
+ meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37,
+ /* Airtime fairness rate limit exceeded for a packet
+ This typically enforced per portnum and is used to prevent a single node from monopolizing airtime */
+ meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED = 38
} meshtastic_Routing_Error;
/* The priority of this message for sending.
@@ -1228,8 +1225,8 @@ extern "C" {
#define _meshtastic_Position_AltSource_ARRAYSIZE ((meshtastic_Position_AltSource)(meshtastic_Position_AltSource_ALT_BAROMETRIC+1))
#define _meshtastic_Routing_Error_MIN meshtastic_Routing_Error_NONE
-#define _meshtastic_Routing_Error_MAX meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED
-#define _meshtastic_Routing_Error_ARRAYSIZE ((meshtastic_Routing_Error)(meshtastic_Routing_Error_ADMIN_PUBLIC_KEY_UNAUTHORIZED+1))
+#define _meshtastic_Routing_Error_MAX meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED
+#define _meshtastic_Routing_Error_ARRAYSIZE ((meshtastic_Routing_Error)(meshtastic_Routing_Error_RATE_LIMIT_EXCEEDED+1))
#define _meshtastic_MeshPacket_Priority_MIN meshtastic_MeshPacket_Priority_UNSET
#define _meshtastic_MeshPacket_Priority_MAX meshtastic_MeshPacket_Priority_MAX
diff --git a/src/mesh/generated/meshtastic/powermon.pb.h b/src/mesh/generated/meshtastic/powermon.pb.h
index 9d4d94193..3072b8ac5 100644
--- a/src/mesh/generated/meshtastic/powermon.pb.h
+++ b/src/mesh/generated/meshtastic/powermon.pb.h
@@ -11,7 +11,7 @@
/* Enum definitions */
/* Any significant power changing event in meshtastic should be tagged with a powermon state transition.
-If you are making new meshtastic features feel free to add new entries at the end of this definition. */
+ If you are making new meshtastic features feel free to add new entries at the end of this definition. */
typedef enum _meshtastic_PowerMon_State {
meshtastic_PowerMon_State_None = 0,
meshtastic_PowerMon_State_CPU_DeepSleep = 1,
@@ -34,13 +34,13 @@ something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of
meshtastic_PowerMon_State_Screen_Drawing = 512,
meshtastic_PowerMon_State_Wifi_On = 1024,
/* GPS is actively trying to find our location
-See GPSPowerState for more details */
+ See GPSPowerState for more details */
meshtastic_PowerMon_State_GPS_Active = 2048
} meshtastic_PowerMon_State;
/* What operation would we like the UUT to perform.
-note: senders should probably set want_response in their request packets, so that they can know when the state
-machine has started processing their request */
+ note: senders should probably set want_response in their request packets, so that they can know when the state
+ machine has started processing their request */
typedef enum _meshtastic_PowerStressMessage_Opcode {
/* Unset/unused */
meshtastic_PowerStressMessage_Opcode_UNSET = 0,
@@ -67,7 +67,7 @@ typedef enum _meshtastic_PowerStressMessage_Opcode {
/* Struct definitions */
/* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
-But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) */
+ But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) */
typedef struct _meshtastic_PowerMon {
char dummy_field;
} meshtastic_PowerMon;
diff --git a/src/mesh/generated/meshtastic/telemetry.pb.h b/src/mesh/generated/meshtastic/telemetry.pb.h
index 072a99a24..cb47b9fda 100644
--- a/src/mesh/generated/meshtastic/telemetry.pb.h
+++ b/src/mesh/generated/meshtastic/telemetry.pb.h
@@ -93,7 +93,11 @@ typedef enum _meshtastic_TelemetrySensorType {
/* PCT2075 Temperature Sensor */
meshtastic_TelemetrySensorType_PCT2075 = 39,
/* ADS1X15 ADC */
- meshtastic_TelemetrySensorType_ADS1X15 = 40
+ meshtastic_TelemetrySensorType_ADS1X15 = 40,
+ /* ADS1X15 ADC_ALT */
+ meshtastic_TelemetrySensorType_ADS1X15_ALT = 41,
+ /* Sensirion SFA30 Formaldehyde sensor */
+ meshtastic_TelemetrySensorType_SFA30 = 42
} meshtastic_TelemetrySensorType;
/* Struct definitions */
@@ -287,6 +291,15 @@ typedef struct _meshtastic_AirQualityMetrics {
/* CO2 sensor relative humidity in % */
bool has_co2_humidity;
float co2_humidity;
+ /* Formaldehyde sensor formaldehyde concentration in ppb */
+ bool has_form_formaldehyde;
+ float form_formaldehyde;
+ /* Formaldehyde sensor relative humidity in %RH */
+ bool has_form_humidity;
+ float form_humidity;
+ /* Formaldehyde sensor temperature in degrees Celsius */
+ bool has_form_temperature;
+ float form_temperature;
} meshtastic_AirQualityMetrics;
/* Local device mesh statistics */
@@ -398,8 +411,8 @@ extern "C" {
/* Helper constants for enums */
#define _meshtastic_TelemetrySensorType_MIN meshtastic_TelemetrySensorType_SENSOR_UNSET
-#define _meshtastic_TelemetrySensorType_MAX meshtastic_TelemetrySensorType_ADS1X15
-#define _meshtastic_TelemetrySensorType_ARRAYSIZE ((meshtastic_TelemetrySensorType)(meshtastic_TelemetrySensorType_ADS1X15+1))
+#define _meshtastic_TelemetrySensorType_MAX meshtastic_TelemetrySensorType_SFA30
+#define _meshtastic_TelemetrySensorType_ARRAYSIZE ((meshtastic_TelemetrySensorType)(meshtastic_TelemetrySensorType_SFA30+1))
@@ -415,7 +428,7 @@ extern "C" {
#define meshtastic_DeviceMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0}
#define meshtastic_EnvironmentMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
#define meshtastic_PowerMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
-#define meshtastic_AirQualityMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
+#define meshtastic_AirQualityMetrics_init_default {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
#define meshtastic_LocalStats_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
#define meshtastic_HealthMetrics_init_default {false, 0, false, 0, false, 0}
#define meshtastic_HostMetrics_init_default {0, 0, 0, false, 0, false, 0, 0, 0, 0, false, ""}
@@ -424,7 +437,7 @@ extern "C" {
#define meshtastic_DeviceMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0}
#define meshtastic_EnvironmentMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
#define meshtastic_PowerMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
-#define meshtastic_AirQualityMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
+#define meshtastic_AirQualityMetrics_init_zero {false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0, false, 0}
#define meshtastic_LocalStats_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
#define meshtastic_HealthMetrics_init_zero {false, 0, false, 0, false, 0}
#define meshtastic_HostMetrics_init_zero {0, 0, 0, false, 0, false, 0, 0, 0, 0, false, ""}
@@ -490,6 +503,9 @@ extern "C" {
#define meshtastic_AirQualityMetrics_co2_tag 13
#define meshtastic_AirQualityMetrics_co2_temperature_tag 14
#define meshtastic_AirQualityMetrics_co2_humidity_tag 15
+#define meshtastic_AirQualityMetrics_form_formaldehyde_tag 16
+#define meshtastic_AirQualityMetrics_form_humidity_tag 17
+#define meshtastic_AirQualityMetrics_form_temperature_tag 18
#define meshtastic_LocalStats_uptime_seconds_tag 1
#define meshtastic_LocalStats_channel_utilization_tag 2
#define meshtastic_LocalStats_air_util_tx_tag 3
@@ -597,7 +613,10 @@ X(a, STATIC, OPTIONAL, UINT32, particles_50um, 11) \
X(a, STATIC, OPTIONAL, UINT32, particles_100um, 12) \
X(a, STATIC, OPTIONAL, UINT32, co2, 13) \
X(a, STATIC, OPTIONAL, FLOAT, co2_temperature, 14) \
-X(a, STATIC, OPTIONAL, FLOAT, co2_humidity, 15)
+X(a, STATIC, OPTIONAL, FLOAT, co2_humidity, 15) \
+X(a, STATIC, OPTIONAL, FLOAT, form_formaldehyde, 16) \
+X(a, STATIC, OPTIONAL, FLOAT, form_humidity, 17) \
+X(a, STATIC, OPTIONAL, FLOAT, form_temperature, 18)
#define meshtastic_AirQualityMetrics_CALLBACK NULL
#define meshtastic_AirQualityMetrics_DEFAULT NULL
@@ -686,7 +705,7 @@ extern const pb_msgdesc_t meshtastic_Nau7802Config_msg;
/* Maximum encoded size of messages (where known) */
#define MESHTASTIC_MESHTASTIC_TELEMETRY_PB_H_MAX_SIZE meshtastic_Telemetry_size
-#define meshtastic_AirQualityMetrics_size 88
+#define meshtastic_AirQualityMetrics_size 106
#define meshtastic_DeviceMetrics_size 27
#define meshtastic_EnvironmentMetrics_size 113
#define meshtastic_HealthMetrics_size 11
diff --git a/src/mesh/udp/UdpMulticastHandler.h b/src/mesh/udp/UdpMulticastHandler.h
index d1cc1065c..d4e0eaa8c 100644
--- a/src/mesh/udp/UdpMulticastHandler.h
+++ b/src/mesh/udp/UdpMulticastHandler.h
@@ -4,8 +4,13 @@
#include "main.h"
#include "mesh/Router.h"
-#include
+#if HAS_ETHERNET && defined(ARCH_NRF52)
+#include "mesh/eth/ethClient.h"
+#else
#include
+#endif
+
+#include
#if HAS_ETHERNET && defined(USE_WS5500)
#include
@@ -22,11 +27,11 @@ class UdpMulticastHandler final
void start()
{
if (udp.listenMulticast(udpIpAddress, UDP_MULTICAST_DEFAUL_PORT, 64)) {
-#ifndef ARCH_PORTDUINO
- // FIXME(PORTDUINO): arduino lacks IPAddress::toString()
- LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str());
+#if defined(ARCH_NRF52) || defined(ARCH_PORTDUINO)
+ LOG_DEBUG("UDP Listening on IP: %u.%u.%u.%u:%u", udpIpAddress[0], udpIpAddress[1], udpIpAddress[2], udpIpAddress[3],
+ UDP_MULTICAST_DEFAUL_PORT);
#else
- LOG_DEBUG("UDP Listening");
+ LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str());
#endif
udp.onPacket([this](AsyncUDPPacket packet) { onReceive(packet); });
} else {
@@ -37,7 +42,10 @@ class UdpMulticastHandler final
void onReceive(AsyncUDPPacket packet)
{
size_t packetLength = packet.length();
-#ifndef ARCH_PORTDUINO
+#if defined(ARCH_NRF52)
+ IPAddress ip = packet.remoteIP();
+ LOG_DEBUG("UDP broadcast from: %u.%u.%u.%u, len=%u", ip[0], ip[1], ip[2], ip[3], packetLength);
+#elif !defined(ARCH_PORTDUINO)
// FIXME(PORTDUINO): arduino lacks IPAddress::toString()
LOG_DEBUG("UDP broadcast from: %s, len=%u", packet.remoteIP().toString().c_str(), packetLength);
#endif
@@ -61,7 +69,11 @@ class UdpMulticastHandler final
if (!mp || !udp) {
return false;
}
-#ifndef ARCH_PORTDUINO
+#if defined(ARCH_NRF52)
+ if (!isEthernetAvailable()) {
+ return false;
+ }
+#elif !defined(ARCH_PORTDUINO)
if (WiFi.status() != WL_CONNECTED) {
return false;
}
diff --git a/src/modules/CannedMessageModule.cpp b/src/modules/CannedMessageModule.cpp
index a1b89e0f8..2a4f1cf4d 100644
--- a/src/modules/CannedMessageModule.cpp
+++ b/src/modules/CannedMessageModule.cpp
@@ -850,7 +850,13 @@ void CannedMessageModule::sendText(NodeNum dest, ChannelIndex channel, const cha
this->waitingForAck = true;
// Log outgoing message
- LOG_INFO("Send message id=%d, dest=%x, msg=%.*s", p->id, p->to, p->decoded.payload.size, p->decoded.payload.bytes);
+ LOG_INFO("Send message id=%u, dest=%x, msg=%.*s", p->id, p->to, p->decoded.payload.size, p->decoded.payload.bytes);
+
+ if (p->to != 0xffffffff) {
+ LOG_INFO("Proactively adding %x as favorite node", p->to);
+ nodeDB->set_favorite(true, p->to);
+ screen->setFrames(graphics::Screen::FOCUS_PRESERVE);
+ }
// Send to mesh and phone (even if no phone connected, to track ACKs)
service->sendToMesh(p, RX_SRC_LOCAL, true);
@@ -1441,7 +1447,7 @@ void CannedMessageModule::drawEmotePickerScreen(OLEDDisplay *display, OLEDDispla
int headerY = y;
int listTop = headerY + headerFontHeight + headerMargin;
- int visibleRows = (display->getHeight() - listTop - 2) / rowHeight;
+ int _visibleRows = (display->getHeight() - listTop - 2) / rowHeight;
int numEmotes = graphics::numEmotes;
// Clamp highlight index
@@ -1451,11 +1457,11 @@ void CannedMessageModule::drawEmotePickerScreen(OLEDDisplay *display, OLEDDispla
emotePickerIndex = numEmotes - 1;
// Determine which emote is at the top
- int topIndex = emotePickerIndex - visibleRows / 2;
+ int topIndex = emotePickerIndex - _visibleRows / 2;
if (topIndex < 0)
topIndex = 0;
- if (topIndex > numEmotes - visibleRows)
- topIndex = std::max(0, numEmotes - visibleRows);
+ if (topIndex > numEmotes - _visibleRows)
+ topIndex = std::max(0, numEmotes - _visibleRows);
// Draw header/title
display->setFont(FONT_SMALL);
@@ -1703,7 +1709,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
} else {
// Text: split by words and wrap inside word if needed
String text = token.second;
- uint16_t pos = 0;
+ pos = 0;
while (pos < text.length()) {
// Find next space (or end)
int spacePos = text.indexOf(' ', pos);
@@ -1747,7 +1753,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
int yLine = inputY;
for (auto &line : lines) {
int nextX = x;
- for (auto &token : line) {
+ for (const auto &token : line) {
if (token.first) {
const graphics::Emote *emote = nullptr;
for (int j = 0; j < graphics::numEmotes; j++) {
@@ -1783,19 +1789,20 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
int topMsg;
std::vector rowHeights;
- int visibleRows;
+ int _visibleRows;
// Draw header (To: ...)
drawHeader(display, x, y, buffer);
// Shift message list upward by 3 pixels to reduce spacing between header and first message
const int listYOffset = y + FONT_HEIGHT_SMALL - 3;
- visibleRows = (display->getHeight() - listYOffset) / baseRowSpacing;
+ _visibleRows = (display->getHeight() - listYOffset) / baseRowSpacing;
// Figure out which messages are visible and their needed heights
- topMsg =
- (messagesCount > visibleRows && currentMessageIndex >= visibleRows - 1) ? currentMessageIndex - visibleRows + 2 : 0;
- int countRows = std::min(messagesCount, visibleRows);
+ topMsg = (messagesCount > _visibleRows && currentMessageIndex >= _visibleRows - 1)
+ ? currentMessageIndex - _visibleRows + 2
+ : 0;
+ int countRows = std::min(messagesCount, _visibleRows);
// --- Build per-row max height based on all emotes in line ---
for (int i = 0; i < countRows; i++) {
@@ -1822,7 +1829,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
int lineY = yCursor;
const char *msg = getMessageByIndex(msgIdx);
int rowHeight = rowHeights[vis];
- bool highlight = (msgIdx == currentMessageIndex);
+ bool _highlight = (msgIdx == currentMessageIndex);
// --- Multi-emote tokenization ---
std::vector> tokens; // (isEmote, token)
@@ -1875,20 +1882,20 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
int textYOffset = (rowHeight - FONT_HEIGHT_SMALL) / 2;
#ifdef USE_EINK
- int nextX = x + (highlight ? 12 : 0);
- if (highlight)
+ int nextX = x + (_highlight ? 12 : 0);
+ if (_highlight)
display->drawString(x + 0, lineY + textYOffset, ">");
#else
int scrollPadding = 8;
- if (highlight) {
+ if (_highlight) {
display->fillRect(x + 0, lineY, display->getWidth() - scrollPadding, rowHeight);
display->setColor(BLACK);
}
- int nextX = x + (highlight ? 2 : 0);
+ int nextX = x + (_highlight ? 2 : 0);
#endif
// Draw all tokens left to right
- for (auto &token : tokens) {
+ for (const auto &token : tokens) {
if (token.first) {
// Emote
const graphics::Emote *emote = nullptr;
@@ -1910,7 +1917,7 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
}
}
#ifndef USE_EINK
- if (highlight)
+ if (_highlight)
display->setColor(WHITE);
#endif
@@ -1918,11 +1925,11 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
}
// Scrollbar
- if (messagesCount > visibleRows) {
+ if (messagesCount > _visibleRows) {
int scrollHeight = display->getHeight() - listYOffset;
int scrollTrackX = display->getWidth() - 6;
display->drawRect(scrollTrackX, listYOffset, 4, scrollHeight);
- int barHeight = (scrollHeight * visibleRows) / messagesCount;
+ int barHeight = (scrollHeight * _visibleRows) / messagesCount;
int scrollPos = listYOffset + (scrollHeight * topMsg) / messagesCount;
display->fillRect(scrollTrackX, scrollPos, 4, barHeight);
}
diff --git a/src/modules/NodeInfoModule.cpp b/src/modules/NodeInfoModule.cpp
index cf9940e25..b6fee7703 100644
--- a/src/modules/NodeInfoModule.cpp
+++ b/src/modules/NodeInfoModule.cpp
@@ -14,6 +14,11 @@ bool NodeInfoModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, mes
{
auto p = *pptr;
+ if (p.is_licensed != owner.is_licensed) {
+ LOG_WARN("Invalid nodeInfo detected, is_licensed mismatch!");
+ return true;
+ }
+
// Coerce user.id to be derived from the node number
snprintf(p.id, sizeof(p.id), "!%08x", getFrom(&mp));
diff --git a/src/modules/PositionModule.cpp b/src/modules/PositionModule.cpp
index 93c65ecc1..8b6a9f19c 100644
--- a/src/modules/PositionModule.cpp
+++ b/src/modules/PositionModule.cpp
@@ -266,9 +266,11 @@ meshtastic_MeshPacket *PositionModule::allocPositionPacket()
LOG_INFO("Position packet: time=%i lat=%i lon=%i", p.time, p.latitude_i, p.longitude_i);
+#ifndef MESHTASTIC_EXCLUDE_ATAK
// TAK Tracker devices should send their position in a TAK packet over the ATAK port
if (config.device.role == meshtastic_Config_DeviceConfig_Role_TAK_TRACKER)
return allocAtakPli();
+#endif
return allocDataProtobuf(p);
}
diff --git a/src/modules/SystemCommandsModule.cpp b/src/modules/SystemCommandsModule.cpp
index ab9439b39..2d534bd67 100644
--- a/src/modules/SystemCommandsModule.cpp
+++ b/src/modules/SystemCommandsModule.cpp
@@ -107,11 +107,7 @@ int SystemCommandsModule::handleInputEvent(const InputEvent *event)
return true;
// Power control
case INPUT_BROKER_SHUTDOWN:
- LOG_ERROR("Shutting Down");
- IF_SCREEN(screen->showSimpleBanner("Shutting Down..."));
- nodeDB->saveToDisk();
- shutdownAtMsec = millis() + DEFAULT_SHUTDOWN_SECONDS * 1000;
- // runState = CANNED_MESSAGE_RUN_STATE_INACTIVE;
+ shutdownAtMsec = millis();
return true;
default:
diff --git a/src/mqtt/MQTT.cpp b/src/mqtt/MQTT.cpp
index 137c92056..091612827 100644
--- a/src/mqtt/MQTT.cpp
+++ b/src/mqtt/MQTT.cpp
@@ -559,10 +559,8 @@ void MQTT::sendSubscriptions()
int32_t MQTT::runOnce()
{
-#if HAS_NETWORKING
if (!moduleConfig.mqtt.enabled || !(moduleConfig.mqtt.map_reporting_enabled || channels.anyMqttEnabled()))
return disable();
-
bool wantConnection = wantsLink();
perhapsReportToMap();
@@ -572,7 +570,7 @@ int32_t MQTT::runOnce()
publishQueuedMessages();
return 200;
}
-
+#if HAS_NETWORKING
else if (!pubSub.loop()) {
if (!wantConnection)
return 5000; // If we don't want connection now, check again in 5 secs
@@ -596,8 +594,10 @@ int32_t MQTT::runOnce()
powerFSM.trigger(EVENT_CONTACT_FROM_PHONE); // Suppress entering light sleep (because that would turn off bluetooth)
return 20;
}
-#endif
+#else
+ // No networking available, return default interval
return 30000;
+#endif
}
bool MQTT::isValidConfig(const meshtastic_ModuleConfig_MQTTConfig &config, MQTTClient *client)
diff --git a/src/platform/nrf52/AsyncUDP.cpp b/src/platform/nrf52/AsyncUDP.cpp
new file mode 100644
index 000000000..836fb1307
--- /dev/null
+++ b/src/platform/nrf52/AsyncUDP.cpp
@@ -0,0 +1,73 @@
+#include "AsyncUDP.h"
+
+#if HAS_ETHERNET
+
+AsyncUDP::AsyncUDP() : OSThread("AsyncUDP"), localPort(0) {}
+
+bool AsyncUDP::listenMulticast(IPAddress multicastIP, uint16_t port, uint8_t ttl)
+{
+ if (!isMulticast(multicastIP))
+ return false;
+ localPort = port;
+ udp.beginMulticast(multicastIP, port);
+ return true;
+}
+
+size_t AsyncUDP::write(uint8_t b)
+{
+ return udp.write(&b, 1);
+}
+
+size_t AsyncUDP::write(const uint8_t *data, size_t len)
+{
+ return udp.write(data, len);
+}
+
+void AsyncUDP::onPacket(const std::function &callback)
+{
+ _onPacket = callback;
+}
+
+bool AsyncUDP::writeTo(const uint8_t *data, size_t len, IPAddress ip, uint16_t port)
+{
+ if (!udp.beginPacket(ip, port))
+ return false;
+ udp.write(data, len);
+ return udp.endPacket();
+}
+
+// AsyncUDPPacket
+AsyncUDPPacket::AsyncUDPPacket(EthernetUDP &source) : _udp(source), _remoteIP(source.remoteIP()), _remotePort(source.remotePort())
+{
+ if (_udp.available() > 0) {
+ _readLength = _udp.read(_buffer, sizeof(_buffer));
+ } else {
+ _readLength = 0;
+ }
+}
+
+IPAddress AsyncUDPPacket::remoteIP()
+{
+ return _remoteIP;
+}
+
+uint16_t AsyncUDPPacket::length()
+{
+ return _readLength;
+}
+
+const uint8_t *AsyncUDPPacket::data()
+{
+ return _buffer;
+}
+
+int32_t AsyncUDP::runOnce()
+{
+ if (_onPacket && udp.parsePacket() > 0) {
+ AsyncUDPPacket packet(udp);
+ _onPacket(packet);
+ }
+ return 5; // check every 5ms
+}
+
+#endif // HAS_ETHERNET
\ No newline at end of file
diff --git a/src/platform/nrf52/AsyncUDP.h b/src/platform/nrf52/AsyncUDP.h
new file mode 100644
index 000000000..e2b406ba9
--- /dev/null
+++ b/src/platform/nrf52/AsyncUDP.h
@@ -0,0 +1,63 @@
+#ifndef ASYNC_UDP_H
+#define ASYNC_UDP_H
+
+#include "configuration.h"
+
+#if HAS_ETHERNET
+
+#include "concurrency/OSThread.h"
+#include
+#include
+#include
+#include
+#include
+
+class AsyncUDPPacket;
+
+class AsyncUDP : public Print, private concurrency::OSThread
+{
+ public:
+ AsyncUDP();
+ explicit operator bool() const { return localPort != 0; }
+
+ bool listenMulticast(IPAddress multicastIP, uint16_t port, uint8_t ttl = 64);
+ bool writeTo(const uint8_t *data, size_t len, IPAddress ip, uint16_t port);
+
+ size_t write(uint8_t b) override;
+ size_t write(const uint8_t *data, size_t len) override;
+ void onPacket(const std::function &callback);
+
+ private:
+ EthernetUDP udp;
+ uint16_t localPort;
+ std::function _onPacket;
+ virtual int32_t runOnce() override;
+};
+
+class AsyncUDPPacket
+{
+ public:
+ AsyncUDPPacket(EthernetUDP &source);
+
+ IPAddress remoteIP();
+ uint16_t length();
+ const uint8_t *data();
+
+ private:
+ EthernetUDP &_udp;
+ IPAddress _remoteIP;
+ uint16_t _remotePort;
+ size_t _readLength = 0;
+
+ static constexpr size_t BUF_SIZE = 512;
+ uint8_t _buffer[BUF_SIZE];
+};
+
+inline bool isMulticast(const IPAddress &ip)
+{
+ return (ip[0] & 0xF0) == 0xE0;
+}
+
+#endif // HAS_ETHERNET
+
+#endif // ASYNC_UDP_H
diff --git a/src/platform/nrf52/architecture.h b/src/platform/nrf52/architecture.h
index 684d20e84..1bbdd77e0 100644
--- a/src/platform/nrf52/architecture.h
+++ b/src/platform/nrf52/architecture.h
@@ -49,6 +49,8 @@
#define HW_VENDOR meshtastic_HardwareModel_RAK2560
#elif defined(WISMESH_TAP)
#define HW_VENDOR meshtastic_HardwareModel_WISMESH_TAP
+#elif defined(WISMESH_TAG)
+#define HW_VENDOR meshtastic_HardwareModel_WISMESH_TAG
#elif defined(GAT562_MESH_TRIAL_TRACKER)
#define HW_VENDOR meshtastic_HardwareModel_GAT562_MESH_TRIAL_TRACKER
#elif defined(RAK4630)
@@ -89,6 +91,8 @@
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_MESH_POCKET
#elif defined(NOMADSTAR_METEOR_PRO)
#define HW_VENDOR meshtastic_HardwareModel_NOMADSTAR_METEOR_PRO
+#elif defined(SEEED_WIO_TRACKER_L1_EINK)
+#define HW_VENDOR meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1_EINK
#elif defined(SEEED_WIO_TRACKER_L1)
#define HW_VENDOR meshtastic_HardwareModel_SEEED_WIO_TRACKER_L1
#else
diff --git a/src/shutdown.h b/src/shutdown.h
index 7e2120149..973e388b1 100644
--- a/src/shutdown.h
+++ b/src/shutdown.h
@@ -40,21 +40,8 @@ void powerCommandsCheck()
#endif
}
-#if defined(ARCH_ESP32) || defined(ARCH_NRF52)
- if (shutdownAtMsec && screen) {
- screen->showSimpleBanner("Shutting Down...", 0); // stays on screen
- }
-#endif
-
if (shutdownAtMsec && millis() > shutdownAtMsec) {
- LOG_INFO("Shut down from admin command");
-#if defined(ARCH_NRF52) || defined(ARCH_ESP32) || defined(ARCH_RP2040)
- playShutdownMelody();
+ shutdownAtMsec = 0;
power->shutdown();
-#elif defined(ARCH_PORTDUINO)
- exit(EXIT_SUCCESS);
-#else
- LOG_WARN("FIXME implement shutdown for this platform");
-#endif
}
}
\ No newline at end of file
diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini
index 1f0f6d126..6b3a2ed99 100644
--- a/variants/diy/platformio.ini
+++ b/variants/diy/platformio.ini
@@ -1,47 +1,3 @@
-; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module
-[env:meshtastic-diy-v1]
-extends = esp32_base
-board = esp32doit-devkit-v1
-board_check = true
-build_flags =
- ${esp32_base.build_flags}
- -D DIY_V1
- -D EBYTE_E22
- -I variants/diy/v1
-
-; Meshtastic DIY v1.1 new schematic based on ESP32-WROOM-32 & SX1262/SX1268 modules
-[env:meshtastic-diy-v1_1]
-extends = esp32_base
-board = esp32doit-devkit-v1
-board_level = extra
-build_flags =
- ${esp32_base.build_flags}
- -D DIY_V1
- -D EBYTE_E22
- -I variants/diy/v1_1
-
-; Port to Disaster Radio's ESP32-v3 Dev Board
-[env:meshtastic-dr-dev]
-extends = esp32_base
-board = esp32doit-devkit-v1
-board_upload.maximum_size = 4194304
-board_upload.maximum_ram_size = 532480
-build_flags =
- ${esp32_base.build_flags}
- -D DR_DEV
- -D EBYTE_E22
- -I variants/diy/dr-dev
-
-; Hydra - Meshtastic DIY v1 hardware with some specific changes
-[env:hydra]
-extends = esp32_base
-board = esp32doit-devkit-v1
-build_flags =
- ${esp32_base.build_flags}
- -D DIY_V1
- -I variants/diy/hydra
-
-
; Promicro + E22(0)-xxxMM / RA-01SH modules board variant - DIY - without TCXO
[env:nrf52_promicro_diy_xtal]
extends = nrf52840_base
@@ -122,35 +78,3 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/diy/seeed-xiao-n
lib_deps =
${nrf52840_base.lib_deps}
debug_tool = jlink
-
-; NanoVHF T-Energy-S3 + E22(0)-xxxM - DIY
-[env:t-energy-s3_e22]
-extends = esp32s3_base
-board = esp32-s3-devkitc-1
-board_build.partitions = default_16MB.csv
-board_level = extra
-board_upload.flash_size = 16MB ;Specify the FLASH capacity as 16MB
-board_build.arduino.memory_type = qio_opi ;Enable internal PSRAM
-build_unflags =
- ${esp32s3_base.build_unflags}
- -D ARDUINO_USB_MODE=1
-build_flags =
- ${esp32s3_base.build_flags}
- -D EBYTE_ESP32_S3
- -D BOARD_HAS_PSRAM
- -D ARDUINO_USB_MODE=0
- -D ARDUINO_USB_CDC_ON_BOOT=1
- -I variants/diy/t-energy-s3_e22
-
-; ESP32 C3 Super Mini Development Board
-; https://www.espboards.dev/esp32/esp32-c3-super-mini/
-[env:esp32c3_super_mini]
-extends = esp32c3_base
-board = esp32-c3-devkitm-1
-build_flags =
- ${esp32_base.build_flags}
- -D PRIVATE_HW
- -I variants/diy/esp32c3_super_mini
- -D ARDUINO_USB_MODE=1
- -D ARDUINO_USB_CDC_ON_BOOT=1
-board_level = extra
diff --git a/variants/betafpv_2400_tx_micro/platformio.ini b/variants/esp32/betafpv_2400_tx_micro/platformio.ini
similarity index 81%
rename from variants/betafpv_2400_tx_micro/platformio.ini
rename to variants/esp32/betafpv_2400_tx_micro/platformio.ini
index 531e8532d..4d163d834 100644
--- a/variants/betafpv_2400_tx_micro/platformio.ini
+++ b/variants/esp32/betafpv_2400_tx_micro/platformio.ini
@@ -8,11 +8,11 @@ build_flags =
-D VTABLES_IN_FLASH=1
-D CONFIG_DISABLE_HAL_LOCKS=1
-O2
- -I variants/betafpv_2400_tx_micro
+ -I variants/esp32/betafpv_2400_tx_micro
board_build.f_cpu = 240000000L
upload_protocol = esptool
;upload_port = /dev/ttyUSB0
upload_speed = 460800
lib_deps =
${esp32_base.lib_deps}
- adafruit/Adafruit NeoPixel @ ^1.12.0
\ No newline at end of file
+ adafruit/Adafruit NeoPixel @ ^1.12.0
diff --git a/variants/betafpv_2400_tx_micro/variant.h b/variants/esp32/betafpv_2400_tx_micro/variant.h
similarity index 100%
rename from variants/betafpv_2400_tx_micro/variant.h
rename to variants/esp32/betafpv_2400_tx_micro/variant.h
diff --git a/variants/betafpv_900_tx_nano/platformio.ini b/variants/esp32/betafpv_900_tx_nano/platformio.ini
similarity index 84%
rename from variants/betafpv_900_tx_nano/platformio.ini
rename to variants/esp32/betafpv_900_tx_nano/platformio.ini
index 3bea16f6b..7e01fd2fa 100644
--- a/variants/betafpv_900_tx_nano/platformio.ini
+++ b/variants/esp32/betafpv_900_tx_nano/platformio.ini
@@ -8,10 +8,10 @@ build_flags =
-D VTABLES_IN_FLASH=1
-D CONFIG_DISABLE_HAL_LOCKS=1
-O2
- -I variants/betafpv_900_tx_nano
+ -I variants/esp32/betafpv_900_tx_nano
board_build.f_cpu = 240000000L
upload_protocol = esptool
;upload_port = /dev/ttyUSB0
upload_speed = 460800
lib_deps =
- ${esp32_base.lib_deps}
\ No newline at end of file
+ ${esp32_base.lib_deps}
diff --git a/variants/betafpv_900_tx_nano/variant.h b/variants/esp32/betafpv_900_tx_nano/variant.h
similarity index 100%
rename from variants/betafpv_900_tx_nano/variant.h
rename to variants/esp32/betafpv_900_tx_nano/variant.h
diff --git a/variants/chatter2/platformio.ini b/variants/esp32/chatter2/platformio.ini
similarity index 91%
rename from variants/chatter2/platformio.ini
rename to variants/esp32/chatter2/platformio.ini
index 83e00d0c4..bf496bf26 100644
--- a/variants/chatter2/platformio.ini
+++ b/variants/esp32/chatter2/platformio.ini
@@ -5,7 +5,7 @@ board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}
-D CHATTER_2
- -I variants/chatter2
+ -I variants/esp32/chatter2
lib_deps =
${esp32_base.lib_deps}
diff --git a/variants/chatter2/variant.h b/variants/esp32/chatter2/variant.h
similarity index 100%
rename from variants/chatter2/variant.h
rename to variants/esp32/chatter2/variant.h
diff --git a/variants/esp32/diy/dr-dev/platformio.ini b/variants/esp32/diy/dr-dev/platformio.ini
new file mode 100644
index 000000000..5461d27b3
--- /dev/null
+++ b/variants/esp32/diy/dr-dev/platformio.ini
@@ -0,0 +1,11 @@
+; Port to Disaster Radio's ESP32-v3 Dev Board
+[env:meshtastic-dr-dev]
+extends = esp32_base
+board = esp32doit-devkit-v1
+board_upload.maximum_size = 4194304
+board_upload.maximum_ram_size = 532480
+build_flags =
+ ${esp32_base.build_flags}
+ -D DR_DEV
+ -D EBYTE_E22
+ -I variants/esp32/diy/dr-dev
diff --git a/variants/diy/dr-dev/variant.h b/variants/esp32/diy/dr-dev/variant.h
similarity index 100%
rename from variants/diy/dr-dev/variant.h
rename to variants/esp32/diy/dr-dev/variant.h
diff --git a/variants/esp32/diy/hydra/platformio.ini b/variants/esp32/diy/hydra/platformio.ini
new file mode 100644
index 000000000..a922ed874
--- /dev/null
+++ b/variants/esp32/diy/hydra/platformio.ini
@@ -0,0 +1,8 @@
+; Hydra - Meshtastic DIY v1 hardware with some specific changes
+[env:hydra]
+extends = esp32_base
+board = esp32doit-devkit-v1
+build_flags =
+ ${esp32_base.build_flags}
+ -D DIY_V1
+ -I variants/esp32/diy/hydra
diff --git a/variants/diy/hydra/variant.h b/variants/esp32/diy/hydra/variant.h
similarity index 100%
rename from variants/diy/hydra/variant.h
rename to variants/esp32/diy/hydra/variant.h
diff --git a/variants/esp32/diy/v1/platformio.ini b/variants/esp32/diy/v1/platformio.ini
new file mode 100644
index 000000000..bcbd57cfa
--- /dev/null
+++ b/variants/esp32/diy/v1/platformio.ini
@@ -0,0 +1,10 @@
+; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module
+[env:meshtastic-diy-v1]
+extends = esp32_base
+board = esp32doit-devkit-v1
+board_check = true
+build_flags =
+ ${esp32_base.build_flags}
+ -D DIY_V1
+ -D EBYTE_E22
+ -I variants/esp32/diy/v1
diff --git a/variants/diy/v1/variant.h b/variants/esp32/diy/v1/variant.h
similarity index 100%
rename from variants/diy/v1/variant.h
rename to variants/esp32/diy/v1/variant.h
diff --git a/variants/esp32/diy/v1_1/platformio.ini b/variants/esp32/diy/v1_1/platformio.ini
new file mode 100644
index 000000000..1431bd4c8
--- /dev/null
+++ b/variants/esp32/diy/v1_1/platformio.ini
@@ -0,0 +1,10 @@
+; Meshtastic DIY v1.1 new schematic based on ESP32-WROOM-32 & SX1262/SX1268 modules
+[env:meshtastic-diy-v1_1]
+extends = esp32_base
+board = esp32doit-devkit-v1
+board_level = extra
+build_flags =
+ ${esp32_base.build_flags}
+ -D DIY_V1
+ -D EBYTE_E22
+ -I variants/esp32/diy/v1_1
diff --git a/variants/diy/v1_1/variant.h b/variants/esp32/diy/v1_1/variant.h
similarity index 100%
rename from variants/diy/v1_1/variant.h
rename to variants/esp32/diy/v1_1/variant.h
diff --git a/variants/hackerboxes_esp32_io/platformio.ini b/variants/esp32/hackerboxes_esp32_io/platformio.ini
similarity index 85%
rename from variants/hackerboxes_esp32_io/platformio.ini
rename to variants/esp32/hackerboxes_esp32_io/platformio.ini
index f024dac3e..fc5f6701c 100644
--- a/variants/hackerboxes_esp32_io/platformio.ini
+++ b/variants/esp32/hackerboxes_esp32_io/platformio.ini
@@ -5,7 +5,7 @@ board_level = extra
build_flags =
${esp32_base.build_flags}
-D PRIVATE_HW
- -I variants/hackerboxes_esp32_io
+ -I variants/esp32/hackerboxes_esp32_io
monitor_speed = 115200
upload_protocol = esptool
;upload_port = /dev/ttyUSB0
diff --git a/variants/hackerboxes_esp32_io/variant.h b/variants/esp32/hackerboxes_esp32_io/variant.h
similarity index 100%
rename from variants/hackerboxes_esp32_io/variant.h
rename to variants/esp32/hackerboxes_esp32_io/variant.h
diff --git a/variants/heltec_v1/platformio.ini b/variants/esp32/heltec_v1/platformio.ini
similarity index 70%
rename from variants/heltec_v1/platformio.ini
rename to variants/esp32/heltec_v1/platformio.ini
index ee10ef0f6..4be3ba655 100644
--- a/variants/heltec_v1/platformio.ini
+++ b/variants/esp32/heltec_v1/platformio.ini
@@ -4,4 +4,6 @@ extends = esp32_base
board_level = extra
board = heltec_wifi_lora_32
build_flags =
- ${esp32_base.build_flags} -D HELTEC_V1 -I variants/heltec_v1
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D HELTEC_V1
+ -I variants/esp32/heltec_v1
diff --git a/variants/heltec_v1/variant.h b/variants/esp32/heltec_v1/variant.h
similarity index 100%
rename from variants/heltec_v1/variant.h
rename to variants/esp32/heltec_v1/variant.h
diff --git a/variants/heltec_v2.1/platformio.ini b/variants/esp32/heltec_v2.1/platformio.ini
similarity index 65%
rename from variants/heltec_v2.1/platformio.ini
rename to variants/esp32/heltec_v2.1/platformio.ini
index ea2281911..763f9764c 100644
--- a/variants/heltec_v2.1/platformio.ini
+++ b/variants/esp32/heltec_v2.1/platformio.ini
@@ -4,5 +4,7 @@ board_level = extra
extends = esp32_base
board = heltec_wifi_lora_32_V2
build_flags =
- ${esp32_base.build_flags} -D HELTEC_V2_1 -I variants/heltec_v2.1
- -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D HELTEC_V2_1
+ -I variants/esp32/heltec_v2.1
+ -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
diff --git a/variants/heltec_v2.1/variant.h b/variants/esp32/heltec_v2.1/variant.h
similarity index 100%
rename from variants/heltec_v2.1/variant.h
rename to variants/esp32/heltec_v2.1/variant.h
diff --git a/variants/heltec_v2/platformio.ini b/variants/esp32/heltec_v2/platformio.ini
similarity index 70%
rename from variants/heltec_v2/platformio.ini
rename to variants/esp32/heltec_v2/platformio.ini
index c81bca8ba..ed455616d 100644
--- a/variants/heltec_v2/platformio.ini
+++ b/variants/esp32/heltec_v2/platformio.ini
@@ -4,4 +4,6 @@ board_level = extra
extends = esp32_base
board = heltec_wifi_lora_32_V2
build_flags =
- ${esp32_base.build_flags} -D HELTEC_V2_0 -I variants/heltec_v2
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D HELTEC_V2_0
+ -I variants/esp32/heltec_v2
diff --git a/variants/heltec_v2/variant.h b/variants/esp32/heltec_v2/variant.h
similarity index 100%
rename from variants/heltec_v2/variant.h
rename to variants/esp32/heltec_v2/variant.h
diff --git a/variants/heltec_wireless_bridge/platformio.ini b/variants/esp32/heltec_wireless_bridge/platformio.ini
similarity index 94%
rename from variants/heltec_wireless_bridge/platformio.ini
rename to variants/esp32/heltec_wireless_bridge/platformio.ini
index ab30eb744..60e686f9e 100644
--- a/variants/heltec_wireless_bridge/platformio.ini
+++ b/variants/esp32/heltec_wireless_bridge/platformio.ini
@@ -4,7 +4,7 @@ extends = esp32_base
board = heltec_wifi_lora_32
build_flags =
${esp32_base.build_flags}
- -I variants/heltec_wireless_bridge
+ -I variants/esp32/heltec_wireless_bridge
-D HELTEC_WIRELESS_BRIDGE
-D BOARD_HAS_PSRAM
-D RADIOLIB_EXCLUDE_LR11X0=1
diff --git a/variants/heltec_wireless_bridge/variant.h b/variants/esp32/heltec_wireless_bridge/variant.h
similarity index 100%
rename from variants/heltec_wireless_bridge/variant.h
rename to variants/esp32/heltec_wireless_bridge/variant.h
diff --git a/variants/heltec_wsl_v2.1/platformio.ini b/variants/esp32/heltec_wsl_v2.1/platformio.ini
similarity index 56%
rename from variants/heltec_wsl_v2.1/platformio.ini
rename to variants/esp32/heltec_wsl_v2.1/platformio.ini
index f4fff9698..eb44c88d2 100644
--- a/variants/heltec_wsl_v2.1/platformio.ini
+++ b/variants/esp32/heltec_wsl_v2.1/platformio.ini
@@ -3,5 +3,7 @@ extends = esp32_base
board = heltec_wireless_stick_lite
board_level = extra
build_flags =
- ${esp32_base.build_flags} -D PRIVATE_HW -I variants/heltec_wsl_v2.1
- -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32/heltec_wsl_v2.1
+ -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
diff --git a/variants/heltec_wsl_v2.1/variant.h b/variants/esp32/heltec_wsl_v2.1/variant.h
similarity index 100%
rename from variants/heltec_wsl_v2.1/variant.h
rename to variants/esp32/heltec_wsl_v2.1/variant.h
diff --git a/variants/m5stack_core/pins_arduino.h b/variants/esp32/m5stack_core/pins_arduino.h
similarity index 100%
rename from variants/m5stack_core/pins_arduino.h
rename to variants/esp32/m5stack_core/pins_arduino.h
diff --git a/variants/m5stack_core/platformio.ini b/variants/esp32/m5stack_core/platformio.ini
similarity index 90%
rename from variants/m5stack_core/platformio.ini
rename to variants/esp32/m5stack_core/platformio.ini
index 7418d9e17..469d93f94 100644
--- a/variants/m5stack_core/platformio.ini
+++ b/variants/esp32/m5stack_core/platformio.ini
@@ -5,7 +5,8 @@ monitor_filters = esp32_exception_decoder
build_src_filter =
${esp32_base.build_src_filter}
build_flags =
- ${esp32_base.build_flags} -I variants/m5stack_core
+ ${esp32_base.build_flags}
+ -I variants/esp32/m5stack_core
-DILI9341_DRIVER
-DM5STACK
-DUSER_SETUP_LOADED
diff --git a/variants/m5stack_core/variant.h b/variants/esp32/m5stack_core/variant.h
similarity index 100%
rename from variants/m5stack_core/variant.h
rename to variants/esp32/m5stack_core/variant.h
diff --git a/variants/m5stack_coreink/pins_arduino.h b/variants/esp32/m5stack_coreink/pins_arduino.h
similarity index 100%
rename from variants/m5stack_coreink/pins_arduino.h
rename to variants/esp32/m5stack_coreink/pins_arduino.h
diff --git a/variants/m5stack_coreink/platformio.ini b/variants/esp32/m5stack_coreink/platformio.ini
similarity index 90%
rename from variants/m5stack_coreink/platformio.ini
rename to variants/esp32/m5stack_coreink/platformio.ini
index 70da53379..1a00788e3 100644
--- a/variants/m5stack_coreink/platformio.ini
+++ b/variants/esp32/m5stack_coreink/platformio.ini
@@ -5,7 +5,8 @@ board_check = true
build_src_filter =
${esp32_base.build_src_filter}
build_flags =
- ${esp32_base.build_flags} -I variants/m5stack_coreink
+ ${esp32_base.build_flags}
+ -I variants/esp32/m5stack_coreink
;-D RADIOLIB_VERBOSE
-Ofast
-D__MCUXPRESSO
diff --git a/variants/m5stack_coreink/variant.h b/variants/esp32/m5stack_coreink/variant.h
similarity index 100%
rename from variants/m5stack_coreink/variant.h
rename to variants/esp32/m5stack_coreink/variant.h
diff --git a/variants/nano-g1-explorer/platformio.ini b/variants/esp32/nano-g1-explorer/platformio.ini
similarity index 65%
rename from variants/nano-g1-explorer/platformio.ini
rename to variants/esp32/nano-g1-explorer/platformio.ini
index 22037cbc9..2ba1f49e9 100644
--- a/variants/nano-g1-explorer/platformio.ini
+++ b/variants/esp32/nano-g1-explorer/platformio.ini
@@ -5,4 +5,6 @@ board = ttgo-t-beam
lib_deps =
${esp32_base.lib_deps}
build_flags =
- ${esp32_base.build_flags} -D NANO_G1_EXPLORER -I variants/nano-g1-explorer
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D NANO_G1_EXPLORER
+ -I variants/esp32/nano-g1-explorer
diff --git a/variants/nano-g1-explorer/variant.h b/variants/esp32/nano-g1-explorer/variant.h
similarity index 100%
rename from variants/nano-g1-explorer/variant.h
rename to variants/esp32/nano-g1-explorer/variant.h
diff --git a/variants/nano-g1/platformio.ini b/variants/esp32/nano-g1/platformio.ini
similarity index 67%
rename from variants/nano-g1/platformio.ini
rename to variants/esp32/nano-g1/platformio.ini
index a3107423e..be8227de2 100644
--- a/variants/nano-g1/platformio.ini
+++ b/variants/esp32/nano-g1/platformio.ini
@@ -5,4 +5,6 @@ board = ttgo-t-beam
lib_deps =
${esp32_base.lib_deps}
build_flags =
- ${esp32_base.build_flags} -D NANO_G1 -I variants/nano-g1
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D NANO_G1
+ -I variants/esp32/nano-g1
diff --git a/variants/nano-g1/variant.h b/variants/esp32/nano-g1/variant.h
similarity index 100%
rename from variants/nano-g1/variant.h
rename to variants/esp32/nano-g1/variant.h
diff --git a/variants/radiomaster_900_bandit/platformio.ini b/variants/esp32/radiomaster_900_bandit/platformio.ini
similarity index 90%
rename from variants/radiomaster_900_bandit/platformio.ini
rename to variants/esp32/radiomaster_900_bandit/platformio.ini
index f87025937..d9eb78a57 100644
--- a/variants/radiomaster_900_bandit/platformio.ini
+++ b/variants/esp32/radiomaster_900_bandit/platformio.ini
@@ -8,7 +8,7 @@ build_flags =
-DCONFIG_DISABLE_HAL_LOCKS=1
-DHAS_STK8XXX=1
-O2
- -Ivariants/radiomaster_900_bandit
+ -I variants/esp32/radiomaster_900_bandit
board_build.f_cpu = 240000000L
upload_protocol = esptool
lib_deps =
diff --git a/variants/radiomaster_900_bandit/variant.h b/variants/esp32/radiomaster_900_bandit/variant.h
similarity index 100%
rename from variants/radiomaster_900_bandit/variant.h
rename to variants/esp32/radiomaster_900_bandit/variant.h
diff --git a/variants/radiomaster_900_bandit_micro/platformio.ini b/variants/esp32/radiomaster_900_bandit_micro/platformio.ini
similarity index 87%
rename from variants/radiomaster_900_bandit_micro/platformio.ini
rename to variants/esp32/radiomaster_900_bandit_micro/platformio.ini
index 9e54f5859..36a45787b 100644
--- a/variants/radiomaster_900_bandit_micro/platformio.ini
+++ b/variants/esp32/radiomaster_900_bandit_micro/platformio.ini
@@ -12,8 +12,8 @@ build_flags =
-DVTABLES_IN_FLASH=1
-DCONFIG_DISABLE_HAL_LOCKS=1
-O2
- -Ivariants/radiomaster_900_bandit_nano
+ -I variants/esp32/radiomaster_900_bandit_nano
board_build.f_cpu = 240000000L
upload_protocol = esptool
lib_deps =
- ${esp32_base.lib_deps}
\ No newline at end of file
+ ${esp32_base.lib_deps}
diff --git a/variants/radiomaster_900_bandit_nano/platformio.ini b/variants/esp32/radiomaster_900_bandit_nano/platformio.ini
similarity index 79%
rename from variants/radiomaster_900_bandit_nano/platformio.ini
rename to variants/esp32/radiomaster_900_bandit_nano/platformio.ini
index 0d43b8665..9a7fad83b 100644
--- a/variants/radiomaster_900_bandit_nano/platformio.ini
+++ b/variants/esp32/radiomaster_900_bandit_nano/platformio.ini
@@ -7,8 +7,8 @@ build_flags =
-DVTABLES_IN_FLASH=1
-DCONFIG_DISABLE_HAL_LOCKS=1
-O2
- -Ivariants/radiomaster_900_bandit_nano
+ -I variants/esp32/radiomaster_900_bandit_nano
board_build.f_cpu = 240000000L
upload_protocol = esptool
lib_deps =
- ${esp32_base.lib_deps}
\ No newline at end of file
+ ${esp32_base.lib_deps}
diff --git a/variants/radiomaster_900_bandit_nano/variant.h b/variants/esp32/radiomaster_900_bandit_nano/variant.h
similarity index 100%
rename from variants/radiomaster_900_bandit_nano/variant.h
rename to variants/esp32/radiomaster_900_bandit_nano/variant.h
diff --git a/variants/rak11200/pins_arduino.h b/variants/esp32/rak11200/pins_arduino.h
similarity index 100%
rename from variants/rak11200/pins_arduino.h
rename to variants/esp32/rak11200/pins_arduino.h
diff --git a/variants/rak11200/platformio.ini b/variants/esp32/rak11200/platformio.ini
similarity index 50%
rename from variants/rak11200/platformio.ini
rename to variants/esp32/rak11200/platformio.ini
index eddc3458e..6149333f6 100644
--- a/variants/rak11200/platformio.ini
+++ b/variants/esp32/rak11200/platformio.ini
@@ -3,5 +3,7 @@ extends = esp32_base
board = wiscore_rak11200
board_check = true
build_flags =
- ${esp32_base.build_flags} -D RAK_11200 -I variants/rak11200
-upload_speed = 115200
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D RAK_11200
+ -I variants/esp32/rak11200
+upload_speed = 115200
diff --git a/variants/rak11200/variant.h b/variants/esp32/rak11200/variant.h
similarity index 100%
rename from variants/rak11200/variant.h
rename to variants/esp32/rak11200/variant.h
diff --git a/variants/station-g1/platformio.ini b/variants/esp32/station-g1/platformio.ini
similarity index 66%
rename from variants/station-g1/platformio.ini
rename to variants/esp32/station-g1/platformio.ini
index a466414d0..693a41ae8 100644
--- a/variants/station-g1/platformio.ini
+++ b/variants/esp32/station-g1/platformio.ini
@@ -5,4 +5,6 @@ board = ttgo-t-beam
lib_deps =
${esp32_base.lib_deps}
build_flags =
- ${esp32_base.build_flags} -D STATION_G1 -I variants/station-g1
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D STATION_G1
+ -I variants/esp32/station-g1
diff --git a/variants/station-g1/variant.h b/variants/esp32/station-g1/variant.h
similarity index 100%
rename from variants/station-g1/variant.h
rename to variants/esp32/station-g1/variant.h
diff --git a/variants/tbeam/platformio.ini b/variants/esp32/tbeam/platformio.ini
similarity index 78%
rename from variants/tbeam/platformio.ini
rename to variants/esp32/tbeam/platformio.ini
index 9049836a3..084a981da 100644
--- a/variants/tbeam/platformio.ini
+++ b/variants/esp32/tbeam/platformio.ini
@@ -6,8 +6,10 @@ board_check = true
lib_deps =
${esp32_base.lib_deps}
build_flags =
- ${esp32_base.build_flags} -D TBEAM_V10 -I variants/tbeam
+ ${esp32_base.build_flags}
+ -D TBEAM_V10
+ -I variants/esp32/tbeam
-DGPS_POWER_TOGGLE ; comment this line to disable double press function on the user button to turn off gps entirely.
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/tbeam/variant.h b/variants/esp32/tbeam/variant.h
similarity index 100%
rename from variants/tbeam/variant.h
rename to variants/esp32/tbeam/variant.h
diff --git a/variants/tbeam_v07/platformio.ini b/variants/esp32/tbeam_v07/platformio.ini
similarity index 69%
rename from variants/tbeam_v07/platformio.ini
rename to variants/esp32/tbeam_v07/platformio.ini
index 0cba92400..1647d9fd7 100644
--- a/variants/tbeam_v07/platformio.ini
+++ b/variants/esp32/tbeam_v07/platformio.ini
@@ -4,4 +4,6 @@ board_level = extra
extends = esp32_base
board = ttgo-t-beam
build_flags =
- ${esp32_base.build_flags} -D TBEAM_V07 -I variants/tbeam_v07
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D TBEAM_V07
+ -I variants/esp32/tbeam_v07
diff --git a/variants/tbeam_v07/variant.h b/variants/esp32/tbeam_v07/variant.h
similarity index 100%
rename from variants/tbeam_v07/variant.h
rename to variants/esp32/tbeam_v07/variant.h
diff --git a/variants/tlora_v1/platformio.ini b/variants/esp32/tlora_v1/platformio.ini
similarity index 50%
rename from variants/tlora_v1/platformio.ini
rename to variants/esp32/tlora_v1/platformio.ini
index 17fc71d72..1d879b6b0 100644
--- a/variants/tlora_v1/platformio.ini
+++ b/variants/esp32/tlora_v1/platformio.ini
@@ -3,5 +3,7 @@ board_level = extra
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V1 -I variants/tlora_v1
-upload_speed = 115200
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D TLORA_V1
+ -I variants/esp32/tlora_v1
+upload_speed = 115200
diff --git a/variants/tlora_v1/variant.h b/variants/esp32/tlora_v1/variant.h
similarity index 100%
rename from variants/tlora_v1/variant.h
rename to variants/esp32/tlora_v1/variant.h
diff --git a/variants/tlora_v1_3/platformio.ini b/variants/esp32/tlora_v1_3/platformio.ini
similarity index 50%
rename from variants/tlora_v1_3/platformio.ini
rename to variants/esp32/tlora_v1_3/platformio.ini
index c5eca589f..523c38a80 100644
--- a/variants/tlora_v1_3/platformio.ini
+++ b/variants/esp32/tlora_v1_3/platformio.ini
@@ -3,5 +3,5 @@ board_level = extra
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V1_3 -I variants/tlora_v1_3
-upload_speed = 115200
\ No newline at end of file
+ ${esp32_base.build_flags} -D TLORA_V1_3 -I variants/esp32/tlora_v1_3
+upload_speed = 115200
diff --git a/variants/tlora_v1_3/variant.h b/variants/esp32/tlora_v1_3/variant.h
similarity index 100%
rename from variants/tlora_v1_3/variant.h
rename to variants/esp32/tlora_v1_3/variant.h
diff --git a/variants/tlora_v2/platformio.ini b/variants/esp32/tlora_v2/platformio.ini
similarity index 56%
rename from variants/tlora_v2/platformio.ini
rename to variants/esp32/tlora_v2/platformio.ini
index 8087a30e3..4a710ee34 100644
--- a/variants/tlora_v2/platformio.ini
+++ b/variants/esp32/tlora_v2/platformio.ini
@@ -3,4 +3,6 @@ board_level = extra
extends = esp32_base
board = ttgo-lora32-v1
build_flags =
- ${esp32_base.build_flags} -D TLORA_V2 -I variants/tlora_v2
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D TLORA_V2
+ -I variants/esp32/tlora_v2
diff --git a/variants/tlora_v2/variant.h b/variants/esp32/tlora_v2/variant.h
similarity index 100%
rename from variants/tlora_v2/variant.h
rename to variants/esp32/tlora_v2/variant.h
diff --git a/variants/tlora_v2_1_16/platformio.ini b/variants/esp32/tlora_v2_1_16/platformio.ini
similarity index 68%
rename from variants/tlora_v2_1_16/platformio.ini
rename to variants/esp32/tlora_v2_1_16/platformio.ini
index 4253cc6af..bd85aa847 100644
--- a/variants/tlora_v2_1_16/platformio.ini
+++ b/variants/esp32/tlora_v2_1_16/platformio.ini
@@ -3,6 +3,6 @@ extends = esp32_base
board = ttgo-lora32-v21
board_check = true
build_flags =
- ${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/tlora_v2_1_16
+ ${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/esp32/tlora_v2_1_16
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
-upload_speed = 115200
\ No newline at end of file
+upload_speed = 115200
diff --git a/variants/tlora_v2_1_16/variant.h b/variants/esp32/tlora_v2_1_16/variant.h
similarity index 100%
rename from variants/tlora_v2_1_16/variant.h
rename to variants/esp32/tlora_v2_1_16/variant.h
diff --git a/variants/tlora_v2_1_16_tcxo/platformio.ini b/variants/esp32/tlora_v2_1_16_tcxo/platformio.ini
similarity index 90%
rename from variants/tlora_v2_1_16_tcxo/platformio.ini
rename to variants/esp32/tlora_v2_1_16_tcxo/platformio.ini
index 5c7cb7eb3..9404faa02 100644
--- a/variants/tlora_v2_1_16_tcxo/platformio.ini
+++ b/variants/esp32/tlora_v2_1_16_tcxo/platformio.ini
@@ -5,7 +5,7 @@ board = ttgo-lora32-v21
build_flags =
${esp32_base.build_flags}
-D TLORA_V2_1_16
- -I variants/tlora_v2_1_16
+ -I variants/esp32/tlora_v2_1_16
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
-D LORA_TCXO_GPIO=33
upload_speed = 115200
\ No newline at end of file
diff --git a/variants/tlora_v2_1_18/platformio.ini b/variants/esp32/tlora_v2_1_18/platformio.ini
similarity index 55%
rename from variants/tlora_v2_1_18/platformio.ini
rename to variants/esp32/tlora_v2_1_18/platformio.ini
index 48a001ced..432117485 100644
--- a/variants/tlora_v2_1_18/platformio.ini
+++ b/variants/esp32/tlora_v2_1_18/platformio.ini
@@ -4,4 +4,6 @@ board_level = extra
board = ttgo-lora32-v21
build_flags =
- ${esp32_base.build_flags} -D TLORA_V2_1_18 -I variants/tlora_v2_1_18
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D TLORA_V2_1_18
+ -I variants/esp32/tlora_v2_1_18
diff --git a/variants/tlora_v2_1_18/variant.h b/variants/esp32/tlora_v2_1_18/variant.h
similarity index 100%
rename from variants/tlora_v2_1_18/variant.h
rename to variants/esp32/tlora_v2_1_18/variant.h
diff --git a/variants/tlora_v3_3_0_tcxo/platformio.ini b/variants/esp32/tlora_v3_3_0_tcxo/platformio.ini
similarity index 89%
rename from variants/tlora_v3_3_0_tcxo/platformio.ini
rename to variants/esp32/tlora_v3_3_0_tcxo/platformio.ini
index 8d060a087..f1110386e 100644
--- a/variants/tlora_v3_3_0_tcxo/platformio.ini
+++ b/variants/esp32/tlora_v3_3_0_tcxo/platformio.ini
@@ -4,7 +4,7 @@ board = ttgo-lora32-v21
build_flags =
${esp32_base.build_flags}
-D TLORA_V2_1_16
- -I variants/tlora_v2_1_16
+ -I variants/esp32/tlora_v2_1_16
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
-D LORA_TCXO_GPIO=12
-D BUTTON_PIN=0
\ No newline at end of file
diff --git a/variants/trackerd/platformio.ini b/variants/esp32/trackerd/platformio.ini
similarity index 56%
rename from variants/trackerd/platformio.ini
rename to variants/esp32/trackerd/platformio.ini
index 654534a15..3c2726a3c 100644
--- a/variants/trackerd/platformio.ini
+++ b/variants/esp32/trackerd/platformio.ini
@@ -4,5 +4,5 @@ board = pico32
board_build.f_flash = 80000000L
build_flags =
- ${esp32_base.build_flags} -D PRIVATE_HW -I variants/trackerd -D BSFILE=\"boards/dragino_lbt2.h\"
+ ${esp32_base.build_flags} -D PRIVATE_HW -I variants/esp32/trackerd -D BSFILE=\"boards/dragino_lbt2.h\"
;board_build.partitions = no_ota.csv
\ No newline at end of file
diff --git a/variants/trackerd/variant.h b/variants/esp32/trackerd/variant.h
similarity index 100%
rename from variants/trackerd/variant.h
rename to variants/esp32/trackerd/variant.h
diff --git a/variants/wiphone/pins_arduino.h b/variants/esp32/wiphone/pins_arduino.h
similarity index 100%
rename from variants/wiphone/pins_arduino.h
rename to variants/esp32/wiphone/pins_arduino.h
diff --git a/variants/wiphone/platformio.ini b/variants/esp32/wiphone/platformio.ini
similarity index 81%
rename from variants/wiphone/platformio.ini
rename to variants/esp32/wiphone/platformio.ini
index 362102731..5cce94b13 100644
--- a/variants/wiphone/platformio.ini
+++ b/variants/esp32/wiphone/platformio.ini
@@ -5,7 +5,9 @@ board_level = extra
monitor_filters = esp32_exception_decoder
board_build.partitions = default_16MB.csv
build_flags =
- ${esp32_base.build_flags} -D WIPHONE -I variants/wiphone
+ ${esp32_base.build_flags}
+ -D WIPHONE
+ -I variants/esp32/wiphone
lib_deps =
${esp32_base.lib_deps}
lovyan03/LovyanGFX@^1.2.0
diff --git a/variants/wiphone/variant.h b/variants/esp32/wiphone/variant.h
similarity index 100%
rename from variants/wiphone/variant.h
rename to variants/esp32/wiphone/variant.h
diff --git a/variants/ai-c3/platformio.ini b/variants/esp32c3/ai-c3/platformio.ini
similarity index 57%
rename from variants/ai-c3/platformio.ini
rename to variants/esp32c3/ai-c3/platformio.ini
index 2869ca580..a25c0cb19 100644
--- a/variants/ai-c3/platformio.ini
+++ b/variants/esp32c3/ai-c3/platformio.ini
@@ -2,7 +2,7 @@
extends = esp32c3_base
board = esp32-c3-devkitm-1
board_level = extra
-build_flags = ${esp32c3_base.build_flags}
+build_flags =
+ ${esp32c3_base.build_flags}
-D PRIVATE_HW
- -I variants/ai-c3
-
+ -I variants/esp32c3/ai-c3
diff --git a/variants/ai-c3/variant.h b/variants/esp32c3/ai-c3/variant.h
similarity index 100%
rename from variants/ai-c3/variant.h
rename to variants/esp32c3/ai-c3/variant.h
diff --git a/variants/diy/esp32c3_super_mini/pins_arduino.h b/variants/esp32c3/diy/esp32c3_super_mini/pins_arduino.h
similarity index 100%
rename from variants/diy/esp32c3_super_mini/pins_arduino.h
rename to variants/esp32c3/diy/esp32c3_super_mini/pins_arduino.h
diff --git a/variants/esp32c3/diy/esp32c3_super_mini/platformio.ini b/variants/esp32c3/diy/esp32c3_super_mini/platformio.ini
new file mode 100644
index 000000000..c87baa7bf
--- /dev/null
+++ b/variants/esp32c3/diy/esp32c3_super_mini/platformio.ini
@@ -0,0 +1,12 @@
+; ESP32 C3 Super Mini Development Board
+; https://www.espboards.dev/esp32/esp32-c3-super-mini/
+[env:esp32c3_super_mini]
+extends = esp32c3_base
+board = esp32-c3-devkitm-1
+build_flags =
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32c3/diy/esp32c3_super_mini
+ -D ARDUINO_USB_MODE=1
+ -D ARDUINO_USB_CDC_ON_BOOT=1
+board_level = extra
diff --git a/variants/diy/esp32c3_super_mini/variant.h b/variants/esp32c3/diy/esp32c3_super_mini/variant.h
similarity index 100%
rename from variants/diy/esp32c3_super_mini/variant.h
rename to variants/esp32c3/diy/esp32c3_super_mini/variant.h
diff --git a/variants/hackerboxes_esp32c3_oled/platformio.ini b/variants/esp32c3/hackerboxes_esp32c3_oled/platformio.ini
similarity index 80%
rename from variants/hackerboxes_esp32c3_oled/platformio.ini
rename to variants/esp32c3/hackerboxes_esp32c3_oled/platformio.ini
index 4fcbf2ade..5a72b9d74 100644
--- a/variants/hackerboxes_esp32c3_oled/platformio.ini
+++ b/variants/esp32c3/hackerboxes_esp32c3_oled/platformio.ini
@@ -7,8 +7,8 @@ build_flags =
-D PRIVATE_HW
-D ARDUINO_USB_MODE=1
-D ARDUINO_USB_CDC_ON_BOOT=1
- -I variants/hackerboxes_esp32c3_oled
+ -I variants/esp32c3/hackerboxes_esp32c3_oled
monitor_speed = 115200
upload_protocol = esptool
;upload_port = /dev/ttyUSB0
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/hackerboxes_esp32c3_oled/variant.h b/variants/esp32c3/hackerboxes_esp32c3_oled/variant.h
similarity index 100%
rename from variants/hackerboxes_esp32c3_oled/variant.h
rename to variants/esp32c3/hackerboxes_esp32c3_oled/variant.h
diff --git a/variants/heltec_esp32c3/pins_arduino.h b/variants/esp32c3/heltec_esp32c3/pins_arduino.h
similarity index 100%
rename from variants/heltec_esp32c3/pins_arduino.h
rename to variants/esp32c3/heltec_esp32c3/pins_arduino.h
diff --git a/variants/heltec_esp32c3/platformio.ini b/variants/esp32c3/heltec_esp32c3/platformio.ini
similarity index 78%
rename from variants/heltec_esp32c3/platformio.ini
rename to variants/esp32c3/heltec_esp32c3/platformio.ini
index 6fe5c3c69..d21d64d2a 100644
--- a/variants/heltec_esp32c3/platformio.ini
+++ b/variants/esp32c3/heltec_esp32c3/platformio.ini
@@ -4,8 +4,8 @@ board = esp32-c3-devkitm-1
build_flags =
${esp32_base.build_flags}
-D HELTEC_HT62
- -I variants/heltec_esp32c3
+ -I variants/esp32c3/heltec_esp32c3
monitor_speed = 115200
upload_protocol = esptool
;upload_port = /dev/ttyUSB0
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/heltec_esp32c3/variant.h b/variants/esp32c3/heltec_esp32c3/variant.h
similarity index 100%
rename from variants/heltec_esp32c3/variant.h
rename to variants/esp32c3/heltec_esp32c3/variant.h
diff --git a/variants/heltec_hru_3601/pins_arduino.h b/variants/esp32c3/heltec_hru_3601/pins_arduino.h
similarity index 100%
rename from variants/heltec_hru_3601/pins_arduino.h
rename to variants/esp32c3/heltec_hru_3601/pins_arduino.h
diff --git a/variants/heltec_hru_3601/platformio.ini b/variants/esp32c3/heltec_hru_3601/platformio.ini
similarity index 84%
rename from variants/heltec_hru_3601/platformio.ini
rename to variants/esp32c3/heltec_hru_3601/platformio.ini
index 3668e72b7..b5ff63eae 100644
--- a/variants/heltec_hru_3601/platformio.ini
+++ b/variants/esp32c3/heltec_hru_3601/platformio.ini
@@ -4,6 +4,6 @@ board = adafruit_qtpy_esp32c3
build_flags =
${esp32_base.build_flags}
-D HELTEC_HRU_3601
- -I variants/heltec_hru_3601
+ -I variants/esp32c3/heltec_hru_3601
lib_deps = ${esp32c3_base.lib_deps}
adafruit/Adafruit NeoPixel @ ^1.12.0
diff --git a/variants/heltec_hru_3601/variant.h b/variants/esp32c3/heltec_hru_3601/variant.h
similarity index 100%
rename from variants/heltec_hru_3601/variant.h
rename to variants/esp32c3/heltec_hru_3601/variant.h
diff --git a/variants/m5stack-stamp-c3/pins_arduino.h b/variants/esp32c3/m5stack-stamp-c3/pins_arduino.h
similarity index 100%
rename from variants/m5stack-stamp-c3/pins_arduino.h
rename to variants/esp32c3/m5stack-stamp-c3/pins_arduino.h
diff --git a/variants/m5stack-stamp-c3/platformio.ini b/variants/esp32c3/m5stack-stamp-c3/platformio.ini
similarity index 86%
rename from variants/m5stack-stamp-c3/platformio.ini
rename to variants/esp32c3/m5stack-stamp-c3/platformio.ini
index bab65b621..1072df664 100644
--- a/variants/m5stack-stamp-c3/platformio.ini
+++ b/variants/esp32c3/m5stack-stamp-c3/platformio.ini
@@ -5,7 +5,7 @@ board_level = extra
build_flags =
${esp32_base.build_flags}
-D PRIVATE_HW
- -I variants/m5stack-stamp-c3
+ -I variants/esp32c3/m5stack-stamp-c3
monitor_speed = 115200
upload_protocol = esptool
;upload_port = /dev/ttyACM2
diff --git a/variants/m5stack-stamp-c3/variant.h b/variants/esp32c3/m5stack-stamp-c3/variant.h
similarity index 100%
rename from variants/m5stack-stamp-c3/variant.h
rename to variants/esp32c3/m5stack-stamp-c3/variant.h
diff --git a/variants/nugget_s2_lora/platformio.ini b/variants/esp32s2/nugget_s2_lora/platformio.ini
similarity index 54%
rename from variants/nugget_s2_lora/platformio.ini
rename to variants/esp32s2/nugget_s2_lora/platformio.ini
index 2a7ff1013..a091a705f 100644
--- a/variants/nugget_s2_lora/platformio.ini
+++ b/variants/esp32s2/nugget_s2_lora/platformio.ini
@@ -3,4 +3,6 @@ extends = esp32s2_base
board = lolin_s2_mini
board_level = extra
build_flags =
- ${esp32s2_base.build_flags} -D PRIVATE_HW -I variants/nugget_s2_lora
\ No newline at end of file
+ ${esp32s2_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32s2/nugget_s2_lora
diff --git a/variants/nugget_s2_lora/variant.h b/variants/esp32s2/nugget_s2_lora/variant.h
similarity index 100%
rename from variants/nugget_s2_lora/variant.h
rename to variants/esp32s2/nugget_s2_lora/variant.h
diff --git a/variants/CDEBYTE_EoRa-S3/pins_arduino.h b/variants/esp32s3/CDEBYTE_EoRa-S3/pins_arduino.h
similarity index 100%
rename from variants/CDEBYTE_EoRa-S3/pins_arduino.h
rename to variants/esp32s3/CDEBYTE_EoRa-S3/pins_arduino.h
diff --git a/variants/CDEBYTE_EoRa-S3/platformio.ini b/variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini
similarity index 69%
rename from variants/CDEBYTE_EoRa-S3/platformio.ini
rename to variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini
index a1642ff97..dbd420f04 100644
--- a/variants/CDEBYTE_EoRa-S3/platformio.ini
+++ b/variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini
@@ -4,5 +4,5 @@ board = CDEBYTE_EoRa-S3
build_flags =
${esp32s3_base.build_flags}
-D CDEBYTE_EORA_S3
- -I variants/CDEBYTE_EoRa-S3
- -D GPS_POWER_TOGGLE
\ No newline at end of file
+ -I variants/esp32s3/CDEBYTE_EoRa-S3
+ -D GPS_POWER_TOGGLE
diff --git a/variants/CDEBYTE_EoRa-S3/variant.h b/variants/esp32s3/CDEBYTE_EoRa-S3/variant.h
similarity index 100%
rename from variants/CDEBYTE_EoRa-S3/variant.h
rename to variants/esp32s3/CDEBYTE_EoRa-S3/variant.h
diff --git a/variants/EBYTE_ESP32-S3/pins_arduino.h b/variants/esp32s3/EBYTE_ESP32-S3/pins_arduino.h
similarity index 100%
rename from variants/EBYTE_ESP32-S3/pins_arduino.h
rename to variants/esp32s3/EBYTE_ESP32-S3/pins_arduino.h
diff --git a/variants/EBYTE_ESP32-S3/platformio.ini b/variants/esp32s3/EBYTE_ESP32-S3/platformio.ini
similarity index 86%
rename from variants/EBYTE_ESP32-S3/platformio.ini
rename to variants/esp32s3/EBYTE_ESP32-S3/platformio.ini
index 10de91386..507a19588 100644
--- a/variants/EBYTE_ESP32-S3/platformio.ini
+++ b/variants/esp32s3/EBYTE_ESP32-S3/platformio.ini
@@ -6,4 +6,4 @@ board_level = extra
build_flags =
${esp32s3_base.build_flags}
-D EBYTE_ESP32_S3
- -I variants/EBYTE_ESP32-S3
+ -I variants/esp32s3/EBYTE_ESP32-S3
diff --git a/variants/EBYTE_ESP32-S3/variant.h b/variants/esp32s3/EBYTE_ESP32-S3/variant.h
similarity index 100%
rename from variants/EBYTE_ESP32-S3/variant.h
rename to variants/esp32s3/EBYTE_ESP32-S3/variant.h
diff --git a/variants/ELECROW-ThinkNode-M2/pins_arduino.h b/variants/esp32s3/ELECROW-ThinkNode-M2/pins_arduino.h
similarity index 100%
rename from variants/ELECROW-ThinkNode-M2/pins_arduino.h
rename to variants/esp32s3/ELECROW-ThinkNode-M2/pins_arduino.h
diff --git a/variants/ELECROW-ThinkNode-M2/platformio.ini b/variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini
similarity index 76%
rename from variants/ELECROW-ThinkNode-M2/platformio.ini
rename to variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini
index c08c94a71..01e82184b 100644
--- a/variants/ELECROW-ThinkNode-M2/platformio.ini
+++ b/variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini
@@ -4,4 +4,4 @@ board = ESP32-S3-WROOM-1-N4
build_flags =
${esp32s3_base.build_flags}
-D ELECROW_ThinkNode_M2
- -I variants/ELECROW-ThinkNode-M2
+ -I variants/esp32s3/ELECROW-ThinkNode-M2
diff --git a/variants/ELECROW-ThinkNode-M2/variant.h b/variants/esp32s3/ELECROW-ThinkNode-M2/variant.h
similarity index 100%
rename from variants/ELECROW-ThinkNode-M2/variant.h
rename to variants/esp32s3/ELECROW-ThinkNode-M2/variant.h
diff --git a/variants/bpi_picow_esp32_s3/pins_arduino.h b/variants/esp32s3/bpi_picow_esp32_s3/pins_arduino.h
similarity index 100%
rename from variants/bpi_picow_esp32_s3/pins_arduino.h
rename to variants/esp32s3/bpi_picow_esp32_s3/pins_arduino.h
diff --git a/variants/bpi_picow_esp32_s3/platformio.ini b/variants/esp32s3/bpi_picow_esp32_s3/platformio.ini
similarity index 77%
rename from variants/bpi_picow_esp32_s3/platformio.ini
rename to variants/esp32s3/bpi_picow_esp32_s3/platformio.ini
index 7e94cc97e..57af0da82 100644
--- a/variants/bpi_picow_esp32_s3/platformio.ini
+++ b/variants/esp32s3/bpi_picow_esp32_s3/platformio.ini
@@ -11,4 +11,6 @@ lib_deps =
${esp32_base.lib_deps}
caveman99/ESP32 Codec2@^1.0.1
build_flags =
- ${esp32_base.build_flags} -D PRIVATE_HW -I variants/bpi_picow_esp32_s3
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32s3/bpi_picow_esp32_s3
diff --git a/variants/bpi_picow_esp32_s3/variant.h b/variants/esp32s3/bpi_picow_esp32_s3/variant.h
similarity index 100%
rename from variants/bpi_picow_esp32_s3/variant.h
rename to variants/esp32s3/bpi_picow_esp32_s3/variant.h
diff --git a/variants/crowpanel-esp32s3-5-epaper/pins_arduino.h b/variants/esp32s3/crowpanel-esp32s3-5-epaper/pins_arduino.h
similarity index 100%
rename from variants/crowpanel-esp32s3-5-epaper/pins_arduino.h
rename to variants/esp32s3/crowpanel-esp32s3-5-epaper/pins_arduino.h
diff --git a/variants/crowpanel-esp32s3-5-epaper/platformio.ini b/variants/esp32s3/crowpanel-esp32s3-5-epaper/platformio.ini
similarity index 89%
rename from variants/crowpanel-esp32s3-5-epaper/platformio.ini
rename to variants/esp32s3/crowpanel-esp32s3-5-epaper/platformio.ini
index ebf013f64..49e84bf4f 100644
--- a/variants/crowpanel-esp32s3-5-epaper/platformio.ini
+++ b/variants/esp32s3/crowpanel-esp32s3-5-epaper/platformio.ini
@@ -11,7 +11,9 @@ board = esp32-s3-devkitc-1
board_level = extra
upload_protocol = esptool
build_flags =
- ${esp32s3_base.build_flags} -D CROWPANEL_ESP32S3_5_EPAPER -I variants/crowpanel-esp32s3-5-epaper
+ ${esp32s3_base.build_flags}
+ -D CROWPANEL_ESP32S3_5_EPAPER
+ -I variants/esp32s3/crowpanel-esp32s3-5-epaper
-D PRIVATE_HW
-DBOARD_HAS_PSRAM
-DGPS_POWER_TOGGLE
@@ -39,7 +41,9 @@ board = esp32-s3-devkitc-1
board_level = extra
upload_protocol = esptool
build_flags =
- ${esp32s3_base.build_flags} -D CROWPANEL_ESP32S3_4_EPAPER -I variants/crowpanel-esp32s3-5-epaper
+ ${esp32s3_base.build_flags}
+ -D CROWPANEL_ESP32S3_4_EPAPER
+ -I variants/esp32s3/crowpanel-esp32s3-5-epaper
-D PRIVATE_HW
-DBOARD_HAS_PSRAM
-DGPS_POWER_TOGGLE
@@ -67,7 +71,9 @@ board = esp32-s3-devkitc-1
board_level = extra
upload_protocol = esptool
build_flags =
- ${esp32s3_base.build_flags} -D CROWPANEL_ESP32S3_2_EPAPER -I variants/crowpanel-esp32s3-5-epaper
+ ${esp32s3_base.build_flags}
+ -D CROWPANEL_ESP32S3_2_EPAPER
+ -I variants/esp32s3/crowpanel-esp32s3-5-epaper
-D PRIVATE_HW
-DBOARD_HAS_PSRAM
-DGPS_POWER_TOGGLE
diff --git a/variants/crowpanel-esp32s3-5-epaper/variant.h b/variants/esp32s3/crowpanel-esp32s3-5-epaper/variant.h
similarity index 100%
rename from variants/crowpanel-esp32s3-5-epaper/variant.h
rename to variants/esp32s3/crowpanel-esp32s3-5-epaper/variant.h
diff --git a/variants/my_esp32s3_diy_eink/pins_arduino.h b/variants/esp32s3/diy/my_esp32s3_diy_eink/pins_arduino.h
similarity index 100%
rename from variants/my_esp32s3_diy_eink/pins_arduino.h
rename to variants/esp32s3/diy/my_esp32s3_diy_eink/pins_arduino.h
diff --git a/variants/my_esp32s3_diy_eink/platformio.ini b/variants/esp32s3/diy/my_esp32s3_diy_eink/platformio.ini
similarity index 71%
rename from variants/my_esp32s3_diy_eink/platformio.ini
rename to variants/esp32s3/diy/my_esp32s3_diy_eink/platformio.ini
index 98613e4fb..267544c40 100644
--- a/variants/my_esp32s3_diy_eink/platformio.ini
+++ b/variants/esp32s3/diy/my_esp32s3_diy_eink/platformio.ini
@@ -8,8 +8,6 @@ board_build.f_cpu = 240000000L
upload_protocol = esptool
;upload_port = /dev/ttyACM1
upload_speed = 921600
-platform_packages =
- platformio/tool-esptoolpy@^1.40801.0
lib_deps =
${esp32_base.lib_deps}
zinggjm/GxEPD2@^1.6.2
@@ -18,12 +16,13 @@ build_unflags =
${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1
build_flags =
- ;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_eink
- ${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_eink
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32s3/diy/my_esp32s3_diy_eink
-Dmy
-DEINK_DISPLAY_MODEL=GxEPD2_290_T5D
-DEINK_WIDTH=296
-DEINK_HEIGHT=128
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
- -DARDUINO_USB_MODE=0
\ No newline at end of file
+ -DARDUINO_USB_MODE=0
diff --git a/variants/my_esp32s3_diy_eink/variant.h b/variants/esp32s3/diy/my_esp32s3_diy_eink/variant.h
similarity index 100%
rename from variants/my_esp32s3_diy_eink/variant.h
rename to variants/esp32s3/diy/my_esp32s3_diy_eink/variant.h
diff --git a/variants/my_esp32s3_diy_oled/pins_arduino.h b/variants/esp32s3/diy/my_esp32s3_diy_oled/pins_arduino.h
similarity index 100%
rename from variants/my_esp32s3_diy_oled/pins_arduino.h
rename to variants/esp32s3/diy/my_esp32s3_diy_oled/pins_arduino.h
diff --git a/variants/my_esp32s3_diy_oled/platformio.ini b/variants/esp32s3/diy/my_esp32s3_diy_oled/platformio.ini
similarity index 67%
rename from variants/my_esp32s3_diy_oled/platformio.ini
rename to variants/esp32s3/diy/my_esp32s3_diy_oled/platformio.ini
index 346cc9cac..aa3e6e482 100644
--- a/variants/my_esp32s3_diy_oled/platformio.ini
+++ b/variants/esp32s3/diy/my_esp32s3_diy_oled/platformio.ini
@@ -8,8 +8,6 @@ board_build.f_cpu = 240000000L
upload_protocol = esptool
;upload_port = /dev/ttyACM0
upload_speed = 921600
-platform_packages =
- platformio/tool-esptoolpy@^1.40801.0
lib_deps =
${esp32_base.lib_deps}
adafruit/Adafruit NeoPixel @ ^1.12.0
@@ -17,8 +15,9 @@ build_unflags =
${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1
build_flags =
- ;${esp32_base.build_flags} -D MY_ESP32S3_DIY -I variants/my_esp32s3_diy_oled
- ${esp32_base.build_flags} -D PRIVATE_HW -I variants/my_esp32s3_diy_oled
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32s3/diy/my_esp32s3_diy_oled
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
- -DARDUINO_USB_MODE=0
\ No newline at end of file
+ -DARDUINO_USB_MODE=0
diff --git a/variants/my_esp32s3_diy_oled/variant.h b/variants/esp32s3/diy/my_esp32s3_diy_oled/variant.h
similarity index 100%
rename from variants/my_esp32s3_diy_oled/variant.h
rename to variants/esp32s3/diy/my_esp32s3_diy_oled/variant.h
diff --git a/variants/esp32s3/diy/t-energy-s3_e22/platformio.ini b/variants/esp32s3/diy/t-energy-s3_e22/platformio.ini
new file mode 100644
index 000000000..681ee6c45
--- /dev/null
+++ b/variants/esp32s3/diy/t-energy-s3_e22/platformio.ini
@@ -0,0 +1,18 @@
+; NanoVHF T-Energy-S3 + E22(0)-xxxM - DIY
+[env:t-energy-s3_e22]
+extends = esp32s3_base
+board = esp32-s3-devkitc-1
+board_build.partitions = default_16MB.csv
+board_level = extra
+board_upload.flash_size = 16MB ;Specify the FLASH capacity as 16MB
+board_build.arduino.memory_type = qio_opi ;Enable internal PSRAM
+build_unflags =
+ ${esp32s3_base.build_unflags}
+ -D ARDUINO_USB_MODE=1
+build_flags =
+ ${esp32s3_base.build_flags}
+ -D EBYTE_ESP32_S3
+ -D BOARD_HAS_PSRAM
+ -D ARDUINO_USB_MODE=0
+ -D ARDUINO_USB_CDC_ON_BOOT=1
+ -I variants/esp32s3/diy/t-energy-s3_e22
diff --git a/variants/diy/t-energy-s3_e22/variant.h b/variants/esp32s3/diy/t-energy-s3_e22/variant.h
similarity index 100%
rename from variants/diy/t-energy-s3_e22/variant.h
rename to variants/esp32s3/diy/t-energy-s3_e22/variant.h
diff --git a/variants/dreamcatcher/platformio.ini b/variants/esp32s3/dreamcatcher/platformio.ini
similarity index 89%
rename from variants/dreamcatcher/platformio.ini
rename to variants/esp32s3/dreamcatcher/platformio.ini
index 6527d89be..d088f2dac 100644
--- a/variants/dreamcatcher/platformio.ini
+++ b/variants/esp32s3/dreamcatcher/platformio.ini
@@ -8,7 +8,7 @@ build_flags =
${esp32s3_base.build_flags}
-D PRIVATE_HW
-D OTHERNET_DC_REV=2301
- -I variants/dreamcatcher
+ -I variants/esp32s3/dreamcatcher
-D ARDUINO_USB_CDC_ON_BOOT=1
lib_deps = ${esp32s3_base.lib_deps}
@@ -25,5 +25,5 @@ build_flags =
${esp32s3_base.build_flags}
-D PRIVATE_HW
-D OTHERNET_DC_REV=2206
- -I variants/dreamcatcher
+ -I variants/esp32s3/dreamcatcher
-D ARDUINO_USB_CDC_ON_BOOT=1
diff --git a/variants/dreamcatcher/rfswitch.h b/variants/esp32s3/dreamcatcher/rfswitch.h
similarity index 100%
rename from variants/dreamcatcher/rfswitch.h
rename to variants/esp32s3/dreamcatcher/rfswitch.h
diff --git a/variants/dreamcatcher/variant.h b/variants/esp32s3/dreamcatcher/variant.h
similarity index 100%
rename from variants/dreamcatcher/variant.h
rename to variants/esp32s3/dreamcatcher/variant.h
diff --git a/variants/elecrow_panel/pins_arduino.h b/variants/esp32s3/elecrow_panel/pins_arduino.h
similarity index 100%
rename from variants/elecrow_panel/pins_arduino.h
rename to variants/esp32s3/elecrow_panel/pins_arduino.h
diff --git a/variants/elecrow_panel/platformio.ini b/variants/esp32s3/elecrow_panel/platformio.ini
similarity index 99%
rename from variants/elecrow_panel/platformio.ini
rename to variants/esp32s3/elecrow_panel/platformio.ini
index de7f28a83..203a4c0d0 100644
--- a/variants/elecrow_panel/platformio.ini
+++ b/variants/esp32s3/elecrow_panel/platformio.ini
@@ -5,7 +5,7 @@ board_check = true
upload_protocol = esptool
board_build.partitions = default_16MB.csv ; must be here for some reason, board.json is not enough !?
build_flags = ${esp32s3_base.build_flags} -Os
- -I variants/elecrow_panel
+ -I variants/esp32s3/elecrow_panel
-D ELECROW_PANEL
-D CONFIG_ARDUHAL_LOG_COLORS
-D RADIOLIB_DEBUG_SPI=0
diff --git a/variants/elecrow_panel/variant.h b/variants/esp32s3/elecrow_panel/variant.h
similarity index 100%
rename from variants/elecrow_panel/variant.h
rename to variants/esp32s3/elecrow_panel/variant.h
diff --git a/variants/esp32-s3-pico/pins_arduino.h b/variants/esp32s3/esp32-s3-pico/pins_arduino.h
similarity index 100%
rename from variants/esp32-s3-pico/pins_arduino.h
rename to variants/esp32s3/esp32-s3-pico/pins_arduino.h
diff --git a/variants/esp32-s3-pico/platformio.ini b/variants/esp32s3/esp32-s3-pico/platformio.ini
similarity index 94%
rename from variants/esp32-s3-pico/platformio.ini
rename to variants/esp32s3/esp32-s3-pico/platformio.ini
index 69969c601..11bd4f5a3 100644
--- a/variants/esp32-s3-pico/platformio.ini
+++ b/variants/esp32s3/esp32-s3-pico/platformio.ini
@@ -15,7 +15,7 @@ board_upload.require_upload_port = yes
build_flags = ${esp32s3_base.build_flags}
-DESP32_S3_PICO
;-DPRIVATE_HW
- -Ivariants/esp32-s3-pico
+ -Ivariants/esp32s3/esp32-s3-pico
-DBOARD_HAS_PSRAM
-DEINK_DISPLAY_MODEL=GxEPD2_290_T94_V2
-DEINK_WIDTH=296
diff --git a/variants/esp32-s3-pico/variant.h b/variants/esp32s3/esp32-s3-pico/variant.h
similarity index 100%
rename from variants/esp32-s3-pico/variant.h
rename to variants/esp32s3/esp32-s3-pico/variant.h
diff --git a/variants/heltec_capsule_sensor_v3/platformio.ini b/variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini
similarity index 82%
rename from variants/heltec_capsule_sensor_v3/platformio.ini
rename to variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini
index 8d1c039c1..d43ffd0df 100644
--- a/variants/heltec_capsule_sensor_v3/platformio.ini
+++ b/variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini
@@ -4,7 +4,7 @@ board = heltec_wifi_lora_32_V3
board_check = true
board_build.partitions = default_8MB.csv
build_flags =
- ${esp32s3_base.build_flags} -I variants/heltec_capsule_sensor_v3
+ ${esp32s3_base.build_flags} -I variants/esp32s3/heltec_capsule_sensor_v3
-D HELTEC_CAPSULE_SENSOR_V3
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
- ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
\ No newline at end of file
+ ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
diff --git a/variants/heltec_capsule_sensor_v3/variant.h b/variants/esp32s3/heltec_capsule_sensor_v3/variant.h
similarity index 100%
rename from variants/heltec_capsule_sensor_v3/variant.h
rename to variants/esp32s3/heltec_capsule_sensor_v3/variant.h
diff --git a/variants/heltec_sensor_hub/platformio.ini b/variants/esp32s3/heltec_sensor_hub/platformio.ini
similarity index 75%
rename from variants/heltec_sensor_hub/platformio.ini
rename to variants/esp32s3/heltec_sensor_hub/platformio.ini
index 53f84fab4..92b90d9b9 100644
--- a/variants/heltec_sensor_hub/platformio.ini
+++ b/variants/esp32s3/heltec_sensor_hub/platformio.ini
@@ -4,7 +4,8 @@ board = heltec_wifi_lora_32_V3
board_check = true
build_flags =
- ${esp32s3_base.build_flags} -I variants/heltec_sensor_hub
+ ${esp32s3_base.build_flags}
+ -I variants/esp32s3/heltec_sensor_hub
-D HELTEC_SENSOR_HUB
lib_deps = ${esp32s3_base.lib_deps}
diff --git a/variants/heltec_sensor_hub/variant.h b/variants/esp32s3/heltec_sensor_hub/variant.h
similarity index 100%
rename from variants/heltec_sensor_hub/variant.h
rename to variants/esp32s3/heltec_sensor_hub/variant.h
diff --git a/variants/heltec_v3/platformio.ini b/variants/esp32s3/heltec_v3/platformio.ini
similarity index 77%
rename from variants/heltec_v3/platformio.ini
rename to variants/esp32s3/heltec_v3/platformio.ini
index 4be96b019..8dda72ceb 100644
--- a/variants/heltec_v3/platformio.ini
+++ b/variants/esp32s3/heltec_v3/platformio.ini
@@ -4,5 +4,7 @@ board = heltec_wifi_lora_32_V3
board_check = true
board_build.partitions = default_8MB.csv
build_flags =
- ${esp32s3_base.build_flags} -D HELTEC_V3 -I variants/heltec_v3
+ ${esp32s3_base.build_flags}
+ -D HELTEC_V3
+ -I variants/esp32s3/heltec_v3
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
diff --git a/variants/heltec_v3/variant.h b/variants/esp32s3/heltec_v3/variant.h
similarity index 100%
rename from variants/heltec_v3/variant.h
rename to variants/esp32s3/heltec_v3/variant.h
diff --git a/variants/heltec_vision_master_e213/einkDetect.h b/variants/esp32s3/heltec_vision_master_e213/einkDetect.h
similarity index 100%
rename from variants/heltec_vision_master_e213/einkDetect.h
rename to variants/esp32s3/heltec_vision_master_e213/einkDetect.h
diff --git a/variants/heltec_vision_master_e213/nicheGraphics.h b/variants/esp32s3/heltec_vision_master_e213/nicheGraphics.h
similarity index 100%
rename from variants/heltec_vision_master_e213/nicheGraphics.h
rename to variants/esp32s3/heltec_vision_master_e213/nicheGraphics.h
diff --git a/variants/heltec_vision_master_e213/pins_arduino.h b/variants/esp32s3/heltec_vision_master_e213/pins_arduino.h
similarity index 100%
rename from variants/heltec_vision_master_e213/pins_arduino.h
rename to variants/esp32s3/heltec_vision_master_e213/pins_arduino.h
diff --git a/variants/heltec_vision_master_e213/platformio.ini b/variants/esp32s3/heltec_vision_master_e213/platformio.ini
similarity index 91%
rename from variants/heltec_vision_master_e213/platformio.ini
rename to variants/esp32s3/heltec_vision_master_e213/platformio.ini
index 028caaeff..2b4eebe64 100644
--- a/variants/heltec_vision_master_e213/platformio.ini
+++ b/variants/esp32s3/heltec_vision_master_e213/platformio.ini
@@ -4,7 +4,7 @@ board = heltec_vision_master_e213
board_build.partitions = default_8MB.csv
build_flags =
${esp32s3_base.build_flags}
- -Ivariants/heltec_vision_master_e213
+ -Ivariants/esp32s3/heltec_vision_master_e213
-DHELTEC_VISION_MASTER_E213
-DUSE_EINK
-DGXEPD2_DRIVER_0=GxEPD2_213_FC1
@@ -31,9 +31,9 @@ build_src_filter =
build_flags =
${esp32s3_base.build_flags}
${inkhud.build_flags}
- -I variants/heltec_vision_master_e213
+ -I variants/esp32s3/heltec_vision_master_e213
-D HELTEC_VISION_MASTER_E213
lib_deps =
${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX
${esp32s3_base.lib_deps}
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/heltec_vision_master_e213/variant.h b/variants/esp32s3/heltec_vision_master_e213/variant.h
similarity index 100%
rename from variants/heltec_vision_master_e213/variant.h
rename to variants/esp32s3/heltec_vision_master_e213/variant.h
diff --git a/variants/heltec_vision_master_e290/nicheGraphics.h b/variants/esp32s3/heltec_vision_master_e290/nicheGraphics.h
similarity index 100%
rename from variants/heltec_vision_master_e290/nicheGraphics.h
rename to variants/esp32s3/heltec_vision_master_e290/nicheGraphics.h
diff --git a/variants/heltec_vision_master_e290/pins_arduino.h b/variants/esp32s3/heltec_vision_master_e290/pins_arduino.h
similarity index 100%
rename from variants/heltec_vision_master_e290/pins_arduino.h
rename to variants/esp32s3/heltec_vision_master_e290/pins_arduino.h
diff --git a/variants/heltec_vision_master_e290/platformio.ini b/variants/esp32s3/heltec_vision_master_e290/platformio.ini
similarity index 91%
rename from variants/heltec_vision_master_e290/platformio.ini
rename to variants/esp32s3/heltec_vision_master_e290/platformio.ini
index cda3fde00..08056b639 100644
--- a/variants/heltec_vision_master_e290/platformio.ini
+++ b/variants/esp32s3/heltec_vision_master_e290/platformio.ini
@@ -5,7 +5,7 @@ board = heltec_vision_master_e290
board_build.partitions = default_8MB.csv
build_flags =
${esp32s3_base.build_flags}
- -I variants/heltec_vision_master_e290
+ -I variants/esp32s3/heltec_vision_master_e290
-D DISPLAY_FLIP_SCREEN ; Orient so the LoRa antenna faces up
-D HELTEC_VISION_MASTER_E290
-D BUTTON_CLICK_MS=200
@@ -34,9 +34,9 @@ build_src_filter =
build_flags =
${esp32s3_base.build_flags}
${inkhud.build_flags}
- -I variants/heltec_vision_master_e290
+ -I variants/esp32s3/heltec_vision_master_e290
-D HELTEC_VISION_MASTER_E290
lib_deps =
${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX
${esp32s3_base.lib_deps}
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/heltec_vision_master_e290/variant.h b/variants/esp32s3/heltec_vision_master_e290/variant.h
similarity index 100%
rename from variants/heltec_vision_master_e290/variant.h
rename to variants/esp32s3/heltec_vision_master_e290/variant.h
diff --git a/variants/heltec_vision_master_t190/pins_arduino.h b/variants/esp32s3/heltec_vision_master_t190/pins_arduino.h
similarity index 100%
rename from variants/heltec_vision_master_t190/pins_arduino.h
rename to variants/esp32s3/heltec_vision_master_t190/pins_arduino.h
diff --git a/variants/heltec_vision_master_t190/platformio.ini b/variants/esp32s3/heltec_vision_master_t190/platformio.ini
similarity index 77%
rename from variants/heltec_vision_master_t190/platformio.ini
rename to variants/esp32s3/heltec_vision_master_t190/platformio.ini
index 7f55a1be7..e7e7ff4e4 100644
--- a/variants/heltec_vision_master_t190/platformio.ini
+++ b/variants/esp32s3/heltec_vision_master_t190/platformio.ini
@@ -4,10 +4,10 @@ board = heltec_vision_master_t190
board_build.partitions = default_8MB.csv
build_flags =
${esp32s3_base.build_flags}
- -Ivariants/heltec_vision_master_t190
- -DHELTEC_VISION_MASTER_T190
+ -I variants/esp32s3/heltec_vision_master_t190
+ -D HELTEC_VISION_MASTER_T190
lib_deps =
${esp32s3_base.lib_deps}
lewisxhe/PCF8563_Library@^1.0.1
https://github.com/meshtastic/st7789/archive/bd33ea58ddfe4a5e4a66d53300ccbd38d66ac21f.zip
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/heltec_vision_master_t190/variant.h b/variants/esp32s3/heltec_vision_master_t190/variant.h
similarity index 100%
rename from variants/heltec_vision_master_t190/variant.h
rename to variants/esp32s3/heltec_vision_master_t190/variant.h
diff --git a/variants/heltec_wireless_paper/einkDetect.h b/variants/esp32s3/heltec_wireless_paper/einkDetect.h
similarity index 100%
rename from variants/heltec_wireless_paper/einkDetect.h
rename to variants/esp32s3/heltec_wireless_paper/einkDetect.h
diff --git a/variants/heltec_wireless_paper/nicheGraphics.h b/variants/esp32s3/heltec_wireless_paper/nicheGraphics.h
similarity index 100%
rename from variants/heltec_wireless_paper/nicheGraphics.h
rename to variants/esp32s3/heltec_wireless_paper/nicheGraphics.h
diff --git a/variants/heltec_wireless_paper/pins_arduino.h b/variants/esp32s3/heltec_wireless_paper/pins_arduino.h
similarity index 100%
rename from variants/heltec_wireless_paper/pins_arduino.h
rename to variants/esp32s3/heltec_wireless_paper/pins_arduino.h
diff --git a/variants/heltec_wireless_paper/platformio.ini b/variants/esp32s3/heltec_wireless_paper/platformio.ini
similarity index 92%
rename from variants/heltec_wireless_paper/platformio.ini
rename to variants/esp32s3/heltec_wireless_paper/platformio.ini
index 790646056..f16dcd257 100644
--- a/variants/heltec_wireless_paper/platformio.ini
+++ b/variants/esp32s3/heltec_wireless_paper/platformio.ini
@@ -5,7 +5,7 @@ board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
build_flags =
${esp32s3_base.build_flags}
- -I variants/heltec_wireless_paper
+ -I variants/esp32s3/heltec_wireless_paper
-D HELTEC_WIRELESS_PAPER
-D GXEPD2_DRIVER_0=GxEPD2_213_FC1
-D GXEPD2_DRIVER_1=GxEPD2_213_E0213A367
@@ -32,9 +32,9 @@ build_src_filter =
build_flags =
${esp32s3_base.build_flags}
${inkhud.build_flags}
- -I variants/heltec_wireless_paper
+ -I variants/esp32s3/heltec_wireless_paper
-D HELTEC_WIRELESS_PAPER
lib_deps =
${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX
${esp32s3_base.lib_deps}
-upload_speed = 921600
\ No newline at end of file
+upload_speed = 921600
diff --git a/variants/heltec_wireless_paper/variant.h b/variants/esp32s3/heltec_wireless_paper/variant.h
similarity index 100%
rename from variants/heltec_wireless_paper/variant.h
rename to variants/esp32s3/heltec_wireless_paper/variant.h
diff --git a/variants/heltec_wireless_paper_v1/pins_arduino.h b/variants/esp32s3/heltec_wireless_paper_v1/pins_arduino.h
similarity index 100%
rename from variants/heltec_wireless_paper_v1/pins_arduino.h
rename to variants/esp32s3/heltec_wireless_paper_v1/pins_arduino.h
diff --git a/variants/heltec_wireless_paper_v1/platformio.ini b/variants/esp32s3/heltec_wireless_paper_v1/platformio.ini
similarity index 91%
rename from variants/heltec_wireless_paper_v1/platformio.ini
rename to variants/esp32s3/heltec_wireless_paper_v1/platformio.ini
index 44b0606af..99f2eddeb 100644
--- a/variants/heltec_wireless_paper_v1/platformio.ini
+++ b/variants/esp32s3/heltec_wireless_paper_v1/platformio.ini
@@ -5,7 +5,7 @@ board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
build_flags =
${esp32s3_base.build_flags}
- -I variants/heltec_wireless_paper_v1
+ -I variants/esp32s3/heltec_wireless_paper_v1
-D HELTEC_WIRELESS_PAPER_V1_0
-D EINK_DISPLAY_MODEL=GxEPD2_213_BN
-D EINK_WIDTH=250
@@ -17,4 +17,4 @@ lib_deps =
${esp32s3_base.lib_deps}
https://github.com/meshtastic/GxEPD2/archive/55f618961db45a23eff0233546430f1e5a80f63a.zip
lewisxhe/PCF8563_Library@^1.0.1
-upload_speed = 115200
\ No newline at end of file
+upload_speed = 115200
diff --git a/variants/heltec_wireless_paper_v1/variant.h b/variants/esp32s3/heltec_wireless_paper_v1/variant.h
similarity index 100%
rename from variants/heltec_wireless_paper_v1/variant.h
rename to variants/esp32s3/heltec_wireless_paper_v1/variant.h
diff --git a/variants/heltec_wireless_tracker/pins_arduino.h b/variants/esp32s3/heltec_wireless_tracker/pins_arduino.h
similarity index 100%
rename from variants/heltec_wireless_tracker/pins_arduino.h
rename to variants/esp32s3/heltec_wireless_tracker/pins_arduino.h
diff --git a/variants/heltec_wireless_tracker/platformio.ini b/variants/esp32s3/heltec_wireless_tracker/platformio.ini
similarity index 85%
rename from variants/heltec_wireless_tracker/platformio.ini
rename to variants/esp32s3/heltec_wireless_tracker/platformio.ini
index 5c19c37e6..2faba45a8 100644
--- a/variants/heltec_wireless_tracker/platformio.ini
+++ b/variants/esp32s3/heltec_wireless_tracker/platformio.ini
@@ -5,7 +5,8 @@ board_build.partitions = default_8MB.csv
upload_protocol = esptool
build_flags =
- ${esp32s3_base.build_flags} -I variants/heltec_wireless_tracker
+ ${esp32s3_base.build_flags}
+ -I variants/esp32s3/heltec_wireless_tracker
-D HELTEC_TRACKER_V1_1
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
diff --git a/variants/heltec_wireless_tracker/variant.h b/variants/esp32s3/heltec_wireless_tracker/variant.h
similarity index 100%
rename from variants/heltec_wireless_tracker/variant.h
rename to variants/esp32s3/heltec_wireless_tracker/variant.h
diff --git a/variants/heltec_wireless_tracker_V1_0/pins_arduino.h b/variants/esp32s3/heltec_wireless_tracker_V1_0/pins_arduino.h
similarity index 100%
rename from variants/heltec_wireless_tracker_V1_0/pins_arduino.h
rename to variants/esp32s3/heltec_wireless_tracker_V1_0/pins_arduino.h
diff --git a/variants/heltec_wireless_tracker_V1_0/platformio.ini b/variants/esp32s3/heltec_wireless_tracker_V1_0/platformio.ini
similarity index 85%
rename from variants/heltec_wireless_tracker_V1_0/platformio.ini
rename to variants/esp32s3/heltec_wireless_tracker_V1_0/platformio.ini
index 08b0ae95c..89fe4b385 100644
--- a/variants/heltec_wireless_tracker_V1_0/platformio.ini
+++ b/variants/esp32s3/heltec_wireless_tracker_V1_0/platformio.ini
@@ -5,7 +5,8 @@ board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esptool
build_flags =
- ${esp32s3_base.build_flags} -I variants/heltec_wireless_tracker_V1_0
+ ${esp32s3_base.build_flags}
+ -I variants/esp32s3/heltec_wireless_tracker_V1_0
-D HELTEC_TRACKER_V1_0
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
diff --git a/variants/heltec_wireless_tracker_V1_0/variant.h b/variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h
similarity index 100%
rename from variants/heltec_wireless_tracker_V1_0/variant.h
rename to variants/esp32s3/heltec_wireless_tracker_V1_0/variant.h
diff --git a/variants/heltec_wsl_v3/platformio.ini b/variants/esp32s3/heltec_wsl_v3/platformio.ini
similarity index 78%
rename from variants/heltec_wsl_v3/platformio.ini
rename to variants/esp32s3/heltec_wsl_v3/platformio.ini
index bc3e6ada1..06cde2304 100644
--- a/variants/heltec_wsl_v3/platformio.ini
+++ b/variants/esp32s3/heltec_wsl_v3/platformio.ini
@@ -4,5 +4,7 @@ board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
# Temporary until espressif creates a release with this new target
build_flags =
- ${esp32s3_base.build_flags} -D HELTEC_WSL_V3 -I variants/heltec_wsl_v3
+ ${esp32s3_base.build_flags}
+ -D HELTEC_WSL_V3
+ -I variants/esp32s3/heltec_wsl_v3
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
diff --git a/variants/heltec_wsl_v3/variant.h b/variants/esp32s3/heltec_wsl_v3/variant.h
similarity index 100%
rename from variants/heltec_wsl_v3/variant.h
rename to variants/esp32s3/heltec_wsl_v3/variant.h
diff --git a/variants/icarus/pins_arduino.h b/variants/esp32s3/icarus/pins_arduino.h
similarity index 100%
rename from variants/icarus/pins_arduino.h
rename to variants/esp32s3/icarus/pins_arduino.h
diff --git a/variants/icarus/platformio.ini b/variants/esp32s3/icarus/platformio.ini
similarity index 84%
rename from variants/icarus/platformio.ini
rename to variants/esp32s3/icarus/platformio.ini
index b4ea125cf..de450da93 100644
--- a/variants/icarus/platformio.ini
+++ b/variants/esp32s3/icarus/platformio.ini
@@ -14,6 +14,8 @@ build_unflags =
${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1
build_flags =
- ${esp32s3_base.build_flags} -D PRIVATE_HW -I variants/icarus
- -DBOARD_HAS_PSRAM
+ ${esp32s3_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32s3/icarus
+ -DBOARD_HAS_PSRAM
-DARDUINO_USB_MODE=0
diff --git a/variants/icarus/variant.h b/variants/esp32s3/icarus/variant.h
similarity index 100%
rename from variants/icarus/variant.h
rename to variants/esp32s3/icarus/variant.h
diff --git a/variants/link32_s3_v1/pins_arduino.h b/variants/esp32s3/link32_s3_v1/pins_arduino.h
similarity index 100%
rename from variants/link32_s3_v1/pins_arduino.h
rename to variants/esp32s3/link32_s3_v1/pins_arduino.h
diff --git a/variants/link32_s3_v1/platformio.ini b/variants/esp32s3/link32_s3_v1/platformio.ini
similarity index 81%
rename from variants/link32_s3_v1/platformio.ini
rename to variants/esp32s3/link32_s3_v1/platformio.ini
index 5a614a7af..c1b71b3b5 100644
--- a/variants/link32_s3_v1/platformio.ini
+++ b/variants/esp32s3/link32_s3_v1/platformio.ini
@@ -2,7 +2,9 @@
extends = esp32s3_base
board = esp32-s3-devkitc-1
build_flags =
- ${esp32_base.build_flags} -D LINK_32 -I variants/link32_s3_v1
+ ${esp32_base.build_flags}
+ -D LINK_32
+ -I variants/esp32s3/link32_s3_v1
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
-DARDUINO_USB_CDC_ON_BOOT
-DARDUINO_USB_MODE=1
diff --git a/variants/link32_s3_v1/variant.h b/variants/esp32s3/link32_s3_v1/variant.h
similarity index 100%
rename from variants/link32_s3_v1/variant.h
rename to variants/esp32s3/link32_s3_v1/variant.h
diff --git a/variants/m5stack_cores3/pins_arduino.h b/variants/esp32s3/m5stack_cores3/pins_arduino.h
similarity index 100%
rename from variants/m5stack_cores3/pins_arduino.h
rename to variants/esp32s3/m5stack_cores3/pins_arduino.h
diff --git a/variants/m5stack_cores3/platformio.ini b/variants/esp32s3/m5stack_cores3/platformio.ini
similarity index 53%
rename from variants/m5stack_cores3/platformio.ini
rename to variants/esp32s3/m5stack_cores3/platformio.ini
index 2253e75e2..9973abfce 100644
--- a/variants/m5stack_cores3/platformio.ini
+++ b/variants/esp32s3/m5stack_cores3/platformio.ini
@@ -5,11 +5,9 @@ board = m5stack-cores3
board_check = true
board_build.partitions = default_16MB.csv
upload_protocol = esptool
-
-build_flags = ${esp32_base.build_flags}
- -DPRIVATE_HW
- -DM5STACK_CORES3
- -Ivariants/m5stack_cores3
-
-lib_deps =
- ${esp32_base.lib_deps}
+build_flags =
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -D M5STACK_CORES3
+ -I variants/esp32s3/m5stack_cores3
+lib_deps = ${esp32_base.lib_deps}
diff --git a/variants/m5stack_cores3/variant.h b/variants/esp32s3/m5stack_cores3/variant.h
similarity index 100%
rename from variants/m5stack_cores3/variant.h
rename to variants/esp32s3/m5stack_cores3/variant.h
diff --git a/variants/nibble_esp32/platformio.ini b/variants/esp32s3/nibble_esp32/platformio.ini
similarity index 55%
rename from variants/nibble_esp32/platformio.ini
rename to variants/esp32s3/nibble_esp32/platformio.ini
index 24d2ee2a5..2f6960d2e 100644
--- a/variants/nibble_esp32/platformio.ini
+++ b/variants/esp32s3/nibble_esp32/platformio.ini
@@ -3,4 +3,6 @@ extends = esp32s3_base
board = esp32-s3-zero
board_level = extra
build_flags =
- ${esp32_base.build_flags} -D PRIVATE_HW -I variants/nibble_esp32
\ No newline at end of file
+ ${esp32_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/esp32s3/nibble_esp32
diff --git a/variants/nibble_esp32/variant.h b/variants/esp32s3/nibble_esp32/variant.h
similarity index 100%
rename from variants/nibble_esp32/variant.h
rename to variants/esp32s3/nibble_esp32/variant.h
diff --git a/variants/nugget_s3_lora/platformio.ini b/variants/esp32s3/nugget_s3_lora/platformio.ini
similarity index 78%
rename from variants/nugget_s3_lora/platformio.ini
rename to variants/esp32s3/nugget_s3_lora/platformio.ini
index 1085d633b..a0076a18b 100644
--- a/variants/nugget_s3_lora/platformio.ini
+++ b/variants/esp32s3/nugget_s3_lora/platformio.ini
@@ -3,4 +3,4 @@ extends = esp32s3_base
board = lolin_s3_mini
board_level = extra
build_flags =
- ${esp32s3_base.build_flags} -D ARDUINO_USB_CDC_ON_BOOT=1 -D PRIVATE_HW -I variants/nugget_s3_lora
+ ${esp32s3_base.build_flags} -D ARDUINO_USB_CDC_ON_BOOT=1 -D PRIVATE_HW -I variants/esp32s3/nugget_s3_lora
diff --git a/variants/nugget_s3_lora/variant.h b/variants/esp32s3/nugget_s3_lora/variant.h
similarity index 100%
rename from variants/nugget_s3_lora/variant.h
rename to variants/esp32s3/nugget_s3_lora/variant.h
diff --git a/variants/picomputer-s3/pins_arduino.h b/variants/esp32s3/picomputer-s3/pins_arduino.h
similarity index 100%
rename from variants/picomputer-s3/pins_arduino.h
rename to variants/esp32s3/picomputer-s3/pins_arduino.h
diff --git a/variants/picomputer-s3/platformio.ini b/variants/esp32s3/picomputer-s3/platformio.ini
similarity index 97%
rename from variants/picomputer-s3/platformio.ini
rename to variants/esp32s3/picomputer-s3/platformio.ini
index cb5e829b4..d5847959b 100644
--- a/variants/picomputer-s3/platformio.ini
+++ b/variants/esp32s3/picomputer-s3/platformio.ini
@@ -11,7 +11,7 @@ upload_protocol = esptool
build_flags =
${esp32s3_base.build_flags}
-DPICOMPUTER_S3
- -I variants/picomputer-s3
+ -I variants/esp32s3/picomputer-s3
lib_deps =
${esp32s3_base.lib_deps}
diff --git a/variants/picomputer-s3/variant.h b/variants/esp32s3/picomputer-s3/variant.h
similarity index 100%
rename from variants/picomputer-s3/variant.h
rename to variants/esp32s3/picomputer-s3/variant.h
diff --git a/variants/rak3312/pins_arduino.h b/variants/esp32s3/rak3312/pins_arduino.h
similarity index 100%
rename from variants/rak3312/pins_arduino.h
rename to variants/esp32s3/rak3312/pins_arduino.h
diff --git a/variants/rak3312/platformio.ini b/variants/esp32s3/rak3312/platformio.ini
similarity index 63%
rename from variants/rak3312/platformio.ini
rename to variants/esp32s3/rak3312/platformio.ini
index d2877b3f7..50b0c5020 100644
--- a/variants/rak3312/platformio.ini
+++ b/variants/esp32s3/rak3312/platformio.ini
@@ -5,4 +5,6 @@ board_check = true
upload_protocol = esptool
build_flags =
- ${esp32_base.build_flags} -D RAK3312 -I variants/rak3312
+ ${esp32_base.build_flags}
+ -D RAK3312
+ -I variants/esp32s3/rak3312
diff --git a/variants/rak3312/variant.h b/variants/esp32s3/rak3312/variant.h
similarity index 100%
rename from variants/rak3312/variant.h
rename to variants/esp32s3/rak3312/variant.h
diff --git a/variants/seeed-sensecap-indicator/pins_arduino.h b/variants/esp32s3/seeed-sensecap-indicator/pins_arduino.h
similarity index 100%
rename from variants/seeed-sensecap-indicator/pins_arduino.h
rename to variants/esp32s3/seeed-sensecap-indicator/pins_arduino.h
diff --git a/variants/seeed-sensecap-indicator/platformio.ini b/variants/esp32s3/seeed-sensecap-indicator/platformio.ini
similarity index 97%
rename from variants/seeed-sensecap-indicator/platformio.ini
rename to variants/esp32s3/seeed-sensecap-indicator/platformio.ini
index 63f814b57..1d55b31ca 100644
--- a/variants/seeed-sensecap-indicator/platformio.ini
+++ b/variants/esp32s3/seeed-sensecap-indicator/platformio.ini
@@ -10,7 +10,7 @@ board_build.partitions = default_8MB.csv
upload_protocol = esptool
build_flags = ${esp32_base.build_flags}
- -Ivariants/seeed-sensecap-indicator
+ -Ivariants/esp32s3/seeed-sensecap-indicator
-DSENSECAP_INDICATOR
-DCONFIG_ARDUHAL_LOG_COLORS
-DRADIOLIB_DEBUG_SPI=0
diff --git a/variants/seeed-sensecap-indicator/variant.h b/variants/esp32s3/seeed-sensecap-indicator/variant.h
similarity index 100%
rename from variants/seeed-sensecap-indicator/variant.h
rename to variants/esp32s3/seeed-sensecap-indicator/variant.h
diff --git a/variants/seeed_xiao_s3/pins_arduino.h b/variants/esp32s3/seeed_xiao_s3/pins_arduino.h
similarity index 100%
rename from variants/seeed_xiao_s3/pins_arduino.h
rename to variants/esp32s3/seeed_xiao_s3/pins_arduino.h
diff --git a/variants/seeed_xiao_s3/platformio.ini b/variants/esp32s3/seeed_xiao_s3/platformio.ini
similarity index 74%
rename from variants/seeed_xiao_s3/platformio.ini
rename to variants/esp32s3/seeed_xiao_s3/platformio.ini
index 9d935e2e0..ad09efabd 100644
--- a/variants/seeed_xiao_s3/platformio.ini
+++ b/variants/esp32s3/seeed_xiao_s3/platformio.ini
@@ -11,7 +11,8 @@ build_unflags =
${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1
build_flags =
- ${esp32s3_base.build_flags} -DSEEED_XIAO_S3 -I variants/seeed_xiao_s3
+ ${esp32s3_base.build_flags}
+ -D SEEED_XIAO_S3
+ -I variants/esp32s3/seeed_xiao_s3
-DBOARD_HAS_PSRAM
-
- -DARDUINO_USB_MODE=0
\ No newline at end of file
+ -DARDUINO_USB_MODE=0
diff --git a/variants/seeed_xiao_s3/variant.h b/variants/esp32s3/seeed_xiao_s3/variant.h
similarity index 100%
rename from variants/seeed_xiao_s3/variant.h
rename to variants/esp32s3/seeed_xiao_s3/variant.h
diff --git a/variants/station-g2/pins_arduino.h b/variants/esp32s3/station-g2/pins_arduino.h
similarity index 100%
rename from variants/station-g2/pins_arduino.h
rename to variants/esp32s3/station-g2/pins_arduino.h
diff --git a/variants/station-g2/platformio.ini b/variants/esp32s3/station-g2/platformio.ini
similarity index 83%
rename from variants/station-g2/platformio.ini
rename to variants/esp32s3/station-g2/platformio.ini
index 4ddd28f1c..0aed5e7ce 100755
--- a/variants/station-g2/platformio.ini
+++ b/variants/esp32s3/station-g2/platformio.ini
@@ -13,7 +13,9 @@ build_unflags =
${esp32s3_base.build_unflags}
-DARDUINO_USB_MODE=1
build_flags =
- ${esp32s3_base.build_flags} -D STATION_G2 -I variants/station-g2
+ ${esp32s3_base.build_flags}
+ -D STATION_G2
+ -I variants/esp32s3/station-g2
-DBOARD_HAS_PSRAM
-DSTATION_G2
-DARDUINO_USB_MODE=0
diff --git a/variants/station-g2/variant.h b/variants/esp32s3/station-g2/variant.h
similarity index 100%
rename from variants/station-g2/variant.h
rename to variants/esp32s3/station-g2/variant.h
diff --git a/variants/t-deck/pins_arduino.h b/variants/esp32s3/t-deck/pins_arduino.h
similarity index 100%
rename from variants/t-deck/pins_arduino.h
rename to variants/esp32s3/t-deck/pins_arduino.h
diff --git a/variants/t-deck/platformio.ini b/variants/esp32s3/t-deck/platformio.ini
similarity index 95%
rename from variants/t-deck/platformio.ini
rename to variants/esp32s3/t-deck/platformio.ini
index c9bd64bc3..9d55ee365 100644
--- a/variants/t-deck/platformio.ini
+++ b/variants/esp32s3/t-deck/platformio.ini
@@ -7,17 +7,16 @@ board_build.partitions = default_16MB.csv
upload_protocol = esptool
build_flags = ${esp32s3_base.build_flags}
- -DT_DECK
- -DBOARD_HAS_PSRAM
- -DGPS_POWER_TOGGLE
- -Ivariants/t-deck
+ -D T_DECK
+ -D BOARD_HAS_PSRAM
+ -D GPS_POWER_TOGGLE
+ -I variants/esp32s3/t-deck
lib_deps = ${esp32s3_base.lib_deps}
lovyan03/LovyanGFX@^1.2.0
earlephilhower/ESP8266Audio@^1.9.9
earlephilhower/ESP8266SAM@^1.0.1
-
[env:t-deck-tft]
extends = env:t-deck
diff --git a/variants/t-deck/variant.h b/variants/esp32s3/t-deck/variant.h
similarity index 100%
rename from variants/t-deck/variant.h
rename to variants/esp32s3/t-deck/variant.h
diff --git a/variants/t-eth-elite/pins_arduino.h b/variants/esp32s3/t-eth-elite/pins_arduino.h
similarity index 100%
rename from variants/t-eth-elite/pins_arduino.h
rename to variants/esp32s3/t-eth-elite/pins_arduino.h
diff --git a/variants/t-eth-elite/platformio.ini b/variants/esp32s3/t-eth-elite/platformio.ini
similarity index 87%
rename from variants/t-eth-elite/platformio.ini
rename to variants/esp32s3/t-eth-elite/platformio.ini
index d6f415f3d..889270ceb 100644
--- a/variants/t-eth-elite/platformio.ini
+++ b/variants/esp32s3/t-eth-elite/platformio.ini
@@ -6,7 +6,8 @@ board_build.partitions = default_16MB.csv
build_flags =
${esp32s3_base.build_flags}
-D T_ETH_ELITE
- -I variants/t-eth-elite
+ -D HAS_UDP_MULTICAST=1
+ -I variants/esp32s3/t-eth-elite
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
lib_ignore =
diff --git a/variants/t-eth-elite/rfswitch.h b/variants/esp32s3/t-eth-elite/rfswitch.h
similarity index 100%
rename from variants/t-eth-elite/rfswitch.h
rename to variants/esp32s3/t-eth-elite/rfswitch.h
diff --git a/variants/t-eth-elite/variant.h b/variants/esp32s3/t-eth-elite/variant.h
similarity index 100%
rename from variants/t-eth-elite/variant.h
rename to variants/esp32s3/t-eth-elite/variant.h
diff --git a/variants/t-watch-s3/pins_arduino.h b/variants/esp32s3/t-watch-s3/pins_arduino.h
similarity index 100%
rename from variants/t-watch-s3/pins_arduino.h
rename to variants/esp32s3/t-watch-s3/pins_arduino.h
diff --git a/variants/t-watch-s3/platformio.ini b/variants/esp32s3/t-watch-s3/platformio.ini
similarity index 93%
rename from variants/t-watch-s3/platformio.ini
rename to variants/esp32s3/t-watch-s3/platformio.ini
index f98237943..59ff8891d 100644
--- a/variants/t-watch-s3/platformio.ini
+++ b/variants/esp32s3/t-watch-s3/platformio.ini
@@ -8,7 +8,7 @@ upload_protocol = esptool
build_flags = ${esp32_base.build_flags}
-DT_WATCH_S3
- -Ivariants/t-watch-s3
+ -Ivariants/esp32s3/t-watch-s3
-DPCF8563_RTC=0x51
-DHAS_BMA423=1
diff --git a/variants/t-watch-s3/variant.h b/variants/esp32s3/t-watch-s3/variant.h
similarity index 100%
rename from variants/t-watch-s3/variant.h
rename to variants/esp32s3/t-watch-s3/variant.h
diff --git a/variants/tbeam-s3-core/pins_arduino.h b/variants/esp32s3/tbeam-s3-core/pins_arduino.h
similarity index 100%
rename from variants/tbeam-s3-core/pins_arduino.h
rename to variants/esp32s3/tbeam-s3-core/pins_arduino.h
diff --git a/variants/tbeam-s3-core/platformio.ini b/variants/esp32s3/tbeam-s3-core/platformio.ini
similarity index 71%
rename from variants/tbeam-s3-core/platformio.ini
rename to variants/esp32s3/tbeam-s3-core/platformio.ini
index a7bdf963f..fba8e4003 100644
--- a/variants/tbeam-s3-core/platformio.ini
+++ b/variants/esp32s3/tbeam-s3-core/platformio.ini
@@ -11,5 +11,5 @@ lib_deps =
build_flags =
${esp32s3_base.build_flags}
- -Ivariants/tbeam-s3-core
- -DPCF8563_RTC=0x51 ;Putting definitions in variant.h does not compile correctly
+ -I variants/esp32s3/tbeam-s3-core
+ -D PCF8563_RTC=0x51 ;Putting definitions in variant.h does not compile correctly
diff --git a/variants/tbeam-s3-core/variant.h b/variants/esp32s3/tbeam-s3-core/variant.h
similarity index 100%
rename from variants/tbeam-s3-core/variant.h
rename to variants/esp32s3/tbeam-s3-core/variant.h
diff --git a/variants/tlora_t3s3_epaper/nicheGraphics.h b/variants/esp32s3/tlora_t3s3_epaper/nicheGraphics.h
similarity index 100%
rename from variants/tlora_t3s3_epaper/nicheGraphics.h
rename to variants/esp32s3/tlora_t3s3_epaper/nicheGraphics.h
diff --git a/variants/tlora_t3s3_epaper/pins_arduino.h b/variants/esp32s3/tlora_t3s3_epaper/pins_arduino.h
similarity index 100%
rename from variants/tlora_t3s3_epaper/pins_arduino.h
rename to variants/esp32s3/tlora_t3s3_epaper/pins_arduino.h
diff --git a/variants/tlora_t3s3_epaper/platformio.ini b/variants/esp32s3/tlora_t3s3_epaper/platformio.ini
similarity index 85%
rename from variants/tlora_t3s3_epaper/platformio.ini
rename to variants/esp32s3/tlora_t3s3_epaper/platformio.ini
index 0750b5bbb..71644ee77 100644
--- a/variants/tlora_t3s3_epaper/platformio.ini
+++ b/variants/esp32s3/tlora_t3s3_epaper/platformio.ini
@@ -5,7 +5,9 @@ board_check = true
upload_protocol = esptool
build_flags =
- ${esp32_base.build_flags} -D TLORA_T3S3_EPAPER -I variants/tlora_t3s3_epaper
+ ${esp32_base.build_flags}
+ -D TLORA_T3S3_EPAPER
+ -I variants/esp32s3/tlora_t3s3_epaper
-DGPS_POWER_TOGGLE
-DUSE_EINK
-DEINK_DISPLAY_MODEL=GxEPD2_213_BN
@@ -29,8 +31,8 @@ build_src_filter =
build_flags =
${esp32s3_base.build_flags}
${inkhud.build_flags}
- -I variants/tlora_t3s3_epaper
+ -I variants/esp32s3/tlora_t3s3_epaper
-D TLORA_T3S3_EPAPER
lib_deps =
${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX
- ${esp32s3_base.lib_deps}
\ No newline at end of file
+ ${esp32s3_base.lib_deps}
diff --git a/variants/tlora_t3s3_epaper/variant.h b/variants/esp32s3/tlora_t3s3_epaper/variant.h
similarity index 100%
rename from variants/tlora_t3s3_epaper/variant.h
rename to variants/esp32s3/tlora_t3s3_epaper/variant.h
diff --git a/variants/tlora_t3s3_v1/pins_arduino.h b/variants/esp32s3/tlora_t3s3_v1/pins_arduino.h
similarity index 100%
rename from variants/tlora_t3s3_v1/pins_arduino.h
rename to variants/esp32s3/tlora_t3s3_v1/pins_arduino.h
diff --git a/variants/tlora_t3s3_v1/platformio.ini b/variants/esp32s3/tlora_t3s3_v1/platformio.ini
similarity index 58%
rename from variants/tlora_t3s3_v1/platformio.ini
rename to variants/esp32s3/tlora_t3s3_v1/platformio.ini
index 0a5797280..d9624f043 100644
--- a/variants/tlora_t3s3_v1/platformio.ini
+++ b/variants/esp32s3/tlora_t3s3_v1/platformio.ini
@@ -5,5 +5,5 @@ board_check = true
upload_protocol = esptool
build_flags =
- ${esp32_base.build_flags} -D TLORA_T3S3_V1 -I variants/tlora_t3s3_v1
- -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
\ No newline at end of file
+ ${esp32_base.build_flags} -D TLORA_T3S3_V1 -I variants/esp32s3/tlora_t3s3_v1
+ -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
diff --git a/variants/tlora_t3s3_v1/rfswitch.h b/variants/esp32s3/tlora_t3s3_v1/rfswitch.h
similarity index 100%
rename from variants/tlora_t3s3_v1/rfswitch.h
rename to variants/esp32s3/tlora_t3s3_v1/rfswitch.h
diff --git a/variants/tlora_t3s3_v1/variant.h b/variants/esp32s3/tlora_t3s3_v1/variant.h
similarity index 100%
rename from variants/tlora_t3s3_v1/variant.h
rename to variants/esp32s3/tlora_t3s3_v1/variant.h
diff --git a/variants/tracksenger/internal/pins_arduino.h b/variants/esp32s3/tracksenger/internal/pins_arduino.h
similarity index 100%
rename from variants/tracksenger/internal/pins_arduino.h
rename to variants/esp32s3/tracksenger/internal/pins_arduino.h
diff --git a/variants/tracksenger/internal/variant.h b/variants/esp32s3/tracksenger/internal/variant.h
similarity index 100%
rename from variants/tracksenger/internal/variant.h
rename to variants/esp32s3/tracksenger/internal/variant.h
diff --git a/variants/tracksenger/lcd/pins_arduino.h b/variants/esp32s3/tracksenger/lcd/pins_arduino.h
similarity index 100%
rename from variants/tracksenger/lcd/pins_arduino.h
rename to variants/esp32s3/tracksenger/lcd/pins_arduino.h
diff --git a/variants/tracksenger/lcd/variant.h b/variants/esp32s3/tracksenger/lcd/variant.h
similarity index 100%
rename from variants/tracksenger/lcd/variant.h
rename to variants/esp32s3/tracksenger/lcd/variant.h
diff --git a/variants/tracksenger/oled/pins_arduino.h b/variants/esp32s3/tracksenger/oled/pins_arduino.h
similarity index 100%
rename from variants/tracksenger/oled/pins_arduino.h
rename to variants/esp32s3/tracksenger/oled/pins_arduino.h
diff --git a/variants/tracksenger/oled/variant.h b/variants/esp32s3/tracksenger/oled/variant.h
similarity index 100%
rename from variants/tracksenger/oled/variant.h
rename to variants/esp32s3/tracksenger/oled/variant.h
diff --git a/variants/tracksenger/platformio.ini b/variants/esp32s3/tracksenger/platformio.ini
similarity index 85%
rename from variants/tracksenger/platformio.ini
rename to variants/esp32s3/tracksenger/platformio.ini
index b36b9c45a..0e9f08541 100644
--- a/variants/tracksenger/platformio.ini
+++ b/variants/esp32s3/tracksenger/platformio.ini
@@ -5,7 +5,8 @@ board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
build_flags =
- ${esp32s3_base.build_flags} -I variants/tracksenger/internal
+ ${esp32s3_base.build_flags}
+ -I variants/esp32s3/tracksenger/internal
-D HELTEC_TRACKER_V1_1
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
@@ -21,7 +22,8 @@ board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
build_flags =
- ${esp32s3_base.build_flags} -I variants/tracksenger/lcd
+ ${esp32s3_base.build_flags}
+ -I variants/esp32s3/tracksenger/lcd
-D HELTEC_TRACKER_V1_1
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
@@ -37,7 +39,8 @@ board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
build_flags =
- ${esp32s3_base.build_flags} -I variants/tracksenger/oled
+ ${esp32s3_base.build_flags}
+ -I variants/esp32s3/tracksenger/oled
-D HELTEC_TRACKER_V1_1
-D GPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output
diff --git a/variants/unphone/pins_arduino.h b/variants/esp32s3/unphone/pins_arduino.h
similarity index 100%
rename from variants/unphone/pins_arduino.h
rename to variants/esp32s3/unphone/pins_arduino.h
diff --git a/variants/unphone/platformio.ini b/variants/esp32s3/unphone/platformio.ini
similarity index 96%
rename from variants/unphone/platformio.ini
rename to variants/esp32s3/unphone/platformio.ini
index b9da6d0e5..ecb1cbd67 100644
--- a/variants/unphone/platformio.ini
+++ b/variants/esp32s3/unphone/platformio.ini
@@ -11,7 +11,7 @@ monitor_filters = esp32_exception_decoder
build_flags =
${esp32s3_base.build_flags}
-D UNPHONE
- -I variants/unphone
+ -I variants/esp32s3/unphone
-D ARDUINO_USB_MODE=0
-D UNPHONE_ACCEL=0
-D UNPHONE_TOUCHS=0
@@ -23,7 +23,7 @@ build_flags =
build_src_filter =
${esp32s3_base.build_src_filter}
- +<../variants/unphone>
+ +<../variants/esp32s3/unphone>
lib_deps = ${esp32s3_base.lib_deps}
lovyan03/LovyanGFX@ 1.2.0
diff --git a/variants/unphone/variant.cpp b/variants/esp32s3/unphone/variant.cpp
similarity index 100%
rename from variants/unphone/variant.cpp
rename to variants/esp32s3/unphone/variant.cpp
diff --git a/variants/unphone/variant.h b/variants/esp32s3/unphone/variant.h
similarity index 100%
rename from variants/unphone/variant.h
rename to variants/esp32s3/unphone/variant.h
diff --git a/variants/rak2560/variant.h b/variants/rak2560/variant.h
index a03fc3933..f922e8a61 100644
--- a/variants/rak2560/variant.h
+++ b/variants/rak2560/variant.h
@@ -222,6 +222,7 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
// #define PIN_GPS_EN PIN_3V3_EN
#define PIN_GPS_PPS (17) // Pulse per second input from the GPS
+#define GPS_SERIAL_PORT Serial2
// On RAK2560 the GPS is be on a different UART
// #define GPS_RX_PIN PIN_SERIAL2_RX
// #define GPS_TX_PIN PIN_SERIAL2_TX
diff --git a/variants/rak4631_eth_gw/platformio.ini b/variants/rak4631_eth_gw/platformio.ini
index 492ca374b..7e7b0e019 100644
--- a/variants/rak4631_eth_gw/platformio.ini
+++ b/variants/rak4631_eth_gw/platformio.ini
@@ -5,6 +5,7 @@ board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags} -Ivariants/rak4631_eth_gw -D RAK_4631
-DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
+ -DHAS_UDP_MULTICAST=1
-DEINK_DISPLAY_MODEL=GxEPD2_213_BN
-DEINK_WIDTH=250
-DEINK_HEIGHT=122
diff --git a/variants/rak_wismeshtag/platformio.ini b/variants/rak_wismeshtag/platformio.ini
new file mode 100644
index 000000000..a066e5282
--- /dev/null
+++ b/variants/rak_wismeshtag/platformio.ini
@@ -0,0 +1,15 @@
+; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921
+[env:rak_wismeshtag]
+extends = nrf52840_base
+board = wiscore_rak4631
+board_check = true
+build_flags = ${nrf52840_base.build_flags} -Ivariants/rak_wismeshtag -D WISMESH_TAG -D RAK_4631
+ -L "${platformio.libdeps_dir}/${this.__env__}/bsec2/src/cortex-m4/fpv4-sp-d16-hard"
+ -DGPS_POWER_TOGGLE ; comment this line to disable triple press function on the user button to turn off gps entirely.
+ -DRADIOLIB_EXCLUDE_SX128X=1
+ -DRADIOLIB_EXCLUDE_SX127X=1
+ -DRADIOLIB_EXCLUDE_LR11X0=1
+ -DMESHTASTIC_EXCLUDE_WIFI=1
+build_src_filter = ${nrf52_base.build_src_filter} +<../variants/rak_wismeshtag>
+lib_deps =
+ ${nrf52840_base.lib_deps}
\ No newline at end of file
diff --git a/variants/rak_wismeshtag/variant.cpp b/variants/rak_wismeshtag/variant.cpp
new file mode 100644
index 000000000..e84b60b3b
--- /dev/null
+++ b/variants/rak_wismeshtag/variant.cpp
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2014-2015 Arduino LLC. All right reserved.
+ Copyright (c) 2016 Sandeep Mistry All right reserved.
+ Copyright (c) 2018, Adafruit Industries (adafruit.com)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include "variant.h"
+#include "nrf.h"
+#include "wiring_constants.h"
+#include "wiring_digital.h"
+
+const uint32_t g_ADigitalPinMap[] = {
+ // P0
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+
+ // P1
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47};
+
+void initVariant()
+{
+ // LED1 & LED2
+ pinMode(PIN_LED1, OUTPUT);
+ ledOff(PIN_LED1);
+
+ pinMode(PIN_LED2, OUTPUT);
+ ledOff(PIN_LED2);
+
+ // 3V3 Power Rail
+ pinMode(PIN_3V3_EN, OUTPUT);
+ digitalWrite(PIN_3V3_EN, HIGH);
+}
diff --git a/variants/rak_wismeshtag/variant.h b/variants/rak_wismeshtag/variant.h
new file mode 100644
index 000000000..dd82b76a1
--- /dev/null
+++ b/variants/rak_wismeshtag/variant.h
@@ -0,0 +1,245 @@
+/*
+ Copyright (c) 2014-2015 Arduino LLC. All right reserved.
+ Copyright (c) 2016 Sandeep Mistry All right reserved.
+ Copyright (c) 2018, Adafruit Industries (adafruit.com)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef _VARIANT_RAK4630_
+#define _VARIANT_RAK4630_
+
+#define RAK4630
+
+/** Master clock frequency */
+#define VARIANT_MCK (64000000ul)
+
+#define USE_LFXO // Board uses 32khz crystal for LF
+// define USE_LFRC // Board uses RC for LF
+
+/*----------------------------------------------------------------------------
+ * Headers
+ *----------------------------------------------------------------------------*/
+
+#include "WVariant.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+// Number of pins defined in PinDescription array
+#define PINS_COUNT (48)
+#define NUM_DIGITAL_PINS (48)
+#define NUM_ANALOG_INPUTS (6)
+#define NUM_ANALOG_OUTPUTS (0)
+
+// LEDs
+#define PIN_LED1 (35)
+#define PIN_LED2 (36)
+
+#define LED_BUILTIN PIN_LED1
+#define LED_CONN PIN_LED2
+
+#define LED_GREEN PIN_LED1
+#define LED_BLUE PIN_LED2
+
+#define LED_STATE_ON 1 // State when LED is litted
+
+/*
+ * Buttons
+ */
+
+#define PIN_BUTTON1 9 // Pin for button on E-ink button module or IO expansion
+#define BUTTON_NEED_PULLUP
+#define PIN_BUTTON2 12
+#define PIN_BUTTON3 24
+#define PIN_BUTTON4 25
+
+/*
+ * Analog pins
+ */
+#define PIN_A0 (5)
+#define PIN_A1 (31)
+#define PIN_A2 (28)
+#define PIN_A3 (29)
+#define PIN_A4 (30)
+#define PIN_A5 (31)
+#define PIN_A6 (0xff)
+#define PIN_A7 (0xff)
+
+static const uint8_t A0 = PIN_A0;
+static const uint8_t A1 = PIN_A1;
+static const uint8_t A2 = PIN_A2;
+static const uint8_t A3 = PIN_A3;
+static const uint8_t A4 = PIN_A4;
+static const uint8_t A5 = PIN_A5;
+static const uint8_t A6 = PIN_A6;
+static const uint8_t A7 = PIN_A7;
+#define ADC_RESOLUTION 14
+
+// Other pins
+#define PIN_AREF (2)
+#define PIN_NFC1 (9)
+#define PIN_NFC2 (10)
+
+static const uint8_t AREF = PIN_AREF;
+
+/*
+ * Serial interfaces
+ */
+#define PIN_SERIAL1_RX (15)
+#define PIN_SERIAL1_TX (16)
+
+// Connected to Jlink CDC
+#define PIN_SERIAL2_RX (8)
+#define PIN_SERIAL2_TX (6)
+
+/*
+ * SPI Interfaces
+ */
+#define SPI_INTERFACES_COUNT 2
+
+#define PIN_SPI_MISO (45)
+#define PIN_SPI_MOSI (44)
+#define PIN_SPI_SCK (43)
+
+#define PIN_SPI1_MISO (29) // (0 + 29)
+#define PIN_SPI1_MOSI (30) // (0 + 30)
+#define PIN_SPI1_SCK (3) // (0 + 3)
+
+static const uint8_t SS = 42;
+static const uint8_t MOSI = PIN_SPI_MOSI;
+static const uint8_t MISO = PIN_SPI_MISO;
+static const uint8_t SCK = PIN_SPI_SCK;
+
+/*
+ * eink display pins
+ */
+
+#define PIN_EINK_CS (0 + 26)
+#define PIN_EINK_BUSY (0 + 4)
+#define PIN_EINK_DC (0 + 17)
+#define PIN_EINK_RES (-1)
+#define PIN_EINK_SCLK (0 + 3)
+#define PIN_EINK_MOSI (0 + 30) // also called SDI
+
+/*
+ * Wire Interfaces
+ */
+#define WIRE_INTERFACES_COUNT 1
+
+// RAK WISMESHTAG
+#define PIN_WIRE_SDA (25)
+#define PIN_WIRE_SCL (24)
+
+// QSPI Pins
+#define PIN_QSPI_SCK 3
+#define PIN_QSPI_CS 26
+#define PIN_QSPI_IO0 30
+#define PIN_QSPI_IO1 29
+#define PIN_QSPI_IO2 28
+#define PIN_QSPI_IO3 2
+
+
+/* @note RAK5005-O GPIO mapping to RAK4631 GPIO ports
+ RAK5005-O <-> nRF52840
+ IO1 <-> P0.17 (Arduino GPIO number 17)
+ IO2 <-> P1.02 (Arduino GPIO number 34)
+ IO3 <-> P0.21 (Arduino GPIO number 21)
+ IO4 <-> P0.04 (Arduino GPIO number 4)
+ IO5 <-> P0.09 (Arduino GPIO number 9)
+ IO6 <-> P0.10 (Arduino GPIO number 10)
+ IO7 <-> P0.28 (Arduino GPIO number 28)
+ SW1 <-> P0.01 (Arduino GPIO number 1)
+ A0 <-> P0.04/AIN2 (Arduino Analog A2
+ A1 <-> P0.31/AIN7 (Arduino Analog A7
+ SPI_CS <-> P0.26 (Arduino GPIO number 26)
+ */
+
+// RAK4630 LoRa module
+
+/* Setup of the SX1262 LoRa module ( https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Datasheet/ )
+
+P1.10 NSS SPI NSS (Arduino GPIO number 42)
+P1.11 SCK SPI CLK (Arduino GPIO number 43)
+P1.12 MOSI SPI MOSI (Arduino GPIO number 44)
+P1.13 MISO SPI MISO (Arduino GPIO number 45)
+P1.14 BUSY BUSY signal (Arduino GPIO number 46)
+P1.15 DIO1 DIO1 event interrupt (Arduino GPIO number 47)
+P1.06 NRESET NRESET manual reset of the SX1262 (Arduino GPIO number 38)
+
+Important for successful SX1262 initialization:
+
+* Setup DIO2 to control the antenna switch
+* Setup DIO3 to control the TCXO power supply
+* Setup the SX1262 to use it's DCDC regulator and not the LDO
+* RAK4630 schematics show GPIO P1.07 connected to the antenna switch, but it should not be initialized, as DIO2 will do the
+control of the antenna switch
+
+SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
+
+*/
+
+#define DETECTION_SENSOR_EN 4
+
+#define USE_SX1262
+#define SX126X_CS (42)
+#define SX126X_DIO1 (47)
+#define SX126X_BUSY (46)
+#define SX126X_RESET (38)
+// #define SX126X_TXEN (39)
+// #define SX126X_RXEN (37)
+#define SX126X_POWER_EN (37)
+// DIO2 controlls an antenna switch and the TCXO voltage is controlled by DIO3
+#define SX126X_DIO2_AS_RF_SWITCH
+#define SX126X_DIO3_TCXO_VOLTAGE 1.8
+
+// Testing USB detection
+#define NRF_APM
+
+// enables 3.3V periphery like GPS or IO Module
+// Do not toggle this for GPS power savings
+#define PIN_3V3_EN (34)
+
+// RAK WISMESHTAG
+#define PIN_GPS_EN PIN_3V3_EN
+#define PIN_GPS_PPS (17) // Pulse per second input from the GPS
+
+#define GPS_RX_PIN PIN_SERIAL1_RX
+#define GPS_TX_PIN PIN_SERIAL1_TX
+
+// RAK WISMESHTAG
+#define PIN_BUZZER 21
+
+// Battery
+// The battery sense is hooked to pin A0 (5)
+#define BATTERY_PIN PIN_A0
+// and has 12 bit resolution
+#define BATTERY_SENSE_RESOLUTION_BITS 12
+#define BATTERY_SENSE_RESOLUTION 4096.0
+#undef AREF_VOLTAGE
+#define AREF_VOLTAGE 3.0
+#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
+#define ADC_MULTIPLIER 1.73
+
+#define RAK_4631 1
+
+#ifdef __cplusplus
+}
+#endif
+
+/*----------------------------------------------------------------------------
+ * Arduino objects - C++ only
+ *----------------------------------------------------------------------------*/
+
+#endif
\ No newline at end of file
diff --git a/variants/ec_catsniffer/platformio.ini b/variants/rp2040/ec_catsniffer/platformio.ini
similarity index 50%
rename from variants/ec_catsniffer/platformio.ini
rename to variants/rp2040/ec_catsniffer/platformio.ini
index 6db9abe90..acf19d757 100644
--- a/variants/ec_catsniffer/platformio.ini
+++ b/variants/rp2040/ec_catsniffer/platformio.ini
@@ -2,13 +2,13 @@
extends = rp2040_base
board = rpipico
upload_protocol = picotool
-
-build_flags = ${rp2040_base.build_flags}
- -DRPI_PICO
- -Ivariants/ec_catsniffer
- -DDEBUG_RP2040_PORT=Serial
- # -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2040_base.build_flags}
+ -D RPI_PICO
+ -I variants/rp2040/ec_catsniffer
+ -D DEBUG_RP2040_PORT=Serial
+ ; -D HW_SPI1_DEVICE
lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}, -g
-debug_tool = cmsis-dap
\ No newline at end of file
+debug_tool = cmsis-dap
diff --git a/variants/ec_catsniffer/variant.cpp b/variants/rp2040/ec_catsniffer/variant.cpp
similarity index 100%
rename from variants/ec_catsniffer/variant.cpp
rename to variants/rp2040/ec_catsniffer/variant.cpp
diff --git a/variants/ec_catsniffer/variant.h b/variants/rp2040/ec_catsniffer/variant.h
similarity index 100%
rename from variants/ec_catsniffer/variant.h
rename to variants/rp2040/ec_catsniffer/variant.h
diff --git a/variants/feather_rp2040_rfm95/platformio.ini b/variants/rp2040/feather_rp2040_rfm95/platformio.ini
similarity index 53%
rename from variants/feather_rp2040_rfm95/platformio.ini
rename to variants/rp2040/feather_rp2040_rfm95/platformio.ini
index db1eb4f02..ef4118cb0 100644
--- a/variants/feather_rp2040_rfm95/platformio.ini
+++ b/variants/rp2040/feather_rp2040_rfm95/platformio.ini
@@ -2,14 +2,14 @@
extends = rp2040_base
board = adafruit_feather
upload_protocol = picotool
-
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DRP2040_FEATHER_RFM95
- -Ivariants/feather_rp2040_rfm95
- -DDEBUG_RP2040_PORT=Serial
- -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2040_base.build_flags}
+ -D RP2040_FEATHER_RFM95
+ -I variants/rp2040/feather_rp2040_rfm95
+ -D DEBUG_RP2040_PORT=Serial
+ -D HW_SPI1_DEVICE
lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}
-debug_tool = cmsis-dap ; for e.g. Picotool
\ No newline at end of file
+debug_tool = cmsis-dap ; for e.g. Picotool
diff --git a/variants/feather_rp2040_rfm95/variant.h b/variants/rp2040/feather_rp2040_rfm95/variant.h
similarity index 100%
rename from variants/feather_rp2040_rfm95/variant.h
rename to variants/rp2040/feather_rp2040_rfm95/variant.h
diff --git a/variants/nibble_rp2040/platformio.ini b/variants/rp2040/nibble_rp2040/platformio.ini
similarity index 56%
rename from variants/nibble_rp2040/platformio.ini
rename to variants/rp2040/nibble_rp2040/platformio.ini
index c3a1923c5..024a72206 100644
--- a/variants/nibble_rp2040/platformio.ini
+++ b/variants/rp2040/nibble_rp2040/platformio.ini
@@ -3,14 +3,14 @@ extends = rp2040_base
board = rpipico
board_level = extra
upload_protocol = picotool
-
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DPRIVATE_HW
- -Ivariants/nibble_rp2040
- -DDEBUG_RP2040_PORT=Serial
- -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2040_base.build_flags}
+ -D PRIVATE_HW
+ -I variants/rp2040/nibble_rp2040
+ -D DEBUG_RP2040_PORT=Serial
+ -D HW_SPI1_DEVICE
lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}, -g
-debug_tool = cmsis-dap ; for e.g. Picotool
\ No newline at end of file
+debug_tool = cmsis-dap ; for e.g. Picotool
diff --git a/variants/nibble_rp2040/variant.h b/variants/rp2040/nibble_rp2040/variant.h
similarity index 100%
rename from variants/nibble_rp2040/variant.h
rename to variants/rp2040/nibble_rp2040/variant.h
diff --git a/variants/rak11310/pins_arduino.h b/variants/rp2040/rak11310/pins_arduino.h
similarity index 100%
rename from variants/rak11310/pins_arduino.h
rename to variants/rp2040/rak11310/pins_arduino.h
diff --git a/variants/rak11310/platformio.ini b/variants/rp2040/rak11310/platformio.ini
similarity index 64%
rename from variants/rak11310/platformio.ini
rename to variants/rp2040/rak11310/platformio.ini
index fd7e842cc..aca24656b 100644
--- a/variants/rak11310/platformio.ini
+++ b/variants/rp2040/rak11310/platformio.ini
@@ -2,18 +2,18 @@
extends = rp2040_base
board = rakwireless_rak11300
upload_protocol = picotool
-
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DRAK11310
- -Ivariants/rak11310
- -DDEBUG_RP2040_PORT=Serial
- -DRV3028_RTC=0x52
-build_src_filter = ${rp2040_base.build_src_filter} +<../variants/rak11310> + + +
+build_flags =
+ ${rp2040_base.build_flags}
+ -D RAK11310
+ -I variants/rp2040/rak11310
+ -D DEBUG_RP2040_PORT=Serial
+ -D RV3028_RTC=0x52
+build_src_filter = ${rp2040_base.build_src_filter} +<../variants/rp2040/rak11310> + + +
lib_deps =
${rp2040_base.lib_deps}
${networking_base.lib_deps}
melopero/Melopero RV3028@^1.1.0
https://github.com/RAKWireless/RAK13800-W5100S/archive/1.0.2.zip
debug_build_flags = ${rp2040_base.build_flags}, -g
-debug_tool = cmsis-dap ; for e.g. Picotool
\ No newline at end of file
+debug_tool = cmsis-dap ; for e.g. Picotool
diff --git a/variants/rak11310/variant.h b/variants/rp2040/rak11310/variant.h
similarity index 100%
rename from variants/rak11310/variant.h
rename to variants/rp2040/rak11310/variant.h
diff --git a/variants/rp2040-lora/platformio.ini b/variants/rp2040/rp2040-lora/platformio.ini
similarity index 54%
rename from variants/rp2040-lora/platformio.ini
rename to variants/rp2040/rp2040-lora/platformio.ini
index 7ac5b2cac..d59e74f20 100644
--- a/variants/rp2040-lora/platformio.ini
+++ b/variants/rp2040/rp2040-lora/platformio.ini
@@ -2,14 +2,14 @@
extends = rp2040_base
board = rpipico
upload_protocol = picotool
-
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DRP2040_LORA
- -Ivariants/rp2040-lora
- -DDEBUG_RP2040_PORT=Serial
- -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2040_base.build_flags}
+ -D RP2040_LORA
+ -I variants/rp2040/rp2040-lora
+ -D DEBUG_RP2040_PORT=Serial
+ -D HW_SPI1_DEVICE
lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}, -g
-debug_tool = cmsis-dap ; for e.g. Picotool
\ No newline at end of file
+debug_tool = cmsis-dap ; for e.g. Picotool
diff --git a/variants/rp2040-lora/variant.h b/variants/rp2040/rp2040-lora/variant.h
similarity index 100%
rename from variants/rp2040-lora/variant.h
rename to variants/rp2040/rp2040-lora/variant.h
diff --git a/variants/rpipico-slowclock/platformio.ini b/variants/rp2040/rpipico-slowclock/platformio.ini
similarity index 85%
rename from variants/rpipico-slowclock/platformio.ini
rename to variants/rp2040/rpipico-slowclock/platformio.ini
index c56f9e78c..30928aead 100644
--- a/variants/rpipico-slowclock/platformio.ini
+++ b/variants/rp2040/rpipico-slowclock/platformio.ini
@@ -12,11 +12,11 @@ debug_init_cmds =
$LOAD_CMDS
monitor init
monitor reset halt
-
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
+build_flags =
+ ${rp2040_base.build_flags}
-DRPI_PICO
- -Ivariants/rpipico-slowclock
+ -Ivariants/rp2040/rpipico-slowclock
-DDEBUG_RP2040_PORT=Serial2
-DHW_SPI1_DEVICE
-g
@@ -25,4 +25,4 @@ lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}
-g
- -DNO_USB
\ No newline at end of file
+ -DNO_USB
diff --git a/variants/rpipico-slowclock/variant.h b/variants/rp2040/rpipico-slowclock/variant.h
similarity index 100%
rename from variants/rpipico-slowclock/variant.h
rename to variants/rp2040/rpipico-slowclock/variant.h
diff --git a/variants/rpipico/platformio.ini b/variants/rp2040/rpipico/platformio.ini
similarity index 55%
rename from variants/rpipico/platformio.ini
rename to variants/rp2040/rpipico/platformio.ini
index e34cfa43b..81db2a312 100644
--- a/variants/rpipico/platformio.ini
+++ b/variants/rp2040/rpipico/platformio.ini
@@ -4,12 +4,13 @@ board = rpipico
upload_protocol = picotool
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DRPI_PICO
- -Ivariants/rpipico
- -DDEBUG_RP2040_PORT=Serial
- -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2040_base.build_flags}
+ -D RPI_PICO
+ -I variants/rp2040/rpipico
+ -D DEBUG_RP2040_PORT=Serial
+ -D HW_SPI1_DEVICE
lib_deps =
${rp2040_base.lib_deps}
debug_build_flags = ${rp2040_base.build_flags}, -g
-debug_tool = cmsis-dap ; for e.g. Picotool
\ No newline at end of file
+debug_tool = cmsis-dap ; for e.g. Picotool
diff --git a/variants/rpipico/variant.h b/variants/rp2040/rpipico/variant.h
similarity index 100%
rename from variants/rpipico/variant.h
rename to variants/rp2040/rpipico/variant.h
diff --git a/variants/rpipicow/platformio.ini b/variants/rp2040/rpipicow/platformio.ini
similarity index 75%
rename from variants/rpipicow/platformio.ini
rename to variants/rp2040/rpipicow/platformio.ini
index e59944b5d..f3fd07f8d 100644
--- a/variants/rpipicow/platformio.ini
+++ b/variants/rp2040/rpipicow/platformio.ini
@@ -2,14 +2,14 @@
extends = rp2040_base
board = rpipicow
upload_protocol = picotool
-
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DRPI_PICO
- -Ivariants/rpipicow
- -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2040_base.build_flags}
+ -D RPI_PICO
+ -I variants/rp2040/rpipicow
+ -D HW_SPI1_DEVICE
+ -D HAS_UDP_MULTICAST=1
-fexceptions # for exception handling in MQTT
- -DHAS_UDP_MULTICAST=1
build_src_filter = ${rp2040_base.build_src_filter} +
lib_deps =
${rp2040_base.lib_deps}
diff --git a/variants/rpipicow/variant.h b/variants/rp2040/rpipicow/variant.h
similarity index 100%
rename from variants/rpipicow/variant.h
rename to variants/rp2040/rpipicow/variant.h
diff --git a/variants/senselora_rp2040/pins_arduino.h b/variants/rp2040/senselora_rp2040/pins_arduino.h
similarity index 100%
rename from variants/senselora_rp2040/pins_arduino.h
rename to variants/rp2040/senselora_rp2040/pins_arduino.h
diff --git a/variants/senselora_rp2040/platformio.ini b/variants/rp2040/senselora_rp2040/platformio.ini
similarity index 60%
rename from variants/senselora_rp2040/platformio.ini
rename to variants/rp2040/senselora_rp2040/platformio.ini
index b05fc1f8b..3a574d0f9 100644
--- a/variants/senselora_rp2040/platformio.ini
+++ b/variants/rp2040/senselora_rp2040/platformio.ini
@@ -5,9 +5,9 @@ board = rpipico
upload_protocol = picotool
# add our variants files to the include and src paths
-build_flags = ${rp2040_base.build_flags}
- -DSENSELORA_RP2040
- -Ivariants/senselora_rp2040
- -DDEBUG_RP2040_PORT=Serial
+build_flags = ${rp2040_base.build_flags}
+ -D SENSELORA_RP2040
+ -I variants/rp2040/senselora_rp2040
+ -D DEBUG_RP2040_PORT=Serial
lib_deps =
${rp2040_base.lib_deps}
\ No newline at end of file
diff --git a/variants/senselora_rp2040/variant.h b/variants/rp2040/senselora_rp2040/variant.h
similarity index 92%
rename from variants/senselora_rp2040/variant.h
rename to variants/rp2040/senselora_rp2040/variant.h
index 2f68cf034..cc90284b7 100644
--- a/variants/senselora_rp2040/variant.h
+++ b/variants/rp2040/senselora_rp2040/variant.h
@@ -6,6 +6,7 @@
#define BUTTON_NEED_PULLUP
#define LED_PIN PIN_LED
+#define ledOff(pin) pinMode(pin, INPUT)
#undef BATTERY_PIN
#define BATTERY_SENSE_RESOLUTION_BITS ADC_RESOLUTION
diff --git a/variants/rpipico2/platformio.ini b/variants/rp2350/rpipico2/platformio.ini
similarity index 54%
rename from variants/rpipico2/platformio.ini
rename to variants/rp2350/rpipico2/platformio.ini
index 066809a91..485523eb0 100644
--- a/variants/rpipico2/platformio.ini
+++ b/variants/rp2350/rpipico2/platformio.ini
@@ -4,12 +4,13 @@ board = rpipico2
upload_protocol = picotool
# add our variants files to the include and src paths
-build_flags = ${rp2350_base.build_flags}
- -DRPI_PICO2
- -Ivariants/rpipico2
- -DDEBUG_RP2040_PORT=Serial
- -DHW_SPI1_DEVICE
+build_flags =
+ ${rp2350_base.build_flags}
+ -D RPI_PICO2
+ -I variants/rp2350/rpipico2
+ -D DEBUG_RP2040_PORT=Serial
+ -D HW_SPI1_DEVICE
lib_deps =
${rp2350_base.lib_deps}
debug_build_flags = ${rp2350_base.build_flags}, -g
-debug_tool = cmsis-dap ; for e.g. Picotool
\ No newline at end of file
+debug_tool = cmsis-dap ; for e.g. Picotool
diff --git a/variants/rpipico2/variant.h b/variants/rp2350/rpipico2/variant.h
similarity index 100%
rename from variants/rpipico2/variant.h
rename to variants/rp2350/rpipico2/variant.h
diff --git a/variants/rpipico2w/platformio.ini b/variants/rp2350/rpipico2w/platformio.ini
similarity index 91%
rename from variants/rpipico2w/platformio.ini
rename to variants/rp2350/rpipico2w/platformio.ini
index 0fac1e9ce..3e5f2dbdd 100644
--- a/variants/rpipico2w/platformio.ini
+++ b/variants/rp2350/rpipico2w/platformio.ini
@@ -13,9 +13,10 @@ debug_init_cmds =
monitor reset halt
# add our variants files to the include and src paths
-build_flags = ${rp2350_base.build_flags}
+build_flags =
+ ${rp2350_base.build_flags}
-DRPI_PICO2
- -Ivariants/rpipico2w
+ -Ivariants/rp2350/rpipico2w
# -DDEBUG_RP2040_PORT=Serial
-DHW_SPI1_DEVICE
-DARDUINO_RASPBERRY_PI_PICO_2W
diff --git a/variants/rpipico2w/variant.h b/variants/rp2350/rpipico2w/variant.h
similarity index 100%
rename from variants/rpipico2w/variant.h
rename to variants/rp2350/rpipico2w/variant.h
diff --git a/variants/seeed_wio_tracker_L1_eink/platformio.ini b/variants/seeed_wio_tracker_L1_eink/platformio.ini
index b84757b9d..b310cce83 100644
--- a/variants/seeed_wio_tracker_L1_eink/platformio.ini
+++ b/variants/seeed_wio_tracker_L1_eink/platformio.ini
@@ -4,7 +4,8 @@ extends = nrf52840_base, inkhud
;board_level = extra
build_flags = ${nrf52840_base.build_flags} ${inkhud.build_flags}
-I $PROJECT_DIR/variants/seeed_wio_tracker_L1_eink
- -D SEEED_WIO_TRACKER_L1
+ -D SEEED_WIO_TRACKER_L1_EINK
+ -D SEEED_WIO_TRACKER_L1
-Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52
board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_wio_tracker_L1_eink> ${inkhud.build_src_filter}
diff --git a/variants/CDEBYTE_E77-MBL/platformio.ini b/variants/stm32/CDEBYTE_E77-MBL/platformio.ini
similarity index 58%
rename from variants/CDEBYTE_E77-MBL/platformio.ini
rename to variants/stm32/CDEBYTE_E77-MBL/platformio.ini
index 8a8002086..c011f62c9 100644
--- a/variants/CDEBYTE_E77-MBL/platformio.ini
+++ b/variants/stm32/CDEBYTE_E77-MBL/platformio.ini
@@ -5,23 +5,13 @@ board_upload.maximum_size = 233472 ; reserve the last 28KB for filesystem
board_level = extra
build_flags =
${stm32_base.build_flags}
- -Ivariants/CDEBYTE_E77-MBL
+ -Ivariants/stm32/CDEBYTE_E77-MBL
-DSERIAL_UART_INSTANCE=1
-DPIN_SERIAL_RX=PA3
-DPIN_SERIAL_TX=PA2
- -DHAL_DAC_MODULE_ONLY
- -DHAL_RNG_MODULE_ENABLED
- -DRADIOLIB_EXCLUDE_SX128X=1
- -DRADIOLIB_EXCLUDE_SX127X=1
- -DRADIOLIB_EXCLUDE_LR11X0=1
-DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR=1
-DMESHTASTIC_EXCLUDE_I2C=1
- -DMESHTASTIC_EXCLUDE_WIFI=1
- -DMESHTASTIC_EXCLUDE_BLUETOOTH=1
-DMESHTASTIC_EXCLUDE_GPS=1
- -DMESHTASTIC_EXCLUDE_SCREEN=1
- -DMESHTASTIC_EXCLUDE_MQTT=1
- -DMESHTASTIC_EXCLUDE_POWERMON=1
;-DPIO_FRAMEWORK_ARDUINO_NANOLIB_FLOAT_PRINTF
;-DCFG_DEBUG
diff --git a/variants/CDEBYTE_E77-MBL/variant.h b/variants/stm32/CDEBYTE_E77-MBL/variant.h
similarity index 100%
rename from variants/CDEBYTE_E77-MBL/variant.h
rename to variants/stm32/CDEBYTE_E77-MBL/variant.h
diff --git a/variants/rak3172/platformio.ini b/variants/stm32/rak3172/platformio.ini
similarity index 52%
rename from variants/rak3172/platformio.ini
rename to variants/stm32/rak3172/platformio.ini
index 99610b17c..9799fc879 100644
--- a/variants/rak3172/platformio.ini
+++ b/variants/stm32/rak3172/platformio.ini
@@ -4,21 +4,11 @@ board = wiscore_rak3172
board_upload.maximum_size = 233472 ; reserve the last 28KB for filesystem
build_flags =
${stm32_base.build_flags}
- -Ivariants/rak3172
+ -Ivariants/stm32/rak3172
-DPIN_WIRE_SDA=PA11
-DPIN_WIRE_SCL=PA12
- -DHAL_DAC_MODULE_ONLY
- -DHAL_RNG_MODULE_ENABLED
- -DRADIOLIB_EXCLUDE_SX128X=1
- -DRADIOLIB_EXCLUDE_SX127X=1
- -DRADIOLIB_EXCLUDE_LR11X0=1
-DMESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR=1
-DMESHTASTIC_EXCLUDE_I2C=1
- -DMESHTASTIC_EXCLUDE_WIFI=1
- -DMESHTASTIC_EXCLUDE_BLUETOOTH=1
-DMESHTASTIC_EXCLUDE_GPS=1
- -DMESHTASTIC_EXCLUDE_SCREEN=1
- -DMESHTASTIC_EXCLUDE_MQTT=1
- -DMESHTASTIC_EXCLUDE_POWERMON=1
;-DCFG_DEBUG
upload_port = stlink
diff --git a/variants/rak3172/variant.h b/variants/stm32/rak3172/variant.h
similarity index 100%
rename from variants/rak3172/variant.h
rename to variants/stm32/rak3172/variant.h
diff --git a/variants/wio-e5/platformio.ini b/variants/stm32/wio-e5/platformio.ini
similarity index 68%
rename from variants/wio-e5/platformio.ini
rename to variants/stm32/wio-e5/platformio.ini
index 1ef7abd78..c057946dd 100644
--- a/variants/wio-e5/platformio.ini
+++ b/variants/stm32/wio-e5/platformio.ini
@@ -4,18 +4,18 @@ board = lora_e5_dev_board
board_upload.maximum_size = 233472 ; reserve the last 28KB for filesystem
build_flags =
${stm32_base.build_flags}
- -Ivariants/wio-e5
+ -Ivariants/stm32/wio-e5
-DSERIAL_UART_INSTANCE=1
-DPIN_SERIAL_RX=PB7
-DPIN_SERIAL_TX=PB6
-DPIN_WIRE_SDA=PA15
-DPIN_WIRE_SCL=PB15
- -DHAL_DAC_MODULE_ONLY
- -DHAL_RNG_MODULE_ENABLED
- -DRADIOLIB_EXCLUDE_SX128X=1
- -DRADIOLIB_EXCLUDE_SX127X=1
- -DRADIOLIB_EXCLUDE_LR11X0=1
- -DHAS_SENSOR
+ -DHAS_SENSOR=1
+ -DENABLE_HWSERIAL2
+ -DPIN_SERIAL2_TX=PA2
+ -DPIN_SERIAL2_RX=PA3
+ -DHAS_GPS=1
+ -DGPS_SERIAL_PORT=Serial2
upload_port = stlink
diff --git a/variants/wio-e5/variant.h b/variants/stm32/wio-e5/variant.h
similarity index 96%
rename from variants/wio-e5/variant.h
rename to variants/stm32/wio-e5/variant.h
index 5421eaeb9..6098b4ce6 100644
--- a/variants/wio-e5/variant.h
+++ b/variants/stm32/wio-e5/variant.h
@@ -17,6 +17,8 @@ Do not expect a working Meshtastic device with this target.
#define LED_PIN PB5
#define LED_STATE_ON 1
+#define WIO_E5
+
#if (defined(LED_BUILTIN) && LED_BUILTIN == PNUM_NOT_DEFINED)
#undef LED_BUILTIN
#define LED_BUILTIN (LED_PIN)
diff --git a/version.properties b/version.properties
index 5de810523..aa959bcac 100644
--- a/version.properties
+++ b/version.properties
@@ -1,4 +1,4 @@
[VERSION]
major = 2
minor = 7
-build = 3
+build = 4