Merge branch 'master' into fix-serialization

This commit is contained in:
rradillen 2025-07-24 11:28:00 +02:00 committed by GitHub
commit 566f8a81d3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
39 changed files with 294 additions and 429 deletions

View File

@ -1,42 +0,0 @@
name: Build ESP32
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-esp32:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build ESP32
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: esp32
pio_env: ${{ inputs.board }}
pio_target: build
ota_firmware_source: firmware.bin
ota_firmware_target: release/bleota.bin
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-esp32-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.bin
release/*.elf

View File

@ -1,42 +0,0 @@
name: Build ESP32-C3
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-esp32-c3:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build ESP32-C3
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: esp32
pio_env: ${{ inputs.board }}
pio_target: build
ota_firmware_source: firmware-c3.bin
ota_firmware_target: release/bleota-c3.bin
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-esp32c3-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.bin
release/*.elf

View File

@ -1,42 +0,0 @@
name: Build ESP32-C6
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-esp32-c6:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build ESP32-C6
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: esp32
pio_env: ${{ inputs.board }}
pio_target: build
ota_firmware_source: firmware-c3.bin
ota_firmware_target: release/bleota-c3.bin
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-esp32c6-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.bin
release/*.elf

View File

@ -1,42 +0,0 @@
name: Build ESP32-S3
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-esp32-s3:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build ESP32-S3
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: esp32
pio_env: ${{ inputs.board }}
pio_target: build
ota_firmware_source: firmware-s3.bin
ota_firmware_target: release/bleota-s3.bin
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-esp32s3-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.bin
release/*.elf

66
.github/workflows/build_firmware.yml vendored Normal file
View File

@ -0,0 +1,66 @@
name: Build
on:
workflow_call:
inputs:
version:
required: true
type: string
platform:
required: true
type: string
pio_env:
required: true
type: string
permissions: read-all
jobs:
pio-build:
name: build-${{ inputs.platform }}
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Set OTA firmware source and target
if: startsWith(inputs.platform, 'esp32')
id: ota_dir
env:
PIO_PLATFORM: ${{ inputs.platform }}
run: |
if [ "$PIO_PLATFORM" = "esp32s3" ]; then
echo "src=firmware-s3.bin" >> $GITHUB_OUTPUT
echo "tgt=release/bleota-s3.bin" >> $GITHUB_OUTPUT
elif [ "$PIO_PLATFORM" = "esp32c3" ] || [ "$PIO_PLATFORM" = "esp32c6" ]; then
echo "src=firmware-c3.bin" >> $GITHUB_OUTPUT
echo "tgt=release/bleota-c3.bin" >> $GITHUB_OUTPUT
elif [ "$PIO_PLATFORM" = "esp32" ]; then
echo "src=firmware.bin" >> $GITHUB_OUTPUT
echo "tgt=release/bleota.bin" >> $GITHUB_OUTPUT
fi
- name: Build ${{ inputs.platform }}
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: ${{ inputs.platform }}
pio_env: ${{ inputs.pio_env }}
pio_target: build
ota_firmware_source: ${{ steps.ota_dir.outputs.src || '' }}
ota_firmware_target: ${{ steps.ota_dir.outputs.tgt || '' }}
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-${{ inputs.platform }}-${{ inputs.pio_env }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.bin
release/*.elf
release/*.uf2
release/*.hex
release/*-ota.zip

View File

@ -1,42 +0,0 @@
name: Build NRF52
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-nrf52:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build NRF52
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: nrf52
pio_env: ${{ inputs.board }}
pio_target: build
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-nrf52840-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.uf2
release/*.elf
release/*.hex
release/*-ota.zip

View File

@ -1,40 +0,0 @@
name: Build RPI2040
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-rpi2040:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build Raspberry Pi 2040
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: rp2xx0
pio_env: ${{ inputs.board }}
pio_target: build
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-rp2040-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.uf2
release/*.elf

View File

@ -1,41 +0,0 @@
name: Build STM32
on:
workflow_call:
inputs:
version:
required: true
type: string
board:
required: true
type: string
permissions: read-all
jobs:
build-stm32:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
ref: ${{github.event.pull_request.head.ref}}
repository: ${{github.event.pull_request.head.repo.full_name}}
- name: Build STM32WL
id: build
uses: meshtastic/gh-action-firmware@main
with:
pio_platform: stm32wl
pio_env: ${{ inputs.board }}
pio_target: build
- name: Store binaries as an artifact
uses: actions/upload-artifact@v4
with:
name: firmware-stm32-${{ inputs.board }}-${{ inputs.version }}.zip
overwrite: true
path: |
release/*.hex
release/*.bin
release/*.elf

View File

@ -31,10 +31,16 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32, check] arch: [esp32, esp32s3, esp32c3, esp32c6, nrf52840, rp2040, stm32, check]
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- id: jsonStep - uses: actions/setup-python@v5
with:
python-version: 3.x
cache: pip
- run: pip install -U platformio
- name: Generate matrix
id: jsonStep
run: | run: |
if [[ "$GITHUB_HEAD_REF" == "" ]]; then if [[ "$GITHUB_HEAD_REF" == "" ]]; then
TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}}) TARGETS=$(./bin/generate_ci_matrix.py ${{matrix.arch}})
@ -89,70 +95,77 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.esp32) }} matrix: ${{ fromJson(needs.setup.outputs.esp32) }}
uses: ./.github/workflows/build_esp32.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: esp32
build-esp32-s3: build-esp32s3:
needs: [setup, version] needs: [setup, version]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.esp32s3) }} matrix: ${{ fromJson(needs.setup.outputs.esp32s3) }}
uses: ./.github/workflows/build_esp32_s3.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: esp32s3
build-esp32-c3: build-esp32c3:
needs: [setup, version] needs: [setup, version]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.esp32c3) }} matrix: ${{ fromJson(needs.setup.outputs.esp32c3) }}
uses: ./.github/workflows/build_esp32_c3.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: esp32c3
build-esp32-c6: build-esp32c6:
needs: [setup, version] needs: [setup, version]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.esp32c6) }} matrix: ${{ fromJson(needs.setup.outputs.esp32c6) }}
uses: ./.github/workflows/build_esp32_c6.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: esp32c6
build-nrf52: build-nrf52840:
needs: [setup, version] needs: [setup, version]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.nrf52840) }} matrix: ${{ fromJson(needs.setup.outputs.nrf52840) }}
uses: ./.github/workflows/build_nrf52.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: nrf52840
build-rpi2040: build-rpi2040:
needs: [setup, version] needs: [setup, version]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.rp2040) }} matrix: ${{ fromJson(needs.setup.outputs.rp2040) }}
uses: ./.github/workflows/build_rpi2040.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: rp2040
build-stm32: build-stm32:
needs: [setup, version] needs: [setup, version]
strategy: strategy:
fail-fast: false fail-fast: false
matrix: ${{ fromJson(needs.setup.outputs.stm32) }} matrix: ${{ fromJson(needs.setup.outputs.stm32) }}
uses: ./.github/workflows/build_stm32.yml uses: ./.github/workflows/build_firmware.yml
with: with:
version: ${{ needs.version.outputs.long }} version: ${{ needs.version.outputs.long }}
board: ${{ matrix.board }} pio_env: ${{ matrix.board }}
platform: stm32
build-debian-src: build-debian-src:
if: github.repository == 'meshtastic/firmware' if: github.repository == 'meshtastic/firmware'
@ -236,10 +249,10 @@ jobs:
[ [
version, version,
build-esp32, build-esp32,
build-esp32-s3, build-esp32s3,
build-esp32-c3, build-esp32c3,
build-esp32-c6, build-esp32c6,
build-nrf52, build-nrf52840,
build-rpi2040, build-rpi2040,
build-stm32, build-stm32,
] ]

View File

@ -9,9 +9,9 @@ plugins:
lint: lint:
enabled: enabled:
- checkov@3.2.451 - checkov@3.2.451
- renovate@41.38.1 - renovate@41.40.0
- prettier@3.6.2 - prettier@3.6.2
- trufflehog@3.90.0 - trufflehog@3.90.1
- yamllint@1.37.1 - yamllint@1.37.1
- bandit@1.8.6 - bandit@1.8.6
- trivy@0.64.1 - trivy@0.64.1
@ -28,7 +28,7 @@ lint:
- shellcheck@0.10.0 - shellcheck@0.10.0
- black@25.1.0 - black@25.1.0
- git-diff-check - git-diff-check
- gitleaks@8.27.2 - gitleaks@8.28.0
- clang-format@16.0.3 - clang-format@16.0.3
ignore: ignore:
- linters: [ALL] - linters: [ALL]

View File

@ -2,50 +2,67 @@
"""Generate the CI matrix.""" """Generate the CI matrix."""
import configparser
import json import json
import os
import sys import sys
import random import random
import re
rootdir = "variants/" from platformio.project.config import ProjectConfig
options = sys.argv[1:] options = sys.argv[1:]
outlist = [] outlist = []
if len(options) < 1: if len(options) < 1:
print(json.dumps(outlist)) print(json.dumps(outlist))
exit() exit(1)
for subdir, dirs, files in os.walk(rootdir): cfg = ProjectConfig.get_instance()
for file in files: pio_envs = cfg.envs()
if file == "platformio.ini":
config = configparser.ConfigParser() # Gather all PlatformIO environments for filtering later
config.read(subdir + "/" + file) all_envs = []
for c in config.sections(): for pio_env in pio_envs:
if c.startswith("env:"): env_build_flags = cfg.get(f"env:{pio_env}", 'build_flags')
section = config[c].name[4:] env_platform = None
if "extends" in config[config[c].name]: for flag in env_build_flags:
if options[0] + "_base" in config[config[c].name]["extends"]: # Extract the platform from the build flags
if "board_level" in config[config[c].name]: # Example flag: -I variants/esp32s3/heltec-v3
if ( match = re.search(r"-I\s?variants/([^/]+)", flag)
config[config[c].name]["board_level"] == "extra" if match:
) & ("extra" in options): env_platform = match.group(1)
outlist.append(section) break
else: # Intentionally fail if platform cannot be determined
outlist.append(section) if not env_platform:
# Add the TFT variants if the base variant is selected print(f"Error: Could not determine platform for environment '{pio_env}'")
elif section.replace("-tft", "") in outlist and config[config[c].name].get("board_level") != "extra": exit(1)
outlist.append(section) # Store env details as a dictionary, and add to 'all_envs' list
elif section.replace("-inkhud", "") in outlist and config[config[c].name].get("board_level") != "extra": env = {
outlist.append(section) 'name': pio_env,
if "board_check" in config[config[c].name]: 'platform': env_platform,
if (config[config[c].name]["board_check"] == "true") & ( 'board_level': cfg.get(f"env:{pio_env}", 'board_level', default=None),
"check" in options 'board_check': bool(cfg.get(f"env:{pio_env}", 'board_check', default=False))
): }
outlist.append(section) all_envs.append(env)
if ("quick" in options) & (len(outlist) > 3):
# Filter outputs based on options
# Check is currently mutually exclusive with other options
if "check" in options:
for env in all_envs:
if env['board_check']:
outlist.append(env['name'])
# Filter (non-check) builds by platform
else:
for env in all_envs:
if options[0] == env['platform']:
# If no board level is specified, always include it
if not env['board_level']:
outlist.append(env['name'])
# Include `extra` boards when requested
elif "extra" in options and env['board_level'] == "extra":
outlist.append(env['name'])
# Return as a JSON list
if ("quick" in options) and (len(outlist) > 3):
print(json.dumps(random.sample(outlist, 3))) print(json.dumps(random.sample(outlist, 3)))
else: else:
print(json.dumps(outlist)) print(json.dumps(outlist))

View File

@ -6,7 +6,6 @@ default_envs = tbeam
extra_configs = extra_configs =
arch/*/*.ini arch/*/*.ini
variants/*/platformio.ini ; Remove when all variants migrated to new dir structure
variants/*/*/platformio.ini variants/*/*/platformio.ini
variants/*/diy/*/platformio.ini variants/*/diy/*/platformio.ini
src/graphics/niche/InkHUD/PlatformioConfig.ini src/graphics/niche/InkHUD/PlatformioConfig.ini
@ -111,7 +110,7 @@ lib_deps =
[device-ui_base] [device-ui_base]
lib_deps = lib_deps =
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master # renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
https://github.com/meshtastic/device-ui/archive/86a09a7360f92d10053fbbf8d74f67f85b0ceb09.zip https://github.com/meshtastic/device-ui/archive/c75d545bf9e8d1fe20051c319f427f711113ff22.zip
; Common libs for environmental measurements in telemetry module ; Common libs for environmental measurements in telemetry module
[environmental_base] [environmental_base]

