Compare commits

...

13 Commits

Author SHA1 Message Date
renovate[bot]
b18742c211 Update libch341-spi-userspace digest to af9bc27 (#9472)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-01-29 06:25:07 -06:00
Ben Meadors
03084f6d3b PRs with needs-review still should get bot labeled 2026-01-29 06:23:52 -06:00
Ben Meadors
94d7b71aa8 Merge branch 'develop' 2026-01-29 06:12:11 -06:00
Ben Meadors
415686dd06 Trunk 2026-01-29 05:56:19 -06:00
Quency-D
b2f2f6b305 Add a watchdog module to meshsolar. (#9337)
* add watchdog module

* Restore the code in power.h

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
2026-01-28 20:41:27 -06:00
Jonathan Bennett
df400850c1 Undefine LED_BUILTIN where needed 2026-01-28 18:56:57 -06:00
Jonathan Bennett
6ab2f02dbc re-add unintentionally removed include 2026-01-28 17:53:12 -06:00
oscgonfer
d7d6fe7f0f Avoid short-circuit evaluation issues in Telemetry (#9467)
* Make sensors in telemetry non-definitory

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
2026-01-28 17:18:42 -06:00
Ben Meadors
d44ceb6eb2 Fix NimBLE deinit null check 2026-01-28 17:17:35 -06:00
Jonathan Bennett
4fd0a8276b Just set LED_BUILTIN universally to -1, as we don't use it. (#8830)
* Just set LED_BUILTIN universally to -1, as we don't use it.

* LUD_BUILTIN workarounds

* Squash the LED_BUILTINs that sneaked in

* Don't kill valid pin derfine
2026-01-28 17:09:13 -06:00
Jonathan Bennett
1d219a93ab Move input init to an init function in InputBroker (#9463)
* Move input init to an init function in iInputBroker

* Unbreak targets with EXCLUDE_INPUTBROKER

* Update src/input/InputBroker.cpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix conditional compilation for input broker

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Trunk

---------

Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-28 14:58:05 -06:00
Eric Severance
f710cd6ecb Support fully direct request/responses (#9455)
Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
2026-01-28 14:14:01 -06:00
Jonathan Bennett
571c1ac34c Initial serialModule cleanup (#9465)
* Initial serialModule cleanup

* Move SERIAL_PRINT_PORT definition to variant.h

* Add missed c6 check

* Update src/modules/SerialModule.cpp

Compile error for invalid SERIAL_PRINT_OBJECT value

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-28 14:08:32 -06:00
114 changed files with 500 additions and 497 deletions

View File

@@ -88,9 +88,10 @@ jobs:
# ───────────────────────────────────────────────────────────────────────── # ─────────────────────────────────────────────────────────────────────────
# Step 3: Auto-label PR type (bugfix/hardware-support/enhancement) # Step 3: Auto-label PR type (bugfix/hardware-support/enhancement)
# Only skip for spam/ai-generated; still classify needs-review PRs
# ───────────────────────────────────────────────────────────────────────── # ─────────────────────────────────────────────────────────────────────────
- name: Classify PR for labeling - name: Classify PR for labeling
if: steps.check-labels.outputs.skip_all != 'true' && steps.check-labels.outputs.has_type_label != 'true' && (steps.quality.outputs.response == 'ok' || steps.quality.outputs.response == '') if: steps.check-labels.outputs.skip_all != 'true' && steps.check-labels.outputs.has_type_label != 'true' && steps.quality.outputs.response != 'spam' && steps.quality.outputs.response != 'ai-generated'
uses: actions/ai-inference@v2 uses: actions/ai-inference@v2
id: classify id: classify
continue-on-error: true continue-on-error: true

View File

@@ -56,6 +56,7 @@ build_flags = -Wno-missing-field-initializers
-DMESHTASTIC_EXCLUDE_GENERIC_THREAD_MODULE=1 -DMESHTASTIC_EXCLUDE_GENERIC_THREAD_MODULE=1
-DMESHTASTIC_EXCLUDE_POWERMON=1 -DMESHTASTIC_EXCLUDE_POWERMON=1
-D MAX_THREADS=40 ; As we've split modules, we have more threads to manage -D MAX_THREADS=40 ; As we've split modules, we have more threads to manage
-DLED_BUILTIN=-1
#-DBUILD_EPOCH=$UNIX_TIME ; set in platformio-custom.py now #-DBUILD_EPOCH=$UNIX_TIME ; set in platformio-custom.py now
#-D OLED_PL=1 #-D OLED_PL=1
#-D DEBUG_HEAP=1 ; uncomment to add free heap space / memory leak debugging logs #-D DEBUG_HEAP=1 ; uncomment to add free heap space / memory leak debugging logs

View File

@@ -1,8 +1,59 @@
#include "InputBroker.h" #include "InputBroker.h"
#include "PowerFSM.h" // needed for event trigger #include "PowerFSM.h" // needed for event trigger
#include "configuration.h" #include "configuration.h"
#include "graphics/Screen.h"
#include "modules/ExternalNotificationModule.h" #include "modules/ExternalNotificationModule.h"
#if ARCH_PORTDUINO
#include "input/LinuxInputImpl.h"
#include "input/SeesawRotary.h"
#include "platform/portduino/PortduinoGlue.h"
#endif
#if !MESHTASTIC_EXCLUDE_INPUTBROKER
#include "input/ExpressLRSFiveWay.h"
#include "input/RotaryEncoderImpl.h"
#include "input/RotaryEncoderInterruptImpl1.h"
#include "input/SerialKeyboardImpl.h"
#include "input/UpDownInterruptImpl1.h"
#include "input/i2cButton.h"
#if HAS_TRACKBALL
#include "input/TrackballInterruptImpl1.h"
#endif
#include "modules/StatusLEDModule.h"
#if !MESHTASTIC_EXCLUDE_I2C
#include "input/cardKbI2cImpl.h"
#endif
#include "input/kbMatrixImpl.h"
#endif
#if HAS_BUTTON || defined(ARCH_PORTDUINO)
#include "input/ButtonThread.h"
#if defined(BUTTON_PIN_TOUCH)
ButtonThread *TouchButtonThread = nullptr;
#if defined(TTGO_T_ECHO_PLUS) && defined(PIN_EINK_EN)
static bool touchBacklightWasOn = false;
static bool touchBacklightActive = false;
#endif
#endif
#if defined(BUTTON_PIN) || defined(ARCH_PORTDUINO)
ButtonThread *UserButtonThread = nullptr;
#endif
#if defined(ALT_BUTTON_PIN)
ButtonThread *BackButtonThread = nullptr;
#endif
#if defined(CANCEL_BUTTON_PIN)
ButtonThread *CancelButtonThread = nullptr;
#endif
#endif
InputBroker *inputBroker = nullptr; InputBroker *inputBroker = nullptr;
InputBroker::InputBroker() InputBroker::InputBroker()
@@ -74,3 +125,262 @@ void InputBroker::pollSoonWorker(void *p)
vTaskDelete(NULL); vTaskDelete(NULL);
} }
#endif #endif
void InputBroker::Init()
{
#ifdef BUTTON_PIN
#ifdef ARCH_ESP32
#if ESP_ARDUINO_VERSION_MAJOR >= 3
#ifdef BUTTON_NEED_PULLUP
pinMode(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN, INPUT_PULLUP);
#else
pinMode(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN, INPUT); // default to BUTTON_PIN
#endif
#else
pinMode(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN, INPUT); // default to BUTTON_PIN
#ifdef BUTTON_NEED_PULLUP
gpio_pullup_en((gpio_num_t)(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN));
delay(10);
#endif
#ifdef BUTTON_NEED_PULLUP2
gpio_pullup_en((gpio_num_t)BUTTON_NEED_PULLUP2);
delay(10);
#endif
#endif
#endif
#endif
// buttons are now inputBroker, so have to come after setupModules
#if HAS_BUTTON
int pullup_sense = 0;
#ifdef INPUT_PULLUP_SENSE
// Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did
#ifdef BUTTON_SENSE_TYPE
pullup_sense = BUTTON_SENSE_TYPE;
#else
pullup_sense = INPUT_PULLUP_SENSE;
#endif
#endif
#if defined(ARCH_PORTDUINO)
if (portduino_config.userButtonPin.enabled) {
LOG_DEBUG("Use GPIO%02d for button", portduino_config.userButtonPin.pin);
UserButtonThread = new ButtonThread("UserButton");
if (screen) {
ButtonConfig config;
config.pinNumber = (uint8_t)portduino_config.userButtonPin.pin;
config.activeLow = true;
config.activePullup = true;
config.pullupSense = INPUT_PULLUP;
config.intRoutine = []() {
UserButtonThread->userButton.tick();
UserButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
concurrency::mainDelay.interruptFromISR(&higherWake);
};
config.singlePress = INPUT_BROKER_USER_PRESS;
config.longPress = INPUT_BROKER_SELECT;
UserButtonThread->initButton(config);
}
}
#endif
#ifdef BUTTON_PIN_TOUCH
TouchButtonThread = new ButtonThread("BackButton");
ButtonConfig touchConfig;
touchConfig.pinNumber = BUTTON_PIN_TOUCH;
touchConfig.activeLow = true;
touchConfig.activePullup = true;
touchConfig.pullupSense = pullup_sense;
touchConfig.intRoutine = []() {
TouchButtonThread->userButton.tick();
TouchButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
concurrency::mainDelay.interruptFromISR(&higherWake);
};
touchConfig.singlePress = INPUT_BROKER_NONE;
touchConfig.longPress = INPUT_BROKER_BACK;
#if defined(TTGO_T_ECHO_PLUS) && defined(PIN_EINK_EN)
// On T-Echo Plus the touch pad should only drive the backlight, not UI navigation/sounds
touchConfig.longPress = INPUT_BROKER_NONE;
touchConfig.suppressLeadUpSound = true;
touchConfig.onPress = []() {
touchBacklightWasOn = uiconfig.screen_brightness == 1;
if (!touchBacklightWasOn) {
digitalWrite(PIN_EINK_EN, HIGH);
}
touchBacklightActive = true;
};
touchConfig.onRelease = []() {
if (touchBacklightActive && !touchBacklightWasOn) {
digitalWrite(PIN_EINK_EN, LOW);
}
touchBacklightActive = false;
};
#endif
TouchButtonThread->initButton(touchConfig);
#endif
#if defined(CANCEL_BUTTON_PIN)
// Buttons. Moved here cause we need NodeDB to be initialized
CancelButtonThread = new ButtonThread("CancelButton");
ButtonConfig cancelConfig;
cancelConfig.pinNumber = CANCEL_BUTTON_PIN;
cancelConfig.activeLow = CANCEL_BUTTON_ACTIVE_LOW;
cancelConfig.activePullup = CANCEL_BUTTON_ACTIVE_PULLUP;
cancelConfig.pullupSense = pullup_sense;
cancelConfig.intRoutine = []() {
CancelButtonThread->userButton.tick();
CancelButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
concurrency::mainDelay.interruptFromISR(&higherWake);
};
cancelConfig.singlePress = INPUT_BROKER_CANCEL;
cancelConfig.longPress = INPUT_BROKER_SHUTDOWN;
cancelConfig.longPressTime = 4000;
CancelButtonThread->initButton(cancelConfig);
#endif
#if defined(ALT_BUTTON_PIN)
// Buttons. Moved here cause we need NodeDB to be initialized
BackButtonThread = new ButtonThread("BackButton");
ButtonConfig backConfig;
backConfig.pinNumber = ALT_BUTTON_PIN;
backConfig.activeLow = ALT_BUTTON_ACTIVE_LOW;
backConfig.activePullup = ALT_BUTTON_ACTIVE_PULLUP;
backConfig.pullupSense = pullup_sense;
backConfig.intRoutine = []() {
BackButtonThread->userButton.tick();
BackButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
concurrency::mainDelay.interruptFromISR(&higherWake);
};
backConfig.singlePress = INPUT_BROKER_ALT_PRESS;
backConfig.longPress = INPUT_BROKER_ALT_LONG;
backConfig.longPressTime = 500;
BackButtonThread->initButton(backConfig);
#endif
#if defined(BUTTON_PIN)
#if defined(USERPREFS_BUTTON_PIN)
int _pinNum = config.device.button_gpio ? config.device.button_gpio : USERPREFS_BUTTON_PIN;
#else
int _pinNum = config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN;
#endif
#ifndef BUTTON_ACTIVE_LOW
#define BUTTON_ACTIVE_LOW true
#endif
#ifndef BUTTON_ACTIVE_PULLUP
#define BUTTON_ACTIVE_PULLUP true
#endif
// Buttons. Moved here cause we need NodeDB to be initialized
// If your variant.h has a BUTTON_PIN defined, go ahead and define BUTTON_ACTIVE_LOW and BUTTON_ACTIVE_PULLUP
UserButtonThread = new ButtonThread("UserButton");
if (screen) {
ButtonConfig userConfig;
userConfig.pinNumber = (uint8_t)_pinNum;
userConfig.activeLow = BUTTON_ACTIVE_LOW;
userConfig.activePullup = BUTTON_ACTIVE_PULLUP;
userConfig.pullupSense = pullup_sense;
userConfig.intRoutine = []() {
UserButtonThread->userButton.tick();
UserButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
concurrency::mainDelay.interruptFromISR(&higherWake);
};
userConfig.singlePress = INPUT_BROKER_USER_PRESS;
userConfig.longPress = INPUT_BROKER_SELECT;
userConfig.longPressTime = 500;
userConfig.longLongPress = INPUT_BROKER_SHUTDOWN;
UserButtonThread->initButton(userConfig);
} else {
ButtonConfig userConfigNoScreen;
userConfigNoScreen.pinNumber = (uint8_t)_pinNum;
userConfigNoScreen.activeLow = BUTTON_ACTIVE_LOW;
userConfigNoScreen.activePullup = BUTTON_ACTIVE_PULLUP;
userConfigNoScreen.pullupSense = pullup_sense;
userConfigNoScreen.intRoutine = []() {
UserButtonThread->userButton.tick();
UserButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
concurrency::mainDelay.interruptFromISR(&higherWake);
};
userConfigNoScreen.singlePress = INPUT_BROKER_USER_PRESS;
userConfigNoScreen.longPress = INPUT_BROKER_NONE;
userConfigNoScreen.longPressTime = 500;
userConfigNoScreen.longLongPress = INPUT_BROKER_SHUTDOWN;
userConfigNoScreen.doublePress = INPUT_BROKER_SEND_PING;
userConfigNoScreen.triplePress = INPUT_BROKER_GPS_TOGGLE;
UserButtonThread->initButton(userConfigNoScreen);
}
#endif
#endif
#if (HAS_BUTTON || ARCH_PORTDUINO) && !MESHTASTIC_EXCLUDE_INPUTBROKER
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
#if defined(T_LORA_PAGER)
// use a special FSM based rotary encoder version for T-LoRa Pager
rotaryEncoderImpl = new RotaryEncoderImpl();
if (!rotaryEncoderImpl->init()) {
delete rotaryEncoderImpl;
rotaryEncoderImpl = nullptr;
}
#elif defined(INPUTDRIVER_ENCODER_TYPE) && (INPUTDRIVER_ENCODER_TYPE == 2)
upDownInterruptImpl1 = new UpDownInterruptImpl1();
if (!upDownInterruptImpl1->init()) {
delete upDownInterruptImpl1;
upDownInterruptImpl1 = nullptr;
}
#else
rotaryEncoderInterruptImpl1 = new RotaryEncoderInterruptImpl1();
if (!rotaryEncoderInterruptImpl1->init()) {
delete rotaryEncoderInterruptImpl1;
rotaryEncoderInterruptImpl1 = nullptr;
}
#endif
cardKbI2cImpl = new CardKbI2cImpl();
cardKbI2cImpl->init();
#if defined(M5STACK_UNITC6L)
i2cButton = new i2cButtonThread("i2cButtonThread");
#endif
#ifdef INPUTBROKER_MATRIX_TYPE
kbMatrixImpl = new KbMatrixImpl();
kbMatrixImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE
#ifdef INPUTBROKER_SERIAL_TYPE
aSerialKeyboardImpl = new SerialKeyboardImpl();
aSerialKeyboardImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE
}
#endif // HAS_BUTTON
#if ARCH_PORTDUINO
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR && portduino_config.i2cdev != "") {
seesawRotary = new SeesawRotary("SeesawRotary");
if (!seesawRotary->init()) {
delete seesawRotary;
seesawRotary = nullptr;
}
aLinuxInputImpl = new LinuxInputImpl();
aLinuxInputImpl->init();
}
#endif
#if !MESHTASTIC_EXCLUDE_INPUTBROKER && HAS_TRACKBALL
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
trackballInterruptImpl1 = new TrackballInterruptImpl1();
trackballInterruptImpl1->init(TB_DOWN, TB_UP, TB_LEFT, TB_RIGHT, TB_PRESS);
}
#endif
#ifdef INPUTBROKER_EXPRESSLRSFIVEWAY_TYPE
expressLRSFiveWayInput = new ExpressLRSFiveWay();
#endif
}

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include "Observer.h" #include "Observer.h"
#include "concurrency/OSThread.h"
#include "freertosinc.h" #include "freertosinc.h"
#ifdef InputBrokerDebug #ifdef InputBrokerDebug
@@ -76,6 +77,7 @@ class InputBroker : public Observable<const InputEvent *>
void queueInputEvent(const InputEvent *event); void queueInputEvent(const InputEvent *event);
void processInputEventQueue(); void processInputEventQueue();
#endif #endif
void Init();
protected: protected:
int handleInputEvent(const InputEvent *event); int handleInputEvent(const InputEvent *event);
@@ -90,3 +92,4 @@ class InputBroker : public Observable<const InputEvent *>
}; };
extern InputBroker *inputBroker; extern InputBroker *inputBroker;
extern bool runASAP;

