Merge develop into packet authentication policy
This commit is contained in:
@@ -12,4 +12,4 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
@@ -70,7 +70,7 @@ lib_deps =
|
||||
https://github.com/mverch67/libpax/archive/6f52ee989301cdabaeef00bcbf93bff55708ce2f.zip
|
||||
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||
lewisxhe/XPowersLib@0.3.3
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
|
||||
lib_ignore =
|
||||
|
||||
+12
-11
@@ -22,16 +22,17 @@ build_flags =
|
||||
-DMESHTASTIC_EXCLUDE_RANGETEST=1
|
||||
; HACK HACK HACK this is just a proof of concept ESP32+NimBLE but these
|
||||
; includes need to be done properly somehow
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/porting/nimble/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/port/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/porting/npl/freertos/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/transport/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/services/gap/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/esp-hci/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/services/gatt/include
|
||||
-I${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/util/include
|
||||
; Quotes keep Windows packages_dir backslashes intact through POSIX flag parsing
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/porting/nimble/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/port/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/porting/npl/freertos/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/transport/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/services/gap/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/esp-hci/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/services/gatt/include"
|
||||
-I"${platformio.packages_dir}/framework-espidf/components/bt/host/nimble/nimble/nimble/host/util/include"
|
||||
|
||||
custom_sdkconfig =
|
||||
${esp32_common.custom_sdkconfig}
|
||||
@@ -55,5 +56,5 @@ lib_deps =
|
||||
https://github.com/mverch67/libpax/archive/6f52ee989301cdabaeef00bcbf93bff55708ce2f.zip
|
||||
# renovate: datasource=custom.pio depName=XPowersLib packageName=lewisxhe/library/XPowersLib
|
||||
lewisxhe/XPowersLib@0.3.3
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
|
||||
@@ -35,4 +35,4 @@ lib_ignore =
|
||||
lib_deps =
|
||||
${esp32_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
@@ -11,7 +11,7 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# renovate: datasource=custom.pio depName=SX1509 IO Expander packageName=sparkfun/library/SX1509 IO Expander
|
||||
sparkfun/SX1509 IO Expander@3.0.6
|
||||
# renovate: datasource=custom.pio depName=APA102 packageName=pololu/library/APA102
|
||||
|
||||
@@ -104,7 +104,7 @@ lib_deps =
|
||||
${networking_extra.lib_deps}
|
||||
${environmental_base.lib_deps}
|
||||
${radiolib_base.lib_deps}
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
# 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
|
||||
|
||||
@@ -51,7 +51,7 @@ lib_deps = ${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=TCA9534 packageName=hideakitai/library/TCA9534
|
||||
hideakitai/TCA9534@0.1.1
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
[crowpanel_small_esp32s3_base] ; 2.4, 2.8, 3.5 inch
|
||||
extends = crowpanel_base
|
||||
|
||||
@@ -134,6 +134,6 @@ build_flags =
|
||||
lib_deps = ${heltec_v4_base.lib_deps}
|
||||
${device-ui_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# renovate: datasource=git-refs depName=Quency-D_chsc6x packageName=https://github.com/Quency-D/chsc6x gitBranch=master
|
||||
https://github.com/Quency-D/chsc6x/archive/3b2b6cebf3177b3e2c33d06e07909b0b10159516.zip
|
||||
|
||||
@@ -140,6 +140,6 @@ build_flags =
|
||||
lib_deps = ${heltec_v4_r8_base.lib_deps}
|
||||
${device-ui_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# renovate: datasource=git-refs depName=Quency-D_chsc6x packageName=https://github.com/Quency-D/chsc6x gitBranch=master
|
||||
https://github.com/Quency-D/chsc6x/archive/3b2b6cebf3177b3e2c33d06e07909b0b10159516.zip
|
||||
@@ -26,4 +26,4 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
@@ -22,4 +22,4 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
@@ -21,4 +21,4 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
@@ -55,7 +55,7 @@ lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
${device-ui_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
[mesh_tab_xpt2046]
|
||||
extends = mesh_tab_base
|
||||
|
||||
@@ -25,7 +25,7 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
build_src_filter =
|
||||
${esp32s3_base.build_src_filter}
|
||||
|
||||
@@ -37,7 +37,7 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
[env:rak_wismesh_tap_v2-tft]
|
||||
extends = env:rak_wismesh_tap_v2
|
||||
|
||||
@@ -29,7 +29,7 @@ build_flags = ${esp32s3_base.build_flags}
|
||||
|
||||
lib_deps = ${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# renovate: datasource=git-refs depName=ESP8266Audio packageName=https://github.com/meshtastic/ESP8266Audio gitBranch=meshtastic-2.0.0-dacfix
|
||||
https://github.com/meshtastic/ESP8266Audio/archive/343024632ee78d6216907b2353fc943a62422d80.zip
|
||||
# renovate: datasource=custom.pio depName=ESP8266SAM packageName=earlephilhower/library/ESP8266SAM
|
||||
|
||||
@@ -22,7 +22,7 @@ build_flags = ${esp32s3_base.build_flags}
|
||||
|
||||
lib_deps = ${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# renovate: datasource=custom.pio depName=SensorLib packageName=lewisxhe/library/SensorLib
|
||||
lewisxhe/SensorLib@0.3.4
|
||||
# renovate: datasource=custom.pio depName=Adafruit DRV2605 packageName=adafruit/library/Adafruit DRV2605 Library
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[t5s3_epaper_base]
|
||||
extends = esp32s3_base
|
||||
board = t5-epaper-s3
|
||||
board_build.partition = default_16MB.csv
|
||||
board_build.partitions = default_16MB.csv
|
||||
board_check = true
|
||||
upload_protocol = esptool
|
||||
build_flags = -fno-strict-aliasing
|
||||
@@ -30,8 +30,8 @@ lib_deps =
|
||||
|
||||
[env:t5s3_epaper_inkhud]
|
||||
extends = t5s3_epaper_base, inkhud
|
||||
board_level = extra # inkhud port is incomplete
|
||||
board_check = false
|
||||
board_level = extra
|
||||
board_check = true
|
||||
build_flags =
|
||||
${t5s3_epaper_base.build_flags}
|
||||
${inkhud.build_flags}
|
||||
|
||||
@@ -33,7 +33,7 @@ build_flags = ${esp32s3_base.build_flags}
|
||||
|
||||
lib_deps = ${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# renovate: datasource=git-refs depName=ESP8266Audio packageName=https://github.com/meshtastic/ESP8266Audio gitBranch=meshtastic-2.0.0-dacfix
|
||||
https://github.com/meshtastic/ESP8266Audio/archive/343024632ee78d6216907b2353fc943a62422d80.zip
|
||||
# renovate: datasource=custom.pio depName=ESP8266SAM packageName=earlephilhower/library/ESP8266SAM
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "FSCommon.h"
|
||||
#include "configuration.h"
|
||||
|
||||
#ifdef MESHTASTIC_INCLUDE_NICHE_GRAPHICS
|
||||
@@ -29,9 +30,8 @@ void setupNicheGraphics()
|
||||
// SPI
|
||||
// -----------------------------
|
||||
|
||||
// Display is connected to HSPI
|
||||
SPIClass *hspi = new SPIClass(HSPI);
|
||||
hspi->begin(PIN_EINK_SCLK, -1, PIN_EINK_MOSI, PIN_EINK_CS);
|
||||
// Display shares the HSPI bus with the SD card; reuse it rather than re-init the same host.
|
||||
SPIClass *hspi = &SPI_HSPI;
|
||||
|
||||
// E-Ink Driver
|
||||
// -----------------------------
|
||||
|
||||
@@ -13,13 +13,16 @@ custom_meshtastic_has_ink_hud = true
|
||||
extends = esp32s3_base
|
||||
board = tlora-t3s3-v1
|
||||
board_check = true
|
||||
board_build.partitions = partition-table-t3s3.csv
|
||||
upload_protocol = esptool
|
||||
|
||||
build_flags =
|
||||
build_flags =
|
||||
${esp32s3_base.build_flags}
|
||||
-D TLORA_T3S3_EPAPER
|
||||
-I variants/esp32s3/tlora_t3s3_epaper
|
||||
-DUSE_EINK
|
||||
-DMESHTASTIC_EXCLUDE_AUDIO=1
|
||||
-DMESHTASTIC_EXCLUDE_WEBSERVER=1
|
||||
-DEINK_DISPLAY_MODEL=GxEPD2_213_BN
|
||||
-DEINK_WIDTH=250
|
||||
-DEINK_HEIGHT=122
|
||||
@@ -38,7 +41,11 @@ lib_deps =
|
||||
extends = esp32s3_base, inkhud
|
||||
board = tlora-t3s3-v1
|
||||
board_check = true
|
||||
board_build.partitions = partition-table-t3s3.csv
|
||||
upload_protocol = esptool
|
||||
custom_sdkconfig =
|
||||
${esp32s3_base.custom_sdkconfig}
|
||||
CONFIG_ESP_IPC_TASK_STACK_SIZE=2048 ; default 1024 overflows during NimBLE init off USB power
|
||||
build_src_filter =
|
||||
${esp32s3_base.build_src_filter}
|
||||
${inkhud.build_src_filter}
|
||||
@@ -47,6 +54,8 @@ build_flags =
|
||||
${inkhud.build_flags}
|
||||
-I variants/esp32s3/tlora_t3s3_epaper
|
||||
-D TLORA_T3S3_EPAPER
|
||||
-DMESHTASTIC_EXCLUDE_AUDIO=1
|
||||
-DMESHTASTIC_EXCLUDE_WEBSERVER=1
|
||||
lib_deps =
|
||||
${inkhud.lib_deps} ; InkHUD libs first, so we get GFXRoot instead of AdafruitGFX
|
||||
${esp32s3_base.lib_deps}
|
||||
|
||||
@@ -12,9 +12,10 @@ custom_meshtastic_requires_dfu = true
|
||||
extends = esp32s3_base
|
||||
board = tlora-t3s3-v1
|
||||
board_check = true
|
||||
board_build.partitions = partition-table-t3s3.csv
|
||||
upload_protocol = esptool
|
||||
|
||||
build_flags =
|
||||
build_flags =
|
||||
${esp32s3_base.build_flags}
|
||||
-D TLORA_T3S3_V1
|
||||
-I variants/esp32s3/tlora_t3s3_v1
|
||||
|
||||
@@ -22,7 +22,7 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
[env:tracksenger-lcd]
|
||||
custom_meshtastic_hw_model = 48
|
||||
@@ -48,7 +48,7 @@ build_flags =
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
|
||||
[env:tracksenger-oled]
|
||||
custom_meshtastic_hw_model = 48
|
||||
|
||||
@@ -36,7 +36,7 @@ build_src_filter =
|
||||
|
||||
lib_deps = ${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
# TODO renovate https://gitlab.com/hamishcunningham/unphonelibrary#meshtastic@9.0.0
|
||||
https://gitlab.com/hamishcunningham/unphonelibrary/-/archive/meshtastic/unphonelibrary-meshtastic.zip
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
; Big Visualizer - ESP32-S3-DevKitC-1 (N16R8) + 128x64 HUB75 matrix + Wio-SX1262 - DIY
|
||||
[env:visualizer-hub75]
|
||||
extends = esp32s3_base
|
||||
board = esp32-s3-devkitc-1
|
||||
board_check = true
|
||||
board_build.partitions = default_16MB.csv
|
||||
board_level = extra
|
||||
board_upload.flash_size = 16MB ; N16R8 -> 16MB flash
|
||||
board_build.arduino.memory_type = qio_opi ; N16R8 -> 8MB octal (OPI) PSRAM
|
||||
build_flags =
|
||||
${esp32s3_base.build_flags}
|
||||
-D VISUALIZER_HUB75
|
||||
-D BOARD_HAS_PSRAM
|
||||
-D ARDUINO_USB_MODE=1
|
||||
-D ARDUINO_USB_CDC_ON_BOOT=1
|
||||
-I variants/esp32s3/visualizer-hub75
|
||||
lib_deps =
|
||||
${esp32s3_base.lib_deps}
|
||||
# renovate: datasource=github-tags depName=ESP32-HUB75-MatrixPanel-I2S-DMA packageName=mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA
|
||||
https://github.com/mrfaptastic/ESP32-HUB75-MatrixPanel-I2S-DMA/archive/refs/tags/3.0.14.zip
|
||||
@@ -0,0 +1,66 @@
|
||||
// Big Visualizer - ESP32-S3-DevKitC-1 (N16R8) driving a 128x64 HUB75 RGB matrix
|
||||
// via the seengreat "RGB Matrix Adapter Board (E)" Rev. 2.2 (V2.x), plus a
|
||||
// Wio-SX1262 (for XIAO, Seeed p/n 6379) LoRa header board.
|
||||
|
||||
#define BUTTON_PIN 0
|
||||
|
||||
#define I2C_SDA 41
|
||||
#define I2C_SCL 42
|
||||
|
||||
// --- Display: HUB75 via seengreat Shield (V2.x, hard-wired) -----------------
|
||||
#define HAS_SPI_TFT 1 // enable the color BaseUI path (TFTColorRegions/theming)
|
||||
#define DISPLAY_FORCE_SMALL_FONTS // 128x64 panel: keep OLED-sized fonts, not big TFT fonts
|
||||
#define USE_HUB75 // select HUB75Display in Screen.cpp
|
||||
|
||||
#define TFT_WIDTH 128
|
||||
#define TFT_HEIGHT 64
|
||||
#define HUB75_BRIGHTNESS_DEFAULT 180
|
||||
|
||||
// RGB data lines.
|
||||
// This panel is BGR: R and B are swapped per half vs. the nominal seengreat
|
||||
// mapping (R1<->B1, R2<->B2), verified at bring-up. Software-only fix; the
|
||||
// shield board is unchanged. G / address / control lines stay as routed.
|
||||
#define HUB75_R1 17
|
||||
#define HUB75_G1 8
|
||||
#define HUB75_B1 18
|
||||
#define HUB75_R2 15
|
||||
#define HUB75_G2 1
|
||||
#define HUB75_B2 16
|
||||
// Row-address lines (1/32 scan -> A..E)
|
||||
#define HUB75_A 7
|
||||
#define HUB75_B 48
|
||||
#define HUB75_C 6
|
||||
#define HUB75_D 47
|
||||
#define HUB75_E 2
|
||||
// Control lines
|
||||
#define HUB75_CLK 5
|
||||
#define HUB75_LAT 21
|
||||
#define HUB75_OE 4
|
||||
|
||||
// --- Radio: Wio-SX1262 for XIAO (header board, Seeed p/n 6379) ---------------
|
||||
#define USE_SX1262
|
||||
|
||||
#define LORA_SCK 12
|
||||
#define LORA_MISO 13
|
||||
#define LORA_MOSI 11
|
||||
#define LORA_CS 10
|
||||
#define LORA_RESET 9
|
||||
#define LORA_DIO1 40
|
||||
|
||||
#define SX126X_CS LORA_CS
|
||||
#define SX126X_SCK LORA_SCK
|
||||
#define SX126X_MOSI LORA_MOSI
|
||||
#define SX126X_MISO LORA_MISO
|
||||
#define SX126X_DIO1 LORA_DIO1
|
||||
#define SX126X_BUSY 14
|
||||
#define SX126X_RESET LORA_RESET
|
||||
|
||||
#define SX126X_DIO2_AS_RF_SWITCH
|
||||
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||
|
||||
#define SX126X_RXEN 39
|
||||
#define SX126X_TXEN RADIOLIB_NC
|
||||
|
||||
#define SX126X_MAX_POWER 22
|
||||
|
||||
#define LED_HEARTBEAT 38
|
||||
@@ -2,7 +2,7 @@
|
||||
[portduino_base]
|
||||
platform =
|
||||
# renovate: datasource=git-refs depName=platform-native packageName=https://github.com/meshtastic/platform-native gitBranch=develop
|
||||
https://github.com/meshtastic/platform-native/archive/61067ac3774e4fe27aa9762c72cebea507f116c8.zip
|
||||
https://github.com/meshtastic/platform-native/archive/86c62edfb7084d11669aa255411a70580e83823b.zip
|
||||
framework = arduino
|
||||
|
||||
build_src_filter =
|
||||
@@ -23,12 +23,12 @@ lib_deps =
|
||||
${networking_extra.lib_deps}
|
||||
${radiolib_base.lib_deps}
|
||||
${environmental_base.lib_deps}
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
|
||||
lovyan03/LovyanGFX@1.2.24
|
||||
; # renovate: datasource=git-refs depName=libch341-spi-userspace packageName=https://github.com/pine64/libch341-spi-userspace gitBranch=main
|
||||
https://github.com/pine64/libch341-spi-userspace/archive/2e5ff751d0c39667993df672cb683740ed5c9394.zip
|
||||
lovyan03/LovyanGFX@1.2.25
|
||||
; # renovate: datasource=git-refs depName=libch341-spi-userspace packageName=https://github.com/meshtastic/libch341-spi-userspace gitBranch=main
|
||||
https://github.com/meshtastic/libch341-spi-userspace/archive/03bf505d6e5904092c1c389c45b01098f7a302fe.zip
|
||||
# renovate: datasource=custom.pio depName=adafruit/Adafruit seesaw Library packageName=adafruit/library/Adafruit seesaw Library
|
||||
adafruit/Adafruit seesaw Library@1.7.9
|
||||
# renovate: datasource=git-refs depName=RAK12034-BMX160 packageName=https://github.com/RAKWireless/RAK12034-BMX160 gitBranch=main
|
||||
@@ -56,6 +56,8 @@ build_flags_common =
|
||||
-luv
|
||||
-std=gnu17
|
||||
-std=gnu++17
|
||||
-DBASEUI_HAS_GAMES=1
|
||||
-DMAX_TFT_COLOR_REGIONS=64
|
||||
|
||||
build_flags =
|
||||
${portduino_base.build_flags_common}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
#pragma once
|
||||
|
||||
#include "configuration.h"
|
||||
|
||||
#if defined(HAS_HUB75_NATIVE)
|
||||
|
||||
#include <OLEDDisplay.h>
|
||||
|
||||
#ifndef HUB75_BRIGHTNESS_DEFAULT
|
||||
#define HUB75_BRIGHTNESS_DEFAULT 100 // rpi-rgb-led-matrix brightness is a 1..100 percentage
|
||||
#endif
|
||||
|
||||
namespace rgb_matrix
|
||||
{
|
||||
class RGBMatrix;
|
||||
class FrameCanvas;
|
||||
} // namespace rgb_matrix
|
||||
|
||||
/**
|
||||
* Native (Raspberry Pi / Portduino) HUB75 RGB-matrix display backend.
|
||||
*
|
||||
* Drives the panel with hzeller/rpi-rgb-led-matrix. Like the ESP32 HUB75Display it plugs into the
|
||||
* BaseUI color path by subclassing OLEDDisplay and expanding the mono framebuffer into RGB via the
|
||||
* shared TFTColorRegions/TFTPalette helpers. It is a separate class (not shared with the ESP32
|
||||
* driver) so no rpi-rgb-led-matrix code lives in src/graphics/. All wiring/tuning comes from
|
||||
* config.yaml (portduino_config.hub75_*); the library owns the GPIO pins.
|
||||
*
|
||||
* Bodies live in src/platform/portduino/HUB75Native.cpp (compiled native-only).
|
||||
*/
|
||||
class HUB75Native : public OLEDDisplay
|
||||
{
|
||||
public:
|
||||
HUB75Native(uint8_t address, int sda, int scl, OLEDDISPLAY_GEOMETRY geometry, HW_I2C i2cBus);
|
||||
~HUB75Native();
|
||||
|
||||
// Redraw the whole panel from the BaseUI buffer (region-aware color expansion).
|
||||
void display() override;
|
||||
|
||||
void setDisplayBrightness(uint8_t brightness);
|
||||
|
||||
protected:
|
||||
int getBufferOffset(void) override { return 0; }
|
||||
|
||||
void sendCommand(uint8_t com) override;
|
||||
|
||||
bool connect() override;
|
||||
|
||||
private:
|
||||
rgb_matrix::RGBMatrix *matrix = nullptr;
|
||||
// Offscreen buffer for tear-free updates: display() draws here, then SwapOnVSync() atomically
|
||||
// presents it. Without this, writing into the live canvas while the refresh thread scans it
|
||||
// tears (worse when display() is contended during packet TX/RX).
|
||||
rgb_matrix::FrameCanvas *offscreen = nullptr;
|
||||
uint8_t brightness = HUB75_BRIGHTNESS_DEFAULT; // 1..100
|
||||
};
|
||||
|
||||
#endif // HAS_HUB75_NATIVE
|
||||
@@ -20,6 +20,11 @@ build_flags = ${native_base.build_flags}
|
||||
!pkg-config --libs openssl --silence-errors || :
|
||||
!pkg-config --cflags --libs sdl2 --silence-errors || :
|
||||
!pkg-config --cflags --libs libbsd-overlay --silence-errors || :
|
||||
; Optional HUB75 RGB-matrix support on Raspberry Pi via hzeller/rpi-rgb-led-matrix.
|
||||
; When the lib is installed (provides rgbmatrix.pc), these add its include/link flags and
|
||||
; __has_include(<led-matrix.h>) enables HAS_HUB75_NATIVE (see configuration.h). Absent -> no-op.
|
||||
!pkg-config --cflags rgbmatrix --silence-errors || :
|
||||
!pkg-config --libs rgbmatrix --silence-errors || :
|
||||
|
||||
[env:native-tft]
|
||||
extends = native_base
|
||||
@@ -246,6 +251,83 @@ build_flags = ${env:native-macos.build_flags}
|
||||
build_src_filter = ${env:native-macos.build_src_filter}
|
||||
lib_ignore = ${env:native-macos.lib_ignore}
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Native build for Windows (x86_64) via the MSYS2 UCRT64 MinGW-w64 toolchain.
|
||||
; Headless meshtasticd.exe running in SimRadio mode (`-s`). No BlueZ, libgpiod or
|
||||
; Linux I2C, and no UDP multicast: the framework's AsyncUDP.cpp is BSD sockets,
|
||||
; so HAS_UDP_MULTICAST stays unset here as it does on macOS.
|
||||
;
|
||||
; MSVC is not an option: platform-native's builder calls env.Tool("gcc") and the
|
||||
; firmware builds as gnu17/gnu++17 with GNU extensions throughout.
|
||||
;
|
||||
; Prerequisites (MSYS2, https://www.msys2.org/):
|
||||
; pacman -S --needed mingw-w64-ucrt-x86_64-{gcc,pkgconf,yaml-cpp,libuv,jsoncpp,openssl,libusb}
|
||||
;
|
||||
; argp is not packaged for MSYS2's mingw environments (msys/libargp links the
|
||||
; msys-2.0.dll emulation layer and can't be used for a native binary), yet
|
||||
; Arduino.h includes <argp.h> and main.cpp calls argp_parse(). Build it once from
|
||||
; source, the same dependency macOS meets with `brew install argp-standalone`:
|
||||
; git clone https://github.com/tom42/argp-standalone
|
||||
; cd argp-standalone && cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release .
|
||||
; cmake --build build
|
||||
; cp include/argp-standalone/argp.h /ucrt64/include/argp.h ; ships no install() rules
|
||||
; cp build/src/libargp-standalone.a /ucrt64/lib/libargp.a
|
||||
;
|
||||
; Build from any shell with /ucrt64/bin on PATH:
|
||||
; pio run -e native-windows
|
||||
; .pio/build/native-windows/meshtasticd.exe -s
|
||||
; ---------------------------------------------------------------------------
|
||||
[env:native-windows]
|
||||
extends = native_base
|
||||
build_flags = ${portduino_base.build_flags_common}
|
||||
-I variants/native/portduino
|
||||
; Our drop-in libpinedio-usb.h, replacing the libusb one: libusb can only reach
|
||||
; a device bound to WinUSB, which means Zadig on every machine. See
|
||||
; src/platform/portduino/windows/libpinedio_ch341dll.c.
|
||||
-I src/platform/portduino/windows/include
|
||||
-largp
|
||||
-lws2_32 ; GpsdSerial.cpp's TCP client
|
||||
-lbcrypt ; BCryptGenRandom() in HardwareRNG.cpp
|
||||
-liphlpapi ; GetAdaptersAddresses() host-MAC fallback in PortduinoGlue.cpp
|
||||
; libch341's libpinedio-usb.h pulls in libusb.h and so <windows.h>, which
|
||||
; collides with the Arduino API: winuser.h's `typedef struct tagINPUT INPUT` vs
|
||||
; the PinMode enumerator, and rpcndr.h's `typedef unsigned char boolean` vs
|
||||
; Arduino's `typedef bool boolean`. NOUSER and WIN32_LEAN_AND_MEAN keep those
|
||||
; headers out, NOMINMAX stops min/max being macroed over std::min/std::max.
|
||||
-DWIN32_LEAN_AND_MEAN
|
||||
-DNOMINMAX
|
||||
-DNOUSER
|
||||
-DNOGDI
|
||||
; yaml-cpp declares its API __declspec(dllimport) unless told the link is
|
||||
; static, leaving every YAML symbol undefined as __imp_*.
|
||||
-DYAML_CPP_STATIC_DEFINE
|
||||
; Headless: variant.h would otherwise default HAS_SCREEN to 1 and pull in the
|
||||
; screen renderer; EXCLUDE_SCREEN gates the `screen->...` hooks in the sensors.
|
||||
-DHAS_SCREEN=0
|
||||
-DMESHTASTIC_EXCLUDE_SCREEN=1
|
||||
!pkg-config --cflags --libs openssl --silence-errors || :
|
||||
build_unflags =
|
||||
-fPIC ; ignored on Windows, where all code is position-independent
|
||||
; Static link, so meshtasticd.exe stands alone and can't be hijacked by a stray
|
||||
; System32 DLL. PlatformIO only feeds build_flags to the compile step, hence the script.
|
||||
extra_scripts =
|
||||
${env.extra_scripts}
|
||||
post:extra_scripts/windows_link_flags.py
|
||||
; LinuxInput drives evdev; Panel_sdl/TFTDisplay pull LovyanGFX. Neither is needed
|
||||
; for the headless build.
|
||||
build_src_filter = ${native_base.build_src_filter}
|
||||
-<input/LinuxInput.cpp>
|
||||
-<input/LinuxInputImpl.cpp>
|
||||
-<graphics/Panel_sdl.cpp>
|
||||
-<graphics/TFTDisplay.cpp>
|
||||
; LovyanGFX includes <malloc.h> and is only needed by the TFT variants. The pine64
|
||||
; libch341 is the libusb backend that libpinedio_ch341dll.c replaces; keeping both
|
||||
; would duplicate every pinedio_* symbol.
|
||||
lib_ignore =
|
||||
${portduino_base.lib_ignore}
|
||||
LovyanGFX
|
||||
Pine libch341-spi Userspace library
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; WASM (Emscripten) - the portduino node compiled to WebAssembly, driving a real
|
||||
; LoRa radio over WebUSB through a CH341 (src/platform/portduino/wasm/). The same
|
||||
@@ -319,7 +401,7 @@ lib_ldf_mode = chain+
|
||||
lib_deps =
|
||||
${env.lib_deps}
|
||||
${radiolib_base.lib_deps}
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
# renovate: datasource=custom.pio depName=Melopero RV3028 packageName=melopero/library/Melopero RV3028
|
||||
melopero/Melopero RV3028@1.2.0
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
// DIO5 -> RFSW0_V1
|
||||
// DIO6 -> RFSW1_V2
|
||||
// DIO7 -> not connected on E80 module - note that GNSS and Wifi scanning are not possible.
|
||||
|
||||
#ifdef USE_LR1121
|
||||
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_LR11X0_DIO7, RADIOLIB_NC,
|
||||
RADIOLIB_NC};
|
||||
|
||||
@@ -30,13 +30,14 @@ static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||
END_OF_MODE_TABLE,
|
||||
// clang-format on
|
||||
};
|
||||
#endif
|
||||
|
||||
// LR2021 RF switch matrix following the standard Semtech / Seeed T1000-E reference topology.
|
||||
// DIO5 -> antenna path select (HIGH = sub-GHz LF)
|
||||
// DIO6 -> TX enable / HP PA select
|
||||
// DIO7 -> not connected (no GNSS on LR2021)
|
||||
// DIO8 -> RF front-end power enable
|
||||
|
||||
#ifdef USE_LR2021
|
||||
static const uint32_t lr20x0_rfswitch_dio_pins[] = {RADIOLIB_LR2021_DIO5, RADIOLIB_LR2021_DIO6, RADIOLIB_LR2021_DIO7,
|
||||
RADIOLIB_LR2021_DIO8, RADIOLIB_NC};
|
||||
|
||||
@@ -51,3 +52,4 @@ static const Module::RfSwitchMode_t lr20x0_rfswitch_table[] = {
|
||||
END_OF_MODE_TABLE,
|
||||
// clang-format on
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -121,9 +121,9 @@ NRF52 PRO MICRO PIN ASSIGNMENT
|
||||
#define USE_RF95
|
||||
#define USE_SX1268
|
||||
#define USE_LR1121
|
||||
#define USE_LR2021
|
||||
|
||||
// RF95 CONFIG
|
||||
|
||||
#define LORA_DIO0 (0 + 29) // P0.29 BUSY
|
||||
#define LORA_DIO1 (0 + 10) // P0.10 IRQ
|
||||
#define LORA_RESET (0 + 9) // P0.09 NRST
|
||||
@@ -156,7 +156,7 @@ NRF52 PRO MICRO PIN ASSIGNMENT
|
||||
#endif
|
||||
|
||||
// LR2021
|
||||
#define USE_LR2021
|
||||
#ifdef USE_LR2021
|
||||
#define LR2021_IRQ_PIN (0 + 10) // P0.10 IRQ
|
||||
#define LR2021_NRESET_PIN LORA_RESET // P0.09 NRST
|
||||
#define LR2021_BUSY_PIN (0 + 29) // P0.29 BUSY
|
||||
@@ -164,6 +164,7 @@ NRF52 PRO MICRO PIN ASSIGNMENT
|
||||
#define LR2021_DIO3_TCXO_VOLTAGE 1.8
|
||||
#define LR2021_DIO_AS_RF_SWITCH
|
||||
#define LR2021_IRQ_DIO_NUM 9 // DIO9 → P0.10
|
||||
#endif
|
||||
|
||||
// #define SX126X_MAX_POWER 8 set this if using a high-power board!
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ platform =
|
||||
extends = arduino_base
|
||||
platform_packages =
|
||||
; our custom Git version with C++17 support in platform.txt
|
||||
# renovate: datasource=git-refs depName=meshtastic/Adafruit_nRF52_Arduino packageName=meshtastic/Adafruit_nRF52_Arduino gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Adafruit_nRF52_Arduino packageName=https://github.com/meshtastic/Adafruit_nRF52_Arduino gitBranch=master
|
||||
platformio/framework-arduinoadafruitnrf52 @ https://github.com/meshtastic/Adafruit_nRF52_Arduino#0fd295f13203e93df19d578073646ec32f2bf45a
|
||||
; Don't renovate toolchain-gccarmnoneeabi
|
||||
platformio/toolchain-gccarmnoneeabi@~1.90301.0
|
||||
@@ -58,7 +58,7 @@ build_src_filter =
|
||||
lib_deps=
|
||||
${arduino_base.lib_deps}
|
||||
${radiolib_base.lib_deps}
|
||||
# renovate: datasource=github-tags depName=meshtastic/Crypto packageName=meshtastic/Crypto
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
|
||||
lib_ignore =
|
||||
|
||||
@@ -36,6 +36,19 @@ lib_deps =
|
||||
# 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
|
||||
|
||||
; RAK10729 WisMesh Repeater Mini V2 HP (RAK3401 + RAK19007 + RAK13302 + solar battery)
|
||||
[env:rak_wismesh_repeater_mini_hp]
|
||||
extends = env:rak3401-1watt
|
||||
custom_meshtastic_display_name = RAK WisMesh Repeater Mini V2 HP
|
||||
custom_meshtastic_images = rak3401.svg
|
||||
build_flags =
|
||||
${env:rak3401-1watt.build_flags}
|
||||
-D WISMESH_REPEATER_MINI_HP
|
||||
-DMESHTASTIC_EXCLUDE_GPS=1
|
||||
-DLOW_VDD_SYSTEMOFF_DELAY_MS=5000
|
||||
-DSAFE_VDD_VOLTAGE_THRESHOLD_MV=2900
|
||||
-DSAFE_VDD_VOLTAGE_THRESHOLD_HYST_MV=100
|
||||
|
||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||
; Note: as of 6/2013 the serial/bootloader based programming takes approximately 30 seconds
|
||||
;upload_protocol = jlink
|
||||
|
||||
@@ -23,6 +23,13 @@
|
||||
#include "wiring_constants.h"
|
||||
#include "wiring_digital.h"
|
||||
|
||||
#ifdef LOW_VDD_SYSTEMOFF_DELAY_MS
|
||||
#include "Arduino.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "power/PowerHAL.h"
|
||||
#include "sleep.h"
|
||||
#endif
|
||||
|
||||
const uint32_t g_ADigitalPinMap[] = {
|
||||
// P0
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||
@@ -40,3 +47,39 @@ void initVariant()
|
||||
pinMode(PIN_3V3_EN, OUTPUT);
|
||||
digitalWrite(PIN_3V3_EN, HIGH);
|
||||
}
|
||||
|
||||
#ifdef LOW_VDD_SYSTEMOFF_DELAY_MS
|
||||
void variant_nrf52LoopHook(void)
|
||||
{
|
||||
// If VDD stays unsafe for a while (brownout), force System OFF.
|
||||
// Skip when VBUS present to allow recovery while USB-powered.
|
||||
if (!powerHAL_isVBUSConnected()) {
|
||||
// Rate-limit VDD safety checks: powerHAL_isPowerLevelSafe() calls getVDDVoltage() each time.
|
||||
static constexpr uint32_t POWER_LEVEL_CHECK_INTERVAL_MS = 100;
|
||||
static uint32_t last_vdd_check_ms = 0;
|
||||
static bool last_power_level_safe = true;
|
||||
|
||||
const uint32_t now = millis();
|
||||
if (last_vdd_check_ms == 0 || (uint32_t)(now - last_vdd_check_ms) >= POWER_LEVEL_CHECK_INTERVAL_MS) {
|
||||
last_vdd_check_ms = now;
|
||||
last_power_level_safe = powerHAL_isPowerLevelSafe();
|
||||
}
|
||||
|
||||
// Do not use millis()==0 as a sentinel: at boot, millis() may be 0 while VDD is unsafe.
|
||||
static bool low_vdd_timer_armed = false;
|
||||
static uint32_t low_vdd_since_ms = 0;
|
||||
|
||||
if (!last_power_level_safe) {
|
||||
if (!low_vdd_timer_armed) {
|
||||
low_vdd_since_ms = now;
|
||||
low_vdd_timer_armed = true;
|
||||
}
|
||||
if ((uint32_t)(now - low_vdd_since_ms) >= (uint32_t)LOW_VDD_SYSTEMOFF_DELAY_MS) {
|
||||
cpuDeepSleep(portMAX_DELAY);
|
||||
}
|
||||
} else {
|
||||
low_vdd_timer_armed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -209,6 +209,13 @@ static const uint8_t SCK = PIN_SPI_SCK;
|
||||
#define AREF_VOLTAGE 3.0
|
||||
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0
|
||||
#define ADC_MULTIPLIER 1.73
|
||||
#if defined(LOW_VDD_SYSTEMOFF_DELAY_MS)
|
||||
#if !defined(OCV_ARRAY)
|
||||
#define OCV_ARRAY 4160, 4020, 3940, 3870, 3810, 3760, 3740, 3720, 3680, 3620, 2990
|
||||
#endif
|
||||
#define BATTERY_LPCOMP_INPUT NRF_LPCOMP_INPUT_3
|
||||
#define BATTERY_LPCOMP_THRESHOLD NRF_LPCOMP_REF_SUPPLY_5_8 // VDD=3.3V AIN3=5/8*VDD=2.06V VBAT=1.66*AIN3=3.41V
|
||||
#endif
|
||||
|
||||
#define RAK_4631 1
|
||||
|
||||
|
||||
@@ -44,6 +44,33 @@ lib_deps =
|
||||
# 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
|
||||
|
||||
; RAK10728 WisMesh Repeater Mini V2 (RAK4631 + RAK19003 + solar battery + GPS module)
|
||||
[env:rak_wismesh_repeater_mini]
|
||||
extends = env:rak4631
|
||||
custom_meshtastic_display_name = RAK WisMesh Repeater Mini V2
|
||||
custom_meshtastic_images = rak4631.svg
|
||||
build_flags =
|
||||
${env:rak4631.build_flags}
|
||||
-D WISMESH_REPEATER_MINI
|
||||
-DLOW_VDD_SYSTEMOFF_DELAY_MS=5000
|
||||
-DSAFE_VDD_VOLTAGE_THRESHOLD_MV=2900
|
||||
-DSAFE_VDD_VOLTAGE_THRESHOLD_HYST_MV=100
|
||||
|
||||
; RAK WisMesh Pocket V3 - rak4631 pin map + OLED; no ethernet (unlike env:rak4631)
|
||||
[env:rak_wismesh_pocket]
|
||||
extends = env:rak4631
|
||||
custom_meshtastic_display_name = RAK WisMesh Pocket V3
|
||||
custom_meshtastic_images = rak4631.svg
|
||||
build_flags =
|
||||
${env:rak4631.build_flags}
|
||||
-D WISMESH_POCKET
|
||||
-DLOW_VDD_SYSTEMOFF_DELAY_MS=5000
|
||||
-DSAFE_VDD_VOLTAGE_THRESHOLD_MV=2900
|
||||
-DSAFE_VDD_VOLTAGE_THRESHOLD_HYST_MV=100
|
||||
build_src_filter = ${env:rak4631.build_src_filter}
|
||||
-<mesh/eth/>
|
||||
-<mesh/api/>
|
||||
|
||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||
; Note: as of 6/2013 the serial/bootloader based programming takes approximately 30 seconds
|
||||
;upload_protocol = jlink
|
||||
|
||||
@@ -23,6 +23,13 @@
|
||||
#include "wiring_constants.h"
|
||||
#include "wiring_digital.h"
|
||||
|
||||
#ifdef LOW_VDD_SYSTEMOFF_DELAY_MS
|
||||
#include "Arduino.h"
|
||||
#include "FreeRTOS.h"
|
||||
#include "power/PowerHAL.h"
|
||||
#include "sleep.h"
|
||||
#endif
|
||||
|
||||
const uint32_t g_ADigitalPinMap[] = {
|
||||
// P0
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||
@@ -40,3 +47,48 @@ void initVariant()
|
||||
pinMode(PIN_3V3_EN, OUTPUT);
|
||||
digitalWrite(PIN_3V3_EN, HIGH);
|
||||
}
|
||||
|
||||
#ifdef LOW_VDD_SYSTEMOFF_DELAY_MS
|
||||
static bool lowVddSystemOff = false; // Set to true when VDD is unsafe for a while (brownout), forcing System OFF.
|
||||
// Strong override; must be noinline (see main-nrf52.cpp weak default).
|
||||
__attribute__((noinline)) bool variant_enableBatteryLpcompWake()
|
||||
{
|
||||
return lowVddSystemOff;
|
||||
}
|
||||
|
||||
// Hook called each nrf52Loop(); e.g. for low-VDD System OFF.
|
||||
void variant_nrf52LoopHook(void)
|
||||
{
|
||||
// If VDD stays unsafe for a while (brownout), force System OFF.
|
||||
// Skip when VBUS present to allow recovery while USB-powered.
|
||||
if (!powerHAL_isVBUSConnected()) {
|
||||
// Rate-limit VDD safety checks: powerHAL_isPowerLevelSafe() calls getVDDVoltage() each time.
|
||||
static constexpr uint32_t POWER_LEVEL_CHECK_INTERVAL_MS = 100;
|
||||
static uint32_t last_vdd_check_ms = 0;
|
||||
static bool last_power_level_safe = true;
|
||||
|
||||
const uint32_t now = millis();
|
||||
if (last_vdd_check_ms == 0 || (uint32_t)(now - last_vdd_check_ms) >= POWER_LEVEL_CHECK_INTERVAL_MS) {
|
||||
last_vdd_check_ms = now;
|
||||
last_power_level_safe = powerHAL_isPowerLevelSafe();
|
||||
}
|
||||
|
||||
// Do not use millis()==0 as a sentinel: at boot, millis() may be 0 while VDD is unsafe.
|
||||
static bool low_vdd_timer_armed = false;
|
||||
static uint32_t low_vdd_since_ms = 0;
|
||||
|
||||
if (!last_power_level_safe) {
|
||||
if (!low_vdd_timer_armed) {
|
||||
low_vdd_since_ms = now;
|
||||
low_vdd_timer_armed = true;
|
||||
}
|
||||
if ((uint32_t)(now - low_vdd_since_ms) >= (uint32_t)LOW_VDD_SYSTEMOFF_DELAY_MS) {
|
||||
lowVddSystemOff = true;
|
||||
cpuDeepSleep(portMAX_DELAY);
|
||||
}
|
||||
} else {
|
||||
low_vdd_timer_armed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -231,6 +231,11 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
|
||||
#define PIN_3V3_EN (34)
|
||||
#define WB_IO2 PIN_3V3_EN
|
||||
|
||||
#if defined(WISMESH_POCKET)
|
||||
// Pocket v3: P1.02 (GPIO 34) = GPS_PWR_EN
|
||||
#define PIN_GPS_EN PIN_3V3_EN
|
||||
#endif
|
||||
|
||||
// RAK1910 GPS module
|
||||
// If using the wisblock GPS module and pluged into Port A on WisBlock base
|
||||
// IO1 is hooked to PPS (pin 12 on header) = gpio 17
|
||||
@@ -253,9 +258,11 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
|
||||
#define PIN_BUZZER 21 // IO3 is PWM2
|
||||
// NEW: set this via protobuf instead!
|
||||
|
||||
// RAK4631 custom ringtone
|
||||
// RAK4631 custom ringtone (but not for Pocket - it uses the default ringtone)
|
||||
#ifndef WISMESH_POCKET
|
||||
#undef USERPREFS_RINGTONE_RTTTL
|
||||
#define USERPREFS_RINGTONE_RTTTL "Rak:d=32,o=5,b=200:b7,p,b7,4p,p"
|
||||
#endif
|
||||
|
||||
// Battery
|
||||
// The battery sense is hooked to pin A0 (5)
|
||||
@@ -282,7 +289,11 @@ SO GPIO 39/TXEN MAY NOT BE DEFINED FOR SUCCESSFUL OPERATION OF THE SX1262 - TG
|
||||
// VDD=3.3V AIN3=6/8*VDD=2.47V VBAT=1.66*AIN3=4.1V
|
||||
#define BATTERY_LPCOMP_THRESHOLD NRF_LPCOMP_REF_SUPPLY_11_16
|
||||
|
||||
#if defined(WISMESH_POCKET)
|
||||
#define HAS_ETHERNET 0
|
||||
#else
|
||||
#define HAS_ETHERNET 1
|
||||
#endif
|
||||
|
||||
#define RAK_4631 1
|
||||
|
||||
|
||||
@@ -23,3 +23,11 @@ build_flags = ${nrf52840_base.build_flags}
|
||||
-DRADIOLIB_EXCLUDE_LR2021=1
|
||||
-DMESHTASTIC_EXCLUDE_WIFI=1
|
||||
build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak_wismeshtag>
|
||||
|
||||
; RAK WisMesh Pod - same board as Tag (no user buttons on hardware; shares Tag pin map)
|
||||
[env:rak_wismesh_pod]
|
||||
extends = env:rak_wismeshtag
|
||||
custom_meshtastic_display_name = RAK WisMesh Pod
|
||||
build_flags =
|
||||
${env:rak_wismeshtag.build_flags}
|
||||
-D WISMESH_POD
|
||||
@@ -46,6 +46,14 @@ void initVariant()
|
||||
}
|
||||
|
||||
#ifdef LOW_VDD_SYSTEMOFF_DELAY_MS
|
||||
static bool lowVddSystemOff = false; // Set when brownout forces System OFF (enables LPCOMP wake).
|
||||
|
||||
// Strong override; must be noinline (see main-nrf52.cpp weak default).
|
||||
__attribute__((noinline)) bool variant_enableBatteryLpcompWake()
|
||||
{
|
||||
return lowVddSystemOff;
|
||||
}
|
||||
|
||||
void variant_nrf52LoopHook(void)
|
||||
{
|
||||
// If VDD stays unsafe for a while (brownout), force System OFF.
|
||||
@@ -72,6 +80,7 @@ void variant_nrf52LoopHook(void)
|
||||
low_vdd_timer_armed = true;
|
||||
}
|
||||
if ((uint32_t)(now - low_vdd_since_ms) >= (uint32_t)LOW_VDD_SYSTEMOFF_DELAY_MS) {
|
||||
lowVddSystemOff = true;
|
||||
cpuDeepSleep(portMAX_DELAY);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -55,10 +55,13 @@ extern "C" {
|
||||
/*
|
||||
* Buttons
|
||||
*/
|
||||
|
||||
#ifndef WISMESH_POD
|
||||
#define PIN_BUTTON1 9 // Pin for button on E-ink button module or IO expansion
|
||||
#define BUTTON_NEED_PULLUP
|
||||
#define PIN_BUTTON2 12
|
||||
#else
|
||||
#define HAS_BUTTON 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Analog pins
|
||||
|
||||
@@ -68,4 +68,6 @@ void initVariant()
|
||||
|
||||
pinMode(GPS_RTC_INT, OUTPUT);
|
||||
digitalWrite(GPS_RTC_INT, LOW);
|
||||
|
||||
pinMode(PIN_BUZZER, INPUT_PULLDOWN);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ lib_compat_mode = off
|
||||
lib_deps =
|
||||
${arduino_base.lib_deps}
|
||||
${radiolib_base.lib_deps}
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=master
|
||||
# renovate: datasource=git-refs depName=meshtastic/Crypto packageName=https://github.com/meshtastic/Crypto gitBranch=main
|
||||
https://github.com/meshtastic/Crypto/archive/591ff9a690e8168ccb7a36abde8d7783e448d395.zip
|
||||
; Cherry-picked sensor libs from environmental_base. The full
|
||||
; environmental_base pulls Adafruit_SSD1306 / GFX which need Arduino
|
||||
|
||||
@@ -19,4 +19,11 @@ build_unflags =
|
||||
${arduino_base.build_unflags}
|
||||
-DMESHTASTIC_EXCLUDE_XEDDSA=1
|
||||
|
||||
lib_deps =
|
||||
${stm32_base.lib_deps}
|
||||
# renovate: datasource=github-tags depName=STM32RTC packageName=stm32duino/STM32RTC
|
||||
https://github.com/stm32duino/STM32RTC/archive/refs/tags/1.9.0.zip
|
||||
# renovate: datasource=github-tags depName=STM32LowPower packageName=stm32duino/STM32LowPower
|
||||
https://github.com/stm32duino/STM32LowPower/archive/refs/tags/1.5.0.zip
|
||||
|
||||
upload_port = stlink
|
||||
|
||||
@@ -24,4 +24,7 @@ Do not expect a working Meshtastic device with this target.
|
||||
#define RAK3172
|
||||
#define SERIAL_PRINT_PORT 1
|
||||
|
||||
#define HAS_LSE 1
|
||||
#define STM32WL_LSE_DRIVE RCC_LSEDRIVE_LOW
|
||||
|
||||
#endif
|
||||
|
||||
@@ -14,13 +14,11 @@ build_flags =
|
||||
-Ivariants/stm32/russell
|
||||
-DPRIVATE_HW
|
||||
-DMESHTASTIC_EXCLUDE_AIR_QUALITY_SENSOR=1
|
||||
-DMESHTASTIC_EXCLUDE_RANGETEST=1
|
||||
-DMESHTASTIC_EXCLUDE_DETECTIONSENSOR=1
|
||||
-DMESHTASTIC_EXCLUDE_EXTERNALNOTIFICATION=1
|
||||
-DMESHTASTIC_EXCLUDE_POWERSTRESS=1
|
||||
-DMESHTASTIC_EXCLUDE_NEIGHBORINFO=1
|
||||
-DMESHTASTIC_EXCLUDE_TRACEROUTE=1
|
||||
-DMESHTASTIC_EXCLUDE_WAYPOINT=1
|
||||
lib_deps =
|
||||
${stm32_base.lib_deps}
|
||||
# renovate: datasource=custom.pio depName=Adafruit BME280 packageName=adafruit/library/Adafruit BME280 Library
|
||||
|
||||
@@ -26,6 +26,10 @@ build_flags =
|
||||
-DMESHTASTIC_EXCLUDE_WIFI=1
|
||||
-DMESHTASTIC_EXCLUDE_TZ=1 ; Exclude TZ to save some flash space.
|
||||
-DMESHTASTIC_EXCLUDE_XEDDSA=1 ; Individual STM32WL variants opt in after size validation.
|
||||
-DMESHTASTIC_EXCLUDE_PKT_HISTORY_HASH=1
|
||||
-DMESHTASTIC_EXCLUDE_RANGETEST=1
|
||||
-DMESHTASTIC_EXCLUDE_WAYPOINT=1
|
||||
-DMESHTASTIC_EXCLUDE_POWER_TELEMETRY=1
|
||||
-DSERIAL_RX_BUFFER_SIZE=256 ; For GPS - the default of 64 is too small.
|
||||
-DHAS_SCREEN=0 ; Always disable screen for STM32, it is not supported.
|
||||
;-DPIO_FRAMEWORK_ARDUINO_NANOLIB_FLOAT_PRINTF ; Enable this if enabling debugg logging. It is REQUIRED for at least traceroute debug prints - without it the length returned by printf ends up uninitialized.
|
||||
|
||||
Reference in New Issue
Block a user