Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
@@ -17,7 +17,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Stale PR+Issues
|
- name: Stale PR+Issues
|
||||||
uses: actions/stale@v10.1.1
|
uses: actions/stale@v10.2.0
|
||||||
with:
|
with:
|
||||||
days-before-stale: 45
|
days-before-stale: 45
|
||||||
stale-issue-message: This issue has not had any comment or update in the last month. If it is still relevant, please post update comments. If no comments are made, this issue will be closed automagically in 7 days.
|
stale-issue-message: This issue has not had any comment or update in the last month. If it is still relevant, please post update comments. If no comments are made, this issue will be closed automagically in 7 days.
|
||||||
|
|||||||
+6
-6
@@ -8,20 +8,20 @@ plugins:
|
|||||||
uri: https://github.com/trunk-io/plugins
|
uri: https://github.com/trunk-io/plugins
|
||||||
lint:
|
lint:
|
||||||
enabled:
|
enabled:
|
||||||
- checkov@3.2.501
|
- checkov@3.2.506
|
||||||
- renovate@43.10.3
|
- renovate@43.31.9
|
||||||
- prettier@3.8.1
|
- prettier@3.8.1
|
||||||
- trufflehog@3.93.3
|
- trufflehog@3.93.4
|
||||||
- yamllint@1.38.0
|
- yamllint@1.38.0
|
||||||
- bandit@1.9.3
|
- bandit@1.9.3
|
||||||
- trivy@0.69.1
|
- trivy@0.69.1
|
||||||
- taplo@0.10.0
|
- taplo@0.10.0
|
||||||
- ruff@0.15.1
|
- ruff@0.15.2
|
||||||
- isort@7.0.0
|
- isort@8.0.0
|
||||||
- markdownlint@0.47.0
|
- markdownlint@0.47.0
|
||||||
- oxipng@10.1.0
|
- oxipng@10.1.0
|
||||||
- svgo@4.0.0
|
- svgo@4.0.0
|
||||||
- actionlint@1.7.10
|
- actionlint@1.7.11
|
||||||
- flake8@7.3.0
|
- flake8@7.3.0
|
||||||
- hadolint@2.14.0
|
- hadolint@2.14.0
|
||||||
- shfmt@3.6.0
|
- shfmt@3.6.0
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "esp32s3_out.ld",
|
||||||
|
"partitions": "default.csv"
|
||||||
|
},
|
||||||
|
"core": "esp32",
|
||||||
|
"extra_flags": [
|
||||||
|
"-DBOARD_HAS_PSRAM",
|
||||||
|
"-DARDUINO_ESP32S3_DEV",
|
||||||
|
"-DARDUINO_USB_MODE=1",
|
||||||
|
"-DARDUINO_USB_CDC_ON_BOOT=1",
|
||||||
|
"-DARDUINO_RUNNING_CORE=1",
|
||||||
|
"-DARDUINO_EVENT_RUNNING_CORE=1"
|
||||||
|
],
|
||||||
|
"f_cpu": "240000000L",
|
||||||
|
"f_flash": "80000000L",
|
||||||
|
"flash_mode": "qio",
|
||||||
|
"hwids": [["0x303A", "0x1001"]],
|
||||||
|
"mcu": "esp32s3",
|
||||||
|
"variant": "esp32s3"
|
||||||
|
},
|
||||||
|
"connectivity": ["wifi"],
|
||||||
|
"debug": {
|
||||||
|
"default_tool": "esp-builtin",
|
||||||
|
"onboard_tools": ["esp-builtin"],
|
||||||
|
"openocd_target": "esp32s3.cfg"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino", "espidf"],
|
||||||
|
"name": "LilyGo Mini-Epaper-S3 (4 MB Flash, 2MB PSRAM)",
|
||||||
|
"upload": {
|
||||||
|
"flash_size": "4MB",
|
||||||
|
"maximum_ram_size": 327680,
|
||||||
|
"maximum_size": 4194304,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"speed": 460800
|
||||||
|
},
|
||||||
|
"url": "https://www.lilygo.cc",
|
||||||
|
"vendor": "LilyGo"
|
||||||
|
}
|
||||||
+1
-1
Submodule protobufs updated: 44298d374f...f7f7c8d2e4
@@ -1,24 +1,29 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "concurrency/OSThread.h"
|
#include "concurrency/OSThread.h"
|
||||||
|
|
||||||
namespace concurrency
|
namespace concurrency
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Periodically invoke a callback. This just provides C-style callback conventions
|
* @brief Periodically invoke a callback.
|
||||||
* rather than a virtual function - FIXME, remove?
|
* Supports both legacy function pointers and modern callables.
|
||||||
*/
|
*/
|
||||||
class Periodic : public OSThread
|
class Periodic : public OSThread
|
||||||
{
|
{
|
||||||
int32_t (*callback)();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// callback returns the period for the next callback invocation (or 0 if we should no longer be called)
|
// callback returns the period for the next callback invocation (or 0 if we should no longer be called)
|
||||||
Periodic(const char *name, int32_t (*_callback)()) : OSThread(name), callback(_callback) {}
|
Periodic(const char *name, int32_t (*cb)()) : OSThread(name), callback(cb) {}
|
||||||
|
Periodic(const char *name, std::function<int32_t()> cb) : OSThread(name), callback(std::move(cb)) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int32_t runOnce() override { return callback(); }
|
int32_t runOnce() override { return callback ? callback() : 0; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::function<int32_t()> callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace concurrency
|
} // namespace concurrency
|
||||||
|
|||||||
@@ -259,6 +259,17 @@ bool EInkDisplay::connect()
|
|||||||
adafruitDisplay->setRotation(3);
|
adafruitDisplay->setRotation(3);
|
||||||
adafruitDisplay->setPartialWindow(0, 0, EINK_WIDTH, EINK_HEIGHT);
|
adafruitDisplay->setPartialWindow(0, 0, EINK_WIDTH, EINK_HEIGHT);
|
||||||
}
|
}
|
||||||
|
#elif defined(MINI_EPAPER_S3)
|
||||||
|
spi1 = new SPIClass(HSPI);
|
||||||
|
spi1->begin(PIN_SPI1_SCK, PIN_SPI1_MISO, PIN_SPI1_MOSI, PIN_EINK_CS);
|
||||||
|
|
||||||
|
// Create GxEPD2 objects
|
||||||
|
auto lowLevel = new EINK_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY, *spi1);
|
||||||
|
adafruitDisplay = new GxEPD2_BW<EINK_DISPLAY_MODEL, EINK_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
||||||
|
|
||||||
|
// Init GxEPD2
|
||||||
|
adafruitDisplay->init();
|
||||||
|
adafruitDisplay->setRotation(1);
|
||||||
#elif defined(HELTEC_WIRELESS_PAPER) || defined(HELTEC_VISION_MASTER_E213)
|
#elif defined(HELTEC_WIRELESS_PAPER) || defined(HELTEC_VISION_MASTER_E213)
|
||||||
|
|
||||||
// Detect display model, before starting SPI
|
// Detect display model, before starting SPI
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ class EInkDisplay : public OLEDDisplay
|
|||||||
SPIClass *hspi = NULL;
|
SPIClass *hspi = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HELTEC_MESH_POCKET) || defined(SEEED_WIO_TRACKER_L1_EINK) || defined(HELTEC_MESH_SOLAR_EINK)
|
#if defined(HELTEC_MESH_POCKET) || defined(SEEED_WIO_TRACKER_L1_EINK) || defined(HELTEC_MESH_SOLAR_EINK) || \
|
||||||
|
defined(MINI_EPAPER_S3)
|
||||||
SPIClass *spi1 = NULL;
|
SPIClass *spi1 = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -875,6 +875,10 @@ int32_t Screen::runOnce()
|
|||||||
break;
|
break;
|
||||||
case Cmd::STOP_ALERT_FRAME:
|
case Cmd::STOP_ALERT_FRAME:
|
||||||
NotificationRenderer::pauseBanner = false;
|
NotificationRenderer::pauseBanner = false;
|
||||||
|
// Return from one-off alert mode back to regular frames.
|
||||||
|
if (!showingNormalScreen && NotificationRenderer::current_notification_type != notificationTypeEnum::text_input) {
|
||||||
|
setFrames();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Cmd::STOP_BOOT_SCREEN:
|
case Cmd::STOP_BOOT_SCREEN:
|
||||||
EINK_ADD_FRAMEFLAG(dispdev, COSMETIC); // E-Ink: Explicitly use full-refresh for next frame
|
EINK_ADD_FRAMEFLAG(dispdev, COSMETIC); // E-Ink: Explicitly use full-refresh for next frame
|
||||||
|
|||||||
@@ -106,6 +106,18 @@ class MeshModule
|
|||||||
/* We allow modules to ignore a request without sending an error if they have a specific reason for it. */
|
/* We allow modules to ignore a request without sending an error if they have a specific reason for it. */
|
||||||
bool ignoreRequest = false;
|
bool ignoreRequest = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the current request is a multi-hop broadcast. Modules should call this in allocReply()
|
||||||
|
* and return NULL to prevent reply storms from broadcast requests that have already been relayed.
|
||||||
|
*/
|
||||||
|
bool isMultiHopBroadcastRequest()
|
||||||
|
{
|
||||||
|
if (currentRequest && isBroadcast(currentRequest->to) && currentRequest->hop_limit < currentRequest->hop_start) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/** If a bound channel name is set, we will only accept received packets that come in on that channel.
|
/** If a bound channel name is set, we will only accept received packets that come in on that channel.
|
||||||
* A special exception (FIXME, not sure if this is a good idea) - packets that arrive on the local interface
|
* A special exception (FIXME, not sure if this is a good idea) - packets that arrive on the local interface
|
||||||
* are allowed on any channel (this lets the local user do anything).
|
* are allowed on any channel (this lets the local user do anything).
|
||||||
|
|||||||
+3
-3
@@ -322,9 +322,9 @@ NodeDB::NodeDB()
|
|||||||
// Uncomment below to always enable UDP broadcasts
|
// Uncomment below to always enable UDP broadcasts
|
||||||
// config.network.enabled_protocols = meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST;
|
// config.network.enabled_protocols = meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST;
|
||||||
|
|
||||||
// If we are setup to broadcast on the default channel, ensure that the telemetry intervals are coerced to the minimum value
|
// If we are setup to broadcast on any default channel slot (with default frequency slot semantics),
|
||||||
// of 30 minutes or more
|
// ensure that the telemetry intervals are coerced to the minimum value of 30 minutes or more.
|
||||||
if (channels.isDefaultChannel(channels.getPrimaryIndex())) {
|
if (channels.hasDefaultChannel()) {
|
||||||
LOG_DEBUG("Coerce telemetry to min of 30 minutes on defaults");
|
LOG_DEBUG("Coerce telemetry to min of 30 minutes on defaults");
|
||||||
moduleConfig.telemetry.device_update_interval = Default::getConfiguredOrMinimumValue(
|
moduleConfig.telemetry.device_update_interval = Default::getConfiguredOrMinimumValue(
|
||||||
moduleConfig.telemetry.device_update_interval, min_default_telemetry_interval_secs);
|
moduleConfig.telemetry.device_update_interval, min_default_telemetry_interval_secs);
|
||||||
|
|||||||
@@ -81,7 +81,9 @@ typedef enum _meshtastic_AdminMessage_ModuleConfigType {
|
|||||||
/* TODO: REPLACE */
|
/* TODO: REPLACE */
|
||||||
meshtastic_AdminMessage_ModuleConfigType_STATUSMESSAGE_CONFIG = 13,
|
meshtastic_AdminMessage_ModuleConfigType_STATUSMESSAGE_CONFIG = 13,
|
||||||
/* Traffic management module config */
|
/* Traffic management module config */
|
||||||
meshtastic_AdminMessage_ModuleConfigType_TRAFFICMANAGEMENT_CONFIG = 14
|
meshtastic_AdminMessage_ModuleConfigType_TRAFFICMANAGEMENT_CONFIG = 14,
|
||||||
|
/* TAK module config */
|
||||||
|
meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG = 15
|
||||||
} meshtastic_AdminMessage_ModuleConfigType;
|
} meshtastic_AdminMessage_ModuleConfigType;
|
||||||
|
|
||||||
typedef enum _meshtastic_AdminMessage_BackupLocation {
|
typedef enum _meshtastic_AdminMessage_BackupLocation {
|
||||||
@@ -395,8 +397,8 @@ extern "C" {
|
|||||||
#define _meshtastic_AdminMessage_ConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ConfigType)(meshtastic_AdminMessage_ConfigType_DEVICEUI_CONFIG+1))
|
#define _meshtastic_AdminMessage_ConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ConfigType)(meshtastic_AdminMessage_ConfigType_DEVICEUI_CONFIG+1))
|
||||||
|
|
||||||
#define _meshtastic_AdminMessage_ModuleConfigType_MIN meshtastic_AdminMessage_ModuleConfigType_MQTT_CONFIG
|
#define _meshtastic_AdminMessage_ModuleConfigType_MIN meshtastic_AdminMessage_ModuleConfigType_MQTT_CONFIG
|
||||||
#define _meshtastic_AdminMessage_ModuleConfigType_MAX meshtastic_AdminMessage_ModuleConfigType_TRAFFICMANAGEMENT_CONFIG
|
#define _meshtastic_AdminMessage_ModuleConfigType_MAX meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG
|
||||||
#define _meshtastic_AdminMessage_ModuleConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ModuleConfigType)(meshtastic_AdminMessage_ModuleConfigType_TRAFFICMANAGEMENT_CONFIG+1))
|
#define _meshtastic_AdminMessage_ModuleConfigType_ARRAYSIZE ((meshtastic_AdminMessage_ModuleConfigType)(meshtastic_AdminMessage_ModuleConfigType_TAK_CONFIG+1))
|
||||||
|
|
||||||
#define _meshtastic_AdminMessage_BackupLocation_MIN meshtastic_AdminMessage_BackupLocation_FLASH
|
#define _meshtastic_AdminMessage_BackupLocation_MIN meshtastic_AdminMessage_BackupLocation_FLASH
|
||||||
#define _meshtastic_AdminMessage_BackupLocation_MAX meshtastic_AdminMessage_BackupLocation_SD
|
#define _meshtastic_AdminMessage_BackupLocation_MAX meshtastic_AdminMessage_BackupLocation_SD
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ extern const pb_msgdesc_t meshtastic_BackupPreferences_msg;
|
|||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
/* meshtastic_NodeDatabase_size depends on runtime parameters */
|
/* meshtastic_NodeDatabase_size depends on runtime parameters */
|
||||||
#define MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_MAX_SIZE meshtastic_BackupPreferences_size
|
#define MESHTASTIC_MESHTASTIC_DEVICEONLY_PB_H_MAX_SIZE meshtastic_BackupPreferences_size
|
||||||
#define meshtastic_BackupPreferences_size 2419
|
#define meshtastic_BackupPreferences_size 2426
|
||||||
#define meshtastic_ChannelFile_size 718
|
#define meshtastic_ChannelFile_size 718
|
||||||
#define meshtastic_DeviceState_size 1737
|
#define meshtastic_DeviceState_size 1737
|
||||||
#define meshtastic_NodeInfoLite_size 196
|
#define meshtastic_NodeInfoLite_size 196
|
||||||
|
|||||||
@@ -93,6 +93,9 @@ typedef struct _meshtastic_LocalModuleConfig {
|
|||||||
/* The part of the config that is specific to the Traffic Management module */
|
/* The part of the config that is specific to the Traffic Management module */
|
||||||
bool has_traffic_management;
|
bool has_traffic_management;
|
||||||
meshtastic_ModuleConfig_TrafficManagementConfig traffic_management;
|
meshtastic_ModuleConfig_TrafficManagementConfig traffic_management;
|
||||||
|
/* TAK Config */
|
||||||
|
bool has_tak;
|
||||||
|
meshtastic_ModuleConfig_TAKConfig tak;
|
||||||
} meshtastic_LocalModuleConfig;
|
} meshtastic_LocalModuleConfig;
|
||||||
|
|
||||||
|
|
||||||
@@ -102,9 +105,9 @@ extern "C" {
|
|||||||
|
|
||||||
/* Initializer values for message structs */
|
/* Initializer values for message structs */
|
||||||
#define meshtastic_LocalConfig_init_default {false, meshtastic_Config_DeviceConfig_init_default, false, meshtastic_Config_PositionConfig_init_default, false, meshtastic_Config_PowerConfig_init_default, false, meshtastic_Config_NetworkConfig_init_default, false, meshtastic_Config_DisplayConfig_init_default, false, meshtastic_Config_LoRaConfig_init_default, false, meshtastic_Config_BluetoothConfig_init_default, 0, false, meshtastic_Config_SecurityConfig_init_default}
|
#define meshtastic_LocalConfig_init_default {false, meshtastic_Config_DeviceConfig_init_default, false, meshtastic_Config_PositionConfig_init_default, false, meshtastic_Config_PowerConfig_init_default, false, meshtastic_Config_NetworkConfig_init_default, false, meshtastic_Config_DisplayConfig_init_default, false, meshtastic_Config_LoRaConfig_init_default, false, meshtastic_Config_BluetoothConfig_init_default, 0, false, meshtastic_Config_SecurityConfig_init_default}
|
||||||
#define meshtastic_LocalModuleConfig_init_default {false, meshtastic_ModuleConfig_MQTTConfig_init_default, false, meshtastic_ModuleConfig_SerialConfig_init_default, false, meshtastic_ModuleConfig_ExternalNotificationConfig_init_default, false, meshtastic_ModuleConfig_StoreForwardConfig_init_default, false, meshtastic_ModuleConfig_RangeTestConfig_init_default, false, meshtastic_ModuleConfig_TelemetryConfig_init_default, false, meshtastic_ModuleConfig_CannedMessageConfig_init_default, 0, false, meshtastic_ModuleConfig_AudioConfig_init_default, false, meshtastic_ModuleConfig_RemoteHardwareConfig_init_default, false, meshtastic_ModuleConfig_NeighborInfoConfig_init_default, false, meshtastic_ModuleConfig_AmbientLightingConfig_init_default, false, meshtastic_ModuleConfig_DetectionSensorConfig_init_default, false, meshtastic_ModuleConfig_PaxcounterConfig_init_default, false, meshtastic_ModuleConfig_StatusMessageConfig_init_default, false, meshtastic_ModuleConfig_TrafficManagementConfig_init_default}
|
#define meshtastic_LocalModuleConfig_init_default {false, meshtastic_ModuleConfig_MQTTConfig_init_default, false, meshtastic_ModuleConfig_SerialConfig_init_default, false, meshtastic_ModuleConfig_ExternalNotificationConfig_init_default, false, meshtastic_ModuleConfig_StoreForwardConfig_init_default, false, meshtastic_ModuleConfig_RangeTestConfig_init_default, false, meshtastic_ModuleConfig_TelemetryConfig_init_default, false, meshtastic_ModuleConfig_CannedMessageConfig_init_default, 0, false, meshtastic_ModuleConfig_AudioConfig_init_default, false, meshtastic_ModuleConfig_RemoteHardwareConfig_init_default, false, meshtastic_ModuleConfig_NeighborInfoConfig_init_default, false, meshtastic_ModuleConfig_AmbientLightingConfig_init_default, false, meshtastic_ModuleConfig_DetectionSensorConfig_init_default, false, meshtastic_ModuleConfig_PaxcounterConfig_init_default, false, meshtastic_ModuleConfig_StatusMessageConfig_init_default, false, meshtastic_ModuleConfig_TrafficManagementConfig_init_default, false, meshtastic_ModuleConfig_TAKConfig_init_default}
|
||||||
#define meshtastic_LocalConfig_init_zero {false, meshtastic_Config_DeviceConfig_init_zero, false, meshtastic_Config_PositionConfig_init_zero, false, meshtastic_Config_PowerConfig_init_zero, false, meshtastic_Config_NetworkConfig_init_zero, false, meshtastic_Config_DisplayConfig_init_zero, false, meshtastic_Config_LoRaConfig_init_zero, false, meshtastic_Config_BluetoothConfig_init_zero, 0, false, meshtastic_Config_SecurityConfig_init_zero}
|
#define meshtastic_LocalConfig_init_zero {false, meshtastic_Config_DeviceConfig_init_zero, false, meshtastic_Config_PositionConfig_init_zero, false, meshtastic_Config_PowerConfig_init_zero, false, meshtastic_Config_NetworkConfig_init_zero, false, meshtastic_Config_DisplayConfig_init_zero, false, meshtastic_Config_LoRaConfig_init_zero, false, meshtastic_Config_BluetoothConfig_init_zero, 0, false, meshtastic_Config_SecurityConfig_init_zero}
|
||||||
#define meshtastic_LocalModuleConfig_init_zero {false, meshtastic_ModuleConfig_MQTTConfig_init_zero, false, meshtastic_ModuleConfig_SerialConfig_init_zero, false, meshtastic_ModuleConfig_ExternalNotificationConfig_init_zero, false, meshtastic_ModuleConfig_StoreForwardConfig_init_zero, false, meshtastic_ModuleConfig_RangeTestConfig_init_zero, false, meshtastic_ModuleConfig_TelemetryConfig_init_zero, false, meshtastic_ModuleConfig_CannedMessageConfig_init_zero, 0, false, meshtastic_ModuleConfig_AudioConfig_init_zero, false, meshtastic_ModuleConfig_RemoteHardwareConfig_init_zero, false, meshtastic_ModuleConfig_NeighborInfoConfig_init_zero, false, meshtastic_ModuleConfig_AmbientLightingConfig_init_zero, false, meshtastic_ModuleConfig_DetectionSensorConfig_init_zero, false, meshtastic_ModuleConfig_PaxcounterConfig_init_zero, false, meshtastic_ModuleConfig_StatusMessageConfig_init_zero, false, meshtastic_ModuleConfig_TrafficManagementConfig_init_zero}
|
#define meshtastic_LocalModuleConfig_init_zero {false, meshtastic_ModuleConfig_MQTTConfig_init_zero, false, meshtastic_ModuleConfig_SerialConfig_init_zero, false, meshtastic_ModuleConfig_ExternalNotificationConfig_init_zero, false, meshtastic_ModuleConfig_StoreForwardConfig_init_zero, false, meshtastic_ModuleConfig_RangeTestConfig_init_zero, false, meshtastic_ModuleConfig_TelemetryConfig_init_zero, false, meshtastic_ModuleConfig_CannedMessageConfig_init_zero, 0, false, meshtastic_ModuleConfig_AudioConfig_init_zero, false, meshtastic_ModuleConfig_RemoteHardwareConfig_init_zero, false, meshtastic_ModuleConfig_NeighborInfoConfig_init_zero, false, meshtastic_ModuleConfig_AmbientLightingConfig_init_zero, false, meshtastic_ModuleConfig_DetectionSensorConfig_init_zero, false, meshtastic_ModuleConfig_PaxcounterConfig_init_zero, false, meshtastic_ModuleConfig_StatusMessageConfig_init_zero, false, meshtastic_ModuleConfig_TrafficManagementConfig_init_zero, false, meshtastic_ModuleConfig_TAKConfig_init_zero}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
#define meshtastic_LocalConfig_device_tag 1
|
#define meshtastic_LocalConfig_device_tag 1
|
||||||
@@ -132,6 +135,7 @@ extern "C" {
|
|||||||
#define meshtastic_LocalModuleConfig_paxcounter_tag 14
|
#define meshtastic_LocalModuleConfig_paxcounter_tag 14
|
||||||
#define meshtastic_LocalModuleConfig_statusmessage_tag 15
|
#define meshtastic_LocalModuleConfig_statusmessage_tag 15
|
||||||
#define meshtastic_LocalModuleConfig_traffic_management_tag 16
|
#define meshtastic_LocalModuleConfig_traffic_management_tag 16
|
||||||
|
#define meshtastic_LocalModuleConfig_tak_tag 17
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define meshtastic_LocalConfig_FIELDLIST(X, a) \
|
#define meshtastic_LocalConfig_FIELDLIST(X, a) \
|
||||||
@@ -171,7 +175,8 @@ X(a, STATIC, OPTIONAL, MESSAGE, ambient_lighting, 12) \
|
|||||||
X(a, STATIC, OPTIONAL, MESSAGE, detection_sensor, 13) \
|
X(a, STATIC, OPTIONAL, MESSAGE, detection_sensor, 13) \
|
||||||
X(a, STATIC, OPTIONAL, MESSAGE, paxcounter, 14) \
|
X(a, STATIC, OPTIONAL, MESSAGE, paxcounter, 14) \
|
||||||
X(a, STATIC, OPTIONAL, MESSAGE, statusmessage, 15) \
|
X(a, STATIC, OPTIONAL, MESSAGE, statusmessage, 15) \
|
||||||
X(a, STATIC, OPTIONAL, MESSAGE, traffic_management, 16)
|
X(a, STATIC, OPTIONAL, MESSAGE, traffic_management, 16) \
|
||||||
|
X(a, STATIC, OPTIONAL, MESSAGE, tak, 17)
|
||||||
#define meshtastic_LocalModuleConfig_CALLBACK NULL
|
#define meshtastic_LocalModuleConfig_CALLBACK NULL
|
||||||
#define meshtastic_LocalModuleConfig_DEFAULT NULL
|
#define meshtastic_LocalModuleConfig_DEFAULT NULL
|
||||||
#define meshtastic_LocalModuleConfig_mqtt_MSGTYPE meshtastic_ModuleConfig_MQTTConfig
|
#define meshtastic_LocalModuleConfig_mqtt_MSGTYPE meshtastic_ModuleConfig_MQTTConfig
|
||||||
@@ -189,6 +194,7 @@ X(a, STATIC, OPTIONAL, MESSAGE, traffic_management, 16)
|
|||||||
#define meshtastic_LocalModuleConfig_paxcounter_MSGTYPE meshtastic_ModuleConfig_PaxcounterConfig
|
#define meshtastic_LocalModuleConfig_paxcounter_MSGTYPE meshtastic_ModuleConfig_PaxcounterConfig
|
||||||
#define meshtastic_LocalModuleConfig_statusmessage_MSGTYPE meshtastic_ModuleConfig_StatusMessageConfig
|
#define meshtastic_LocalModuleConfig_statusmessage_MSGTYPE meshtastic_ModuleConfig_StatusMessageConfig
|
||||||
#define meshtastic_LocalModuleConfig_traffic_management_MSGTYPE meshtastic_ModuleConfig_TrafficManagementConfig
|
#define meshtastic_LocalModuleConfig_traffic_management_MSGTYPE meshtastic_ModuleConfig_TrafficManagementConfig
|
||||||
|
#define meshtastic_LocalModuleConfig_tak_MSGTYPE meshtastic_ModuleConfig_TAKConfig
|
||||||
|
|
||||||
extern const pb_msgdesc_t meshtastic_LocalConfig_msg;
|
extern const pb_msgdesc_t meshtastic_LocalConfig_msg;
|
||||||
extern const pb_msgdesc_t meshtastic_LocalModuleConfig_msg;
|
extern const pb_msgdesc_t meshtastic_LocalModuleConfig_msg;
|
||||||
@@ -200,7 +206,7 @@ extern const pb_msgdesc_t meshtastic_LocalModuleConfig_msg;
|
|||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
#define MESHTASTIC_MESHTASTIC_LOCALONLY_PB_H_MAX_SIZE meshtastic_LocalModuleConfig_size
|
#define MESHTASTIC_MESHTASTIC_LOCALONLY_PB_H_MAX_SIZE meshtastic_LocalModuleConfig_size
|
||||||
#define meshtastic_LocalConfig_size 751
|
#define meshtastic_LocalConfig_size 751
|
||||||
#define meshtastic_LocalModuleConfig_size 813
|
#define meshtastic_LocalModuleConfig_size 820
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
@@ -300,6 +300,10 @@ typedef enum _meshtastic_HardwareModel {
|
|||||||
meshtastic_HardwareModel_TBEAM_1_WATT = 122,
|
meshtastic_HardwareModel_TBEAM_1_WATT = 122,
|
||||||
/* LilyGo T5 S3 ePaper Pro (V1 and V2) */
|
/* LilyGo T5 S3 ePaper Pro (V1 and V2) */
|
||||||
meshtastic_HardwareModel_T5_S3_EPAPER_PRO = 123,
|
meshtastic_HardwareModel_T5_S3_EPAPER_PRO = 123,
|
||||||
|
/* LilyGo T-Beam BPF (144-148Mhz) */
|
||||||
|
meshtastic_HardwareModel_TBEAM_BPF = 124,
|
||||||
|
/* LilyGo T-Mini E-paper S3 Kit */
|
||||||
|
meshtastic_HardwareModel_MINI_EPAPER_S3 = 125,
|
||||||
/* ------------------------------------------------------------------------------------------------------------------------------------------
|
/* ------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
|
Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
|
||||||
------------------------------------------------------------------------------------------------------------------------------------------ */
|
------------------------------------------------------------------------------------------------------------------------------------------ */
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ PB_BIND(meshtastic_ModuleConfig_AmbientLightingConfig, meshtastic_ModuleConfig_A
|
|||||||
PB_BIND(meshtastic_ModuleConfig_StatusMessageConfig, meshtastic_ModuleConfig_StatusMessageConfig, AUTO)
|
PB_BIND(meshtastic_ModuleConfig_StatusMessageConfig, meshtastic_ModuleConfig_StatusMessageConfig, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
PB_BIND(meshtastic_ModuleConfig_TAKConfig, meshtastic_ModuleConfig_TAKConfig, AUTO)
|
||||||
|
|
||||||
|
|
||||||
PB_BIND(meshtastic_RemoteHardwarePin, meshtastic_RemoteHardwarePin, AUTO)
|
PB_BIND(meshtastic_RemoteHardwarePin, meshtastic_RemoteHardwarePin, AUTO)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#ifndef PB_MESHTASTIC_MESHTASTIC_MODULE_CONFIG_PB_H_INCLUDED
|
#ifndef PB_MESHTASTIC_MESHTASTIC_MODULE_CONFIG_PB_H_INCLUDED
|
||||||
#define PB_MESHTASTIC_MESHTASTIC_MODULE_CONFIG_PB_H_INCLUDED
|
#define PB_MESHTASTIC_MESHTASTIC_MODULE_CONFIG_PB_H_INCLUDED
|
||||||
#include <pb.h>
|
#include <pb.h>
|
||||||
|
#include "meshtastic/atak.pb.h"
|
||||||
|
|
||||||
#if PB_PROTO_HEADER_VERSION != 40
|
#if PB_PROTO_HEADER_VERSION != 40
|
||||||
#error Regenerate this file with the current version of nanopb generator.
|
#error Regenerate this file with the current version of nanopb generator.
|
||||||
@@ -448,6 +449,16 @@ typedef struct _meshtastic_ModuleConfig_StatusMessageConfig {
|
|||||||
char node_status[80];
|
char node_status[80];
|
||||||
} meshtastic_ModuleConfig_StatusMessageConfig;
|
} meshtastic_ModuleConfig_StatusMessageConfig;
|
||||||
|
|
||||||
|
/* TAK team/role configuration */
|
||||||
|
typedef struct _meshtastic_ModuleConfig_TAKConfig {
|
||||||
|
/* Team color.
|
||||||
|
Default Unspecifed_Color -> firmware uses Cyan */
|
||||||
|
meshtastic_Team team;
|
||||||
|
/* Member role.
|
||||||
|
Default Unspecifed -> firmware uses TeamMember */
|
||||||
|
meshtastic_MemberRole role;
|
||||||
|
} meshtastic_ModuleConfig_TAKConfig;
|
||||||
|
|
||||||
/* A GPIO pin definition for remote hardware module */
|
/* A GPIO pin definition for remote hardware module */
|
||||||
typedef struct _meshtastic_RemoteHardwarePin {
|
typedef struct _meshtastic_RemoteHardwarePin {
|
||||||
/* GPIO Pin number (must match Arduino) */
|
/* GPIO Pin number (must match Arduino) */
|
||||||
@@ -503,6 +514,8 @@ typedef struct _meshtastic_ModuleConfig {
|
|||||||
meshtastic_ModuleConfig_StatusMessageConfig statusmessage;
|
meshtastic_ModuleConfig_StatusMessageConfig statusmessage;
|
||||||
/* Traffic management module config for mesh network optimization */
|
/* Traffic management module config for mesh network optimization */
|
||||||
meshtastic_ModuleConfig_TrafficManagementConfig traffic_management;
|
meshtastic_ModuleConfig_TrafficManagementConfig traffic_management;
|
||||||
|
/* TAK team/role configuration for TAK_TRACKER */
|
||||||
|
meshtastic_ModuleConfig_TAKConfig tak;
|
||||||
} payload_variant;
|
} payload_variant;
|
||||||
} meshtastic_ModuleConfig;
|
} meshtastic_ModuleConfig;
|
||||||
|
|
||||||
@@ -560,6 +573,9 @@ extern "C" {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_team_ENUMTYPE meshtastic_Team
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_role_ENUMTYPE meshtastic_MemberRole
|
||||||
|
|
||||||
#define meshtastic_RemoteHardwarePin_type_ENUMTYPE meshtastic_RemoteHardwarePinType
|
#define meshtastic_RemoteHardwarePin_type_ENUMTYPE meshtastic_RemoteHardwarePinType
|
||||||
|
|
||||||
|
|
||||||
@@ -581,6 +597,7 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
#define meshtastic_ModuleConfig_CannedMessageConfig_init_default {0, 0, 0, 0, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
||||||
#define meshtastic_ModuleConfig_AmbientLightingConfig_init_default {0, 0, 0, 0, 0}
|
#define meshtastic_ModuleConfig_AmbientLightingConfig_init_default {0, 0, 0, 0, 0}
|
||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_init_default {""}
|
#define meshtastic_ModuleConfig_StatusMessageConfig_init_default {""}
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_init_default {_meshtastic_Team_MIN, _meshtastic_MemberRole_MIN}
|
||||||
#define meshtastic_RemoteHardwarePin_init_default {0, "", _meshtastic_RemoteHardwarePinType_MIN}
|
#define meshtastic_RemoteHardwarePin_init_default {0, "", _meshtastic_RemoteHardwarePinType_MIN}
|
||||||
#define meshtastic_ModuleConfig_init_zero {0, {meshtastic_ModuleConfig_MQTTConfig_init_zero}}
|
#define meshtastic_ModuleConfig_init_zero {0, {meshtastic_ModuleConfig_MQTTConfig_init_zero}}
|
||||||
#define meshtastic_ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0, 0, "", 0, 0, false, meshtastic_ModuleConfig_MapReportSettings_init_zero}
|
#define meshtastic_ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0, 0, "", 0, 0, false, meshtastic_ModuleConfig_MapReportSettings_init_zero}
|
||||||
@@ -599,6 +616,7 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_CannedMessageConfig_init_zero {0, 0, 0, 0, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
#define meshtastic_ModuleConfig_CannedMessageConfig_init_zero {0, 0, 0, 0, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _meshtastic_ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0}
|
||||||
#define meshtastic_ModuleConfig_AmbientLightingConfig_init_zero {0, 0, 0, 0, 0}
|
#define meshtastic_ModuleConfig_AmbientLightingConfig_init_zero {0, 0, 0, 0, 0}
|
||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_init_zero {""}
|
#define meshtastic_ModuleConfig_StatusMessageConfig_init_zero {""}
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_init_zero {_meshtastic_Team_MIN, _meshtastic_MemberRole_MIN}
|
||||||
#define meshtastic_RemoteHardwarePin_init_zero {0, "", _meshtastic_RemoteHardwarePinType_MIN}
|
#define meshtastic_RemoteHardwarePin_init_zero {0, "", _meshtastic_RemoteHardwarePinType_MIN}
|
||||||
|
|
||||||
/* Field tags (for use in manual encoding/decoding) */
|
/* Field tags (for use in manual encoding/decoding) */
|
||||||
@@ -717,6 +735,8 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_AmbientLightingConfig_green_tag 4
|
#define meshtastic_ModuleConfig_AmbientLightingConfig_green_tag 4
|
||||||
#define meshtastic_ModuleConfig_AmbientLightingConfig_blue_tag 5
|
#define meshtastic_ModuleConfig_AmbientLightingConfig_blue_tag 5
|
||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_node_status_tag 1
|
#define meshtastic_ModuleConfig_StatusMessageConfig_node_status_tag 1
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_team_tag 1
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_role_tag 2
|
||||||
#define meshtastic_RemoteHardwarePin_gpio_pin_tag 1
|
#define meshtastic_RemoteHardwarePin_gpio_pin_tag 1
|
||||||
#define meshtastic_RemoteHardwarePin_name_tag 2
|
#define meshtastic_RemoteHardwarePin_name_tag 2
|
||||||
#define meshtastic_RemoteHardwarePin_type_tag 3
|
#define meshtastic_RemoteHardwarePin_type_tag 3
|
||||||
@@ -738,6 +758,7 @@ extern "C" {
|
|||||||
#define meshtastic_ModuleConfig_paxcounter_tag 13
|
#define meshtastic_ModuleConfig_paxcounter_tag 13
|
||||||
#define meshtastic_ModuleConfig_statusmessage_tag 14
|
#define meshtastic_ModuleConfig_statusmessage_tag 14
|
||||||
#define meshtastic_ModuleConfig_traffic_management_tag 15
|
#define meshtastic_ModuleConfig_traffic_management_tag 15
|
||||||
|
#define meshtastic_ModuleConfig_tak_tag 16
|
||||||
|
|
||||||
/* Struct field encoding specification for nanopb */
|
/* Struct field encoding specification for nanopb */
|
||||||
#define meshtastic_ModuleConfig_FIELDLIST(X, a) \
|
#define meshtastic_ModuleConfig_FIELDLIST(X, a) \
|
||||||
@@ -755,7 +776,8 @@ X(a, STATIC, ONEOF, MESSAGE, (payload_variant,ambient_lighting,payload_var
|
|||||||
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,detection_sensor,payload_variant.detection_sensor), 12) \
|
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,detection_sensor,payload_variant.detection_sensor), 12) \
|
||||||
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,paxcounter,payload_variant.paxcounter), 13) \
|
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,paxcounter,payload_variant.paxcounter), 13) \
|
||||||
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,statusmessage,payload_variant.statusmessage), 14) \
|
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,statusmessage,payload_variant.statusmessage), 14) \
|
||||||
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,traffic_management,payload_variant.traffic_management), 15)
|
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,traffic_management,payload_variant.traffic_management), 15) \
|
||||||
|
X(a, STATIC, ONEOF, MESSAGE, (payload_variant,tak,payload_variant.tak), 16)
|
||||||
#define meshtastic_ModuleConfig_CALLBACK NULL
|
#define meshtastic_ModuleConfig_CALLBACK NULL
|
||||||
#define meshtastic_ModuleConfig_DEFAULT NULL
|
#define meshtastic_ModuleConfig_DEFAULT NULL
|
||||||
#define meshtastic_ModuleConfig_payload_variant_mqtt_MSGTYPE meshtastic_ModuleConfig_MQTTConfig
|
#define meshtastic_ModuleConfig_payload_variant_mqtt_MSGTYPE meshtastic_ModuleConfig_MQTTConfig
|
||||||
@@ -773,6 +795,7 @@ X(a, STATIC, ONEOF, MESSAGE, (payload_variant,traffic_management,payload_v
|
|||||||
#define meshtastic_ModuleConfig_payload_variant_paxcounter_MSGTYPE meshtastic_ModuleConfig_PaxcounterConfig
|
#define meshtastic_ModuleConfig_payload_variant_paxcounter_MSGTYPE meshtastic_ModuleConfig_PaxcounterConfig
|
||||||
#define meshtastic_ModuleConfig_payload_variant_statusmessage_MSGTYPE meshtastic_ModuleConfig_StatusMessageConfig
|
#define meshtastic_ModuleConfig_payload_variant_statusmessage_MSGTYPE meshtastic_ModuleConfig_StatusMessageConfig
|
||||||
#define meshtastic_ModuleConfig_payload_variant_traffic_management_MSGTYPE meshtastic_ModuleConfig_TrafficManagementConfig
|
#define meshtastic_ModuleConfig_payload_variant_traffic_management_MSGTYPE meshtastic_ModuleConfig_TrafficManagementConfig
|
||||||
|
#define meshtastic_ModuleConfig_payload_variant_tak_MSGTYPE meshtastic_ModuleConfig_TAKConfig
|
||||||
|
|
||||||
#define meshtastic_ModuleConfig_MQTTConfig_FIELDLIST(X, a) \
|
#define meshtastic_ModuleConfig_MQTTConfig_FIELDLIST(X, a) \
|
||||||
X(a, STATIC, SINGULAR, BOOL, enabled, 1) \
|
X(a, STATIC, SINGULAR, BOOL, enabled, 1) \
|
||||||
@@ -958,6 +981,12 @@ X(a, STATIC, SINGULAR, STRING, node_status, 1)
|
|||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_CALLBACK NULL
|
#define meshtastic_ModuleConfig_StatusMessageConfig_CALLBACK NULL
|
||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_DEFAULT NULL
|
#define meshtastic_ModuleConfig_StatusMessageConfig_DEFAULT NULL
|
||||||
|
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_FIELDLIST(X, a) \
|
||||||
|
X(a, STATIC, SINGULAR, UENUM, team, 1) \
|
||||||
|
X(a, STATIC, SINGULAR, UENUM, role, 2)
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_CALLBACK NULL
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_DEFAULT NULL
|
||||||
|
|
||||||
#define meshtastic_RemoteHardwarePin_FIELDLIST(X, a) \
|
#define meshtastic_RemoteHardwarePin_FIELDLIST(X, a) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, gpio_pin, 1) \
|
X(a, STATIC, SINGULAR, UINT32, gpio_pin, 1) \
|
||||||
X(a, STATIC, SINGULAR, STRING, name, 2) \
|
X(a, STATIC, SINGULAR, STRING, name, 2) \
|
||||||
@@ -982,6 +1011,7 @@ extern const pb_msgdesc_t meshtastic_ModuleConfig_TelemetryConfig_msg;
|
|||||||
extern const pb_msgdesc_t meshtastic_ModuleConfig_CannedMessageConfig_msg;
|
extern const pb_msgdesc_t meshtastic_ModuleConfig_CannedMessageConfig_msg;
|
||||||
extern const pb_msgdesc_t meshtastic_ModuleConfig_AmbientLightingConfig_msg;
|
extern const pb_msgdesc_t meshtastic_ModuleConfig_AmbientLightingConfig_msg;
|
||||||
extern const pb_msgdesc_t meshtastic_ModuleConfig_StatusMessageConfig_msg;
|
extern const pb_msgdesc_t meshtastic_ModuleConfig_StatusMessageConfig_msg;
|
||||||
|
extern const pb_msgdesc_t meshtastic_ModuleConfig_TAKConfig_msg;
|
||||||
extern const pb_msgdesc_t meshtastic_RemoteHardwarePin_msg;
|
extern const pb_msgdesc_t meshtastic_RemoteHardwarePin_msg;
|
||||||
|
|
||||||
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
|
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
|
||||||
@@ -1002,6 +1032,7 @@ extern const pb_msgdesc_t meshtastic_RemoteHardwarePin_msg;
|
|||||||
#define meshtastic_ModuleConfig_CannedMessageConfig_fields &meshtastic_ModuleConfig_CannedMessageConfig_msg
|
#define meshtastic_ModuleConfig_CannedMessageConfig_fields &meshtastic_ModuleConfig_CannedMessageConfig_msg
|
||||||
#define meshtastic_ModuleConfig_AmbientLightingConfig_fields &meshtastic_ModuleConfig_AmbientLightingConfig_msg
|
#define meshtastic_ModuleConfig_AmbientLightingConfig_fields &meshtastic_ModuleConfig_AmbientLightingConfig_msg
|
||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_fields &meshtastic_ModuleConfig_StatusMessageConfig_msg
|
#define meshtastic_ModuleConfig_StatusMessageConfig_fields &meshtastic_ModuleConfig_StatusMessageConfig_msg
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_fields &meshtastic_ModuleConfig_TAKConfig_msg
|
||||||
#define meshtastic_RemoteHardwarePin_fields &meshtastic_RemoteHardwarePin_msg
|
#define meshtastic_RemoteHardwarePin_fields &meshtastic_RemoteHardwarePin_msg
|
||||||
|
|
||||||
/* Maximum encoded size of messages (where known) */
|
/* Maximum encoded size of messages (where known) */
|
||||||
@@ -1020,6 +1051,7 @@ extern const pb_msgdesc_t meshtastic_RemoteHardwarePin_msg;
|
|||||||
#define meshtastic_ModuleConfig_SerialConfig_size 28
|
#define meshtastic_ModuleConfig_SerialConfig_size 28
|
||||||
#define meshtastic_ModuleConfig_StatusMessageConfig_size 81
|
#define meshtastic_ModuleConfig_StatusMessageConfig_size 81
|
||||||
#define meshtastic_ModuleConfig_StoreForwardConfig_size 24
|
#define meshtastic_ModuleConfig_StoreForwardConfig_size 24
|
||||||
|
#define meshtastic_ModuleConfig_TAKConfig_size 4
|
||||||
#define meshtastic_ModuleConfig_TelemetryConfig_size 50
|
#define meshtastic_ModuleConfig_TelemetryConfig_size 50
|
||||||
#define meshtastic_ModuleConfig_TrafficManagementConfig_size 52
|
#define meshtastic_ModuleConfig_TrafficManagementConfig_size 52
|
||||||
#define meshtastic_ModuleConfig_size 227
|
#define meshtastic_ModuleConfig_size 227
|
||||||
|
|||||||
@@ -46,10 +46,6 @@ using namespace httpsserver;
|
|||||||
|
|
||||||
#include "mesh/http/ContentHandler.h"
|
#include "mesh/http/ContentHandler.h"
|
||||||
|
|
||||||
#include <HTTPClient.h>
|
|
||||||
#include <WiFiClientSecure.h>
|
|
||||||
HTTPClient httpClient;
|
|
||||||
|
|
||||||
#define DEST_FS_USES_LITTLEFS
|
#define DEST_FS_USES_LITTLEFS
|
||||||
|
|
||||||
// We need to specify some content-type mapping, so the resources get delivered with the
|
// We need to specify some content-type mapping, so the resources get delivered with the
|
||||||
@@ -344,11 +340,6 @@ void handleFsBrowseStatic(HTTPRequest *req, HTTPResponse *res)
|
|||||||
res->print(jsonString.c_str());
|
res->print(jsonString.c_str());
|
||||||
|
|
||||||
delete value;
|
delete value;
|
||||||
|
|
||||||
// Clean up the fileList to prevent memory leak
|
|
||||||
for (auto *val : fileList) {
|
|
||||||
delete val;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleFsDeleteStatic(HTTPRequest *req, HTTPResponse *res)
|
void handleFsDeleteStatic(HTTPRequest *req, HTTPResponse *res)
|
||||||
@@ -543,6 +534,7 @@ void handleFormUpload(HTTPRequest *req, HTTPResponse *res)
|
|||||||
if (name != "file") {
|
if (name != "file") {
|
||||||
LOG_DEBUG("Skip unexpected field");
|
LOG_DEBUG("Skip unexpected field");
|
||||||
res->println("<p>No file found.</p>");
|
res->println("<p>No file found.</p>");
|
||||||
|
delete parser;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -550,6 +542,7 @@ void handleFormUpload(HTTPRequest *req, HTTPResponse *res)
|
|||||||
if (filename == "") {
|
if (filename == "") {
|
||||||
LOG_DEBUG("Skip unexpected field");
|
LOG_DEBUG("Skip unexpected field");
|
||||||
res->println("<p>No file found.</p>");
|
res->println("<p>No file found.</p>");
|
||||||
|
delete parser;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -783,11 +776,6 @@ void handleNodes(HTTPRequest *req, HTTPResponse *res)
|
|||||||
std::string jsonString = value->Stringify();
|
std::string jsonString = value->Stringify();
|
||||||
res->print(jsonString.c_str());
|
res->print(jsonString.c_str());
|
||||||
delete value;
|
delete value;
|
||||||
|
|
||||||
// Clean up the nodesArray to prevent memory leak
|
|
||||||
for (auto *val : nodesArray) {
|
|
||||||
delete val;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -941,10 +929,5 @@ void handleScanNetworks(HTTPRequest *req, HTTPResponse *res)
|
|||||||
std::string jsonString = value->Stringify();
|
std::string jsonString = value->Stringify();
|
||||||
res->print(jsonString.c_str());
|
res->print(jsonString.c_str());
|
||||||
delete value;
|
delete value;
|
||||||
|
|
||||||
// Clean up the networkObjs to prevent memory leak
|
|
||||||
for (auto *val : networkObjs) {
|
|
||||||
delete val;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <HTTPBodyParser.hpp>
|
#include <HTTPBodyParser.hpp>
|
||||||
#include <HTTPMultipartBodyParser.hpp>
|
#include <HTTPMultipartBodyParser.hpp>
|
||||||
#include <HTTPURLEncodedBodyParser.hpp>
|
#include <HTTPURLEncodedBodyParser.hpp>
|
||||||
|
#include <Throttle.h>
|
||||||
#include <WebServer.h>
|
#include <WebServer.h>
|
||||||
#include <WiFi.h>
|
#include <WiFi.h>
|
||||||
|
|
||||||
@@ -55,6 +56,12 @@ static const int32_t ACTIVE_INTERVAL_MS = 50;
|
|||||||
static const int32_t MEDIUM_INTERVAL_MS = 200;
|
static const int32_t MEDIUM_INTERVAL_MS = 200;
|
||||||
static const int32_t IDLE_INTERVAL_MS = 1000;
|
static const int32_t IDLE_INTERVAL_MS = 1000;
|
||||||
|
|
||||||
|
// Maximum concurrent HTTPS connections (reduced from default 4 to save memory)
|
||||||
|
static const uint8_t MAX_HTTPS_CONNECTIONS = 2;
|
||||||
|
|
||||||
|
// Minimum free heap required for SSL handshake (~40KB for mbedTLS contexts)
|
||||||
|
static const uint32_t MIN_HEAP_FOR_SSL = 40000;
|
||||||
|
|
||||||
static SSLCert *cert;
|
static SSLCert *cert;
|
||||||
static HTTPSServer *secureServer;
|
static HTTPSServer *secureServer;
|
||||||
static HTTPServer *insecureServer;
|
static HTTPServer *insecureServer;
|
||||||
@@ -67,8 +74,20 @@ static void handleWebResponse()
|
|||||||
if (isWifiAvailable()) {
|
if (isWifiAvailable()) {
|
||||||
|
|
||||||
if (isWebServerReady) {
|
if (isWebServerReady) {
|
||||||
if (secureServer)
|
// Check heap before HTTPS processing - SSL requires significant memory
|
||||||
secureServer->loop();
|
if (secureServer) {
|
||||||
|
uint32_t freeHeap = ESP.getFreeHeap();
|
||||||
|
if (freeHeap >= MIN_HEAP_FOR_SSL) {
|
||||||
|
secureServer->loop();
|
||||||
|
} else {
|
||||||
|
// Skip HTTPS when memory is low to prevent SSL setup failures
|
||||||
|
static uint32_t lastHeapWarning = 0;
|
||||||
|
if (lastHeapWarning == 0 || !Throttle::isWithinTimespanMs(lastHeapWarning, 30000)) {
|
||||||
|
LOG_WARN("Low heap (%u bytes), skipping HTTPS processing", freeHeap);
|
||||||
|
lastHeapWarning = millis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
insecureServer->loop();
|
insecureServer->loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -229,7 +248,7 @@ void initWebServer()
|
|||||||
LOG_DEBUG("Init Web Server");
|
LOG_DEBUG("Init Web Server");
|
||||||
|
|
||||||
// We can now use the new certificate to setup our server as usual.
|
// We can now use the new certificate to setup our server as usual.
|
||||||
secureServer = new HTTPSServer(cert);
|
secureServer = new HTTPSServer(cert, 443, MAX_HTTPS_CONNECTIONS);
|
||||||
insecureServer = new HTTPServer();
|
insecureServer = new HTTPServer();
|
||||||
|
|
||||||
registerHandlers(insecureServer, secureServer);
|
registerHandlers(insecureServer, secureServer);
|
||||||
|
|||||||
@@ -321,6 +321,10 @@ bool AirQualityTelemetryModule::getAirQualityTelemetry(meshtastic_Telemetry *m)
|
|||||||
meshtastic_MeshPacket *AirQualityTelemetryModule::allocReply()
|
meshtastic_MeshPacket *AirQualityTelemetryModule::allocReply()
|
||||||
{
|
{
|
||||||
if (currentRequest) {
|
if (currentRequest) {
|
||||||
|
if (isMultiHopBroadcastRequest() && !isSensorOrRouterRole()) {
|
||||||
|
ignoreRequest = true;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
auto req = *currentRequest;
|
auto req = *currentRequest;
|
||||||
const auto &p = req.decoded;
|
const auto &p = req.decoded;
|
||||||
meshtastic_Telemetry scratch;
|
meshtastic_Telemetry scratch;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "BaseTelemetryModule.h"
|
||||||
|
|
||||||
#ifndef AIR_QUALITY_TELEMETRY_MODULE_ENABLE
|
#ifndef AIR_QUALITY_TELEMETRY_MODULE_ENABLE
|
||||||
#define AIR_QUALITY_TELEMETRY_MODULE_ENABLE 0
|
#define AIR_QUALITY_TELEMETRY_MODULE_ENABLE 0
|
||||||
#endif
|
#endif
|
||||||
@@ -17,6 +19,7 @@
|
|||||||
|
|
||||||
class AirQualityTelemetryModule : private concurrency::OSThread,
|
class AirQualityTelemetryModule : private concurrency::OSThread,
|
||||||
public ScanI2CConsumer,
|
public ScanI2CConsumer,
|
||||||
|
public BaseTelemetryModule,
|
||||||
public ProtobufModule<meshtastic_Telemetry>
|
public ProtobufModule<meshtastic_Telemetry>
|
||||||
{
|
{
|
||||||
CallbackObserver<AirQualityTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
CallbackObserver<AirQualityTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "NodeDB.h"
|
||||||
|
#include "configuration.h"
|
||||||
|
|
||||||
|
class BaseTelemetryModule
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
bool isSensorOrRouterRole() const
|
||||||
|
{
|
||||||
|
return config.device.role == meshtastic_Config_DeviceConfig_Role_SENSOR ||
|
||||||
|
config.device.role == meshtastic_Config_DeviceConfig_Role_ROUTER;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -19,8 +19,7 @@
|
|||||||
int32_t DeviceTelemetryModule::runOnce()
|
int32_t DeviceTelemetryModule::runOnce()
|
||||||
{
|
{
|
||||||
refreshUptime();
|
refreshUptime();
|
||||||
bool isImpoliteRole =
|
bool isImpoliteRole = isSensorOrRouterRole();
|
||||||
IS_ONE_OF(config.device.role, meshtastic_Config_DeviceConfig_Role_SENSOR, meshtastic_Config_DeviceConfig_Role_ROUTER);
|
|
||||||
if (((lastSentToMesh == 0) ||
|
if (((lastSentToMesh == 0) ||
|
||||||
((uptimeLastMs - lastSentToMesh) >=
|
((uptimeLastMs - lastSentToMesh) >=
|
||||||
Default::getConfiguredOrDefaultMsScaled(moduleConfig.telemetry.device_update_interval,
|
Default::getConfiguredOrDefaultMsScaled(moduleConfig.telemetry.device_update_interval,
|
||||||
@@ -60,6 +59,10 @@ bool DeviceTelemetryModule::handleReceivedProtobuf(const meshtastic_MeshPacket &
|
|||||||
meshtastic_MeshPacket *DeviceTelemetryModule::allocReply()
|
meshtastic_MeshPacket *DeviceTelemetryModule::allocReply()
|
||||||
{
|
{
|
||||||
if (currentRequest) {
|
if (currentRequest) {
|
||||||
|
if (isMultiHopBroadcastRequest() && !isSensorOrRouterRole()) {
|
||||||
|
ignoreRequest = true;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
auto req = *currentRequest;
|
auto req = *currentRequest;
|
||||||
const auto &p = req.decoded;
|
const auto &p = req.decoded;
|
||||||
meshtastic_Telemetry scratch;
|
meshtastic_Telemetry scratch;
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "BaseTelemetryModule.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
#include <OLEDDisplayUi.h>
|
#include <OLEDDisplayUi.h>
|
||||||
|
|
||||||
class DeviceTelemetryModule : private concurrency::OSThread, public ProtobufModule<meshtastic_Telemetry>
|
class DeviceTelemetryModule : private concurrency::OSThread,
|
||||||
|
public BaseTelemetryModule,
|
||||||
|
public ProtobufModule<meshtastic_Telemetry>
|
||||||
{
|
{
|
||||||
CallbackObserver<DeviceTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
CallbackObserver<DeviceTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
||||||
CallbackObserver<DeviceTelemetryModule, const meshtastic::Status *>(this, &DeviceTelemetryModule::handleStatusUpdate);
|
CallbackObserver<DeviceTelemetryModule, const meshtastic::Status *>(this, &DeviceTelemetryModule::handleStatusUpdate);
|
||||||
|
|||||||
@@ -577,6 +577,10 @@ bool EnvironmentTelemetryModule::getEnvironmentTelemetry(meshtastic_Telemetry *m
|
|||||||
meshtastic_MeshPacket *EnvironmentTelemetryModule::allocReply()
|
meshtastic_MeshPacket *EnvironmentTelemetryModule::allocReply()
|
||||||
{
|
{
|
||||||
if (currentRequest) {
|
if (currentRequest) {
|
||||||
|
if (isMultiHopBroadcastRequest() && !isSensorOrRouterRole()) {
|
||||||
|
ignoreRequest = true;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
auto req = *currentRequest;
|
auto req = *currentRequest;
|
||||||
const auto &p = req.decoded;
|
const auto &p = req.decoded;
|
||||||
meshtastic_Telemetry scratch;
|
meshtastic_Telemetry scratch;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "BaseTelemetryModule.h"
|
||||||
|
|
||||||
#ifndef ENVIRONMENTAL_TELEMETRY_MODULE_ENABLE
|
#ifndef ENVIRONMENTAL_TELEMETRY_MODULE_ENABLE
|
||||||
#define ENVIRONMENTAL_TELEMETRY_MODULE_ENABLE 0
|
#define ENVIRONMENTAL_TELEMETRY_MODULE_ENABLE 0
|
||||||
#endif
|
#endif
|
||||||
@@ -17,6 +19,7 @@
|
|||||||
|
|
||||||
class EnvironmentTelemetryModule : private concurrency::OSThread,
|
class EnvironmentTelemetryModule : private concurrency::OSThread,
|
||||||
public ScanI2CConsumer,
|
public ScanI2CConsumer,
|
||||||
|
public BaseTelemetryModule,
|
||||||
public ProtobufModule<meshtastic_Telemetry>
|
public ProtobufModule<meshtastic_Telemetry>
|
||||||
{
|
{
|
||||||
CallbackObserver<EnvironmentTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
CallbackObserver<EnvironmentTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
||||||
|
|||||||
@@ -192,6 +192,10 @@ bool HealthTelemetryModule::getHealthTelemetry(meshtastic_Telemetry *m)
|
|||||||
meshtastic_MeshPacket *HealthTelemetryModule::allocReply()
|
meshtastic_MeshPacket *HealthTelemetryModule::allocReply()
|
||||||
{
|
{
|
||||||
if (currentRequest) {
|
if (currentRequest) {
|
||||||
|
if (isMultiHopBroadcastRequest() && !isSensorOrRouterRole()) {
|
||||||
|
ignoreRequest = true;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
auto req = *currentRequest;
|
auto req = *currentRequest;
|
||||||
const auto &p = req.decoded;
|
const auto &p = req.decoded;
|
||||||
meshtastic_Telemetry scratch;
|
meshtastic_Telemetry scratch;
|
||||||
|
|||||||
@@ -4,12 +4,15 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "BaseTelemetryModule.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
#include <OLEDDisplayUi.h>
|
#include <OLEDDisplayUi.h>
|
||||||
|
|
||||||
class HealthTelemetryModule : private concurrency::OSThread, public ProtobufModule<meshtastic_Telemetry>
|
class HealthTelemetryModule : private concurrency::OSThread,
|
||||||
|
public BaseTelemetryModule,
|
||||||
|
public ProtobufModule<meshtastic_Telemetry>
|
||||||
{
|
{
|
||||||
CallbackObserver<HealthTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
CallbackObserver<HealthTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
||||||
CallbackObserver<HealthTelemetryModule, const meshtastic::Status *>(this, &HealthTelemetryModule::handleStatusUpdate);
|
CallbackObserver<HealthTelemetryModule, const meshtastic::Status *>(this, &HealthTelemetryModule::handleStatusUpdate);
|
||||||
|
|||||||
@@ -217,6 +217,10 @@ bool PowerTelemetryModule::getPowerTelemetry(meshtastic_Telemetry *m)
|
|||||||
meshtastic_MeshPacket *PowerTelemetryModule::allocReply()
|
meshtastic_MeshPacket *PowerTelemetryModule::allocReply()
|
||||||
{
|
{
|
||||||
if (currentRequest) {
|
if (currentRequest) {
|
||||||
|
if (isMultiHopBroadcastRequest() && !isSensorOrRouterRole()) {
|
||||||
|
ignoreRequest = true;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
auto req = *currentRequest;
|
auto req = *currentRequest;
|
||||||
const auto &p = req.decoded;
|
const auto &p = req.decoded;
|
||||||
meshtastic_Telemetry scratch;
|
meshtastic_Telemetry scratch;
|
||||||
|
|||||||
@@ -5,12 +5,15 @@
|
|||||||
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
||||||
|
|
||||||
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
||||||
|
#include "BaseTelemetryModule.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "ProtobufModule.h"
|
#include "ProtobufModule.h"
|
||||||
#include <OLEDDisplay.h>
|
#include <OLEDDisplay.h>
|
||||||
#include <OLEDDisplayUi.h>
|
#include <OLEDDisplayUi.h>
|
||||||
|
|
||||||
class PowerTelemetryModule : private concurrency::OSThread, public ProtobufModule<meshtastic_Telemetry>
|
class PowerTelemetryModule : private concurrency::OSThread,
|
||||||
|
public BaseTelemetryModule,
|
||||||
|
public ProtobufModule<meshtastic_Telemetry>
|
||||||
{
|
{
|
||||||
CallbackObserver<PowerTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
CallbackObserver<PowerTelemetryModule, const meshtastic::Status *> nodeStatusObserver =
|
||||||
CallbackObserver<PowerTelemetryModule, const meshtastic::Status *>(this, &PowerTelemetryModule::handleStatusUpdate);
|
CallbackObserver<PowerTelemetryModule, const meshtastic::Status *>(this, &PowerTelemetryModule::handleStatusUpdate);
|
||||||
|
|||||||
@@ -52,6 +52,20 @@ NimBLEServer *bleServer;
|
|||||||
static bool passkeyShowing;
|
static bool passkeyShowing;
|
||||||
static std::atomic<uint16_t> nimbleBluetoothConnHandle{BLE_HS_CONN_HANDLE_NONE}; // BLE_HS_CONN_HANDLE_NONE means "no connection"
|
static std::atomic<uint16_t> nimbleBluetoothConnHandle{BLE_HS_CONN_HANDLE_NONE}; // BLE_HS_CONN_HANDLE_NONE means "no connection"
|
||||||
|
|
||||||
|
static void clearPairingDisplay()
|
||||||
|
{
|
||||||
|
if (!passkeyShowing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
passkeyShowing = false;
|
||||||
|
#if HAS_SCREEN
|
||||||
|
if (screen) {
|
||||||
|
screen->endAlert();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
class BluetoothPhoneAPI : public PhoneAPI, public concurrency::OSThread
|
class BluetoothPhoneAPI : public PhoneAPI, public concurrency::OSThread
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -630,13 +644,7 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
|
|||||||
|
|
||||||
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::CONNECTED);
|
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::CONNECTED);
|
||||||
bluetoothStatus->updateStatus(&newStatus);
|
bluetoothStatus->updateStatus(&newStatus);
|
||||||
|
clearPairingDisplay();
|
||||||
// Todo: migrate this display code back into Screen class, and observe bluetoothStatus
|
|
||||||
if (passkeyShowing) {
|
|
||||||
passkeyShowing = false;
|
|
||||||
if (screen)
|
|
||||||
screen->endAlert();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store the connection handle for future use
|
// Store the connection handle for future use
|
||||||
#ifdef NIMBLE_TWO
|
#ifdef NIMBLE_TWO
|
||||||
@@ -693,6 +701,7 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
|
|||||||
|
|
||||||
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED);
|
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED);
|
||||||
bluetoothStatus->updateStatus(&newStatus);
|
bluetoothStatus->updateStatus(&newStatus);
|
||||||
|
clearPairingDisplay();
|
||||||
|
|
||||||
if (bluetoothPhoneAPI) {
|
if (bluetoothPhoneAPI) {
|
||||||
bluetoothPhoneAPI->close();
|
bluetoothPhoneAPI->close();
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ static uint8_t toRadioBytes[meshtastic_ToRadio_size];
|
|||||||
static uint8_t lastToRadio[MAX_TO_FROM_RADIO_SIZE];
|
static uint8_t lastToRadio[MAX_TO_FROM_RADIO_SIZE];
|
||||||
|
|
||||||
static uint16_t connectionHandle;
|
static uint16_t connectionHandle;
|
||||||
|
static bool passkeyShowing;
|
||||||
|
|
||||||
class BluetoothPhoneAPI : public PhoneAPI
|
class BluetoothPhoneAPI : public PhoneAPI
|
||||||
{
|
{
|
||||||
@@ -86,6 +87,16 @@ void onDisconnect(uint16_t conn_handle, uint8_t reason)
|
|||||||
// Notify UI (or any other interested firmware components)
|
// Notify UI (or any other interested firmware components)
|
||||||
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED);
|
meshtastic::BluetoothStatus newStatus(meshtastic::BluetoothStatus::ConnectionState::DISCONNECTED);
|
||||||
bluetoothStatus->updateStatus(&newStatus);
|
bluetoothStatus->updateStatus(&newStatus);
|
||||||
|
|
||||||
|
#if HAS_SCREEN
|
||||||
|
// If a pairing prompt is active, make sure we dismiss it on disconnect/cancel/failure paths.
|
||||||
|
if (passkeyShowing) {
|
||||||
|
passkeyShowing = false;
|
||||||
|
if (screen) {
|
||||||
|
screen->endAlert();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void onCccd(uint16_t conn_hdl, BLECharacteristic *chr, uint16_t cccd_value)
|
void onCccd(uint16_t conn_hdl, BLECharacteristic *chr, uint16_t cccd_value)
|
||||||
{
|
{
|
||||||
@@ -400,6 +411,8 @@ bool NRF52Bluetooth::onPairingPasskey(uint16_t conn_handle, uint8_t const passke
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
passkeyShowing = true;
|
||||||
|
|
||||||
if (match_request) {
|
if (match_request) {
|
||||||
uint32_t start_time = millis();
|
uint32_t start_time = millis();
|
||||||
while (millis() < start_time + 30000) {
|
while (millis() < start_time + 30000) {
|
||||||
@@ -451,6 +464,7 @@ void NRF52Bluetooth::onPairingCompleted(uint16_t conn_handle, uint8_t auth_statu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Todo: migrate this display code back into Screen class, and observe bluetoothStatus
|
// Todo: migrate this display code back into Screen class, and observe bluetoothStatus
|
||||||
|
passkeyShowing = false;
|
||||||
if (screen) {
|
if (screen) {
|
||||||
screen->endAlert();
|
screen->endAlert();
|
||||||
}
|
}
|
||||||
@@ -464,4 +478,4 @@ void NRF52Bluetooth::sendLog(const uint8_t *logMessage, size_t length)
|
|||||||
logRadio.indicate(logMessage, (uint16_t)length);
|
logRadio.indicate(logMessage, (uint16_t)length);
|
||||||
else
|
else
|
||||||
logRadio.notify(logMessage, (uint16_t)length);
|
logRadio.notify(logMessage, (uint16_t)length);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,116 @@
|
|||||||
|
#include "MeshModule.h"
|
||||||
|
#include "MeshTypes.h"
|
||||||
|
#include "TestUtil.h"
|
||||||
|
#include <unity.h>
|
||||||
|
|
||||||
|
// Minimal concrete subclass for testing the base class helper
|
||||||
|
class TestModule : public MeshModule
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TestModule() : MeshModule("TestModule") {}
|
||||||
|
virtual bool wantPacket(const meshtastic_MeshPacket *p) override { return true; }
|
||||||
|
using MeshModule::currentRequest;
|
||||||
|
using MeshModule::isMultiHopBroadcastRequest;
|
||||||
|
};
|
||||||
|
|
||||||
|
static TestModule *testModule;
|
||||||
|
static meshtastic_MeshPacket testPacket;
|
||||||
|
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
testModule = new TestModule();
|
||||||
|
memset(&testPacket, 0, sizeof(testPacket));
|
||||||
|
TestModule::currentRequest = &testPacket;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
TestModule::currentRequest = NULL;
|
||||||
|
delete testModule;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zero-hop broadcast (hop_limit == hop_start): should be allowed
|
||||||
|
static void test_zeroHopBroadcast_isAllowed()
|
||||||
|
{
|
||||||
|
testPacket.to = NODENUM_BROADCAST;
|
||||||
|
testPacket.hop_start = 3;
|
||||||
|
testPacket.hop_limit = 3; // Not yet relayed
|
||||||
|
|
||||||
|
TEST_ASSERT_FALSE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Multi-hop broadcast (hop_limit < hop_start): should be blocked
|
||||||
|
static void test_multiHopBroadcast_isBlocked()
|
||||||
|
{
|
||||||
|
testPacket.to = NODENUM_BROADCAST;
|
||||||
|
testPacket.hop_start = 7;
|
||||||
|
testPacket.hop_limit = 4; // Already relayed 3 hops
|
||||||
|
|
||||||
|
TEST_ASSERT_TRUE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Direct message (not broadcast): should always be allowed regardless of hops
|
||||||
|
static void test_directMessage_isAllowed()
|
||||||
|
{
|
||||||
|
testPacket.to = 0x12345678; // Specific node
|
||||||
|
testPacket.hop_start = 7;
|
||||||
|
testPacket.hop_limit = 4;
|
||||||
|
|
||||||
|
TEST_ASSERT_FALSE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Broadcast with hop_limit == 0 (fully relayed): should be blocked
|
||||||
|
static void test_fullyRelayedBroadcast_isBlocked()
|
||||||
|
{
|
||||||
|
testPacket.to = NODENUM_BROADCAST;
|
||||||
|
testPacket.hop_start = 3;
|
||||||
|
testPacket.hop_limit = 0;
|
||||||
|
|
||||||
|
TEST_ASSERT_TRUE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
// No current request: should not crash, should return false
|
||||||
|
static void test_noCurrentRequest_isAllowed()
|
||||||
|
{
|
||||||
|
TestModule::currentRequest = NULL;
|
||||||
|
|
||||||
|
TEST_ASSERT_FALSE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Broadcast with hop_start == 0 (legacy or local): should be allowed
|
||||||
|
static void test_legacyPacket_zeroHopStart_isAllowed()
|
||||||
|
{
|
||||||
|
testPacket.to = NODENUM_BROADCAST;
|
||||||
|
testPacket.hop_start = 0;
|
||||||
|
testPacket.hop_limit = 0;
|
||||||
|
|
||||||
|
// hop_limit == hop_start, so not multi-hop
|
||||||
|
TEST_ASSERT_FALSE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Single hop relayed broadcast (hop_limit = hop_start - 1): should be blocked
|
||||||
|
static void test_singleHopRelayedBroadcast_isBlocked()
|
||||||
|
{
|
||||||
|
testPacket.to = NODENUM_BROADCAST;
|
||||||
|
testPacket.hop_start = 3;
|
||||||
|
testPacket.hop_limit = 2;
|
||||||
|
|
||||||
|
TEST_ASSERT_TRUE(testModule->isMultiHopBroadcastRequest());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup()
|
||||||
|
{
|
||||||
|
initializeTestEnvironment();
|
||||||
|
|
||||||
|
UNITY_BEGIN();
|
||||||
|
RUN_TEST(test_zeroHopBroadcast_isAllowed);
|
||||||
|
RUN_TEST(test_multiHopBroadcast_isBlocked);
|
||||||
|
RUN_TEST(test_directMessage_isAllowed);
|
||||||
|
RUN_TEST(test_fullyRelayedBroadcast_isBlocked);
|
||||||
|
RUN_TEST(test_noCurrentRequest_isAllowed);
|
||||||
|
RUN_TEST(test_legacyPacket_zeroHopStart_isAllowed);
|
||||||
|
RUN_TEST(test_singleHopRelayedBroadcast_isBlocked);
|
||||||
|
exit(UNITY_END());
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {}
|
||||||
@@ -31,7 +31,7 @@ build_flags =
|
|||||||
|
|
||||||
lib_deps = ${esp32s3_base.lib_deps}
|
lib_deps = ${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
# renovate: datasource=custom.pio depName=PCA9557-arduino packageName=maxpromer/library/PCA9557-arduino
|
# renovate: datasource=custom.pio depName=PCA9557-arduino packageName=maxpromer/library/PCA9557-arduino
|
||||||
maxpromer/PCA9557-arduino@1.0.0
|
maxpromer/PCA9557-arduino@1.0.0
|
||||||
# renovate: datasource=custom.pio depName=SensorLib packageName=lewisxhe/library/SensorLib
|
# renovate: datasource=custom.pio depName=SensorLib packageName=lewisxhe/library/SensorLib
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|
||||||
[env:crowpanel-esp32s3-4-epaper]
|
[env:crowpanel-esp32s3-4-epaper]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
@@ -56,7 +56,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|
||||||
[env:crowpanel-esp32s3-2-epaper]
|
[env:crowpanel-esp32s3-2-epaper]
|
||||||
extends = esp32s3_base
|
extends = esp32s3_base
|
||||||
@@ -86,4 +86,4 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
|
|
||||||
[env:heltec-vision-master-e213-inkhud]
|
[env:heltec-vision-master-e213-inkhud]
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
|
|
||||||
[env:heltec-vision-master-e290-inkhud]
|
[env:heltec-vision-master-e290-inkhud]
|
||||||
|
|||||||
@@ -20,5 +20,5 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/bd33ea58ddfe4a5e4a66d53300ccbd38d66ac21f.zip
|
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
|
|
||||||
[env:heltec-wireless-paper-inkhud]
|
[env:heltec-wireless-paper-inkhud]
|
||||||
|
|||||||
@@ -26,5 +26,5 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define USB_VID 0x303a
|
||||||
|
#define USB_PID 0x1001
|
||||||
|
|
||||||
|
// The default Wire will be mapped to PMU and RTC
|
||||||
|
static const uint8_t SDA = 18;
|
||||||
|
static const uint8_t SCL = 9;
|
||||||
|
|
||||||
|
// Default SPI will be mapped to Radio
|
||||||
|
static const uint8_t SS = -1;
|
||||||
|
static const uint8_t MOSI = 17;
|
||||||
|
static const uint8_t MISO = 6;
|
||||||
|
static const uint8_t SCK = 8;
|
||||||
|
|
||||||
|
#define SPI_MOSI (39)
|
||||||
|
#define SPI_SCK (41)
|
||||||
|
#define SPI_MISO (38)
|
||||||
|
#define SPI_CS (40)
|
||||||
|
|
||||||
|
#define SDCARD_CS SPI_CS
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
[env:mini-epaper-s3]
|
||||||
|
;custom_meshtastic_hw_model =
|
||||||
|
custom_meshtastic_hw_model_slug = MINI_EPAPER_S3
|
||||||
|
custom_meshtastic_architecture = esp32-s3
|
||||||
|
custom_meshtastic_actively_supported = true
|
||||||
|
custom_meshtastic_support_level = 1
|
||||||
|
custom_meshtastic_display_name = LILYGO Mini ePaper S3 E-Ink
|
||||||
|
custom_meshtastic_images = mini-epaper-s3.svg
|
||||||
|
custom_meshtastic_tags = LilyGo
|
||||||
|
custom_meshtastic_requires_dfu = no
|
||||||
|
|
||||||
|
extends = esp32s3_base
|
||||||
|
board = mini-epaper-s3
|
||||||
|
board_check = true
|
||||||
|
upload_protocol = esptool
|
||||||
|
|
||||||
|
build_flags =
|
||||||
|
${esp32s3_base.build_flags}
|
||||||
|
-I variants/esp32s3/mini-epaper-s3
|
||||||
|
-DMINI_EPAPER_S3
|
||||||
|
-DUSE_EINK
|
||||||
|
-DEINK_DISPLAY_MODEL=GxEPD2_102
|
||||||
|
-DEINK_WIDTH=128
|
||||||
|
-DEINK_HEIGHT=80
|
||||||
|
|
||||||
|
lib_deps =
|
||||||
|
${esp32s3_base.lib_deps}
|
||||||
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
# renovate: datasource=custom.pio depName=SensorLib packageName=lewisxhe/library/SensorLib
|
||||||
|
lewisxhe/SensorLib@0.3.4
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Display (E-Ink)
|
||||||
|
|
||||||
|
#define PIN_EINK_CS 13
|
||||||
|
#define PIN_EINK_BUSY 10
|
||||||
|
#define PIN_EINK_RES 11
|
||||||
|
#define PIN_EINK_SCLK 14
|
||||||
|
#define PIN_EINK_MOSI 15
|
||||||
|
#define PIN_EINK_DC 12
|
||||||
|
#define PIN_EINK_EN 42
|
||||||
|
|
||||||
|
#define SPI_INTERFACES_COUNT 2
|
||||||
|
#define PIN_SPI1_MISO -1
|
||||||
|
#define PIN_SPI1_MOSI PIN_EINK_MOSI
|
||||||
|
#define PIN_SPI1_SCK PIN_EINK_SCLK
|
||||||
|
#define DISPLAY_FORCE_SMALL_FONTS
|
||||||
|
|
||||||
|
#define I2C_SDA SDA
|
||||||
|
#define I2C_SCL SCL
|
||||||
|
|
||||||
|
#define BATTERY_PIN 2 // A battery voltage measurement pin, voltage divider connected here to
|
||||||
|
// measure battery voltage ratio of voltage divider = 2.0 (assumption)
|
||||||
|
#define ADC_MULTIPLIER 2.11 // 2.0 + 10% for correction of display undervoltage.
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO2_CHANNEL
|
||||||
|
|
||||||
|
#define HAS_GPS 0
|
||||||
|
#undef GPS_RX_PIN
|
||||||
|
#undef GPS_TX_PIN
|
||||||
|
|
||||||
|
#define BUTTON_PIN 3
|
||||||
|
#define BUTTON_NEED_PULLUP
|
||||||
|
#define ALT_BUTTON_PIN 4
|
||||||
|
#define ALT_BUTTON_ACTIVE_LOW true
|
||||||
|
#define ALT_BUTTON_ACTIVE_PULLUP true
|
||||||
|
#define PIN_BUTTON3 0
|
||||||
|
|
||||||
|
// #define HAS_SDCARD 1
|
||||||
|
// #define SDCARD_USE_SOFT_SPI
|
||||||
|
|
||||||
|
// PCF85063 RTC Module
|
||||||
|
#define PCF85063_RTC 0x51
|
||||||
|
#define HAS_RTC 1
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
#define LORA_DIO1 5
|
||||||
|
#define LORA_SCK 8
|
||||||
|
#define LORA_MISO 6
|
||||||
|
#define LORA_MOSI 17
|
||||||
|
#define LORA_CS 7 // CS not connected; IO7 is free
|
||||||
|
#define LORA_RESET 21
|
||||||
|
|
||||||
|
#ifdef USE_SX1262
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY 16
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
#endif
|
||||||
@@ -31,7 +31,7 @@ build_flags =
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${esp32s3_base.lib_deps}
|
${esp32s3_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|
||||||
[env:tlora-t3s3-epaper-inkhud]
|
[env:tlora-t3s3-epaper-inkhud]
|
||||||
extends = esp32s3_base, inkhud
|
extends = esp32s3_base, inkhud
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/ELECROW
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
# renovate: datasource=custom.pio depName=nRF52_PWM packageName=khoih-prog/library/nRF52_PWM
|
# renovate: datasource=custom.pio depName=nRF52_PWM packageName=khoih-prog/library/nRF52_PWM
|
||||||
khoih-prog/nRF52_PWM@1.0.1
|
khoih-prog/nRF52_PWM@1.0.1
|
||||||
;upload_protocol = fs
|
;upload_protocol = fs
|
||||||
|
|||||||
@@ -23,4 +23,4 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/bd33ea58ddfe4a5e4a66d53300ccbd38d66ac21f.zip
|
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|
||||||
[env:heltec-mesh-pocket-5000-inkhud]
|
[env:heltec-mesh-pocket-5000-inkhud]
|
||||||
extends = nrf52840_base, inkhud
|
extends = nrf52840_base, inkhud
|
||||||
@@ -101,7 +101,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/heltec_
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|
||||||
[env:heltec-mesh-pocket-10000-inkhud]
|
[env:heltec-mesh-pocket-10000-inkhud]
|
||||||
extends = nrf52840_base, inkhud
|
extends = nrf52840_base, inkhud
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ build_flags = ${heltec_mesh_solar_base.build_flags}
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${heltec_mesh_solar_base.lib_deps}
|
${heltec_mesh_solar_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
|
|
||||||
[env:heltec-mesh-solar-inkhud]
|
[env:heltec-mesh-solar-inkhud]
|
||||||
extends = heltec_mesh_solar_base, inkhud
|
extends = heltec_mesh_solar_base, inkhud
|
||||||
@@ -132,4 +132,4 @@ build_flags = ${heltec_mesh_solar_base.build_flags}
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${heltec_mesh_solar_base.lib_deps}
|
${heltec_mesh_solar_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
# renovate: datasource=git-refs depName=meshtastic-st7789 packageName=https://github.com/meshtastic/st7789 gitBranch=main
|
||||||
https://github.com/meshtastic/st7789/archive/bd33ea58ddfe4a5e4a66d53300ccbd38d66ac21f.zip
|
https://github.com/meshtastic/st7789/archive/9ee76d6b18b9a8f45a2c5cae06b1134a587691eb.zip
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/meshlin
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||||
; Note: as of 6/2013 the serial/bootloader based programming takes approximately 30 seconds
|
; Note: as of 6/2013 the serial/bootloader based programming takes approximately 30 seconds
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/seeed_w
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
|
|
||||||
[env:seeed_wio_tracker_L1_eink-inkhud]
|
[env:seeed_wio_tracker_L1_eink-inkhud]
|
||||||
|
|||||||
@@ -30,5 +30,5 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/t-echo-
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
;upload_protocol = fs
|
;upload_protocol = fs
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/t-echo>
|
|||||||
lib_deps =
|
lib_deps =
|
||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
# renovate: datasource=git-refs depName=meshtastic-GxEPD2 packageName=https://github.com/meshtastic/GxEPD2 gitBranch=master
|
||||||
https://github.com/meshtastic/GxEPD2/archive/a05c11c02862624266b61599b0d6ba93e33c6f24.zip
|
https://github.com/meshtastic/GxEPD2/archive/c7eb4c3c167cf396ef4f541cc5d4c6aa42f3c46b.zip
|
||||||
# renovate: datasource=custom.pio depName=SensorLib packageName=lewisxhe/library/SensorLib
|
# renovate: datasource=custom.pio depName=SensorLib packageName=lewisxhe/library/SensorLib
|
||||||
lewisxhe/SensorLib@0.3.4
|
lewisxhe/SensorLib@0.3.4
|
||||||
;upload_protocol = fs
|
;upload_protocol = fs
|
||||||
|
|||||||
Reference in New Issue
Block a user