View File

@@ -120,31 +120,6 @@ void printPartitionTable()
#endif // DEBUG_PARTITION_TABLE #endif // DEBUG_PARTITION_TABLE
#endif // ARCH_ESP32 #endif // ARCH_ESP32
#if HAS_BUTTON || defined(ARCH_PORTDUINO)
#include "input/ButtonThread.h"
#if defined(BUTTON_PIN_TOUCH)
ButtonThread *TouchButtonThread = nullptr;
#if defined(TTGO_T_ECHO_PLUS) && defined(PIN_EINK_EN)
static bool touchBacklightWasOn = false;
static bool touchBacklightActive = false;
#endif
#endif
#if defined(BUTTON_PIN) || defined(ARCH_PORTDUINO)
ButtonThread *UserButtonThread = nullptr;
#endif
#if defined(ALT_BUTTON_PIN)
ButtonThread *BackButtonThread = nullptr;
#endif
#if defined(CANCEL_BUTTON_PIN)
ButtonThread *CancelButtonThread = nullptr;
#endif
#endif
#include "AmbientLightingThread.h" #include "AmbientLightingThread.h"
#include "PowerFSMThread.h" #include "PowerFSMThread.h"
@@ -509,30 +484,6 @@ void setup()
LOG_INFO("Wait for peripherals to stabilize"); LOG_INFO("Wait for peripherals to stabilize");
delay(PERIPHERAL_WARMUP_MS); delay(PERIPHERAL_WARMUP_MS);
#endif #endif
#ifdef BUTTON_PIN
#ifdef ARCH_ESP32
#if ESP_ARDUINO_VERSION_MAJOR >= 3
#ifdef BUTTON_NEED_PULLUP
pinMode(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN, INPUT_PULLUP);
#else
pinMode(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN, INPUT); // default to BUTTON_PIN
#endif
#else
pinMode(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN, INPUT); // default to BUTTON_PIN
#ifdef BUTTON_NEED_PULLUP
gpio_pullup_en((gpio_num_t)(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN));
delay(10);
#endif
#ifdef BUTTON_NEED_PULLUP2
gpio_pullup_en((gpio_num_t)BUTTON_NEED_PULLUP2);
delay(10);
#endif
#endif
#endif
#endif
initSPI(); initSPI();
OSThread::setup(); OSThread::setup();
@@ -999,180 +950,9 @@ void setup()
nodeDB->hasWarned = true; nodeDB->hasWarned = true;
} }
#endif #endif
#if !MESHTASTIC_EXCLUDE_INPUTBROKER
// buttons are now inputBroker, so have to come after setupModules if (inputBroker)
#if HAS_BUTTON inputBroker->Init();
int pullup_sense = 0;
#ifdef INPUT_PULLUP_SENSE
// Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did
#ifdef BUTTON_SENSE_TYPE
pullup_sense = BUTTON_SENSE_TYPE;
#else
pullup_sense = INPUT_PULLUP_SENSE;
#endif
#endif
#if defined(ARCH_PORTDUINO)
if (portduino_config.userButtonPin.enabled) {
LOG_DEBUG("Use GPIO%02d for button", portduino_config.userButtonPin.pin);
UserButtonThread = new ButtonThread("UserButton");
if (screen) {
ButtonConfig config;
config.pinNumber = (uint8_t)portduino_config.userButtonPin.pin;
config.activeLow = true;
config.activePullup = true;
config.pullupSense = INPUT_PULLUP;
config.intRoutine = []() {
UserButtonThread->userButton.tick();
UserButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake);
};
config.singlePress = INPUT_BROKER_USER_PRESS;
config.longPress = INPUT_BROKER_SELECT;
UserButtonThread->initButton(config);
}
}
#endif
#ifdef BUTTON_PIN_TOUCH
TouchButtonThread = new ButtonThread("BackButton");
ButtonConfig touchConfig;
touchConfig.pinNumber = BUTTON_PIN_TOUCH;
touchConfig.activeLow = true;
touchConfig.activePullup = true;
touchConfig.pullupSense = pullup_sense;
touchConfig.intRoutine = []() {
TouchButtonThread->userButton.tick();
TouchButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake);
};
touchConfig.singlePress = INPUT_BROKER_NONE;
touchConfig.longPress = INPUT_BROKER_BACK;
#if defined(TTGO_T_ECHO_PLUS) && defined(PIN_EINK_EN)
// On T-Echo Plus the touch pad should only drive the backlight, not UI navigation/sounds
touchConfig.longPress = INPUT_BROKER_NONE;
touchConfig.suppressLeadUpSound = true;
touchConfig.onPress = []() {
touchBacklightWasOn = uiconfig.screen_brightness == 1;
if (!touchBacklightWasOn) {
digitalWrite(PIN_EINK_EN, HIGH);
}
touchBacklightActive = true;
};
touchConfig.onRelease = []() {
if (touchBacklightActive && !touchBacklightWasOn) {
digitalWrite(PIN_EINK_EN, LOW);
}
touchBacklightActive = false;
};
#endif
TouchButtonThread->initButton(touchConfig);
#endif
#if defined(CANCEL_BUTTON_PIN)
// Buttons. Moved here cause we need NodeDB to be initialized
CancelButtonThread = new ButtonThread("CancelButton");
ButtonConfig cancelConfig;
cancelConfig.pinNumber = CANCEL_BUTTON_PIN;
cancelConfig.activeLow = CANCEL_BUTTON_ACTIVE_LOW;
cancelConfig.activePullup = CANCEL_BUTTON_ACTIVE_PULLUP;
cancelConfig.pullupSense = pullup_sense;
cancelConfig.intRoutine = []() {
CancelButtonThread->userButton.tick();
CancelButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake);
};
cancelConfig.singlePress = INPUT_BROKER_CANCEL;
cancelConfig.longPress = INPUT_BROKER_SHUTDOWN;
cancelConfig.longPressTime = 4000;
CancelButtonThread->initButton(cancelConfig);
#endif
#if defined(ALT_BUTTON_PIN)
// Buttons. Moved here cause we need NodeDB to be initialized
BackButtonThread = new ButtonThread("BackButton");
ButtonConfig backConfig;
backConfig.pinNumber = ALT_BUTTON_PIN;
backConfig.activeLow = ALT_BUTTON_ACTIVE_LOW;
backConfig.activePullup = ALT_BUTTON_ACTIVE_PULLUP;
backConfig.pullupSense = pullup_sense;
backConfig.intRoutine = []() {
BackButtonThread->userButton.tick();
BackButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake);
};
backConfig.singlePress = INPUT_BROKER_ALT_PRESS;
backConfig.longPress = INPUT_BROKER_ALT_LONG;
backConfig.longPressTime = 500;
BackButtonThread->initButton(backConfig);
#endif
#if defined(BUTTON_PIN)
#if defined(USERPREFS_BUTTON_PIN)
int _pinNum = config.device.button_gpio ? config.device.button_gpio : USERPREFS_BUTTON_PIN;
#else
int _pinNum = config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN;
#endif
#ifndef BUTTON_ACTIVE_LOW
#define BUTTON_ACTIVE_LOW true
#endif
#ifndef BUTTON_ACTIVE_PULLUP
#define BUTTON_ACTIVE_PULLUP true
#endif
// Buttons. Moved here cause we need NodeDB to be initialized
// If your variant.h has a BUTTON_PIN defined, go ahead and define BUTTON_ACTIVE_LOW and BUTTON_ACTIVE_PULLUP
UserButtonThread = new ButtonThread("UserButton");
if (screen) {
ButtonConfig userConfig;
userConfig.pinNumber = (uint8_t)_pinNum;
userConfig.activeLow = BUTTON_ACTIVE_LOW;
userConfig.activePullup = BUTTON_ACTIVE_PULLUP;
userConfig.pullupSense = pullup_sense;
userConfig.intRoutine = []() {
UserButtonThread->userButton.tick();
UserButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake);
};
userConfig.singlePress = INPUT_BROKER_USER_PRESS;
userConfig.longPress = INPUT_BROKER_SELECT;
userConfig.longPressTime = 500;
userConfig.longLongPress = INPUT_BROKER_SHUTDOWN;
UserButtonThread->initButton(userConfig);
} else {
ButtonConfig userConfigNoScreen;
userConfigNoScreen.pinNumber = (uint8_t)_pinNum;
userConfigNoScreen.activeLow = BUTTON_ACTIVE_LOW;
userConfigNoScreen.activePullup = BUTTON_ACTIVE_PULLUP;
userConfigNoScreen.pullupSense = pullup_sense;
userConfigNoScreen.intRoutine = []() {
UserButtonThread->userButton.tick();
UserButtonThread->setIntervalFromNow(0);
runASAP = true;
BaseType_t higherWake = 0;
mainDelay.interruptFromISR(&higherWake);
};
userConfigNoScreen.singlePress = INPUT_BROKER_USER_PRESS;
userConfigNoScreen.longPress = INPUT_BROKER_NONE;
userConfigNoScreen.longPressTime = 500;
userConfigNoScreen.longLongPress = INPUT_BROKER_SHUTDOWN;
userConfigNoScreen.doublePress = INPUT_BROKER_SEND_PING;
userConfigNoScreen.triplePress = INPUT_BROKER_GPS_TOGGLE;
UserButtonThread->initButton(userConfigNoScreen);
}
#endif
#endif #endif
#ifdef MESHTASTIC_INCLUDE_NICHE_GRAPHICS #ifdef MESHTASTIC_INCLUDE_NICHE_GRAPHICS