@ -1 +1 @@
Subproject commit fa02e14d8d01850336eaea0e9552aef4f08f0a40 Subproject commit d31cd890d58ffa7e3524e0685a8617bbd181a1c6

View File

@ -20,6 +20,11 @@
#include "meshUtils.h" #include "meshUtils.h"
#include "sleep.h" #include "sleep.h"
#if defined(ARCH_PORTDUINO)
#include "api/WiFiServerAPI.h"
#include "input/LinuxInputImpl.h"
#endif
// Working USB detection for powered/charging states on the RAK platform // Working USB detection for powered/charging states on the RAK platform
#ifdef NRF_APM #ifdef NRF_APM
#include "nrfx_power.h" #include "nrfx_power.h"
@ -690,6 +695,47 @@ bool Power::setup()
return found; return found;
} }
void Power::powerCommandsCheck()
{
if (rebootAtMsec && millis() > rebootAtMsec) {
LOG_INFO("Rebooting");
reboot();
}
if (shutdownAtMsec && millis() > shutdownAtMsec) {
shutdownAtMsec = 0;
shutdown();
}
}
void Power::reboot()
{
notifyReboot.notifyObservers(NULL);
#if defined(ARCH_ESP32)
ESP.restart();
#elif defined(ARCH_NRF52)
NVIC_SystemReset();
#elif defined(ARCH_RP2040)
rp2040.reboot();
#elif defined(ARCH_PORTDUINO)
deInitApiServer();
if (aLinuxInputImpl)
aLinuxInputImpl->deInit();
SPI.end();
Wire.end();
Serial1.end();
if (screen)
delete screen;
LOG_DEBUG("final reboot!");
reboot();
#elif defined(ARCH_STM32WL)
HAL_NVIC_SystemReset();
#else
rebootAtMsec = -1;
LOG_WARN("FIXME implement reboot for this platform. Note that some settings require a restart to be applied");
#endif
}
void Power::shutdown() void Power::shutdown()
{ {

View File

@ -72,7 +72,7 @@ extern Power *power;
static void shutdownEnter() static void shutdownEnter()
{ {
LOG_DEBUG("State: SHUTDOWN"); LOG_DEBUG("State: SHUTDOWN");
power->shutdown(); shutdownAtMsec = millis();
} }
#include "error.h" #include "error.h"

View File

@ -643,8 +643,16 @@ bool GPS::setup()
delay(250); delay(250);
} else if (IS_ONE_OF(gnssModel, GNSS_MODEL_AG3335, GNSS_MODEL_AG3352)) { } else if (IS_ONE_OF(gnssModel, GNSS_MODEL_AG3335, GNSS_MODEL_AG3352)) {
_serial_gps->write("$PAIR066,1,0,1,0,0,1*3B\r\n"); // Enable GPS+GALILEO+NAVIC if (config.lora.region == meshtastic_Config_LoRaConfig_RegionCode_IN ||
config.lora.region == meshtastic_Config_LoRaConfig_RegionCode_NP_865) {
_serial_gps->write("$PAIR066,1,0,1,0,0,1*3B\r\n"); // Enable GPS+GALILEO+NAVIC
// GPS GLONASS GALILEO BDS QZSS NAVIC
// 1 0 1 0 0 1
} else {
_serial_gps->write("$PAIR066,1,1,1,1,0,0*3A\r\n"); // Enable GPS+GLONASS+GALILEO+BDS
// GPS GLONASS GALILEO BDS QZSS NAVIC
// 1 1 1 1 0 0
}
// Configure NMEA (sentences will output once per fix) // Configure NMEA (sentences will output once per fix)
_serial_gps->write("$PAIR062,0,1*3F\r\n"); // GGA ON _serial_gps->write("$PAIR062,0,1*3F\r\n"); // GGA ON
_serial_gps->write("$PAIR062,1,0*3F\r\n"); // GLL OFF _serial_gps->write("$PAIR062,1,0*3F\r\n"); // GLL OFF

View File

@ -51,12 +51,14 @@ void menuHandler::LoraRegionPicker(uint32_t duration)
"PH_915", "PH_915",
"ANZ_433", "ANZ_433",
"KZ_433", "KZ_433",
"KZ_863"}; "KZ_863",
"NP_865",
"BR_902"};
BannerOverlayOptions bannerOptions; BannerOverlayOptions bannerOptions;
bannerOptions.message = "Set the LoRa region"; bannerOptions.message = "Set the LoRa region";
bannerOptions.durationMs = duration; bannerOptions.durationMs = duration;
bannerOptions.optionsArrayPtr = optionsArray; bannerOptions.optionsArrayPtr = optionsArray;
bannerOptions.optionsCount = 25; bannerOptions.optionsCount = 27;
bannerOptions.InitialSelected = 0; bannerOptions.InitialSelected = 0;
bannerOptions.bannerCallback = [](int selected) -> void { bannerOptions.bannerCallback = [](int selected) -> void {
if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) { if (selected != 0 && config.lora.region != _meshtastic_Config_LoRaConfig_RegionCode(selected)) {

View File

@ -223,7 +223,7 @@ void InkHUD::MenuApplet::execute(MenuItem item)
case SHUTDOWN: case SHUTDOWN:
LOG_INFO("Shutting down from menu"); LOG_INFO("Shutting down from menu");
power->shutdown(); shutdownAtMsec = millis();
// Menu is then sent to background via onShutdown // Menu is then sent to background via onShutdown
break; break;

View File

@ -199,7 +199,7 @@ void ExpressLRSFiveWay::sendKey(input_broker_event key)
void ExpressLRSFiveWay::toggleGPS() void ExpressLRSFiveWay::toggleGPS()
{ {
#if HAS_GPS && !MESHTASTIC_EXCLUDE_GPS #if HAS_GPS && !MESHTASTIC_EXCLUDE_GPS
if (!config.device.disable_triple_click && (gps != nullptr)) { if (gps != nullptr) {
gps->toggleGpsMode(); gps->toggleGpsMode();
screen->startAlert("GPS Toggled"); screen->startAlert("GPS Toggled");
alerting = true; alerting = true;

View File

@ -33,7 +33,6 @@
#include "mesh/generated/meshtastic/config.pb.h" #include "mesh/generated/meshtastic/config.pb.h"
#include "meshUtils.h" #include "meshUtils.h"
#include "modules/Modules.h" #include "modules/Modules.h"
#include "shutdown.h"
#include "sleep.h" #include "sleep.h"
#include "target_specific.h" #include "target_specific.h"
#include <memory> #include <memory>
@ -1530,7 +1529,7 @@ void loop()
#ifdef ARCH_NRF52 #ifdef ARCH_NRF52
nrf52Loop(); nrf52Loop();
#endif #endif
powerCommandsCheck(); power->powerCommandsCheck();
#ifdef DEBUG_STACK #ifdef DEBUG_STACK
static uint32_t lastPrint = 0; static uint32_t lastPrint = 0;

View File

@ -628,11 +628,6 @@ void NodeDB::installDefaultConfig(bool preserveKey = false)
#ifdef PIN_GPS_EN #ifdef PIN_GPS_EN
config.position.gps_en_gpio = PIN_GPS_EN; config.position.gps_en_gpio = PIN_GPS_EN;
#endif #endif
#ifdef GPS_POWER_TOGGLE
config.device.disable_triple_click = false;
#else
config.device.disable_triple_click = true;
#endif
#if defined(USERPREFS_CONFIG_GPS_MODE) #if defined(USERPREFS_CONFIG_GPS_MODE)
config.position.gps_mode = USERPREFS_CONFIG_GPS_MODE; config.position.gps_mode = USERPREFS_CONFIG_GPS_MODE;
#elif !HAS_GPS || GPS_DEFAULT_NOT_PRESENT #elif !HAS_GPS || GPS_DEFAULT_NOT_PRESENT

View File

@ -67,6 +67,7 @@ const RegionInfo regions[] = {
/* /*
https://www.iot.org.au/wp/wp-content/uploads/2016/12/IoTSpectrumFactSheet.pdf https://www.iot.org.au/wp/wp-content/uploads/2016/12/IoTSpectrumFactSheet.pdf
https://iotalliance.org.nz/wp-content/uploads/sites/4/2019/05/IoT-Spectrum-in-NZ-Briefing-Paper.pdf https://iotalliance.org.nz/wp-content/uploads/sites/4/2019/05/IoT-Spectrum-in-NZ-Briefing-Paper.pdf
Also used in Brazil.
*/ */
RDEF(ANZ, 915.0f, 928.0f, 100, 0, 30, true, false, false), RDEF(ANZ, 915.0f, 928.0f, 100, 0, 30, true, false, false),
@ -169,6 +170,21 @@ const RegionInfo regions[] = {
*/ */
RDEF(KZ_433, 433.075f, 434.775f, 100, 0, 10, true, false, false), RDEF(KZ_863, 863.0f, 868.0f, 100, 0, 30, true, false, true), RDEF(KZ_433, 433.075f, 434.775f, 100, 0, 10, true, false, false), RDEF(KZ_863, 863.0f, 868.0f, 100, 0, 30, true, false, true),
/*
Nepal
865MHz to 868MHz frequency band for IoT (Internet of Things), M2M (Machine-to-Machine), and smart metering use, specifically in non-cellular mode.
https://www.nta.gov.np/uploads/contents/Radio-Frequency-Policy-2080-English.pdf
*/
RDEF(NP_865, 865.0f, 868.0f, 100, 0, 30, true, false, false),
/*
Brazil
902 - 907.5 MHz , 1W power limit, no duty cycle restrictions
https://github.com/meshtastic/firmware/issues/3741
*/
RDEF(BR_902, 902.0f, 907.5f, 100, 0, 30, true, false, false),
/* /*
2.4 GHZ WLAN Band equivalent. Only for SX128x chips. 2.4 GHZ WLAN Band equivalent. Only for SX128x chips.
*/ */

View File

@ -362,7 +362,7 @@ extern const pb_msgdesc_t meshtastic_BackupPreferences_msg;
#define MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_MAX_SIZE meshtastic_BackupPreferences_size #define MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_MAX_SIZE meshtastic_BackupPreferences_size
#define meshtastic_BackupPreferences_size 2271 #define meshtastic_BackupPreferences_size 2271
#define meshtastic_ChannelFile_size 718 #define meshtastic_ChannelFile_size 718
#define meshtastic_DeviceState_size 1722 #define meshtastic_DeviceState_size 1724
#define meshtastic_NodeInfoLite_size 196 #define meshtastic_NodeInfoLite_size 196
#define meshtastic_PositionLite_size 28 #define meshtastic_PositionLite_size 28
#define meshtastic_UserLite_size 98 #define meshtastic_UserLite_size 98

View File

@ -117,6 +117,8 @@ PB_BIND(meshtastic_ChunkedPayloadResponse, meshtastic_ChunkedPayloadResponse, AU

View File

@ -325,6 +325,25 @@ typedef enum _meshtastic_CriticalErrorCode {
meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE = 13 meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE = 13
} meshtastic_CriticalErrorCode; } meshtastic_CriticalErrorCode;
/* Enum to indicate to clients whether this firmware is a special firmware build, like an event.
The first 16 values are reserved for non-event special firmwares, like the Smart Citizen use case. */
typedef enum _meshtastic_FirmwareEdition {
/* Vanilla firmware */
meshtastic_FirmwareEdition_VANILLA = 0,
/* Firmware for use in the Smart Citizen environmental monitoring network */
meshtastic_FirmwareEdition_SMART_CITIZEN = 1,
/* Open Sauce, the maker conference held yearly in CA */
meshtastic_FirmwareEdition_OPEN_SAUCE = 16,
/* DEFCON, the yearly hacker conference */
meshtastic_FirmwareEdition_DEFCON = 17,
/* Burning Man, the yearly hippie gathering in the desert */
meshtastic_FirmwareEdition_BURNING_MAN = 18,
/* Hamvention, the Dayton amateur radio convention */
meshtastic_FirmwareEdition_HAMVENTION = 19,
/* Placeholder for DIY and unofficial events */
meshtastic_FirmwareEdition_DIY_EDITION = 127
} meshtastic_FirmwareEdition;
/* Enum for modules excluded from a device's configuration. /* Enum for modules excluded from a device's configuration.
Each value represents a ModuleConfigType that can be toggled as excluded Each value represents a ModuleConfigType that can be toggled as excluded
by setting its corresponding bit in the `excluded_modules` bitmask field. */ by setting its corresponding bit in the `excluded_modules` bitmask field. */
@ -914,6 +933,8 @@ typedef struct _meshtastic_MyNodeInfo {
meshtastic_MyNodeInfo_device_id_t device_id; meshtastic_MyNodeInfo_device_id_t device_id;
/* The PlatformIO environment used to build this firmware */ /* The PlatformIO environment used to build this firmware */
char pio_env[40]; char pio_env[40];
/* The indicator for whether this device is running event firmware and which */
meshtastic_FirmwareEdition firmware_edition;
} meshtastic_MyNodeInfo; } meshtastic_MyNodeInfo;
/* Debug output from the device. /* Debug output from the device.
@ -1212,6 +1233,10 @@ extern "C" {
#define _meshtastic_CriticalErrorCode_MAX meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE #define _meshtastic_CriticalErrorCode_MAX meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE
#define _meshtastic_CriticalErrorCode_ARRAYSIZE ((meshtastic_CriticalErrorCode)(meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE+1)) #define _meshtastic_CriticalErrorCode_ARRAYSIZE ((meshtastic_CriticalErrorCode)(meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE+1))
#define _meshtastic_FirmwareEdition_MIN meshtastic_FirmwareEdition_VANILLA
#define _meshtastic_FirmwareEdition_MAX meshtastic_FirmwareEdition_DIY_EDITION
#define _meshtastic_FirmwareEdition_ARRAYSIZE ((meshtastic_FirmwareEdition)(meshtastic_FirmwareEdition_DIY_EDITION+1))
#define _meshtastic_ExcludedModules_MIN meshtastic_ExcludedModules_EXCLUDED_NONE #define _meshtastic_ExcludedModules_MIN meshtastic_ExcludedModules_EXCLUDED_NONE
#define _meshtastic_ExcludedModules_MAX meshtastic_ExcludedModules_NETWORK_CONFIG #define _meshtastic_ExcludedModules_MAX meshtastic_ExcludedModules_NETWORK_CONFIG
#define _meshtastic_ExcludedModules_ARRAYSIZE ((meshtastic_ExcludedModules)(meshtastic_ExcludedModules_NETWORK_CONFIG+1)) #define _meshtastic_ExcludedModules_ARRAYSIZE ((meshtastic_ExcludedModules)(meshtastic_ExcludedModules_NETWORK_CONFIG+1))
@ -1258,6 +1283,7 @@ extern "C" {
#define meshtastic_MeshPacket_delayed_ENUMTYPE meshtastic_MeshPacket_Delayed #define meshtastic_MeshPacket_delayed_ENUMTYPE meshtastic_MeshPacket_Delayed
#define meshtastic_MyNodeInfo_firmware_edition_ENUMTYPE meshtastic_FirmwareEdition
#define meshtastic_LogRecord_level_ENUMTYPE meshtastic_LogRecord_Level #define meshtastic_LogRecord_level_ENUMTYPE meshtastic_LogRecord_Level
@ -1296,7 +1322,7 @@ extern "C" {
#define meshtastic_MqttClientProxyMessage_init_default {"", 0, {{0, {0}}}, 0} #define meshtastic_MqttClientProxyMessage_init_default {"", 0, {{0, {0}}}, 0}
#define meshtastic_MeshPacket_init_default {0, 0, 0, 0, {meshtastic_Data_init_default}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0} #define meshtastic_MeshPacket_init_default {0, 0, 0, 0, {meshtastic_Data_init_default}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0}
#define meshtastic_NodeInfo_init_default {0, false, meshtastic_User_init_default, false, meshtastic_Position_init_default, 0, 0, false, meshtastic_DeviceMetrics_init_default, 0, 0, false, 0, 0, 0, 0} #define meshtastic_NodeInfo_init_default {0, false, meshtastic_User_init_default, false, meshtastic_Position_init_default, 0, 0, false, meshtastic_DeviceMetrics_init_default, 0, 0, false, 0, 0, 0, 0}
#define meshtastic_MyNodeInfo_init_default {0, 0, 0, {0, {0}}, ""} #define meshtastic_MyNodeInfo_init_default {0, 0, 0, {0, {0}}, "", _meshtastic_FirmwareEdition_MIN}
#define meshtastic_LogRecord_init_default {"", 0, "", _meshtastic_LogRecord_Level_MIN} #define meshtastic_LogRecord_init_default {"", 0, "", _meshtastic_LogRecord_Level_MIN}
#define meshtastic_QueueStatus_init_default {0, 0, 0, 0} #define meshtastic_QueueStatus_init_default {0, 0, 0, 0}
#define meshtastic_FromRadio_init_default {0, 0, {meshtastic_MeshPacket_init_default}} #define meshtastic_FromRadio_init_default {0, 0, {meshtastic_MeshPacket_init_default}}
@ -1327,7 +1353,7 @@ extern "C" {
#define meshtastic_MqttClientProxyMessage_init_zero {"", 0, {{0, {0}}}, 0} #define meshtastic_MqttClientProxyMessage_init_zero {"", 0, {{0, {0}}}, 0}
#define meshtastic_MeshPacket_init_zero {0, 0, 0, 0, {meshtastic_Data_init_zero}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0} #define meshtastic_MeshPacket_init_zero {0, 0, 0, 0, {meshtastic_Data_init_zero}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0}
#define meshtastic_NodeInfo_init_zero {0, false, meshtastic_User_init_zero, false, meshtastic_Position_init_zero, 0, 0, false, meshtastic_DeviceMetrics_init_zero, 0, 0, false, 0, 0, 0, 0} #define meshtastic_NodeInfo_init_zero {0, false, meshtastic_User_init_zero, false, meshtastic_Position_init_zero, 0, 0, false, meshtastic_DeviceMetrics_init_zero, 0, 0, false, 0, 0, 0, 0}
#define meshtastic_MyNodeInfo_init_zero {0, 0, 0, {0, {0}}, ""} #define meshtastic_MyNodeInfo_init_zero {0, 0, 0, {0, {0}}, "", _meshtastic_FirmwareEdition_MIN}
#define meshtastic_LogRecord_init_zero {"", 0, "", _meshtastic_LogRecord_Level_MIN} #define meshtastic_LogRecord_init_zero {"", 0, "", _meshtastic_LogRecord_Level_MIN}
#define meshtastic_QueueStatus_init_zero {0, 0, 0, 0} #define meshtastic_QueueStatus_init_zero {0, 0, 0, 0}
#define meshtastic_FromRadio_init_zero {0, 0, {meshtastic_MeshPacket_init_zero}} #define meshtastic_FromRadio_init_zero {0, 0, {meshtastic_MeshPacket_init_zero}}
@ -1450,6 +1476,7 @@ extern "C" {
#define meshtastic_MyNodeInfo_min_app_version_tag 11 #define meshtastic_MyNodeInfo_min_app_version_tag 11
#define meshtastic_MyNodeInfo_device_id_tag 12 #define meshtastic_MyNodeInfo_device_id_tag 12
#define meshtastic_MyNodeInfo_pio_env_tag 13 #define meshtastic_MyNodeInfo_pio_env_tag 13
#define meshtastic_MyNodeInfo_firmware_edition_tag 14
#define meshtastic_LogRecord_message_tag 1 #define meshtastic_LogRecord_message_tag 1
#define meshtastic_LogRecord_time_tag 2 #define meshtastic_LogRecord_time_tag 2
#define meshtastic_LogRecord_source_tag 3 #define meshtastic_LogRecord_source_tag 3
@ -1682,7 +1709,8 @@ X(a, STATIC, SINGULAR, UINT32, my_node_num, 1) \
X(a, STATIC, SINGULAR, UINT32, reboot_count, 8) \ X(a, STATIC, SINGULAR, UINT32, reboot_count, 8) \
X(a, STATIC, SINGULAR, UINT32, min_app_version, 11) \ X(a, STATIC, SINGULAR, UINT32, min_app_version, 11) \
X(a, STATIC, SINGULAR, BYTES, device_id, 12) \ X(a, STATIC, SINGULAR, BYTES, device_id, 12) \
X(a, STATIC, SINGULAR, STRING, pio_env, 13) X(a, STATIC, SINGULAR, STRING, pio_env, 13) \
X(a, STATIC, SINGULAR, UENUM, firmware_edition, 14)
#define meshtastic_MyNodeInfo_CALLBACK NULL #define meshtastic_MyNodeInfo_CALLBACK NULL
#define meshtastic_MyNodeInfo_DEFAULT NULL #define meshtastic_MyNodeInfo_DEFAULT NULL
@ -1965,7 +1993,7 @@ extern const pb_msgdesc_t meshtastic_ChunkedPayloadResponse_msg;
#define meshtastic_LowEntropyKey_size 0 #define meshtastic_LowEntropyKey_size 0
#define meshtastic_MeshPacket_size 378 #define meshtastic_MeshPacket_size 378
#define meshtastic_MqttClientProxyMessage_size 501 #define meshtastic_MqttClientProxyMessage_size 501
#define meshtastic_MyNodeInfo_size 77 #define meshtastic_MyNodeInfo_size 79
#define meshtastic_NeighborInfo_size 258 #define meshtastic_NeighborInfo_size 258
#define meshtastic_Neighbor_size 22 #define meshtastic_Neighbor_size 22
#define meshtastic_NodeInfo_size 323 #define meshtastic_NodeInfo_size 323

View File

@ -596,7 +596,6 @@ void AdminModule::handleSetConfig(const meshtastic_Config &c)
if (config.device.button_gpio == c.payload_variant.device.button_gpio && if (config.device.button_gpio == c.payload_variant.device.button_gpio &&
config.device.buzzer_gpio == c.payload_variant.device.buzzer_gpio && config.device.buzzer_gpio == c.payload_variant.device.buzzer_gpio &&
config.device.role == c.payload_variant.device.role && config.device.role == c.payload_variant.device.role &&
config.device.disable_triple_click == c.payload_variant.device.disable_triple_click &&
config.device.rebroadcast_mode == c.payload_variant.device.rebroadcast_mode) { config.device.rebroadcast_mode == c.payload_variant.device.rebroadcast_mode) {
requiresReboot = false; requiresReboot = false;
} }

View File

@ -56,6 +56,7 @@ CannedMessageModule::CannedMessageModule()
disable(); disable();
} else { } else {
LOG_INFO("CannedMessageModule is enabled"); LOG_INFO("CannedMessageModule is enabled");
moduleConfig.canned_message.enabled = true;
this->inputObserver.observe(inputBroker); this->inputObserver.observe(inputBroker);
} }
} }
@ -2075,6 +2076,9 @@ void CannedMessageModule::handleSetCannedMessageModuleMessages(const char *from_
if (changed) { if (changed) {
this->saveProtoForModule(); this->saveProtoForModule();
if (splitConfiguredMessages()) {
moduleConfig.canned_message.enabled = true;
}
} }
} }

View File

@ -34,6 +34,7 @@ Ch341Hal *ch341Hal = nullptr;
char *configPath = nullptr; char *configPath = nullptr;
char *optionMac = nullptr; char *optionMac = nullptr;
bool forceSimulated = false; bool forceSimulated = false;
bool verboseEnabled = false;
const char *argp_program_version = optstr(APP_VERSION); const char *argp_program_version = optstr(APP_VERSION);
@ -70,7 +71,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state)
case 'h': case 'h':
optionMac = arg; optionMac = arg;
break; break;
case 'v':
verboseEnabled = true;
break;
case ARGP_KEY_ARG: case ARGP_KEY_ARG:
return 0; return 0;
default: default:
@ -85,6 +88,7 @@ void portduinoCustomInit()
{"config", 'c', "CONFIG_PATH", 0, "Full path of the .yaml config file to use."}, {"config", 'c', "CONFIG_PATH", 0, "Full path of the .yaml config file to use."},
{"hwid", 'h', "HWID", 0, "The mac address to assign to this virtual machine"}, {"hwid", 'h', "HWID", 0, "The mac address to assign to this virtual machine"},
{"sim", 's', 0, 0, "Run in Simulated radio mode"}, {"sim", 's', 0, 0, "Run in Simulated radio mode"},
{"verbose", 'v', 0, 0, "Set log level to full debug"},
{0}}; {0}};
static void *childArguments; static void *childArguments;
static char doc[] = "Meshtastic native build."; static char doc[] = "Meshtastic native build.";
@ -417,6 +421,9 @@ void portduinoSetup()
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
if (verboseEnabled && settingsMap[logoutputlevel] != level_trace) {
settingsMap[logoutputlevel] = level_debug;
}
return; return;
} }

View File

@ -110,7 +110,7 @@ class Power : private concurrency::OSThread
Power(); Power();
void shutdown(); void powerCommandsCheck();
void readPowerStatus(); void readPowerStatus();
virtual bool setup(); virtual bool setup();
virtual int32_t runOnce() override; virtual int32_t runOnce() override;
@ -130,6 +130,8 @@ class Power : private concurrency::OSThread
bool lipoChargerInit(); bool lipoChargerInit();
private: private:
void shutdown();
void reboot();
// open circuit voltage lookup table // open circuit voltage lookup table
uint8_t low_voltage_counter; uint8_t low_voltage_counter;
#ifdef DEBUG_HEAP #ifdef DEBUG_HEAP

View File

@ -1,47 +0,0 @@
#include "buzz.h"
#include "configuration.h"
#include "graphics/Screen.h"
#include "main.h"
#include "power.h"
#include "sleep.h"
#if defined(ARCH_PORTDUINO)
#include "api/WiFiServerAPI.h"
#include "input/LinuxInputImpl.h"
#endif
void powerCommandsCheck()
{
if (rebootAtMsec && millis() > rebootAtMsec) {
LOG_INFO("Rebooting");
notifyReboot.notifyObservers(NULL);
#if defined(ARCH_ESP32)
ESP.restart();
#elif defined(ARCH_NRF52)
NVIC_SystemReset();
#elif defined(ARCH_RP2040)
rp2040.reboot();
#elif defined(ARCH_PORTDUINO)
deInitApiServer();
if (aLinuxInputImpl)
aLinuxInputImpl->deInit();
SPI.end();
Wire.end();
Serial1.end();
if (screen)
delete screen;
LOG_DEBUG("final reboot!");
reboot();
#elif defined(ARCH_STM32WL)
HAL_NVIC_SystemReset();
#else
rebootAtMsec = -1;
LOG_WARN("FIXME implement reboot for this platform. Note that some settings require a restart to be applied");
#endif
}
if (shutdownAtMsec && millis() > shutdownAtMsec) {
shutdownAtMsec = 0;
power->shutdown();
}
}

View File

@ -4,6 +4,6 @@ board = esp32-c6-devkitm-1
build_flags = build_flags =
${esp32c6_base.build_flags} ${esp32c6_base.build_flags}
-D TLORA_C6 -D TLORA_C6
-I variants/tlora_c6 -I variants/esp32c6/tlora_c6
-DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1

View File

@ -45,7 +45,7 @@ build_flags = ${esp32s3_base.build_flags}
-D LGFX_TOUCH_INT=41 -D LGFX_TOUCH_INT=41
-D VIEW_320x240 -D VIEW_320x240
-D USE_PACKET_API -D USE_PACKET_API
-I variants/mesh-tab -I variants/esp32s3/mesh-tab
build_src_filter = ${esp32_base.build_src_filter} build_src_filter = ${esp32_base.build_src_filter}
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32_base.lib_deps}

View File

@ -2,7 +2,7 @@
extends = portduino_base extends = portduino_base
; Optional libraries should be appended to `PLATFORMIO_BUILD_FLAGS` ; Optional libraries should be appended to `PLATFORMIO_BUILD_FLAGS`
; environment variable in the buildroot environment. ; environment variable in the buildroot environment.
build_flags = ${portduino_base.build_flags} -O0 -I variants/portduino-buildroot build_flags = ${portduino_base.build_flags} -O0 -I variants/native/portduino-buildroot
board = buildroot board = buildroot
lib_deps = ${portduino_base.lib_deps} lib_deps = ${portduino_base.lib_deps}
build_src_filter = ${portduino_base.build_src_filter} build_src_filter = ${portduino_base.build_src_filter}

View File

@ -1,6 +1,6 @@
[native_base] [native_base]
extends = portduino_base extends = portduino_base
build_flags = ${portduino_base.build_flags} -I variants/portduino build_flags = ${portduino_base.build_flags} -I variants/native/portduino
-D ARCH_PORTDUINO -D ARCH_PORTDUINO
-I /usr/include -I /usr/include
board = cross_platform board = cross_platform