From bb1a5d09bcaab9bf29e8cd64b9c1633ef22d3046 Mon Sep 17 00:00:00 2001 From: l0g-lab Date: Wed, 10 Sep 2025 18:20:40 -0400 Subject: [PATCH 01/63] add node_name_length option --- meshtastic/config.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 12c79c5..1b88360 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -811,6 +811,12 @@ message Config { * If true, the device will display the time in 12-hour format on screen. */ bool use_12h_clock = 12; + + /* + * If false (default), the device will use short names for various display screens. + * If true, node names will show in long format + */ + bool use_long_node_name = 13; } /* From 550702a695bc31651c758757ccf70f0fbe9cc43c Mon Sep 17 00:00:00 2001 From: ford-jones Date: Thu, 11 Sep 2025 14:17:24 +1200 Subject: [PATCH 02/63] Added mute state to channel settings --- meshtastic/channel.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 16c8c19..b59591e 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -86,6 +86,11 @@ message ChannelSettings { * Per-channel module settings. */ ModuleSettings module_settings = 7; + + /* + * Whether or not we should receive notifactions / alerts from this channel + */ + bool mute = 8; } /* From 638917dea8bb36b2823261c9fbc87430c859b3c3 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Thu, 11 Sep 2025 17:31:36 +1200 Subject: [PATCH 03/63] Added mute state to nodedb entries --- meshtastic/admin.proto | 10 ++++++++++ meshtastic/deviceonly.proto | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 0259c2a..2f805ca 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -414,6 +414,16 @@ message AdminMessage { */ uint32 remove_ignored_node = 48; + /* + * Set specified node-num to be muted + */ + uint32 set_muted_node = 49; + + /* + * Set specified node-num to be heard / not-muted + */ + uint32 remove_muted_node = 50; + /* * Begins an edit transaction for config, module config, owner, and channel settings changes * This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index d449373..7465399 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -159,16 +159,22 @@ message NodeInfoLite { */ bool is_ignored = 11; + /* + * True if node has been muted + * Persists between NodeDB internal clean ups + */ + bool is_muted = 12; + /* * Last byte of the node number of the node that should be used as the next hop to reach this node. */ - uint32 next_hop = 12; + uint32 next_hop = 13; /* * Bitfield for storing booleans. * LSB 0 is_key_manually_verified */ - uint32 bitfield = 13; + uint32 bitfield = 14; } /* From b7e0ef2ec7510d11fce39ffc2e420f3739014f0e Mon Sep 17 00:00:00 2001 From: ford-jones Date: Thu, 11 Sep 2025 20:11:16 +1200 Subject: [PATCH 04/63] Added mute state to channel settings --- meshtastic/channel.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 16c8c19..b59591e 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -86,6 +86,11 @@ message ChannelSettings { * Per-channel module settings. */ ModuleSettings module_settings = 7; + + /* + * Whether or not we should receive notifactions / alerts from this channel + */ + bool mute = 8; } /* From 6fa4def9710522ecacb68531597ed6e464fe0e19 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Thu, 11 Sep 2025 20:16:08 +1200 Subject: [PATCH 05/63] Added muted state to node info --- meshtastic/admin.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 0259c2a..2f805ca 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -414,6 +414,16 @@ message AdminMessage { */ uint32 remove_ignored_node = 48; + /* + * Set specified node-num to be muted + */ + uint32 set_muted_node = 49; + + /* + * Set specified node-num to be heard / not-muted + */ + uint32 remove_muted_node = 50; + /* * Begins an edit transaction for config, module config, owner, and channel settings changes * This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings) From e5abb26b83cf2eccc538a55f3532672e14d823f9 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sat, 13 Sep 2025 13:30:54 +1200 Subject: [PATCH 06/63] Make use of pre-existing channel_settings.module_settings.is_client_muted setting --- meshtastic/channel.proto | 5 ----- 1 file changed, 5 deletions(-) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index b59591e..16c8c19 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -86,11 +86,6 @@ message ChannelSettings { * Per-channel module settings. */ ModuleSettings module_settings = 7; - - /* - * Whether or not we should receive notifactions / alerts from this channel - */ - bool mute = 8; } /* From 080fd3b0d174af36271545415687aeafd1b4131d Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sat, 13 Sep 2025 17:44:41 +1200 Subject: [PATCH 07/63] Revert previous commit - this needs it's own proto --- meshtastic/channel.proto | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 16c8c19..0c9ff13 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -86,6 +86,13 @@ message ChannelSettings { * Per-channel module settings. */ ModuleSettings module_settings = 7; + + /* + * Whether or not we should receive notifactions / alerts through this channel + * Note: This is NOT the same as module_settings.is_client_mute which pertains + * to the device role. + */ + bool mute = 8; } /* From e8d10fe47874e248e7897eb8e3562f296606ac7a Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sat, 13 Sep 2025 17:48:58 +1200 Subject: [PATCH 08/63] Remove trailing whitespace --- meshtastic/channel.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 0c9ff13..8605d63 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -89,7 +89,7 @@ message ChannelSettings { /* * Whether or not we should receive notifactions / alerts through this channel - * Note: This is NOT the same as module_settings.is_client_mute which pertains + * Note: This is NOT the same as module_settings.is_client_mute which pertains * to the device role. */ bool mute = 8; From b90ea12cc81ce213c3763b5b25df9c11b01ffb56 Mon Sep 17 00:00:00 2001 From: Jason P Date: Sat, 13 Sep 2025 17:18:46 -0500 Subject: [PATCH 09/63] Add Maidenhead Protobuf --- meshtastic/config.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 12c79c5..5a1b915 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -637,6 +637,12 @@ message Config { * E is the easting, N is the northing */ OSGR = 5; + + /* + Maidenhead Locator System + * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System + */ + MAIDENHEAD = 6; } /* From c5af2d77d80ecb24b60f399a4a49a02e824a71c6 Mon Sep 17 00:00:00 2001 From: Jason P Date: Sat, 13 Sep 2025 18:06:31 -0500 Subject: [PATCH 10/63] Fix formatting --- meshtastic/config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 5a1b915..7032013 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -639,7 +639,7 @@ message Config { OSGR = 5; /* - Maidenhead Locator System + * Maidenhead Locator System * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System */ MAIDENHEAD = 6; From 2fb76bc70b7e613ae24a615c7b9b79c04fea911b Mon Sep 17 00:00:00 2001 From: Jason P Date: Sat, 13 Sep 2025 18:07:55 -0500 Subject: [PATCH 11/63] Shorten Protobuf to match others --- meshtastic/config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 7032013..57ea98e 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -642,7 +642,7 @@ message Config { * Maidenhead Locator System * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System */ - MAIDENHEAD = 6; + MLS = 6; } /* From 314f80bc6f1bb951f37533a0cd60d9ad4356376f Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sun, 14 Sep 2025 17:41:11 +1200 Subject: [PATCH 12/63] Update comment --- meshtastic/channel.proto | 2 -- 1 file changed, 2 deletions(-) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 8605d63..4b77242 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -89,8 +89,6 @@ message ChannelSettings { /* * Whether or not we should receive notifactions / alerts through this channel - * Note: This is NOT the same as module_settings.is_client_mute which pertains - * to the device role. */ bool mute = 8; } From 945b796a982f38171a9e0d28b5c8b1f7d53c5cd1 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 15 Sep 2025 15:33:11 -0500 Subject: [PATCH 13/63] Add hardwareModel for M5stack c6l (#775) * Add hardwareModel for M5stack c6l * Update comment to match enum * Update mesh.proto --- meshtastic/mesh.proto | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 62504d0..2637a9c 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -755,9 +755,9 @@ enum HardwareModel { T_LORA_PAGER = 103; /* - * GAT562 Mesh Trial Tracker + * M5Stack Reserved */ - GAT562_MESH_TRIAL_TRACKER = 104; + M5STACK_RESERVED = 104; // 0x68 /* * RAKwireless WisMesh Tag @@ -790,6 +790,11 @@ enum HardwareModel { */ HELTEC_V4 = 110; + /* + * M5Stack C6L + */ + M5STACK_C6L = 111; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From d4d150870861b429207c7cb00b82e625601a394a Mon Sep 17 00:00:00 2001 From: WillyJL Date: Mon, 15 Sep 2025 22:49:58 +0200 Subject: [PATCH 14/63] Add hardwareModel for M5Stack Cardputer Adv --- meshtastic/mesh.proto | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 2637a9c..38000b4 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -790,11 +790,16 @@ enum HardwareModel { */ HELTEC_V4 = 110; - /* + /* * M5Stack C6L */ M5STACK_C6L = 111; + /* + * M5Stack Cardputer Adv + */ + M5STACK_CARDPUTER_ADV = 112; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From 804a06ae4eb463cfd7e25d903f2b9111221428ba Mon Sep 17 00:00:00 2001 From: Jason P Date: Tue, 16 Sep 2025 08:22:53 -0500 Subject: [PATCH 15/63] Move from DisplayConfig to Device_UI --- meshtastic/config.proto | 48 ---------------------------------- meshtastic/device_ui.proto | 53 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 48 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 57ea98e..174fafd 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -597,54 +597,6 @@ message Config { * Display Config */ message DisplayConfig { - /* - * How the GPS coordinates are displayed on the OLED screen. - */ - enum GpsCoordinateFormat { - /* - * GPS coordinates are displayed in the normal decimal degrees format: - * DD.DDDDDD DDD.DDDDDD - */ - DEC = 0; - - /* - * GPS coordinates are displayed in the degrees minutes seconds format: - * DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant - */ - DMS = 1; - - /* - * Universal Transverse Mercator format: - * ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing - */ - UTM = 2; - - /* - * Military Grid Reference System format: - * ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square, - * E is easting, N is northing - */ - MGRS = 3; - - /* - * Open Location Code (aka Plus Codes). - */ - OLC = 4; - - /* - * Ordnance Survey Grid Reference (the National Grid System of the UK). - * Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square, - * E is the easting, N is the northing - */ - OSGR = 5; - - /* - * Maidenhead Locator System - * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System - */ - MLS = 6; - } - /* * Unit display preference */ diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index b9a72ce..c5dd51f 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -88,6 +88,59 @@ message DeviceUIConfig { * true for analog clockface, false for digital clockface */ bool is_clockface_analog = 18; + + /* + * How the GPS coordinates are formatted on the OLED screen. + */ + GpsCoordinateFormat gps_format = 19; + + /* + * How the GPS coordinates are displayed on the OLED screen. + */ + enum GpsCoordinateFormat { + /* + * GPS coordinates are displayed in the normal decimal degrees format: + * DD.DDDDDD DDD.DDDDDD + */ + DEC = 0; + + /* + * GPS coordinates are displayed in the degrees minutes seconds format: + * DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant + */ + DMS = 1; + + /* + * Universal Transverse Mercator format: + * ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing + */ + UTM = 2; + + /* + * Military Grid Reference System format: + * ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square, + * E is easting, N is northing + */ + MGRS = 3; + + /* + * Open Location Code (aka Plus Codes). + */ + OLC = 4; + + /* + * Ordnance Survey Grid Reference (the National Grid System of the UK). + * Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square, + * E is the easting, N is the northing + */ + OSGR = 5; + + /* + * Maidenhead Locator System + * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System + */ + MLS = 6; + } } message NodeFilter { From 99bdcfdbfebd8cd881f44dc8e6899e4a96899da1 Mon Sep 17 00:00:00 2001 From: Jason P Date: Tue, 16 Sep 2025 08:45:08 -0500 Subject: [PATCH 16/63] Finalize move to Device_UI --- meshtastic/config.proto | 6 ------ 1 file changed, 6 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 174fafd..e030725 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -648,12 +648,6 @@ message Config { */ uint32 screen_on_secs = 1; - /* - * Deprecated in 2.7.4: Unused - * How the GPS coordinates are formatted on the OLED screen. - */ - GpsCoordinateFormat gps_format = 2 [deprecated = true]; - /* * Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. * Potentially useful for devices without user buttons. From 375fab79d4b33c090c3be9b3b6fa869ef076c4f1 Mon Sep 17 00:00:00 2001 From: Jason P Date: Tue, 16 Sep 2025 08:56:43 -0500 Subject: [PATCH 17/63] Attempt to fix formatting issues --- meshtastic/device_ui.proto | 88 +++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index c5dd51f..003a1f4 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -94,53 +94,53 @@ message DeviceUIConfig { */ GpsCoordinateFormat gps_format = 19; - /* - * How the GPS coordinates are displayed on the OLED screen. + /* + * How the GPS coordinates are displayed on the OLED screen. + */ + enum GpsCoordinateFormat { + /* + * GPS coordinates are displayed in the normal decimal degrees format: + * DD.DDDDDD DDD.DDDDDD */ - enum GpsCoordinateFormat { - /* - * GPS coordinates are displayed in the normal decimal degrees format: - * DD.DDDDDD DDD.DDDDDD - */ - DEC = 0; + DEC = 0; + + /* + * GPS coordinates are displayed in the degrees minutes seconds format: + * DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant + */ + DMS = 1; - /* - * GPS coordinates are displayed in the degrees minutes seconds format: - * DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant - */ - DMS = 1; - - /* - * Universal Transverse Mercator format: - * ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing - */ - UTM = 2; + /* + * Universal Transverse Mercator format: + * ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing + */ + UTM = 2; + + /* + * Military Grid Reference System format: + * ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square, + * E is easting, N is northing + */ + MGRS = 3; + + /* + * Open Location Code (aka Plus Codes). + */ + OLC = 4; + + /* + * Ordnance Survey Grid Reference (the National Grid System of the UK). + * Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square, + * E is the easting, N is the northing + */ + OSGR = 5; - /* - * Military Grid Reference System format: - * ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square, - * E is easting, N is northing - */ - MGRS = 3; - - /* - * Open Location Code (aka Plus Codes). - */ - OLC = 4; - - /* - * Ordnance Survey Grid Reference (the National Grid System of the UK). - * Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square, - * E is the easting, N is the northing - */ - OSGR = 5; - - /* - * Maidenhead Locator System - * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System - */ - MLS = 6; - } + /* + * Maidenhead Locator System + * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System + */ + MLS = 6; + } } message NodeFilter { From 74b16a5bd332ec332b92cfc6d16e8778aeb3f090 Mon Sep 17 00:00:00 2001 From: Jason P Date: Tue, 16 Sep 2025 12:00:47 -0500 Subject: [PATCH 18/63] Add int_size 8 for gps_format --- meshtastic/device_ui.options | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/device_ui.options b/meshtastic/device_ui.options index 67bee23..a8fab46 100644 --- a/meshtastic/device_ui.options +++ b/meshtastic/device_ui.options @@ -3,9 +3,10 @@ *DeviceUIConfig.ring_tone_id int_size:8 *DeviceUIConfig.calibration_data max_size:16 *DeviceUIConfig.compass_mode int_size:8 +*DeviceUIConfig.gps_format int_size:8 *NodeFilter.node_name max_size:16 *NodeFilter.hops_away int_size:8 *NodeFilter.channel int_size:8 *NodeHighlight.node_name max_size:16 *GeoPoint.zoom int_size:8 -*Map.style max_size:20 \ No newline at end of file +*Map.style max_size:20 From 58e974544dd7a4cadab4bcabc33d84f85b4c83a4 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 18 Sep 2025 18:34:52 -0500 Subject: [PATCH 19/63] Revert "Finalize move to Device_UI" This reverts commit 99bdcfdbfebd8cd881f44dc8e6899e4a96899da1. --- meshtastic/config.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index e030725..174fafd 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -648,6 +648,12 @@ message Config { */ uint32 screen_on_secs = 1; + /* + * Deprecated in 2.7.4: Unused + * How the GPS coordinates are formatted on the OLED screen. + */ + GpsCoordinateFormat gps_format = 2 [deprecated = true]; + /* * Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. * Potentially useful for devices without user buttons. From 1d9082b2773eb05b8f836993f24ef2a87f5fc384 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 18 Sep 2025 18:37:23 -0500 Subject: [PATCH 20/63] I changed my mind. Let's just deprecate the enum too --- meshtastic/config.proto | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 174fafd..6d114c9 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -597,6 +597,13 @@ message Config { * Display Config */ message DisplayConfig { + /* + * Deprecated in 2.7.4: Unused + */ + enum DeprecatedGpsCoordinateFormat { + + } + /* * Unit display preference */ @@ -652,7 +659,7 @@ message Config { * Deprecated in 2.7.4: Unused * How the GPS coordinates are formatted on the OLED screen. */ - GpsCoordinateFormat gps_format = 2 [deprecated = true]; + DeprecatedGpsCoordinateFormat gps_format = 2 [deprecated = true]; /* * Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. From 0a0c0ab3619db46b0e95ab07785e267d7dc2a633 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 18 Sep 2025 18:49:31 -0500 Subject: [PATCH 21/63] Add device_telemetry_enabled to force opt-in of device telemetry broadcasts to the mesh --- meshtastic/module_config.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index f91671c..be8a693 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -615,6 +615,12 @@ message ModuleConfig { * Enable/Disable the health telemetry module on-device display */ bool health_screen_enabled = 13; + + /* + * Enable/Disable the device telemetry module to send metrics to the mesh + * Note: We will still send telemtry to the connected phone / client every minute over the API + */ + bool device_telemetry_enabled = 14; } /* From 6a8b80a10835acf48b2dfa2ad8aa0cc596219619 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 19 Sep 2025 08:25:43 -0500 Subject: [PATCH 22/63] Needs one value --- meshtastic/config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index abd9ee0..ca6a353 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -601,7 +601,7 @@ message Config { * Deprecated in 2.7.4: Unused */ enum DeprecatedGpsCoordinateFormat { - + UNUSED = 0; } /* From 9b3643e4aa0da1bb50c532850b9b614da7f9d51a Mon Sep 17 00:00:00 2001 From: ford-jones Date: Tue, 23 Sep 2025 11:46:10 +1200 Subject: [PATCH 23/63] Decouple node-mute from channel-mute --- meshtastic/admin.proto | 10 ---------- meshtastic/deviceonly.proto | 6 ------ 2 files changed, 16 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 2f805ca..0259c2a 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -414,16 +414,6 @@ message AdminMessage { */ uint32 remove_ignored_node = 48; - /* - * Set specified node-num to be muted - */ - uint32 set_muted_node = 49; - - /* - * Set specified node-num to be heard / not-muted - */ - uint32 remove_muted_node = 50; - /* * Begins an edit transaction for config, module config, owner, and channel settings changes * This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index 7465399..ab439e3 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -159,12 +159,6 @@ message NodeInfoLite { */ bool is_ignored = 11; - /* - * True if node has been muted - * Persists between NodeDB internal clean ups - */ - bool is_muted = 12; - /* * Last byte of the node number of the node that should be used as the next hop to reach this node. */ From 38f77b20f8d64d4f4a66267ecb705a92d22b0aa1 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Tue, 23 Sep 2025 12:11:32 +1200 Subject: [PATCH 24/63] Fix formatting --- meshtastic/deviceonly.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index ab439e3..d449373 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -162,13 +162,13 @@ message NodeInfoLite { /* * Last byte of the node number of the node that should be used as the next hop to reach this node. */ - uint32 next_hop = 13; + uint32 next_hop = 12; /* * Bitfield for storing booleans. * LSB 0 is_key_manually_verified */ - uint32 bitfield = 14; + uint32 bitfield = 13; } /* From 08bd3380e7870837224ead1f2196c4bb194fd78b Mon Sep 17 00:00:00 2001 From: ford-jones Date: Tue, 23 Sep 2025 14:58:37 +1200 Subject: [PATCH 25/63] run buf format --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 504b7a5..fb1bc46 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -779,7 +779,7 @@ enum HardwareModel { * https://heltec.org/project/meshsolar/ */ HELTEC_MESH_SOLAR = 108; - + /* * Lilygo T-Echo Lite */ From 91909ce946a3a93924bce922c1a0e2d523ca9b2b Mon Sep 17 00:00:00 2001 From: ford-jones Date: Tue, 23 Sep 2025 14:59:32 +1200 Subject: [PATCH 26/63] run buf format --- meshtastic/config.proto | 2 +- meshtastic/device_ui.proto | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index ca6a353..56093d7 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -603,7 +603,7 @@ message Config { enum DeprecatedGpsCoordinateFormat { UNUSED = 0; } - + /* * Unit display preference */ diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index 003a1f4..716db89 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -88,13 +88,13 @@ message DeviceUIConfig { * true for analog clockface, false for digital clockface */ bool is_clockface_analog = 18; - + /* * How the GPS coordinates are formatted on the OLED screen. */ GpsCoordinateFormat gps_format = 19; - /* + /* * How the GPS coordinates are displayed on the OLED screen. */ enum GpsCoordinateFormat { @@ -103,38 +103,38 @@ message DeviceUIConfig { * DD.DDDDDD DDD.DDDDDD */ DEC = 0; - - /* + + /* * GPS coordinates are displayed in the degrees minutes seconds format: * DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant */ - DMS = 1; - + DMS = 1; + /* * Universal Transverse Mercator format: * ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing */ UTM = 2; - + /* * Military Grid Reference System format: * ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square, * E is easting, N is northing */ MGRS = 3; - + /* * Open Location Code (aka Plus Codes). */ OLC = 4; - + /* * Ordnance Survey Grid Reference (the National Grid System of the UK). * Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square, * E is the easting, N is the northing */ OSGR = 5; - + /* * Maidenhead Locator System * Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System From 1a3364a8a03d4bfc93f82839f0e69b0494d5850d Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 26 Sep 2025 06:00:16 -0500 Subject: [PATCH 27/63] Deprecate REPEATER role Mark REPEATER role as deprecated in config.proto --- meshtastic/config.proto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index ca6a353..265b581 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -48,8 +48,9 @@ message Config { * Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list. * Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry * or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate. + * Deprecated in v2.7.11 because it creates "holes" in the mesh rebroadcast chain. */ - REPEATER = 4; + REPEATER = 4 [deprecated = true]; /* * Description: Broadcasts GPS position packets as priority. From 5fa4c44d914aba67971ba15ace22e4b21af64ae5 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 30 Sep 2025 13:28:36 -0500 Subject: [PATCH 28/63] Rename R1_NEO (#782) --- meshtastic/mesh.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 38000b4..adfdf51 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -740,9 +740,9 @@ enum HardwareModel { SEEED_WIO_TRACKER_L1_EINK = 100; /* - * Reserved ID for future and past use + * Muzi Works R1 Neo */ - QWANTZ_TINY_ARMS = 101; + MUZI_R1_NEO = 101; /* * Lilygo T-Deck Pro From cea982891f0f4ded4e652ddb9df3589f46efdfe6 Mon Sep 17 00:00:00 2001 From: mverch67 Date: Tue, 30 Sep 2025 20:40:14 +0200 Subject: [PATCH 29/63] add T-Watch Ultra hardware model --- meshtastic/mesh.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index adfdf51..59f8c10 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -800,6 +800,16 @@ enum HardwareModel { */ M5STACK_CARDPUTER_ADV = 112; + /* + * ESP32S3 main controller with GPS and TFT screen. + */ + HELTEC_WIRELESS_TRACKER_V2 = 113; + + /* + * LilyGo T-Watch Ultra + */ + T_WATCH_ULTRA = 114; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From 60c3e6600a2f4e6f49e45aeb47aafd8291a0015c Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 1 Oct 2025 14:40:13 -0500 Subject: [PATCH 30/63] Add manually_verified bit to SharedContact (#785) --- meshtastic/admin.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 0259c2a..8dc1dc2 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -526,6 +526,11 @@ message SharedContact { * Add this contact to the blocked / ignored list */ bool should_ignore = 3; + + /* + * Set the IS_KEY_MANUALLY_VERIFIED bit + */ + bool manually_verified = 4; } /* From 8885b0d9f243ecf8156f3d32ad3f0664fe26ab66 Mon Sep 17 00:00:00 2001 From: mverch67 Date: Fri, 3 Oct 2025 12:24:14 +0200 Subject: [PATCH 31/63] MUI: add danish language enum --- meshtastic/device_ui.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index 716db89..5b6bb5d 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -372,6 +372,11 @@ enum Language { */ CZECH = 18; + /* + * Danish + */ + DANISH = 19; + /* * Simplified Chinese (experimental) */ From 7f1110dd7737c7884012cc899862f9d7427b9c51 Mon Sep 17 00:00:00 2001 From: GUVWAF Date: Sat, 4 Oct 2025 12:02:16 +0200 Subject: [PATCH 32/63] Add number of dropped packets to LocalStats --- meshtastic/telemetry.options | 1 + meshtastic/telemetry.proto | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/meshtastic/telemetry.options b/meshtastic/telemetry.options index 3c7238a..81d2aa8 100644 --- a/meshtastic/telemetry.options +++ b/meshtastic/telemetry.options @@ -7,6 +7,7 @@ *LocalStats.num_online_nodes int_size:16 *LocalStats.num_total_nodes int_size:16 +*LocalStats.num_tx_dropped int_size:16 *HealthMetrics.heart_bpm int_size:8 *HealthMetrics.spO2 int_size:8 diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 4f7a88e..448adf3 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -438,6 +438,11 @@ message LocalStats { * Number of bytes free in the heap */ uint32 heap_free_bytes = 13; + + /* + * Number of packets that were dropped because the transmit queue was full. + */ + uint32 num_tx_dropped = 14; } /* From dbbd7f6b049e6a4cd5ff23e366cdc022816dce97 Mon Sep 17 00:00:00 2001 From: Phil Oliver <3497406+poliver@users.noreply.github.com> Date: Wed, 8 Oct 2025 12:33:28 -0400 Subject: [PATCH 33/63] Change java package to `org.meshtastic.proto` --- meshtastic/admin.proto | 2 +- meshtastic/apponly.proto | 2 +- meshtastic/atak.proto | 2 +- meshtastic/cannedmessages.proto | 2 +- meshtastic/channel.proto | 2 +- meshtastic/clientonly.proto | 2 +- meshtastic/config.proto | 2 +- meshtastic/connection_status.proto | 2 +- meshtastic/device_ui.proto | 2 +- meshtastic/deviceonly.proto | 2 +- meshtastic/interdevice.proto | 2 +- meshtastic/localonly.proto | 2 +- meshtastic/mesh.proto | 2 +- meshtastic/module_config.proto | 2 +- meshtastic/mqtt.proto | 2 +- meshtastic/paxcount.proto | 2 +- meshtastic/portnums.proto | 2 +- meshtastic/powermon.proto | 2 +- meshtastic/remote_hardware.proto | 2 +- meshtastic/rtttl.proto | 2 +- meshtastic/storeforward.proto | 2 +- meshtastic/telemetry.proto | 2 +- meshtastic/xmodem.proto | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 8dc1dc2..377211b 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -12,7 +12,7 @@ import "meshtastic/module_config.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "AdminProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/apponly.proto b/meshtastic/apponly.proto index 100833f..2612ed6 100644 --- a/meshtastic/apponly.proto +++ b/meshtastic/apponly.proto @@ -8,7 +8,7 @@ import "meshtastic/config.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "AppOnlyProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 5dc08c9..093fb59 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ATAKProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/cannedmessages.proto b/meshtastic/cannedmessages.proto index baa5134..59f3dcc 100644 --- a/meshtastic/cannedmessages.proto +++ b/meshtastic/cannedmessages.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "CannedMessageConfigProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 4b77242..d459b62 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ChannelProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/clientonly.proto b/meshtastic/clientonly.proto index 2b919ef..c80f428 100644 --- a/meshtastic/clientonly.proto +++ b/meshtastic/clientonly.proto @@ -8,7 +8,7 @@ import "meshtastic/mesh.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ClientOnlyProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/config.proto b/meshtastic/config.proto index f17a078..4d352c1 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -7,7 +7,7 @@ import "meshtastic/device_ui.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ConfigProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; message Config { diff --git a/meshtastic/connection_status.proto b/meshtastic/connection_status.proto index 7551596..641e916 100644 --- a/meshtastic/connection_status.proto +++ b/meshtastic/connection_status.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ConnStatusProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; message DeviceConnectionStatus { diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index 5b6bb5d..28d2910 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "DeviceUIProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index d449373..e8c7703 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -12,7 +12,7 @@ import "nanopb.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "DeviceOnly"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; option (nanopb_fileopt).include = ""; diff --git a/meshtastic/interdevice.proto b/meshtastic/interdevice.proto index 4616c08..f646368 100644 --- a/meshtastic/interdevice.proto +++ b/meshtastic/interdevice.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "InterdeviceProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; // encapsulate up to 1k of NMEA string data diff --git a/meshtastic/localonly.proto b/meshtastic/localonly.proto index bcb2796..50e7305 100644 --- a/meshtastic/localonly.proto +++ b/meshtastic/localonly.proto @@ -8,7 +8,7 @@ import "meshtastic/module_config.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "LocalOnlyProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 59f8c10..b10c780 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -13,7 +13,7 @@ import "meshtastic/xmodem.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "MeshProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index be8a693..f03e167 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ModuleConfigProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/mqtt.proto b/meshtastic/mqtt.proto index 4edf0c4..616780d 100644 --- a/meshtastic/mqtt.proto +++ b/meshtastic/mqtt.proto @@ -8,7 +8,7 @@ import "meshtastic/mesh.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "MQTTProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/paxcount.proto b/meshtastic/paxcount.proto index 47b2639..5084f9d 100644 --- a/meshtastic/paxcount.proto +++ b/meshtastic/paxcount.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "PaxcountProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index e388a6f..24f0b16 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "Portnums"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/powermon.proto b/meshtastic/powermon.proto index 77206f4..5973b16 100644 --- a/meshtastic/powermon.proto +++ b/meshtastic/powermon.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "PowerMonProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs). diff --git a/meshtastic/remote_hardware.proto b/meshtastic/remote_hardware.proto index ba4a693..d919203 100644 --- a/meshtastic/remote_hardware.proto +++ b/meshtastic/remote_hardware.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "RemoteHardware"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/rtttl.proto b/meshtastic/rtttl.proto index 11c8b92..06d94fc 100644 --- a/meshtastic/rtttl.proto +++ b/meshtastic/rtttl.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "RTTTLConfigProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/storeforward.proto b/meshtastic/storeforward.proto index 651eae5..a4a18b2 100644 --- a/meshtastic/storeforward.proto +++ b/meshtastic/storeforward.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "StoreAndForwardProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 448adf3..4296f1b 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "TelemetryProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; /* diff --git a/meshtastic/xmodem.proto b/meshtastic/xmodem.proto index 732780a..2a049d1 100644 --- a/meshtastic/xmodem.proto +++ b/meshtastic/xmodem.proto @@ -5,7 +5,7 @@ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "XmodemProtos"; -option java_package = "com.geeksville.mesh"; +option java_package = "org.meshtastic.proto"; option swift_prefix = ""; message XModem { From e925e2b201855e223e8a859ceabceac52d05c874 Mon Sep 17 00:00:00 2001 From: Dan Ditomaso Date: Wed, 8 Oct 2025 17:39:16 -0400 Subject: [PATCH 34/63] ci: fix publish github action workflow for publishing to JSR, Cargo, and NPM --- .github/workflows/publish.yml | 124 ++++++++++++++++++++++++--- buf.gen.yaml | 10 +++ buf.yaml | 32 ++++--- packages/rust/Cargo.lock | 105 +++++++++++++++++++++++ packages/rust/Cargo.toml | 15 ++++ packages/rust/src/generated/.gitkeep | 0 packages/rust/src/lib.rs | 5 ++ packages/ts/deno.json | 15 ++++ packages/ts/deno.lock | 16 ++++ packages/ts/lib/.gitkeep | 0 packages/ts/mod.ts | 20 +++++ packages/ts/package.json | 32 +++++++ 12 files changed, 349 insertions(+), 25 deletions(-) create mode 100644 buf.gen.yaml create mode 100644 packages/rust/Cargo.lock create mode 100644 packages/rust/Cargo.toml create mode 100644 packages/rust/src/generated/.gitkeep create mode 100644 packages/rust/src/lib.rs create mode 100644 packages/ts/deno.json create mode 100644 packages/ts/deno.lock create mode 100644 packages/ts/lib/.gitkeep create mode 100644 packages/ts/mod.ts create mode 100755 packages/ts/package.json diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 70c229e..d375521 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,30 +1,132 @@ -name: Push new version to schema registry - -permissions: - contents: read +name: Publish to Cargo, JSR, & NPM on: push: tags: - - "**" + - "v*" + workflow_dispatch: + inputs: + version: + description: "Version to publish (e.g. v1.2.3). Used when manually dispatching." + required: false + type: string + +permissions: write-all jobs: - push_to_registry: - runs-on: ubuntu-latest - + codegen: + runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Show files exist + run: | + set -euxo pipefail + ls -la packages/ts || true + ls -la packages/rust || true + cat packages/ts/deno.json + cat packages/ts/package.json + cat packages/rust/Cargo.toml + + - name: Determine VERSION + run: | + set -euo pipefail + if [ "${{ github.ref_type }}" = "tag" ]; then + VERSION="${{ github.ref_name }}" + elif [ -n "${{ inputs.version || '' }}" ]; then + VERSION="${{ inputs.version }}" + else + echo "No tag ref and no 'version' input. Provide a tag (push a tag) or pass inputs.version." >&2 + exit 1 + fi + # If you don't want the leading 'v' inside files, strip it: + STRIPPED="${VERSION#v}" + echo "VERSION=$STRIPPED" >> "$GITHUB_ENV" + echo "Resolved VERSION=$STRIPPED" + + - name: Set Package Versions to current tag + run: | + set -euxo pipefail + for f in \ + packages/ts/deno.json \ + packages/ts/package.json \ + packages/rust/Cargo.toml + do + test -f "$f" || { echo "Missing $f" >&2; exit 1; } + # replace __PACKAGE_VERSION__ with env VERSION + sed -i "s/__PACKAGE_VERSION__/${VERSION//\//-}/g" "$f" + done - name: Setup Buf - uses: bufbuild/buf-action@v1.2.0 + uses: bufbuild/buf-setup-action@main with: github_token: ${{ github.token }} - token: ${{ secrets.BUF_TOKEN }} - setup_only: true + + - name: Generate code + run: buf generate + + - name: Copy license & README + run: | + cp LICENSE packages/ts + cp LICENSE packages/rust + cp README.md packages/ts + cp README.md packages/rust + + - name: Upload Rust code + uses: actions/upload-artifact@v4 + with: + name: rust_code + path: packages/rust + + - name: Upload TypeScript code + uses: actions/upload-artifact@v4 + with: + name: ts_code + path: packages/ts - name: Push to schema registry env: BUF_TOKEN: ${{ secrets.BUF_TOKEN }} run: | buf push --tag ${{ github.ref_name }} + + publish-jsr: + runs-on: ubuntu-24.04 + needs: codegen + permissions: + contents: read + id-token: write + steps: + - name: Download TypeScript code + uses: actions/download-artifact@v4 + with: + name: ts_code + - name: Remove package.json (JSR doesn’t need it) + run: rm -f package.json + - name: Set up Deno + uses: denoland/setup-deno@main + with: + deno-version: rc + - name: Publish to JSR + run: deno publish --unstable-sloppy-imports + + publish-cargo: + runs-on: ubuntu-24.04 + needs: codegen + steps: + - name: Download Rust code + uses: actions/download-artifact@v4 + with: + name: rust_code + - name: Set up Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + - name: Check Library + run: cargo check + - name: Publish to crates.io + uses: katyo/publish-crates@v2 + with: + registry-token: ${{ secrets.CARGO_TOKEN }} + ignore-unpublished-changes: true \ No newline at end of file diff --git a/buf.gen.yaml b/buf.gen.yaml new file mode 100644 index 0000000..1306002 --- /dev/null +++ b/buf.gen.yaml @@ -0,0 +1,10 @@ +version: v2 +plugins: + - remote: buf.build/bufbuild/es:v2.1.0 + out: packages/ts/lib + opt: target=ts + - remote: buf.build/community/neoeinstein-prost:v0.4.0 + out: packages/rust/src/generated + - remote: buf.build/community/neoeinstein-prost-crate:v0.4.1 + out: packages/rust/src/generated + opt: no_features diff --git a/buf.yaml b/buf.yaml index 642e538..9d85f4e 100644 --- a/buf.yaml +++ b/buf.yaml @@ -1,14 +1,18 @@ -version: v1 -name: buf.build/meshtastic/protobufs -deps: [] -build: - excludes: [] -breaking: - use: - - FILE -lint: - ignore_only: - PACKAGE_DEFINED: - - nanopb.proto - use: - - MINIMAL +version: v2 +modules: + - path: meshtastic + name: buf.build/meshtastic/protobufs + excludes: + - meshtastic/device_only/ + lint: + use: + - MINIMAL + except: + - PACKAGE_NO_IMPORT_CYCLE + disallow_comment_ignores: true + breaking: + use: + - FILE + except: + - EXTENSION_NO_DELETE + - FIELD_SAME_DEFAULT diff --git a/packages/rust/Cargo.lock b/packages/rust/Cargo.lock new file mode 100644 index 0000000..6b365f0 --- /dev/null +++ b/packages/rust/Cargo.lock @@ -0,0 +1,105 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anyhow" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" + +[[package]] +name = "bytes" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "meshtastic_protobufs" +version = "2.5.5" +dependencies = [ + "prost", + "prost-types", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "prost" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-types" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +dependencies = [ + "prost", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "2.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" diff --git a/packages/rust/Cargo.toml b/packages/rust/Cargo.toml new file mode 100644 index 0000000..ce52443 --- /dev/null +++ b/packages/rust/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "meshtastic_protobufs" +edition = "2021" +version = "__PACKAGE_VERSION__" +description = "Meshtastic Protobuf definitions" +repository = "https://github.com/meshtastic/protobufs" +license-file = "LICENSE" +include = [ + "**/*.rs", + "Cargo.toml", +] + +[dependencies] +prost = "0.13.3" +prost-types = "0.13.3" diff --git a/packages/rust/src/generated/.gitkeep b/packages/rust/src/generated/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/packages/rust/src/lib.rs b/packages/rust/src/lib.rs new file mode 100644 index 0000000..a5bf95a --- /dev/null +++ b/packages/rust/src/lib.rs @@ -0,0 +1,5 @@ +extern crate prost; +extern crate core; +extern crate prost_types; + +include!("generated/mod.rs"); diff --git a/packages/ts/deno.json b/packages/ts/deno.json new file mode 100644 index 0000000..99b801a --- /dev/null +++ b/packages/ts/deno.json @@ -0,0 +1,15 @@ +{ + "name": "@meshtastic/protobufs", + "version": "__PACKAGE_VERSION__", + "exports": { + ".": "./mod.ts" + }, + "imports": { + "@bufbuild/protobuf": "npm:@bufbuild/protobuf@^2.2.3" + }, + "publish": { + "exclude": [ + "!lib" + ] + } +} diff --git a/packages/ts/deno.lock b/packages/ts/deno.lock new file mode 100644 index 0000000..d39f28e --- /dev/null +++ b/packages/ts/deno.lock @@ -0,0 +1,16 @@ +{ + "version": "4", + "specifiers": { + "npm:@bufbuild/protobuf@^2.2.3": "2.2.3" + }, + "npm": { + "@bufbuild/protobuf@2.2.3": { + "integrity": "sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg==" + } + }, + "workspace": { + "dependencies": [ + "npm:@bufbuild/protobuf@^2.2.3" + ] + } +} diff --git a/packages/ts/lib/.gitkeep b/packages/ts/lib/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/packages/ts/mod.ts b/packages/ts/mod.ts new file mode 100644 index 0000000..b043e49 --- /dev/null +++ b/packages/ts/mod.ts @@ -0,0 +1,20 @@ +export * as Admin from "./lib/admin_pb.ts"; +export * as AppOnly from "./lib/apponly_pb.ts"; +export * as ATAK from "./lib/atak_pb.ts"; +export * as CannedMessages from "./lib/cannedmessages_pb.ts"; +export * as Channel from "./lib/channel_pb.ts"; +export * as ClientOnly from "./lib/clientonly_pb.ts"; +export * as Config from "./lib/config_pb.ts"; +export * as ConnectionStatus from "./lib/connection_status_pb.ts"; +export * as LocalOnly from "./lib/localonly_pb.ts"; +export * as Mesh from "./lib/mesh_pb.ts"; +export * as ModuleConfig from "./lib/module_config_pb.ts"; +export * as Mqtt from "./lib/mqtt_pb.ts"; +export * as PaxCount from "./lib/paxcount_pb.ts"; +export * as Portnums from "./lib/portnums_pb.ts"; +export * as PowerMon from "./lib/powermon_pb.ts"; +export * as RemoteHardware from "./lib/remote_hardware_pb.ts"; +export * as Rtttl from "./lib/rtttl_pb.ts"; +export * as StoreForward from "./lib/storeforward_pb.ts"; +export * as Telemetry from "./lib/telemetry_pb.ts"; +export * as Xmodem from "./lib/xmodem_pb.ts"; diff --git a/packages/ts/package.json b/packages/ts/package.json new file mode 100755 index 0000000..04f1162 --- /dev/null +++ b/packages/ts/package.json @@ -0,0 +1,32 @@ +{ + "name": "@meshtastic/protobufs", + "description": "Protobuf definitions for the Meshtastic project", + "version": "__PACKAGE_VERSION__", + "homepage": "https://github.com/meshtastic/protobufs", + "license": "GPLV3", + "publishConfig": { + "access": "public" + }, + "type": "module", + "main": "./dist/mod.js", + "module": "./dist/mod.js", + "types": "./dist/mod.d.ts", + "dependencies": { + "@bufbuild/protobuf": "^2.2.3" + }, + "devDependencies": { + "tsdown": "^0.13.4", + "typescript": "^5.8.3" + }, + "scripts": { + "build": "tsdown" + }, + "tsdown": { + "entry": "mod.ts", + "dts": true, + "format": [ + "esm" + ], + "splitting": false + } +} From 1db971af72f96be13fa43b051cc06429eef2a97f Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Wed, 8 Oct 2025 18:36:10 -0500 Subject: [PATCH 35/63] Add ignore option for FILE_OPTION_CHANGED Explicitly ignore that we changed the `java_package` - we know, bro, it was on purpose. This is to handle the `buf` build errors introduced in #788. --- buf.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/buf.yaml b/buf.yaml index 642e538..2e2da19 100644 --- a/buf.yaml +++ b/buf.yaml @@ -6,6 +6,8 @@ build: breaking: use: - FILE + ignore: + - FILE_OPTION_CHANGED lint: ignore_only: PACKAGE_DEFINED: From 9adb17d940c236625ab0bcf6fb3c4c6ddfc695e9 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sat, 11 Oct 2025 00:17:27 +1300 Subject: [PATCH 36/63] New setting for persisting favourite nodes --- meshtastic/config.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index f17a078..ec9d941 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -262,6 +262,11 @@ message Config { * Defaults to ENABLED */ BuzzerMode buzzer_mode = 13; + + /* + * When true, favourited nodes are persisted through NodeDB resets. + */ + bool preserve_favourites = 14; } /* From de145b521117cba93586c9c7c33c4f8c932df25f Mon Sep 17 00:00:00 2001 From: Jason P Date: Fri, 10 Oct 2025 08:17:29 -0500 Subject: [PATCH 37/63] Finalize channel is_muted work --- meshtastic/channel.proto | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index d459b62..494bc40 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -86,11 +86,6 @@ message ChannelSettings { * Per-channel module settings. */ ModuleSettings module_settings = 7; - - /* - * Whether or not we should receive notifactions / alerts through this channel - */ - bool mute = 8; } /* @@ -103,10 +98,10 @@ message ModuleSettings { uint32 position_precision = 1; /* - * Controls whether or not the phone / clients should mute the current channel + * Controls whether or not the client / device should mute the current channel * Useful for noisy public channels you don't necessarily want to disable */ - bool is_client_muted = 2; + bool is_muted = 2; } /* From 38d066501125b37d866cd01ea7d97c3ef6909041 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sat, 11 Oct 2025 13:47:56 +1300 Subject: [PATCH 38/63] Use American-English spelling --- meshtastic/config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index ec9d941..6f9af03 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -266,7 +266,7 @@ message Config { /* * When true, favourited nodes are persisted through NodeDB resets. */ - bool preserve_favourites = 14; + bool preserve_favorites = 14; } /* From 68dee221b201e99b3124be85953c834ade6f7cc1 Mon Sep 17 00:00:00 2001 From: ford-jones Date: Sun, 12 Oct 2025 17:01:32 +1300 Subject: [PATCH 39/63] Convert reset tag to bool in favor of additional settings --- meshtastic/admin.proto | 3 ++- meshtastic/config.proto | 5 ----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 8dc1dc2..9dbefbd 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -469,8 +469,9 @@ message AdminMessage { /* * Tell the node to reset the nodedb. + * When true, favorites are preserved through reset. */ - int32 nodedb_reset = 100; + bool nodedb_reset = 100; } } diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 6f9af03..f17a078 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -262,11 +262,6 @@ message Config { * Defaults to ENABLED */ BuzzerMode buzzer_mode = 13; - - /* - * When true, favourited nodes are persisted through NodeDB resets. - */ - bool preserve_favorites = 14; } /* From 1f616fff30768e34fc9603d30d6b1a0fe290e097 Mon Sep 17 00:00:00 2001 From: Paolo Leggio Date: Thu, 16 Oct 2025 13:44:32 +0200 Subject: [PATCH 40/63] Added BH1750 sensor --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 4296f1b..88d8213 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -790,6 +790,11 @@ enum TelemetrySensorType { * TSL2561 light sensor */ TSL2561 = 44; + + /* + * BH1750 light sensor + */ + BH1750 = 45; } /* From 29242517f3f914897bb3459dc0a70a9f8d2c1303 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sat, 18 Oct 2025 13:34:41 -0500 Subject: [PATCH 41/63] Add THINKNODE_M3 identifier to mesh.proto --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index b10c780..2660ae5 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -810,6 +810,11 @@ enum HardwareModel { */ T_WATCH_ULTRA = 114; + /* + * Elecrow ThinkNode M3 + */ + THINKNODE_M3 = 115; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From 404532984c5a30306845aee8192bd652d99549aa Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 31 Oct 2025 15:51:29 +0800 Subject: [PATCH 42/63] Add WISMESH_TAP_V2 and RAK3401 hardware models to mesh.proto --- meshtastic/mesh.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 2660ae5..3d97750 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -815,6 +815,16 @@ enum HardwareModel { */ THINKNODE_M3 = 115; + /* + * RAK WISMESH_TAP_V2 with ESP32-S3 CPU + */ + WISMESH_TAP_V2 = 116; + + /* + * RAK3401 + */ + RAK3401 = 117; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From 29c5f6efdcb3c5f7b1c3e75ae7ad74c3d4cb6386 Mon Sep 17 00:00:00 2001 From: Andrew Mackenzie Date: Fri, 14 Nov 2025 12:05:55 +0100 Subject: [PATCH 43/63] Describe further the "to" field in MeshPacket, and the special case of when it is set top the maximum value permitted by a 32 bit integer. --- meshtastic/mesh.proto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 3d97750..099efff 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1371,6 +1371,10 @@ message MeshPacket { /* * The (immediate) destination for this packet + * If the value is 4,294,967,295 (maximum value of an unsigned 32bit integer), this indicates that the packet was + * not destined for a specific node, but for a channel as indicated by the value of `channel` below. + * If the value is another, this indicates that the packet was destined for a specific + * node (i.e. a kind of "Direct Message" to this node) and not broadcast on a channel. */ fixed32 to = 2; From e1b5aaedff3c06cbaf59008c2e744a3421b11c08 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 18 Nov 2025 18:01:08 -0600 Subject: [PATCH 44/63] Add Device ID for RAK6421 Hat in mesh.proto --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 3d97750..61e1180 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -825,6 +825,11 @@ enum HardwareModel { */ RAK3401 = 117; + /* + * RAK6421 Hat+ + */ + RAK6421 = 118; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From 52fa252f1e01be87ad2f7ab17ceef7882b2a4a93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 21 Nov 2025 10:55:44 +0100 Subject: [PATCH 45/63] Add Thinknode M4 and M6 to the equasion (#815) --- meshtastic/mesh.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 21b6329..232d34f 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -829,6 +829,16 @@ enum HardwareModel { * RAK6421 Hat+ */ RAK6421 = 118; + + /* + * Elecrow ThinkNode M4 + */ + THINKNODE_M4 = 119; + + /* + * Elecrow ThinkNode M6 + */ + THINKNODE_M6 = 120; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From 45f9a558b128175a8136d175bd2f4de6a46701c4 Mon Sep 17 00:00:00 2001 From: rcarteraz Date: Fri, 5 Dec 2025 09:32:09 -0700 Subject: [PATCH 46/63] Rename RESERVED_FRIED_CHICKEN to MUZI_BASE --- meshtastic/mesh.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 232d34f..468231f 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -700,9 +700,9 @@ enum HardwareModel { HELTEC_SENSOR_HUB = 92; /* - * Reserved Fried Chicken ID for future use + * Muzi Works Muzi-Base device */ - RESERVED_FRIED_CHICKEN = 93; + MUZI_BASE = 93; /* * Heltec Magnetic Power Bank with Meshtastic compatible From 6f437dd699bafa01309bc0006179cecc3b25c893 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 15 Dec 2025 15:46:49 -0600 Subject: [PATCH 47/63] Add LONG_TURBO preset to config.proto Added LONG_TURBO preset for long-range communication. --- meshtastic/config.proto | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 4d352c1..d612c56 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -978,6 +978,14 @@ message Config { * It is not legal to use in all regions due to this wider bandwidth. */ SHORT_TURBO = 8; + + /* + * Long Range - Turbo + * This preset performs similarly to LongFast, but with 500Khz bandwidth. + * There is some debate about the legality of 250Khz channels in some regions, + * and this preset would present an unombigously legal alternative. + */ + LONG_TURBO = 9; } /* From 09219845724af1b37e8a2a7ad55b3e4d7334aa42 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 15 Dec 2025 15:49:54 -0600 Subject: [PATCH 48/63] Fix typo in config.proto comment --- meshtastic/config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index d612c56..b6d6a31 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -983,7 +983,7 @@ message Config { * Long Range - Turbo * This preset performs similarly to LongFast, but with 500Khz bandwidth. * There is some debate about the legality of 250Khz channels in some regions, - * and this preset would present an unombigously legal alternative. + * and this preset would present an unambiguously legal alternative. */ LONG_TURBO = 9; } From 2567b7aa4e0d35c40ba5dd1a03ec785a457d5a99 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 15 Dec 2025 16:08:51 -0600 Subject: [PATCH 49/63] Update LONG_TURBO comment in config.proto Removed comment about legality of 250Khz channels. --- meshtastic/config.proto | 2 -- 1 file changed, 2 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index b6d6a31..b7db6ec 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -982,8 +982,6 @@ message Config { /* * Long Range - Turbo * This preset performs similarly to LongFast, but with 500Khz bandwidth. - * There is some debate about the legality of 250Khz channels in some regions, - * and this preset would present an unambiguously legal alternative. */ LONG_TURBO = 9; } From aeee7f08e6f9ca47416cf5b71581aff5e3eed69b Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 15 Dec 2025 19:28:31 -0600 Subject: [PATCH 50/63] Deprecate LONG_SLOW preset Mark LONG_SLOW as deprecated in the config.proto file. --- meshtastic/config.proto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index b7db6ec..366a4e5 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -938,8 +938,9 @@ message Config { /* * Long Range - Slow + * Deprecated in 2.7: Unpopular slow preset. */ - LONG_SLOW = 1; + LONG_SLOW = 1 [deprecated = true]; /* * Very Long Range - Slow From fba255d1b2fcbbe98975455946bf13ae3adc15a9 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 15 Dec 2025 23:21:11 -0600 Subject: [PATCH 51/63] Add Store and Forward PlusPlus --- meshtastic/mesh.options | 5 +++ meshtastic/mesh.proto | 85 +++++++++++++++++++++++++++++++++++++++ meshtastic/portnums.proto | 8 ++++ 3 files changed, 98 insertions(+) diff --git a/meshtastic/mesh.options b/meshtastic/mesh.options index 37c9341..77479ce 100644 --- a/meshtastic/mesh.options +++ b/meshtastic/mesh.options @@ -69,6 +69,11 @@ *KeyVerification.hash1 max_size:32 *KeyVerification.hash2 max_size:32 +*StoreForwardPlusPlus.message_hash max_size:32 +*StoreForwardPlusPlus.commit_hash max_size:32 +*StoreForwardPlusPlus.root_hash max_size:32 +*StoreForwardPlusPlus.message max_size:240 + # MyMessage.name max_size:40 # or fixed_length or fixed_count, or max_count diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 468231f..fa24fa3 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1154,6 +1154,91 @@ message KeyVerification { bytes hash2 = 3; } +/* + * The actual over-the-mesh message doing store and forward++ + */ +message StoreForwardPlusPlus { + /* + * Enum of message types + */ + enum SFPP_message_type { + /* + * Send an announcement of the canonical tip of a chain + */ + CANON_ANNOUNCE = 0; + + /* + * Query whether a specific link is on the chain + */ + CHAIN_QUERY = 1; + + /* + * Request the next link in the chain + */ + LINK_REQUEST = 3; + + /* + * Provide a link to add to the chain + */ + LINK_PROVIDE = 4; + + /* + * If we must fragment, send the first half + */ + LINK_PROVIDE_FIRSTHALF = 5; + + /* + * If we must fragment, send the second half + */ + LINK_PROVIDE_SECONDHALF = 6; + } + + /* + * Which message type is this + */ + SFPP_message_type sfpp_message_type = 1; + + /* + * The hash of the specific message + */ + bytes message_hash = 2; + + /* + * The hash of a link on a chain + */ + bytes commit_hash = 3; + + /* + * the root hash of a chain + */ + bytes root_hash = 4; + + /* + * The encrypted bytes from a message + */ + bytes message = 5; + + /* + * Message ID of the contained message + */ + uint32 encapsulated_id = 6; + + /* + * Destination of the contained message + */ + uint32 encapsulated_to = 7; + + /* + * Sender of the contained message + */ + uint32 encapsulated_from = 8; + + /* + * The receive time of the message in question + */ + uint32 encapsulated_rxtime = 9; +} + /* * Waypoint message, used to share arbitrary locations across the mesh */ diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 24f0b16..221f113 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -134,6 +134,14 @@ enum PortNum { */ PAXCOUNTER_APP = 34; + /* + * Store and Forward++ module included in the firmware + * ENCODING: protobuf + * This module is specifically for Native Linux nodes, and provides a Git-style + * chain of messages. + */ + STORE_FORWARD_PLUSPLUS_APP = 35; + /* * Provides a hardware serial interface to send and receive from the Meshtastic network. * Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic From f6b116ef650374c2295daf66fd951ba7b44bb919 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 19 Dec 2025 19:29:37 -0600 Subject: [PATCH 52/63] Add reboot_ota_mode to AdminMessage for OTA firmware updates --- meshtastic/admin.proto | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 6a06407..eecb929 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -435,6 +435,11 @@ message AdminMessage { */ KeyVerificationAdmin key_verification = 67; + /* + * Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now) + */ + OTAMode reboot_ota_mode = 68; + /* * Tell the node to factory reset config everything; all device state and configuration will be returned to factory defaults and BLE bonds will be cleared. */ @@ -475,6 +480,26 @@ message AdminMessage { } } +/* + * Firmware update mode for OTA updates + */ +enum OTAMode { + /* + * Do not reboot into OTA mode + */ + NO_REBOOT_OTA = 0; + + /* + * Reboot into OTA mode for BLE firmware update + */ + OTA_BLE = 1; + + /* + * Reboot into OTA mode for WiFi firmware update + */ + OTA_WIFI = 2; +} + /* * Parameters for setting up Meshtastic for ameteur radio usage */ From 8078b27a19659ace7a5458f83677f49b1ec33ca3 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 19 Dec 2025 19:35:46 -0600 Subject: [PATCH 53/63] Deprecate --- meshtastic/admin.proto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index eecb929..7a4e0c0 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -448,8 +448,9 @@ message AdminMessage { /* * Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot) * Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth. + * Deprecated in favor of reboot_ota_mode in 2.7.17 */ - int32 reboot_ota_seconds = 95; + int32 reboot_ota_seconds = 95 [deprecated = true]; /* * This message is only supported for the simulator Portduino build. From 48ad8831204ec30e80705197a40b39f017b5f016 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 19 Dec 2025 20:11:20 -0600 Subject: [PATCH 54/63] Add buf ignores --- meshtastic/admin.proto | 1 + meshtastic/atak.proto | 1 + meshtastic/channel.proto | 1 + meshtastic/deviceonly.proto | 1 + 4 files changed, 4 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 7a4e0c0..396f6e0 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package meshtastic; +/* trunk-ignore(buf-lint/COMPILE) */ import "meshtastic/channel.proto"; import "meshtastic/config.proto"; import "meshtastic/connection_status.proto"; diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 093fb59..790c69b 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1,5 +1,6 @@ syntax = "proto3"; +/* trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH) */ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; diff --git a/meshtastic/channel.proto b/meshtastic/channel.proto index 494bc40..f49895a 100644 --- a/meshtastic/channel.proto +++ b/meshtastic/channel.proto @@ -1,5 +1,6 @@ syntax = "proto3"; +/* trunk-ignore(buf-lint/PACKAGE_DIRECTORY_MATCH) */ package meshtastic; option csharp_namespace = "Meshtastic.Protobufs"; diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index e8c7703..3a86719 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package meshtastic; +/* trunk-ignore(buf-lint/COMPILE) */ import "meshtastic/channel.proto"; import "meshtastic/config.proto"; import "meshtastic/localonly.proto"; From 0ef2bdf6a321d95d4d4b7b955a308a2c2012e9d7 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 20 Dec 2025 06:41:32 -0600 Subject: [PATCH 55/63] Hopefully fix buf build --- buf.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/buf.yaml b/buf.yaml index fcf596e..9b1b26c 100644 --- a/buf.yaml +++ b/buf.yaml @@ -1,8 +1,9 @@ version: v2 modules: - - path: meshtastic + - path: . name: buf.build/meshtastic/protobufs excludes: + - .trunk/ - meshtastic/device_only/ lint: use: From f28d17eba12b4f11f09762f34b959825f3e7ed38 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 20 Dec 2025 07:14:45 -0600 Subject: [PATCH 56/63] Buf fixes --- buf.yaml | 3 +++ meshtastic/mesh.proto | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/buf.yaml b/buf.yaml index 9b1b26c..2a93588 100644 --- a/buf.yaml +++ b/buf.yaml @@ -10,6 +10,9 @@ modules: - MINIMAL except: - PACKAGE_NO_IMPORT_CYCLE + ignore_only: + PACKAGE_DEFINED: + - nanopb.proto disallow_comment_ignores: true breaking: use: diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index fa24fa3..767eb47 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -839,7 +839,7 @@ enum HardwareModel { * Elecrow ThinkNode M6 */ THINKNODE_M6 = 120; - + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. From c39b564ca6498d23a3002b6eaade67a69194b459 Mon Sep 17 00:00:00 2001 From: Jake-B Date: Thu, 25 Dec 2025 11:59:14 -0500 Subject: [PATCH 57/63] Added `AdminMessage.ota_hash` to verify OTA data --- meshtastic/admin.options | 1 + meshtastic/admin.proto | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index 4a28ff2..d20a1a2 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -1,6 +1,7 @@ *AdminMessage.payload_variant anonymous_oneof:true *AdminMessage.session_passkey max_size:8 +*AdminMessage.ota_hash max_size:32 *AdminMessage.InputEvent.event_code int_size:8 *AdminMessage.InputEvent.kb_char int_size:8 diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 396f6e0..5520446 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -479,6 +479,12 @@ message AdminMessage { * When true, favorites are preserved through reset. */ bool nodedb_reset = 100; + + /* + * A 32 byte hash of the OTA firmware. + * Used to verify the integrity of the firmware before applying an update. + */ + bytes ota_hash = 102; } } From 4b9f104a18ea43b1b2091ee2b48899fe43ad8a0b Mon Sep 17 00:00:00 2001 From: Jake-B Date: Sat, 27 Dec 2025 08:16:28 -0500 Subject: [PATCH 58/63] AdminMessage fixes for OTA --- meshtastic/admin.options | 3 ++- meshtastic/admin.proto | 28 ++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index d20a1a2..6574db5 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -1,7 +1,8 @@ *AdminMessage.payload_variant anonymous_oneof:true *AdminMessage.session_passkey max_size:8 -*AdminMessage.ota_hash max_size:32 + +*AdminMessage.OTAEvent.ota_hash max_size:32 *AdminMessage.InputEvent.event_code int_size:8 *AdminMessage.InputEvent.kb_char int_size:8 diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 5520446..22cc537 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -188,6 +188,23 @@ message AdminMessage { uint32 touch_y = 4; } + /* + * User is requesting an over the air update. + * Node will reboot into the OTA loader + */ + message OTAEvent { + /* + * Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now) + */ + OTAMode reboot_ota_mode = 1; + + /* + * A 32 byte hash of the OTA firmware. + * Used to verify the integrity of the firmware before applying an update. + */ + bytes ota_hash = 2; + } + /* * TODO: REPLACE */ @@ -436,11 +453,6 @@ message AdminMessage { */ KeyVerificationAdmin key_verification = 67; - /* - * Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now) - */ - OTAMode reboot_ota_mode = 68; - /* * Tell the node to factory reset config everything; all device state and configuration will be returned to factory defaults and BLE bonds will be cleared. */ @@ -481,11 +493,11 @@ message AdminMessage { bool nodedb_reset = 100; /* - * A 32 byte hash of the OTA firmware. - * Used to verify the integrity of the firmware before applying an update. + * Tell the node to reset into the OTA Loader */ - bytes ota_hash = 102; + OTAEvent ota_request = 102; } + } /* From f78b3f0dcc078372c90493945155081648605699 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 29 Dec 2025 07:50:01 -0600 Subject: [PATCH 59/63] Add chain_count field to mesh.proto (#828) * Add chain_count field to mesh.proto Added chain_count field to specify message position in LINK_REQUEST. * Fix formatting in mesh.proto --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 767eb47..4a63522 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1237,6 +1237,11 @@ message StoreForwardPlusPlus { * The receive time of the message in question */ uint32 encapsulated_rxtime = 9; + + /* + * Used in a LINK_REQUEST to specify the message X spots back from head + */ + uint32 chain_count = 10; } /* From 64ccad6007bced889d37fa718c3894ed32cca0a3 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Tue, 30 Dec 2025 10:54:27 -0600 Subject: [PATCH 60/63] Fix formatting to appease buf --- meshtastic/admin.proto | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 22cc537..820ef31 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -193,7 +193,7 @@ message AdminMessage { * Node will reboot into the OTA loader */ message OTAEvent { - /* + /* * Tell the node to reboot into OTA mode for firmware update via BLE or WiFi (ESP32 only for now) */ OTAMode reboot_ota_mode = 1; @@ -202,7 +202,7 @@ message AdminMessage { * A 32 byte hash of the OTA firmware. * Used to verify the integrity of the firmware before applying an update. */ - bytes ota_hash = 2; + bytes ota_hash = 2; } /* @@ -497,7 +497,6 @@ message AdminMessage { */ OTAEvent ota_request = 102; } - } /* From ef35af8af78ec3cf6c0ba004fbfbd9e0ca650d97 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 31 Dec 2025 20:42:24 -0600 Subject: [PATCH 61/63] T-Echo Plus --- meshtastic/mesh.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 4a63522..72989df 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -388,9 +388,9 @@ enum HardwareModel { LORA_RELAY_V1 = 32; /* - * TODO: REPLACE + * T-Echo Plus device from LilyGo */ - NRF52840DK = 33; + T_ECHO_PLUS = 33; /* * TODO: REPLACE From 8a11244539ee6f46b72f4b277c65ca6daf949aae Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Thu, 1 Jan 2026 22:26:59 -0600 Subject: [PATCH 62/63] Add PKI_SEND_FAIL_PUBLIC_KEY error code Add new error code for PKI encryption failure due to missing public key. --- meshtastic/mesh.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 72989df..8775d6e 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1050,6 +1050,12 @@ message Routing { * This typically enforced per portnum and is used to prevent a single node from monopolizing airtime */ RATE_LIMIT_EXCEEDED = 38; + + /* + * PKI encryption failed, due to no public key for the remote node + * This is different from PKI_UNKNOWN_PUBKEY which indicates a failure upon receiving a packet + */ + PKI_SEND_FAIL_PUBLIC_KEY = 39; } oneof variant { From c4eab768ad1b193da3794e9bd43cf81fafcded7d Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 7 Jan 2026 22:49:52 -0600 Subject: [PATCH 63/63] Add MESHSTICK_1262 identifier to mesh.proto --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 8775d6e..c05e5ea 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -840,6 +840,11 @@ enum HardwareModel { */ THINKNODE_M6 = 120; + /* + * Elecrow Meshstick 1262 + */ + MESHSTICK_1262 = 121; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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.