View File

@@ -17,12 +17,6 @@
ErrorCode ReliableRouter::send(meshtastic_MeshPacket *p) ErrorCode ReliableRouter::send(meshtastic_MeshPacket *p)
{ {
if (p->want_ack) { if (p->want_ack) {
// If someone asks for acks on broadcast, we need the hop limit to be at least one, so that first node that receives our
// message will rebroadcast. But asking for hop_limit 0 in that context means the client app has no preference on hop
// counts and we want this message to get through the whole mesh, so use the default.
if (p->hop_limit == 0) {
p->hop_limit = Default::getConfiguredOrDefaultHopLimit(config.lora.hop_limit);
}
DEBUG_HEAP_BEFORE; DEBUG_HEAP_BEFORE;
auto copy = packetPool.allocCopy(*p); auto copy = packetPool.allocCopy(*p);
DEBUG_HEAP_AFTER("ReliableRouter::send", copy); DEBUG_HEAP_AFTER("ReliableRouter::send", copy);

View File

@@ -266,6 +266,13 @@ ErrorCode Router::sendLocal(meshtastic_MeshPacket *p, RxSource src)
} }
} }
// If someone asks for acks on broadcast, we need the hop limit to be at least one, so that first node that receives our
// message will rebroadcast. But asking for hop_limit 0 in that context means the client app has no preference on hop
// counts and we want this message to get through the whole mesh, so use the default.
if (src == RX_SRC_USER && p->want_ack && p->hop_limit == 0) {
p->hop_limit = Default::getConfiguredOrDefaultHopLimit(config.lora.hop_limit);
}
return send(p); return send(p);
} }
} }

View File

