Merge branch 'develop' into feature/surgical-ci

Resolves conflicts from #11305 which made board_level explicit.
- Keep PR's sophisticated select_changed logic in generate_ci_matrix.py
- Update EMITTABLE_LEVELS to use 'release' instead of None
- Add board_level validation in load_all_envs (fail fast on missing/unknown levels)
- Update build_outlist to match 'release' explicitly instead of not-set
- Update tests to use level='release' for release boards
- Accept auto-merged board_level = release additions to ~100 variant files
This commit is contained in:
copilot-swe-agent[bot]
2026-07-31 20:55:31 +00:00
committed by GitHub
113 changed files with 207 additions and 200 deletions

View File

@@ -557,8 +557,9 @@ pio run -e native-macos # Build headless macOS meshtasticd (Homebrew prere
1. Create directory under `variants/<arch>/<name>/`
2. Add `variant.h` with pin definitions and hardware capability defines
3. Add `platformio.ini` with build config - use `extends` to reference common base (e.g., `esp32s3_base`)
4. Set `custom_meshtastic_support_level = 1` (PR builds) or `2` (merge builds)
5. For e-ink displays, add `nicheGraphics.h` for InkHUD configuration
4. Set `board_level` (required - `release` for a normal variant; see "Build Matrix Generation")
5. Set `custom_meshtastic_support_level` (1-3) and the other `custom_meshtastic_*` metadata
6. For e-ink displays, add `nicheGraphics.h` for InkHUD configuration
### Adding a New Telemetry Sensor
@@ -642,11 +643,16 @@ The CI uses `bin/generate_ci_matrix.py` to dynamically select which targets to b
./bin/generate_ci_matrix.py all --level pr
```
Variants can specify their support level in `platformio.ini`:
Every variant env **must** declare a `board_level` in its `platformio.ini`; the matrix
generator exits non-zero if any env is missing it or uses an unrecognized value:
- `custom_meshtastic_support_level = 1` - Actively supported, built on every PR
- `custom_meshtastic_support_level = 2` - Supported, built on merge to main branches
- `board_level = extra` - Extra builds, only on full releases
- `board_level = pr` - Smallest subset, built on every PR (and in every larger matrix)
- `board_level = release` - The full release matrix, built on push / schedule / `workflow_dispatch`
- `board_level = extra` - Opt-in only, built when explicitly requested via `--level extra`
`custom_meshtastic_support_level` (1-3) is **not** part of this filtering. It is variant
metadata that `bin/platformio-custom.py` emits as `supportLevel` in the generated
hardware list; changing it does not change which targets CI builds.
### Running Workflows Locally

View File

@@ -35,8 +35,8 @@ jobs:
series:
- jammy # 22.04 LTS
- noble # 24.04 LTS
- questing # 25.10
- resolute # 26.04 LTS
- stonking # 26.10
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: ppa:meshtastic/daily

View File

@@ -23,8 +23,8 @@ jobs:
series:
- jammy # 22.04 LTS
- noble # 24.04 LTS
- questing # 25.10
- resolute # 26.04 LTS
- stonking # 26.10
uses: ./.github/workflows/package_ppa.yml
with:
ppa_repo: |-

View File

@@ -7,6 +7,9 @@ on:
permissions: {}
env:
# Only pushes to the default branch (develop) populate the cache; PR / merge_group runs
# restore it but never save, so they stop filling up the repo's Actions cache storage.
SAVE_CACHE: ${{ github.event_name == 'push' && github.ref_name == github.event.repository.default_branch }}
LCOV_CAPTURE_FLAGS: --quiet --capture --include "${PWD}/src/*" --exclude '*/src/mesh/generated/*' --directory .pio/build/coverage/src --base-directory "${PWD}"
jobs:
@@ -17,7 +20,7 @@ jobs:
# check here and fail the PR on a mismatch, keeping the manual count honest.
suite-count-check:
name: Native Suite Count
runs-on: ubuntu-latest
runs-on: ubuntu-slim
permissions:
contents: read
steps:
@@ -56,7 +59,7 @@ jobs:
simulator-tests:
name: Native Simulator Tests
runs-on: ubuntu-latest
runs-on: ubuntu-24.04-arm
needs: suite-count-check
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
@@ -70,10 +73,26 @@ jobs:
- name: Install simulator dependencies
run: pip install -U dotmap
- name: Restore PlatformIO cache
id: pio-cache
uses: actions/cache/restore@v6
with:
path: ~/.platformio/.cache
key: pio-simulator-tests-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
restore-keys: |
pio-simulator-tests-
# We now run integration test before other build steps (to quickly see runtime failures)
- name: Build for native/coverage
run: platformio run -e coverage
- name: Save PlatformIO cache
if: env.SAVE_CACHE == 'true' && steps.pio-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.platformio/.cache
key: pio-simulator-tests-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
- name: Capture initial coverage information
shell: bash
run: |
@@ -139,7 +158,7 @@ jobs:
platformio-tests:
name: Native PlatformIO Tests
runs-on: ubuntu-latest
runs-on: ubuntu-24.04-arm
needs: suite-count-check
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
@@ -159,11 +178,27 @@ jobs:
- name: Disable BUILD_EPOCH
run: sed -i 's/-DBUILD_EPOCH=$UNIX_TIME/#-DBUILD_EPOCH=$UNIX_TIME/' platformio.ini
- name: Restore PlatformIO cache
id: pio-cache
uses: actions/cache/restore@v6
with:
path: ~/.platformio/.cache
key: pio-coverage-tests-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
restore-keys: |
pio-coverage-tests-
- name: Build test programs once
# One shared build of src + every test program. This is the single source build; gcov then
# accumulates coverage counts into this shared .pio/build/coverage/src as the chunks run.
run: platformio test -e coverage --without-testing
- name: Save PlatformIO cache
if: env.SAVE_CACHE == 'true' && steps.pio-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v6
with:
path: ~/.platformio/.cache
key: pio-coverage-tests-${{ hashFiles('platformio.ini', 'variants/native/portduino.ini', 'variants/native/portduino/platformio.ini') }}
- name: Run tests one area at a time
shell: bash
run: |
@@ -270,7 +305,8 @@ jobs:
needs:
- simulator-tests
- platformio-tests
if: always()
# Run this job even if the previous jobs failed, but skip if the workflow was cancelled.
if: ${{ !cancelled() }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

View File

@@ -4,8 +4,8 @@
Enumerates every PlatformIO environment and prints a JSON list of
``{"board", "platform"}`` entries for the requested selector ("all", "check", or a
specific arch), honoring the per-env ``board_level`` tiers (``pr`` / ``extra`` /
release-only).
specific arch), honoring the per-env ``board_level`` tiers (``pr`` / ``release`` /
``extra``).
On pull requests the workflow additionally passes ``--changed-files``: the matrix is
then narrowed to just the environments a PR's changed files can affect (see
@@ -37,8 +37,8 @@ COVERED_ELSEWHERE = {"native"}
# board_level values an env may carry and still be emittable. An ALLOWLIST (not a
# denylist) so an unknown/typo'd level fails CLOSED (excluded) rather than silently
# building. None = release board, "pr"/"extra" = the two explicit tiers.
EMITTABLE_LEVELS = {None, "pr", "extra"}
# building. "release" = full release matrix, "pr"/"extra" = the two explicit tiers.
EMITTABLE_LEVELS = {"pr", "release", "extra"}
# Fallback platformio.ini globs that hold [env:...] / [*_base] definitions. Production
# overrides the env-definition scan with the real [platformio] extra_configs (see
@@ -206,10 +206,21 @@ def load_all_envs():
cfg.get(f"env:{pio_env}", "board_check", default="false").strip().lower()
== "true"
)
board_level = cfg.get(f"env:{pio_env}", "board_level", default=None)
# Intentionally fail on a missing or unrecognized level: every env must opt in
# explicitly, so a new variant can't silently drop out of (or into) the matrix.
if board_level not in EMITTABLE_LEVELS:
found = repr(board_level) if board_level is not None else "no value"
print(
f"Error: environment '{pio_env}' has {found} for 'board_level'; "
f"expected one of: {', '.join(sorted(EMITTABLE_LEVELS))}",
file=sys.stderr,
)
sys.exit(1)
all_envs.append(
{
"ci": {"board": pio_env, "platform": env_platform},
"board_level": cfg.get(f"env:{pio_env}", "board_level", default=None),
"board_level": board_level,
"board_check": board_check,
"include_dirs": include_dirs,
"def_dir": defdir.get(pio_env),
@@ -370,8 +381,8 @@ def build_outlist(all_envs, platform, level, selected):
# Include board_level = 'extra' when requested.
elif "extra" in level and env["board_level"] == "extra":
outlist.append(ci)
# If no board level is specified, include in release builds (not PR).
elif "pr" not in level and not env["board_level"]:
# Include board_level = 'release' unless narrowed to the PR subset.
elif "pr" not in level and env["board_level"] == "release":
outlist.append(ci)
return outlist

View File

@@ -38,7 +38,7 @@ BASE_INI_INCL = {"variants/esp32/esp32-common.ini": {"esp32"}}
def env(
board,
platform,
level=None,
level="release",
check=False,
include_dirs=None,
def_dir=None,
@@ -68,7 +68,7 @@ def universe():
env(
"tbeam",
"esp32",
level=None,
level="release",
include_dirs=["variants/esp32/tbeam"],
def_dir="variants/esp32/tbeam",
src_platforms=_sp("esp32"),
@@ -401,11 +401,12 @@ def test_platform_src_map_from_envs_derives_family_grouping():
def test_emittable_allowlist_fails_closed():
"""Unknown board_level values are excluded; only None/pr/extra emit."""
assert gcm._emittable(env("a", "esp32", level=None))
"""Unknown board_level values are excluded; only pr/release/extra emit."""
assert gcm._emittable(env("a", "esp32", level="release"))
assert gcm._emittable(env("a", "esp32", level="pr"))
assert gcm._emittable(env("a", "esp32", level="extra"))
# Retired 'community' tier and any typo fail closed.
# Retired 'community' tier, None (missing level), and any typo fail closed.
assert not gcm._emittable(env("a", "esp32", level=None))
assert not gcm._emittable(env("a", "esp32", level="community"))
assert not gcm._emittable(env("a", "esp32", level="bogus"))
# covered-elsewhere platform is excluded regardless of a valid level.

3
debian/control vendored
View File

@@ -28,7 +28,8 @@ Build-Depends: debhelper-compat (= 13),
libinput-dev,
libxkbcommon-x11-dev,
libsqlite3-dev,
libsdl2-dev
libsdl2-dev,
libcurl4-gnutls-dev
Standards-Version: 4.6.2
Homepage: https://github.com/meshtastic/firmware
Rules-Requires-Root: no

View File

@@ -41,6 +41,7 @@ BuildRequires: pkgconfig(libusb-1.0)
BuildRequires: libi2c-devel
BuildRequires: pkgconfig(libuv)
BuildRequires: pkgconfig(sqlite3)
BuildRequires: pkgconfig(libcurl)
# Web components:
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(liborcania)

View File

@@ -1467,7 +1467,7 @@ void Screen::setFrames(FrameFocus focus)
#if HAS_WIFI && !defined(ARCH_PORTDUINO)
if (!hiddenFrames.wifi && isWifiAvailable()) {
fsi.positions.wifi = numframes;
normalFrames[numframes++] = graphics::DebugRenderer::drawDebugInfoWiFiTrampoline;
normalFrames[numframes++] = graphics::DebugRenderer::drawFrameWiFi;
indicatorIcons.push_back(icon_wifi);
}
#endif

View File

@@ -195,27 +195,6 @@ enum class FrameDirection { NEXT, PREVIOUS };
// Forward declarations
class Screen;
/// Handles gathering and displaying debug information.
class DebugInfo
{
public:
DebugInfo(const DebugInfo &) = delete;
DebugInfo &operator=(const DebugInfo &) = delete;
private:
friend Screen;
DebugInfo() {}
/// Renders the debug screen.
void drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
void drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
void drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
/// Protects all of internal state.
concurrency::Lock lock;
};
/**
* @brief This class deals with showing things on the screen of the device.
*
@@ -647,11 +626,6 @@ class Screen : public concurrency::OSThread
// stick to standard EASCII codes)
}
/// Returns a handle to the DebugInfo screen.
//
// Use this handle to set things like battery status, user count, GPS status, etc.
DebugInfo *debug_info() { return &debugInfo; }
// Handle observer events
int handleStatusUpdate(const meshtastic::Status *arg);
int handleUIFrameEvent(const UIFrameEvent *arg);
@@ -824,9 +798,6 @@ class Screen : public concurrency::OSThread
float compassHeading;
uint32_t endCalibrationAt;
/// Holds state for debug information
DebugInfo debugInfo;
/// Display device
#ifdef USE_ST7789
ST7789Spi *dispdev;

View File

@@ -5,7 +5,6 @@
#include "FSCommon.h"
#include "MeshService.h"
#include "NodeDB.h"
#include "Throttle.h"
#include "UIRenderer.h"
#include "airtime.h"
#include "gps/RTC.h"
@@ -16,9 +15,6 @@
#include "graphics/TimeFormatters.h"
#include "graphics/images.h"
#include "main.h"
#include "mesh/Channels.h"
#include "mesh/generated/meshtastic/deviceonly.pb.h"
#include "sleep.h"
#if HAS_WIFI && !defined(ARCH_PORTDUINO)
#include "mesh/wifi/WiFiAPClient.h"
@@ -28,9 +24,6 @@
#endif
#endif
#ifdef ARCH_ESP32
#include "modules/StoreForwardModule.h"
#endif
#include <DisplayFormatters.h>
#include <RadioLibInterface.h>
#include <target_specific.h>
@@ -39,111 +32,17 @@ using namespace meshtastic;
// External variables
extern std::unique_ptr<graphics::Screen> screen;
extern PowerStatus *powerStatus;
extern NodeStatus *nodeStatus;
extern GPSStatus *gpsStatus;
extern Channels channels;
extern AirTime *airTime;
// External functions from Screen.cpp
extern bool heartbeat;
#ifdef ARCH_ESP32
extern StoreForwardModule *storeForwardModule;
#endif
namespace graphics
{
namespace DebugRenderer
{
void drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
{
display->setFont(FONT_SMALL);
// The coordinates define the left starting point of the text
display->setTextAlignment(TEXT_ALIGN_LEFT);
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_INVERTED) {
display->fillRect(0 + x, 0 + y, x + display->getWidth(), y + FONT_HEIGHT_SMALL);
display->setColor(BLACK);
}
char channelStr[20];
snprintf(channelStr, sizeof(channelStr), "#%s", channels.getName(channels.getPrimaryIndex()));
// Display nodes status
if (config.display.displaymode == meshtastic_Config_DisplayConfig_DisplayMode_DEFAULT) {
UIRenderer::drawNodes(display, x + (SCREEN_WIDTH * 0.25), y + 2, nodeStatus);
} else {
UIRenderer::drawNodes(display, x + (SCREEN_WIDTH * 0.25), y + 3, nodeStatus);
}
#if HAS_GPS
// Display GPS status
if (config.position.gps_mode != meshtastic_Config_PositionConfig_GpsMode_ENABLED) {
UIRenderer::drawGpsPowerStatus(display, x, y + 2, gpsStatus);
} else {
if (config.display.displaymode == meshtastic_Config_DisplayConfig_DisplayMode_DEFAULT) {
UIRenderer::drawGps(display, x + (SCREEN_WIDTH * 0.63), y + 2, gpsStatus);
} else {
UIRenderer::drawGps(display, x + (SCREEN_WIDTH * 0.63), y + 3, gpsStatus);
}
}
#endif
display->setColor(WHITE);
// Draw the channel name
display->drawString(x, y + FONT_HEIGHT_SMALL, channelStr);
// Draw our hardware ID to assist with bluetooth pairing. Either prefix with Info or S&F Logo
if (moduleConfig.store_forward.enabled) {
#ifdef ARCH_ESP32
if (!Throttle::isWithinTimespanMs(storeForwardModule->lastHeartbeat,
(storeForwardModule->heartbeatInterval * 1200))) { // no heartbeat, overlap a bit
#if (defined(USE_EINK) || defined(HAS_SPI_TFT) || ARCH_PORTDUINO) && !defined(DISPLAY_FORCE_SMALL_FONTS)
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(screen->ourId), y + 3 + FONT_HEIGHT_SMALL, 12,
8, imgQuestionL1);
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(screen->ourId), y + 11 + FONT_HEIGHT_SMALL, 12,
8, imgQuestionL2);
#else
display->drawFastImage(x + SCREEN_WIDTH - 10 - display->getStringWidth(screen->ourId), y + 2 + FONT_HEIGHT_SMALL, 8,
8, imgQuestion);
#endif
} else {
#if (defined(USE_EINK) || defined(HAS_SPI_TFT)) && !defined(DISPLAY_FORCE_SMALL_FONTS)
display->drawFastImage(x + SCREEN_WIDTH - 18 - display->getStringWidth(screen->ourId), y + 3 + FONT_HEIGHT_SMALL, 16,
8, imgSFL1);
display->drawFastImage(x + SCREEN_WIDTH - 18 - display->getStringWidth(screen->ourId), y + 11 + FONT_HEIGHT_SMALL, 16,
8, imgSFL2);
#else
display->drawFastImage(x + SCREEN_WIDTH - 13 - display->getStringWidth(screen->ourId), y + 2 + FONT_HEIGHT_SMALL, 11,
8, imgSF);
#endif
}
#endif
} else {
// TODO: Raspberry Pi supports more than just the one screen size
#if (defined(USE_EINK) || defined(HAS_SPI_TFT) || ARCH_PORTDUINO) && !defined(DISPLAY_FORCE_SMALL_FONTS)
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(screen->ourId), y + 3 + FONT_HEIGHT_SMALL, 12, 8,
imgInfoL1);
display->drawFastImage(x + SCREEN_WIDTH - 14 - display->getStringWidth(screen->ourId), y + 11 + FONT_HEIGHT_SMALL, 12, 8,
imgInfoL2);
#else
display->drawFastImage(x + SCREEN_WIDTH - 10 - display->getStringWidth(screen->ourId), y + 2 + FONT_HEIGHT_SMALL, 8, 8,
imgInfo);
#endif
}
display->drawString(x + SCREEN_WIDTH - display->getStringWidth(screen->ourId), y + FONT_HEIGHT_SMALL, screen->ourId);
// Draw any log messages
display->drawLogBuffer(x, y + (FONT_HEIGHT_SMALL * 2));
/* Display a heartbeat pixel that blinks every time the frame is redrawn */
#ifdef SHOW_REDRAWS
if (heartbeat)
display->setPixel(0, 0);
heartbeat = !heartbeat;
#endif
}
// ****************************
// * WiFi Screen *
// ****************************
@@ -230,12 +129,6 @@ void drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, i
#endif
}
// Trampoline functions for DebugInfo class access
void drawDebugInfoWiFiTrampoline(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y)
{
drawFrameWiFi(display, state, x, y);
}
// ****************************
// * LoRa Focused Screen *
// ****************************

View File

@@ -8,7 +8,6 @@ namespace graphics
/// Forward declarations
class Screen;
class DebugInfo;
/**
* @brief Debug and diagnostic drawing functions
@@ -18,13 +17,9 @@ class DebugInfo;
*/
namespace DebugRenderer
{
// Debug frame functions
void drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
// WiFi status display
void drawFrameWiFi(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
// Trampoline functions for framework callback compatibility
void drawDebugInfoWiFiTrampoline(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
// LoRa information display
void drawLoRaFocused(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);

View File

@@ -547,22 +547,6 @@ void UIRenderer::drawGps(OLEDDisplay *display, int16_t x, int16_t y, const mesht
}
}
// Draw status when GPS is disabled or not present
void UIRenderer::drawGpsPowerStatus(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gps)
{
const char *displayLine;
int pos;
if (y < FONT_HEIGHT_SMALL) { // Line 1: use short string
displayLine = config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_NOT_PRESENT ? "No GPS" : "GPS off";
pos = display->getWidth() - display->getStringWidth(displayLine);
} else {
displayLine = config.position.gps_mode == meshtastic_Config_PositionConfig_GpsMode_NOT_PRESENT ? "GPS not present"
: "GPS is disabled";
pos = (display->getWidth() - display->getStringWidth(displayLine)) / 2;
}
display->drawString(x + pos, y, displayLine);
}
void UIRenderer::drawGpsAltitude(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gps)
{
char displayLine[32];

View File

@@ -42,7 +42,6 @@ class UIRenderer
static void drawGpsCoordinates(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gpsStatus,
const char *mode = "line1");
static void drawGpsAltitude(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gpsStatus);
static void drawGpsPowerStatus(OLEDDisplay *display, int16_t x, int16_t y, const meshtastic::GPSStatus *gpsStatus);
// Overlay and special screens
static void drawFrameText(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y, const char *text);

View File

@@ -29,21 +29,6 @@ const uint8_t bluetoothConnectedIcon[36] PROGMEM = {0xfe, 0x01, 0xff, 0x03, 0x03
0xf3, 0x3f, 0x33, 0x30, 0x33, 0x33, 0x33, 0x33, 0x03, 0x33, 0xff, 0x33,
0xfe, 0x31, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x3f, 0xe0, 0x1f};
#if (defined(USE_EINK) || defined(HAS_SPI_TFT) || ARCH_PORTDUINO) && !defined(DISPLAY_FORCE_SMALL_FONTS)
const uint8_t imgQuestionL1[] PROGMEM = {0xff, 0x01, 0x01, 0x32, 0x7b, 0x49, 0x49, 0x6f, 0x26, 0x01, 0x01, 0xff};
const uint8_t imgQuestionL2[] PROGMEM = {0x0f, 0x08, 0x08, 0x08, 0x06, 0x0f, 0x0f, 0x06, 0x08, 0x08, 0x08, 0x0f};
const uint8_t imgInfoL1[] PROGMEM = {0xff, 0x01, 0x01, 0x01, 0x1e, 0x7f, 0x1e, 0x01, 0x01, 0x01, 0x01, 0xff};
const uint8_t imgInfoL2[] PROGMEM = {0x0f, 0x08, 0x08, 0x08, 0x06, 0x0f, 0x0f, 0x06, 0x08, 0x08, 0x08, 0x0f};
const uint8_t imgSFL1[] PROGMEM = {0xb6, 0x8f, 0x19, 0x11, 0x31, 0xe3, 0xc2, 0x01,
0x01, 0xf9, 0xf9, 0x89, 0x89, 0x89, 0x09, 0xeb};
const uint8_t imgSFL2[] PROGMEM = {0x0e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08,
0x00, 0x0f, 0x0f, 0x00, 0x08, 0x08, 0x08, 0x0f};
#else
const uint8_t imgInfo[] PROGMEM = {0xff, 0x81, 0x00, 0xfb, 0xfb, 0x00, 0x81, 0xff};
const uint8_t imgQuestion[] PROGMEM = {0xbf, 0x41, 0xc0, 0x8b, 0xdb, 0x70, 0xa1, 0xdf};
const uint8_t imgSF[] PROGMEM = {0xd2, 0xb7, 0xad, 0xbb, 0x92, 0x01, 0xfd, 0xfd, 0x15, 0x85, 0xf5};
#endif
// === Horizontal battery ===
// Basic battery design and all related pieces
const unsigned char batteryBitmap_h_bottom[] PROGMEM = {

View File

@@ -1,6 +1,7 @@
; CircuitMess Chatter 2 based on ESP32-WROOM-32 (38 pins) devkit & DeeamLNK DL-LLCC68 or Heltec HT RA62 SX1262/SX1268 module
[env:chatter2]
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Hydra
custom_meshtastic_tags = DIY
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = diy.svg
custom_meshtastic_tags = DIY
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
board_check = true
build_flags =

View File

@@ -8,6 +8,7 @@ custom_meshtastic_display_name = M5 Stack
custom_meshtastic_tags = M5Stack
extends = esp32_base
board_level = release
board = m5stack-core-esp32
monitor_filters = esp32_exception_decoder
build_src_filter =

View File

@@ -1,5 +1,6 @@
[env:m5stack-coreink]
extends = esp32_base
board_level = release
board = m5stack-coreink
board_check = true
build_src_filter =

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Nano G1 Explorer
custom_meshtastic_tags = B&Q
extends = esp32_base
board_level = release
board = ttgo-tbeam
build_flags =
${esp32_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Nano G1
custom_meshtastic_tags = B&Q
extends = esp32_base
board_level = release
board = ttgo-tbeam
build_flags =
${esp32_base.build_flags}

View File

@@ -1,5 +1,6 @@
[env:radiomaster_900_bandit]
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -5,6 +5,7 @@
;
[env:radiomaster_900_bandit_micro]
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -8,6 +8,7 @@ custom_meshtastic_display_name = RadioMaster 900 Bandit Nano
custom_meshtastic_tags = RadioMaster
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = rak11200.svg
custom_meshtastic_tags = RAK
extends = esp32_base
board_level = release
board = wiscore_rak11200
board_check = true
build_flags =

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Station G1
custom_meshtastic_tags = B&Q
extends = esp32_base
board_level = release
board = ttgo-tbeam
build_flags =
${esp32_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = tbeam.svg
custom_meshtastic_tags = LilyGo
extends = esp32_base
board_level = release
board = ttgo-tbeam
board_check = true

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = tlora-v2-1-1_6.svg
custom_meshtastic_tags = LilyGo
extends = esp32_base
board_level = release
board = ttgo-lora32-v21
board_check = true
build_flags =

View File

@@ -1,5 +1,6 @@
[env:tlora-v3-3-0-tcxo]
extends = esp32_base
board_level = release
board = ttgo-lora32-v21
build_flags =
${esp32_base.build_flags}

View File

@@ -1,5 +1,6 @@
[env:heltec-hru-3601]
extends = esp32c3_base
board_level = release
board = adafruit_qtpy_esp32c3
build_flags =
${esp32c3_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = m5_c6l.svg
custom_meshtastic_tags = M5Stack
extends = esp32c6_base
board_level = release
board = esp32-c6-devkitc-1
board_upload.flash_size = 16MB
board_build.partitions = default_16MB.csv

View File

@@ -9,6 +9,7 @@ custom_meshtastic_tags = EByte
custom_meshtastic_requires_dfu = true
extends = esp32s3_base
board_level = release
board = CDEBYTE_EoRa-S3
build_flags =
${esp32s3_base.build_flags}

View File

@@ -1,5 +1,6 @@
[env:thinknode_g3]
extends = esp32s3_base
board_level = release
board = ESP32-S3-WROOM-1-N4
board_build.psram_type = opi

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Elecrow
custom_meshtastic_requires_dfu = false
extends = esp32s3_base
board_level = release
board = ESP32-S3-WROOM-1-N4
build_flags =
${esp32s3_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Elecrow
custom_meshtastic_requires_dfu = false
extends = esp32s3_base
board_level = release
board = ESP32-S3-WROOM-1-N4
build_src_filter =
${esp32s3_base.build_src_filter}

View File

@@ -91,6 +91,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = crowpanel_small_esp32s3_base
board_level = release
build_flags =
${crowpanel_small_esp32s3_base.build_flags}
-D SPI_FREQUENCY=80000000
@@ -127,6 +128,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = crowpanel_small_esp32s3_base
board_level = release
build_flags =
${crowpanel_small_esp32s3_base.build_flags}
-D LV_CACHE_DEF_SIZE=2097152
@@ -166,6 +168,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = crowpanel_large_esp32s3_base
board_level = release
build_flags =
${crowpanel_large_esp32s3_base.build_flags}
-D VIEW_320x240

View File

@@ -1,6 +1,7 @@
; Hackaday Communicator
[env:hackaday-communicator]
extends = esp32s3_base
board_level = release
board = hackaday-communicator
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -1,5 +1,6 @@
[env:heltec_capsule_sensor_v3]
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_check = true
board_build.partitions = default_8MB.csv

View File

@@ -1,5 +1,6 @@
[env:heltec_sensor_hub]
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_check = true

View File

@@ -24,6 +24,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = heltec_v4_base
board_level = release
build_flags =
${heltec_v4_base.build_flags}
-D HELTEC_V4_OLED
@@ -48,6 +49,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = heltec_v4_base
board_level = release
build_flags =
${heltec_v4_base.build_flags} ;-Os
-D HELTEC_V4_TFT

View File

@@ -24,6 +24,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = heltec_v4_r8_base
board_level = release
build_flags =
${heltec_v4_r8_base.build_flags}
-D HELTEC_V4_R8_OLED
@@ -46,6 +47,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = heltec_v4_r8_base
board_level = release
build_flags =
${heltec_v4_r8_base.build_flags} ;-Os
-D HELTEC_V4_R8_TFT

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = heltec_vision_master_e213
board_build.partitions = default_8MB.csv
build_flags =

View File

@@ -13,6 +13,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = heltec_vision_master_e290
board_build.partitions = default_8MB.csv
build_flags =
@@ -38,6 +39,7 @@ upload_speed = 115200
[env:heltec-vision-master-e290-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = heltec_vision_master_e290
board_build.partitions = default_8MB.csv
build_src_filter =

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_vision_master_t190
board_build.partitions = default_8MB.csv
build_flags =

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
build_flags =
@@ -35,6 +36,7 @@ upload_speed = 115200
[env:heltec-wireless-paper-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
build_src_filter =

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esptool

View File

@@ -4,6 +4,7 @@ custom_meshtastic_images = heltec_wireless_tracker_v2.svg
custom_meshtastic_tags = Heltec
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker_v2
board_build.partitions = default_8MB.csv
upload_protocol = esptool

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Heltec
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
# Temporary until espressif creates a release with this new target

View File

@@ -1,6 +1,7 @@
; M5stack Cardputer Advanced
[env:m5stack-cardputer-adv]
extends = esp32s3_base
board_level = release
board = m5stack-stamps3
board_check = true
board_build.partitions = default_8MB.csv

View File

@@ -1,6 +1,7 @@
; M5stack CoreS3
[env:m5stack-cores3]
extends = esp32s3_base
board_level = release
board = m5stack-cores3
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -17,6 +17,7 @@ board_build.psram_type = opi
board_build.arduino.memory_type = qio_opi
extends = esp32s3_base
board_level = release
build_flags =
${esp32s3_base.build_flags}
-D MESHNOLOGY_W10

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = esp32-s3-devkitc-1
; ESP32-S3R8: 8 MB OPI PSRAM, 16 MB QIO flash
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = no
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = mini-epaper-s3
board_check = true
upload_protocol = esptool
@@ -37,6 +38,7 @@ lib_deps =
[env:mini-epaper-s3-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = mini-epaper-s3
board_check = true
upload_protocol = esptool

View File

@@ -9,6 +9,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = bpi_picow_esp32_s3
board_check = true
board_build.partitions = partition-table-8MB.csv
@@ -33,6 +34,7 @@ build_src_filter =
[env:picomputer-s3-tft]
extends = env:picomputer-s3
board_level = release
build_flags =
${env:picomputer-s3.build_flags}

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = wiscore_rak3312
board_check = true
upload_protocol = esptool

View File

@@ -23,6 +23,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = wiscore_rak3312
board_check = true
upload_protocol = esptool
@@ -41,6 +42,7 @@ lib_deps =
[env:rak_wismesh_tap_v2-tft]
extends = env:rak_wismesh_tap_v2
board_level = release
; The MUI build overflows default_8MB.csv's 0x330000 app slots; use the MUI
; layout (large app0 + small flasher slot) like the other has_mui 8MB boards.
board_build.partitions = partition-table-8MB.csv

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
platform_packages =
; Version needs to match the pioarduino version used in esp32_common.ini
platformio/framework-arduinoespressif32 @ https://github.com/mverch67/arduino-esp32#6dde0f3b58e32d9f884b94b4685b0f3a267c4624 ; 3.3.11

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = seeed-xiao-s3
board_check = true
board_build.partitions = default_8MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = station-g2
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = station-g3
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = t-beam-1w
board_build.partitions = default_8MB.csv
board_check = true

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = tbeam-1w.svg
custom_meshtastic_tags = LilyGo
extends = esp32s3_base
board_level = release
board = t-beam-bpf
board_build.partitions = default_16MB.csv
board_check = true

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = t-deck-pro
board_check = true
upload_protocol = esptool

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = t-deck-pro
board_check = true
upload_protocol = esptool

View File

@@ -13,6 +13,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = t-deck
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -1,5 +1,6 @@
[env:t-eth-elite]
extends = esp32s3_base
board_level = release
board = esp32s3box
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = t-watch-s3
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -55,6 +55,7 @@ lib_deps =
[env:t5s3-epaper-v1] ; H752
extends = t5s3_epaper_base
board_level = release
build_flags =
${t5s3_epaper_base.build_flags}
-D T5_S3_EPAPER_PRO_V1
@@ -62,6 +63,7 @@ build_flags =
[env:t5s3-epaper-v2] ; H752-01
extends = t5s3_epaper_base
board_level = release
build_flags =
${t5s3_epaper_base.build_flags}
-D T5_S3_EPAPER_PRO_V2

View File

@@ -12,6 +12,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = tbeam-s3-core
board_build.partitions = default_8MB.csv
board_check = true

View File

@@ -13,6 +13,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = t-deck-pro ; same as T-Deck Pro
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = tlora-t3s3-v1
board_check = true
board_build.partitions = partition-table-t3s3.csv
@@ -39,6 +40,7 @@ lib_deps =
[env:tlora-t3s3-epaper-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = tlora-t3s3-v1
board_check = true
board_build.partitions = partition-table-t3s3.csv

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_requires_dfu = true
extends = esp32s3_base
board_level = release
board = tlora-t3s3-v1
board_check = true
board_build.partitions = partition-table-t3s3.csv

View File

@@ -9,6 +9,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
@@ -35,6 +36,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
@@ -60,6 +62,7 @@ custom_meshtastic_display_name = TrackSenger (big OLED)
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = unphone
board_build.partitions = partition-table-8MB.csv
upload_speed = 921600

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = Elecrow
custom_meshtastic_has_ink_hud = true
extends = nrf52840_base
board_level = release
board = ThinkNode-M1
board_check = true
debug_tool = jlink
@@ -41,6 +42,7 @@ lib_deps =
[env:thinknode_m1-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = ThinkNode-M1
board_check = true
debug_tool = jlink

View File

@@ -4,6 +4,7 @@ custom_meshtastic_images = thinknode_m3.svg
custom_meshtastic_tags = Elecrow
extends = nrf52840_base
board_level = release
board = ThinkNode-M3
board_check = true
debug_tool = jlink

View File

@@ -1,6 +1,7 @@
; ThinkNode M4 - Powerbank nrf52840/LR1110 by Elecrow
[env:thinknode_m4]
extends = nrf52840_base
board_level = release
board = ThinkNode-M4
board_check = true
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = thinknode_m6.svg
custom_meshtastic_tags = Elecrow
extends = nrf52840_base
board_level = release
board = ThinkNode-M6
board_check = true
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_display_name = Elecrow ThinkNode M8
custom_meshtastic_actively_supported = true
extends = nrf52840_base
board_level = release
board = ThinkNode-M8
board_check = true
debug_tool = jlink

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Canary One
custom_meshtastic_tags = Canary
extends = nrf52840_base
board_level = release
board = canaryone
debug_tool = jlink

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = DIY
custom_meshtastic_requires_dfu = true
extends = nrf52840_base
board_level = release
board = promicro-nrf52840
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/diy/nrf52_promicro_diy_tcxo

View File

@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921
[env:feather_diy]
extends = nrf52840_base
board_level = release
board = adafruit_feather_nrf52840
build_flags = ${nrf52840_base.build_flags}
-Ivariants/nrf52840/feather_diy

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = heltec-mesh-node-t096.svg, heltec-mesh-node-t096-case
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_node_t096
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = heltec-mesh-node-t1.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_node_t1
debug_tool = jlink

View File

@@ -5,6 +5,7 @@ custom_meshtastic_images = heltec_mesh_pocket.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_pocket
debug_tool = jlink
custom_device_hw_model = 94
@@ -43,6 +44,7 @@ lib_deps =
[env:heltec-mesh-pocket-5000-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = heltec_mesh_pocket
custom_meshtastic_hw_model = 94
custom_meshtastic_hw_model_slug = HELTEC_MESH_POCKET
@@ -70,6 +72,7 @@ custom_meshtastic_images = heltec_mesh_pocket.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_pocket
debug_tool = jlink
custom_meshtastic_hw_model = 94
@@ -107,6 +110,7 @@ lib_deps =
[env:heltec-mesh-pocket-10000-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = heltec_mesh_pocket
custom_meshtastic_hw_model = 94
custom_meshtastic_hw_model_slug = HELTEC_MESH_POCKET

View File

@@ -28,11 +28,13 @@ custom_meshtastic_images = heltec-mesh-solar.svg
custom_meshtastic_tags = Heltec
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-DSPI_INTERFACES_COUNT=1
[env:heltec-mesh-solar-eink]
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-DHELTEC_MESH_SOLAR_EINK
-DSPI_INTERFACES_COUNT=2
@@ -71,6 +73,7 @@ lib_deps =
[env:heltec-mesh-solar-inkhud]
extends = heltec_mesh_solar_base, inkhud
board_level = release
build_src_filter = ${heltec_mesh_solar_base.build_src_filter} ${inkhud.build_src_filter}
build_flags = ${heltec_mesh_solar_base.build_flags}
${inkhud.build_flags}
@@ -92,6 +95,7 @@ lib_deps =
[env:heltec-mesh-solar-oled]
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-DHELTEC_MESH_SOLAR_OLED
-DSPI_INTERFACES_COUNT=1
@@ -103,6 +107,7 @@ build_flags = ${heltec_mesh_solar_base.build_flags}
[env:heltec-mesh-solar-tft]
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-UOLEDDISPLAY_REDUCE_MEMORY ; TFTDisplay.cpp needs the lib's buffer_back for dirty-window diffing
-DHELTEC_MESH_SOLAR_TFT

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = heltec-mesh-tower-v2.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_tower_v2
debug_tool = jlink

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = muzi_base.svg
custom_meshtastic_tags = muzi
extends = nrf52840_base
board_level = release
board = muzi-base
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/muzi_base

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = nano-g2-ultra.svg
custom_meshtastic_tags = B&Q
extends = nrf52840_base
board_level = release
board = nano-g2-ultra
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = muzi_r1_neo.svg
custom_meshtastic_tags = muzi
extends = nrf52840_base
board_level = release
board = r1-neo
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = rak2560.svg
custom_meshtastic_tags = RAK
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = RAK
custom_meshtastic_requires_dfu = true
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}
@@ -39,6 +40,7 @@ lib_deps =
; RAK10729 WisMesh Repeater Mini V2 HP (RAK3401 + RAK19007 + RAK13302 + solar battery)
[env:rak_wismesh_repeater_mini_hp]
extends = env:rak3401-1watt
board_level = release
custom_meshtastic_display_name = RAK WisMesh Repeater Mini V2 HP
custom_meshtastic_images = rak3401.svg
build_flags =

View File

@@ -47,6 +47,7 @@ lib_deps =
; RAK10728 WisMesh Repeater Mini V2 (RAK4631 + RAK19003 + solar battery + GPS module)
[env:rak_wismesh_repeater_mini]
extends = env:rak4631
board_level = release
custom_meshtastic_display_name = RAK WisMesh Repeater Mini V2
custom_meshtastic_images = rak4631.svg
build_flags =
@@ -59,6 +60,7 @@ build_flags =
; RAK WisMesh Pocket V3 - rak4631 pin map + OLED; no ethernet (unlike env:rak4631)
[env:rak_wismesh_pocket]
extends = env:rak4631
board_level = release
custom_meshtastic_display_name = RAK WisMesh Pocket V3
custom_meshtastic_images = rak4631.svg
build_flags =

View File

@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Firmware for 5005 with the RAK 14000 ePaper
[env:rak4631_eink]
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/rak4631_epaper

View File

@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921
[env:rak4631_eth_gw]
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = meteor_pro.svg
custom_meshtastic_tags = NomadStar
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -5,6 +5,7 @@ custom_meshtastic_images = rak_wismesh_tag.svg
custom_meshtastic_tags = RAK
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
custom_meshtastic_hw_model = 105
@@ -26,6 +27,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak_wis
; RAK WisMesh Pod - same board as Tag (no user buttons on hardware; shares Tag pin map)
[env:rak_wismesh_pod]
extends = env:rak_wismeshtag
board_level = release
custom_meshtastic_display_name = RAK WisMesh Pod
build_flags =
${env:rak_wismeshtag.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = rak-wismeshtap.svg
custom_meshtastic_tags = RAK
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
build_flags = ${nrf52840_base.build_flags}
-UOLEDDISPLAY_REDUCE_MEMORY ; TFTDisplay.cpp needs the lib's buffer_back for dirty-window diffing

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Seeed
board = seeed_solar_node
extends = nrf52840_base
board_level = release
;board_level = extra
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/seeed_solar_node

Some files were not shown because too many files have changed in this diff Show More