From 0a8bd1e4bee9b24f9a41203f9490fe1ac4390f3f Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 05:33:51 -0500 Subject: [PATCH 1/5] Add contact admin message (for QR code) (#6806) --- src/mesh/NodeDB.cpp | 20 ++++++++++++++++++++ src/mesh/NodeDB.h | 2 ++ src/modules/AdminModule.cpp | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index b64cb0fe1..0495fa7aa 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -1455,6 +1455,26 @@ void NodeDB::updateTelemetry(uint32_t nodeId, const meshtastic_Telemetry &t, RxS notifyObservers(true); // Force an update whether or not our node counts have changed } +/** + * Update the node database with a new contact + */ +void NodeDB::addFromContact(meshtastic_SharedContact contact) +{ + meshtastic_NodeInfoLite *info = getOrCreateMeshNode(contact.node_num); + if (!info) { + return; + } + info->num = contact.node_num; + info->last_heard = getValidTime(RTCQualityNTP); + info->has_user = true; + info->user = TypeConversions::ConvertToUserLite(contact.user); + info->is_favorite = true; + updateGUIforNode = info; + powerFSM.trigger(EVENT_NODEDB_UPDATED); + notifyObservers(true); // Force an update whether or not our node counts have changed + saveNodeDatabaseToDisk(); +} + /** Update user info and channel for this node based on received user data */ bool NodeDB::updateUser(uint32_t nodeId, meshtastic_User &p, uint8_t channelIndex) diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index 291c3804b..4dbda6a9f 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -110,6 +110,8 @@ class NodeDB /// we updateGUI and updateGUIforNode if we think our this change is big enough for a redraw void updateFrom(const meshtastic_MeshPacket &p); + void addFromContact(const meshtastic_SharedContact); + /** Update position info for this node based on received position data */ void updatePosition(uint32_t nodeId, const meshtastic_Position &p, RxSource src = RX_SRC_RADIO); diff --git a/src/modules/AdminModule.cpp b/src/modules/AdminModule.cpp index 0e1e1555b..cbf82ae73 100644 --- a/src/modules/AdminModule.cpp +++ b/src/modules/AdminModule.cpp @@ -286,6 +286,11 @@ bool AdminModule::handleReceivedProtobuf(const meshtastic_MeshPacket &mp, meshta nodeDB->removeNodeByNum(r->remove_by_nodenum); break; } + case meshtastic_AdminMessage_add_contact_tag: { + LOG_INFO("Client received add_contact command"); + nodeDB->addFromContact(r->add_contact); + break; + } case meshtastic_AdminMessage_set_favorite_node_tag: { LOG_INFO("Client received set_favorite_node command"); meshtastic_NodeInfoLite *node = nodeDB->getMeshNode(r->set_favorite_node); From d9ad2322e8898ff5d9454b2ab3ef1f23a2d32005 Mon Sep 17 00:00:00 2001 From: Richard Zhang <129845637+Richard3366@users.noreply.github.com> Date: Wed, 14 May 2025 19:29:05 +0800 Subject: [PATCH 2/5] Fixes BUG #6243 Heltec Tracker (#6781) * fix wireless tracker screen issues * fix SHTC3 BUG * Remove the 32K crystal oscillator option for the Wireless Paper and Vision Master series. * Correct spelling errors * Update src/graphics/Screen.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Ben Meadors Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/graphics/Screen.cpp | 10 ++++++++++ src/modules/Telemetry/Sensor/SHTC3Sensor.cpp | 2 +- variants/heltec_vision_master_e213/variant.h | 1 - variants/heltec_vision_master_e290/variant.h | 1 - variants/heltec_vision_master_t190/variant.h | 1 - variants/heltec_wireless_paper/variant.h | 1 - variants/heltec_wireless_paper_v1/variant.h | 1 - 7 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 1ee0c0fdd..4f73c79be 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1612,6 +1612,9 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) #ifdef T_WATCH_S3 PMU->enablePowerOutput(XPOWERS_ALDO2); #endif +#ifdef HELTEC_TRACKER_V1_X + uint8_t tft_vext_enabled=digitalRead(VEXT_ENABLE); +#endif #if !ARCH_PORTDUINO dispdev->displayOn(); #endif @@ -1622,6 +1625,13 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) #endif dispdev->displayOn(); +#ifdef HELTEC_TRACKER_V1_X + // If the TFT VEXT power is not enabled, initialize the UI. + if(!tft_vext_enabled) + { + ui->init(); + } +#endif #ifdef USE_ST7789 pinMode(VTFT_CTRL, OUTPUT); digitalWrite(VTFT_CTRL, LOW); diff --git a/src/modules/Telemetry/Sensor/SHTC3Sensor.cpp b/src/modules/Telemetry/Sensor/SHTC3Sensor.cpp index dbebec9d3..e9c4d2a0b 100644 --- a/src/modules/Telemetry/Sensor/SHTC3Sensor.cpp +++ b/src/modules/Telemetry/Sensor/SHTC3Sensor.cpp @@ -15,7 +15,7 @@ int32_t SHTC3Sensor::runOnce() if (!hasSensor()) { return DEFAULT_SENSOR_MINIMUM_WAIT_TIME_BETWEEN_READS; } - status = shtc3.begin(); + status = shtc3.begin(nodeTelemetrySensorsMap[sensorType].second); return initI2CSensor(); } diff --git a/variants/heltec_vision_master_e213/variant.h b/variants/heltec_vision_master_e213/variant.h index 49b8e91f5..ebb2c341f 100644 --- a/variants/heltec_vision_master_e213/variant.h +++ b/variants/heltec_vision_master_e213/variant.h @@ -31,7 +31,6 @@ #define ADC_CHANNEL ADC1_GPIO7_CHANNEL #define ADC_MULTIPLIER 4.9 * 1.03 #define ADC_ATTENUATION ADC_ATTEN_DB_2_5 -#define HAS_32768HZ // LoRa #define USE_SX1262 diff --git a/variants/heltec_vision_master_e290/variant.h b/variants/heltec_vision_master_e290/variant.h index 9d6041539..02986d26b 100644 --- a/variants/heltec_vision_master_e290/variant.h +++ b/variants/heltec_vision_master_e290/variant.h @@ -30,7 +30,6 @@ #define ADC_CHANNEL ADC1_GPIO7_CHANNEL #define ADC_MULTIPLIER 4.9 * 1.03 #define ADC_ATTENUATION ADC_ATTEN_DB_2_5 -#define HAS_32768HZ // LoRa #define USE_SX1262 diff --git a/variants/heltec_vision_master_t190/variant.h b/variants/heltec_vision_master_t190/variant.h index 1da3f9971..788466919 100644 --- a/variants/heltec_vision_master_t190/variant.h +++ b/variants/heltec_vision_master_t190/variant.h @@ -47,7 +47,6 @@ #define ADC_CHANNEL ADC1_GPIO6_CHANNEL #define ADC_MULTIPLIER 4.9 * 1.03 // Voltage divider is roughly 1:1 #define ADC_ATTENUATION ADC_ATTEN_DB_2_5 // Voltage divider output is quite high -#define HAS_32768HZ // LoRa #define USE_SX1262 diff --git a/variants/heltec_wireless_paper/variant.h b/variants/heltec_wireless_paper/variant.h index 0385945e6..bbfd54ada 100644 --- a/variants/heltec_wireless_paper/variant.h +++ b/variants/heltec_wireless_paper/variant.h @@ -28,7 +28,6 @@ #define ADC_MULTIPLIER 2 // Voltage divider is roughly 1:1 #define BAT_MEASURE_ADC_UNIT 2 // Use ADC2 #define ADC_ATTENUATION ADC_ATTEN_DB_12 // Voltage divider output is quite high -#define HAS_32768HZ #define ADC_CTRL_ENABLED LOW #define NO_EXT_GPIO 1 diff --git a/variants/heltec_wireless_paper_v1/variant.h b/variants/heltec_wireless_paper_v1/variant.h index fe8f391df..4505395c9 100644 --- a/variants/heltec_wireless_paper_v1/variant.h +++ b/variants/heltec_wireless_paper_v1/variant.h @@ -29,7 +29,6 @@ #define ADC_MULTIPLIER 2 // Voltage divider is roughly 1:1 #define BAT_MEASURE_ADC_UNIT 2 // Use ADC2 #define ADC_ATTENUATION ADC_ATTEN_DB_12 // Voltage divider output is quite high -#define HAS_32768HZ #define ADC_CTRL_ENABLED LOW #define NO_EXT_GPIO 1 From 94af3bd1ab8eb94d2aaa9be3e510b591768b0623 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 06:31:18 -0500 Subject: [PATCH 3/5] Formatting --- src/graphics/Screen.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 4f73c79be..61999ee79 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -1613,7 +1613,7 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) PMU->enablePowerOutput(XPOWERS_ALDO2); #endif #ifdef HELTEC_TRACKER_V1_X - uint8_t tft_vext_enabled=digitalRead(VEXT_ENABLE); + uint8_t tft_vext_enabled = digitalRead(VEXT_ENABLE); #endif #if !ARCH_PORTDUINO dispdev->displayOn(); @@ -1627,9 +1627,8 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver) dispdev->displayOn(); #ifdef HELTEC_TRACKER_V1_X // If the TFT VEXT power is not enabled, initialize the UI. - if(!tft_vext_enabled) - { - ui->init(); + if (!tft_vext_enabled) { + ui->init(); } #endif #ifdef USE_ST7789 From b1955c34aa80dd7e2ed9e08a7e17b1bd532f793b Mon Sep 17 00:00:00 2001 From: rcarteraz Date: Wed, 14 May 2025 04:32:24 -0700 Subject: [PATCH 4/5] Update Seeed Solar Node (#6763) * Update Seeed Solar Node * Update Seeed Solar Node * updates * updates * updates --------- Co-authored-by: Ben Meadors --- boards/{Seeed_Solar_Node.json => seeed_solar_node.json} | 4 ++-- .../{Seeed_Solar_Node => seeed_solar_node}/platformio.ini | 8 ++++---- .../{Seeed_Solar_Node => seeed_solar_node}/variant.cpp | 0 variants/{Seeed_Solar_Node => seeed_solar_node}/variant.h | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename boards/{Seeed_Solar_Node.json => seeed_solar_node.json} (94%) rename variants/{Seeed_Solar_Node => seeed_solar_node}/platformio.ini (76%) rename variants/{Seeed_Solar_Node => seeed_solar_node}/variant.cpp (100%) rename variants/{Seeed_Solar_Node => seeed_solar_node}/variant.h (100%) diff --git a/boards/Seeed_Solar_Node.json b/boards/seeed_solar_node.json similarity index 94% rename from boards/Seeed_Solar_Node.json rename to boards/seeed_solar_node.json index e1b502cfa..e77fbd077 100644 --- a/boards/Seeed_Solar_Node.json +++ b/boards/seeed_solar_node.json @@ -10,7 +10,7 @@ "hwids": [["0x2886", "0x0059"]], "usb_product": "XIAO-BOOT", "mcu": "nrf52840", - "variant": "Seeed_Solar_Node", + "variant": "seeed_solar_node", "bsp": { "name": "adafruit" }, @@ -31,7 +31,7 @@ "openocd_target": "nrf52840-mdk-rs" }, "frameworks": ["arduino"], - "name": "Seeed_Solar_Node", + "name": "seeed_solar_node", "upload": { "maximum_ram_size": 248832, "maximum_size": 815104, diff --git a/variants/Seeed_Solar_Node/platformio.ini b/variants/seeed_solar_node/platformio.ini similarity index 76% rename from variants/Seeed_Solar_Node/platformio.ini rename to variants/seeed_solar_node/platformio.ini index 5ee0a5e8f..eb91a435f 100644 --- a/variants/Seeed_Solar_Node/platformio.ini +++ b/variants/seeed_solar_node/platformio.ini @@ -1,13 +1,13 @@ -[env:Seeed_Solar_Node] -board = Seeed_Solar_Node +[env:seeed_solar_node] +board = seeed_solar_node extends = nrf52840_base ;board_level = extra build_flags = ${nrf52840_base.build_flags} - -I $PROJECT_DIR/variants/Seeed_Solar_Node + -I $PROJECT_DIR/variants/seeed_solar_node -D SEEED_SOLAR_NODE -Isrc/platform/nrf52/softdevice -Isrc/platform/nrf52/softdevice/nrf52 board_build.ldscript = src/platform/nrf52/nrf52840_s140_v7.ld -build_src_filter = ${nrf52_base.build_src_filter} +<../variants/Seeed_Solar_Node> +build_src_filter = ${nrf52_base.build_src_filter} +<../variants/seeed_solar_node> lib_deps = ${nrf52840_base.lib_deps} debug_tool = jlink diff --git a/variants/Seeed_Solar_Node/variant.cpp b/variants/seeed_solar_node/variant.cpp similarity index 100% rename from variants/Seeed_Solar_Node/variant.cpp rename to variants/seeed_solar_node/variant.cpp diff --git a/variants/Seeed_Solar_Node/variant.h b/variants/seeed_solar_node/variant.h similarity index 100% rename from variants/Seeed_Solar_Node/variant.h rename to variants/seeed_solar_node/variant.h From feafd2bc0c94a6e85077543c20a5a626e1e7eea6 Mon Sep 17 00:00:00 2001 From: todd-herbert Date: Wed, 14 May 2025 23:33:51 +1200 Subject: [PATCH 5/5] Protect T-Echo's touch button against phantom presses in OLED UI (#6735) * Guard T-Echo touch button during LoRa TX * Guard for T-Echo only --------- Co-authored-by: Ben Meadors --- src/ButtonThread.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/ButtonThread.cpp b/src/ButtonThread.cpp index 352885dbe..8db52c074 100644 --- a/src/ButtonThread.cpp +++ b/src/ButtonThread.cpp @@ -300,14 +300,23 @@ int32_t ButtonThread::runOnce() #ifdef BUTTON_PIN_TOUCH case BUTTON_EVENT_TOUCH_LONG_PRESSED: { LOG_BUTTON("Touch press!"); - if (screen) { - // Wake if asleep - if (powerFSM.getState() == &stateDARK) - powerFSM.trigger(EVENT_PRESS); + // Ignore if: no screen + if (!screen) + break; - // Update display (legacy behaviour) - screen->forceDisplay(); - } +#ifdef TTGO_T_ECHO + // Ignore if: TX in progress + // Uncommon T-Echo hardware bug, LoRa TX triggers touch button + if (!RadioLibInterface::instance || RadioLibInterface::instance->isSending()) + break; +#endif + + // Wake if asleep + if (powerFSM.getState() == &stateDARK) + powerFSM.trigger(EVENT_PRESS); + + // Update display (legacy behaviour) + screen->forceDisplay(); break; } #endif // BUTTON_PIN_TOUCH