@@ -1,24 +1,8 @@
#include "configuration.h" #include "configuration.h"
#if !MESHTASTIC_EXCLUDE_INPUTBROKER #if !MESHTASTIC_EXCLUDE_INPUTBROKER
#include "buzz/BuzzerFeedbackThread.h" #include "buzz/BuzzerFeedbackThread.h"
#include "input/ExpressLRSFiveWay.h"
#include "input/InputBroker.h"
#include "input/RotaryEncoderImpl.h"
#include "input/RotaryEncoderInterruptImpl1.h"
#include "input/SerialKeyboardImpl.h"
#include "input/UpDownInterruptImpl1.h"
#include "input/i2cButton.h"
#include "modules/SystemCommandsModule.h"
#if HAS_TRACKBALL
#include "input/TrackballInterruptImpl1.h"
#endif
#include "modules/StatusLEDModule.h" #include "modules/StatusLEDModule.h"
#include "modules/SystemCommandsModule.h"
#if !MESHTASTIC_EXCLUDE_I2C
#include "input/cardKbI2cImpl.h"
#endif
#include "input/kbMatrixImpl.h"
#endif #endif
#if !MESHTASTIC_EXCLUDE_PKI #if !MESHTASTIC_EXCLUDE_PKI
#include "KeyVerificationModule.h" #include "KeyVerificationModule.h"
@@ -59,8 +43,6 @@
#include "modules/WaypointModule.h" #include "modules/WaypointModule.h"
#endif #endif
#if ARCH_PORTDUINO #if ARCH_PORTDUINO
#include "input/LinuxInputImpl.h"
#include "input/SeesawRotary.h"
#include "modules/Telemetry/HostMetrics.h" #include "modules/Telemetry/HostMetrics.h"
#if !MESHTASTIC_EXCLUDE_STOREFORWARD #if !MESHTASTIC_EXCLUDE_STOREFORWARD
#include "modules/StoreForwardModule.h" #include "modules/StoreForwardModule.h"
@@ -109,6 +91,9 @@
#include "modules/DropzoneModule.h" #include "modules/DropzoneModule.h"
#endif #endif
#if defined(HAS_HARDWARE_WATCHDOG)
#include "watchdog/watchdogThread.h"
#endif
/** /**
* Create module instances here. If you are adding a new module, you must 'new' it here (or somewhere else) * Create module instances here. If you are adding a new module, you must 'new' it here (or somewhere else)
*/ */
@@ -179,63 +164,6 @@ void setupModules()
#endif #endif
// Example: Put your module here // Example: Put your module here
// new ReplyModule(); // new ReplyModule();
#if (HAS_BUTTON || ARCH_PORTDUINO) && !MESHTASTIC_EXCLUDE_INPUTBROKER
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
#if defined(T_LORA_PAGER)
// use a special FSM based rotary encoder version for T-LoRa Pager
rotaryEncoderImpl = new RotaryEncoderImpl();
if (!rotaryEncoderImpl->init()) {
delete rotaryEncoderImpl;
rotaryEncoderImpl = nullptr;
}
#elif defined(INPUTDRIVER_ENCODER_TYPE) && (INPUTDRIVER_ENCODER_TYPE == 2)
upDownInterruptImpl1 = new UpDownInterruptImpl1();
if (!upDownInterruptImpl1->init()) {
delete upDownInterruptImpl1;
upDownInterruptImpl1 = nullptr;
}
#else
rotaryEncoderInterruptImpl1 = new RotaryEncoderInterruptImpl1();
if (!rotaryEncoderInterruptImpl1->init()) {
delete rotaryEncoderInterruptImpl1;
rotaryEncoderInterruptImpl1 = nullptr;
}
#endif
cardKbI2cImpl = new CardKbI2cImpl();
cardKbI2cImpl->init();
#if defined(M5STACK_UNITC6L)
i2cButton = new i2cButtonThread("i2cButtonThread");
#endif
#ifdef INPUTBROKER_MATRIX_TYPE
kbMatrixImpl = new KbMatrixImpl();
kbMatrixImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE
#ifdef INPUTBROKER_SERIAL_TYPE
aSerialKeyboardImpl = new SerialKeyboardImpl();
aSerialKeyboardImpl->init();
#endif // INPUTBROKER_MATRIX_TYPE
}
#endif // HAS_BUTTON
#if ARCH_PORTDUINO
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR && portduino_config.i2cdev != "") {
seesawRotary = new SeesawRotary("SeesawRotary");
if (!seesawRotary->init()) {
delete seesawRotary;
seesawRotary = nullptr;
}
aLinuxInputImpl = new LinuxInputImpl();
aLinuxInputImpl->init();
}
#endif
#if !MESHTASTIC_EXCLUDE_INPUTBROKER && HAS_TRACKBALL
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
trackballInterruptImpl1 = new TrackballInterruptImpl1();
trackballInterruptImpl1->init(TB_DOWN, TB_UP, TB_LEFT, TB_RIGHT, TB_PRESS);
}
#endif
#ifdef INPUTBROKER_EXPRESSLRSFIVEWAY_TYPE
expressLRSFiveWayInput = new ExpressLRSFiveWay();
#endif
#if HAS_SCREEN && !MESHTASTIC_EXCLUDE_CANNEDMESSAGES #if HAS_SCREEN && !MESHTASTIC_EXCLUDE_CANNEDMESSAGES
if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) { if (config.display.displaymode != meshtastic_Config_DisplayConfig_DisplayMode_COLOR) {
cannedMessageModule = new CannedMessageModule(); cannedMessageModule = new CannedMessageModule();
@@ -304,6 +232,9 @@ void setupModules()
#if !MESHTASTIC_EXCLUDE_RANGETEST && !MESHTASTIC_EXCLUDE_GPS #if !MESHTASTIC_EXCLUDE_RANGETEST && !MESHTASTIC_EXCLUDE_GPS
if (moduleConfig.has_range_test && moduleConfig.range_test.enabled) if (moduleConfig.has_range_test && moduleConfig.range_test.enabled)
new RangeTestModule(); new RangeTestModule();
#endif
#if defined(HAS_HARDWARE_WATCHDOG)
watchdogThread = new WatchdogThread();
#endif #endif
// NOTE! This module must be added LAST because it likes to check for replies from other modules and avoid sending extra // NOTE! This module must be added LAST because it likes to check for replies from other modules and avoid sending extra
// acks // acks

View File

@@ -67,6 +67,8 @@ uint8_t RoutingModule::getHopLimitForResponse(const meshtastic_MeshPacket &mp)
#if !(EVENTMODE) // This falls through to the default. #if !(EVENTMODE) // This falls through to the default.
return hopsUsed; // If the request used more hops than the limit, use the same amount of hops return hopsUsed; // If the request used more hops than the limit, use the same amount of hops
#endif #endif
} else if (mp.hop_start == 0) {
return 0; // The requesting node wanted 0 hops, so the response also uses a direct/local path.
} else if ((uint8_t)(hopsUsed + 2) < config.lora.hop_limit) { } else if ((uint8_t)(hopsUsed + 2) < config.lora.hop_limit) {
return hopsUsed + 2; // Use only the amount of hops needed with some margin as the way back may be different return hopsUsed + 2; // Use only the amount of hops needed with some margin as the way back may be different
} }

View File

