mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-19 00:07:38 +00:00
Compare commits
2 Commits
buzzer-fix
...
merge-mast
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
66cb549817 | ||
|
|
c351c49a72 |
2
.github/workflows/first_time_contributor.yml
vendored
2
.github/workflows/first_time_contributor.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
### @{fc-author}, Welcome to Meshtastic! :wave:
|
### @{fc-author}, Welcome to Meshtastic! :wave:
|
||||||
|
|
||||||
Thanks for opening your first issue. If it's helpful, an easy way
|
Thanks for opening your first issue. If it's helpful, an easy way
|
||||||
to get logs is the "Open Serial Monitor" button on the [Web Flasher](https://flasher.meshtastic.org).
|
to get logs is the "Open Serial Monitor" button on the (Web Flasher](https://flasher.meshtastic.org).
|
||||||
|
|
||||||
If you have ideas for features, note that we often debate big ideas
|
If you have ideas for features, note that we often debate big ideas
|
||||||
in the [discussions tab](https://github.com/meshtastic/firmware/discussions/categories/ideas)
|
in the [discussions tab](https://github.com/meshtastic/firmware/discussions/categories/ideas)
|
||||||
|
|||||||
4
.github/workflows/main_matrix.yml
vendored
4
.github/workflows/main_matrix.yml
vendored
@@ -8,9 +8,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- develop
|
- develop
|
||||||
- pioarduino # Remove when merged // use `feature/` in the future.
|
|
||||||
- event/*
|
- event/*
|
||||||
- feature/*
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- "**.md"
|
- "**.md"
|
||||||
- version.properties
|
- version.properties
|
||||||
@@ -20,9 +18,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
- develop
|
- develop
|
||||||
- pioarduino # Remove when merged // use `feature/` in the future.
|
|
||||||
- event/*
|
- event/*
|
||||||
- feature/*
|
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- "**.md"
|
- "**.md"
|
||||||
#- "**.yml"
|
#- "**.yml"
|
||||||
|
|||||||
2
.github/workflows/test_native.yml
vendored
2
.github/workflows/test_native.yml
vendored
@@ -143,7 +143,7 @@ jobs:
|
|||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Test Report
|
- name: Test Report
|
||||||
uses: dorny/test-reporter@v2.4.0
|
uses: dorny/test-reporter@v2.3.0
|
||||||
with:
|
with:
|
||||||
name: PlatformIO Tests
|
name: PlatformIO Tests
|
||||||
path: testreport.xml
|
path: testreport.xml
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
| Firmware Version | Supported |
|
| Firmware Version | Supported |
|
||||||
| ---------------- | ------------------ |
|
| ---------------- | ------------------ |
|
||||||
| 2.7.x | :white_check_mark: |
|
| 2.6.x | :white_check_mark: |
|
||||||
| <= 2.6.x | :x: |
|
| <= 2.5.x | :x: |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
|||||||
@@ -38,4 +38,4 @@ cp bin/device-install.* $OUTDIR/
|
|||||||
cp bin/device-update.* $OUTDIR/
|
cp bin/device-update.* $OUTDIR/
|
||||||
|
|
||||||
echo "Copying manifest"
|
echo "Copying manifest"
|
||||||
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json || true
|
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json
|
||||||
|
|||||||
@@ -49,4 +49,4 @@ if (echo $1 | grep -q "rak4631"); then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Copying manifest"
|
echo "Copying manifest"
|
||||||
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json || true
|
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json
|
||||||
|
|||||||
@@ -30,4 +30,4 @@ echo "Copying uf2 file"
|
|||||||
cp $BUILDDIR/$basename.uf2 $OUTDIR/$basename.uf2
|
cp $BUILDDIR/$basename.uf2 $OUTDIR/$basename.uf2
|
||||||
|
|
||||||
echo "Copying manifest"
|
echo "Copying manifest"
|
||||||
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json || true
|
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json
|
||||||
|
|||||||
@@ -30,4 +30,4 @@ echo "Copying STM32 bin file"
|
|||||||
cp $BUILDDIR/$basename.bin $OUTDIR/$basename.bin
|
cp $BUILDDIR/$basename.bin $OUTDIR/$basename.bin
|
||||||
|
|
||||||
echo "Copying manifest"
|
echo "Copying manifest"
|
||||||
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json || true
|
cp $BUILDDIR/$basename.mt.json $OUTDIR/$basename.mt.json
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
Lora:
|
|
||||||
Module: sx1262
|
|
||||||
CS: 0
|
|
||||||
IRQ: 6
|
|
||||||
Reset: 2
|
|
||||||
Busy: 4
|
|
||||||
RXen: 1
|
|
||||||
DIO2_AS_RF_SWITCH: true
|
|
||||||
spidev: ch341
|
|
||||||
DIO3_TCXO_VOLTAGE: true
|
|
||||||
# USB_Serialnum: 12345678
|
|
||||||
USB_PID: 0x5512
|
|
||||||
USB_VID: 0x1A86
|
|
||||||
SX126X_MAX_POWER: 22
|
|
||||||
@@ -87,9 +87,6 @@
|
|||||||
</screenshots>
|
</screenshots>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
<release version="2.7.18" date="2026-01-02">
|
|
||||||
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.18</url>
|
|
||||||
</release>
|
|
||||||
<release version="2.7.17" date="2025-11-28">
|
<release version="2.7.17" date="2025-11-28">
|
||||||
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.17</url>
|
<url type="details">https://github.com/meshtastic/firmware/releases?q=tag%3Av2.7.17</url>
|
||||||
</release>
|
</release>
|
||||||
|
|||||||
@@ -2,12 +2,11 @@
|
|||||||
# trunk-ignore-all(ruff/F821)
|
# trunk-ignore-all(ruff/F821)
|
||||||
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
# trunk-ignore-all(flake8/F821): For SConstruct imports
|
||||||
import sys
|
import sys
|
||||||
from os.path import join
|
from os.path import join, basename, isfile
|
||||||
import subprocess
|
import subprocess
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Dict
|
|
||||||
|
|
||||||
from readprops import readProps
|
from readprops import readProps
|
||||||
|
|
||||||
@@ -15,47 +14,8 @@ Import("env")
|
|||||||
platform = env.PioPlatform()
|
platform = env.PioPlatform()
|
||||||
progname = env.get("PROGNAME")
|
progname = env.get("PROGNAME")
|
||||||
lfsbin = f"{progname.replace('firmware-', 'littlefs-')}.bin"
|
lfsbin = f"{progname.replace('firmware-', 'littlefs-')}.bin"
|
||||||
manifest_ran = False
|
|
||||||
|
|
||||||
def infer_architecture(board_cfg):
|
|
||||||
try:
|
|
||||||
mcu = board_cfg.get("build.mcu") if board_cfg else None
|
|
||||||
except KeyError:
|
|
||||||
mcu = None
|
|
||||||
except Exception:
|
|
||||||
mcu = None
|
|
||||||
if not mcu:
|
|
||||||
return None
|
|
||||||
mcu_l = str(mcu).lower()
|
|
||||||
if "esp32s3" in mcu_l:
|
|
||||||
return "esp32-s3"
|
|
||||||
if "esp32c6" in mcu_l:
|
|
||||||
return "esp32-c6"
|
|
||||||
if "esp32c3" in mcu_l:
|
|
||||||
return "esp32-c3"
|
|
||||||
if "esp32" in mcu_l:
|
|
||||||
return "esp32"
|
|
||||||
if "rp2040" in mcu_l:
|
|
||||||
return "rp2040"
|
|
||||||
if "rp2350" in mcu_l:
|
|
||||||
return "rp2350"
|
|
||||||
if "nrf52" in mcu_l or "nrf52840" in mcu_l:
|
|
||||||
return "nrf52840"
|
|
||||||
if "stm32" in mcu_l:
|
|
||||||
return "stm32"
|
|
||||||
return None
|
|
||||||
|
|
||||||
def manifest_gather(source, target, env):
|
def manifest_gather(source, target, env):
|
||||||
global manifest_ran
|
|
||||||
if manifest_ran:
|
|
||||||
return
|
|
||||||
# Skip manifest generation if we cannot determine architecture (host/native builds)
|
|
||||||
board_arch = infer_architecture(env.BoardConfig())
|
|
||||||
if not board_arch:
|
|
||||||
print(f"Skipping mtjson generation for unknown architecture (env={env.get('PIOENV')})")
|
|
||||||
manifest_ran = True
|
|
||||||
return
|
|
||||||
manifest_ran = True
|
|
||||||
out = []
|
out = []
|
||||||
board_platform = env.BoardConfig().get("platform")
|
board_platform = env.BoardConfig().get("platform")
|
||||||
needs_ota_suffix = board_platform == "nordicnrf52"
|
needs_ota_suffix = board_platform == "nordicnrf52"
|
||||||
@@ -87,39 +47,14 @@ def manifest_gather(source, target, env):
|
|||||||
manifest_write(out, env)
|
manifest_write(out, env)
|
||||||
|
|
||||||
def manifest_write(files, env):
|
def manifest_write(files, env):
|
||||||
# Defensive: also skip manifest writing if we cannot determine architecture
|
|
||||||
def get_project_option(name):
|
|
||||||
try:
|
|
||||||
return env.GetProjectOption(name)
|
|
||||||
except Exception:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_project_option_any(names):
|
|
||||||
for name in names:
|
|
||||||
val = get_project_option(name)
|
|
||||||
if val is not None:
|
|
||||||
return val
|
|
||||||
return None
|
|
||||||
|
|
||||||
def as_bool(val):
|
|
||||||
return str(val).strip().lower() in ("1", "true", "yes", "on")
|
|
||||||
|
|
||||||
def as_int(val):
|
|
||||||
try:
|
|
||||||
return int(str(val), 10)
|
|
||||||
except (TypeError, ValueError):
|
|
||||||
return None
|
|
||||||
|
|
||||||
def as_list(val):
|
|
||||||
return [item.strip() for item in str(val).split(",") if item.strip()]
|
|
||||||
|
|
||||||
manifest = {
|
manifest = {
|
||||||
"version": verObj["long"],
|
"version": verObj["long"],
|
||||||
"build_epoch": build_epoch,
|
"build_epoch": build_epoch,
|
||||||
"platformioTarget": env.get("PIOENV"),
|
"board": env.get("PIOENV"),
|
||||||
"mcu": env.get("BOARD_MCU"),
|
"mcu": env.get("BOARD_MCU"),
|
||||||
"repo": repo_owner,
|
"repo": repo_owner,
|
||||||
"files": files,
|
"files": files,
|
||||||
|
"part": None,
|
||||||
"has_mui": False,
|
"has_mui": False,
|
||||||
"has_inkhud": False,
|
"has_inkhud": False,
|
||||||
}
|
}
|
||||||
@@ -134,51 +69,6 @@ def manifest_write(files, env):
|
|||||||
if "MESHTASTIC_INCLUDE_INKHUD" in env.get("CPPDEFINES", []):
|
if "MESHTASTIC_INCLUDE_INKHUD" in env.get("CPPDEFINES", []):
|
||||||
manifest["has_inkhud"] = True
|
manifest["has_inkhud"] = True
|
||||||
|
|
||||||
pioenv = env.get("PIOENV")
|
|
||||||
device_meta = {}
|
|
||||||
device_meta_fields = [
|
|
||||||
("hwModel", ["custom_meshtastic_hw_model"], as_int),
|
|
||||||
("hwModelSlug", ["custom_meshtastic_hw_model_slug"], str),
|
|
||||||
("architecture", ["custom_meshtastic_architecture"], str),
|
|
||||||
("activelySupported", ["custom_meshtastic_actively_supported"], as_bool),
|
|
||||||
("displayName", ["custom_meshtastic_display_name"], str),
|
|
||||||
("supportLevel", ["custom_meshtastic_support_level"], as_int),
|
|
||||||
("images", ["custom_meshtastic_images"], as_list),
|
|
||||||
("tags", ["custom_meshtastic_tags"], as_list),
|
|
||||||
("requiresDfu", ["custom_meshtastic_requires_dfu"], as_bool),
|
|
||||||
("partitionScheme", ["custom_meshtastic_partition_scheme"], str),
|
|
||||||
("url", ["custom_meshtastic_url"], str),
|
|
||||||
("key", ["custom_meshtastic_key"], str),
|
|
||||||
("variant", ["custom_meshtastic_variant"], str),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
for manifest_key, option_keys, caster in device_meta_fields:
|
|
||||||
raw_val = get_project_option_any(option_keys)
|
|
||||||
if raw_val is None:
|
|
||||||
continue
|
|
||||||
parsed = caster(raw_val) if callable(caster) else raw_val
|
|
||||||
if parsed is not None and parsed != "":
|
|
||||||
device_meta[manifest_key] = parsed
|
|
||||||
|
|
||||||
# Determine architecture once; if we can't infer it, skip manifest generation
|
|
||||||
board_arch = device_meta.get("architecture") or infer_architecture(env.BoardConfig())
|
|
||||||
if not board_arch:
|
|
||||||
print(f"Skipping mtjson write for unknown architecture (env={env.get('PIOENV')})")
|
|
||||||
return
|
|
||||||
|
|
||||||
device_meta["architecture"] = board_arch
|
|
||||||
|
|
||||||
# Always set requiresDfu: true for nrf52840 targets
|
|
||||||
if board_arch == "nrf52840":
|
|
||||||
device_meta["requiresDfu"] = True
|
|
||||||
|
|
||||||
device_meta.setdefault("displayName", pioenv)
|
|
||||||
device_meta.setdefault("activelySupported", False)
|
|
||||||
|
|
||||||
if device_meta:
|
|
||||||
manifest.update(device_meta)
|
|
||||||
|
|
||||||
# Write the manifest to the build directory
|
# Write the manifest to the build directory
|
||||||
with open(env.subst("$BUILD_DIR/${PROGNAME}.mt.json"), "w") as f:
|
with open(env.subst("$BUILD_DIR/${PROGNAME}.mt.json"), "w") as f:
|
||||||
json.dump(manifest, f, indent=2)
|
json.dump(manifest, f, indent=2)
|
||||||
@@ -276,12 +166,8 @@ def load_boot_logo(source, target, env):
|
|||||||
if ("HAS_TFT", 1) in env.get("CPPDEFINES", []):
|
if ("HAS_TFT", 1) in env.get("CPPDEFINES", []):
|
||||||
env.AddPreAction(f"$BUILD_DIR/{lfsbin}", load_boot_logo)
|
env.AddPreAction(f"$BUILD_DIR/{lfsbin}", load_boot_logo)
|
||||||
|
|
||||||
board_arch = infer_architecture(env.BoardConfig())
|
mtjson_deps = ["buildprog"]
|
||||||
should_skip_manifest = board_arch is None
|
if platform.name == "espressif32":
|
||||||
|
|
||||||
# For host/native envs, avoid depending on 'buildprog' (some targets don't define it)
|
|
||||||
mtjson_deps = [] if should_skip_manifest else ["buildprog"]
|
|
||||||
if not should_skip_manifest and platform.name == "espressif32":
|
|
||||||
# Build littlefs image as part of mtjson target
|
# Build littlefs image as part of mtjson target
|
||||||
# Equivalent to `pio run -t buildfs`
|
# Equivalent to `pio run -t buildfs`
|
||||||
target_lfs = env.DataToBin(
|
target_lfs = env.DataToBin(
|
||||||
@@ -289,27 +175,11 @@ if not should_skip_manifest and platform.name == "espressif32":
|
|||||||
)
|
)
|
||||||
mtjson_deps.append(target_lfs)
|
mtjson_deps.append(target_lfs)
|
||||||
|
|
||||||
if should_skip_manifest:
|
env.AddCustomTarget(
|
||||||
def skip_manifest(source, target, env):
|
name="mtjson",
|
||||||
print(f"mtjson: skipped for native environment: {env.get('PIOENV')}")
|
dependencies=mtjson_deps,
|
||||||
|
actions=[manifest_gather],
|
||||||
env.AddCustomTarget(
|
title="Meshtastic Manifest",
|
||||||
name="mtjson",
|
description="Generating Meshtastic manifest JSON + Checksums",
|
||||||
dependencies=mtjson_deps,
|
always_build=False,
|
||||||
actions=[skip_manifest],
|
)
|
||||||
title="Meshtastic Manifest (skipped)",
|
|
||||||
description="mtjson generation is skipped for native environments",
|
|
||||||
always_build=True,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
env.AddCustomTarget(
|
|
||||||
name="mtjson",
|
|
||||||
dependencies=mtjson_deps,
|
|
||||||
actions=[manifest_gather],
|
|
||||||
title="Meshtastic Manifest",
|
|
||||||
description="Generating Meshtastic manifest JSON + Checksums",
|
|
||||||
always_build=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Run manifest generation as part of the default build pipeline for non-native builds.
|
|
||||||
env.Default("mtjson")
|
|
||||||
|
|||||||
@@ -18,9 +18,8 @@ def readProps(prefsLoc):
|
|||||||
|
|
||||||
# Try to find current build SHA if if the workspace is clean. This could fail if git is not installed
|
# Try to find current build SHA if if the workspace is clean. This could fail if git is not installed
|
||||||
try:
|
try:
|
||||||
# Pin abbreviation length to keep local builds and CI matching (avoid auto-shortening)
|
|
||||||
sha = (
|
sha = (
|
||||||
subprocess.check_output(["git", "rev-parse", "--short=7", "HEAD"])
|
subprocess.check_output(["git", "rev-parse", "--short", "HEAD"])
|
||||||
.decode("utf-8")
|
.decode("utf-8")
|
||||||
.strip()
|
.strip()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
"build": {
|
|
||||||
"arduino": {
|
|
||||||
"ldscript": "esp32s3_out.ld",
|
|
||||||
"memory_type": "qio_opi"
|
|
||||||
},
|
|
||||||
"core": "esp32",
|
|
||||||
"extra_flags": [
|
|
||||||
"-DBOARD_HAS_PSRAM",
|
|
||||||
"-DLILYGO_TBEAM_1W",
|
|
||||||
"-DARDUINO_USB_CDC_ON_BOOT=1",
|
|
||||||
"-DARDUINO_USB_MODE=0",
|
|
||||||
"-DARDUINO_RUNNING_CORE=1",
|
|
||||||
"-DARDUINO_EVENT_RUNNING_CORE=1"
|
|
||||||
],
|
|
||||||
"f_cpu": "240000000L",
|
|
||||||
"f_flash": "80000000L",
|
|
||||||
"flash_mode": "qio",
|
|
||||||
"psram_type": "opi",
|
|
||||||
"hwids": [
|
|
||||||
[
|
|
||||||
"0x303A",
|
|
||||||
"0x1001"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"mcu": "esp32s3",
|
|
||||||
"variant": "t-beam-1w"
|
|
||||||
},
|
|
||||||
"connectivity": [
|
|
||||||
"wifi",
|
|
||||||
"bluetooth",
|
|
||||||
"lora"
|
|
||||||
],
|
|
||||||
"debug": {
|
|
||||||
"openocd_target": "esp32s3.cfg"
|
|
||||||
},
|
|
||||||
"frameworks": [
|
|
||||||
"arduino"
|
|
||||||
],
|
|
||||||
"name": "LilyGo TBeam-1W",
|
|
||||||
"upload": {
|
|
||||||
"flash_size": "16MB",
|
|
||||||
"maximum_ram_size": 327680,
|
|
||||||
"maximum_size": 16777216,
|
|
||||||
"require_upload_port": true,
|
|
||||||
"speed": 921600
|
|
||||||
},
|
|
||||||
"url": "http://www.lilygo.cn/",
|
|
||||||
"vendor": "LilyGo"
|
|
||||||
}
|
|
||||||
6
debian/changelog
vendored
6
debian/changelog
vendored
@@ -1,9 +1,3 @@
|
|||||||
meshtasticd (2.7.18.0) unstable; urgency=medium
|
|
||||||
|
|
||||||
* Version 2.7.18
|
|
||||||
|
|
||||||
-- GitHub Actions <github-actions[bot]@users.noreply.github.com> Fri, 02 Jan 2026 12:45:36 +0000
|
|
||||||
|
|
||||||
meshtasticd (2.7.17.0) unstable; urgency=medium
|
meshtasticd (2.7.17.0) unstable; urgency=medium
|
||||||
|
|
||||||
* Version 2.7.17
|
* Version 2.7.17
|
||||||
|
|||||||
@@ -119,7 +119,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/a8e2f947f7abaf0c5ac8e6dd189a22156335beaa.zip
|
https://github.com/meshtastic/device-ui/archive/940ba8570f59c59c3508643f4d72840de716ce20.zip
|
||||||
|
|
||||||
; Common libs for environmental measurements in telemetry module
|
; Common libs for environmental measurements in telemetry module
|
||||||
[environmental_base]
|
[environmental_base]
|
||||||
|
|||||||
@@ -22,19 +22,12 @@ int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event)
|
|||||||
|
|
||||||
// Handle different input events with appropriate buzzer feedback
|
// Handle different input events with appropriate buzzer feedback
|
||||||
switch (event->inputEvent) {
|
switch (event->inputEvent) {
|
||||||
#ifdef INPUTDRIVER_ENCODER_TYPE
|
|
||||||
case INPUT_BROKER_SELECT:
|
|
||||||
case INPUT_BROKER_SELECT_LONG:
|
|
||||||
playClick();
|
|
||||||
break;
|
|
||||||
#else
|
|
||||||
case INPUT_BROKER_USER_PRESS:
|
case INPUT_BROKER_USER_PRESS:
|
||||||
case INPUT_BROKER_ALT_PRESS:
|
case INPUT_BROKER_ALT_PRESS:
|
||||||
case INPUT_BROKER_SELECT:
|
case INPUT_BROKER_SELECT:
|
||||||
case INPUT_BROKER_SELECT_LONG:
|
case INPUT_BROKER_SELECT_LONG:
|
||||||
playBeep();
|
playBeep(); // Confirmation feedback
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
|
|
||||||
case INPUT_BROKER_UP:
|
case INPUT_BROKER_UP:
|
||||||
case INPUT_BROKER_UP_LONG:
|
case INPUT_BROKER_UP_LONG:
|
||||||
@@ -65,4 +58,4 @@ int BuzzerFeedbackThread::handleInputEvent(const InputEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0; // Allow other handlers to process the event
|
return 0; // Allow other handlers to process the event
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ void playTones(const ToneDuration *tone_durations, int size)
|
|||||||
|
|
||||||
void playBeep()
|
void playBeep()
|
||||||
{
|
{
|
||||||
ToneDuration melody[] = {{NOTE_B3, DURATION_1_16}};
|
ToneDuration melody[] = {{NOTE_B3, DURATION_1_8}};
|
||||||
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
|
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,14 +113,7 @@ void playShutdownMelody()
|
|||||||
void playChirp()
|
void playChirp()
|
||||||
{
|
{
|
||||||
// A short, friendly "chirp" sound for key presses
|
// A short, friendly "chirp" sound for key presses
|
||||||
ToneDuration melody[] = {{NOTE_AS3, 20}}; // Short AS3 note
|
ToneDuration melody[] = {{NOTE_AS3, 20}}; // Very short AS3 note
|
||||||
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
|
|
||||||
}
|
|
||||||
|
|
||||||
void playClick()
|
|
||||||
{
|
|
||||||
// A very short "click" sound with minimum delay; ideal for rotary encoder events
|
|
||||||
ToneDuration melody[] = {{NOTE_AS3, 1}}; // Very Short AS3
|
|
||||||
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
|
playTones(melody, sizeof(melody) / sizeof(ToneDuration));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ void playGPSDisableBeep();
|
|||||||
void playComboTune();
|
void playComboTune();
|
||||||
void playBoop();
|
void playBoop();
|
||||||
void playChirp();
|
void playChirp();
|
||||||
void playClick();
|
|
||||||
void playLongPressLeadUp();
|
void playLongPressLeadUp();
|
||||||
bool playNextLeadUpNote(); // Play the next note in the lead-up sequence
|
bool playNextLeadUpNote(); // Play the next note in the lead-up sequence
|
||||||
void resetLeadUpSequence(); // Reset the lead-up sequence to start from beginning
|
void resetLeadUpSequence(); // Reset the lead-up sequence to start from beginning
|
||||||
@@ -444,18 +444,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// BME680 BSEC2 support detection
|
|
||||||
#if !defined(MESHTASTIC_BME680_BSEC2_SUPPORTED)
|
|
||||||
#if defined(RAK_4631) || defined(TBEAM_V10)
|
|
||||||
|
|
||||||
#define MESHTASTIC_BME680_BSEC2_SUPPORTED 1
|
|
||||||
#define MESHTASTIC_BME680_HEADER <bsec2.h>
|
|
||||||
#else
|
|
||||||
#define MESHTASTIC_BME680_BSEC2_SUPPORTED 0
|
|
||||||
#define MESHTASTIC_BME680_HEADER <Adafruit_BME680.h>
|
|
||||||
#endif // defined(RAK_4631)
|
|
||||||
#endif // !defined(MESHTASTIC_BME680_BSEC2_SUPPORTED)
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Global switches to turn off features for a minimized build
|
// Global switches to turn off features for a minimized build
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -487,7 +487,7 @@ void ScanI2CTwoWire::scanPort(I2CPort port, uint8_t *address, uint8_t asize)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TSL25911_ADDR:
|
case TSL25911_ADDR:
|
||||||
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0xA0 | 0x12), 1);
|
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0x12), 1);
|
||||||
if (registerValue == 0x50) {
|
if (registerValue == 0x50) {
|
||||||
type = TSL2591;
|
type = TSL2591;
|
||||||
logFoundDevice("TSL25911", (uint8_t)addr.address);
|
logFoundDevice("TSL25911", (uint8_t)addr.address);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -128,28 +128,7 @@ template <typename T> struct MenuOption {
|
|||||||
MenuOption(const char *labelIn, OptionsAction actionIn) : label(labelIn), action(actionIn), hasValue(false), value() {}
|
MenuOption(const char *labelIn, OptionsAction actionIn) : label(labelIn), action(actionIn), hasValue(false), value() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ScreenColor {
|
|
||||||
uint8_t r;
|
|
||||||
uint8_t g;
|
|
||||||
uint8_t b;
|
|
||||||
bool useVariant;
|
|
||||||
|
|
||||||
ScreenColor(uint8_t rIn = 0, uint8_t gIn = 0, uint8_t bIn = 0, bool variantIn = false)
|
|
||||||
: r(rIn), g(gIn), b(bIn), useVariant(variantIn)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
using RadioPresetOption = MenuOption<meshtastic_Config_LoRaConfig_ModemPreset>;
|
using RadioPresetOption = MenuOption<meshtastic_Config_LoRaConfig_ModemPreset>;
|
||||||
using LoraRegionOption = MenuOption<meshtastic_Config_LoRaConfig_RegionCode>;
|
|
||||||
using TimezoneOption = MenuOption<const char *>;
|
|
||||||
using CompassOption = MenuOption<meshtastic_CompassMode>;
|
|
||||||
using ScreenColorOption = MenuOption<ScreenColor>;
|
|
||||||
using GPSToggleOption = MenuOption<meshtastic_Config_PositionConfig_GpsMode>;
|
|
||||||
using GPSFormatOption = MenuOption<meshtastic_DeviceUIConfig_GpsCoordinateFormat>;
|
|
||||||
using NodeNameOption = MenuOption<bool>;
|
|
||||||
using PositionMenuOption = MenuOption<int>;
|
|
||||||
using ClockFaceOption = MenuOption<bool>;
|
|
||||||
|
|
||||||
} // namespace graphics
|
} // namespace graphics
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "mesh-pb-constants.h"
|
#include "mesh-pb-constants.h"
|
||||||
#include "meshUtils.h"
|
#include "meshUtils.h"
|
||||||
#include "modules/TextMessageModule.h"
|
|
||||||
#if !MESHTASTIC_EXCLUDE_TRACEROUTE
|
#if !MESHTASTIC_EXCLUDE_TRACEROUTE
|
||||||
#include "modules/TraceRouteModule.h"
|
#include "modules/TraceRouteModule.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -36,10 +35,6 @@ bool FloodingRouter::shouldFilterReceived(const meshtastic_MeshPacket *p)
|
|||||||
return true; // we handled it, so stop processing
|
return true; // we handled it, so stop processing
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!seenRecently && !wasUpgraded && textMessageModule) {
|
|
||||||
seenRecently = textMessageModule->recentlySeen(p->id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (seenRecently) {
|
if (seenRecently) {
|
||||||
printPacket("Ignore dupe incoming msg", p);
|
printPacket("Ignore dupe incoming msg", p);
|
||||||
rxDupe++;
|
rxDupe++;
|
||||||
|
|||||||
@@ -246,8 +246,7 @@ uint32_t RadioInterface::getPacketTime(const meshtastic_MeshPacket *p, bool rece
|
|||||||
/** The delay to use for retransmitting dropped packets */
|
/** The delay to use for retransmitting dropped packets */
|
||||||
uint32_t RadioInterface::getRetransmissionMsec(const meshtastic_MeshPacket *p)
|
uint32_t RadioInterface::getRetransmissionMsec(const meshtastic_MeshPacket *p)
|
||||||
{
|
{
|
||||||
size_t numbytes =p->which_payload_variant == meshtastic_MeshPacket_decoded_tag ?
|
size_t numbytes = pb_encode_to_bytes(bytes, sizeof(bytes), &meshtastic_Data_msg, &p->decoded);
|
||||||
pb_encode_to_bytes(bytes, sizeof(bytes), &meshtastic_Data_msg, &p->decoded) : p->encrypted.size+MESHTASTIC_HEADER_LENGTH;
|
|
||||||
uint32_t packetAirtime = getPacketTime(numbytes + sizeof(PacketHeader));
|
uint32_t packetAirtime = getPacketTime(numbytes + sizeof(PacketHeader));
|
||||||
// Make sure enough time has elapsed for this packet to be sent and an ACK is received.
|
// Make sure enough time has elapsed for this packet to be sent and an ACK is received.
|
||||||
// LOG_DEBUG("Waiting for flooding message with airtime %d and slotTime is %d", packetAirtime, slotTimeMsec);
|
// LOG_DEBUG("Waiting for flooding message with airtime %d and slotTime is %d", packetAirtime, slotTimeMsec);
|
||||||
@@ -521,10 +520,6 @@ void RadioInterface::applyModemConfig()
|
|||||||
sf = 12;
|
sf = 12;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (loraConfig.coding_rate >= 5 && loraConfig.coding_rate <= 8 && loraConfig.coding_rate != cr) {
|
|
||||||
cr = loraConfig.coding_rate;
|
|
||||||
LOG_INFO("Using custom Coding Rate %u", cr);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
sf = loraConfig.spread_factor;
|
sf = loraConfig.spread_factor;
|
||||||
cr = loraConfig.coding_rate;
|
cr = loraConfig.coding_rate;
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ bool Router::shouldDecrementHopLimit(const meshtastic_MeshPacket *p)
|
|||||||
|
|
||||||
// Check 3: role check (moderate cost - multiple comparisons)
|
// Check 3: role check (moderate cost - multiple comparisons)
|
||||||
if (!IS_ONE_OF(node->user.role, meshtastic_Config_DeviceConfig_Role_ROUTER,
|
if (!IS_ONE_OF(node->user.role, meshtastic_Config_DeviceConfig_Role_ROUTER,
|
||||||
meshtastic_Config_DeviceConfig_Role_ROUTER_LATE, meshtastic_Config_DeviceConfig_Role_CLIENT_BASE)) {
|
meshtastic_Config_DeviceConfig_Role_ROUTER_LATE)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,26 +53,13 @@ template <typename T> bool SX126xInterface<T>::init()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(USE_GC1109_PA)
|
#if defined(USE_GC1109_PA)
|
||||||
// GC1109 FEM chip initialization
|
|
||||||
// See variant.h for full pin mapping and control logic documentation
|
|
||||||
|
|
||||||
// VFEM_Ctrl (LORA_PA_POWER): Power enable for GC1109 LDO (always on)
|
|
||||||
pinMode(LORA_PA_POWER, OUTPUT);
|
pinMode(LORA_PA_POWER, OUTPUT);
|
||||||
digitalWrite(LORA_PA_POWER, HIGH);
|
digitalWrite(LORA_PA_POWER, HIGH);
|
||||||
|
|
||||||
// CSD (LORA_PA_EN): Chip enable - must be HIGH to enable GC1109 for both RX and TX
|
|
||||||
pinMode(LORA_PA_EN, OUTPUT);
|
pinMode(LORA_PA_EN, OUTPUT);
|
||||||
digitalWrite(LORA_PA_EN, HIGH);
|
digitalWrite(LORA_PA_EN, LOW);
|
||||||
|
|
||||||
// CPS (LORA_PA_TX_EN): PA mode select - HIGH enables full PA during TX, LOW for RX (don't care)
|
|
||||||
// Note: TX/RX path switching (CTX) is handled by DIO2 via SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
pinMode(LORA_PA_TX_EN, OUTPUT);
|
pinMode(LORA_PA_TX_EN, OUTPUT);
|
||||||
digitalWrite(LORA_PA_TX_EN, LOW); // Start in RX-ready state
|
digitalWrite(LORA_PA_TX_EN, LOW);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef RF95_FAN_EN
|
|
||||||
digitalWrite(RF95_FAN_EN, HIGH);
|
|
||||||
pinMode(RF95_FAN_EN, OUTPUT);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ARCH_PORTDUINO
|
#if ARCH_PORTDUINO
|
||||||
@@ -98,13 +85,6 @@ template <typename T> bool SX126xInterface<T>::init()
|
|||||||
power = -9;
|
power = -9;
|
||||||
|
|
||||||
int res = lora.begin(getFreq(), bw, sf, cr, syncWord, power, preambleLength, tcxoVoltage, useRegulatorLDO);
|
int res = lora.begin(getFreq(), bw, sf, cr, syncWord, power, preambleLength, tcxoVoltage, useRegulatorLDO);
|
||||||
|
|
||||||
#ifdef SX126X_PA_RAMP_US
|
|
||||||
// Set custom PA ramp time for boards requiring longer stabilization (e.g., T-Beam 1W needs >800us)
|
|
||||||
if (res == RADIOLIB_ERR_NONE) {
|
|
||||||
lora.setPaRampTime(SX126X_PA_RAMP_US);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
// \todo Display actual typename of the adapter, not just `SX126x`
|
// \todo Display actual typename of the adapter, not just `SX126x`
|
||||||
LOG_INFO("SX126x init result %d", res);
|
LOG_INFO("SX126x init result %d", res);
|
||||||
if (res == RADIOLIB_ERR_CHIP_NOT_FOUND || res == RADIOLIB_ERR_SPI_CMD_FAILED)
|
if (res == RADIOLIB_ERR_CHIP_NOT_FOUND || res == RADIOLIB_ERR_SPI_CMD_FAILED)
|
||||||
@@ -385,13 +365,13 @@ template <typename T> bool SX126xInterface<T>::sleep()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Control PA mode for GC1109 FEM - CPS pin selects full PA (txon=true) or bypass mode (txon=false) */
|
/** Some boards require GPIO control of tx vs rx paths */
|
||||||
template <typename T> void SX126xInterface<T>::setTransmitEnable(bool txon)
|
template <typename T> void SX126xInterface<T>::setTransmitEnable(bool txon)
|
||||||
{
|
{
|
||||||
#if defined(USE_GC1109_PA)
|
#if defined(USE_GC1109_PA)
|
||||||
digitalWrite(LORA_PA_POWER, HIGH); // Ensure LDO is on
|
digitalWrite(LORA_PA_POWER, HIGH);
|
||||||
digitalWrite(LORA_PA_EN, HIGH); // CSD=1: Chip enabled
|
digitalWrite(LORA_PA_EN, HIGH);
|
||||||
digitalWrite(LORA_PA_TX_EN, txon ? 1 : 0); // CPS: 1=full PA, 0=bypass (for RX, CPS is don't care)
|
digitalWrite(LORA_PA_TX_EN, txon ? 1 : 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,9 +45,9 @@ int SystemCommandsModule::handleInputEvent(const InputEvent *event)
|
|||||||
// Mute
|
// Mute
|
||||||
case INPUT_BROKER_MSG_MUTE_TOGGLE:
|
case INPUT_BROKER_MSG_MUTE_TOGGLE:
|
||||||
if (moduleConfig.external_notification.enabled && externalNotificationModule) {
|
if (moduleConfig.external_notification.enabled && externalNotificationModule) {
|
||||||
externalNotificationModule->setMute(!externalNotificationModule->getMute());
|
externalNotificationModule->setMute(externalNotificationModule->getMute());
|
||||||
IF_SCREEN(if (!externalNotificationModule->getMute()) externalNotificationModule->stopNow(); screen->showSimpleBanner(
|
IF_SCREEN(if (!externalNotificationModule->getMute()) externalNotificationModule->stopNow(); screen->showSimpleBanner(
|
||||||
externalNotificationModule->getMute() ? "Notifications\nDisabled" : "Notifications\nEnabled", 3000);)
|
externalNotificationModule->getMute() ? "Notifications\nEnabled" : "Notifications\nDisabled", 3000);)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
// Bluetooth
|
// Bluetooth
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ extern void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const c
|
|||||||
#include "Sensor/LTR390UVSensor.h"
|
#include "Sensor/LTR390UVSensor.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __has_include(MESHTASTIC_BME680_HEADER)
|
#if __has_include(<bsec2.h>)
|
||||||
#include "Sensor/BME680Sensor.h"
|
#include "Sensor/BME680Sensor.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -214,7 +214,7 @@ void EnvironmentTelemetryModule::i2cScanFinished(ScanI2C *i2cScanner)
|
|||||||
#if __has_include(<Adafruit_LTR390.h>)
|
#if __has_include(<Adafruit_LTR390.h>)
|
||||||
addSensor<LTR390UVSensor>(i2cScanner, ScanI2C::DeviceType::LTR390UV);
|
addSensor<LTR390UVSensor>(i2cScanner, ScanI2C::DeviceType::LTR390UV);
|
||||||
#endif
|
#endif
|
||||||
#if __has_include(MESHTASTIC_BME680_HEADER)
|
#if __has_include(<bsec2.h>)
|
||||||
addSensor<BME680Sensor>(i2cScanner, ScanI2C::DeviceType::BME_680);
|
addSensor<BME680Sensor>(i2cScanner, ScanI2C::DeviceType::BME_680);
|
||||||
#endif
|
#endif
|
||||||
#if __has_include(<Adafruit_BMP280.h>)
|
#if __has_include(<Adafruit_BMP280.h>)
|
||||||
|
|||||||
@@ -136,12 +136,12 @@ void HealthTelemetryModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *
|
|||||||
display->drawString(x, y += _fontHeight(FONT_SMALL), tempStr);
|
display->drawString(x, y += _fontHeight(FONT_SMALL), tempStr);
|
||||||
if (lastMeasurement.variant.health_metrics.has_heart_bpm) {
|
if (lastMeasurement.variant.health_metrics.has_heart_bpm) {
|
||||||
char heartStr[32];
|
char heartStr[32];
|
||||||
snprintf(heartStr, sizeof(heartStr), "Heart Rate: %u bpm", lastMeasurement.variant.health_metrics.heart_bpm);
|
snprintf(heartStr, sizeof(heartStr), "Heart Rate: %.0f bpm", lastMeasurement.variant.health_metrics.heart_bpm);
|
||||||
display->drawString(x, y += _fontHeight(FONT_SMALL), heartStr);
|
display->drawString(x, y += _fontHeight(FONT_SMALL), heartStr);
|
||||||
}
|
}
|
||||||
if (lastMeasurement.variant.health_metrics.has_spO2) {
|
if (lastMeasurement.variant.health_metrics.has_spO2) {
|
||||||
char spo2Str[32];
|
char spo2Str[32];
|
||||||
snprintf(spo2Str, sizeof(spo2Str), "spO2: %u %%", lastMeasurement.variant.health_metrics.spO2);
|
snprintf(spo2Str, sizeof(spo2Str), "spO2: %.0f %%", lastMeasurement.variant.health_metrics.spO2);
|
||||||
display->drawString(x, y += _fontHeight(FONT_SMALL), spo2Str);
|
display->drawString(x, y += _fontHeight(FONT_SMALL), spo2Str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(MESHTASTIC_BME680_HEADER)
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<bsec2.h>)
|
||||||
|
|
||||||
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "BME680Sensor.h"
|
#include "BME680Sensor.h"
|
||||||
@@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
BME680Sensor::BME680Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_BME680, "BME680") {}
|
BME680Sensor::BME680Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_BME680, "BME680") {}
|
||||||
|
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
int32_t BME680Sensor::runOnce()
|
int32_t BME680Sensor::runOnce()
|
||||||
{
|
{
|
||||||
if (!bme680.run()) {
|
if (!bme680.run()) {
|
||||||
@@ -18,13 +17,10 @@ int32_t BME680Sensor::runOnce()
|
|||||||
}
|
}
|
||||||
return 35;
|
return 35;
|
||||||
}
|
}
|
||||||
#endif // defined(MESHTASTIC_BME680_BSEC2_SUPPORTED)
|
|
||||||
|
|
||||||
bool BME680Sensor::initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev)
|
bool BME680Sensor::initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev)
|
||||||
{
|
{
|
||||||
status = 0;
|
status = 0;
|
||||||
|
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
if (!bme680.begin(dev->address.address, *bus))
|
if (!bme680.begin(dev->address.address, *bus))
|
||||||
checkStatus("begin");
|
checkStatus("begin");
|
||||||
|
|
||||||
@@ -46,25 +42,12 @@ bool BME680Sensor::initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev)
|
|||||||
if (status == 0)
|
if (status == 0)
|
||||||
LOG_DEBUG("BME680Sensor::runOnce: bme680.status %d", bme680.status);
|
LOG_DEBUG("BME680Sensor::runOnce: bme680.status %d", bme680.status);
|
||||||
|
|
||||||
#else
|
|
||||||
bme680 = makeBME680(bus);
|
|
||||||
|
|
||||||
if (!bme680->begin(dev->address.address)) {
|
|
||||||
LOG_ERROR("Init sensor: %s failed at begin()", sensorName);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = 1;
|
|
||||||
|
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
|
|
||||||
initI2CSensor();
|
initI2CSensor();
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BME680Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
bool BME680Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
||||||
{
|
{
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
if (bme680.getData(BSEC_OUTPUT_RAW_PRESSURE).signal == 0)
|
if (bme680.getData(BSEC_OUTPUT_RAW_PRESSURE).signal == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -82,27 +65,9 @@ bool BME680Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
|||||||
// Check if we need to save state to filesystem (every STATE_SAVE_PERIOD ms)
|
// Check if we need to save state to filesystem (every STATE_SAVE_PERIOD ms)
|
||||||
measurement->variant.environment_metrics.iaq = bme680.getData(BSEC_OUTPUT_IAQ).signal;
|
measurement->variant.environment_metrics.iaq = bme680.getData(BSEC_OUTPUT_IAQ).signal;
|
||||||
updateState();
|
updateState();
|
||||||
#else
|
|
||||||
if (!bme680->performReading()) {
|
|
||||||
LOG_ERROR("BME680Sensor::getMetrics: performReading failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
measurement->variant.environment_metrics.has_temperature = true;
|
|
||||||
measurement->variant.environment_metrics.has_relative_humidity = true;
|
|
||||||
measurement->variant.environment_metrics.has_barometric_pressure = true;
|
|
||||||
measurement->variant.environment_metrics.has_gas_resistance = true;
|
|
||||||
|
|
||||||
measurement->variant.environment_metrics.temperature = bme680->readTemperature();
|
|
||||||
measurement->variant.environment_metrics.relative_humidity = bme680->readHumidity();
|
|
||||||
measurement->variant.environment_metrics.barometric_pressure = bme680->readPressure() / 100.0F;
|
|
||||||
measurement->variant.environment_metrics.gas_resistance = bme680->readGas() / 1000.0;
|
|
||||||
|
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
void BME680Sensor::loadState()
|
void BME680Sensor::loadState()
|
||||||
{
|
{
|
||||||
#ifdef FSCom
|
#ifdef FSCom
|
||||||
@@ -179,6 +144,5 @@ void BME680Sensor::checkStatus(const char *functionName)
|
|||||||
else if (bme680.sensor.status > BME68X_OK)
|
else if (bme680.sensor.status > BME68X_OK)
|
||||||
LOG_WARN("%s BME68X code: %d", functionName, bme680.sensor.status);
|
LOG_WARN("%s BME68X code: %d", functionName, bme680.sensor.status);
|
||||||
}
|
}
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,40 +1,23 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(MESHTASTIC_BME680_HEADER)
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<bsec2.h>)
|
||||||
|
|
||||||
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
#include "TelemetrySensor.h"
|
#include "TelemetrySensor.h"
|
||||||
|
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
#include <bme68xLibrary.h>
|
|
||||||
#include <bsec2.h>
|
#include <bsec2.h>
|
||||||
#else
|
|
||||||
#include <Adafruit_BME680.h>
|
|
||||||
#include <memory>
|
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
|
|
||||||
#define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // That's 6 hours worth of millis()
|
#define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // That's 6 hours worth of millis()
|
||||||
|
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
const uint8_t bsec_config[] = {
|
const uint8_t bsec_config[] = {
|
||||||
#include "config/bme680/bme680_iaq_33v_3s_4d/bsec_iaq.txt"
|
#include "config/bme680/bme680_iaq_33v_3s_4d/bsec_iaq.txt"
|
||||||
};
|
};
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
class BME680Sensor : public TelemetrySensor
|
class BME680Sensor : public TelemetrySensor
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
Bsec2 bme680;
|
Bsec2 bme680;
|
||||||
#else
|
|
||||||
using BME680Ptr = std::unique_ptr<Adafruit_BME680>;
|
|
||||||
|
|
||||||
static BME680Ptr makeBME680(TwoWire *bus) { return std::make_unique<Adafruit_BME680>(bus); }
|
|
||||||
|
|
||||||
BME680Ptr bme680;
|
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
const char *bsecConfigFileName = "/prefs/bsec.dat";
|
const char *bsecConfigFileName = "/prefs/bsec.dat";
|
||||||
uint8_t bsecState[BSEC_MAX_STATE_BLOB_SIZE] = {0};
|
uint8_t bsecState[BSEC_MAX_STATE_BLOB_SIZE] = {0};
|
||||||
uint8_t accuracy = 0;
|
uint8_t accuracy = 0;
|
||||||
@@ -51,13 +34,10 @@ class BME680Sensor : public TelemetrySensor
|
|||||||
void loadState();
|
void loadState();
|
||||||
void updateState();
|
void updateState();
|
||||||
void checkStatus(const char *functionName);
|
void checkStatus(const char *functionName);
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BME680Sensor();
|
BME680Sensor();
|
||||||
#if MESHTASTIC_BME680_BSEC2_SUPPORTED == 1
|
|
||||||
virtual int32_t runOnce() override;
|
virtual int32_t runOnce() override;
|
||||||
#endif // MESHTASTIC_BME680_BSEC2_SUPPORTED
|
|
||||||
virtual bool getMetrics(meshtastic_Telemetry *measurement) override;
|
virtual bool getMetrics(meshtastic_Telemetry *measurement) override;
|
||||||
virtual bool initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev) override;
|
virtual bool initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev) override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -17,9 +17,6 @@ ProcessMessage TextMessageModule::handleReceived(const meshtastic_MeshPacket &mp
|
|||||||
auto &p = mp.decoded;
|
auto &p = mp.decoded;
|
||||||
LOG_INFO("Received text msg from=0x%0x, id=0x%x, msg=%.*s", mp.from, mp.id, p.payload.size, p.payload.bytes);
|
LOG_INFO("Received text msg from=0x%0x, id=0x%x, msg=%.*s", mp.from, mp.id, p.payload.size, p.payload.bytes);
|
||||||
#endif
|
#endif
|
||||||
// add packet ID to the rolling list of packets
|
|
||||||
textPacketList[textPacketListIndex] = mp.id;
|
|
||||||
textPacketListIndex = (textPacketListIndex + 1) % TEXT_PACKET_LIST_SIZE;
|
|
||||||
|
|
||||||
// We only store/display messages destined for us.
|
// We only store/display messages destined for us.
|
||||||
devicestate.rx_text_message = mp;
|
devicestate.rx_text_message = mp;
|
||||||
@@ -50,13 +47,3 @@ bool TextMessageModule::wantPacket(const meshtastic_MeshPacket *p)
|
|||||||
{
|
{
|
||||||
return MeshService::isTextPayload(p);
|
return MeshService::isTextPayload(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextMessageModule::recentlySeen(uint32_t id)
|
|
||||||
{
|
|
||||||
for (size_t i = 0; i < TEXT_PACKET_LIST_SIZE; i++) {
|
|
||||||
if (textPacketList[i] != 0 && textPacketList[i] == id) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Observer.h"
|
#include "Observer.h"
|
||||||
#include "SinglePortModule.h"
|
#include "SinglePortModule.h"
|
||||||
#define TEXT_PACKET_LIST_SIZE 50
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Text message handling for Meshtastic.
|
* Text message handling for Meshtastic.
|
||||||
@@ -20,8 +19,6 @@ class TextMessageModule : public SinglePortModule, public Observable<const mesht
|
|||||||
*/
|
*/
|
||||||
TextMessageModule() : SinglePortModule("text", meshtastic_PortNum_TEXT_MESSAGE_APP) {}
|
TextMessageModule() : SinglePortModule("text", meshtastic_PortNum_TEXT_MESSAGE_APP) {}
|
||||||
|
|
||||||
bool recentlySeen(uint32_t id);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/** Called to handle a particular incoming message
|
/** Called to handle a particular incoming message
|
||||||
*
|
*
|
||||||
@@ -30,10 +27,6 @@ class TextMessageModule : public SinglePortModule, public Observable<const mesht
|
|||||||
*/
|
*/
|
||||||
virtual ProcessMessage handleReceived(const meshtastic_MeshPacket &mp) override;
|
virtual ProcessMessage handleReceived(const meshtastic_MeshPacket &mp) override;
|
||||||
virtual bool wantPacket(const meshtastic_MeshPacket *p) override;
|
virtual bool wantPacket(const meshtastic_MeshPacket *p) override;
|
||||||
|
|
||||||
private:
|
|
||||||
uint32_t textPacketList[TEXT_PACKET_LIST_SIZE] = {0};
|
|
||||||
size_t textPacketListIndex = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern TextMessageModule *textMessageModule;
|
extern TextMessageModule *textMessageModule;
|
||||||
@@ -366,14 +366,6 @@ void portduinoSetup()
|
|||||||
cleanupNameForAutoconf("lora-hat-" + std::string(hat_vendor) + "-" + autoconf_product + ".yaml");
|
cleanupNameForAutoconf("lora-hat-" + std::string(hat_vendor) + "-" + autoconf_product + ".yaml");
|
||||||
} else if (found_ch341) {
|
} else if (found_ch341) {
|
||||||
product_config = cleanupNameForAutoconf("lora-usb-" + std::string(autoconf_product) + ".yaml");
|
product_config = cleanupNameForAutoconf("lora-usb-" + std::string(autoconf_product) + ".yaml");
|
||||||
// look for more data after the null terminator
|
|
||||||
size_t len = strlen(autoconf_product);
|
|
||||||
if (len < 74) {
|
|
||||||
memcpy(portduino_config.device_id, autoconf_product + len + 1, 16);
|
|
||||||
if (!memfll(portduino_config.device_id, '\0', 16) && !memfll(portduino_config.device_id, 0xff, 16)) {
|
|
||||||
portduino_config.has_device_id = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't try to automatically find config for a device with RAK eeprom.
|
// Don't try to automatically find config for a device with RAK eeprom.
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class Ch341Hal : public RadioLibHal
|
|||||||
void getProductString(char *_product_string, size_t len)
|
void getProductString(char *_product_string, size_t len)
|
||||||
{
|
{
|
||||||
len = len > 95 ? 95 : len;
|
len = len > 95 ? 95 : len;
|
||||||
memcpy(_product_string, pinedio.product_string, len);
|
strncpy(_product_string, pinedio.product_string, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init() override {}
|
void init() override {}
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
; Port to Disaster Radio's ESP32-v3 Dev Board
|
; Port to Disaster Radio's ESP32-v3 Dev Board
|
||||||
[env:meshtastic-dr-dev]
|
[env:meshtastic-dr-dev]
|
||||||
custom_meshtastic_hw_model = 41
|
|
||||||
custom_meshtastic_hw_model_slug = DR_DEV
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = DR-DEV
|
|
||||||
custom_meshtastic_tags = DIY
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
board_level = extra
|
board_level = extra
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
; Hydra - Meshtastic DIY v1 hardware with some specific changes
|
; Hydra - Meshtastic DIY v1 hardware with some specific changes
|
||||||
[env:hydra]
|
[env:hydra]
|
||||||
custom_meshtastic_hw_model = 39
|
|
||||||
custom_meshtastic_hw_model_slug = HYDRA
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Hydra
|
|
||||||
custom_meshtastic_tags = DIY
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module
|
; Meshtastic DIY v1 by Nano VHF Schematic based on ESP32-WROOM-32 (38 pins) devkit & EBYTE E22 SX1262/SX1268 module
|
||||||
[env:meshtastic-diy-v1]
|
[env:meshtastic-diy-v1]
|
||||||
custom_meshtastic_hw_model = 39
|
|
||||||
custom_meshtastic_hw_model_slug = DIY_V1
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = DIY V1
|
|
||||||
custom_meshtastic_images = diy.svg
|
|
||||||
custom_meshtastic_tags = DIY
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ build_flags =
|
|||||||
-DAXP_DEBUG_PORT=Serial
|
-DAXP_DEBUG_PORT=Serial
|
||||||
-DCONFIG_BT_NIMBLE_ENABLED
|
-DCONFIG_BT_NIMBLE_ENABLED
|
||||||
-DCONFIG_BT_NIMBLE_MAX_BONDS=6 # default is 3
|
-DCONFIG_BT_NIMBLE_MAX_BONDS=6 # default is 3
|
||||||
|
-DCONFIG_BT_NIMBLE_ROLE_CENTRAL_DISABLED
|
||||||
-DCONFIG_NIMBLE_CPP_LOG_LEVEL=2
|
-DCONFIG_NIMBLE_CPP_LOG_LEVEL=2
|
||||||
-DCONFIG_BT_NIMBLE_MAX_CCCDS=20
|
-DCONFIG_BT_NIMBLE_MAX_CCCDS=20
|
||||||
-DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=8192
|
-DCONFIG_BT_NIMBLE_HOST_TASK_STACK_SIZE=8192
|
||||||
@@ -60,11 +61,11 @@ lib_deps =
|
|||||||
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
||||||
https://github.com/meshtastic/esp32_https_server/archive/3223704846752e6d545139204837bdb2a55459ca.zip
|
https://github.com/meshtastic/esp32_https_server/archive/3223704846752e6d545139204837bdb2a55459ca.zip
|
||||||
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
||||||
h2zero/NimBLE-Arduino@^1.4.3
|
h2zero/NimBLE-Arduino@2.3.7
|
||||||
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
||||||
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
||||||
# renovate: datasource=github-tags depName=XPowersLib packageName=lewisxhe/XPowersLib
|
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||||
https://github.com/lewisxhe/XPowersLib/archive/v0.3.2.zip
|
lewisxhe/XPowersLib@0.3.2
|
||||||
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-ESP32_Codec2 packageName=https://github.com/meshtastic/ESP32_Codec2 gitBranch=master
|
||||||
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
https://github.com/meshtastic/ESP32_Codec2/archive/633326c78ac251c059ab3a8c430fcdf25b41672f.zip
|
||||||
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
# renovate: datasource=custom.pio depName=rweather/Crypto packageName=rweather/library/Crypto
|
||||||
|
|||||||
@@ -5,4 +5,4 @@ extends = esp32_common
|
|||||||
custom_esp32_kind = esp32
|
custom_esp32_kind = esp32
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_common.build_flags}
|
${esp32_common.build_flags}
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
[env:heltec-v1]
|
[env:heltec-v1]
|
||||||
custom_meshtastic_hw_model = 11
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_V1
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = Heltec V1
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
|
|
||||||
;build_type = debug ; to make it possible to step through our jtag debugger
|
;build_type = debug ; to make it possible to step through our jtag debugger
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board_level = extra
|
board_level = extra
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
[env:heltec-v2_1]
|
[env:heltec-v2_1]
|
||||||
custom_meshtastic_hw_model = 10
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_V2_1
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = Heltec V2.1
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
|
|
||||||
board_level = extra
|
board_level = extra
|
||||||
;build_type = debug ; to make it possible to step through our jtag debugger
|
;build_type = debug ; to make it possible to step through our jtag debugger
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
[env:heltec-v2_0]
|
[env:heltec-v2_0]
|
||||||
custom_meshtastic_hw_model = 5
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_V2_0
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = Heltec V2.0
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
|
|
||||||
;build_type = debug ; to make it possible to step through our jtag debugger
|
;build_type = debug ; to make it possible to step through our jtag debugger
|
||||||
board_level = extra
|
board_level = extra
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
[env:m5stack-core]
|
[env:m5stack-core]
|
||||||
custom_meshtastic_hw_model = 42
|
|
||||||
custom_meshtastic_hw_model_slug = M5STACK
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = M5 Stack
|
|
||||||
custom_meshtastic_tags = M5Stack
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = m5stack-core-esp32
|
board = m5stack-core-esp32
|
||||||
monitor_filters = esp32_exception_decoder
|
monitor_filters = esp32_exception_decoder
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
; The 1.0 release of the nano-g1-explorer board
|
; The 1.0 release of the nano-g1-explorer board
|
||||||
[env:nano-g1-explorer]
|
[env:nano-g1-explorer]
|
||||||
custom_meshtastic_hw_model = 17
|
|
||||||
custom_meshtastic_hw_model_slug = NANO_G1_EXPLORER
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Nano G1 Explorer
|
|
||||||
custom_meshtastic_tags = B&Q
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
; The 1.0 release of the nano-g1 board
|
; The 1.0 release of the nano-g1 board
|
||||||
[env:nano-g1]
|
[env:nano-g1]
|
||||||
custom_meshtastic_hw_model = 14
|
|
||||||
custom_meshtastic_hw_model_slug = NANO_G1
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Nano G1
|
|
||||||
custom_meshtastic_tags = B&Q
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
[env:radiomaster_900_bandit_nano]
|
[env:radiomaster_900_bandit_nano]
|
||||||
custom_meshtastic_hw_model = 64
|
|
||||||
custom_meshtastic_hw_model_slug = RADIOMASTER_900_BANDIT_NANO
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 2
|
|
||||||
custom_meshtastic_display_name = RadioMaster 900 Bandit Nano
|
|
||||||
custom_meshtastic_tags = RadioMaster
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:rak11200]
|
[env:rak11200]
|
||||||
custom_meshtastic_hw_model = 13
|
|
||||||
custom_meshtastic_hw_model_slug = RAK11200
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = RAK WisBlock 11200
|
|
||||||
custom_meshtastic_images = rak11200.svg
|
|
||||||
custom_meshtastic_tags = RAK
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = wiscore_rak11200
|
board = wiscore_rak11200
|
||||||
board_level = pr
|
board_level = pr
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
; The 1.0 release of the nano-g1 board
|
; The 1.0 release of the nano-g1 board
|
||||||
[env:station-g1]
|
[env:station-g1]
|
||||||
custom_meshtastic_hw_model = 25
|
|
||||||
custom_meshtastic_hw_model_slug = STATION_G1
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Station G1
|
|
||||||
custom_meshtastic_tags = B&Q
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
; The 1.0 release of the TBEAM board
|
; The 1.0 release of the TBEAM board
|
||||||
[env:tbeam]
|
[env:tbeam]
|
||||||
custom_meshtastic_hw_model = 4
|
|
||||||
custom_meshtastic_hw_model_slug = TBEAM
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = LILYGO T-Beam
|
|
||||||
custom_meshtastic_images = tbeam.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
; The original TBEAM board without the AXP power chip and a few other changes
|
; The original TBEAM board without the AXP power chip and a few other changes
|
||||||
[env:tbeam0_7]
|
[env:tbeam0_7]
|
||||||
custom_meshtastic_hw_model = 6
|
|
||||||
custom_meshtastic_hw_model_slug = TBEAM_V0P7
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = LILYGO T-Beam V0.7
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
|
|
||||||
board_level = extra
|
board_level = extra
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
[env:tlora-v1]
|
[env:tlora-v1]
|
||||||
custom_meshtastic_hw_model = 2
|
|
||||||
custom_meshtastic_hw_model_slug = TLORA_V1
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa V1
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
|
|
||||||
board_level = extra
|
board_level = extra
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-lora32-v1
|
board = ttgo-lora32-v1
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
[env:tlora-v2]
|
[env:tlora-v2]
|
||||||
custom_meshtastic_hw_model = 1
|
|
||||||
custom_meshtastic_hw_model_slug = TLORA_V2
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa V2
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
|
|
||||||
board_level = extra
|
board_level = extra
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-lora32-v1
|
board = ttgo-lora32-v1
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:tlora-v2-1-1_6]
|
[env:tlora-v2-1-1_6]
|
||||||
custom_meshtastic_hw_model = 3
|
|
||||||
custom_meshtastic_hw_model_slug = TLORA_V2_1_1P6
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa V2.1-1.6
|
|
||||||
custom_meshtastic_images = tlora-v2-1-1_6.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-lora32-v21
|
board = ttgo-lora32-v21
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:tlora-v2-1-1_8]
|
[env:tlora-v2-1-1_8]
|
||||||
custom_meshtastic_hw_model = 15
|
|
||||||
custom_meshtastic_hw_model_slug = TLORA_V2_1_1P8
|
|
||||||
custom_meshtastic_architecture = esp32
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa V2.1-1.8
|
|
||||||
custom_meshtastic_images = tlora-v2-1-1_8.svg
|
|
||||||
custom_meshtastic_tags = LilyGo, 2.4GHz
|
|
||||||
|
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board_level = extra
|
board_level = extra
|
||||||
board = ttgo-lora32-v21
|
board = ttgo-lora32-v21
|
||||||
|
|||||||
@@ -4,3 +4,8 @@ custom_esp32_kind = esp32c3
|
|||||||
|
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
monitor_filters = esp32_c3_exception_decoder
|
monitor_filters = esp32_c3_exception_decoder
|
||||||
|
|
||||||
|
build_flags =
|
||||||
|
${esp32_common.build_flags}
|
||||||
|
-DCONFIG_BT_NIMBLE_EXT_ADV=1
|
||||||
|
-DCONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:heltec-ht62-esp32c3-sx1262]
|
[env:heltec-ht62-esp32c3-sx1262]
|
||||||
custom_meshtastic_hw_model = 53
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_HT62
|
|
||||||
custom_meshtastic_architecture = esp32-c3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec HT62
|
|
||||||
custom_meshtastic_images = heltec-ht62-esp32c3-sx1262.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
|
|
||||||
extends = esp32c3_base
|
extends = esp32c3_base
|
||||||
board = esp32-c3-devkitm-1
|
board = esp32-c3-devkitm-1
|
||||||
board_level = pr
|
board_level = pr
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:m5stack-unitc6l]
|
[env:m5stack-unitc6l]
|
||||||
custom_meshtastic_hw_model = 111
|
|
||||||
custom_meshtastic_hw_model_slug = M5STACK_C6L
|
|
||||||
custom_meshtastic_architecture = esp32-c6
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = M5Stack Unit C6L
|
|
||||||
custom_meshtastic_images = m5_c6l.svg
|
|
||||||
custom_meshtastic_tags = M5Stack
|
|
||||||
|
|
||||||
extends = esp32c6_base
|
extends = esp32c6_base
|
||||||
board = esp32-c6-devkitc-1
|
board = esp32-c6-devkitc-1
|
||||||
;OpenOCD flash method
|
;OpenOCD flash method
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:CDEBYTE_EoRa-S3]
|
[env:CDEBYTE_EoRa-S3]
|
||||||
custom_meshtastic_hw_model = 61
|
|
||||||
custom_meshtastic_hw_model_slug = CDEBYTE_EORA_S3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = EBYTE EoRa-S3
|
|
||||||
custom_meshtastic_tags = EByte
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = CDEBYTE_EoRa-S3
|
board = CDEBYTE_EoRa-S3
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:thinknode_m2]
|
[env:thinknode_m2]
|
||||||
custom_meshtastic_hw_model = 90
|
|
||||||
custom_meshtastic_hw_model_slug = THINKNODE_M2
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = ThinkNode M2
|
|
||||||
custom_meshtastic_images = thinknode_m2.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
custom_meshtastic_requires_dfu = false
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = ESP32-S3-WROOM-1-N4
|
board = ESP32-S3-WROOM-1-N4
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:thinknode_m5]
|
[env:thinknode_m5]
|
||||||
custom_meshtastic_hw_model = 107
|
|
||||||
custom_meshtastic_hw_model_slug = THINKNODE_M5
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = ThinkNode M5
|
|
||||||
custom_meshtastic_images = thinknode_m1.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
custom_meshtastic_requires_dfu = false
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = ESP32-S3-WROOM-1-N4
|
board = ESP32-S3-WROOM-1-N4
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -75,17 +75,6 @@ build_flags =
|
|||||||
-D DISPLAY_SET_RESOLUTION
|
-D DISPLAY_SET_RESOLUTION
|
||||||
|
|
||||||
[env:elecrow-adv-24-28-tft]
|
[env:elecrow-adv-24-28-tft]
|
||||||
custom_meshtastic_hw_model = 97
|
|
||||||
custom_meshtastic_hw_model_slug = CROWPANEL
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Crowpanel Adv 2.4/2.8 TFT
|
|
||||||
custom_meshtastic_images = crowpanel_2_4.svg, crowpanel_2_8.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = crowpanel_small_esp32s3_base
|
extends = crowpanel_small_esp32s3_base
|
||||||
build_flags =
|
build_flags =
|
||||||
${crowpanel_small_esp32s3_base.build_flags}
|
${crowpanel_small_esp32s3_base.build_flags}
|
||||||
@@ -110,17 +99,6 @@ build_flags =
|
|||||||
-D LGFX_TOUCH_ROTATION=0
|
-D LGFX_TOUCH_ROTATION=0
|
||||||
|
|
||||||
[env:elecrow-adv-35-tft]
|
[env:elecrow-adv-35-tft]
|
||||||
custom_meshtastic_hw_model = 97
|
|
||||||
custom_meshtastic_hw_model_slug = CROWPANEL
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Crowpanel Adv 3.5 TFT
|
|
||||||
custom_meshtastic_images = crowpanel_3_5.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = crowpanel_small_esp32s3_base
|
extends = crowpanel_small_esp32s3_base
|
||||||
board_level = pr
|
board_level = pr
|
||||||
build_flags =
|
build_flags =
|
||||||
@@ -149,17 +127,6 @@ build_flags =
|
|||||||
|
|
||||||
; 4.3, 5.0, 7.0 inch 800x480 IPS (V1)
|
; 4.3, 5.0, 7.0 inch 800x480 IPS (V1)
|
||||||
[env:elecrow-adv1-43-50-70-tft]
|
[env:elecrow-adv1-43-50-70-tft]
|
||||||
custom_meshtastic_hw_model = 97
|
|
||||||
custom_meshtastic_hw_model_slug = CROWPANEL
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Crowpanel Adv 4.3/5.0/7.0 TFT
|
|
||||||
custom_meshtastic_images = crowpanel_5_0.svg, crowpanel_7_0.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = crowpanel_large_esp32s3_base
|
extends = crowpanel_large_esp32s3_base
|
||||||
build_flags =
|
build_flags =
|
||||||
${crowpanel_large_esp32s3_base.build_flags}
|
${crowpanel_large_esp32s3_base.build_flags}
|
||||||
|
|||||||
@@ -3,3 +3,8 @@ extends = esp32_common
|
|||||||
custom_esp32_kind = esp32s3
|
custom_esp32_kind = esp32s3
|
||||||
|
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
|
|
||||||
|
build_flags =
|
||||||
|
${esp32_common.build_flags}
|
||||||
|
-DCONFIG_BT_NIMBLE_EXT_ADV=1
|
||||||
|
-DCONFIG_BT_NIMBLE_MAX_EXT_ADV_INSTANCES=2
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:heltec-v3]
|
[env:heltec-v3]
|
||||||
custom_meshtastic_hw_model = 43
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_V3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec V3
|
|
||||||
custom_meshtastic_images = heltec-v3.svg, heltec-v3-case.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
board_level = pr
|
board_level = pr
|
||||||
|
|||||||
@@ -10,17 +10,6 @@ build_flags =
|
|||||||
|
|
||||||
|
|
||||||
[env:heltec-v4]
|
[env:heltec-v4]
|
||||||
custom_meshtastic_hw_model = 110
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_V4
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec V4
|
|
||||||
custom_meshtastic_images = heltec_v4.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = heltec_v4_base
|
extends = heltec_v4_base
|
||||||
build_flags =
|
build_flags =
|
||||||
${heltec_v4_base.build_flags}
|
${heltec_v4_base.build_flags}
|
||||||
|
|||||||
@@ -29,32 +29,10 @@
|
|||||||
#define SX126X_DIO2_AS_RF_SWITCH
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
// ---- GC1109 RF FRONT END CONFIGURATION ----
|
#define USE_GC1109_PA // We have a GC1109 power amplifier+attenuator
|
||||||
// The Heltec V4 uses a GC1109 FEM chip with integrated PA and LNA
|
#define LORA_PA_POWER 7 // power en
|
||||||
// RF path: SX1262 -> GC1109 PA -> Pi attenuator -> Antenna
|
#define LORA_PA_EN 2
|
||||||
// Measured net TX gain (non-linear due to PA compression):
|
#define LORA_PA_TX_EN 46 // enable tx
|
||||||
// +11dB at 0-15dBm input (e.g., 10dBm in -> 21dBm out)
|
|
||||||
// +10dB at 16-17dBm input
|
|
||||||
// +9dB at 18-19dBm input
|
|
||||||
// +7dB at 21dBm input (e.g., 21dBm in -> 28dBm out max)
|
|
||||||
// Control logic (from GC1109 datasheet):
|
|
||||||
// Shutdown: CSD=0, CTX=X, CPS=X
|
|
||||||
// Receive LNA: CSD=1, CTX=0, CPS=X (17dB gain, 2dB NF)
|
|
||||||
// Transmit bypass: CSD=1, CTX=1, CPS=0 (~1dB loss, no PA)
|
|
||||||
// Transmit PA: CSD=1, CTX=1, CPS=1 (full PA enabled)
|
|
||||||
// Pin mapping:
|
|
||||||
// CTX (pin 6) -> SX1262 DIO2: TX/RX path select (automatic via SX126X_DIO2_AS_RF_SWITCH)
|
|
||||||
// CSD (pin 4) -> GPIO2: Chip enable (HIGH=on, LOW=shutdown)
|
|
||||||
// CPS (pin 5) -> GPIO46: PA mode select (HIGH=full PA, LOW=bypass)
|
|
||||||
// VCC0/VCC1 -> Vfem via U3 LDO, controlled by GPIO7
|
|
||||||
#define USE_GC1109_PA
|
|
||||||
#define LORA_PA_POWER 7 // VFEM_Ctrl - GC1109 LDO power enable
|
|
||||||
#define LORA_PA_EN 2 // CSD - GC1109 chip enable (HIGH=on)
|
|
||||||
#define LORA_PA_TX_EN 46 // CPS - GC1109 PA mode (HIGH=full PA, LOW=bypass)
|
|
||||||
|
|
||||||
// GC1109 FEM: TX/RX path switching is handled by DIO2 -> CTX pin (via SX126X_DIO2_AS_RF_SWITCH)
|
|
||||||
// GPIO46 is CPS (PA mode), not TX control - setTransmitEnable() handles it in SX126xInterface.cpp
|
|
||||||
// Do NOT use SX126X_TXEN/RXEN as that would cause double-control of GPIO46
|
|
||||||
|
|
||||||
#if HAS_TFT
|
#if HAS_TFT
|
||||||
#define USE_TFTDISPLAY 1
|
#define USE_TFTDISPLAY 1
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:heltec-vision-master-e213]
|
[env:heltec-vision-master-e213]
|
||||||
custom_meshtastic_hw_model = 67
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_VISION_MASTER_E213
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Vision Master E213
|
|
||||||
custom_meshtastic_images = heltec-vision-master-e213.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_vision_master_e213
|
board = heltec_vision_master_e213
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
; Using the original screen class
|
; Using the original screen class
|
||||||
[env:heltec-vision-master-e290]
|
[env:heltec-vision-master-e290]
|
||||||
custom_meshtastic_hw_model = 68
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_VISION_MASTER_E290
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Vision Master E290
|
|
||||||
custom_meshtastic_images = heltec-vision-master-e290.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_vision_master_e290
|
board = heltec_vision_master_e290
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:heltec-vision-master-t190]
|
[env:heltec-vision-master-t190]
|
||||||
custom_meshtastic_hw_model = 66
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_VISION_MASTER_T190
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Vision Master T190
|
|
||||||
custom_meshtastic_images = heltec-vision-master-t190.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_vision_master_t190
|
board = heltec_vision_master_t190
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
; Using the original screen class
|
; Using the original screen class
|
||||||
[env:heltec-wireless-paper]
|
[env:heltec-wireless-paper]
|
||||||
custom_meshtastic_hw_model = 49
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_PAPER
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Wireless Paper
|
|
||||||
custom_meshtastic_images = heltec-wireless-paper.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:heltec-wireless-paper-v1_0]
|
[env:heltec-wireless-paper-v1_0]
|
||||||
custom_meshtastic_hw_model = 57
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_PAPER_V1_0
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Heltec Wireless Paper V1.0
|
|
||||||
custom_meshtastic_images = heltec-wireless-paper-v1_0.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board_level = extra
|
board_level = extra
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:heltec-wireless-tracker]
|
[env:heltec-wireless-tracker]
|
||||||
custom_meshtastic_hw_model = 48
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_TRACKER
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Wireless Tracker V1.1
|
|
||||||
custom_meshtastic_images = heltec-wireless-tracker.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:heltec-wireless-tracker-V1-0]
|
[env:heltec-wireless-tracker-V1-0]
|
||||||
custom_meshtastic_hw_model = 58
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_TRACKER_V1_0
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Heltec Wireless Tracker V1.0
|
|
||||||
custom_meshtastic_images = heltec-wireless-tracker.svg
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board_level = extra
|
board_level = extra
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
|
|||||||
@@ -73,29 +73,7 @@
|
|||||||
#define SX126X_DIO2_AS_RF_SWITCH
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
|
||||||
// ---- GC1109 RF FRONT END CONFIGURATION ----
|
#define USE_GC1109_PA // We have a GC1109 power amplifier+attenuator
|
||||||
// The Heltec Wireless Tracker V2 uses a GC1109 FEM chip with integrated PA and LNA
|
#define LORA_PA_POWER 7 // power en
|
||||||
// RF path: SX1262 -> GC1109 PA -> Pi attenuator -> Antenna
|
#define LORA_PA_EN 4
|
||||||
// Measured net TX gain (non-linear due to PA compression):
|
#define LORA_PA_TX_EN 46 // enable tx
|
||||||
// +11dB at 0-15dBm input (e.g., 10dBm in -> 21dBm out)
|
|
||||||
// +10dB at 16-17dBm input
|
|
||||||
// +9dB at 18-19dBm input
|
|
||||||
// +7dB at 21dBm input (e.g., 21dBm in -> 28dBm out max)
|
|
||||||
// Control logic (from GC1109 datasheet):
|
|
||||||
// Shutdown: CSD=0, CTX=X, CPS=X
|
|
||||||
// Receive LNA: CSD=1, CTX=0, CPS=X (17dB gain, 2dB NF)
|
|
||||||
// Transmit bypass: CSD=1, CTX=1, CPS=0 (~1dB loss, no PA)
|
|
||||||
// Transmit PA: CSD=1, CTX=1, CPS=1 (full PA enabled)
|
|
||||||
// Pin mapping:
|
|
||||||
// CTX (pin 6) -> SX1262 DIO2: TX/RX path select (automatic via SX126X_DIO2_AS_RF_SWITCH)
|
|
||||||
// CSD (pin 4) -> GPIO4: Chip enable (HIGH=on, LOW=shutdown)
|
|
||||||
// CPS (pin 5) -> GPIO46: PA mode select (HIGH=full PA, LOW=bypass)
|
|
||||||
// VCC0/VCC1 -> Vfem via U3 LDO, controlled by GPIO7
|
|
||||||
#define USE_GC1109_PA
|
|
||||||
#define LORA_PA_POWER 7 // VFEM_Ctrl - GC1109 LDO power enable
|
|
||||||
#define LORA_PA_EN 4 // CSD - GC1109 chip enable (HIGH=on)
|
|
||||||
#define LORA_PA_TX_EN 46 // CPS - GC1109 PA mode (HIGH=full PA, LOW=bypass)
|
|
||||||
|
|
||||||
// GC1109 FEM: TX/RX path switching is handled by DIO2 -> CTX pin (via SX126X_DIO2_AS_RF_SWITCH)
|
|
||||||
// GPIO46 is CPS (PA mode), not TX control - setTransmitEnable() handles it in SX126xInterface.cpp
|
|
||||||
// Do NOT use SX126X_TXEN/RXEN as that would cause double-control of GPIO46
|
|
||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:heltec-wsl-v3]
|
[env:heltec-wsl-v3]
|
||||||
custom_meshtastic_hw_model = 44
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WSL_V3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Wireless Stick Lite V3
|
|
||||||
custom_meshtastic_images = heltec-wsl-v3.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wifi_lora_32_V3
|
board = heltec_wifi_lora_32_V3
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -55,6 +55,5 @@
|
|||||||
#define SX126X_RESET 14
|
#define SX126X_RESET 14
|
||||||
#define SX126X_RXEN 47
|
#define SX126X_RXEN 47
|
||||||
#define SX126X_TXEN RADIOLIB_NC // Assuming that DIO2 is connected to TXEN pin
|
#define SX126X_TXEN RADIOLIB_NC // Assuming that DIO2 is connected to TXEN pin
|
||||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
[env:picomputer-s3]
|
[env:picomputer-s3]
|
||||||
custom_meshtastic_hw_model = 52
|
|
||||||
custom_meshtastic_hw_model_slug = PICOMPUTER_S3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Pi Computer S3
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = bpi_picow_esp32_s3
|
board = bpi_picow_esp32_s3
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:rak3312]
|
[env:rak3312]
|
||||||
custom_meshtastic_hw_model = 106
|
|
||||||
custom_meshtastic_hw_model_slug = RAK3312
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = RAK3312
|
|
||||||
custom_meshtastic_images = rak_3312.svg
|
|
||||||
custom_meshtastic_tags = RAK
|
|
||||||
custom_meshtastic_requires_dfu = false
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = wiscore_rak3312
|
board = wiscore_rak3312
|
||||||
board_level = pr
|
board_level = pr
|
||||||
@@ -24,7 +13,8 @@ build_flags =
|
|||||||
[env:rak3112]
|
[env:rak3112]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = wiscore_rak3312
|
board = wiscore_rak3312
|
||||||
board_level = extra
|
board_level = pr
|
||||||
|
board_check = true
|
||||||
upload_protocol = esptool
|
upload_protocol = esptool
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
; Seeed Studio SenseCAP Indicator
|
; Seeed Studio SenseCAP Indicator
|
||||||
[env:seeed-sensecap-indicator]
|
[env:seeed-sensecap-indicator]
|
||||||
custom_meshtastic_hw_model = 70
|
|
||||||
custom_meshtastic_hw_model_slug = SENSECAP_INDICATOR
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Seeed SenseCAP Indicator
|
|
||||||
custom_meshtastic_images = seeed-sensecap-indicator.svg
|
|
||||||
custom_meshtastic_tags = Seeed
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
= true
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
platform_packages =
|
platform_packages =
|
||||||
platformio/framework-arduinoespressif32 @ https://github.com/mverch67/arduino-esp32/archive/aef7fef6de3329ed6f75512d46d63bba12b09bb5.zip ; add_tca9535 (based on 2.0.16)
|
platformio/framework-arduinoespressif32 @ https://github.com/mverch67/arduino-esp32/archive/aef7fef6de3329ed6f75512d46d63bba12b09bb5.zip ; add_tca9535 (based on 2.0.16)
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:seeed-xiao-s3]
|
[env:seeed-xiao-s3]
|
||||||
custom_meshtastic_hw_model = 81
|
|
||||||
custom_meshtastic_hw_model_slug = SEEED_XIAO_S3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Seeed Xiao ESP32-S3
|
|
||||||
custom_meshtastic_images = seeed-xiao-s3.svg
|
|
||||||
custom_meshtastic_tags = Seeed
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = seeed-xiao-s3
|
board = seeed-xiao-s3
|
||||||
board_level = pr
|
board_level = pr
|
||||||
|
|||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:station-g2]
|
[env:station-g2]
|
||||||
custom_meshtastic_hw_model = 31
|
|
||||||
custom_meshtastic_hw_model_slug = STATION_G2
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 2
|
|
||||||
custom_meshtastic_display_name = Station G2
|
|
||||||
custom_meshtastic_images = station-g2.svg
|
|
||||||
custom_meshtastic_tags = B&Q
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = station-g2
|
board = station-g2
|
||||||
board_level = pr
|
board_level = pr
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
#ifndef Pins_Arduino_h
|
|
||||||
#define Pins_Arduino_h
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#define USB_VID 0x303a
|
|
||||||
#define USB_PID 0x1001
|
|
||||||
|
|
||||||
static const uint8_t TX = 43;
|
|
||||||
static const uint8_t RX = 44;
|
|
||||||
|
|
||||||
// I2C for OLED and sensors
|
|
||||||
static const uint8_t SDA = 8;
|
|
||||||
static const uint8_t SCL = 9;
|
|
||||||
|
|
||||||
// Default SPI mapped to Radio/SD
|
|
||||||
static const uint8_t SS = 15; // LoRa CS
|
|
||||||
static const uint8_t MOSI = 11;
|
|
||||||
static const uint8_t MISO = 12;
|
|
||||||
static const uint8_t SCK = 13;
|
|
||||||
|
|
||||||
// SD Card CS
|
|
||||||
#define SDCARD_CS 10
|
|
||||||
|
|
||||||
#endif /* Pins_Arduino_h */
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
; LilyGo T-Beam-1W (1 Watt LoRa with external PA)
|
|
||||||
[env:t-beam-1w]
|
|
||||||
extends = esp32s3_base
|
|
||||||
board = t-beam-1w
|
|
||||||
board_build.partitions = default_8MB.csv
|
|
||||||
board_check = true
|
|
||||||
|
|
||||||
lib_deps =
|
|
||||||
${esp32s3_base.lib_deps}
|
|
||||||
|
|
||||||
build_flags =
|
|
||||||
${esp32s3_base.build_flags}
|
|
||||||
-I variants/esp32s3/t-beam-1w
|
|
||||||
-D T_BEAM_1W
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
// LilyGo T-Beam-1W variant.h
|
|
||||||
// Configuration based on LilyGO utilities.h and RF documentation
|
|
||||||
|
|
||||||
// I2C for OLED display (SH1106 at 0x3C)
|
|
||||||
#define I2C_SDA 8
|
|
||||||
#define I2C_SCL 9
|
|
||||||
|
|
||||||
// GPS - Quectel L76K
|
|
||||||
#define GPS_RX_PIN 5
|
|
||||||
#define GPS_TX_PIN 6
|
|
||||||
#define GPS_1PPS_PIN 7
|
|
||||||
#define GPS_WAKEUP_PIN 16 // GPS_EN_PIN in LilyGO code
|
|
||||||
#define HAS_GPS 1
|
|
||||||
#define GPS_BAUDRATE 9600
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
#define BUTTON_PIN 0 // BUTTON 1
|
|
||||||
#define BUTTON_PIN_ALT 17 // BUTTON 2
|
|
||||||
|
|
||||||
// SPI (shared by LoRa and SD)
|
|
||||||
#define SPI_MOSI 11
|
|
||||||
#define SPI_SCK 13
|
|
||||||
#define SPI_MISO 12
|
|
||||||
#define SPI_CS 10
|
|
||||||
|
|
||||||
// SD Card
|
|
||||||
#define HAS_SDCARD
|
|
||||||
#define SDCARD_USE_SPI1
|
|
||||||
#define SDCARD_CS SPI_CS
|
|
||||||
|
|
||||||
// LoRa Radio - SX1262 with 1W PA
|
|
||||||
#define USE_SX1262
|
|
||||||
|
|
||||||
#define LORA_SCK SPI_SCK
|
|
||||||
#define LORA_MISO SPI_MISO
|
|
||||||
#define LORA_MOSI SPI_MOSI
|
|
||||||
#define LORA_CS 15
|
|
||||||
#define LORA_RESET 3
|
|
||||||
#define LORA_DIO1 1
|
|
||||||
#define LORA_BUSY 38
|
|
||||||
|
|
||||||
// CRITICAL: Radio power enable - MUST be HIGH before lora.begin()!
|
|
||||||
// GPIO 40 powers the SX1262 + PA module via LDO
|
|
||||||
#define SX126X_POWER_EN 40
|
|
||||||
|
|
||||||
// TX power offset for external PA (0 = no offset, full SX1262 power)
|
|
||||||
#define TX_GAIN_LORA 10
|
|
||||||
|
|
||||||
#ifdef USE_SX1262
|
|
||||||
#define SX126X_CS LORA_CS
|
|
||||||
#define SX126X_DIO1 LORA_DIO1
|
|
||||||
#define SX126X_BUSY LORA_BUSY
|
|
||||||
#define SX126X_RESET LORA_RESET
|
|
||||||
|
|
||||||
// RF switching configuration for 1W PA module
|
|
||||||
// DIO2 controls PA (via SX126X_DIO2_AS_RF_SWITCH)
|
|
||||||
// CTRL PIN (GPIO 21) controls LNA - must be HIGH during RX
|
|
||||||
// Truth table: DIO2=1,CTRL=0 → TX (PA on, LNA off)
|
|
||||||
// DIO2=0,CTRL=1 → RX (PA off, LNA on)
|
|
||||||
#define SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
#define SX126X_RXEN 21 // LNA enable - HIGH during RX
|
|
||||||
|
|
||||||
// TCXO voltage - required for radio init
|
|
||||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
|
||||||
|
|
||||||
#define SX126X_MAX_POWER 22
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// LED
|
|
||||||
#define LED_PIN 18
|
|
||||||
#define LED_STATE_ON 1 // HIGH = ON
|
|
||||||
|
|
||||||
// Battery ADC
|
|
||||||
#define BATTERY_PIN 4
|
|
||||||
#define ADC_CHANNEL ADC1_GPIO4_CHANNEL
|
|
||||||
#define BATTERY_SENSE_SAMPLES 30
|
|
||||||
#define ADC_MULTIPLIER 2.9333
|
|
||||||
|
|
||||||
// NTC temperature sensor
|
|
||||||
#define NTC_PIN 14
|
|
||||||
|
|
||||||
// Fan control
|
|
||||||
#define FAN_CTRL_PIN 41
|
|
||||||
// Meshtastic standard fan control pin macro
|
|
||||||
#define RF95_FAN_EN FAN_CTRL_PIN
|
|
||||||
|
|
||||||
// PA Ramp Time - T-Beam 1W requires >800us stabilization (default is 200us)
|
|
||||||
// Value 0x05 = RADIOLIB_SX126X_PA_RAMP_800U
|
|
||||||
#define SX126X_PA_RAMP_US 0x05
|
|
||||||
|
|
||||||
// Display - SH1106 OLED (128x64)
|
|
||||||
#define USE_SH1106
|
|
||||||
#define OLED_WIDTH 128
|
|
||||||
#define OLED_HEIGHT 64
|
|
||||||
|
|
||||||
// 32768 Hz crystal present
|
|
||||||
#define HAS_32768HZ 1
|
|
||||||
@@ -1,15 +1,4 @@
|
|||||||
[env:t-deck-pro]
|
[env:t-deck-pro]
|
||||||
custom_meshtastic_hw_model = 102
|
|
||||||
custom_meshtastic_hw_model_slug = T_DECK_PRO
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = LILYGO T-Deck Pro
|
|
||||||
custom_meshtastic_images = tdeck_pro.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-deck-pro
|
board = t-deck-pro
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
; LilyGo T-Deck
|
; LilyGo T-Deck
|
||||||
[env:t-deck]
|
[env:t-deck]
|
||||||
custom_meshtastic_hw_model = 50
|
|
||||||
custom_meshtastic_hw_model_slug = T_DECK
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = LILYGO T-Deck
|
|
||||||
custom_meshtastic_images = t-deck.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-deck
|
board = t-deck
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
; LilyGo T-Watch S3
|
; LilyGo T-Watch S3
|
||||||
[env:t-watch-s3]
|
[env:t-watch-s3]
|
||||||
custom_meshtastic_hw_model = 51
|
|
||||||
custom_meshtastic_hw_model_slug = T_WATCH_S3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = LILYGO T-Watch S3
|
|
||||||
custom_meshtastic_images = t-watch-s3.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-watch-s3
|
board = t-watch-s3
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
; The 1.0 release of the LilyGo TBEAM-S3-Core board
|
; The 1.0 release of the LilyGo TBEAM-S3-Core board
|
||||||
[env:tbeam-s3-core]
|
[env:tbeam-s3-core]
|
||||||
custom_meshtastic_hw_model = 12
|
|
||||||
custom_meshtastic_hw_model_slug = LILYGO_TBEAM_S3_CORE
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = LILYGO T-Beam Supreme
|
|
||||||
custom_meshtastic_images = tbeam-s3-core.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = tbeam-s3-core
|
board = tbeam-s3-core
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
; LilyGo T-Lora-Pager
|
; LilyGo T-Lora-Pager
|
||||||
[env:tlora-pager]
|
[env:tlora-pager]
|
||||||
custom_meshtastic_hw_model = 103
|
|
||||||
custom_meshtastic_hw_model_slug = T_LORA_PAGER
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa Pager
|
|
||||||
custom_meshtastic_images = lilygo-tlora-pager.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 16MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = t-deck-pro ; same as T-Deck Pro
|
board = t-deck-pro ; same as T-Deck Pro
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:tlora-t3s3-epaper]
|
[env:tlora-t3s3-epaper]
|
||||||
custom_meshtastic_hw_model = 16
|
|
||||||
custom_meshtastic_hw_model_slug = TLORA_T3_S3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa T3-S3 E-Ink
|
|
||||||
custom_meshtastic_images = tlora-t3s3-epaper.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = tlora-t3s3-v1
|
board = tlora-t3s3-v1
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
[env:tlora-t3s3-v1]
|
[env:tlora-t3s3-v1]
|
||||||
custom_meshtastic_hw_model = 16
|
|
||||||
custom_meshtastic_hw_model_slug = TLORA_T3_S3
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = LILYGO T-LoRa T3-S3
|
|
||||||
custom_meshtastic_images = tlora-t3s3-v1.svg
|
|
||||||
custom_meshtastic_tags = LilyGo
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = tlora-t3s3-v1
|
board = tlora-t3s3-v1
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
[env:tracksenger]
|
[env:tracksenger]
|
||||||
custom_meshtastic_hw_model = 48
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_TRACKER
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = TrackSenger (small TFT)
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
@@ -25,15 +16,6 @@ lib_deps =
|
|||||||
lovyan03/LovyanGFX@1.2.7
|
lovyan03/LovyanGFX@1.2.7
|
||||||
|
|
||||||
[env:tracksenger-lcd]
|
[env:tracksenger-lcd]
|
||||||
custom_meshtastic_hw_model = 48
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_TRACKER
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = TrackSenger (big TFT)
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
@@ -51,14 +33,6 @@ lib_deps =
|
|||||||
lovyan03/LovyanGFX@1.2.7
|
lovyan03/LovyanGFX@1.2.7
|
||||||
|
|
||||||
[env:tracksenger-oled]
|
[env:tracksenger-oled]
|
||||||
custom_meshtastic_hw_model = 48
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_WIRELESS_TRACKER
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = TrackSenger (big OLED)
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = heltec_wireless_tracker
|
board = heltec_wireless_tracker
|
||||||
board_build.partitions = default_8MB.csv
|
board_build.partitions = default_8MB.csv
|
||||||
|
|||||||
@@ -1,15 +1,6 @@
|
|||||||
; platformio.ini for unphone meshtastic
|
; platformio.ini for unphone meshtastic
|
||||||
|
|
||||||
[env:unphone]
|
[env:unphone]
|
||||||
custom_meshtastic_hw_model = 59
|
|
||||||
custom_meshtastic_hw_model_slug = UNPHONE
|
|
||||||
custom_meshtastic_architecture = esp32-s3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = unPhone
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
custom_meshtastic_partition_scheme = 8MB
|
|
||||||
|
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = unphone
|
board = unphone
|
||||||
board_build.partitions = partition-table-8MB.csv
|
board_build.partitions = partition-table-8MB.csv
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ lib_deps =
|
|||||||
adafruit/Adafruit seesaw Library@1.7.9
|
adafruit/Adafruit seesaw Library@1.7.9
|
||||||
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
||||||
https://github.com/RAKWireless/RAK12034-BMX160/archive/dcead07ffa267d3c906e9ca4a1330ab989e957e2.zip
|
https://github.com/RAKWireless/RAK12034-BMX160/archive/dcead07ffa267d3c906e9ca4a1330ab989e957e2.zip
|
||||||
# renovate: datasource=custom.pio depName=adafruit/Adafruit BME680 Library packageName=adafruit/library/Adafruit BME680
|
|
||||||
adafruit/Adafruit BME680 Library@^2.0.5
|
|
||||||
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
; First prototype eink/nrf52840/sx1262 device
|
; First prototype eink/nrf52840/sx1262 device
|
||||||
[env:thinknode_m1]
|
[env:thinknode_m1]
|
||||||
custom_meshtastic_hw_model = 89
|
|
||||||
custom_meshtastic_hw_model_slug = THINKNODE_M1
|
|
||||||
custom_meshtastic_architecture = nrf52840
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = ThinkNode M1
|
|
||||||
custom_meshtastic_images = thinknode_m1.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
|
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = ThinkNode-M1
|
board = ThinkNode-M1
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,17 +1,8 @@
|
|||||||
[env:thinknode_m3]
|
[env:thinknode_m3]
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_images = thinknode_m3.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
|
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = ThinkNode-M3
|
board = ThinkNode-M3
|
||||||
board_check = true
|
board_check = true
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
custom_meshtastic_hw_model = 115
|
|
||||||
custom_meshtastic_hw_model_slug = THINKNODE_M3
|
|
||||||
custom_meshtastic_architecture = nrf52840
|
|
||||||
custom_meshtastic_display_name = Elecrow ThinkNode M3
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
build_flags =
|
build_flags =
|
||||||
${nrf52840_base.build_flags}
|
${nrf52840_base.build_flags}
|
||||||
-Ivariants/nrf52840/ELECROW-ThinkNode-M3
|
-Ivariants/nrf52840/ELECROW-ThinkNode-M3
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
; ThinkNode M6 - Outdoor Solar Power nrf52840/sx1262 device
|
; ThinkNode M6 - Outdoor Solar Power nrf52840/sx1262 device
|
||||||
[env:thinknode_m6]
|
[env:thinknode_m6]
|
||||||
custom_meshtastic_hw_model = 120
|
|
||||||
custom_meshtastic_hw_model_slug = THINKNODE_M6
|
|
||||||
custom_meshtastic_architecture = nrf52840
|
|
||||||
custom_meshtastic_actively_supported = false
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = ThinkNode M6
|
|
||||||
custom_meshtastic_images = thinknode_m6.svg
|
|
||||||
custom_meshtastic_tags = Elecrow
|
|
||||||
|
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = ThinkNode-M6
|
board = ThinkNode-M6
|
||||||
board_check = true
|
board_check = true
|
||||||
|
|||||||
@@ -1,13 +1,5 @@
|
|||||||
; Public Beta oled/nrf52840/sx1262 device
|
; Public Beta oled/nrf52840/sx1262 device
|
||||||
[env:canaryone]
|
[env:canaryone]
|
||||||
custom_meshtastic_hw_model = 29
|
|
||||||
custom_meshtastic_hw_model_slug = CANARYONE
|
|
||||||
custom_meshtastic_architecture = nrf52840
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = Canary One
|
|
||||||
custom_meshtastic_tags = Canary
|
|
||||||
|
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = canaryone
|
board = canaryone
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
; Promicro + E22(0)-xxxM / HT-RA62 modules board variant - DIY - with TCXO
|
; Promicro + E22(0)-xxxM / HT-RA62 modules board variant - DIY - with TCXO
|
||||||
[env:nrf52_promicro_diy_tcxo]
|
[env:nrf52_promicro_diy_tcxo]
|
||||||
custom_meshtastic_hw_model = 63
|
|
||||||
custom_meshtastic_hw_model_slug = NRF52_PROMICRO_DIY
|
|
||||||
custom_meshtastic_architecture = nrf52840
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 3
|
|
||||||
custom_meshtastic_display_name = NRF52 Pro-micro DIY
|
|
||||||
custom_meshtastic_images = promicro.svg
|
|
||||||
custom_meshtastic_tags = DIY
|
|
||||||
custom_meshtastic_requires_dfu = true
|
|
||||||
|
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = promicro-nrf52840
|
board = promicro-nrf52840
|
||||||
build_flags = ${nrf52840_base.build_flags}
|
build_flags = ${nrf52840_base.build_flags}
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
; First prototype nrf52840/sx1262 device
|
; First prototype nrf52840/sx1262 device
|
||||||
[env:heltec-mesh-node-t114]
|
[env:heltec-mesh-node-t114]
|
||||||
custom_meshtastic_hw_model = 69
|
|
||||||
custom_meshtastic_hw_model_slug = HELTEC_MESH_NODE_T114
|
|
||||||
custom_meshtastic_architecture = nrf52840
|
|
||||||
custom_meshtastic_actively_supported = true
|
|
||||||
custom_meshtastic_support_level = 1
|
|
||||||
custom_meshtastic_display_name = Heltec Mesh Node T114
|
|
||||||
custom_meshtastic_images = heltec-mesh-node-t114.svg, heltec-mesh-node-t114-case.svg
|
|
||||||
custom_meshtastic_tags = Heltec
|
|
||||||
|
|
||||||
extends = nrf52840_base
|
extends = nrf52840_base
|
||||||
board = heltec_mesh_node_t114
|
board = heltec_mesh_node_t114
|
||||||
board_level = pr
|
board_level = pr
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user