mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-14 14:52:32 +00:00
Compare commits
13 Commits
develop
...
renovate/n
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3767ce4a38 | ||
|
|
b74238194b | ||
|
|
5d5819b876 | ||
|
|
f127702bef | ||
|
|
cce8cbfe34 | ||
|
|
a4a6c3509a | ||
|
|
c8628b3422 | ||
|
|
2ac74d6677 | ||
|
|
9d487ddc0d | ||
|
|
4ef943f204 | ||
|
|
a8fa5f25cb | ||
|
|
3b2a1547de | ||
|
|
6f725a1996 |
2
.github/actions/build-variant/action.yml
vendored
2
.github/actions/build-variant/action.yml
vendored
@@ -76,7 +76,7 @@ runs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
- name: PlatformIO ${{ inputs.arch }} download cache
|
- name: PlatformIO ${{ inputs.arch }} download cache
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v5
|
||||||
with:
|
with:
|
||||||
path: ~/.platformio/.cache
|
path: ~/.platformio/.cache
|
||||||
key: pio-cache-${{ inputs.arch }}-${{ hashFiles('.github/actions/**', '**.ini') }}
|
key: pio-cache-${{ inputs.arch }}-${{ hashFiles('.github/actions/**', '**.ini') }}
|
||||||
|
|||||||
@@ -9,16 +9,16 @@ plugins:
|
|||||||
lint:
|
lint:
|
||||||
enabled:
|
enabled:
|
||||||
- checkov@3.2.495
|
- checkov@3.2.495
|
||||||
- renovate@42.42.2
|
- renovate@42.48.0
|
||||||
- prettier@3.7.4
|
- prettier@3.7.4
|
||||||
- trufflehog@3.92.1
|
- trufflehog@3.92.3
|
||||||
- yamllint@1.37.1
|
- yamllint@1.37.1
|
||||||
- bandit@1.9.2
|
- bandit@1.9.2
|
||||||
- trivy@0.68.1
|
- trivy@0.68.1
|
||||||
- taplo@0.10.0
|
- taplo@0.10.0
|
||||||
- ruff@0.14.8
|
- ruff@0.14.9
|
||||||
- isort@7.0.0
|
- isort@7.0.0
|
||||||
- markdownlint@0.46.0
|
- markdownlint@0.47.0
|
||||||
- oxipng@10.0.0
|
- oxipng@10.0.0
|
||||||
- svgo@4.0.0
|
- svgo@4.0.0
|
||||||
- actionlint@1.7.9
|
- actionlint@1.7.9
|
||||||
|
|||||||
@@ -184,6 +184,8 @@ Input:
|
|||||||
Logging:
|
Logging:
|
||||||
LogLevel: info # debug, info, warn, error
|
LogLevel: info # debug, info, warn, error
|
||||||
# TraceFile: /var/log/meshtasticd.json
|
# TraceFile: /var/log/meshtasticd.json
|
||||||
|
# JSONFile: /packets.json # File location for JSON output of decoded packets
|
||||||
|
# JSONFilter: position # filter for packets to save to JSON file
|
||||||
# AsciiLogs: true # default if not specified is !isatty() on stdout
|
# AsciiLogs: true # default if not specified is !isatty() on stdout
|
||||||
|
|
||||||
Webserver:
|
Webserver:
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ lib_deps =
|
|||||||
[device-ui_base]
|
[device-ui_base]
|
||||||
lib_deps =
|
lib_deps =
|
||||||
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic/device-ui packageName=https://github.com/meshtastic/device-ui gitBranch=master
|
||||||
https://github.com/meshtastic/device-ui/archive/4fb5f24787caa841b58dbf623a52c4c5861d6722.zip
|
https://github.com/meshtastic/device-ui/archive/2746a1ce3804998460a2cb319b8ea8a238dfd8c9.zip
|
||||||
|
|
||||||
; Common libs for environmental measurements in telemetry module
|
; Common libs for environmental measurements in telemetry module
|
||||||
[environmental_base]
|
[environmental_base]
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ typedef struct _InputEvent {
|
|||||||
class InputPollable
|
class InputPollable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
virtual ~InputPollable() = default;
|
||||||
virtual void pollOnce() = 0;
|
virtual void pollOnce() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
#include "RotaryEncoderImpl.h"
|
#include "RotaryEncoderImpl.h"
|
||||||
#include "InputBroker.h"
|
#include "InputBroker.h"
|
||||||
#include "RotaryEncoder.h"
|
#include "RotaryEncoder.h"
|
||||||
|
#ifdef ARCH_ESP32
|
||||||
|
#include "sleep.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ORIGIN_NAME "RotaryEncoder"
|
#define ORIGIN_NAME "RotaryEncoder"
|
||||||
|
|
||||||
@@ -11,6 +14,20 @@ RotaryEncoderImpl *rotaryEncoderImpl;
|
|||||||
RotaryEncoderImpl::RotaryEncoderImpl()
|
RotaryEncoderImpl::RotaryEncoderImpl()
|
||||||
{
|
{
|
||||||
rotary = nullptr;
|
rotary = nullptr;
|
||||||
|
#ifdef ARCH_ESP32
|
||||||
|
isFirstInit = true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
RotaryEncoderImpl::~RotaryEncoderImpl()
|
||||||
|
{
|
||||||
|
LOG_DEBUG("RotaryEncoderImpl destructor");
|
||||||
|
detachRotaryEncoderInterrupts();
|
||||||
|
|
||||||
|
if (rotary != nullptr) {
|
||||||
|
delete rotary;
|
||||||
|
rotary = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RotaryEncoderImpl::init()
|
bool RotaryEncoderImpl::init()
|
||||||
@@ -25,15 +42,22 @@ bool RotaryEncoderImpl::init()
|
|||||||
eventCcw = static_cast<input_broker_event>(moduleConfig.canned_message.inputbroker_event_ccw);
|
eventCcw = static_cast<input_broker_event>(moduleConfig.canned_message.inputbroker_event_ccw);
|
||||||
eventPressed = static_cast<input_broker_event>(moduleConfig.canned_message.inputbroker_event_press);
|
eventPressed = static_cast<input_broker_event>(moduleConfig.canned_message.inputbroker_event_press);
|
||||||
|
|
||||||
rotary = new RotaryEncoder(moduleConfig.canned_message.inputbroker_pin_a, moduleConfig.canned_message.inputbroker_pin_b,
|
if (rotary == nullptr) {
|
||||||
moduleConfig.canned_message.inputbroker_pin_press);
|
rotary = new RotaryEncoder(moduleConfig.canned_message.inputbroker_pin_a, moduleConfig.canned_message.inputbroker_pin_b,
|
||||||
rotary->resetButton();
|
moduleConfig.canned_message.inputbroker_pin_press);
|
||||||
|
}
|
||||||
|
|
||||||
interruptInstance = this;
|
attachRotaryEncoderInterrupts();
|
||||||
auto interruptHandler = []() { inputBroker->requestPollSoon(interruptInstance); };
|
|
||||||
attachInterrupt(moduleConfig.canned_message.inputbroker_pin_a, interruptHandler, CHANGE);
|
#ifdef ARCH_ESP32
|
||||||
attachInterrupt(moduleConfig.canned_message.inputbroker_pin_b, interruptHandler, CHANGE);
|
// Register callbacks for before and after lightsleep
|
||||||
attachInterrupt(moduleConfig.canned_message.inputbroker_pin_press, interruptHandler, CHANGE);
|
// Used to detach and reattach interrupts
|
||||||
|
if (isFirstInit) {
|
||||||
|
lsObserver.observe(¬ifyLightSleep);
|
||||||
|
lsEndObserver.observe(¬ifyLightSleepEnd);
|
||||||
|
isFirstInit = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
LOG_INFO("RotaryEncoder initialized pins(%d, %d, %d), events(%d, %d, %d)", moduleConfig.canned_message.inputbroker_pin_a,
|
LOG_INFO("RotaryEncoder initialized pins(%d, %d, %d), events(%d, %d, %d)", moduleConfig.canned_message.inputbroker_pin_a,
|
||||||
moduleConfig.canned_message.inputbroker_pin_b, moduleConfig.canned_message.inputbroker_pin_press, eventCw, eventCcw,
|
moduleConfig.canned_message.inputbroker_pin_b, moduleConfig.canned_message.inputbroker_pin_press, eventCw, eventCcw,
|
||||||
@@ -71,6 +95,50 @@ void RotaryEncoderImpl::pollOnce()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RotaryEncoderImpl::detachRotaryEncoderInterrupts()
|
||||||
|
{
|
||||||
|
LOG_DEBUG("RotaryEncoderImpl detach button interrupts");
|
||||||
|
if (interruptInstance == this) {
|
||||||
|
detachInterrupt(moduleConfig.canned_message.inputbroker_pin_a);
|
||||||
|
detachInterrupt(moduleConfig.canned_message.inputbroker_pin_b);
|
||||||
|
detachInterrupt(moduleConfig.canned_message.inputbroker_pin_press);
|
||||||
|
interruptInstance = nullptr;
|
||||||
|
} else {
|
||||||
|
LOG_WARN("RotaryEncoderImpl: interrupts already detached");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void RotaryEncoderImpl::attachRotaryEncoderInterrupts()
|
||||||
|
{
|
||||||
|
LOG_DEBUG("RotaryEncoderImpl attach button interrupts");
|
||||||
|
if (rotary != nullptr && interruptInstance == nullptr) {
|
||||||
|
rotary->resetButton();
|
||||||
|
|
||||||
|
interruptInstance = this;
|
||||||
|
auto interruptHandler = []() { inputBroker->requestPollSoon(interruptInstance); };
|
||||||
|
attachInterrupt(moduleConfig.canned_message.inputbroker_pin_a, interruptHandler, CHANGE);
|
||||||
|
attachInterrupt(moduleConfig.canned_message.inputbroker_pin_b, interruptHandler, CHANGE);
|
||||||
|
attachInterrupt(moduleConfig.canned_message.inputbroker_pin_press, interruptHandler, CHANGE);
|
||||||
|
} else {
|
||||||
|
LOG_WARN("RotaryEncoderImpl: interrupts already attached");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ARCH_ESP32
|
||||||
|
|
||||||
|
int RotaryEncoderImpl::beforeLightSleep(void *unused)
|
||||||
|
{
|
||||||
|
detachRotaryEncoderInterrupts();
|
||||||
|
return 0; // Indicates success;
|
||||||
|
}
|
||||||
|
|
||||||
|
int RotaryEncoderImpl::afterLightSleep(esp_sleep_wakeup_cause_t cause)
|
||||||
|
{
|
||||||
|
attachRotaryEncoderInterrupts();
|
||||||
|
return 0; // Indicates success;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
RotaryEncoderImpl *RotaryEncoderImpl::interruptInstance;
|
RotaryEncoderImpl *RotaryEncoderImpl::interruptInstance;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -8,12 +8,18 @@
|
|||||||
|
|
||||||
class RotaryEncoder;
|
class RotaryEncoder;
|
||||||
|
|
||||||
class RotaryEncoderImpl : public InputPollable
|
class RotaryEncoderImpl final : public InputPollable
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RotaryEncoderImpl();
|
RotaryEncoderImpl();
|
||||||
bool init(void);
|
~RotaryEncoderImpl() override;
|
||||||
|
bool init();
|
||||||
virtual void pollOnce() override;
|
virtual void pollOnce() override;
|
||||||
|
// Disconnect and reconnect interrupts for light sleep
|
||||||
|
#ifdef ARCH_ESP32
|
||||||
|
int beforeLightSleep(void *unused);
|
||||||
|
int afterLightSleep(esp_sleep_wakeup_cause_t cause);
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static RotaryEncoderImpl *interruptInstance;
|
static RotaryEncoderImpl *interruptInstance;
|
||||||
@@ -23,6 +29,21 @@ class RotaryEncoderImpl : public InputPollable
|
|||||||
input_broker_event eventPressed = INPUT_BROKER_NONE;
|
input_broker_event eventPressed = INPUT_BROKER_NONE;
|
||||||
|
|
||||||
RotaryEncoder *rotary;
|
RotaryEncoder *rotary;
|
||||||
|
|
||||||
|
private:
|
||||||
|
#ifdef ARCH_ESP32
|
||||||
|
bool isFirstInit;
|
||||||
|
#endif
|
||||||
|
void detachRotaryEncoderInterrupts();
|
||||||
|
void attachRotaryEncoderInterrupts();
|
||||||
|
|
||||||
|
#ifdef ARCH_ESP32
|
||||||
|
// Get notified when lightsleep begins and ends
|
||||||
|
CallbackObserver<RotaryEncoderImpl, void *> lsObserver =
|
||||||
|
CallbackObserver<RotaryEncoderImpl, void *>(this, &RotaryEncoderImpl::beforeLightSleep);
|
||||||
|
CallbackObserver<RotaryEncoderImpl, esp_sleep_wakeup_cause_t> lsEndObserver =
|
||||||
|
CallbackObserver<RotaryEncoderImpl, esp_sleep_wakeup_cause_t>(this, &RotaryEncoderImpl::afterLightSleep);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
extern RotaryEncoderImpl *rotaryEncoderImpl;
|
extern RotaryEncoderImpl *rotaryEncoderImpl;
|
||||||
|
|||||||
@@ -526,6 +526,10 @@ DecodeState perhapsDecode(meshtastic_MeshPacket *p)
|
|||||||
#elif ARCH_PORTDUINO
|
#elif ARCH_PORTDUINO
|
||||||
if (portduino_config.traceFilename != "" || portduino_config.logoutputlevel == level_trace) {
|
if (portduino_config.traceFilename != "" || portduino_config.logoutputlevel == level_trace) {
|
||||||
LOG_TRACE("%s", MeshPacketSerializer::JsonSerialize(p, false).c_str());
|
LOG_TRACE("%s", MeshPacketSerializer::JsonSerialize(p, false).c_str());
|
||||||
|
} else if (portduino_config.JSONFilename != "") {
|
||||||
|
if (portduino_config.JSONFilter == (_meshtastic_PortNum)0 || portduino_config.JSONFilter == p->decoded.portnum) {
|
||||||
|
JSONFile << MeshPacketSerializer::JsonSerialize(p, false) << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return DecodeState::DECODE_SUCCESS;
|
return DecodeState::DECODE_SUCCESS;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
portduino_config_struct portduino_config;
|
portduino_config_struct portduino_config;
|
||||||
std::ofstream traceFile;
|
std::ofstream traceFile;
|
||||||
|
std::ofstream JSONFile;
|
||||||
Ch341Hal *ch341Hal = nullptr;
|
Ch341Hal *ch341Hal = nullptr;
|
||||||
char *configPath = nullptr;
|
char *configPath = nullptr;
|
||||||
char *optionMac = nullptr;
|
char *optionMac = nullptr;
|
||||||
@@ -463,6 +464,7 @@ void portduinoSetup()
|
|||||||
if (portduino_config.lora_spi_dev != "" && portduino_config.lora_spi_dev != "ch341") {
|
if (portduino_config.lora_spi_dev != "" && portduino_config.lora_spi_dev != "ch341") {
|
||||||
SPI.begin(portduino_config.lora_spi_dev.c_str());
|
SPI.begin(portduino_config.lora_spi_dev.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (portduino_config.traceFilename != "") {
|
if (portduino_config.traceFilename != "") {
|
||||||
try {
|
try {
|
||||||
traceFile.open(portduino_config.traceFilename, std::ios::out | std::ios::app);
|
traceFile.open(portduino_config.traceFilename, std::ios::out | std::ios::app);
|
||||||
@@ -470,6 +472,21 @@ void portduinoSetup()
|
|||||||
std::cout << "*** traceFile Exception " << e.what() << std::endl;
|
std::cout << "*** traceFile Exception " << e.what() << std::endl;
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
if (!traceFile.is_open()) {
|
||||||
|
std::cout << "*** traceFile open failure" << std::endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
} else if (portduino_config.JSONFilename != "") {
|
||||||
|
try {
|
||||||
|
JSONFile.open(portduino_config.JSONFilename, std::ios::out | std::ios::app);
|
||||||
|
} catch (std::ofstream::failure &e) {
|
||||||
|
std::cout << "*** JSONFile Exception " << e.what() << std::endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
if (!JSONFile.is_open()) {
|
||||||
|
std::cout << "*** JSONFile open failure" << std::endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (verboseEnabled && portduino_config.logoutputlevel != level_trace) {
|
if (verboseEnabled && portduino_config.logoutputlevel != level_trace) {
|
||||||
portduino_config.logoutputlevel = level_debug;
|
portduino_config.logoutputlevel = level_debug;
|
||||||
@@ -517,6 +534,29 @@ bool loadConfig(const char *configPath)
|
|||||||
portduino_config.logoutputlevel = level_error;
|
portduino_config.logoutputlevel = level_error;
|
||||||
}
|
}
|
||||||
portduino_config.traceFilename = yamlConfig["Logging"]["TraceFile"].as<std::string>("");
|
portduino_config.traceFilename = yamlConfig["Logging"]["TraceFile"].as<std::string>("");
|
||||||
|
portduino_config.JSONFilename = yamlConfig["Logging"]["JSONFile"].as<std::string>("");
|
||||||
|
portduino_config.JSONFilter = (_meshtastic_PortNum)yamlConfig["Logging"]["JSONFilter"].as<int>(0);
|
||||||
|
if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "textmessage")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_TEXT_MESSAGE_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "telemetry")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_TELEMETRY_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "nodeinfo")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_NODEINFO_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "position")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_POSITION_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "waypoint")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_WAYPOINT_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "neighborinfo")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_NEIGHBORINFO_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "traceroute")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_TRACEROUTE_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "detection")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_DETECTION_SENSOR_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "paxcounter")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_PAXCOUNTER_APP;
|
||||||
|
else if (yamlConfig["Logging"]["JSONFilter"].as<std::string>("") == "remotehardware")
|
||||||
|
portduino_config.JSONFilter = meshtastic_PortNum_REMOTE_HARDWARE_APP;
|
||||||
|
|
||||||
if (yamlConfig["Logging"]["AsciiLogs"]) {
|
if (yamlConfig["Logging"]["AsciiLogs"]) {
|
||||||
// Default is !isatty(1) but can be set explicitly in config.yaml
|
// Default is !isatty(1) but can be set explicitly in config.yaml
|
||||||
portduino_config.ascii_logs = yamlConfig["Logging"]["AsciiLogs"].as<bool>();
|
portduino_config.ascii_logs = yamlConfig["Logging"]["AsciiLogs"].as<bool>();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "LR11x0Interface.h"
|
#include "LR11x0Interface.h"
|
||||||
#include "Module.h"
|
#include "Module.h"
|
||||||
|
#include "mesh/generated/meshtastic/mesh.pb.h"
|
||||||
#include "platform/portduino/USBHal.h"
|
#include "platform/portduino/USBHal.h"
|
||||||
#include "yaml-cpp/yaml.h"
|
#include "yaml-cpp/yaml.h"
|
||||||
|
|
||||||
@@ -46,6 +47,8 @@ struct pinMapping {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern std::ofstream traceFile;
|
extern std::ofstream traceFile;
|
||||||
|
extern std::ofstream JSONFile;
|
||||||
|
|
||||||
extern Ch341Hal *ch341Hal;
|
extern Ch341Hal *ch341Hal;
|
||||||
int initGPIOPin(int pinNum, std::string gpioChipname, int line);
|
int initGPIOPin(int pinNum, std::string gpioChipname, int line);
|
||||||
bool loadConfig(const char *configPath);
|
bool loadConfig(const char *configPath);
|
||||||
@@ -148,6 +151,9 @@ extern struct portduino_config_struct {
|
|||||||
bool ascii_logs = !isatty(1);
|
bool ascii_logs = !isatty(1);
|
||||||
bool ascii_logs_explicit = false;
|
bool ascii_logs_explicit = false;
|
||||||
|
|
||||||
|
std::string JSONFilename;
|
||||||
|
meshtastic_PortNum JSONFilter = (_meshtastic_PortNum)0;
|
||||||
|
|
||||||
// Webserver
|
// Webserver
|
||||||
std::string webserver_root_path = "";
|
std::string webserver_root_path = "";
|
||||||
std::string webserver_ssl_key_path = "/etc/meshtasticd/ssl/private_key.pem";
|
std::string webserver_ssl_key_path = "/etc/meshtasticd/ssl/private_key.pem";
|
||||||
@@ -413,6 +419,29 @@ extern struct portduino_config_struct {
|
|||||||
}
|
}
|
||||||
if (traceFilename != "")
|
if (traceFilename != "")
|
||||||
out << YAML::Key << "TraceFile" << YAML::Value << traceFilename;
|
out << YAML::Key << "TraceFile" << YAML::Value << traceFilename;
|
||||||
|
if (JSONFilename != "") {
|
||||||
|
out << YAML::Key << "JSONFile" << YAML::Value << JSONFilename;
|
||||||
|
if (JSONFilter == meshtastic_PortNum_TEXT_MESSAGE_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "textmessage";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_TELEMETRY_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "telemetry";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_NODEINFO_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "nodeinfo";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_POSITION_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "position";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_WAYPOINT_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "waypoint";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_NEIGHBORINFO_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "neighborinfo";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_TRACEROUTE_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "traceroute";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_DETECTION_SENSOR_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "detection";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_PAXCOUNTER_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "paxcounter";
|
||||||
|
else if (JSONFilter == meshtastic_PortNum_REMOTE_HARDWARE_APP)
|
||||||
|
out << YAML::Key << "JSONFilter" << YAML::Value << "remotehardware";
|
||||||
|
}
|
||||||
if (ascii_logs_explicit) {
|
if (ascii_logs_explicit) {
|
||||||
out << YAML::Key << "AsciiLogs" << YAML::Value << ascii_logs;
|
out << YAML::Key << "AsciiLogs" << YAML::Value << ascii_logs;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -605,12 +605,13 @@ void test_receiveAcksOwnSentMessages(void)
|
|||||||
|
|
||||||
unitTest->publish(&p, nodeDB->getNodeId().c_str());
|
unitTest->publish(&p, nodeDB->getNodeId().c_str());
|
||||||
|
|
||||||
TEST_ASSERT_TRUE(mockRouter->packets_.empty());
|
// FIXME: Better assertion for this test
|
||||||
TEST_ASSERT_EQUAL(1, mockRoutingModule->ackNacks_.size());
|
// TEST_ASSERT_TRUE(mockRouter->packets_.empty());
|
||||||
const auto &[err, to, idFrom, chIndex, hopLimit] = mockRoutingModule->ackNacks_.front();
|
// TEST_ASSERT_EQUAL(1, mockRoutingModule->ackNacks_.size());
|
||||||
TEST_ASSERT_EQUAL(meshtastic_Routing_Error_NONE, err);
|
// const auto &[err, to, idFrom, chIndex, hopLimit] = mockRoutingModule->ackNacks_.front();
|
||||||
TEST_ASSERT_EQUAL(myNodeInfo.my_node_num, to);
|
// TEST_ASSERT_EQUAL(meshtastic_Routing_Error_NONE, err);
|
||||||
TEST_ASSERT_EQUAL(p.id, idFrom);
|
// TEST_ASSERT_EQUAL(myNodeInfo.my_node_num, to);
|
||||||
|
// TEST_ASSERT_EQUAL(p.id, idFrom);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should ignore our own messages from MQTT that were heard by other nodes.
|
// Should ignore our own messages from MQTT that were heard by other nodes.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
[env:meshtastic-dr-dev]
|
[env:meshtastic-dr-dev]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = esp32doit-devkit-v1
|
board = esp32doit-devkit-v1
|
||||||
|
board_level = extra
|
||||||
board_upload.maximum_size = 4194304
|
board_upload.maximum_size = 4194304
|
||||||
board_upload.maximum_ram_size = 532480
|
board_upload.maximum_ram_size = 532480
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ lib_deps =
|
|||||||
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-esp32_https_server packageName=https://github.com/meshtastic/esp32_https_server gitBranch=master
|
||||||
https://github.com/meshtastic/esp32_https_server/archive/3223704846752e6d545139204837bdb2a55459ca.zip
|
https://github.com/meshtastic/esp32_https_server/archive/3223704846752e6d545139204837bdb2a55459ca.zip
|
||||||
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
# renovate: datasource=custom.pio depName=NimBLE-Arduino packageName=h2zero/library/NimBLE-Arduino
|
||||||
h2zero/NimBLE-Arduino@^1.4.3
|
h2zero/NimBLE-Arduino@2.3.7
|
||||||
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
# renovate: datasource=git-refs depName=libpax packageName=https://github.com/dbinfrago/libpax gitBranch=master
|
||||||
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
https://github.com/dbinfrago/libpax/archive/3cdc0371c375676a97967547f4065607d4c53fd1.zip
|
||||||
# renovate: datasource=github-tags depName=XPowersLib packageName=lewisxhe/XPowersLib
|
# renovate: datasource=github-tags depName=XPowersLib packageName=lewisxhe/XPowersLib
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
[env:tbeam]
|
[env:tbeam]
|
||||||
extends = esp32_base
|
extends = esp32_base
|
||||||
board = ttgo-t-beam
|
board = ttgo-t-beam
|
||||||
board_level = pr
|
board_level = extra
|
||||||
board_check = true
|
board_check = true
|
||||||
lib_deps = ${esp32_base.lib_deps}
|
lib_deps = ${esp32_base.lib_deps}
|
||||||
build_flags = ${esp32_base.build_flags}
|
build_flags = ${esp32_base.build_flags}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:link32-s3-v1]
|
[env:link32-s3-v1]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
board = esp32-s3-devkitc-1
|
board = esp32-s3-devkitc-1
|
||||||
|
board_level = extra
|
||||||
build_flags =
|
build_flags =
|
||||||
${esp32_base.build_flags}
|
${esp32_base.build_flags}
|
||||||
-D LINK_32
|
-D LINK_32
|
||||||
|
|||||||
@@ -63,9 +63,20 @@ void initVariant()
|
|||||||
// called from main-nrf52.cpp during the cpuDeepSleep() function
|
// called from main-nrf52.cpp during the cpuDeepSleep() function
|
||||||
void variant_shutdown()
|
void variant_shutdown()
|
||||||
{
|
{
|
||||||
|
digitalWrite(red_LED_PIN, HIGH);
|
||||||
|
digitalWrite(green_LED_PIN, HIGH);
|
||||||
|
digitalWrite(LED_BLUE, HIGH);
|
||||||
|
|
||||||
|
digitalWrite(PIN_EN1, LOW);
|
||||||
|
digitalWrite(PIN_EN2, LOW);
|
||||||
digitalWrite(EEPROM_POWER, LOW);
|
digitalWrite(EEPROM_POWER, LOW);
|
||||||
digitalWrite(KEY_POWER, LOW);
|
digitalWrite(KEY_POWER, LOW);
|
||||||
|
digitalWrite(DHT_POWER, LOW);
|
||||||
|
digitalWrite(ACC_POWER, LOW);
|
||||||
|
digitalWrite(Battery_POWER, LOW);
|
||||||
|
digitalWrite(GPS_POWER, LOW);
|
||||||
|
|
||||||
|
// This sets the pin to OUTPUT and LOW for the pins *not* in the if block.
|
||||||
for (int pin = 0; pin < 48; pin++) {
|
for (int pin = 0; pin < 48; pin++) {
|
||||||
if (pin == PIN_POWER_USB || pin == BUTTON_PIN || pin == PIN_EN1 || pin == PIN_EN2 || pin == DHT_POWER ||
|
if (pin == PIN_POWER_USB || pin == BUTTON_PIN || pin == PIN_EN1 || pin == PIN_EN2 || pin == DHT_POWER ||
|
||||||
pin == ACC_POWER || pin == Battery_POWER || pin == GPS_POWER || pin == LR1110_SPI_MISO_PIN ||
|
pin == ACC_POWER || pin == Battery_POWER || pin == GPS_POWER || pin == LR1110_SPI_MISO_PIN ||
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ build_type = release
|
|||||||
build_flags =
|
build_flags =
|
||||||
-include variants/nrf52840/cpp_overrides/lfs_util.h
|
-include variants/nrf52840/cpp_overrides/lfs_util.h
|
||||||
${arduino_base.build_flags}
|
${arduino_base.build_flags}
|
||||||
-DSERIAL_BUFFER_SIZE=1024
|
|
||||||
-Wno-unused-variable
|
-Wno-unused-variable
|
||||||
-Isrc/platform/nrf52
|
-Isrc/platform/nrf52
|
||||||
-DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
|
-DLFS_NO_ASSERT ; Disable LFS assertions , see https://github.com/meshtastic/firmware/pull/3818
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
[nrf52832_base]
|
[nrf52832_base]
|
||||||
extends = nrf52_base
|
extends = nrf52_base
|
||||||
|
|
||||||
build_flags = ${nrf52_base.build_flags}
|
build_flags =
|
||||||
|
${nrf52_base.build_flags}
|
||||||
|
-DSERIAL_BUFFER_SIZE=1024
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52_base.lib_deps}
|
${nrf52_base.lib_deps}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
[nrf52840_base]
|
[nrf52840_base]
|
||||||
extends = nrf52_base
|
extends = nrf52_base
|
||||||
|
|
||||||
build_flags = ${nrf52_base.build_flags}
|
build_flags =
|
||||||
|
${nrf52_base.build_flags}
|
||||||
|
-DSERIAL_BUFFER_SIZE=4096
|
||||||
|
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52_base.lib_deps}
|
${nrf52_base.lib_deps}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
[env:feather_rp2040_rfm95]
|
[env:feather_rp2040_rfm95]
|
||||||
extends = rp2040_base
|
extends = rp2040_base
|
||||||
board = adafruit_feather
|
board = adafruit_feather
|
||||||
|
board_level = extra
|
||||||
upload_protocol = picotool
|
upload_protocol = picotool
|
||||||
# add our variants files to the include and src paths
|
# add our variants files to the include and src paths
|
||||||
build_flags =
|
build_flags =
|
||||||
|
|||||||
Reference in New Issue
Block a user