@@ -63,29 +63,26 @@
SerialModule *serialModule; SerialModule *serialModule;
SerialModuleRadio *serialModuleRadio; SerialModuleRadio *serialModuleRadio;
#if defined(TTGO_T_ECHO) || defined(TTGO_T_ECHO_PLUS) || defined(CANARYONE) || defined(MESHLINK) || \ #ifndef SERIAL_PRINT_PORT
defined(ELECROW_ThinkNode_M1) || defined(ELECROW_ThinkNode_M4) || defined(ELECROW_ThinkNode_M5) || \ #define SERIAL_PRINT_PORT 2
defined(HELTEC_MESH_SOLAR) || defined(T_ECHO_LITE) || defined(ELECROW_ThinkNode_M3) || defined(MUZI_BASE)
SerialModule::SerialModule() : StreamAPI(&Serial), concurrency::OSThread("Serial")
{
api_type = TYPE_SERIAL;
}
static Print *serialPrint = &Serial;
#elif defined(CONFIG_IDF_TARGET_ESP32C6) || defined(RAK3172) || defined(EBYTE_E77_MBL)
SerialModule::SerialModule() : StreamAPI(&Serial1), concurrency::OSThread("Serial")
{
api_type = TYPE_SERIAL;
}
static Print *serialPrint = &Serial1;
#else
SerialModule::SerialModule() : StreamAPI(&Serial2), concurrency::OSThread("Serial")
{
api_type = TYPE_SERIAL;
}
static Print *serialPrint = &Serial2;
#endif #endif
#if SERIAL_PRINT_PORT == 0
#define SERIAL_PRINT_OBJECT Serial
#elif SERIAL_PRINT_PORT == 1
#define SERIAL_PRINT_OBJECT Serial1
#elif SERIAL_PRINT_PORT == 2
#define SERIAL_PRINT_OBJECT Serial2
#else
#error "Unsupported SERIAL_PRINT_PORT value. Allowed values are 0, 1, or 2."
#endif
SerialModule::SerialModule() : StreamAPI(&SERIAL_PRINT_OBJECT), concurrency::OSThread("Serial")
{
api_type = TYPE_SERIAL;
}
static Print *serialPrint = &SERIAL_PRINT_OBJECT;
char serialBytes[512]; char serialBytes[512];
size_t serialPayloadSize; size_t serialPayloadSize;
@@ -205,9 +202,7 @@ int32_t SerialModule::runOnce()
Serial.begin(baud); Serial.begin(baud);
Serial.setTimeout(moduleConfig.serial.timeout > 0 ? moduleConfig.serial.timeout : TIMEOUT); Serial.setTimeout(moduleConfig.serial.timeout > 0 ? moduleConfig.serial.timeout : TIMEOUT);
} }
#elif !defined(TTGO_T_ECHO) && !defined(TTGO_T_ECHO_PLUS) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && \ #elif SERIAL_PRINT_PORT != 0
!defined(MESHLINK) && !defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M3) && !defined(ELECROW_ThinkNode_M4) && \
!defined(ELECROW_ThinkNode_M5) && !defined(MUZI_BASE)
if (moduleConfig.serial.rxd && moduleConfig.serial.txd) { if (moduleConfig.serial.rxd && moduleConfig.serial.txd) {
#ifdef ARCH_RP2040 #ifdef ARCH_RP2040
@@ -264,9 +259,7 @@ int32_t SerialModule::runOnce()
} }
} }
#if !defined(TTGO_T_ECHO) && !defined(TTGO_T_ECHO_PLUS) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && !defined(MESHLINK) && \ #if SERIAL_PRINT_PORT != 0
!defined(ELECROW_ThinkNode_M1) && !defined(ELECROW_ThinkNode_M3) && !defined(ELECROW_ThinkNode_M4) && \
!defined(ELECROW_ThinkNode_M5) && !defined(MUZI_BASE)
else if ((moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_WS85)) { else if ((moduleConfig.serial.mode == meshtastic_ModuleConfig_SerialConfig_Serial_Mode_WS85)) {
processWXSerial(); processWXSerial();
@@ -540,11 +533,7 @@ ParsedLine parseLine(const char *line)
*/ */
void SerialModule::processWXSerial() void SerialModule::processWXSerial()
{ {
#if !defined(TTGO_T_ECHO) && !defined(TTGO_T_ECHO_PLUS) && !defined(T_ECHO_LITE) && !defined(CANARYONE) && \ #if SERIAL_PRINT_PORT != 0 && !defined(ARCH_STM32WL) && !defined(CONFIG_IDF_TARGET_ESP32C6)
!defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(MESHLINK) && !defined(ELECROW_ThinkNode_M1) && \
!defined(ELECROW_ThinkNode_M3) && \
!defined(ELECROW_ThinkNode_M4) && \
!defined(ELECROW_ThinkNode_M5) && !defined(ARCH_STM32WL) && !defined(MUZI_BASE)
static unsigned int lastAveraged = 0; static unsigned int lastAveraged = 0;
static unsigned int averageIntervalMillis = 300000; // 5 minutes hard coded. static unsigned int averageIntervalMillis = 300000; // 5 minutes hard coded.

View File

@@ -529,37 +529,46 @@ bool EnvironmentTelemetryModule::handleReceivedProtobuf(const meshtastic_MeshPac
bool EnvironmentTelemetryModule::getEnvironmentTelemetry(meshtastic_Telemetry *m) bool EnvironmentTelemetryModule::getEnvironmentTelemetry(meshtastic_Telemetry *m)
{ {
bool valid = true; bool valid = false;
bool hasSensor = false; bool hasSensor = false;
// getMetrics() doesn't always get evaluated because of
// short-circuit evaluation rules in c++
bool get_metrics;
m->time = getTime(); m->time = getTime();
m->which_variant = meshtastic_Telemetry_environment_metrics_tag; m->which_variant = meshtastic_Telemetry_environment_metrics_tag;
m->variant.environment_metrics = meshtastic_EnvironmentMetrics_init_zero; m->variant.environment_metrics = meshtastic_EnvironmentMetrics_init_zero;
for (TelemetrySensor *sensor : sensors) { for (TelemetrySensor *sensor : sensors) {
valid = valid && sensor->getMetrics(m); get_metrics = sensor->getMetrics(m); // avoid short-circuit evaluation rules
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
} }
#ifndef T1000X_SENSOR_EN #ifndef T1000X_SENSOR_EN
if (ina219Sensor.hasSensor()) { if (ina219Sensor.hasSensor()) {
valid = valid && ina219Sensor.getMetrics(m); get_metrics = ina219Sensor.getMetrics(m);
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
} }
if (ina260Sensor.hasSensor()) { if (ina260Sensor.hasSensor()) {
valid = valid && ina260Sensor.getMetrics(m); get_metrics = ina260Sensor.getMetrics(m);
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
} }
if (ina3221Sensor.hasSensor()) { if (ina3221Sensor.hasSensor()) {
valid = valid && ina3221Sensor.getMetrics(m); get_metrics = ina3221Sensor.getMetrics(m);
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
} }
if (max17048Sensor.hasSensor()) { if (max17048Sensor.hasSensor()) {
valid = valid && max17048Sensor.getMetrics(m); get_metrics = max17048Sensor.getMetrics(m);
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
} }
#endif #endif
#ifdef HAS_RAKPROT #ifdef HAS_RAKPROT
valid = valid && rak9154Sensor.getMetrics(m); get_metrics = rak9154Sensor.getMetrics(m);
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
#endif #endif
return valid && hasSensor; return valid && hasSensor;

View File

@@ -168,18 +168,21 @@ bool HealthTelemetryModule::handleReceivedProtobuf(const meshtastic_MeshPacket &
bool HealthTelemetryModule::getHealthTelemetry(meshtastic_Telemetry *m) bool HealthTelemetryModule::getHealthTelemetry(meshtastic_Telemetry *m)
{ {
bool valid = true; bool valid = false;
bool hasSensor = false; bool hasSensor = false;
bool get_metrics;
m->time = getTime(); m->time = getTime();
m->which_variant = meshtastic_Telemetry_health_metrics_tag; m->which_variant = meshtastic_Telemetry_health_metrics_tag;
m->variant.health_metrics = meshtastic_HealthMetrics_init_zero; m->variant.health_metrics = meshtastic_HealthMetrics_init_zero;
if (max30102Sensor.hasSensor()) { if (max30102Sensor.hasSensor()) {
valid = valid && max30102Sensor.getMetrics(m); get_metrics = max30102Sensor.getMetrics(m);
valid = valid || get_metrics; // avoid short-circuit evaluation rules
hasSensor = true; hasSensor = true;
} }
if (mlx90614Sensor.hasSensor()) { if (mlx90614Sensor.hasSensor()) {
valid = valid && mlx90614Sensor.getMetrics(m); get_metrics = mlx90614Sensor.getMetrics(m);
valid = valid || get_metrics;
hasSensor = true; hasSensor = true;
} }

View File

@@ -686,6 +686,9 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
#ifdef NIMBLE_TWO #ifdef NIMBLE_TWO
if (ble->isDeInit) if (ble->isDeInit)
return; return;
#else
if (nimbleBluetooth && nimbleBluetooth->isDeInit)
return;
#endif #endif
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED); meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED);

View File

@@ -0,0 +1,37 @@
#include "watchdogThread.h"
#include "configuration.h"
#ifdef HAS_HARDWARE_WATCHDOG
WatchdogThread *watchdogThread;
WatchdogThread::WatchdogThread() : OSThread("Watchdog")
{
setup();
}
void WatchdogThread::feedDog(void)
{
digitalWrite(HARDWARE_WATCHDOG_DONE, HIGH);
delay(1);
digitalWrite(HARDWARE_WATCHDOG_DONE, LOW);
}
int32_t WatchdogThread::runOnce()
{
LOG_DEBUG("Feeding hardware watchdog");
feedDog();
return HARDWARE_WATCHDOG_TIMEOUT_MS;
}
bool WatchdogThread::setup()
{
LOG_DEBUG("init hardware watchdog");
pinMode(HARDWARE_WATCHDOG_WAKE, INPUT);
pinMode(HARDWARE_WATCHDOG_DONE, OUTPUT);
delay(1);
digitalWrite(HARDWARE_WATCHDOG_DONE, LOW);
delay(1);
feedDog();
return true;
}
#endif

View File

@@ -0,0 +1,17 @@
#pragma once
#include "concurrency/OSThread.h"
#include <stdint.h>
#ifdef HAS_HARDWARE_WATCHDOG
class WatchdogThread : private concurrency::OSThread
{
public:
WatchdogThread();
void feedDog(void);
virtual bool setup();
virtual int32_t runOnce() override;
};
extern WatchdogThread *watchdogThread;
#endif

View File

@@ -8,6 +8,7 @@ build_flags =
-I variants/esp32/chatter2 -I variants/esp32/chatter2
-DMESHTASTIC_EXCLUDE_WEBSERVER=1 -DMESHTASTIC_EXCLUDE_WEBSERVER=1
-DMESHTASTIC_EXCLUDE_PAXCOUNTER=1 -DMESHTASTIC_EXCLUDE_PAXCOUNTER=1
-ULED_BUILTIN
lib_deps = lib_deps =
${esp32_base.lib_deps} ${esp32_base.lib_deps}

View File

@@ -14,3 +14,4 @@ build_flags =
${esp32_base.build_flags} ${esp32_base.build_flags}
-D DIY_V1 -D DIY_V1
-I variants/esp32/diy/hydra -I variants/esp32/diy/hydra
-ULED_BUILTIN

View File

@@ -17,3 +17,4 @@ build_flags =
-D DIY_V1 -D DIY_V1
-D EBYTE_E22 -D EBYTE_E22
-I variants/esp32/diy/v1 -I variants/esp32/diy/v1
-ULED_BUILTIN

View File

@@ -14,3 +14,4 @@ build_flags =
${esp32_base.build_flags} ${esp32_base.build_flags}
-D NANO_G1_EXPLORER -D NANO_G1_EXPLORER
-I variants/esp32/nano-g1-explorer -I variants/esp32/nano-g1-explorer
-ULED_BUILTIN

View File

@@ -14,3 +14,4 @@ build_flags =
${esp32_base.build_flags} ${esp32_base.build_flags}
-D NANO_G1 -D NANO_G1
-I variants/esp32/nano-g1 -I variants/esp32/nano-g1
-ULED_BUILTIN

View File

@@ -9,6 +9,7 @@ build_flags =
-DHAS_STK8XXX=1 -DHAS_STK8XXX=1
-O2 -O2
-I variants/esp32/radiomaster_900_bandit -I variants/esp32/radiomaster_900_bandit
-ULED_BUILTIN
board_build.f_cpu = 240000000L board_build.f_cpu = 240000000L
upload_protocol = esptool upload_protocol = esptool
lib_deps = lib_deps =

View File

@@ -13,5 +13,6 @@ build_flags =
-DCONFIG_DISABLE_HAL_LOCKS=1 -DCONFIG_DISABLE_HAL_LOCKS=1
-O2 -O2
-I variants/esp32/radiomaster_900_bandit_nano -I variants/esp32/radiomaster_900_bandit_nano
-ULED_BUILTIN
board_build.f_cpu = 240000000L board_build.f_cpu = 240000000L
upload_protocol = esptool upload_protocol = esptool

View File

@@ -16,5 +16,6 @@ build_flags =
-DCONFIG_DISABLE_HAL_LOCKS=1 -DCONFIG_DISABLE_HAL_LOCKS=1
-O2 -O2
-I variants/esp32/radiomaster_900_bandit_nano -I variants/esp32/radiomaster_900_bandit_nano
-ULED_BUILTIN
board_build.f_cpu = 240000000L board_build.f_cpu = 240000000L
upload_protocol = esptool upload_protocol = esptool

View File

@@ -6,8 +6,6 @@
#define LED_GREEN 12 #define LED_GREEN 12
#define LED_BLUE 2 #define LED_BLUE 2
#define LED_BUILTIN LED_GREEN
static const uint8_t TX = 1; static const uint8_t TX = 1;
static const uint8_t RX = 3; static const uint8_t RX = 3;

View File

@@ -6,8 +6,6 @@
#define LED_GREEN 12 #define LED_GREEN 12
#define LED_BLUE 2 #define LED_BLUE 2
#define LED_BUILTIN LED_GREEN
static const uint8_t TX = 1; static const uint8_t TX = 1;
static const uint8_t RX = 3; static const uint8_t RX = 3;

View File

@@ -14,3 +14,4 @@ build_flags =
${esp32_base.build_flags} ${esp32_base.build_flags}
-D STATION_G1 -D STATION_G1
-I variants/esp32/station-g1 -I variants/esp32/station-g1
-ULED_BUILTIN

View File

@@ -18,6 +18,7 @@ build_flags = ${esp32_base.build_flags}
-I variants/esp32/tbeam -I variants/esp32/tbeam
-DBOARD_HAS_PSRAM -DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue -mfix-esp32-psram-cache-issue
-ULED_BUILTIN
upload_speed = 921600 upload_speed = 921600
[env:tbeam-displayshield] [env:tbeam-displayshield]

View File

@@ -12,7 +12,7 @@ extends = esp32_base
board = ttgo-lora32-v21 board = ttgo-lora32-v21
board_check = true board_check = true
build_flags = build_flags =
${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/esp32/tlora_v2_1_16 ${esp32_base.build_flags} -D TLORA_V2_1_16 -I variants/esp32/tlora_v2_1_16 -ULED_BUILTIN
upload_speed = 115200 upload_speed = 115200
[env:sugarcube] [env:sugarcube]

View File

@@ -7,3 +7,4 @@ build_flags =
-I variants/esp32/tlora_v2_1_16 -I variants/esp32/tlora_v2_1_16
-D LORA_TCXO_GPIO=12 -D LORA_TCXO_GPIO=12
-D BUTTON_PIN=0 -D BUTTON_PIN=0
-ULED_BUILTIN

View File

@@ -50,3 +50,5 @@ void c6l_init();
#endif #endif
#define SCREEN_TRANSITION_FRAMERATE 10 #define SCREEN_TRANSITION_FRAMERATE 10
#define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness #define BRIGHTNESS_DEFAULT 130 // Medium Low Brightness
#define SERIAL_PRINT_PORT 1

View File

@@ -8,3 +8,4 @@ build_flags =
-I variants/esp32c6/tlora_c6 -I variants/esp32c6/tlora_c6
-DARDUINO_USB_CDC_ON_BOOT=1 -DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1 -DARDUINO_USB_MODE=1
-ULED_BUILTIN

View File

@@ -19,3 +19,5 @@
#define SX126X_TXEN 14 #define SX126X_TXEN 14
#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
#define SERIAL_PRINT_PORT 1

View File

@@ -81,4 +81,6 @@
#define BUTTON_PIN PIN_BUTTON1 #define BUTTON_PIN PIN_BUTTON1
#define BUTTON_PIN_ALT PIN_BUTTON2 #define BUTTON_PIN_ALT PIN_BUTTON2
#define SERIAL_PRINT_PORT 0
#endif #endif

View File

@@ -6,4 +6,5 @@ board_build.partitions = default_8MB.csv
build_flags = build_flags =
${esp32s3_base.build_flags} -I variants/esp32s3/heltec_capsule_sensor_v3 ${esp32s3_base.build_flags} -I variants/esp32s3/heltec_capsule_sensor_v3
-D HELTEC_CAPSULE_SENSOR_V3 -D HELTEC_CAPSULE_SENSOR_V3
-ULED_BUILTIN
;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output ;-D DEBUG_DISABLED ; uncomment this line to disable DEBUG output

View File

@@ -7,6 +7,7 @@ build_flags =
${esp32s3_base.build_flags} ${esp32s3_base.build_flags}
-I variants/esp32s3/heltec_sensor_hub -I variants/esp32s3/heltec_sensor_hub
-D HELTEC_SENSOR_HUB -D HELTEC_SENSOR_HUB
-ULED_BUILTIN
lib_deps = ${esp32s3_base.lib_deps} lib_deps = ${esp32s3_base.lib_deps}
# renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel # renovate: datasource=custom.pio depName=NeoPixel packageName=adafruit/library/Adafruit NeoPixel

View File

@@ -18,3 +18,4 @@ build_flags =
${esp32s3_base.build_flags} ${esp32s3_base.build_flags}
-D HELTEC_V3 -D HELTEC_V3
-I variants/esp32s3/heltec_v3 -I variants/esp32s3/heltec_v3
-ULED_BUILTIN

View File

@@ -6,10 +6,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 35;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN // allow testing #ifdef LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -3,10 +3,6 @@
#include <stdint.h> #include <stdint.h>
static const uint8_t LED_BUILTIN = 45; // LED is not populated on earliest board variant
#define BUILTIN_LED LED_BUILTIN // Backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -3,10 +3,6 @@
#include <stdint.h> #include <stdint.h>
static const uint8_t LED_BUILTIN = 45; // LED is not populated on earliest board variant
#define BUILTIN_LED LED_BUILTIN // Backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -3,10 +3,6 @@
#include <stdint.h> #include <stdint.h>
static const uint8_t LED_BUILTIN = 35;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -3,10 +3,6 @@
#include <stdint.h> #include <stdint.h>
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -3,10 +3,6 @@
#include <stdint.h> #include <stdint.h>
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t KEY_BUILTIN = 0; static const uint8_t KEY_BUILTIN = 0;
static const uint8_t TX = 43; static const uint8_t TX = 43;

View File

@@ -11,10 +11,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -11,10 +11,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -10,10 +10,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -17,3 +17,4 @@ build_flags =
${esp32s3_base.build_flags} ${esp32s3_base.build_flags}
-D HELTEC_WSL_V3 -D HELTEC_WSL_V3
-I variants/esp32s3/heltec_wsl_v3 -I variants/esp32s3/heltec_wsl_v3
-ULED_BUILTIN

View File

@@ -10,10 +10,7 @@
// Some boards have too low voltage on this pin (board design bug) // Some boards have too low voltage on this pin (board design bug)
// Use different pin with 3V and connect with 48 // Use different pin with 3V and connect with 48
// and change this setup for the chosen pin (for example 38) // and change this setup for the chosen pin (for example 38)
static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT + 48; #define RGB_BUILTIN SOC_GPIO_PIN_COUNT + 48
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
#define RGB_BUILTIN LED_BUILTIN
#define RGB_BRIGHTNESS 64 #define RGB_BRIGHTNESS 64
static const uint8_t TX = 43; static const uint8_t TX = 43;

View File

@@ -49,10 +49,6 @@ static const uint8_t T14 = 14;
static const uint8_t VBAT_SENSE = 2; static const uint8_t VBAT_SENSE = 2;
static const uint8_t VBUS_SENSE = 34; static const uint8_t VBUS_SENSE = 34;
// User LED
#define LED_BUILTIN 13
#define BUILTIN_LED LED_BUILTIN // backward compatibility
static const uint8_t RGB_DATA = 40; static const uint8_t RGB_DATA = 40;
// RGB_BUILTIN and RGB_BRIGHTNESS can be used in new Arduino API neopixelWrite() // RGB_BUILTIN and RGB_BRIGHTNESS can be used in new Arduino API neopixelWrite()
#define RGB_BUILTIN (RGB_DATA + SOC_GPIO_PIN_COUNT) #define RGB_BUILTIN (RGB_DATA + SOC_GPIO_PIN_COUNT)

View File

@@ -24,9 +24,6 @@ static const uint8_t SCK = 13;
#define SPI_MISO (10) #define SPI_MISO (10)
#define SPI_CS (12) #define SPI_CS (12)
// LEDs
#define LED_BUILTIN LED_GREEN
#ifdef _VARIANT_RAK3112_ #ifdef _VARIANT_RAK3112_
/* /*
* Serial interfaces * Serial interfaces

View File

@@ -22,7 +22,4 @@ static const uint8_t SCK = 13;
#define SPI_MISO (10) #define SPI_MISO (10)
#define SPI_CS (12) #define SPI_CS (12)
// LEDs
#define LED_BUILTIN LED_GREEN
#endif /* Pins_Arduino_h */ #endif /* Pins_Arduino_h */

View File

@@ -3,8 +3,6 @@
#include <stdint.h> #include <stdint.h>
// static const uint8_t LED_BUILTIN = -1;
// static const uint8_t TX = 43; // static const uint8_t TX = 43;
// static const uint8_t RX = 44; // static const uint8_t RX = 44;

View File

@@ -6,8 +6,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
// static const uint8_t LED_BUILTIN = -1;
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -3,8 +3,6 @@
#include <stdint.h> #include <stdint.h>
// static const uint8_t LED_BUILTIN = -1;
// static const uint8_t TX = 43; // static const uint8_t TX = 43;
// static const uint8_t RX = 44; // static const uint8_t RX = 44;

View File

@@ -11,10 +11,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -11,10 +11,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -11,10 +11,6 @@
#define USB_VID 0x303a #define USB_VID 0x303a
#define USB_PID 0x1001 #define USB_PID 0x1001
static const uint8_t LED_BUILTIN = 18;
#define BUILTIN_LED LED_BUILTIN // backward compatibility
#define LED_BUILTIN LED_BUILTIN
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -6,9 +6,6 @@
#define USB_VID 0x16D0 #define USB_VID 0x16D0
#define USB_PID 0x1178 #define USB_PID 0x1178
#define LED_BUILTIN 13
#define BUILTIN_LED LED_BUILTIN // backward compatibility
static const uint8_t TX = 43; static const uint8_t TX = 43;
static const uint8_t RX = 44; static const uint8_t RX = 44;

View File

@@ -29,7 +29,7 @@ lib_deps =
# renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX # renovate: datasource=custom.pio depName=LovyanGFX packageName=lovyan03/library/LovyanGFX
lovyan03/LovyanGFX@1.2.19 lovyan03/LovyanGFX@1.2.19
# renovate: datasource=git-refs depName=libch341-spi-userspace packageName=https://github.com/pine64/libch341-spi-userspace gitBranch=main # 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/23c42319a69cffcb65868e3c72e6bed83974a393.zip https://github.com/pine64/libch341-spi-userspace/archive/af9bc27c9c30fa90772279925b7c5913dff789b4.zip
# renovate: datasource=custom.pio depName=adafruit/Adafruit seesaw Library packageName=adafruit/library/Adafruit seesaw Library # renovate: datasource=custom.pio depName=adafruit/Adafruit seesaw Library packageName=adafruit/library/Adafruit seesaw Library
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

View File

@@ -50,7 +50,6 @@ extern "C" {
#define RGBLED_BLUE (0 + 12) // Blue of RGB P0.12 #define RGBLED_BLUE (0 + 12) // Blue of RGB P0.12
#define RGBLED_CA // comment out this line if you have a common cathode type, as defined use common anode logic #define RGBLED_CA // comment out this line if you have a common cathode type, as defined use common anode logic
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -55,7 +55,6 @@ extern "C" {
#define LED_RED PIN_LED3 #define LED_RED PIN_LED3
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_GREEN PIN_LED2 #define LED_GREEN PIN_LED2
#define LED_BUILTIN LED_BLUE
#define LED_CONN PIN_GREEN #define LED_CONN PIN_GREEN
#define LED_STATE_ON 0 // State when LED is lit // LED灯亮时的状态 #define LED_STATE_ON 0 // State when LED is lit // LED灯亮时的状态
#define PIN_BUZZER (0 + 6) #define PIN_BUZZER (0 + 6)
@@ -159,6 +158,8 @@ External serial flash WP25R1635FZUIL0
#define PIN_SERIAL1_TX GPS_TX_PIN #define PIN_SERIAL1_TX GPS_TX_PIN
#define PIN_SERIAL1_RX GPS_RX_PIN #define PIN_SERIAL1_RX GPS_RX_PIN
#define SERIAL_PRINT_PORT 0
/* /*
* SPI Interfaces * SPI Interfaces
*/ */

View File

@@ -58,7 +58,6 @@ extern "C" {
#define LED_BLUE 37 #define LED_BLUE 37
#define LED_PAIRING LED_BLUE // Signals the Status LED Module to handle this LED #define LED_PAIRING LED_BLUE // Signals the Status LED Module to handle this LED
#define LED_BUILTIN -1
#define LED_STATE_ON LOW #define LED_STATE_ON LOW
#define LED_STATE_OFF HIGH #define LED_STATE_OFF HIGH
@@ -113,6 +112,8 @@ extern "C" {
#define LR11X0_DIO3_TCXO_VOLTAGE 3.3 #define LR11X0_DIO3_TCXO_VOLTAGE 3.3
#define LR11X0_DIO_AS_RF_SWITCH #define LR11X0_DIO_AS_RF_SWITCH
#define SERIAL_PRINT_PORT 0
// PCF8563 RTC Module // PCF8563 RTC Module
// REVISIT https://github.com/meshtastic/firmware/pull/9084 // REVISIT https://github.com/meshtastic/firmware/pull/9084
// #define PCF8563_RTC 0x51 // #define PCF8563_RTC 0x51

View File

@@ -40,7 +40,6 @@ extern "C" {
#define NUM_ANALOG_OUTPUTS (0) #define NUM_ANALOG_OUTPUTS (0)
// LEDs // LEDs
#define LED_BUILTIN -1
#define LED_BLUE -1 #define LED_BLUE -1
#define PIN_LED2 (32 + 9) #define PIN_LED2 (32 + 9)
#define LED_PAIRING (13) #define LED_PAIRING (13)
@@ -135,6 +134,8 @@ static const uint8_t A0 = PIN_A0;
#define PIN_SERIAL1_RX GPS_RX_PIN #define PIN_SERIAL1_RX GPS_RX_PIN
#define PIN_SERIAL1_TX GPS_TX_PIN #define PIN_SERIAL1_TX GPS_TX_PIN
#define SERIAL_PRINT_PORT 0
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -40,7 +40,6 @@ extern "C" {
#define NUM_ANALOG_OUTPUTS (0) #define NUM_ANALOG_OUTPUTS (0)
// LEDs // LEDs
#define LED_BUILTIN -1
#define LED_BLUE -1 #define LED_BLUE -1
#define LED_CHARGE (12) #define LED_CHARGE (12)
#define LED_PAIRING (7) #define LED_PAIRING (7)

View File

@@ -51,7 +51,6 @@ extern "C" {
#define PIN_LED1 (32 + 7) // P1.07 Blue D2 #define PIN_LED1 (32 + 7) // P1.07 Blue D2
#define LED_PIN PIN_LED1 #define LED_PIN PIN_LED1
#define LED_BUILTIN -1
#define LED_BLUE -1 #define LED_BLUE -1
#define LED_STATE_ON 1 // State when LED is lit #define LED_STATE_ON 1 // State when LED is lit

View File

@@ -51,7 +51,6 @@ extern "C" {
#define PIN_LED1 (32 + 7) // P1.07 Blue D2 #define PIN_LED1 (32 + 7) // P1.07 Blue D2
#define LED_PIN PIN_LED1 #define LED_PIN PIN_LED1
#define LED_BUILTIN -1
#define LED_BLUE -1 #define LED_BLUE -1
#define LED_STATE_ON 1 // State when LED is lit #define LED_STATE_ON 1 // State when LED is lit

View File

@@ -51,7 +51,6 @@ extern "C" {
#define PIN_LED1 (-1) #define PIN_LED1 (-1)
#define LED_PIN PIN_LED1 #define LED_PIN PIN_LED1
#define LED_BUILTIN -1
#define LED_BLUE -1 #define LED_BLUE -1
#define LED_STATE_ON 1 // State when LED is lit #define LED_STATE_ON 1 // State when LED is lit

View File

@@ -29,7 +29,6 @@ extern "C" {
#define PIN_LED1 (32 + 10) // LED P1.15 #define PIN_LED1 (32 + 10) // LED P1.15
#define PIN_LED2 (-1) // #define PIN_LED2 (-1) //
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -29,7 +29,6 @@ extern "C" {
#define PIN_LED1 (32 + 10) // LED P1.15 #define PIN_LED1 (32 + 10) // LED P1.15
#define PIN_LED2 (-1) // #define PIN_LED2 (-1) //
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -34,7 +34,6 @@ extern "C" {
// #define PIN_LED1 (32 + 9) Green // #define PIN_LED1 (32 + 9) Green
// #define PIN_LED1 (0 + 12) Blue // #define PIN_LED1 (0 + 12) Blue
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -52,7 +52,6 @@ extern "C" {
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED3 #define LED_CONN PIN_LED3
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit
@@ -170,6 +169,8 @@ static const uint8_t A0 = PIN_A0;
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0 #define VBAT_AR_INTERNAL AR_INTERNAL_3_0
#define ADC_MULTIPLIER (2.0F) #define ADC_MULTIPLIER (2.0F)
#define SERIAL_PRINT_PORT 0
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -81,7 +81,6 @@ NRF52 PRO MICRO PIN ASSIGNMENT
// LED // LED
#define PIN_LED1 (0 + 15) // P0.15 #define PIN_LED1 (0 + 15) // P0.15
#define LED_BUILTIN PIN_LED1
// Actually red // Actually red
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_STATE_ON 1 // State when LED is lit #define LED_STATE_ON 1 // State when LED is lit

View File

@@ -38,7 +38,6 @@ extern "C" {
#define PIN_LED PIN_LED1 #define PIN_LED PIN_LED1
#define LED_PWR (PINS_COUNT) #define LED_PWR (PINS_COUNT)
#define LED_BUILTIN PIN_LED
#define LED_STATE_ON 1 // State when LED is lit #define LED_STATE_ON 1 // State when LED is lit
// XIAO Wio-SX1262 Shield User button // XIAO Wio-SX1262 Shield User button

View File

@@ -44,7 +44,6 @@ extern "C" {
// LED // LED
#define PIN_LED1 (0 + 15) #define PIN_LED1 (0 + 15)
#define LED_BUILTIN PIN_LED1
// Actually red // Actually red
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_STATE_ON 1 #define LED_STATE_ON 1

View File

@@ -49,8 +49,6 @@ extern "C" {
#define PIN_LED1 (32 + 15) // P1.15 3 #define PIN_LED1 (32 + 15) // P1.15 3
#define PIN_LED2 (32 + 10) // P1.10 4 #define PIN_LED2 (32 + 10) // P1.10 4
#define LED_BUILTIN PIN_LED1
#define LED_GREEN PIN_LED2 // Actually red #define LED_GREEN PIN_LED2 // Actually red
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1

View File

@@ -48,7 +48,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -30,7 +30,6 @@ extern "C" {
#define PIN_LED1 (32 + 3) // green (confirmed on 1.0 board) #define PIN_LED1 (32 + 3) // green (confirmed on 1.0 board)
#define LED_BLUE PIN_LED1 // fake for bluefruit library #define LED_BLUE PIN_LED1 // fake for bluefruit library
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1
#define LED_BUILTIN LED_GREEN
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit
#define HAS_NEOPIXEL // Enable the use of neopixels #define HAS_NEOPIXEL // Enable the use of neopixels

View File

@@ -74,7 +74,6 @@ extern "C" {
#define PIN_LED1 (32 + 3) // green (confirmed on 1.0 board) #define PIN_LED1 (32 + 3) // green (confirmed on 1.0 board)
#define LED_BLUE PIN_LED1 // fake for bluefruit library #define LED_BLUE PIN_LED1 // fake for bluefruit library
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1
#define LED_BUILTIN LED_GREEN
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit
#define HAS_NEOPIXEL // Enable the use of neopixels #define HAS_NEOPIXEL // Enable the use of neopixels

View File

@@ -26,7 +26,6 @@ extern "C" {
#define LED_RED PIN_LED1 #define LED_RED PIN_LED1
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1
#define LED_BUILTIN LED_BLUE
#define LED_CONN LED_BLUE #define LED_CONN LED_BLUE
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit

View File

@@ -39,16 +39,15 @@ extern "C" {
#define NUM_ANALOG_INPUTS (1) #define NUM_ANALOG_INPUTS (1)
#define NUM_ANALOG_OUTPUTS (0) #define NUM_ANALOG_OUTPUTS (0)
#define PIN_LED1 (0 + 4) // green (confirmed on 1.0 board) #define PIN_LED1 (32 + 15) // green (confirmed on 1.0 board)
#define LED_BLUE PIN_LED1 // fake for bluefruit library #define LED_BLUE PIN_LED1 // fake for bluefruit library
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1
#define LED_BUILTIN LED_GREEN
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit
#define HAS_NEOPIXEL // Enable the use of neopixels // #define HAS_NEOPIXEL // Enable the use of neopixels
#define NEOPIXEL_COUNT 1 // How many neopixels are connected // #define NEOPIXEL_COUNT 1 // How many neopixels are connected
#define NEOPIXEL_DATA (32 + 15) // gpio pin used to send data to the neopixels // #define NEOPIXEL_DATA (32 + 15) // gpio pin used to send data to the neopixels
#define NEOPIXEL_TYPE (NEO_GRB + NEO_KHZ800) // type of neopixels in use // #define NEOPIXEL_TYPE (NEO_GRB + NEO_KHZ800) // type of neopixels in use
/* /*
* Buttons * Buttons
@@ -60,8 +59,8 @@ extern "C" {
/* /*
No longer populated on PCB No longer populated on PCB
*/ */
#define PIN_SERIAL2_RX (0 + 9) #define PIN_SERIAL2_RX (-1)
#define PIN_SERIAL2_TX (0 + 10) #define PIN_SERIAL2_TX (-1)
/* /*
* I2C * I2C
@@ -138,10 +137,18 @@ No longer populated on PCB
// To debug via the segger JLINK console rather than the CDC-ACM serial device // To debug via the segger JLINK console rather than the CDC-ACM serial device
// #define USE_SEGGER // #define USE_SEGGER
// Hardware watchdog
#define HAS_HARDWARE_WATCHDOG
#define HARDWARE_WATCHDOG_DONE (0 + 9)
#define HARDWARE_WATCHDOG_WAKE (0 + 10)
#define HARDWARE_WATCHDOG_TIMEOUT_MS (6 * 60 * 1000) // 6 minute watchdog
#define BQ4050_SDA_PIN (32 + 1) // I2C data line pin #define BQ4050_SDA_PIN (32 + 1) // I2C data line pin
#define BQ4050_SCL_PIN (32 + 0) // I2C clock line pin #define BQ4050_SCL_PIN (32 + 0) // I2C clock line pin
#define BQ4050_EMERGENCY_SHUTDOWN_PIN (32 + 3) // Emergency shutdown pin #define BQ4050_EMERGENCY_SHUTDOWN_PIN (32 + 3) // Emergency shutdown pin
#define SERIAL_PRINT_PORT 0
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@@ -31,7 +31,6 @@ extern "C" {
// LEDs // LEDs
#define PIN_LED1 (24) // Built in white led for status #define PIN_LED1 (24) // Built in white led for status
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_BUILTIN PIN_LED1
#define LED_STATE_ON 0 // State when LED is litted #define LED_STATE_ON 0 // State when LED is litted
#define LED_INVERTED 1 #define LED_INVERTED 1
@@ -54,6 +53,7 @@ extern "C" {
*/ */
#define PIN_SERIAL1_RX (32 + 8) #define PIN_SERIAL1_RX (32 + 8)
#define PIN_SERIAL1_TX (7) #define PIN_SERIAL1_TX (7)
#define SERIAL_PRINT_PORT 0
/* /*
* SPI Interfaces * SPI Interfaces

View File

@@ -49,7 +49,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -52,7 +52,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) // Connected to WWAN host LED (if present) #define PIN_LED2 (36) // Connected to WWAN host LED (if present)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -45,7 +45,6 @@ extern "C" {
#define PIN_LED1 (32 + 3) // P1.03, Green #define PIN_LED1 (32 + 3) // P1.03, Green
#define PIN_LED2 (32 + 4) // P1.04, Blue #define PIN_LED2 (32 + 4) // P1.04, Blue
#define LED_BUILTIN -1 // PIN_LED1
#define LED_BLUE PIN_LED2 #define LED_BLUE PIN_LED2
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit
@@ -176,6 +175,8 @@ extern "C" {
#define EXTERNAL_FLASH_DEVICES W25Q32JVSS #define EXTERNAL_FLASH_DEVICES W25Q32JVSS
#define EXTERNAL_FLASH_USE_QSPI #define EXTERNAL_FLASH_USE_QSPI
#define SERIAL_PRINT_PORT 0
// NFC is disabled via CONFIG_NFCT_PINS_AS_GPIOS=1 build flag // NFC is disabled via CONFIG_NFCT_PINS_AS_GPIOS=1 build flag
// This configures P0.09 and P0.10 as regular GPIO pins instead of NFC pins // This configures P0.09 and P0.10 as regular GPIO pins instead of NFC pins

View File

@@ -50,7 +50,6 @@ extern "C" {
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_GREEN PIN_LED2 #define LED_GREEN PIN_LED2
#define LED_BUILTIN LED_BLUE
#define LED_CONN PIN_GREEN #define LED_CONN PIN_GREEN
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (32 + 4) // P1.04 Controls Green LED #define PIN_LED1 (32 + 4) // P1.04 Controls Green LED
#define PIN_LED2 (28) // P0.28 Controls Blue LED #define PIN_LED2 (28) // P0.28 Controls Blue LED
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -48,7 +48,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -29,7 +29,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -47,7 +47,6 @@ extern "C" {
#define PIN_LED1 (35) #define PIN_LED1 (35)
#define PIN_LED2 (36) #define PIN_LED2 (36)
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -23,7 +23,6 @@
#define PIN_LED1 (12) // LED P1.15 #define PIN_LED1 (12) // LED P1.15
#define PIN_LED2 (11) // #define PIN_LED2 (11) //
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -23,7 +23,6 @@
#define PIN_LED1 (11) // LED P1.15 #define PIN_LED1 (11) // LED P1.15
#define PIN_LED2 (12) // #define PIN_LED2 (12) //
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -23,7 +23,6 @@
#define PIN_LED1 (11) // LED P1.15 #define PIN_LED1 (11) // LED P1.15
#define PIN_LED2 (12) // #define PIN_LED2 (12) //
#define LED_BUILTIN PIN_LED1
#define LED_CONN PIN_LED2 #define LED_CONN PIN_LED2
#define LED_GREEN PIN_LED1 #define LED_GREEN PIN_LED1

View File

@@ -69,8 +69,6 @@ static const uint8_t A5 = PIN_A5;
#define PIN_LED2 LED_BLUE #define PIN_LED2 LED_BLUE
#define PIN_LED3 LED_RED #define PIN_LED3 LED_RED
#define LED_BUILTIN LED_RED // LED_BUILTIN is used by framework-arduinoadafruitnrf52 to indicate flash writes
#define LED_PWR LED_RED #define LED_PWR LED_RED
#define USER_LED LED_BLUE #define USER_LED LED_BLUE

View File

@@ -52,7 +52,6 @@ extern "C" {
#define BLE_LED LED_BLUE #define BLE_LED LED_BLUE
#define BLE_LED_INVERTED 1 #define BLE_LED_INVERTED 1
#define LED_BUILTIN LED_GREEN
#define LED_CONN LED_GREEN #define LED_CONN LED_GREEN
#define LED_STATE_ON 0 // State when LED is lit #define LED_STATE_ON 0 // State when LED is lit
@@ -171,6 +170,8 @@ static const uint8_t A0 = PIN_A0;
#define VBAT_AR_INTERNAL AR_INTERNAL_3_0 #define VBAT_AR_INTERNAL AR_INTERNAL_3_0
#define ADC_MULTIPLIER (2.0F) #define ADC_MULTIPLIER (2.0F)
#define SERIAL_PRINT_PORT 0
// #define NO_EXT_GPIO 1 // #define NO_EXT_GPIO 1
// PINs back side // PINs back side
// Batt & solar connector left up corner // Batt & solar connector left up corner

View File

@@ -25,7 +25,6 @@ extern "C" {
#define LED_BLUE PIN_LED1 #define LED_BLUE PIN_LED1
#define LED_GREEN PIN_LED2 #define LED_GREEN PIN_LED2
#define LED_BUILTIN LED_BLUE
#define LED_CONN LED_GREEN #define LED_CONN LED_GREEN
#define LED_STATE_ON 0 #define LED_STATE_ON 0
@@ -138,6 +137,8 @@ static const uint8_t A0 = PIN_A0;
// Battery / ADC already defined above // Battery / ADC already defined above
#define HAS_RTC 1 #define HAS_RTC 1
#define SERIAL_PRINT_PORT 0
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

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