From 05b1fc83bd4a4cfae1296d33aea2499cb8966181 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 Feb 2023 16:16:38 -0600 Subject: [PATCH 01/14] [create-pull-request] automated change (#2300) Co-authored-by: thebentern --- protobufs | 2 +- src/mesh/generated/meshtastic/deviceonly.pb.h | 2 +- src/mesh/generated/meshtastic/localonly.pb.h | 2 +- .../generated/meshtastic/module_config.pb.h | 17 +++++++++++++---- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/protobufs b/protobufs index 05f49816c..275ddfd2d 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 05f49816cd8d7d405e052753f0aee8275cf33d36 +Subproject commit 275ddfd2d017c5a806f2de2975892d197e404c27 diff --git a/src/mesh/generated/meshtastic/deviceonly.pb.h b/src/mesh/generated/meshtastic/deviceonly.pb.h index deb3514f9..db19ba0ac 100644 --- a/src/mesh/generated/meshtastic/deviceonly.pb.h +++ b/src/mesh/generated/meshtastic/deviceonly.pb.h @@ -188,7 +188,7 @@ extern const pb_msgdesc_t meshtastic_OEMStore_msg; /* Maximum encoded size of messages (where known) */ #define meshtastic_ChannelFile_size 638 #define meshtastic_DeviceState_size 21800 -#define meshtastic_OEMStore_size 2998 +#define meshtastic_OEMStore_size 3006 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/meshtastic/localonly.pb.h b/src/mesh/generated/meshtastic/localonly.pb.h index f2b85f1fb..6aa0fdbeb 100644 --- a/src/mesh/generated/meshtastic/localonly.pb.h +++ b/src/mesh/generated/meshtastic/localonly.pb.h @@ -157,7 +157,7 @@ extern const pb_msgdesc_t meshtastic_LocalModuleConfig_msg; /* Maximum encoded size of messages (where known) */ #define meshtastic_LocalConfig_size 440 -#define meshtastic_LocalModuleConfig_size 412 +#define meshtastic_LocalModuleConfig_size 420 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/meshtastic/module_config.pb.h b/src/mesh/generated/meshtastic/module_config.pb.h index 50fed5197..82d8e8d04 100644 --- a/src/mesh/generated/meshtastic/module_config.pb.h +++ b/src/mesh/generated/meshtastic/module_config.pb.h @@ -222,6 +222,11 @@ typedef struct _meshtastic_ModuleConfig_TelemetryConfig { /* We'll always read the sensor in Celsius, but sometimes we might want to display the results in Fahrenheit as a "user preference". */ bool environment_display_fahrenheit; + /* Enable/Disable the air quality metrics */ + bool air_quality_enabled; + /* Interval in seconds of how often we should try to send our + air quality metrics to the mesh */ + uint32_t air_quality_interval; } meshtastic_ModuleConfig_TelemetryConfig; /* TODO: REPLACE */ @@ -325,7 +330,7 @@ extern "C" { #define meshtastic_ModuleConfig_ExternalNotificationConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_ModuleConfig_StoreForwardConfig_init_default {0, 0, 0, 0, 0} #define meshtastic_ModuleConfig_RangeTestConfig_init_default {0, 0, 0} -#define meshtastic_ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 0} +#define meshtastic_ModuleConfig_TelemetryConfig_init_default {0, 0, 0, 0, 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_init_zero {0, {meshtastic_ModuleConfig_MQTTConfig_init_zero}} #define meshtastic_ModuleConfig_MQTTConfig_init_zero {0, "", "", "", 0, 0} @@ -335,7 +340,7 @@ extern "C" { #define meshtastic_ModuleConfig_ExternalNotificationConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define meshtastic_ModuleConfig_StoreForwardConfig_init_zero {0, 0, 0, 0, 0} #define meshtastic_ModuleConfig_RangeTestConfig_init_zero {0, 0, 0} -#define meshtastic_ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 0} +#define meshtastic_ModuleConfig_TelemetryConfig_init_zero {0, 0, 0, 0, 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} /* Field tags (for use in manual encoding/decoding) */ @@ -387,6 +392,8 @@ extern "C" { #define meshtastic_ModuleConfig_TelemetryConfig_environment_measurement_enabled_tag 3 #define meshtastic_ModuleConfig_TelemetryConfig_environment_screen_enabled_tag 4 #define meshtastic_ModuleConfig_TelemetryConfig_environment_display_fahrenheit_tag 5 +#define meshtastic_ModuleConfig_TelemetryConfig_air_quality_enabled_tag 6 +#define meshtastic_ModuleConfig_TelemetryConfig_air_quality_interval_tag 7 #define meshtastic_ModuleConfig_CannedMessageConfig_rotary1_enabled_tag 1 #define meshtastic_ModuleConfig_CannedMessageConfig_inputbroker_pin_a_tag 2 #define meshtastic_ModuleConfig_CannedMessageConfig_inputbroker_pin_b_tag 3 @@ -507,7 +514,9 @@ X(a, STATIC, SINGULAR, UINT32, device_update_interval, 1) \ X(a, STATIC, SINGULAR, UINT32, environment_update_interval, 2) \ X(a, STATIC, SINGULAR, BOOL, environment_measurement_enabled, 3) \ X(a, STATIC, SINGULAR, BOOL, environment_screen_enabled, 4) \ -X(a, STATIC, SINGULAR, BOOL, environment_display_fahrenheit, 5) +X(a, STATIC, SINGULAR, BOOL, environment_display_fahrenheit, 5) \ +X(a, STATIC, SINGULAR, BOOL, air_quality_enabled, 6) \ +X(a, STATIC, SINGULAR, UINT32, air_quality_interval, 7) #define meshtastic_ModuleConfig_TelemetryConfig_CALLBACK NULL #define meshtastic_ModuleConfig_TelemetryConfig_DEFAULT NULL @@ -558,7 +567,7 @@ extern const pb_msgdesc_t meshtastic_ModuleConfig_CannedMessageConfig_msg; #define meshtastic_ModuleConfig_RemoteHardwareConfig_size 2 #define meshtastic_ModuleConfig_SerialConfig_size 26 #define meshtastic_ModuleConfig_StoreForwardConfig_size 22 -#define meshtastic_ModuleConfig_TelemetryConfig_size 18 +#define meshtastic_ModuleConfig_TelemetryConfig_size 26 #define meshtastic_ModuleConfig_size 204 #ifdef __cplusplus From 46fa08dc3311a9b2c7a5d192ea915f5196ba599d Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 23 Feb 2023 13:05:24 -0600 Subject: [PATCH 02/14] Air quality specific prefs (#2303) --- src/mesh/NodeDB.cpp | 1 + src/modules/Telemetry/AirQualityTelemetry.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 9702fb5f2..ebf214316 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -246,6 +246,7 @@ void NodeDB::initModuleConfigIntervals() { moduleConfig.telemetry.device_update_interval = default_broadcast_interval_secs; moduleConfig.telemetry.environment_update_interval = default_broadcast_interval_secs; + moduleConfig.telemetry.air_quality_interval = default_broadcast_interval_secs; } void NodeDB::installDefaultChannels() diff --git a/src/modules/Telemetry/AirQualityTelemetry.cpp b/src/modules/Telemetry/AirQualityTelemetry.cpp index 966e2d0ff..c300e1f96 100644 --- a/src/modules/Telemetry/AirQualityTelemetry.cpp +++ b/src/modules/Telemetry/AirQualityTelemetry.cpp @@ -16,9 +16,9 @@ int32_t AirQualityTelemetryModule::runOnce() without having to configure it from the PythonAPI or WebUI. */ - // moduleConfig.telemetry.environment_measurement_enabled = 1; + // moduleConfig.telemetry.air_quality_enabled = 1; - if (!(moduleConfig.telemetry.environment_measurement_enabled)) { + if (!(moduleConfig.telemetry.air_quality_enabled)) { // If this module is not enabled, and the user doesn't want the display screen don't waste any OSThread time on it return disable(); } @@ -27,7 +27,7 @@ int32_t AirQualityTelemetryModule::runOnce() // This is the first time the OSThread library has called this function, so do some setup firstTime = 0; - if (moduleConfig.telemetry.environment_measurement_enabled) { + if (moduleConfig.telemetry.air_quality_enabled) { LOG_INFO("Air quality Telemetry: Initializing\n"); if (!aqi.begin_I2C()) { LOG_WARN("Could not establish i2c connection to AQI sensor\n"); @@ -38,12 +38,12 @@ int32_t AirQualityTelemetryModule::runOnce() return result; } else { // if we somehow got to a second run of this module with measurement disabled, then just wait forever - if (!moduleConfig.telemetry.environment_measurement_enabled) + if (!moduleConfig.telemetry.air_quality_enabled) return result; uint32_t now = millis(); if (((lastSentToMesh == 0) || - ((now - lastSentToMesh) >= getConfiguredOrDefaultMs(moduleConfig.telemetry.environment_update_interval))) && + ((now - lastSentToMesh) >= getConfiguredOrDefaultMs(moduleConfig.telemetry.air_quality_interval))) && airTime->isTxAllowedAirUtil()) { sendTelemetry(); lastSentToMesh = now; From fab5e4c5cceb83b770ff307e0807d313578526f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 3 Feb 2023 00:42:35 +0100 Subject: [PATCH 03/14] potential fix for Range Test Leak. Poking around in the dark. --- src/modules/esp32/RangeTestModule.cpp | 12 ++---------- src/modules/esp32/RangeTestModule.h | 7 ------- 2 files changed, 2 insertions(+), 17 deletions(-) diff --git a/src/modules/esp32/RangeTestModule.cpp b/src/modules/esp32/RangeTestModule.cpp index dbbb47ea7..608e0868c 100644 --- a/src/modules/esp32/RangeTestModule.cpp +++ b/src/modules/esp32/RangeTestModule.cpp @@ -56,7 +56,7 @@ int32_t RangeTestModule::runOnce() return (5000); // Sending first message 5 seconds after initilization. } else { LOG_INFO("Initializing Range Test Module -- Receiver\n"); - return (INT32_MAX); + return disable(); // This thread does not need to run as a receiver } @@ -91,17 +91,9 @@ int32_t RangeTestModule::runOnce() return disable(); } -meshtastic_MeshPacket *RangeTestModuleRadio::allocReply() -{ - - auto reply = allocDataPacket(); // Allocate a packet for sending - - return reply; -} - void RangeTestModuleRadio::sendPayload(NodeNum dest, bool wantReplies) { - meshtastic_MeshPacket *p = allocReply(); + meshtastic_MeshPacket *p = allocDataPacket(); p->to = dest; p->decoded.want_response = wantReplies; diff --git a/src/modules/esp32/RangeTestModule.h b/src/modules/esp32/RangeTestModule.h index e404bd8b6..533621d47 100644 --- a/src/modules/esp32/RangeTestModule.h +++ b/src/modules/esp32/RangeTestModule.h @@ -43,14 +43,7 @@ class RangeTestModuleRadio : public SinglePortModule */ bool appendFile(const meshtastic_MeshPacket &mp); - /** - * Kevin's magical calculation of two points to meters. - */ - float latLongToMeter(double lat_a, double lng_a, double lat_b, double lng_b); - protected: - virtual meshtastic_MeshPacket *allocReply() override; - /** Called to handle a particular incoming message @return ProcessMessage::STOP if you've guaranteed you've handled this message and no other handlers should be considered for From 9650adb6162475d046f47daaf506b937a84852be Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 24 Feb 2023 11:25:50 -0600 Subject: [PATCH 04/14] Set reasonable defaults for sensor role and adjust packet priority (#2305) --- protobufs | 2 +- src/mesh/NodeDB.cpp | 3 +++ src/mesh/generated/meshtastic/config.pb.h | 9 ++++++--- src/modules/Telemetry/AirQualityTelemetry.cpp | 5 ++++- src/modules/Telemetry/EnvironmentTelemetry.cpp | 6 ++++-- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/protobufs b/protobufs index 275ddfd2d..9825eadc8 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 275ddfd2d017c5a806f2de2975892d197e404c27 +Subproject commit 9825eadc84d3af5ffe8b3432b7b2072f03e3de23 diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index ebf214316..aef156fed 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -239,6 +239,9 @@ void NodeDB::installRoleDefaults(meshtastic_Config_DeviceConfig_Role role) config.position.position_broadcast_smart_enabled = false; config.position.position_broadcast_secs = 120; config.position.gps_update_interval = 60; + } else if (role == meshtastic_Config_DeviceConfig_Role_SENSOR) { + moduleConfig.telemetry.environment_measurement_enabled = true; + moduleConfig.telemetry.environment_update_interval = 450; } } diff --git a/src/mesh/generated/meshtastic/config.pb.h b/src/mesh/generated/meshtastic/config.pb.h index 0ffb4ccec..fcb129bef 100644 --- a/src/mesh/generated/meshtastic/config.pb.h +++ b/src/mesh/generated/meshtastic/config.pb.h @@ -31,7 +31,10 @@ typedef enum _meshtastic_Config_DeviceConfig_Role { meshtastic_Config_DeviceConfig_Role_REPEATER = 4, /* Tracker device role Position Mesh packets will be prioritized higher and sent more frequently by default. */ - meshtastic_Config_DeviceConfig_Role_TRACKER = 5 + meshtastic_Config_DeviceConfig_Role_TRACKER = 5, + /* Sensor device role + Telemetry Mesh packets will be prioritized higher and sent more frequently by default. */ + meshtastic_Config_DeviceConfig_Role_SENSOR = 6 } meshtastic_Config_DeviceConfig_Role; /* Defines the device's behavior for how messages are rebroadcast */ @@ -453,8 +456,8 @@ extern "C" { /* Helper constants for enums */ #define _meshtastic_Config_DeviceConfig_Role_MIN meshtastic_Config_DeviceConfig_Role_CLIENT -#define _meshtastic_Config_DeviceConfig_Role_MAX meshtastic_Config_DeviceConfig_Role_TRACKER -#define _meshtastic_Config_DeviceConfig_Role_ARRAYSIZE ((meshtastic_Config_DeviceConfig_Role)(meshtastic_Config_DeviceConfig_Role_TRACKER+1)) +#define _meshtastic_Config_DeviceConfig_Role_MAX meshtastic_Config_DeviceConfig_Role_SENSOR +#define _meshtastic_Config_DeviceConfig_Role_ARRAYSIZE ((meshtastic_Config_DeviceConfig_Role)(meshtastic_Config_DeviceConfig_Role_SENSOR+1)) #define _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN meshtastic_Config_DeviceConfig_RebroadcastMode_ALL #define _meshtastic_Config_DeviceConfig_RebroadcastMode_MAX meshtastic_Config_DeviceConfig_RebroadcastMode_LOCAL_ONLY diff --git a/src/modules/Telemetry/AirQualityTelemetry.cpp b/src/modules/Telemetry/AirQualityTelemetry.cpp index c300e1f96..de74c0bf9 100644 --- a/src/modules/Telemetry/AirQualityTelemetry.cpp +++ b/src/modules/Telemetry/AirQualityTelemetry.cpp @@ -108,7 +108,10 @@ bool AirQualityTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly) meshtastic_MeshPacket *p = allocDataProtobuf(m); p->to = dest; p->decoded.want_response = false; - p->priority = meshtastic_MeshPacket_Priority_MIN; + if (config.device.role == meshtastic_Config_DeviceConfig_Role_SENSOR) + p->priority = meshtastic_MeshPacket_Priority_RELIABLE; + else + p->priority = meshtastic_MeshPacket_Priority_MIN; // release previous packet before occupying a new spot if (lastMeasurementPacket != nullptr) diff --git a/src/modules/Telemetry/EnvironmentTelemetry.cpp b/src/modules/Telemetry/EnvironmentTelemetry.cpp index bd7ed539a..3b8a7dda1 100644 --- a/src/modules/Telemetry/EnvironmentTelemetry.cpp +++ b/src/modules/Telemetry/EnvironmentTelemetry.cpp @@ -244,8 +244,10 @@ bool EnvironmentTelemetryModule::sendTelemetry(NodeNum dest, bool phoneOnly) meshtastic_MeshPacket *p = allocDataProtobuf(m); p->to = dest; p->decoded.want_response = false; - p->priority = meshtastic_MeshPacket_Priority_MIN; - + if (config.device.role == meshtastic_Config_DeviceConfig_Role_SENSOR) + p->priority = meshtastic_MeshPacket_Priority_RELIABLE; + else + p->priority = meshtastic_MeshPacket_Priority_MIN; // release previous packet before occupying a new spot if (lastMeasurementPacket != nullptr) packetPool.release(lastMeasurementPacket); From fbfd0f12b5b0ef1086966b9bbaba08d538f164d9 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 24 Feb 2023 12:49:10 -0600 Subject: [PATCH 05/14] Change to 5 minutes for Garth's sanity --- src/mesh/NodeDB.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index aef156fed..0748f50aa 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -241,7 +241,7 @@ void NodeDB::installRoleDefaults(meshtastic_Config_DeviceConfig_Role role) config.position.gps_update_interval = 60; } else if (role == meshtastic_Config_DeviceConfig_Role_SENSOR) { moduleConfig.telemetry.environment_measurement_enabled = true; - moduleConfig.telemetry.environment_update_interval = 450; + moduleConfig.telemetry.environment_update_interval = 300; } } From c9ae90f03cd90b09a917e72a3aa8090ee556bbd3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 24 Feb 2023 15:07:39 -0600 Subject: [PATCH 06/14] [create-pull-request] automated change (#2306) Co-authored-by: thebentern --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index d0805fbbf..202cb0780 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ [VERSION] major = 2 minor = 0 -build = 22 +build = 23 From 408c555f0f4c30f2ad6668ced6342554e9e98dc6 Mon Sep 17 00:00:00 2001 From: GUVWAF <78759985+GUVWAF@users.noreply.github.com> Date: Sun, 26 Feb 2023 02:51:38 +0100 Subject: [PATCH 07/14] Add airtime of current received/transmitted packet to nextTx time of all pending retransmissions (#2309) To avoid unnecessary retransmissions when sending them too early Co-authored-by: Ben Meadors --- src/mesh/RadioInterface.cpp | 2 +- src/mesh/RadioInterface.h | 2 +- src/mesh/ReliableRouter.cpp | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/mesh/RadioInterface.cpp b/src/mesh/RadioInterface.cpp index 94dab0bcd..118aab5a6 100644 --- a/src/mesh/RadioInterface.cpp +++ b/src/mesh/RadioInterface.cpp @@ -175,7 +175,7 @@ uint32_t RadioInterface::getPacketTime(uint32_t pl) return msecs; } -uint32_t RadioInterface::getPacketTime(meshtastic_MeshPacket *p) +uint32_t RadioInterface::getPacketTime(const meshtastic_MeshPacket *p) { uint32_t pl = 0; if (p->which_payload_variant == meshtastic_MeshPacket_encrypted_tag) { diff --git a/src/mesh/RadioInterface.h b/src/mesh/RadioInterface.h index b9511fd5d..68dbf3522 100644 --- a/src/mesh/RadioInterface.h +++ b/src/mesh/RadioInterface.h @@ -154,7 +154,7 @@ class RadioInterface * * @return num msecs for the packet */ - uint32_t getPacketTime(meshtastic_MeshPacket *p); + uint32_t getPacketTime(const meshtastic_MeshPacket *p); uint32_t getPacketTime(uint32_t totalPacketLen); /** diff --git a/src/mesh/ReliableRouter.cpp b/src/mesh/ReliableRouter.cpp index 3d07ff77e..774be9c17 100644 --- a/src/mesh/ReliableRouter.cpp +++ b/src/mesh/ReliableRouter.cpp @@ -24,6 +24,15 @@ ErrorCode ReliableRouter::send(meshtastic_MeshPacket *p) startRetransmission(copy); } + /* If we have pending retransmissions, add the airtime of this packet to it, because during that time we cannot receive an + (implicit) ACK. Otherwise, we might retransmit too early. + */ + for (auto i = pending.begin(); i != pending.end(); i++) { + if (i->first.id != p->id) { + i->second.nextTxMsec += iface->getPacketTime(p); + } + } + return FloodingRouter::send(p); } @@ -53,6 +62,15 @@ bool ReliableRouter::shouldFilterReceived(const meshtastic_MeshPacket *p) } } + /* At this point we have already deleted the pending retransmission if this packet was an (implicit) ACK to it. + Now for all other pending retransmissions, we have to add the airtime of this received packet to the retransmission timer, + because while receiving this packet, we could not have received an (implicit) ACK for it. + If we don't add this, we will likely retransmit too early. + */ + for (auto i = pending.begin(); i != pending.end(); i++) { + i->second.nextTxMsec += iface->getPacketTime(p); + } + /* Resend implicit ACKs for repeated packets (assuming the original packet was sent with HOP_RELIABLE) * this way if an implicit ACK is dropped and a packet is resent we'll rebroadcast again. * Resending real ACKs is omitted, as you might receive a packet multiple times due to flooding and From 9008c755176b9e11da22816ca0e5fa2dac2a0d9c Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Tue, 28 Feb 2023 14:45:10 +0100 Subject: [PATCH 08/14] Fixed: Tlora-t3s3-v1 SX1262 firmware reboots continuously (#2308) (#2315) --- boards/tlora-t3s3-v1.json | 2 +- platformio.ini | 1 + src/main.cpp | 26 +++++++++++++------------- variants/tlora_t3s3_v1/platformio.ini | 1 + variants/tlora_t3s3_v1/variant.h | 9 +++++---- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/boards/tlora-t3s3-v1.json b/boards/tlora-t3s3-v1.json index 5af53084f..d073fc7c1 100644 --- a/boards/tlora-t3s3-v1.json +++ b/boards/tlora-t3s3-v1.json @@ -14,7 +14,7 @@ "f_cpu": "240000000L", "f_flash": "80000000L", "flash_mode": "dio", - "hwids": [["0X303A", "0x1001"]], + "hwids": [["0x303A", "0x1001"]], "mcu": "esp32s3", "variant": "tlora-t3s3-v1" }, diff --git a/platformio.ini b/platformio.ini index 4f8f53d0c..af18a6f8b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,6 +13,7 @@ default_envs = tbeam ;default_envs = tlora_v1_3 ;default_envs = tlora-v2 ;default_envs = tlora-v2-1-1.6 +;default_envs = tlora-t3s3-v1 ;default_envs = lora-relay-v1 # nrf board ;default_envs = t-echo ;default_envs = nrf52840dk-geeksville diff --git a/src/main.cpp b/src/main.cpp index e2e39ebd2..c1afb5c18 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -420,19 +420,6 @@ void setup() } #endif -#if defined(USE_SX1280) - if (!rIf) { - rIf = new SX1280Interface(SX128X_CS, SX128X_DIO1, SX128X_RESET, SX128X_BUSY, SPI); - if (!rIf->init()) { - LOG_WARN("Failed to find SX1280 radio\n"); - delete rIf; - rIf = NULL; - } else { - LOG_INFO("SX1280 Radio init succeeded, using SX1280 radio\n"); - } - } -#endif - #if defined(USE_SX1262) if (!rIf) { rIf = new SX1262Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI); @@ -472,6 +459,19 @@ void setup() } #endif +#if defined(USE_SX1280) + if (!rIf) { + rIf = new SX1280Interface(SX128X_CS, SX128X_DIO1, SX128X_RESET, SX128X_BUSY, SPI); + if (!rIf->init()) { + LOG_WARN("Failed to find SX1280 radio\n"); + delete rIf; + rIf = NULL; + } else { + LOG_INFO("SX1280 Radio init succeeded, using SX1280 radio\n"); + } + } +#endif + // check if the radio chip matches the selected region if ((config.lora.region == meshtastic_Config_LoRaConfig_RegionCode_LORA_24) && (!rIf->wideLora())) { diff --git a/variants/tlora_t3s3_v1/platformio.ini b/variants/tlora_t3s3_v1/platformio.ini index aa8189199..568e8af42 100644 --- a/variants/tlora_t3s3_v1/platformio.ini +++ b/variants/tlora_t3s3_v1/platformio.ini @@ -1,6 +1,7 @@ [env:tlora-t3s3-v1] extends = esp32s3_base board = tlora-t3s3-v1 +upload_protocol = esp-builtin lib_deps = ${esp32_base.lib_deps} caveman99/ESP32 Codec2@^1.0.1 diff --git a/variants/tlora_t3s3_v1/variant.h b/variants/tlora_t3s3_v1/variant.h index 116911ae0..68eb18e31 100644 --- a/variants/tlora_t3s3_v1/variant.h +++ b/variants/tlora_t3s3_v1/variant.h @@ -37,11 +37,12 @@ #ifdef USE_SX1262 #define SX126X_CS RF95_NSS // FIXME - we really should define LORA_CS instead -#define SX126X_DIO1 LORA_DIO1 -#define SX126X_BUSY 36 +#define SX126X_DIO1 33 +#define SX126X_BUSY 34 #define SX126X_RESET LORA_RESET -#define SX126X_RXEN 21 -#define SX126X_TXEN 10 +//#define SX126X_RXEN 21 +//#define SX126X_TXEN 10 +#define SX126X_E22 #endif #ifdef USE_SX1280 From 2fe5eae183dabb83c3a9aa3e18d57e61d13e2ec3 Mon Sep 17 00:00:00 2001 From: code8buster Date: Wed, 1 Mar 2023 14:34:07 +0000 Subject: [PATCH 09/14] Fix overlapping of GPS message on screen carousel #1 (#2314) * Fix overlapping of GPS message on screen carousel #1 * Any reason we shouldn't display this on a RAK w/ E-ink or similar non-PMU equipped boards? --------- Co-authored-by: Ben Meadors --- src/graphics/Screen.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index c935c354f..12d08cd17 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -518,18 +518,12 @@ static void drawGPS(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus // Draw status when gps is disabled by PMU static void drawGPSpowerstat(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus *gps) { -#ifdef HAS_PMU String displayLine = "GPS disabled"; int16_t xPos = display->getStringWidth(displayLine); if (!config.position.gps_enabled) { display->drawString(x + xPos, y, displayLine); -#ifdef GPS_POWER_TOGGLE - display->drawString(x + xPos, y - 2 + FONT_HEIGHT_SMALL, " by button"); -#endif - // display->drawString(x + xPos, y + 2, displayLine); } -#endif } static void drawGPSAltitude(OLEDDisplay *display, int16_t x, int16_t y, const GPSStatus *gps) @@ -1440,11 +1434,7 @@ void DebugInfo::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16 } // Display GPS status if (!config.position.gps_enabled) { - int16_t yPos = y + 2; -#ifdef GPS_POWER_TOGGLE - yPos = (y + 10 + FONT_HEIGHT_SMALL); -#endif - drawGPSpowerstat(display, x, yPos, gpsStatus); + drawGPSpowerstat(display, x, y + 2, gpsStatus); } else { if (config.display.displaymode == meshtastic_Config_DisplayConfig_DisplayMode_DEFAULT) { drawGPS(display, x + (SCREEN_WIDTH * 0.63), y + 2, gpsStatus); @@ -1761,6 +1751,9 @@ void DebugInfo::drawFrameSettings(OLEDDisplay *display, OLEDDisplayUiState *stat drawGPScoordinates(display, x, y + FONT_HEIGHT_SMALL * 3, gpsStatus); } else { drawGPSpowerstat(display, x - (SCREEN_WIDTH / 4), y + FONT_HEIGHT_SMALL * 2, gpsStatus); +#ifdef GPS_POWER_TOGGLE + display->drawString(x + 30, (y + FONT_HEIGHT_SMALL * 3), " by button"); +#endif } /* Display a heartbeat pixel that blinks every time the frame is redrawn */ #ifdef SHOW_REDRAWS From d17aafa91a2475d5c3d7efaa4d22250f775f32eb Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 1 Mar 2023 08:35:52 -0600 Subject: [PATCH 10/14] Trying to debug transient "disconnects" in iOS (#2312) * Add back lines from original Adafruit example sketch * Stop advertising debug message * Yank it --- src/platform/nrf52/NRF52Bluetooth.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/platform/nrf52/NRF52Bluetooth.cpp b/src/platform/nrf52/NRF52Bluetooth.cpp index 044b57ae6..59d11717a 100644 --- a/src/platform/nrf52/NRF52Bluetooth.cpp +++ b/src/platform/nrf52/NRF52Bluetooth.cpp @@ -92,12 +92,12 @@ void startAdv(void) Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); // IncludeService UUID - // Bluefruit.ScanResponse.addService(meshBleService); + Bluefruit.ScanResponse.addService(meshBleService); Bluefruit.ScanResponse.addTxPower(); Bluefruit.ScanResponse.addName(); // Include Name - // Bluefruit.Advertising.addName(); + Bluefruit.Advertising.addName(); Bluefruit.Advertising.addService(meshBleService); /* Start Advertising From 214feb1f21a9fd7ec45b14908ad04d96528521ee Mon Sep 17 00:00:00 2001 From: "A. Rager" Date: Wed, 1 Mar 2023 06:36:25 -0800 Subject: [PATCH 11/14] Add Hardware: BetaFPV 900 Nano TX (#2249) Co-authored-by: Ben Meadors --- src/platform/esp32/architecture.h | 2 ++ variants/betafpv_900_tx_nano/platformio.ini | 16 ++++++++++++ variants/betafpv_900_tx_nano/variant.h | 28 +++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 variants/betafpv_900_tx_nano/platformio.ini create mode 100644 variants/betafpv_900_tx_nano/variant.h diff --git a/src/platform/esp32/architecture.h b/src/platform/esp32/architecture.h index edd16ebbd..45ee7e6d4 100644 --- a/src/platform/esp32/architecture.h +++ b/src/platform/esp32/architecture.h @@ -97,6 +97,8 @@ #define HW_VENDOR meshtastic_HardwareModel_BETAFPV_2400_TX #elif defined(NANO_G1_EXPLORER) #define HW_VENDOR meshtastic_HardwareModel_NANO_G1_EXPLORER +#elif defined(BETAFPV_900_TX_NANO) +#define HW_VENDOR meshtastic_HardwareModel_BETAFPV_900_NANO_TX #endif // diff --git a/variants/betafpv_900_tx_nano/platformio.ini b/variants/betafpv_900_tx_nano/platformio.ini new file mode 100644 index 000000000..e4c945cab --- /dev/null +++ b/variants/betafpv_900_tx_nano/platformio.ini @@ -0,0 +1,16 @@ +[env:betafpv_900_tx_nano] +extends = esp32_base +board = esp32doit-devkit-v1 +build_flags = + ${esp32_base.build_flags} + -D BETAFPV_900_TX_NANO + -D VTABLES_IN_FLASH=1 + -D CONFIG_DISABLE_HAL_LOCKS=1 + -O2 + -I variants/betafpv_900_tx_nano +board_build.f_cpu = 240000000L +upload_protocol = esptool +upload_port = /dev/ttyUSB0 +upload_speed = 460800 +lib_deps = + ${esp32_base.lib_deps} diff --git a/variants/betafpv_900_tx_nano/variant.h b/variants/betafpv_900_tx_nano/variant.h new file mode 100644 index 000000000..01961d92d --- /dev/null +++ b/variants/betafpv_900_tx_nano/variant.h @@ -0,0 +1,28 @@ +// https://betafpv.com/products/elrs-nano-tx-module + +// no screen +#define HAS_SCREEN 0 + +// NO GPS +#undef GPS_RX_PIN +#undef GPS_TX_PIN + +#define USE_RF95 + +#define RF95_SCK 18 +#define RF95_MISO 19 +#define RF95_MOSI 23 +#define RF95_NSS 5 + +#define LORA_DIO0 4 +#define LORA_RESET 14 +#define LORA_DIO1 2 +#define LORA_DIO2 +#define LORA_DIO3 + +#define LED_PIN 16 // green - blue is at 17 + +#define BUTTON_PIN 25 +#define BUTTON_NEED_PULLUP + +#undef EXT_NOTIFY_OUT From 7bb281d5c569870c27cdd65bcd14507148e4ca9b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Mar 2023 12:31:58 -0600 Subject: [PATCH 12/14] [create-pull-request] automated change (#2316) Co-authored-by: thebentern --- protobufs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/protobufs b/protobufs index 9825eadc8..b3d05ec99 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 9825eadc84d3af5ffe8b3432b7b2072f03e3de23 +Subproject commit b3d05ec995844ae888e1d43d6e5c770b7d654309 From 8c059a8a9efad5e22f03a9d191f622e5a0307104 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 2 Mar 2023 08:34:00 -0600 Subject: [PATCH 13/14] [create-pull-request] automated change (#2317) Co-authored-by: thebentern --- version.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.properties b/version.properties index 202cb0780..dca62c699 100644 --- a/version.properties +++ b/version.properties @@ -1,4 +1,4 @@ [VERSION] major = 2 minor = 0 -build = 23 +build = 24 From eb4ab26e1f8e292666a1c05309147f0c3ad6eeb6 Mon Sep 17 00:00:00 2001 From: GUVWAF <78759985+GUVWAF@users.noreply.github.com> Date: Thu, 2 Mar 2023 20:22:14 +0100 Subject: [PATCH 14/14] Check if packet is decrypted before searching node in DB (#2320) * Check whether TraceRouteModule exists In case in the future we don't enable it * Check whether packet is decrypted before searching node in DB --- src/mesh/FloodingRouter.cpp | 3 ++- src/mesh/MeshService.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/mesh/FloodingRouter.cpp b/src/mesh/FloodingRouter.cpp index d0925d0a1..d8861943e 100644 --- a/src/mesh/FloodingRouter.cpp +++ b/src/mesh/FloodingRouter.cpp @@ -44,7 +44,8 @@ void FloodingRouter::sniffReceived(const meshtastic_MeshPacket *p, const meshtas tosend->hop_limit--; // bump down the hop count // If it is a traceRoute request, update the route that it went via me - if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag && traceRouteModule->wantPacket(p)) { + if (p->which_payload_variant == meshtastic_MeshPacket_decoded_tag && traceRouteModule && + traceRouteModule->wantPacket(p)) { traceRouteModule->updateRoute(tosend); } diff --git a/src/mesh/MeshService.cpp b/src/mesh/MeshService.cpp index 80fea011b..650f6882b 100644 --- a/src/mesh/MeshService.cpp +++ b/src/mesh/MeshService.cpp @@ -76,7 +76,7 @@ int MeshService::handleFromRadio(const meshtastic_MeshPacket *mp) powerFSM.trigger(EVENT_PACKET_FOR_PHONE); // Possibly keep the node from sleeping nodeDB.updateFrom(*mp); // update our DB state based off sniffing every RX packet from the radio - if (!nodeDB.getNode(mp->from)->has_user && nodeInfoModule) { + if (mp->which_payload_variant == meshtastic_MeshPacket_decoded_tag && !nodeDB.getNode(mp->from)->has_user && nodeInfoModule) { LOG_INFO("Heard a node we don't know, sending NodeInfo and asking for a response.\n"); nodeInfoModule->sendOurNodeInfo(mp->from, true); }