From fbc8234432ecf2193f76a6d1693e7b9f3fc8e449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 21 Mar 2025 13:31:52 +0100 Subject: [PATCH 001/253] add HRI-3621 --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 7ce744c..2e15118 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -693,6 +693,11 @@ enum HardwareModel { * Lilygo T-ETH-Elite */ T_ETH_ELITE = 91; + + /* + * Heltec HRI-3621 industrial probe + */ + HELTEC_SENSOR_HUB = 92; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From 306cdbf472bf769fb464bc3500411021658437ec Mon Sep 17 00:00:00 2001 From: Chris LaFlash Date: Tue, 25 Mar 2025 09:32:11 -0700 Subject: [PATCH 002/253] Add go_package path for nanopb.proto --- nanopb.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/nanopb.proto b/nanopb.proto index 2f27e34..1c107c1 100644 --- a/nanopb.proto +++ b/nanopb.proto @@ -9,6 +9,7 @@ syntax = "proto2"; import "google/protobuf/descriptor.proto"; +option go_package = "github.com/meshtastic/go/generated"; option java_package = "fi.kapsi.koti.jpa.nanopb"; enum FieldType { From 6d7c9e618051455ad82e184bd3a7f2ad569944f7 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 26 Mar 2025 07:27:23 -0500 Subject: [PATCH 003/253] Add is_attended to User --- meshtastic/deviceonly.proto | 5 +++++ meshtastic/mesh.proto | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index ea6ef25..a988478 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -94,6 +94,11 @@ message UserLite { * This is sent out to other nodes on the mesh to allow them to compute a shared secret key. */ bytes public_key = 7; + + /* + * Whether or not the node is attended by a User + */ + optional bool is_attended = 8; } message NodeInfoLite { diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 2e15118..3fb0840 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -781,6 +781,11 @@ message User { * This is sent out to other nodes on the mesh to allow them to compute a shared secret key. */ bytes public_key = 8; + + /* + * Whether or not the node is attended by a User + */ + optional bool is_attended = 9; } /* From f00e96f12da48abfa9a992f8b5546fd75a370250 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 28 Mar 2025 20:12:22 -0500 Subject: [PATCH 004/253] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9e36197..f837862 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,4 @@ The [Protobuf](https://developers.google.com/protocol-buffers) message definitio ## Stats ![Alt](https://repobeats.axiom.co/api/embed/47e9ee1d81d9c0fdd2b4b5b4c673adb1756f6db5.svg "Repobeats analytics image") + From 6da320326b9f6eda36478b967b5d4853fa1b6d97 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 30 Mar 2025 08:50:59 -0500 Subject: [PATCH 005/253] Add bluetooth config to excludes --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 2e15118..38a9ee0 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -2037,6 +2037,11 @@ enum ExcludedModules { * Paxcounter module */ PAXCOUNTER_CONFIG = 0x1000; + + /* + * Bluetooth module + */ + BLUETOOTH_CONFIG = 0x2000; } /* From 2d2ebcd1706469f7eadd17a6b6accab1c377eaa3 Mon Sep 17 00:00:00 2001 From: Hannes Fuchs Date: Sun, 30 Mar 2025 17:00:16 +0200 Subject: [PATCH 006/253] Fix comment description of CO2 telemetry value --- meshtastic/telemetry.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 1285b70..3ca7d07 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -255,7 +255,7 @@ message AirQualityMetrics { optional uint32 particles_100um = 12; /* - * 10.0um Particle Count + * CO2 concentration in ppm */ optional uint32 co2 = 13; } From 484d002a52bc20fa9f91ebf1b216d585c5f93a1b Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 30 Mar 2025 19:27:40 -0500 Subject: [PATCH 007/253] Add bluetooth --- meshtastic/mesh.proto | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 38a9ee0..9023294 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -2039,9 +2039,14 @@ enum ExcludedModules { PAXCOUNTER_CONFIG = 0x1000; /* - * Bluetooth module + * Bluetooth config (not technically a module, but used to indicate bluetooth capabilities) */ BLUETOOTH_CONFIG = 0x2000; + + /* + * Network config (not technically a module, but used to indicate network capabilities) + */ + NETWORK_CONFIG = 0x4000; } /* From b772c713945a33aea94e6cff03880328e7c35589 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 3 Apr 2025 19:32:17 -0500 Subject: [PATCH 008/253] Reserved fried chicken HWMODEL --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 9023294..bcae1de 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -699,6 +699,11 @@ enum HardwareModel { */ HELTEC_SENSOR_HUB = 92; + /* + * Reserved Fried Chicken ID for future use + */ + RESERVED_FRIED_CHICKEN = 93; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 5a5ab103d2f6aa071fca29417475681a2cec5dcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 7 Apr 2025 11:46:44 +0200 Subject: [PATCH 009/253] add existing 128x64 screen setting to protos (#672) --- meshtastic/config.proto | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 06a66b8..0e51cdd 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -603,17 +603,17 @@ message Config { */ enum OledType { /* - * Default / Auto + * Default / Autodetect */ OLED_AUTO = 0; /* - * Default / Auto + * Default / Autodetect */ OLED_SSD1306 = 1; /* - * Default / Auto + * Default / Autodetect */ OLED_SH1106 = 2; @@ -621,6 +621,11 @@ message Config { * Can not be auto detected but set by proto. Used for 128x128 screens */ OLED_SH1107 = 3; + + /* + * Can not be auto detected but set by proto. Used for 128x64 screens + */ + OLED_SH1107_128_64 = 4; } /* From f9aa5cfd08cf14917fce54e5ebc0441b35ce32b3 Mon Sep 17 00:00:00 2001 From: "Aaron.Lee" <32860565+Heltec-Aaron-Lee@users.noreply.github.com> Date: Wed, 9 Apr 2025 19:55:20 +0800 Subject: [PATCH 010/253] Add Heltec MeshPocket definition (#673) --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index bcae1de..893d5aa 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -703,6 +703,11 @@ enum HardwareModel { * Reserved Fried Chicken ID for future use */ RESERVED_FRIED_CHICKEN = 93; + + /* + * Heltec Magnetic Power Bank with Meshtastic compatible + */ + HELTEC_MESH_POCKET = 94; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From b982b36dfab2e96b8f8be90af891c68ebf8790c2 Mon Sep 17 00:00:00 2001 From: dylanli Date: Wed, 16 Apr 2025 15:37:53 +0800 Subject: [PATCH 011/253] add seeed solar node defination (#675) --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 893d5aa..7cbee78 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -709,6 +709,11 @@ enum HardwareModel { */ HELTEC_MESH_POCKET = 94; + /* + * Seeed Solar Node + */ + SEEED_SOLAR_NODE = 95; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 27fac39141d99fe727a0a1824c5397409b1aea75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Thu, 17 Apr 2025 12:04:32 +0200 Subject: [PATCH 012/253] add more hwid's --- meshtastic/mesh.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 7cbee78..2af5d98 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -714,6 +714,16 @@ enum HardwareModel { */ SEEED_SOLAR_NODE = 95; + /* + * NomadStar Meteor Pro https://nomadstar.ch/ + */ + NOMADSTAR_METEOR_PRO = 96; + + /* + * Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin + */ + CROWPANEL = 97; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 81c3153396cd05a45b5f0f8e8dedb9c783d2167e Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Tue, 29 Apr 2025 06:15:31 -0500 Subject: [PATCH 013/253] Add dsstore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store From 280f9d1bf8390d9011a6001a1cf75415471715e9 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 4 May 2025 06:34:23 -0500 Subject: [PATCH 014/253] Name --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 3fb0840..248e283 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -785,7 +785,7 @@ message User { /* * Whether or not the node is attended by a User */ - optional bool is_attended = 9; + bool is_unmessagable = 9; } /* From 5b3bbb8f6a538a3516982ef5ffa85bcd160d8a49 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 4 May 2025 08:36:40 -0500 Subject: [PATCH 015/253] VE.Direct serial mode --- meshtastic/module_config.proto | 3 +++ 1 file changed, 3 insertions(+) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 4f18d5f..50b4640 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -331,6 +331,9 @@ message ModuleConfig { CALTOPO = 5; // Ecowitt WS85 weather station WS85 = 6; + // VE.Direct is a serial protocol used by Victron Energy products + // https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable + VE_DIRECT = 7; } /* From ecdc0a53922a36d3272bd57bae3d6d2fd685e2e3 Mon Sep 17 00:00:00 2001 From: Alexander Begoon Date: Sat, 10 May 2025 00:35:39 +0200 Subject: [PATCH 016/253] Add MAX17261 lipo battery gauge --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 3ca7d07..68b4e5d 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -575,6 +575,11 @@ enum TelemetrySensorType { * RAKWireless RAK12035 Soil Moisture Sensor Module */ RAK12035 = 37; + + /* + * MAX17261 lipo battery gauge + */ + MAX17261 = 38; } /* From d266887bb2197a448a62b792bb6f1785888730ad Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 12 May 2025 19:27:32 -0500 Subject: [PATCH 017/253] Add contact admin message --- meshtastic/admin.proto | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index f4718c1..0c3e40b 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -397,6 +397,11 @@ message AdminMessage { */ bool commit_edit_settings = 65; + /* + * Add a contact (User) to the nodedb + */ + Contact add_contact = 66; + /* * 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. */ @@ -472,3 +477,15 @@ message NodeRemoteHardwarePinsResponse { */ repeated NodeRemoteHardwarePin node_remote_hardware_pins = 1; } + +message Contact { + /* + * The node number of the contact + */ + uint32 node_num = 1; + + /* + * The User of the contact + */ + User user = 2; +} \ No newline at end of file From 816595c8bbdfc3b4388e11348ccd043294d58705 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 12 May 2025 19:46:27 -0500 Subject: [PATCH 018/253] Name it --- meshtastic/admin.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 0c3e40b..b6fc552 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -400,7 +400,7 @@ message AdminMessage { /* * Add a contact (User) to the nodedb */ - Contact add_contact = 66; + SharedContact add_contact = 66; /* * 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. @@ -478,7 +478,7 @@ message NodeRemoteHardwarePinsResponse { repeated NodeRemoteHardwarePin node_remote_hardware_pins = 1; } -message Contact { +message SharedContact { /* * The node number of the contact */ From 4239bfc2f8275acf97b378984a73619d10ab9550 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 10:38:53 -0500 Subject: [PATCH 019/253] Remove attended --- meshtastic/deviceonly.proto | 5 ----- 1 file changed, 5 deletions(-) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index a988478..ea6ef25 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -94,11 +94,6 @@ message UserLite { * This is sent out to other nodes on the mesh to allow them to compute a shared secret key. */ bytes public_key = 7; - - /* - * Whether or not the node is attended by a User - */ - optional bool is_attended = 8; } message NodeInfoLite { From ca6ea45b527d804ededab7804f70a7ee9fd64871 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 10:40:52 -0500 Subject: [PATCH 020/253] Update mesh.proto --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 248e283..df02247 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -783,7 +783,7 @@ message User { bytes public_key = 8; /* - * Whether or not the node is attended by a User + * Whether or not the node can be messaged */ bool is_unmessagable = 9; } From af475e647253cc677d4c46d24eb8f2b55e0e8bda Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 10:44:33 -0500 Subject: [PATCH 021/253] Also add to UserLite --- meshtastic/deviceonly.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index ea6ef25..9c7a664 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -94,6 +94,11 @@ message UserLite { * This is sent out to other nodes on the mesh to allow them to compute a shared secret key. */ bytes public_key = 7; + + /* + * Whether or not the node can be messaged + */ + bool is_unmessagable = 9; } message NodeInfoLite { From 8cb3e62a0d35d470e3d5d9950c0f1d85ccb35b22 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 13:23:41 -0500 Subject: [PATCH 022/253] Optional --- meshtastic/deviceonly.proto | 2 +- meshtastic/mesh.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index 9c7a664..3be781f 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -98,7 +98,7 @@ message UserLite { /* * Whether or not the node can be messaged */ - bool is_unmessagable = 9; + optional bool is_unmessagable = 9; } message NodeInfoLite { diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 02caaac..eedc872 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -810,7 +810,7 @@ message User { /* * Whether or not the node can be messaged */ - bool is_unmessagable = 9; + optional bool is_unmessagable = 9; } /* From bd3e8b2fc80c35c8bc92f55e8b1f3afa443f3027 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 13:28:57 -0500 Subject: [PATCH 023/253] Explicit map report opt-in --- meshtastic/module_config.proto | 5 +++++ meshtastic/mqtt.proto | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 50b4640..06ca899 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -95,6 +95,11 @@ message ModuleConfig { * Bits of precision for the location sent (default of 32 is full precision). */ uint32 position_precision = 2; + + /* + * Whether we should report our location to the map + */ + optional bool should_report_location = 3; } /* diff --git a/meshtastic/mqtt.proto b/meshtastic/mqtt.proto index 2dbc820..00c2b2e 100644 --- a/meshtastic/mqtt.proto +++ b/meshtastic/mqtt.proto @@ -103,4 +103,9 @@ message MapReport { * Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT) */ uint32 num_online_local_nodes = 13; + + /* + * User has opted in to share their location (map report) with the mqtt server + */ + bool has_opted_in = 14; } From 1e507865aaab8cb686e0dda03a8f095fab6eca62 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 13:31:31 -0500 Subject: [PATCH 024/253] Clarification --- meshtastic/mqtt.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/meshtastic/mqtt.proto b/meshtastic/mqtt.proto index 00c2b2e..7cbf5d0 100644 --- a/meshtastic/mqtt.proto +++ b/meshtastic/mqtt.proto @@ -106,6 +106,7 @@ message MapReport { /* * User has opted in to share their location (map report) with the mqtt server + * Controlled by map_report.should_report_location */ bool has_opted_in = 14; } From a8da85a73f2a016b7c27b46adb3346db99373d78 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 13:32:22 -0500 Subject: [PATCH 025/253] Clarification --- meshtastic/mqtt.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mqtt.proto b/meshtastic/mqtt.proto index 7cbf5d0..4edf0c4 100644 --- a/meshtastic/mqtt.proto +++ b/meshtastic/mqtt.proto @@ -108,5 +108,5 @@ message MapReport { * User has opted in to share their location (map report) with the mqtt server * Controlled by map_report.should_report_location */ - bool has_opted_in = 14; + bool has_opted_report_location = 14; } From 3a35144931d64674f7978a391d0358a8d8aa5dde Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 14:13:12 -0500 Subject: [PATCH 026/253] Update module_config.proto --- meshtastic/module_config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 06ca899..588def6 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -99,7 +99,7 @@ message ModuleConfig { /* * Whether we should report our location to the map */ - optional bool should_report_location = 3; + bool should_report_location = 3; } /* From f76d353f383a2e5de43a6f08562e499706603fc3 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 14 May 2025 14:13:51 -0500 Subject: [PATCH 027/253] Update module_config.proto --- meshtastic/module_config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 588def6..e6c1694 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -97,7 +97,7 @@ message ModuleConfig { uint32 position_precision = 2; /* - * Whether we should report our location to the map + * Whether we have opted-in to report our location to the map */ bool should_report_location = 3; } From 4eb0aebaef1304a5516b6fa864cb4c55daed9147 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 14 May 2025 16:58:20 -0500 Subject: [PATCH 028/253] Add Linux Host Metrics (#685) * Add Linux Host Metrics * Tweak to load values --- meshtastic/telemetry.options | 4 +++ meshtastic/telemetry.proto | 51 ++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/meshtastic/telemetry.options b/meshtastic/telemetry.options index a429c3e..f930bcd 100644 --- a/meshtastic/telemetry.options +++ b/meshtastic/telemetry.options @@ -10,3 +10,7 @@ *HealthMetrics.heart_bpm int_size:8 *HealthMetrics.spO2 int_size:8 + +*HostMetrics.load1 int_size:16 +*HostMetrics.load5 int_size:16 +*HostMetrics.load15 int_size:16 \ No newline at end of file diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 68b4e5d..3e4af66 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -340,6 +340,52 @@ message LocalStats { optional float temperature = 3; } +/* + * Linux host metrics + */ +message HostMetrics { + /* + * Host system uptime + */ + uint32 uptime_seconds = 1; + + /* + * Host system free memory + */ + uint64 freemem_bytes = 2; + + /* + * Host system disk space free for / + */ + uint64 diskfree1_bytes = 3; + + /* + * Secondary system disk space free + */ + optional uint64 diskfree2_bytes = 4; + + /* + * Tertiary disk space free + */ + optional uint64 diskfree3_bytes = 5; + + /* + * Host system one minute load in 1/100ths + */ + uint32 load1 = 6; + + /* + * Host system five minute load in 1/100ths + */ + uint32 load5 = 7; + + /* + * Host system fifteen minute load in 1/100ths + */ + uint32 load15 = 8; +} + + /* * Types of Measurements the telemetry module is equipped to handle */ @@ -379,6 +425,11 @@ message Telemetry { * Health telemetry metrics */ HealthMetrics health_metrics = 7; + + /* + * Linux host metrics + */ + HostMetrics host_metrics = 8; } } From 490d0123b5357f058e26aba3652be805239967aa Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sat, 17 May 2025 10:23:47 -0500 Subject: [PATCH 029/253] Add the user_string to HostMetrics (#686) --- meshtastic/telemetry.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 3e4af66..06734ae 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -383,6 +383,12 @@ message HostMetrics { * Host system fifteen minute load in 1/100ths */ uint32 load15 = 8; + + /* + * Optional User-provided string for arbitrary host system information + * that doesn't make sense as a dedicated entry. + */ + optional string user_string = 9; } From 475694e62b0fdac3469abc15c6d66d05fc9ad69a Mon Sep 17 00:00:00 2001 From: Michael Cullen Date: Sat, 17 May 2025 17:27:03 +0200 Subject: [PATCH 030/253] Add PCT2075 sensor (#687) This is a temperature sensor --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 06734ae..bfc64dc 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -637,6 +637,11 @@ enum TelemetrySensorType { * MAX17261 lipo battery gauge */ MAX17261 = 38; + + /* + * PCT2075 Temperature Sensor + */ + PCT2075 = 39; } /* From d8b709aa5da85959a80a06a6624761678a96f9c0 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sat, 17 May 2025 12:28:08 -0500 Subject: [PATCH 031/253] Add missed max_size for optional HostMetrics string (#688) --- meshtastic/telemetry.options | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/telemetry.options b/meshtastic/telemetry.options index f930bcd..3c7238a 100644 --- a/meshtastic/telemetry.options +++ b/meshtastic/telemetry.options @@ -13,4 +13,5 @@ *HostMetrics.load1 int_size:16 *HostMetrics.load5 int_size:16 -*HostMetrics.load15 int_size:16 \ No newline at end of file +*HostMetrics.load15 int_size:16 +*HostMetrics.user_string max_size:200 From 2b59c7f519ab895847e2cd6316abcd2a28ba4cfb Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 20 May 2025 18:22:37 -0500 Subject: [PATCH 032/253] add nodeinfo bool/bitfield for is_manually_validated --- meshtastic/deviceonly.proto | 6 ++++++ meshtastic/mesh.proto | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index 3be781f..623532a 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -164,6 +164,12 @@ 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 = 12; + + /* + * Bitfield for storing booleans. + * LSB 0 is_manually_validated + */ + uint32 bitfield = 13; } /* diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index eedc872..c2c68b5 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1459,6 +1459,13 @@ message NodeInfo { * Persists between NodeDB internal clean ups */ bool is_ignored = 11; + + /* + * True if node public key has been validated. + * Persists between NodeDB internal clean ups + * LSB 0 of the bitfield + */ + bool is_manually_validated = 12; } /* From 08d7a07a4a94bd2ecb7e73e1bc577ca84180b745 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 20 May 2025 19:25:52 -0500 Subject: [PATCH 033/253] Better name for is_key_manually_verified --- meshtastic/deviceonly.proto | 2 +- meshtastic/mesh.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index 623532a..acde0f1 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -167,7 +167,7 @@ message NodeInfoLite { /* * Bitfield for storing booleans. - * LSB 0 is_manually_validated + * LSB 0 is_key_manually_verified */ uint32 bitfield = 13; } diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index c2c68b5..74898c3 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1465,7 +1465,7 @@ message NodeInfo { * Persists between NodeDB internal clean ups * LSB 0 of the bitfield */ - bool is_manually_validated = 12; + bool is_key_manually_verified = 12; } /* From 117ea15f6fa5a3ce4eff707653fc2f6712fadd0f Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Tue, 20 May 2025 19:41:21 -0500 Subject: [PATCH 034/253] Update mesh.proto --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 74898c3..6d7798f 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1461,7 +1461,7 @@ message NodeInfo { bool is_ignored = 11; /* - * True if node public key has been validated. + * True if node public key has been verified. * Persists between NodeDB internal clean ups * LSB 0 of the bitfield */ From 657651891ad8040b2238b203882ad14064cbf091 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 24 May 2025 06:51:16 -0500 Subject: [PATCH 035/253] Add heap free and total to local stats telemetry message --- meshtastic/telemetry.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index bfc64dc..0f2400c 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -318,6 +318,16 @@ message LocalStats { * This will always be zero for ROUTERs/REPEATERs. If this number is high, some other node(s) is/are relaying faster than you. */ uint32 num_tx_relay_canceled = 11; + + /* + * Number of bytes used in the heap + */ + uint32 heap_total_bytes = 12; + + /* + * Number of bytes free in the heap + */ + uint32 heap_free_bytes = 13; } /* From 0b815a6f93064d6fef4eb86f830a9717fd92a5c7 Mon Sep 17 00:00:00 2001 From: Xavier horwood <39760456+Xavierhorwood@users.noreply.github.com> Date: Wed, 28 May 2025 02:37:07 +1000 Subject: [PATCH 036/253] Add Ipv6 Option (#692) --- meshtastic/config.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 0e51cdd..c2a4df2 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -521,6 +521,11 @@ message Config { */ uint32 enabled_protocols = 10; + /* + * Enable/Disable ipv6 support + */ + bool ipv6_enabled = 11; + /* * Available flags auxiliary network protocols */ From deff1ca54eb7ae8f1d63370b5d0698de3f6d9bc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Tue, 27 May 2025 21:34:41 +0200 Subject: [PATCH 037/253] new HWID's --- meshtastic/mesh.proto | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 6d7798f..da5a0f4 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -724,6 +724,21 @@ enum HardwareModel { */ CROWPANEL = 97; + /* + * "Lilygo" LINK32 board with sensors + */ + LINK_32 = 98; + + /* + * Seeed Tracker L1 + */ + SEEED_TRACKER_L1 = 99; + + /* + * Seeed Tracker L1 EINK driver + */ + SEEED_TRACKER_L1_EINK = 100; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 7a256cad538b60e1e8252b624419d1b901c16801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Tue, 27 May 2025 22:06:12 +0200 Subject: [PATCH 038/253] Update meshtastic/mesh.proto Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/mesh.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index da5a0f4..0fdd3f9 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -724,17 +724,17 @@ enum HardwareModel { */ CROWPANEL = 97; - /* + /** * "Lilygo" LINK32 board with sensors */ LINK_32 = 98; - /* + /** * Seeed Tracker L1 */ SEEED_TRACKER_L1 = 99; - /* + /** * Seeed Tracker L1 EINK driver */ SEEED_TRACKER_L1_EINK = 100; From fa4d98594cacd590fb55c78e8302f8ede43f1648 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Tue, 27 May 2025 22:06:41 +0200 Subject: [PATCH 039/253] Update meshtastic/mesh.proto Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 0fdd3f9..75aa949 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -725,7 +725,7 @@ enum HardwareModel { CROWPANEL = 97; /** - * "Lilygo" LINK32 board with sensors + * Lilygo LINK32 board with sensors */ LINK_32 = 98; From 4a108827a9712d7b40254e5bd533b7d929fdd490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Tue, 27 May 2025 22:18:06 +0200 Subject: [PATCH 040/253] Add another one --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 75aa949..4ceea69 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -738,6 +738,11 @@ enum HardwareModel { * Seeed Tracker L1 EINK driver */ SEEED_TRACKER_L1_EINK = 100; + + /* + * Reserved ID for future and past use + */ + QWANTZ_TINY_ARMS = 101; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From 0268354426b29af53dd891cb99217b42e3f1b43e Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 27 May 2025 15:33:19 -0500 Subject: [PATCH 041/253] Key validation messages (#690) * Add the transport messages for a key validation protocol --- meshtastic/admin.proto | 57 ++++++++++++++++++++++++++++++++++++++- meshtastic/mesh.options | 9 +++++++ meshtastic/mesh.proto | 44 ++++++++++++++++++++++++++++++ meshtastic/portnums.proto | 5 ++++ 4 files changed, 114 insertions(+), 1 deletion(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index b6fc552..91fbb2b 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -402,6 +402,11 @@ message AdminMessage { */ SharedContact add_contact = 66; + /* + * Initiate or respond to a key verification request + */ + KeyVerificationAdmin key_verification = 67; + /* * 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. */ @@ -488,4 +493,54 @@ message SharedContact { * The User of the contact */ User user = 2; -} \ No newline at end of file +} + + /* + * This message is used by a client to initiate or complete a key verification + */ +message KeyVerificationAdmin { + /* + * Three stages of this request. + */ + enum MessageType { + + /* + * This is the first stage, where a client initiates + */ + INITIATE_VERIFICATION = 0; + + /* + * After the nonce has been returned over the mesh, the client prompts for the security number + * And uses this message to provide it to the node. + */ + PROVIDE_SECURITY_NUMBER = 1; + + /* + * Once the user has compared the verification message, this message notifies the node. + */ + DO_VERIFY = 2; + + /* + * This is the cancel path, can be taken at any point + */ + DO_NOT_VERIFY = 3; + + } + + MessageType message_type = 1; + + /* + * The nodenum we're requesting + */ + uint32 remote_nodenum = 2; + + /* + * The nonce is used to track the connection + */ + uint64 nonce = 3; + + /* + * The 4 digit code generated by the remote node, and communicated outside the mesh + */ + optional uint32 security_number = 4; +} diff --git a/meshtastic/mesh.options b/meshtastic/mesh.options index e2c905d..49dd597 100644 --- a/meshtastic/mesh.options +++ b/meshtastic/mesh.options @@ -58,6 +58,15 @@ *ClientNotification.message max_size:400 +*KeyVerificationNumberInform.remote_longname max_size:40 +*KeyVerificationNumberRequest.remote_longname max_size:40 +*KeyVerificationFinal.remote_longname max_size:40 +*KeyVerificationFinal.verification_characters max_size:10 + +*KeyVerification.hash1 max_size:32 +*KeyVerification.hash2 max_size:32 + + # 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 6d7798f..dffdf98 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1011,6 +1011,28 @@ message Data { optional uint32 bitfield = 9; } +/* + * The actual over-the-mesh message doing KeyVerification + */ +message KeyVerification { + + /* + * random value Selected by the requesting node + */ + uint64 nonce = 1; + + /* + * The final authoritative hash, only to be sent by NodeA at the end of the handshake + */ + bytes hash1 = 2; + + /* + * The intermediary hash (actually derived from hash1), + * sent from NodeB to NodeA in response to the initial message. + */ + bytes hash2 = 3; +} + /* * Waypoint message, used to share arbitrary locations across the mesh */ @@ -1800,6 +1822,28 @@ message ClientNotification { * The message body of the notification */ string message = 4; + + oneof payload_variant { + KeyVerificationNumberInform key_verification_number_inform = 11; + KeyVerificationNumberRequest key_verification_number_request = 12; + KeyVerificationFinal key_verification_final = 13; + } +} + +message KeyVerificationNumberInform { + uint64 nonce = 1; + string remote_longname = 2; + uint32 security_number = 3; +} +message KeyVerificationNumberRequest { + uint64 nonce = 1; + string remote_longname = 2; +} +message KeyVerificationFinal { + uint64 nonce = 1; + string remote_longname = 2; + bool isSender = 3; + string verification_characters = 4; } /* diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 76df5db..0203392 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -110,6 +110,11 @@ enum PortNum { */ ALERT_APP = 11; + /* + * Module/port for handling key verification requests. + */ + KEY_VERIFICATION_APP = 12; + /* * Provides a 'ping' service that replies to any packet it receives. * Also serves as a small example module. From 24c7a3d287a4bd269ce191827e5dabd8ce8f57a7 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 28 May 2025 06:13:31 -0500 Subject: [PATCH 042/253] WIO --- meshtastic/mesh.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 2010853..4472934 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -732,12 +732,12 @@ enum HardwareModel { /** * Seeed Tracker L1 */ - SEEED_TRACKER_L1 = 99; + SEEED_WIO_TRACKER_L1 = 99; /** * Seeed Tracker L1 EINK driver */ - SEEED_TRACKER_L1_EINK = 100; + SEEED_WIO_TRACKER_L1_EINK = 100; /* * Reserved ID for future and past use From f9927457f6d69c15ba02a0c58e5bad34a1b32377 Mon Sep 17 00:00:00 2001 From: mverch67 Date: Thu, 5 Jun 2025 18:06:04 +0200 Subject: [PATCH 043/253] bulgarian language support --- meshtastic/device_ui.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index 138f5e8..1b11ada 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -278,6 +278,11 @@ enum Language { */ UKRAINIAN = 16; + /* + * Bulgarian + */ + BULGARIAN = 17; + /* * Simplified Chinese (experimental) */ From 81c4d4864361770a55320cb51c7a809fac637722 Mon Sep 17 00:00:00 2001 From: mverch67 Date: Thu, 5 Jun 2025 18:16:24 +0200 Subject: [PATCH 044/253] add T-Deck Pro and TLora Pager HW model IDs --- meshtastic/mesh.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 4472934..ea183b8 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -744,6 +744,16 @@ enum HardwareModel { */ QWANTZ_TINY_ARMS = 101; + /** + * Lilygo T-Deck Pro + */ + T_DECK_PRO = 102; + + /** + * Lilygo TLora Pager + */ + T_LORA_PAGER = 103; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 758115714f2f6989c9e8378e59e0e70eeb5c6895 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 7 Jun 2025 06:32:08 -0500 Subject: [PATCH 045/253] Added buzzer mode --- meshtastic/config.proto | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index c2a4df2..48b77f0 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -150,6 +150,36 @@ message Config { CORE_PORTNUMS_ONLY = 5; } + /* + * Defines buzzer behavior for audio feedback + */ + enum BuzzerMode { + /* + * Default behavior. + * Buzzer is enabled for all audio feedback including button presses and alerts. + */ + ALL_ENABLED = 0; + + /* + * Disabled. + * All buzzer audio feedback is disabled. + */ + DISABLED = 1; + + /* + * Notifications Only. + * Buzzer is enabled only for notifications and alerts, but not for button presses. + * External notification config determines the specifics of the notification behavior. + */ + NOTIFICATIONS_ONLY = 2; + + /* + * Non-notification system buzzer tones only. + * Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts. + */ + SYSTEM_ONLY = 3; + } + /* * Sets the role of node */ @@ -210,6 +240,12 @@ message Config { * If true, disable the default blinking LED (LED_PIN) behavior on the device */ bool led_heartbeat_disabled = 12; + + /* + * Controls buzzer behavior for audio feedback + * Defaults to ENABLED + */ + BuzzerMode buzzer_mode = 13; } /* From abd60b70f0306697ea2cf82a873bf5748bc65e5f Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 7 Jun 2025 06:33:59 -0500 Subject: [PATCH 046/253] Annotation --- meshtastic/config.options | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meshtastic/config.options b/meshtastic/config.options index 9310cf0..3f6d81c 100644 --- a/meshtastic/config.options +++ b/meshtastic/config.options @@ -1,5 +1,7 @@ # longest current is 45 chars, plan with a bit of buffer *DeviceConfig.tzdef max_size:65 +*DeviceConfig.buzzer_mode int_size:8 + *NetworkConfig.wifi_ssid max_size:33 *NetworkConfig.wifi_psk max_size:65 From 7c7621a39b7eff216c87da5a7b0beeea1462a60f Mon Sep 17 00:00:00 2001 From: csrutil Date: Sun, 8 Jun 2025 16:29:12 +0800 Subject: [PATCH 047/253] add protobufs for GAT562 Mesh Trial Tracker --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index ea183b8..03162d8 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -754,6 +754,11 @@ enum HardwareModel { */ T_LORA_PAGER = 103; + /** + * GAT562 Mesh Trial Tracker + */ + GAT562_MESH_TRIAL_TRACKER = 104; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 9468fa39801b6e53143a7079d8e7ae0680ab1590 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 11 Jun 2025 12:39:51 -0500 Subject: [PATCH 048/253] Add blank messages for ClientNotification oneof --- meshtastic/mesh.proto | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 03162d8..e58c22c 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1862,6 +1862,8 @@ message ClientNotification { KeyVerificationNumberInform key_verification_number_inform = 11; KeyVerificationNumberRequest key_verification_number_request = 12; KeyVerificationFinal key_verification_final = 13; + DuplicatedPublicKey duplicated_public_key = 14; + LowEntropyKey low_entropy_key = 15; } } @@ -1880,7 +1882,8 @@ message KeyVerificationFinal { bool isSender = 3; string verification_characters = 4; } - +message DuplicatedPublicKey {} +message LowEntropyKey {} /* * Individual File info for the device */ From f7824eb09df989dde7537202043d20efdc6074bb Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 11 Jun 2025 17:27:19 -0500 Subject: [PATCH 049/253] Implement send_input_event --- meshtastic/admin.options | 5 +++++ meshtastic/admin.proto | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index 022c4fd..0e2df37 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -2,6 +2,11 @@ *AdminMessage.session_passkey max_size:8 +*InputEvent.event_code max_size:8 +*InputEvent.kb_char max_size:8 +*InputEvent.touch_x max_size:16 +*InputEvent.touch_y max_size:16 + *AdminMessage.set_canned_message_module_messages max_size:201 *AdminMessage.get_canned_message_module_messages_response max_size:201 *AdminMessage.delete_file_request max_size:201 diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 91fbb2b..227ba49 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -166,6 +166,28 @@ message AdminMessage { SD = 1; } + /* + * Input event message to be sent to the node. + */ + message InputEvent { + /* + * The input event code + */ + uint32 event_code = 1; + /* + * Keyboard character code + */ + uint32 kb_char = 2; + /* + * The touch X coordinate + */ + uint32 touch_x = 3; + /* + * The touch Y coordinate + */ + uint32 touch_y = 4; + } + /* * TODO: REPLACE */ @@ -296,6 +318,13 @@ message AdminMessage { * Remove backups of the node's preferences */ BackupLocation remove_backup_preferences = 26; + + /* + * Send an input event to the node. + * This is used to trigger phyiscal input events like button presses, touch events, etc. + */ + InputEvent send_input_event = 27; + /* * Set the owner for this node */ From 20510c79b42bea5af76f0427c351547853c7709f Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 11 Jun 2025 18:58:40 -0500 Subject: [PATCH 050/253] Update meshtastic/admin.options Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/admin.options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index 0e2df37..f3db113 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -3,7 +3,7 @@ *AdminMessage.session_passkey max_size:8 *InputEvent.event_code max_size:8 -*InputEvent.kb_char max_size:8 +*AdminMessage.InputEvent.kb_char max_size:8 *InputEvent.touch_x max_size:16 *InputEvent.touch_y max_size:16 From 3d345339354597af324e330ceca6bc3be06596f6 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 11 Jun 2025 18:59:12 -0500 Subject: [PATCH 051/253] Update meshtastic/admin.options Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/admin.options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index f3db113..43ac44c 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -5,7 +5,7 @@ *InputEvent.event_code max_size:8 *AdminMessage.InputEvent.kb_char max_size:8 *InputEvent.touch_x max_size:16 -*InputEvent.touch_y max_size:16 +*AdminMessage.InputEvent.touch_y max_size:16 *AdminMessage.set_canned_message_module_messages max_size:201 *AdminMessage.get_canned_message_module_messages_response max_size:201 From 07eb2a85abdd0ee00713be573aa285c233f56c50 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 11 Jun 2025 18:59:36 -0500 Subject: [PATCH 052/253] Update admin.options --- meshtastic/admin.options | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index 43ac44c..2f54135 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -2,9 +2,9 @@ *AdminMessage.session_passkey max_size:8 -*InputEvent.event_code max_size:8 +*AdminMessage.InputEvent.event_code max_size:8 *AdminMessage.InputEvent.kb_char max_size:8 -*InputEvent.touch_x max_size:16 +*AdminMessage.InputEvent.touch_x max_size:16 *AdminMessage.InputEvent.touch_y max_size:16 *AdminMessage.set_canned_message_module_messages max_size:201 From 579578394cf584ae6ee78df47fe3f8625d19d27e Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 11 Jun 2025 19:07:05 -0500 Subject: [PATCH 053/253] Update meshtastic/admin.proto Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/admin.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 227ba49..f9e73b2 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -321,7 +321,7 @@ message AdminMessage { /* * Send an input event to the node. - * This is used to trigger phyiscal input events like button presses, touch events, etc. + * This is used to trigger physical input events like button presses, touch events, etc. */ InputEvent send_input_event = 27; From 0c112881dfb4aa24a61ee55dd4c46abbfc093717 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 11 Jun 2025 19:10:00 -0500 Subject: [PATCH 054/253] Int size --- meshtastic/admin.options | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meshtastic/admin.options b/meshtastic/admin.options index 2f54135..4a28ff2 100644 --- a/meshtastic/admin.options +++ b/meshtastic/admin.options @@ -2,10 +2,10 @@ *AdminMessage.session_passkey max_size:8 -*AdminMessage.InputEvent.event_code max_size:8 -*AdminMessage.InputEvent.kb_char max_size:8 -*AdminMessage.InputEvent.touch_x max_size:16 -*AdminMessage.InputEvent.touch_y max_size:16 +*AdminMessage.InputEvent.event_code int_size:8 +*AdminMessage.InputEvent.kb_char int_size:8 +*AdminMessage.InputEvent.touch_x int_size:16 +*AdminMessage.InputEvent.touch_y int_size:16 *AdminMessage.set_canned_message_module_messages max_size:201 *AdminMessage.get_canned_message_module_messages_response max_size:201 From 9ccc49deaff04df724003b68b5ad1edd4aa9c91d Mon Sep 17 00:00:00 2001 From: Tom Fifield Date: Sat, 14 Jun 2025 10:29:43 +1000 Subject: [PATCH 055/253] As reported by @monkeypants, the MY_433 region is not legal in ANZ due to power limits being too high. This patch introduced an ANZ_433 region to match the requirements in Australia and New Zealand. 433.05 - 434.79 MHz, 25mW EIRP max, No duty cycle restrictions AU Low Interference Potential https://www.acma.gov.au/licences/low-interference-potential-devices-lipd-class-licence NZ General User Radio Licence for Short Range Devices https://gazette.govt.nz/notice/id/2022-go3100 Fixes https://github.com/meshtastic/firmware/issues/7032 --- meshtastic/config.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 48b77f0..d587207 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -911,6 +911,11 @@ message Config { * Philippines 915mhz */ PH_915 = 21; + /* + * Australia / New Zealand 433MHz + */ + ANZ_433 = 22; + } /* From a1cc3e697d826ba3b00182aa8eaa4d6a521b13e7 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 15 Jun 2025 06:23:36 -0500 Subject: [PATCH 056/253] Add ability to block Shared contacts --- meshtastic/admin.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index f9e73b2..c93a964 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -522,6 +522,11 @@ message SharedContact { * The User of the contact */ User user = 2; + + /* + * Add this contact to the blocked / ignored list + */ + bool should_ignore = 3; } /* From 8d3870241b8cb2d3858e23eee02fab2c0454a2b2 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 19 Jun 2025 18:26:10 -0500 Subject: [PATCH 057/253] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f837862..9e36197 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,3 @@ The [Protobuf](https://developers.google.com/protocol-buffers) message definitio ## Stats ![Alt](https://repobeats.axiom.co/api/embed/47e9ee1d81d9c0fdd2b4b5b4c673adb1756f6db5.svg "Repobeats analytics image") - From 6791138f0ba2b7c471072bd4bba6cbb8bacffe2d Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 20 Jun 2025 19:31:33 -0500 Subject: [PATCH 058/253] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9e36197..f837862 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,4 @@ The [Protobuf](https://developers.google.com/protocol-buffers) message definitio ## Stats ![Alt](https://repobeats.axiom.co/api/embed/47e9ee1d81d9c0fdd2b4b5b4c673adb1756f6db5.svg "Repobeats analytics image") + From 386fa53c1596c8dfc547521f08df107f4cb3a275 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Wed, 25 Jun 2025 20:05:19 +0200 Subject: [PATCH 059/253] Add ADS1X15 voltage metrics (#711) * Add ADS1X15 voltage metrics * Add 8 channels to allow for daisy chaining of ADS1X15 --- meshtastic/telemetry.proto | 55 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 0f2400c..2631644 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -188,6 +188,56 @@ message PowerMetrics { * Current (Ch3) */ optional float ch3_current = 6; + + /* + * Voltage (Ch4) + */ + optional float ch4_voltage = 7; + + /* + * Current (Ch4) + */ + optional float ch4_current = 8; + + /* + * Voltage (Ch5) + */ + optional float ch5_voltage = 9; + + /* + * Current (Ch5) + */ + optional float ch5_current = 10; + + /* + * Voltage (Ch6) + */ + optional float ch6_voltage = 11; + + /* + * Current (Ch6) + */ + optional float ch6_current = 12; + + /* + * Voltage (Ch7) + */ + optional float ch7_voltage = 13; + + /* + * Current (Ch7) + */ + optional float ch7_current = 14; + + /* + * Voltage (Ch8) + */ + optional float ch8_voltage = 15; + + /* + * Current (Ch8) + */ + optional float ch8_current = 16; } /* @@ -652,6 +702,11 @@ enum TelemetrySensorType { * PCT2075 Temperature Sensor */ PCT2075 = 39; + + /* + * ADS1X15 ADC + */ + ADS1X15 = 40; } /* From efd4d5c5535c84611e3dd0d54018fe3b1ddb7e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Thu, 26 Jun 2025 15:12:24 +0200 Subject: [PATCH 060/253] bring back port 77 accidentally removed --- meshtastic/portnums.proto | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 0203392..e388a6f 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -217,6 +217,13 @@ enum PortNum { */ RETICULUM_TUNNEL_APP = 76; + /* + * App for transporting Cayenne Low Power Payload, popular for LoRaWAN sensor nodes. Offers ability to send + * arbitrary telemetry over meshtastic that is not covered by telemetry.proto + * ENCODING: CayenneLLP + */ + CAYENNE_APP = 77; + /* * Private applications should use portnums >= 256. * To simplify initial development and testing you can use "PRIVATE_APP" From 1d05974fe41c9e1d1938c6181c26703654e3de3a Mon Sep 17 00:00:00 2001 From: "Daniel.Cao" <144674500+DanielCao0@users.noreply.github.com> Date: Thu, 26 Jun 2025 21:23:52 +0800 Subject: [PATCH 061/253] feat: add support for RAKwireless wiscore RAK3312 and Wismeshtag (#714) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add RAKwireless hardware models 1.RAK3112 2.Wismeshtag * Rename RAKwireless RAK3112 to RAK3312 in HardwareModel enum * keep ID's in sequence --------- Co-authored-by: Daniel.Cao Co-authored-by: Thomas Göttgens --- meshtastic/mesh.proto | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index e58c22c..bf0d6d6 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -758,6 +758,18 @@ enum HardwareModel { * GAT562 Mesh Trial Tracker */ GAT562_MESH_TRIAL_TRACKER = 104; + + /** + * RAKwireless WisMesh Tag + */ + WISMESH_TAG = 105; + + /** + * RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ + */ + RAK3312 = 106; + + /* * ------------------------------------------------------------------------------------------------------------------------------------------ From 2097da996c74a666fe5a35658128cf61f2944b0e Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 26 Jun 2025 19:35:59 -0500 Subject: [PATCH 062/253] Update regarding hw_model policies --- .github/pull_request_template.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 6eba5cc..5908107 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -10,3 +10,21 @@ - [ ] All top level messages commented - [ ] All enum members have unique descriptions + + +### New Hardware Model Acceptance Policy + +Due to limited availability and ongoing support, new Hardware Models will only be accepted by [Meshtastic Backers and Partners](https://meshtastic.com/). The Meshtastic team reserves the right to make exceptions to this policy. + +#### Alternative for Community Contributors + +You are welcome to use one of the existing DIY hardware models in your PlatformIO environment and create a pull request in the firmware project. Please note the following conditions: + +- The device will **not** be officially supported by the core Meshtastic team. +- The device will **not** appear in the [Web Flasher](https://flasher.meshtastic.org/) or Github release assets. +- You will be responsible for ongoing maintenance and support. +- Community-contributed / DIY hardware models are considered experimental and will likely have limited or no testing. + +#### Getting Official Support + +To have your hardware model officially supported and included in the Meshtastic ecosystem, consider becoming a Meshtastic Backer or Partner. Visit [meshtastic.com](https://meshtastic.com/) for more information about partnership opportunities. From 32e442a6882916cecb0462727b3aedfed5122b57 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Tue, 1 Jul 2025 20:11:29 -0500 Subject: [PATCH 063/253] Base UI display config settings --- meshtastic/device_ui.options | 3 ++- meshtastic/device_ui.proto | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/meshtastic/device_ui.options b/meshtastic/device_ui.options index 5aa61d0..67bee23 100644 --- a/meshtastic/device_ui.options +++ b/meshtastic/device_ui.options @@ -2,9 +2,10 @@ *DeviceUIConfig.screen_timeout int_size:16 *DeviceUIConfig.ring_tone_id int_size:8 *DeviceUIConfig.calibration_data max_size:16 +*DeviceUIConfig.compass_mode 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 +*Map.style max_size:20 \ No newline at end of file diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index 1b11ada..b943600 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -71,6 +71,23 @@ message DeviceUIConfig { * Map related data */ Map map_data = 15; + + /* + * Compass mode + */ + CompassMode compass_mode = 16; + + /* + * RGB color for BaseUI + * 0xRRGGBB format, e.g. 0xFF0000 for red + */ + uint32 screen_rgb_color = 17; + + /* + * Clockface analog style + * true for analog clockface, false for digital clockface + */ + bool is_clockface_analog = 18; } @@ -174,6 +191,23 @@ message Map { bool follow_gps = 3; } +enum CompassMode { + /* + * Compass with dynamic ring and heading + */ + DYNAMIC = 0; + + /* + * Compass with fixed ring and heading + */ + FIXED_RING = 1; + + /* + * Compass with heading and freeze option + */ + FREEZE_HEADING = 2; +} + enum Theme { /* * Dark From 7069b8570dc6108d8972d18df6933d50941b133f Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Wed, 2 Jul 2025 11:06:53 +0200 Subject: [PATCH 064/253] Add CO2 sensor temperature and relative humidity --- meshtastic/telemetry.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 2631644..c39a586 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -308,6 +308,16 @@ message AirQualityMetrics { * CO2 concentration in ppm */ optional uint32 co2 = 13; + + /* + * CO2 sensor temperature in degC + */ + optional float co2_temperature = 14; + + /* + * CO2 sensor relative humidity in % + */ + optional float co2_humidity = 15; } /* From 95a1ea92301f8fe97c45d217f7aff850399524db Mon Sep 17 00:00:00 2001 From: rcarteraz Date: Wed, 2 Jul 2025 11:43:48 -0700 Subject: [PATCH 065/253] should be from, not by --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5908107..8db5e30 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,7 +14,7 @@ ### New Hardware Model Acceptance Policy -Due to limited availability and ongoing support, new Hardware Models will only be accepted by [Meshtastic Backers and Partners](https://meshtastic.com/). The Meshtastic team reserves the right to make exceptions to this policy. +Due to limited availability and ongoing support, new Hardware Models will only be accepted from [Meshtastic Backers and Partners](https://meshtastic.com/). The Meshtastic team reserves the right to make exceptions to this policy. #### Alternative for Community Contributors From 6c76e4ab61cde7353f6b5c33ef256480c7d4c99b Mon Sep 17 00:00:00 2001 From: Tom Fifield Date: Thu, 3 Jul 2025 11:20:41 +1000 Subject: [PATCH 066/253] Add Kazakhstan frequencies As reported by @KZ1R , Kazakhstan has frequencies in use for Lora devices that are not covered by our existing band selections. This adds * KZ_433 433.075 - 434.775 MHz <10 mW EIRP, Low Powered Devices (LPD) * KZ_863 863 - 868 MHz <25 mW EIRP, 500kHz channels allowed, must not be used at airfields Legal ref provided in https://github.com/meshtastic/firmware/issues/7204 and verified. https://www.gov.kz/memleket/entities/mdai/press/article/details/6128 Order of the Ministry of Investments and Development of the Republic of Kazakhstan No. 34 dated January 21, 2015. Published on 01 July 2024 19:03 Updated on 01 July 2024 Fixes https://github.com/meshtastic/firmware/issues/7204 --- meshtastic/config.proto | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index d587207..acbc14e 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -915,6 +915,14 @@ message Config { * Australia / New Zealand 433MHz */ ANZ_433 = 22; + /* + * Kazakhstan 433MHz + */ + KZ_433 = 23; + /* + * Kazakhstan 863MHz + */ + KZ_863 = 24; } From 0302caa2bcdc15aee6f368fc57e78e0b85f7324e Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 7 Jul 2025 19:42:40 -0500 Subject: [PATCH 067/253] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index f837862..9e36197 100644 --- a/README.md +++ b/README.md @@ -14,4 +14,3 @@ The [Protobuf](https://developers.google.com/protocol-buffers) message definitio ## Stats ![Alt](https://repobeats.axiom.co/api/embed/47e9ee1d81d9c0fdd2b4b5b4c673adb1756f6db5.svg "Repobeats analytics image") - From 233961d5fba06289c070b958d2c9f92b642ad2cf Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Thu, 10 Jul 2025 18:58:13 -0500 Subject: [PATCH 068/253] Add ThinkNode M5 to mesh.proto --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index bf0d6d6..1fcc1a5 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -769,6 +769,11 @@ enum HardwareModel { */ RAK3312 = 106; + /** + * Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html + */ + THINKNODE_M5 = 107; + /* From e253751637bf696cff17821ef187fb71992a321e Mon Sep 17 00:00:00 2001 From: vidplace7 Date: Sat, 12 Jul 2025 18:44:13 -0400 Subject: [PATCH 069/253] Update bufbuild GitHub Actions --- .github/workflows/ci.yml | 11 ++--- .github/workflows/create_tag.yml | 10 ++--- .github/workflows/publish.yml | 10 ++--- .github/workflows/pull_request.yml | 19 ++++----- meshtastic/admin.proto | 47 ++++++++++------------ meshtastic/config.proto | 26 ++++++------ meshtastic/device_ui.proto | 19 ++++----- meshtastic/deviceonly.proto | 7 ++-- meshtastic/interdevice.proto | 6 +-- meshtastic/mesh.proto | 64 +++++++++++++++--------------- meshtastic/module_config.proto | 2 - meshtastic/powermon.proto | 39 +++++++++--------- meshtastic/telemetry.proto | 19 +++++---- renovate.json | 6 +++ 14 files changed, 134 insertions(+), 151 deletions(-) create mode 100644 renovate.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1023c96..f38ad9f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,12 +16,9 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Buf - uses: bufbuild/buf-setup-action@v1.30.0 + - name: Push to schema registry + uses: bufbuild/buf-action@v1.2.0 with: github_token: ${{ github.token }} - - - name: Push to schema registry - uses: bufbuild/buf-push-action@v1.2.0 - with: - buf_token: ${{ secrets.BUF_TOKEN }} + token: ${{ secrets.BUF_TOKEN }} + push: true diff --git a/.github/workflows/create_tag.yml b/.github/workflows/create_tag.yml index e8233c7..a1e9768 100644 --- a/.github/workflows/create_tag.yml +++ b/.github/workflows/create_tag.yml @@ -58,14 +58,14 @@ jobs: token: ${{ github.token }} - name: Setup Buf - uses: bufbuild/buf-setup-action@v1.30.0 + uses: bufbuild/buf-action@v1.2.0 with: github_token: ${{ github.token }} + token: ${{ secrets.BUF_TOKEN }} + setup_only: true - name: Push to schema registry - # uses: bufbuild/buf-push-action@v1 - # with: - # buf_token: ${{ secrets.BUF_TOKEN }} + env: + BUF_TOKEN: ${{ secrets.BUF_TOKEN }} run: | - export BUF_TOKEN=${{ secrets.BUF_TOKEN }} buf push --tag ${{ steps.version.outputs.NEW_VERSION }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 8ea8360..70c229e 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,14 +17,14 @@ jobs: uses: actions/checkout@v4 - name: Setup Buf - uses: bufbuild/buf-setup-action@v1.30.0 + uses: bufbuild/buf-action@v1.2.0 with: github_token: ${{ github.token }} + token: ${{ secrets.BUF_TOKEN }} + setup_only: true - name: Push to schema registry - # uses: bufbuild/buf-push-action@v1 - # with: - # buf_token: ${{ secrets.BUF_TOKEN }} + env: + BUF_TOKEN: ${{ secrets.BUF_TOKEN }} run: | - export BUF_TOKEN=${{ secrets.BUF_TOKEN }} buf push --tag ${{ github.ref_name }} diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 179d09a..6df3b32 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -2,6 +2,7 @@ name: pull-request permissions: contents: read + pull-requests: write on: pull_request jobs: @@ -12,17 +13,11 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Buf - uses: bufbuild/buf-setup-action@v1.30.0 + - name: Buf PR Checks + uses: bufbuild/buf-action@v1.2.0 with: github_token: ${{ github.token }} - - - name: Lint - uses: bufbuild/buf-lint-action@v1.1.1 - - - name: Push to schema registry - uses: bufbuild/buf-push-action@v1.2.0 - if: ${{ github.event_name != 'pull_request_target' && github.event_name != 'pull_request' }} - with: - buf_token: ${{ secrets.BUF_TOKEN }} - draft: ${{ github.ref_name != 'master'}} + token: ${{ secrets.BUF_TOKEN }} + format: true + lint: true + breaking: true diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index c93a964..0259c2a 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -5,9 +5,9 @@ package meshtastic; import "meshtastic/channel.proto"; import "meshtastic/config.proto"; import "meshtastic/connection_status.proto"; +import "meshtastic/device_ui.proto"; import "meshtastic/mesh.proto"; import "meshtastic/module_config.proto"; -import "meshtastic/device_ui.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; @@ -21,7 +21,6 @@ option swift_prefix = ""; * (Prior to 1.2 these operations were done via special ToRadio operations) */ message AdminMessage { - /* * The node generates this key and sends it with any get_x_response packets. * The client MUST include the same key with any set_x commands. Key expires after 300 seconds. @@ -529,18 +528,17 @@ message SharedContact { bool should_ignore = 3; } - /* - * This message is used by a client to initiate or complete a key verification - */ +/* + * This message is used by a client to initiate or complete a key verification + */ message KeyVerificationAdmin { /* * Three stages of this request. */ enum MessageType { - /* - * This is the first stage, where a client initiates - */ + * This is the first stage, where a client initiates + */ INITIATE_VERIFICATION = 0; /* @@ -548,33 +546,32 @@ message KeyVerificationAdmin { * And uses this message to provide it to the node. */ PROVIDE_SECURITY_NUMBER = 1; - - /* - * Once the user has compared the verification message, this message notifies the node. - */ + + /* + * Once the user has compared the verification message, this message notifies the node. + */ DO_VERIFY = 2; - /* - * This is the cancel path, can be taken at any point - */ + /* + * This is the cancel path, can be taken at any point + */ DO_NOT_VERIFY = 3; - } MessageType message_type = 1; - /* - * The nodenum we're requesting - */ + /* + * The nodenum we're requesting + */ uint32 remote_nodenum = 2; - /* - * The nonce is used to track the connection - */ + /* + * The nonce is used to track the connection + */ uint64 nonce = 3; - /* - * The 4 digit code generated by the remote node, and communicated outside the mesh - */ + /* + * The 4 digit code generated by the remote node, and communicated outside the mesh + */ optional uint32 security_number = 4; } diff --git a/meshtastic/config.proto b/meshtastic/config.proto index acbc14e..1586cd7 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -189,7 +189,7 @@ message Config { * Disabling this will disable the SerialConsole by not initilizing the StreamAPI * Moved to SecurityConfig */ - bool serial_enabled = 2[deprecated = true]; + bool serial_enabled = 2 [deprecated = true]; /* * For boards without a hard wired button, this is the pin number that will be used @@ -224,7 +224,7 @@ message Config { * Clients should then limit available configuration and administrative options inside the user interface * Moved to SecurityConfig */ - bool is_managed = 9[deprecated = true]; + bool is_managed = 9 [deprecated = true]; /* * Disables the triple-press of user button to enable or disable GPS @@ -470,7 +470,7 @@ message Config { * If non-zero, we want powermon log outputs. With the particular (bitfield) sources enabled. * Note: we picked an ID of 32 so that lower more efficient IDs can be used for more frequently used options. */ - uint64 powermon_enables = 32; + uint64 powermon_enables = 32; } /* @@ -783,7 +783,7 @@ message Config { * Rotate the compass by 270 degrees and invert. */ DEGREES_270_INVERTED = 7; - } + } /* * Indicates how to rotate or invert the compass output to accurate display on the display. @@ -923,7 +923,6 @@ message Config { * Kazakhstan 863MHz */ KZ_863 = 24; - } /* @@ -1137,17 +1136,16 @@ message Config { } message SecurityConfig { - - /* - * The public key of the user's device. - * Sent out to other nodes on the mesh to allow them to compute a shared secret key. - */ + /* + * The public key of the user's device. + * Sent out to other nodes on the mesh to allow them to compute a shared secret key. + */ bytes public_key = 1; - /* - * The private key of the device. - * Used to create a shared key with a remote device. - */ + /* + * The private key of the device. + * Used to create a shared key with a remote device. + */ bytes private_key = 2; /* diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index b943600..eb1e949 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -90,7 +90,6 @@ message DeviceUIConfig { bool is_clockface_analog = 18; } - message NodeFilter { /* * Filter unknown nodes @@ -126,7 +125,6 @@ message NodeFilter { * Filter based on channel */ int32 channel = 7; - } message NodeHighlight { @@ -154,7 +152,6 @@ message NodeHighlight { * Highlight nodes by matching name string */ string node_name = 5; - } message GeoPoint { @@ -163,14 +160,14 @@ message GeoPoint { */ int32 zoom = 1; - /* - * Coordinate: latitude - */ + /* + * Coordinate: latitude + */ int32 latitude = 2; - /* - * Coordinate: longitude - */ + /* + * Coordinate: longitude + */ int32 longitude = 3; } @@ -317,7 +314,7 @@ enum Language { */ BULGARIAN = 17; - /* + /* * Simplified Chinese (experimental) */ SIMPLIFIED_CHINESE = 30; @@ -326,4 +323,4 @@ enum Language { * Traditional Chinese (experimental) */ TRADITIONAL_CHINESE = 31; - } +} diff --git a/meshtastic/deviceonly.proto b/meshtastic/deviceonly.proto index acde0f1..d449373 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -3,10 +3,10 @@ syntax = "proto3"; package meshtastic; import "meshtastic/channel.proto"; -import "meshtastic/mesh.proto"; -import "meshtastic/telemetry.proto"; import "meshtastic/config.proto"; import "meshtastic/localonly.proto"; +import "meshtastic/mesh.proto"; +import "meshtastic/telemetry.proto"; import "nanopb.proto"; option csharp_namespace = "Meshtastic.Protobufs"; @@ -16,7 +16,6 @@ option java_package = "com.geeksville.mesh"; option swift_prefix = ""; option (nanopb_fileopt).include = ""; - /* * Position with static location information only for NodeDBLite */ @@ -269,7 +268,7 @@ message ChannelFile { /* * The on-disk backup of the node's preferences */ - message BackupPreferences { +message BackupPreferences { /* * The version of the backup */ diff --git a/meshtastic/interdevice.proto b/meshtastic/interdevice.proto index 54e950f..4616c08 100644 --- a/meshtastic/interdevice.proto +++ b/meshtastic/interdevice.proto @@ -12,9 +12,9 @@ option swift_prefix = ""; enum MessageType { ACK = 0; - COLLECT_INTERVAL = 160; // in ms - BEEP_ON = 161; // duration ms - BEEP_OFF = 162; // cancel prematurely + COLLECT_INTERVAL = 160; // in ms + BEEP_ON = 161; // duration ms + BEEP_OFF = 162; // cancel prematurely SHUTDOWN = 163; POWER_ON = 164; SCD41_TEMP = 176; diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 1fcc1a5..686bec1 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -4,11 +4,11 @@ package meshtastic; import "meshtastic/channel.proto"; import "meshtastic/config.proto"; +import "meshtastic/device_ui.proto"; import "meshtastic/module_config.proto"; import "meshtastic/portnums.proto"; import "meshtastic/telemetry.proto"; import "meshtastic/xmodem.proto"; -import "meshtastic/device_ui.proto"; option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; @@ -564,22 +564,22 @@ enum HardwareModel { */ HELTEC_CAPSULE_SENSOR_V3 = 65; - /* + /* * Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display */ HELTEC_VISION_MASTER_T190 = 66; - /* + /* * Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display */ HELTEC_VISION_MASTER_E213 = 67; - /* + /* * Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display */ HELTEC_VISION_MASTER_E290 = 68; - /* + /* * Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design, * specifically adapted for the Meshtatic project */ @@ -590,7 +590,7 @@ enum HardwareModel { */ SENSECAP_INDICATOR = 70; - /* + /* * Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors. */ TRACKER_T1000_E = 71; @@ -611,7 +611,7 @@ enum HardwareModel { */ RADIOMASTER_900_BANDIT = 74; - /* + /* * Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins. */ ME25LS01_4Y10TD = 75; @@ -640,7 +640,7 @@ enum HardwareModel { /* Seeed XIAO S3 DK*/ SEEED_XIAO_S3 = 81; - /* + /* * Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1 */ MS24SF1 = 82; @@ -680,7 +680,7 @@ enum HardwareModel { * Seeed XIAO nRF52840 + Wio SX1262 kit */ XIAO_NRF52_KIT = 88; - + /* * Elecrow ThinkNode M1 & M2 * https://www.elecrow.com/wiki/ThinkNode-M1_Transceiver_Device(Meshtastic)_Power_By_nRF52840.html @@ -693,7 +693,7 @@ enum HardwareModel { * Lilygo T-ETH-Elite */ T_ETH_ELITE = 91; - + /* * Heltec HRI-3621 industrial probe */ @@ -703,7 +703,7 @@ enum HardwareModel { * Reserved Fried Chicken ID for future use */ RESERVED_FRIED_CHICKEN = 93; - + /* * Heltec Magnetic Power Bank with Meshtastic compatible */ @@ -724,17 +724,17 @@ enum HardwareModel { */ CROWPANEL = 97; - /** + /* * Lilygo LINK32 board with sensors */ LINK_32 = 98; - /** + /* * Seeed Tracker L1 */ SEEED_WIO_TRACKER_L1 = 99; - /** + /* * Seeed Tracker L1 EINK driver */ SEEED_WIO_TRACKER_L1_EINK = 100; @@ -743,39 +743,37 @@ enum HardwareModel { * Reserved ID for future and past use */ QWANTZ_TINY_ARMS = 101; - - /** + + /* * Lilygo T-Deck Pro */ T_DECK_PRO = 102; - /** + /* * Lilygo TLora Pager */ T_LORA_PAGER = 103; - /** + /* * GAT562 Mesh Trial Tracker */ GAT562_MESH_TRIAL_TRACKER = 104; - - /** - * RAKwireless WisMesh Tag - */ + + /* + * RAKwireless WisMesh Tag + */ WISMESH_TAG = 105; - /** - * RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ - */ + /* + * RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/ + */ RAK3312 = 106; - /** - * Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html - */ + /* + * Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html + */ THINKNODE_M5 = 107; - - /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. @@ -1067,7 +1065,6 @@ message Data { * The actual over-the-mesh message doing KeyVerification */ message KeyVerification { - /* * random value Selected by the requesting node */ @@ -1901,6 +1898,7 @@ message KeyVerificationFinal { } message DuplicatedPublicKey {} message LowEntropyKey {} + /* * Individual File info for the device */ @@ -2174,7 +2172,7 @@ enum ExcludedModules { */ PAXCOUNTER_CONFIG = 0x1000; - /* + /* * Bluetooth config (not technically a module, but used to indicate bluetooth capabilities) */ BLUETOOTH_CONFIG = 0x2000; @@ -2232,7 +2230,7 @@ message ChunkedPayload { * Wrapper message for broken repeated oneof support */ message resend_chunks { - repeated uint32 chunks = 1; + repeated uint32 chunks = 1; } /* diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index e6c1694..683ce9e 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -148,7 +148,6 @@ message ModuleConfig { * Detection Sensor Module Config */ message DetectionSensorConfig { - enum TriggerType { // Event is triggered if pin is low LOGIC_LOW = 0; @@ -294,7 +293,6 @@ message ModuleConfig { * BLE RSSI threshold. Defaults to -80 */ int32 ble_threshold = 4; - } /* diff --git a/meshtastic/powermon.proto b/meshtastic/powermon.proto index dbb89b9..77206f4 100644 --- a/meshtastic/powermon.proto +++ b/meshtastic/powermon.proto @@ -1,20 +1,20 @@ syntax = "proto3"; +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 swift_prefix = ""; -package meshtastic; - /* Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs). -But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) -*/ + * But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us) + */ message PowerMon { /* Any significant power changing event in meshtastic should be tagged with a powermon state transition. - If you are making new meshtastic features feel free to add new entries at the end of this definition. - */ + * If you are making new meshtastic features feel free to add new entries at the end of this definition. + */ enum State { None = 0; @@ -22,14 +22,14 @@ message PowerMon { CPU_LightSleep = 0x02; /* - The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only - occasionally. In cases where that rail has multiple devices on it we usually want to have logging on - the state of that rail as an independent record. - For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen. + The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only + occasionally. In cases where that rail has multiple devices on it we usually want to have logging on + the state of that rail as an independent record. + For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen. - The log messages will be short and complete (see PowerMon.Event in the protobufs for details). - something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states. - (We use a bitmask for states so that if a log message gets lost it won't be fatal) + The log messages will be short and complete (see PowerMon.Event in the protobufs for details). + something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states. + (We use a bitmask for states so that if a log message gets lost it won't be fatal) */ Vext1_On = 0x04; @@ -44,22 +44,21 @@ message PowerMon { Wifi_On = 0x400; /* - GPS is actively trying to find our location - See GPSPowerState for more details - */ + * GPS is actively trying to find our location + * See GPSPowerState for more details + */ GPS_Active = 0x800; } } - /* * PowerStress testing support via the C++ PowerStress module */ message PowerStressMessage { /* * What operation would we like the UUT to perform. - note: senders should probably set want_response in their request packets, so that they can know when the state - machine has started processing their request + * note: senders should probably set want_response in their request packets, so that they can know when the state + * machine has started processing their request */ enum Opcode { /* @@ -69,7 +68,7 @@ message PowerStressMessage { PRINT_INFO = 1; // Print board version slog and send an ack that we are alive and ready to process commands FORCE_QUIET = 2; // Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation) - END_QUIET = 3; // Stop powerstress processing - probably by just rebooting the board + END_QUIET = 3; // Stop powerstress processing - probably by just rebooting the board SCREEN_ON = 16; // Turn the screen on SCREEN_OFF = 17; // Turn the screen off diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index c39a586..deece46 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -130,21 +130,21 @@ message EnvironmentMetrics { optional float wind_lull = 17; /* - * Radiation in µR/h - */ + * Radiation in µR/h + */ optional float radiation = 18; /* - * Rainfall in the last hour in mm - */ + * Rainfall in the last hour in mm + */ optional float rainfall_1h = 19; - /* - * Rainfall in the last 24 hours in mm - */ + /* + * Rainfall in the last 24 hours in mm + */ optional float rainfall_24h = 20; - /* + /* * Soil moisture measured (% 1-100) */ optional uint32 soil_moisture = 21; @@ -393,7 +393,7 @@ message LocalStats { /* * Health telemetry metrics */ - message HealthMetrics { +message HealthMetrics { /* * Heart rate (beats per minute) */ @@ -461,7 +461,6 @@ message HostMetrics { optional string user_string = 9; } - /* * Types of Measurements the telemetry module is equipped to handle */ diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..5db72dd --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} From 27537101a4d750d74f512e30ab84167fc2a270da Mon Sep 17 00:00:00 2001 From: vidplace7 Date: Sat, 12 Jul 2025 18:15:16 -0400 Subject: [PATCH 070/253] Add DIRECT_MSG_ONLY Buzzer mode --- meshtastic/config.proto | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 1586cd7..bc6444f 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -178,6 +178,13 @@ message Config { * Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts. */ SYSTEM_ONLY = 3; + + /* + * Direct Message notifications only. + * Buzzer is enabled only for direct messages and alerts, but not for button presses. + * External notification config determines the specifics of the notification behavior. + */ + DIRECT_MSG_ONLY = 4; } /* From 4b1ca40f5ed783f48eee4e6f962a80b9932bc3ba Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sat, 28 Jun 2025 16:24:12 +0200 Subject: [PATCH 071/253] Add additional telemetry sensor type to support two ADS1X15 at the same time --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index deece46..51c0d48 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -716,6 +716,11 @@ enum TelemetrySensorType { * ADS1X15 ADC */ ADS1X15 = 40; + + /* + * ADS1X15 ADC_ALT + */ + ADS1X15_ALT = 41; } /* From bbad395d573eaee0c70d1cea431cbb92e6389166 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sat, 19 Jul 2025 12:08:51 +0200 Subject: [PATCH 072/253] Added formaldehyde sensor values sfa30 --- meshtastic/telemetry.proto | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 51c0d48..df88fb7 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -318,6 +318,19 @@ message AirQualityMetrics { * CO2 sensor relative humidity in % */ optional float co2_humidity = 15; + + /* + * Formaldehyde sensor formaldehyde concentration in ppb + */ + optional float form_formaldehyde = 16; + /* + * Formaldehyde sensor relative humidity in %RH + */ + optional float form_humidity = 17; + /* + * Formaldehyde sensor temperature in degrees Celsius + */ + optional float form_temperature = 18; } /* @@ -721,6 +734,11 @@ enum TelemetrySensorType { * ADS1X15 ADC_ALT */ ADS1X15_ALT = 41; + + /* + * Sensirion SFA30 Formaldehyde sensor + */ + SFA30 = 42; } /* From 1a6df9abfe0ce9132fd894828910347ed7a8f2d3 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sat, 19 Jul 2025 12:10:17 +0200 Subject: [PATCH 073/253] Minor style change --- meshtastic/telemetry.proto | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index df88fb7..9a2f547 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -323,10 +323,12 @@ message AirQualityMetrics { * Formaldehyde sensor formaldehyde concentration in ppb */ optional float form_formaldehyde = 16; + /* * Formaldehyde sensor relative humidity in %RH */ optional float form_humidity = 17; + /* * Formaldehyde sensor temperature in degrees Celsius */ From d238157644573d4d8cc83f3a43f3c7d13f946237 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 20 Jul 2025 06:43:57 -0500 Subject: [PATCH 074/253] Deprecate GPS format --- meshtastic/config.proto | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index bc6444f..bc3c386 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -683,9 +683,10 @@ 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; + GpsCoordinateFormat gps_format = 2 [deprecated = true]; /* * Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. From b2baa3da8ae6eedafb5c98a92dd4ccf09c6442c1 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 20 Jul 2025 06:47:49 -0500 Subject: [PATCH 075/253] Add RATE_LIMIT_EXCEEDED routing error --- meshtastic/mesh.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 686bec1..9390cf1 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -978,6 +978,12 @@ message Routing { * Admin packet sent using PKC, but not from a public key on the admin key list */ ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37; + + /* + * Airtime fairness Rate limit exceeded for a package + * This typically enforced per portnum and is used to prevent a single node from monopolizing airtime + */ + RATE_LIMIT_EXCEEDED = 38; } oneof variant { From c36e296488ccae055787b4feb1af627e4145e330 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 20 Jul 2025 06:51:57 -0500 Subject: [PATCH 076/253] Update mesh.proto --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 9390cf1..d826269 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -980,7 +980,7 @@ message Routing { ADMIN_PUBLIC_KEY_UNAUTHORIZED = 37; /* - * Airtime fairness Rate limit exceeded for a package + * Airtime fairness rate limit exceeded for a packet * This typically enforced per portnum and is used to prevent a single node from monopolizing airtime */ RATE_LIMIT_EXCEEDED = 38; From 8b09ca9643254176014e211e95b34aa0ed33ac41 Mon Sep 17 00:00:00 2001 From: Tom Fifield Date: Mon, 21 Jul 2025 18:24:49 +1000 Subject: [PATCH 077/253] =?UTF-8?q?Add=20Nepal=20865=E2=80=AFMHz=20to=2086?= =?UTF-8?q?8=E2=80=AFMHz=20(#736)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As identified by @WOD-MN , Nepal has a dedicated IoT frequency. 865 MHz to 868 MHz, no power limit, not duty cycle restrictions Machine to Machine (M2M)/Internet of Things (IoT) https://www.nta.gov.np/uploads/contents/Radio-Frequency-Policy-2080-English.pdf Firmware patch: https://github.com/meshtastic/firmware/pull/7380 --- meshtastic/config.proto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index bc3c386..66dab5e 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -931,6 +931,10 @@ message Config { * Kazakhstan 863MHz */ KZ_863 = 24; + /* + * Nepal 865MHz + */ + NP_865 = 25; } /* From 5f5828a6eda6d45066cc392931c7e624fb7ef941 Mon Sep 17 00:00:00 2001 From: Tom Fifield Date: Mon, 21 Jul 2025 18:28:24 +1000 Subject: [PATCH 078/253] Add BR_902, Brazil 902MHz-907.5MHz (#737) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As reported by @barbabarros , the Brazilian government has specific support for LoRA[1] across multiple frequencies[2][3]. We currently support Brazil through the ANZ/AU915 band. However, Brazil also has another frequency available for use: 902 - 907.5 MHz , 1W power limit, no duty cycle restrictions [1] https://sistemas.anatel.gov.br/anexar-api/publico/anexos/download/a028ab5cc4e3f97442830bba0c8bd1dd [2] https://informacoes.anatel.gov.br/legislacao/resolucoes/2025/2001-resolucao-772 [3] https://informacoes.anatel.gov.br/legislacao/atos-de-certificacao-de-produtos/2017/1139-ato-14448#item10 Fixes https://github.com/meshtastic/firmware/issues/3741 Co-authored-by: Thomas Göttgens --- meshtastic/config.proto | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 66dab5e..631a6fb 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -919,22 +919,31 @@ message Config { * Philippines 915mhz */ PH_915 = 21; + /* * Australia / New Zealand 433MHz */ ANZ_433 = 22; + /* * Kazakhstan 433MHz */ KZ_433 = 23; + /* * Kazakhstan 863MHz */ KZ_863 = 24; + /* * Nepal 865MHz */ NP_865 = 25; + + /* + * Brazil 902MHz + */ + BR_902 = 26; } /* From ee4d9617764b651207540a9d5eb76367be6c26fb Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Mon, 21 Jul 2025 11:56:28 +0200 Subject: [PATCH 079/253] SEN5X sensor definition (#723) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add additional telemetry sensor type to support two ADS1X15 at the same time * Merge master * Add metrics and units for SEN5X series * re-order not to break proto backwards comaptibility --------- Co-authored-by: Thomas Göttgens --- meshtastic/telemetry.proto | 64 +++++++++++++++++++++++++++++++------- 1 file changed, 52 insertions(+), 12 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 9a2f547..1a27673 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -245,62 +245,62 @@ message PowerMetrics { */ message AirQualityMetrics { /* - * Concentration Units Standard PM1.0 + * Concentration Units Standard PM1.0 in ug/m3 */ optional uint32 pm10_standard = 1; /* - * Concentration Units Standard PM2.5 + * Concentration Units Standard PM2.5 in ug/m3 */ optional uint32 pm25_standard = 2; /* - * Concentration Units Standard PM10.0 + * Concentration Units Standard PM10.0 in ug/m3 */ optional uint32 pm100_standard = 3; /* - * Concentration Units Environmental PM1.0 + * Concentration Units Environmental PM1.0 in ug/m3 */ optional uint32 pm10_environmental = 4; /* - * Concentration Units Environmental PM2.5 + * Concentration Units Environmental PM2.5 in ug/m3 */ optional uint32 pm25_environmental = 5; /* - * Concentration Units Environmental PM10.0 + * Concentration Units Environmental PM10.0 in ug/m3 */ optional uint32 pm100_environmental = 6; /* - * 0.3um Particle Count + * 0.3um Particle Count in #/01.l */ optional uint32 particles_03um = 7; /* - * 0.5um Particle Count + * 0.5um Particle Count in #/01.l */ optional uint32 particles_05um = 8; /* - * 1.0um Particle Count + * 1.0um Particle Count in #/01.l */ optional uint32 particles_10um = 9; /* - * 2.5um Particle Count + * 2.5um Particle Count in #/01.l */ optional uint32 particles_25um = 10; /* - * 5.0um Particle Count + * 5.0um Particle Count in #/01.l */ optional uint32 particles_50um = 11; /* - * 10.0um Particle Count + * 10.0um Particle Count in #/01.l */ optional uint32 particles_100um = 12; @@ -333,6 +333,41 @@ message AirQualityMetrics { * Formaldehyde sensor temperature in degrees Celsius */ optional float form_temperature = 18; + + /* + * Concentration Units Standard PM4.0 in ug/m3 + */ + optional uint32 pm40_standard = 19; + + /* + * 4.0um Particle Count in #/01.l + */ + optional uint32 particles_40um = 20; + + /* + * PM Sensor Temperature + */ + optional float pm_temperature = 21; + + /* + * PM Sensor humidity + */ + optional float pm_humidity = 22; + + /* + * PM Sensor VOC Index + */ + optional float pm_voc_idx = 23; + + /* + * PM Sensor NOx Index + */ + optional float pm_nox_idx = 24; + + /* + * Typical Particle Size in um + */ + optional float particles_tps = 25; } /* @@ -741,6 +776,11 @@ enum TelemetrySensorType { * Sensirion SFA30 Formaldehyde sensor */ SFA30 = 42; + + /* + * SEN5X PM SENSORS + */ + SEN5X = 43; } /* From fa02e14d8d01850336eaea0e9552aef4f08f0a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 21 Jul 2025 12:06:30 +0200 Subject: [PATCH 080/253] fix typos in comments (#738) --- meshtastic/telemetry.proto | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 1a27673..d65432d 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -275,32 +275,32 @@ message AirQualityMetrics { optional uint32 pm100_environmental = 6; /* - * 0.3um Particle Count in #/01.l + * 0.3um Particle Count in #/0.1l */ optional uint32 particles_03um = 7; /* - * 0.5um Particle Count in #/01.l + * 0.5um Particle Count in #/0.1l */ optional uint32 particles_05um = 8; /* - * 1.0um Particle Count in #/01.l + * 1.0um Particle Count in #/0.1l */ optional uint32 particles_10um = 9; /* - * 2.5um Particle Count in #/01.l + * 2.5um Particle Count in #/0.1l */ optional uint32 particles_25um = 10; /* - * 5.0um Particle Count in #/01.l + * 5.0um Particle Count in #/0.1l */ optional uint32 particles_50um = 11; /* - * 10.0um Particle Count in #/01.l + * 10.0um Particle Count in #/0.1l */ optional uint32 particles_100um = 12; @@ -340,7 +340,7 @@ message AirQualityMetrics { optional uint32 pm40_standard = 19; /* - * 4.0um Particle Count in #/01.l + * 4.0um Particle Count in #/0.1l */ optional uint32 particles_40um = 20; From 0234126e866159052db90b3630c84aec518489e4 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 21 Jul 2025 11:59:59 -0500 Subject: [PATCH 081/253] Add event enum to indicate to client if this is event firmware --- meshtastic/mesh.proto | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index d826269..c10935c 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1627,6 +1627,31 @@ enum CriticalErrorCode { FLASH_CORRUPTION_UNRECOVERABLE = 13; } +/* + * Enum to indicate to clients whether this firmware is an event firmware build. + */ +enum EventFirmwareIndicator { + /* + * Vanilla firmware + */ + VANILLA = 0; + + /* + * Open Sauce, the maker conference held yearly in CA + */ + OPEN_SAUCE = 1; + + /* + * DEFCON, the yearly hacker conference + */ + DEFCON = 2; + + /* + * Burning Man, the yearly hippie gathering in the desert + */ + BURNING_MAN = 3; +} + /* * Unique local debugging info for this node * Note: we don't include position or the user info, because that will come in the @@ -1660,6 +1685,11 @@ message MyNodeInfo { * The PlatformIO environment used to build this firmware */ string pio_env = 13; + + /* + * The indicator for whether this device is running event firmware and which + */ + EventFirmwareIndicator event_firmware = 14; } /* From 08fbd7b987158f02b1fa1ff34a092a0a924a7e97 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 21 Jul 2025 12:06:57 -0500 Subject: [PATCH 082/253] Whitespace fixes --- meshtastic/config.proto | 10 +++++----- meshtastic/mesh.proto | 4 ++-- meshtastic/telemetry.proto | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 631a6fb..1bc9bd0 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -919,27 +919,27 @@ message Config { * Philippines 915mhz */ PH_915 = 21; - + /* * Australia / New Zealand 433MHz */ ANZ_433 = 22; - + /* * Kazakhstan 433MHz */ KZ_433 = 23; - + /* * Kazakhstan 863MHz */ KZ_863 = 24; - + /* * Nepal 865MHz */ NP_865 = 25; - + /* * Brazil 902MHz */ diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index c10935c..6753d59 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1639,12 +1639,12 @@ enum EventFirmwareIndicator { /* * Open Sauce, the maker conference held yearly in CA */ - OPEN_SAUCE = 1; + OPEN_SAUCE = 1; /* * DEFCON, the yearly hacker conference */ - DEFCON = 2; + DEFCON = 2; /* * Burning Man, the yearly hippie gathering in the desert diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index d65432d..3ec85b4 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -333,7 +333,7 @@ message AirQualityMetrics { * Formaldehyde sensor temperature in degrees Celsius */ optional float form_temperature = 18; - + /* * Concentration Units Standard PM4.0 in ug/m3 */ From b35702d8aefb79c634cb174ac604b500c282bb66 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 21 Jul 2025 12:27:50 -0500 Subject: [PATCH 083/253] Add Hamvention --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 6753d59..b296915 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1650,6 +1650,11 @@ enum EventFirmwareIndicator { * Burning Man, the yearly hippie gathering in the desert */ BURNING_MAN = 3; + + /* + * Hamvention, the Dayton amateur radio convention + */ + HAMVENTION = 4; } /* From 9cc803de0e13397d3be205f88c85a9436fe310a5 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 21 Jul 2025 12:41:42 -0500 Subject: [PATCH 084/253] Further tuning --- meshtastic/mesh.proto | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index b296915..3e6ac36 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1628,33 +1628,46 @@ enum CriticalErrorCode { } /* - * Enum to indicate to clients whether this firmware is an event firmware build. + * Enum to indicate to clients whether this firmware is a special firmware build, like an event. + * The first 16 values are reserved for non-event special firmwares, like the Smart Citizen use case. */ -enum EventFirmwareIndicator { +enum FirmwareEdition { /* * Vanilla firmware */ VANILLA = 0; + /* + * Firmware for use in the Smart Citizen environmental monitoring network + */ + SMART_CITIZEN = 1; + /* * Open Sauce, the maker conference held yearly in CA */ - OPEN_SAUCE = 1; + OPEN_SAUCE = 16; /* * DEFCON, the yearly hacker conference */ - DEFCON = 2; + DEFCON = 17; /* * Burning Man, the yearly hippie gathering in the desert */ - BURNING_MAN = 3; + BURNING_MAN = 18; /* * Hamvention, the Dayton amateur radio convention */ - HAMVENTION = 4; + HAMVENTION = 19; + + + + /* + * Placeholder for DIY and unofficial events + */ + DIY_EDITION = 127; } /* @@ -1694,7 +1707,7 @@ message MyNodeInfo { /* * The indicator for whether this device is running event firmware and which */ - EventFirmwareIndicator event_firmware = 14; + FirmwareEdition firmware_edition = 14; } /* From 898f06796b1d9af5962508cabbd4984d0ec1bce9 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Mon, 21 Jul 2025 18:36:04 -0500 Subject: [PATCH 085/253] More Whitespace Co-authored-by: Austin --- meshtastic/mesh.proto | 2 -- 1 file changed, 2 deletions(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 3e6ac36..19b0b0e 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1662,8 +1662,6 @@ enum FirmwareEdition { */ HAMVENTION = 19; - - /* * Placeholder for DIY and unofficial events */ From d868b86e75ae714a3893d370f9e86899c8332357 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 22 Jul 2025 09:05:10 -0500 Subject: [PATCH 086/253] Keep edition smol --- meshtastic/mesh.options | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meshtastic/mesh.options b/meshtastic/mesh.options index 49dd597..a6c22da 100644 --- a/meshtastic/mesh.options +++ b/meshtastic/mesh.options @@ -31,6 +31,8 @@ *MyNodeInfo.air_period_tx max_count:8 *MyNodeInfo.air_period_rx max_count:8 +*MyNodeInfo.firmware_edition int_size:8 + # Note: the actual limit (because of header bytes) on the size of encrypted payloads is 251 bytes, but I use 256 # here because we might need to fill with zeros for padding to encryption block size (16 bytes per block) *MeshPacket.encrypted max_size:256 From 1c28229e85fb329c47fc78e0b1f5324ac7000d7d Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 22 Jul 2025 14:20:05 -0500 Subject: [PATCH 087/253] Mark configs as deprecated that are no longer used. --- meshtastic/config.proto | 2 +- meshtastic/module_config.proto | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 1bc9bd0..321bbb2 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -698,7 +698,7 @@ message Config { * If this is set, the displayed compass will always point north. if unset, the old behaviour * (top of display is heading direction) is used. */ - bool compass_north_top = 4; + bool compass_north_top = 4 [deprecated = true]; /* * Flip screen vertically, for cases that mount the screen upside down diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 683ce9e..1eb4c14 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -700,13 +700,13 @@ message ModuleConfig { /* * Enable/disable CannedMessageModule. */ - bool enabled = 9; + bool enabled = 9 [deprecated = true]; /* * Input event origin accepted by the canned message module. * Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any" */ - string allow_input_source = 10; + string allow_input_source = 10 [deprecated = true]; /* * CannedMessageModule also sends a bell character with the messages. From 5ac10c0746fd5f4037c26d6e52ac8206d82b79c0 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 26 Jul 2025 06:39:04 -0500 Subject: [PATCH 088/253] Add nodedb_count to mynodeinfo --- meshtastic/mesh.options | 1 + meshtastic/mesh.proto | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/meshtastic/mesh.options b/meshtastic/mesh.options index a6c22da..37c9341 100644 --- a/meshtastic/mesh.options +++ b/meshtastic/mesh.options @@ -32,6 +32,7 @@ *MyNodeInfo.air_period_rx max_count:8 *MyNodeInfo.firmware_edition int_size:8 +*MyNodeInfo.nodedb_count int_size:16 # Note: the actual limit (because of header bytes) on the size of encrypted payloads is 251 bytes, but I use 256 # here because we might need to fill with zeros for padding to encryption block size (16 bytes per block) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 19b0b0e..9f96aa5 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1706,6 +1706,12 @@ message MyNodeInfo { * The indicator for whether this device is running event firmware and which */ FirmwareEdition firmware_edition = 14; + + /* + * The number of nodes in the nodedb. + * This is used by the phone to know how many NodeInfo packets to expect on want_config + */ + uint32 nodedb_count = 15; } /* From d47de28428bd9d7c905532e20ec2b3f7a562ada2 Mon Sep 17 00:00:00 2001 From: Quency-D Date: Mon, 28 Jul 2025 16:53:29 +0800 Subject: [PATCH 089/253] Added HELTEC MeshSolar board. --- meshtastic/mesh.proto | 6 ++++++ meshtastic/module_config.proto | 3 +++ 2 files changed, 9 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 9f96aa5..e68c56b 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -774,6 +774,12 @@ enum HardwareModel { */ THINKNODE_M5 = 107; + /* + * MeshSolar is an integrated power management and communication solution designed for outdoor low-power devices. + * https://heltec.org/project/meshsolar/ + */ + HELTEC_MESH_SOLAR = 108; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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. diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 683ce9e..ca2469d 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -337,6 +337,9 @@ message ModuleConfig { // VE.Direct is a serial protocol used by Victron Energy products // https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable VE_DIRECT = 7; + //Used to configure and view some parameters of MeshSolar. + //https://heltec.org/project/meshsolar/ + MS_CONFIG = 8; } /* From ee114d4e89baba458e24bfb4e0d8468a632b4391 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Mon, 28 Jul 2025 12:34:53 +0200 Subject: [PATCH 090/253] Add admin commands for SCDXX CO2 sensors --- meshtastic/admin.proto | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 0259c2a..ef2e25d 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -471,6 +471,11 @@ message AdminMessage { * Tell the node to reset the nodedb. */ int32 nodedb_reset = 100; + + /* + * SCDXX CO2 sensor configuration + */ + SCDXX_config scdxx_config = 102; } } @@ -575,3 +580,30 @@ message KeyVerificationAdmin { */ optional uint32 security_number = 4; } + +message SCDXX_config { + /* + * Set Automatic self-calibration enabled + */ + optional bool set_asc = 1; + + /* + * Recalibration target CO2 concentration in ppm (FRC or ASC) + */ + optional uint32 target_co2_conc = 2; + + /* + * Reference temperature in degC + */ + optional float temperature = 4; + + /* + * Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure) + */ + optional uint32 altitude = 5; + + /* + * Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude) + */ + optional uint32 ambient_pressure = 6; +} From e6906159512a5152d398b9765ae0b6f5593846d2 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Mon, 28 Jul 2025 21:52:49 +0200 Subject: [PATCH 091/253] Admin message for different sensor configs --- meshtastic/admin.proto | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index ef2e25d..b329174 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -473,9 +473,9 @@ message AdminMessage { int32 nodedb_reset = 100; /* - * SCDXX CO2 sensor configuration + * Parameters and sensor configuration */ - SCDXX_config scdxx_config = 102; + SensorConfig sensor_config = 102; } } @@ -581,6 +581,13 @@ message KeyVerificationAdmin { optional uint32 security_number = 4; } +message SensorConfig { + /* + * SCDXX CO2 Sensor configuration + */ + SCDXX_config scdxx_config = 1; +} + message SCDXX_config { /* * Set Automatic self-calibration enabled From 27d40f03d2750e4bbc4d167d091b19edd27f0edf Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Tue, 29 Jul 2025 14:27:08 +0200 Subject: [PATCH 092/253] Add factory reset for scdxx --- meshtastic/admin.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index b329174..65e3eac 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -613,4 +613,9 @@ message SCDXX_config { * Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude) */ optional uint32 ambient_pressure = 6; + + /* + * Perform a factory reset of the sensor + */ + optional bool factory_reset = 7; } From 6a26b23faf7cb4bb221db702ab7b2ab19096dc72 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Fri, 1 Aug 2025 13:38:29 +0200 Subject: [PATCH 093/253] Add low power and change to SCD4X --- meshtastic/admin.proto | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 65e3eac..a981080 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -583,12 +583,12 @@ message KeyVerificationAdmin { message SensorConfig { /* - * SCDXX CO2 Sensor configuration + * SCD4X CO2 Sensor configuration */ - SCDXX_config scdxx_config = 1; + SCD4X_config scd4x_config = 1; } -message SCDXX_config { +message SCD4X_config { /* * Set Automatic self-calibration enabled */ @@ -618,4 +618,9 @@ message SCDXX_config { * Perform a factory reset of the sensor */ optional bool factory_reset = 7; + + /* + * Low Power mode for sensor + */ + optional bool low_power = 8; } From 05eee86c47304f0de859e5a79f9bfda9b0bd4a55 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Mon, 4 Aug 2025 13:23:05 +0200 Subject: [PATCH 094/253] Minor fixes on scd4x_config protobuf --- meshtastic/admin.proto | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index a981080..3d68eea 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -597,22 +597,22 @@ message SCD4X_config { /* * Recalibration target CO2 concentration in ppm (FRC or ASC) */ - optional uint32 target_co2_conc = 2; + optional uint32 set_target_co2_conc = 2; /* * Reference temperature in degC */ - optional float temperature = 4; + optional float set_temperature = 4; /* * Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure) */ - optional uint32 altitude = 5; + optional uint32 set_altitude = 5; /* * Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude) */ - optional uint32 ambient_pressure = 6; + optional uint32 set_ambient_pressure = 6; /* * Perform a factory reset of the sensor @@ -620,7 +620,7 @@ message SCD4X_config { optional bool factory_reset = 7; /* - * Low Power mode for sensor + * Power mode for sensor (true for low power, false for normal) */ - optional bool low_power = 8; + optional bool set_power_mode = 8; } From e8544c529fc5a83593e206620ca795f8dadd9b96 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Mon, 4 Aug 2025 14:56:54 +0200 Subject: [PATCH 095/253] Fix protobuf definition for SCD4X --- meshtastic/admin.proto | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 3d68eea..f35b689 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -602,25 +602,25 @@ message SCD4X_config { /* * Reference temperature in degC */ - optional float set_temperature = 4; + optional float set_temperature = 3; /* * Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure) */ - optional uint32 set_altitude = 5; + optional uint32 set_altitude = 4; /* * Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude) */ - optional uint32 set_ambient_pressure = 6; + optional uint32 set_ambient_pressure = 5; /* * Perform a factory reset of the sensor */ - optional bool factory_reset = 7; + optional bool factory_reset = 6; /* * Power mode for sensor (true for low power, false for normal) */ - optional bool set_power_mode = 8; + optional bool set_power_mode = 7; } From d5b96c77e13d20c09053bde262b62e33439418d9 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Tue, 5 Aug 2025 14:03:16 +0200 Subject: [PATCH 096/253] Add protobuf for SEN5X state --- meshtastic/telemetry.proto | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index d65432d..c9b9958 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -797,3 +797,18 @@ message Nau7802Config { */ float calibrationFactor = 2; } + +/* + * SEN5X State, for saving to flash + */ +message SEN5XState { + /* + * Last cleaning time for SEN5X + */ + int32 last_cleaning_time = 1; + + /* + * Last cleaning time for SEN5X - valid flag + */ + bool last_cleaning_valid = 2; +} From 70950c6aa8461038c1678923b2f4aae0e6ba88ad Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Tue, 5 Aug 2025 17:38:48 +0200 Subject: [PATCH 097/253] Minor fix in cleaning time type --- meshtastic/telemetry.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index c9b9958..fb92189 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -805,7 +805,7 @@ message SEN5XState { /* * Last cleaning time for SEN5X */ - int32 last_cleaning_time = 1; + uint32 last_cleaning_time = 1; /* * Last cleaning time for SEN5X - valid flag From e44958478be0a81bde5fec4c1cf500c0578273bc Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Thu, 7 Aug 2025 16:05:14 +0200 Subject: [PATCH 098/253] SEN5X State protobuf --- meshtastic/telemetry.proto | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 036ffde..0789fc5 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -811,4 +811,19 @@ message SEN5XState { * Last cleaning time for SEN5X - valid flag */ bool last_cleaning_valid = 2; + + /* + * VOC state time for SEN5X + */ + optional fixed64 voc_state = 3; + + /* + * Last VOC state time for SEN5X + */ + optional uint32 voc_time = 4; + + /* + * Last VOC state validity flag for SEN5X + */ + bool voc_valid = 5; } From 06a69c09db3017ba2f6991266112ce2b9d2670e6 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Fri, 8 Aug 2025 10:59:31 +0200 Subject: [PATCH 099/253] Add config message for sen5x --- meshtastic/admin.proto | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index f35b689..ada357b 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -586,6 +586,11 @@ message SensorConfig { * SCD4X CO2 Sensor configuration */ SCD4X_config scd4x_config = 1; + + /* + * SEN5X PM Sensor configuration + */ + SEN5X_config sen5x_config = 2; } message SCD4X_config { @@ -624,3 +629,10 @@ message SCD4X_config { */ optional bool set_power_mode = 7; } + +message SEN5X_config { + /* + * Reference temperature in degC + */ + optional float set_temperature = 1; +} \ No newline at end of file From f5f209d9980537b0e80f51a46d01fb5558f2d4e3 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 9 Aug 2025 08:10:23 -0500 Subject: [PATCH 100/253] Add nonce to heartbeat --- meshtastic/mesh.proto | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index e68c56b..5a3e437 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -2251,7 +2251,12 @@ enum ExcludedModules { * A heartbeat message is sent to the node from the client to keep the connection alive. * This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI. */ -message Heartbeat {} +message Heartbeat { + /* + * The nonce of the heartbeat message + */ + uint32 nonce = 1; +} /* * RemoteHardwarePins associated with a node From e2c0831aa3d34a58a36c2b9fdcb828e58961cbc5 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sat, 9 Aug 2025 08:53:48 -0500 Subject: [PATCH 101/253] Add transport mechanism in MeshPacket (#748) --- meshtastic/mesh.proto | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 5a3e437..a8de0d8 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1272,6 +1272,51 @@ message MeshPacket { DELAYED_DIRECT = 2; } + /* + * Enum to identify which transport mechanism this packet arrived over + */ + enum TransportMechanism { + /* + * The default case is that the node generated a packet itself + */ + TRANSPORT_INTERNAL = 0; + + /* + * Arrived via the primary LoRa radio + */ + TRANSPORT_LORA = 1; + + /* + * Arrived via a secondary LoRa radio + */ + TRANSPORT_LORA_ALT1 = 2; + + /* + * Arrived via a tertiary LoRa radio + */ + TRANSPORT_LORA_ALT2 = 3; + + /* + * Arrived via a quaternary LoRa radio + */ + TRANSPORT_LORA_ALT3 = 4; + + /* + * Arrived via an MQTT connection + */ + TRANSPORT_MQTT = 5; + + /* + * Arrived via Multicast UDP + */ + TRANSPORT_MULTICAST_UDP = 6; + + /* + * Arrived via API connection + */ + TRANSPORT_API = 7; + } + /* * The sending node number. * Note: Our crypto implementation uses this field as well. @@ -1419,6 +1464,11 @@ message MeshPacket { * Set by the firmware internally, clients are not supposed to set this. */ uint32 tx_after = 20; + + /* + * Indicates which transport mechanism this packet arrived over + */ + TransportMechanism transport_mechanism = 21; } /* From 87ba3f87040deb1e87871d308964e280caedb72b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Fri, 15 Aug 2025 13:33:47 +0200 Subject: [PATCH 102/253] add Lilygo T-Echo Lite --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index a8de0d8..504b7a5 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -779,6 +779,11 @@ enum HardwareModel { * https://heltec.org/project/meshsolar/ */ HELTEC_MESH_SOLAR = 108; + + /* + * Lilygo T-Echo Lite + */ + T_ECHO_LITE = 109; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From aa86e284a34848c8ef02e3f2239f573da97f28f3 Mon Sep 17 00:00:00 2001 From: Davide Cavalca Date: Mon, 18 Aug 2025 20:52:33 -0700 Subject: [PATCH 103/253] Add TSL2561 sensor --- meshtastic/telemetry.proto | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 3ec85b4..4f7a88e 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -781,6 +781,10 @@ enum TelemetrySensorType { * SEN5X PM SENSORS */ SEN5X = 43; + /* + * TSL2561 light sensor + */ + TSL2561 = 44; } /* From 8985852d752de3f7210f9a4a3e0923120ec438b3 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 20 Aug 2025 05:39:53 -0500 Subject: [PATCH 104/253] Default to non-square SH1107 --- meshtastic/config.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 321bbb2..5214218 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -666,14 +666,14 @@ message Config { OLED_SH1106 = 2; /* - * Can not be auto detected but set by proto. Used for 128x128 screens + * Can not be auto detected but set by proto. Used for 128x64 screens */ OLED_SH1107 = 3; /* - * Can not be auto detected but set by proto. Used for 128x64 screens + * Can not be auto detected but set by proto. Used for 128x128 screens */ - OLED_SH1107_128_64 = 4; + OLED_SH1107_128_128 = 4; } /* From c5aeb193ca06fceb90ce1255e176554dd1a9a08f Mon Sep 17 00:00:00 2001 From: ford-jones Date: Thu, 21 Aug 2025 10:23:46 +1200 Subject: [PATCH 105/253] Rangetest cleanup configuration option --- meshtastic/module_config.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index b878083..7302014 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -530,6 +530,12 @@ message ModuleConfig { * ESP32 Only */ bool save = 3; + + /* + * Bool indicating that the node should cleanup / destroy it's RangeTest.csv file. + * ESP32 Only + */ + bool clear = 4; } /* From 51b444ec10b08c2f921768e84aef09b8c7fc6b31 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Tue, 26 Aug 2025 19:03:11 +0200 Subject: [PATCH 106/253] Add config flag for low power mode --- meshtastic/admin.proto | 5 +++++ meshtastic/telemetry.proto | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index ada357b..a34c4aa 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -635,4 +635,9 @@ message SEN5X_config { * Reference temperature in degC */ optional float set_temperature = 1; + + /* + * One-shot mode (true for low power - one-shot mode, false for normal - contionuous mode) + */ + optional bool set_one_shot_mode = 2; } \ No newline at end of file diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 0789fc5..93e8f21 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -826,4 +826,9 @@ message SEN5XState { * Last VOC state validity flag for SEN5X */ bool voc_valid = 5; + + /* + * Config flag for one-shot mode (see admin.proto) + */ + bool one_shot_mode = 6; } From 77b00ce690a7c447b5b274d6e9e5efc73e08a285 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Fri, 29 Aug 2025 15:28:20 +0200 Subject: [PATCH 107/253] Minor changes on VOC state array and docs --- meshtastic/admin.proto | 2 +- meshtastic/telemetry.proto | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index a34c4aa..c64306f 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -637,7 +637,7 @@ message SEN5X_config { optional float set_temperature = 1; /* - * One-shot mode (true for low power - one-shot mode, false for normal - contionuous mode) + * One-shot mode (true for low power - one-shot mode, false for normal - continuous mode) */ optional bool set_one_shot_mode = 2; } \ No newline at end of file diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 93e8f21..32996f4 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -812,23 +812,23 @@ message SEN5XState { */ bool last_cleaning_valid = 2; - /* - * VOC state time for SEN5X - */ - optional fixed64 voc_state = 3; - - /* - * Last VOC state time for SEN5X - */ - optional uint32 voc_time = 4; - - /* - * Last VOC state validity flag for SEN5X - */ - bool voc_valid = 5; - /* * Config flag for one-shot mode (see admin.proto) */ - bool one_shot_mode = 6; + bool one_shot_mode = 3; + + /* + * Last VOC state time for SEN55 + */ + optional uint32 voc_state_time = 4; + + /* + * Last VOC state validity flag for SEN55 + */ + optional bool voc_state_valid = 5; + + /* + * VOC state array (8x uint8t) for SEN55 + */ + optional fixed64 voc_state_array = 6; } From 4c4427c4a73c86fed7dc8632188bb8be95349d81 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 29 Aug 2025 13:47:04 -0500 Subject: [PATCH 108/253] Update renovate.json From 6e0e795a83d93d5267c6d4352127c567970dbf3f Mon Sep 17 00:00:00 2001 From: ford-jones Date: Wed, 3 Sep 2025 12:01:33 +1200 Subject: [PATCH 109/253] Improved naming --- meshtastic/module_config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 7302014..f91671c 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -535,7 +535,7 @@ message ModuleConfig { * Bool indicating that the node should cleanup / destroy it's RangeTest.csv file. * ESP32 Only */ - bool clear = 4; + bool clear_on_reboot = 4; } /* From e0b97d6996a757328843bd759738d21546a4a53b Mon Sep 17 00:00:00 2001 From: Quency-D Date: Wed, 3 Sep 2025 13:55:36 +0800 Subject: [PATCH 110/253] add heltec v4 board. --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 504b7a5..7671988 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -785,6 +785,11 @@ enum HardwareModel { */ T_ECHO_LITE = 109; + /* + * New Heltec LoRA32 with ESP32-S3 CPU + */ + HELTEC_V4 = 110; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 3347d98f04acb1ecff95b4f31dceac67f36e1262 Mon Sep 17 00:00:00 2001 From: Mike Robbins Date: Fri, 5 Sep 2025 13:18:19 -0700 Subject: [PATCH 111/253] Reserve value 12 for CLIENT_BASE in enum Config.DeviceConfig.Role --- meshtastic/config.proto | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 5214218..12c79c5 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -108,6 +108,14 @@ message Config { * consuming hops. */ ROUTER_LATE = 11; + + /* + * Description: Treats packets from or to favorited nodes as ROUTER, and all other packets as CLIENT. + * Technical Details: Used for stronger attic/roof nodes to distribute messages more widely + * from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes + * where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node. + */ + CLIENT_BASE = 12; } /* From 74f7041b1c0585d7ac2f266264f46d6c5589228b Mon Sep 17 00:00:00 2001 From: vidplace7 Date: Sat, 6 Sep 2025 10:44:37 -0400 Subject: [PATCH 112/253] Fix formatting Who merged this? :P --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 7671988..62504d0 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 96ef7eef7acf485510d4ded363c684148338a9ef Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Mon, 8 Sep 2025 20:19:53 +0200 Subject: [PATCH 113/253] add Czech translation enum to MUI --- meshtastic/device_ui.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/device_ui.proto b/meshtastic/device_ui.proto index eb1e949..b9a72ce 100644 --- a/meshtastic/device_ui.proto +++ b/meshtastic/device_ui.proto @@ -314,6 +314,11 @@ enum Language { */ BULGARIAN = 17; + /* + * Czech + */ + CZECH = 18; + /* * Simplified Chinese (experimental) */ From bb1a5d09bcaab9bf29e8cd64b9c1633ef22d3046 Mon Sep 17 00:00:00 2001 From: l0g-lab Date: Wed, 10 Sep 2025 18:20:40 -0400 Subject: [PATCH 114/253] 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 115/253] 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 116/253] 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 117/253] 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 118/253] 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 119/253] 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 120/253] 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 121/253] 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 122/253] 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 123/253] 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 124/253] 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 125/253] 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 126/253] 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 127/253] 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 128/253] 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 129/253] 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 130/253] 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 131/253] 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 132/253] 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 133/253] 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 134/253] 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 135/253] 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 136/253] 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 137/253] 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 138/253] 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 139/253] 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 140/253] 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 141/253] 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 142/253] 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 143/253] 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 144/253] 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 145/253] 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 146/253] 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 147/253] 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 148/253] 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 149/253] 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 150/253] 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 151/253] 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 152/253] 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 153/253] 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 154/253] 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 155/253] 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 156/253] 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 157/253] 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 158/253] 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 159/253] 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 160/253] 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 161/253] 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 162/253] 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 163/253] 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 164/253] 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 165/253] 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 166/253] 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 167/253] 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 168/253] 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 169/253] 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 170/253] 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 171/253] 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 172/253] 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 173/253] 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 174/253] 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 175/253] 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 8f95d7f451a01045f0e6ed9320634daee222e591 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Wed, 7 Jan 2026 12:35:49 +0100 Subject: [PATCH 176/253] Add module config to enable air quality on screen --- meshtastic/module_config.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index f91671c..534dfc0 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -615,6 +615,11 @@ message ModuleConfig { * Enable/Disable the health telemetry module on-device display */ bool health_screen_enabled = 13; + + /* + * Enable/Disable the air quality telemetry measurement module on-device display + */ + bool air_quality_screen_enabled = 14; } /* From c4eab768ad1b193da3794e9bd43cf81fafcded7d Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Wed, 7 Jan 2026 22:49:52 -0600 Subject: [PATCH 177/253] 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. From 9cb373751bb27ef6d5d0a717da43818f43a46833 Mon Sep 17 00:00:00 2001 From: Ford Jones <107664313+ford-jones@users.noreply.github.com> Date: Fri, 9 Jan 2026 17:26:36 +0000 Subject: [PATCH 178/253] Mute: Nodes (#838) * Add tags for toggling mute state * Adds mute flag to protobuf for use in clients * Adds mute flag to lite (device only) protobuf * Prefer bitmask usage over new boolean * Remove trailing newline in mesh.proto --------- Co-authored-by: Jonathan Bennett --- meshtastic/admin.proto | 5 +++++ meshtastic/deviceonly.proto | 1 + meshtastic/mesh.proto | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 820ef31..176d973 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -432,6 +432,11 @@ message AdminMessage { */ uint32 remove_ignored_node = 48; + /* + * Set specified node-num to be muted + */ + uint32 toggle_muted_node = 49; + /* * 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 3a86719..b7c377a 100644 --- a/meshtastic/deviceonly.proto +++ b/meshtastic/deviceonly.proto @@ -168,6 +168,7 @@ message NodeInfoLite { /* * Bitfield for storing booleans. * LSB 0 is_key_manually_verified + * LSB 1 is_muted */ uint32 bitfield = 13; } diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index c05e5ea..94f3830 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1764,6 +1764,12 @@ message NodeInfo { * LSB 0 of the bitfield */ bool is_key_manually_verified = 12; + + /* + * True if node has been muted + * Persistes between NodeDB internal clean ups + */ + bool is_muted = 13; } /* From a7bbad173db14b5d77eac2a21c56424d746dc79d Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 10 Jan 2026 05:16:40 -0600 Subject: [PATCH 179/253] Format --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index c05e5ea..d783890 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -844,7 +844,7 @@ enum HardwareModel { * 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. From 53911db9a02343632245f783c0a1cdc60b23fe49 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sat, 10 Jan 2026 05:16:51 -0600 Subject: [PATCH 180/253] Format --- meshtastic/module_config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 6ae436e..673c298 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -621,7 +621,7 @@ message ModuleConfig { * Note: We will still send telemtry to the connected phone / client every minute over the API */ bool device_telemetry_enabled = 14; - + /* * Enable/Disable the air quality telemetry measurement module on-device display */ From 8816b4715dcba5daea409a988ce476426f317728 Mon Sep 17 00:00:00 2001 From: Dane Date: Sun, 11 Jan 2026 17:26:39 +1100 Subject: [PATCH 181/253] add logging modes. --- meshtastic/module_config.proto | 3 +++ 1 file changed, 3 insertions(+) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 673c298..8d59df2 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -340,6 +340,9 @@ message ModuleConfig { //Used to configure and view some parameters of MeshSolar. //https://heltec.org/project/meshsolar/ MS_CONFIG = 8; + //Logs mesh traffic to the serial pins, ideal for logging via openLog or similar. + LOG = 9; // includes other packets + LOGTEXT = 10; // only text (channel & DM) } /* From 76cca1402619bd0e70ebd77ac344c3ea7e680b48 Mon Sep 17 00:00:00 2001 From: Dane Date: Sun, 11 Jan 2026 17:28:18 +1100 Subject: [PATCH 182/253] formatting --- meshtastic/module_config.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 8d59df2..7825937 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -337,10 +337,10 @@ message ModuleConfig { // VE.Direct is a serial protocol used by Victron Energy products // https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable VE_DIRECT = 7; - //Used to configure and view some parameters of MeshSolar. - //https://heltec.org/project/meshsolar/ + // Used to configure and view some parameters of MeshSolar. + // https://heltec.org/project/meshsolar/ MS_CONFIG = 8; - //Logs mesh traffic to the serial pins, ideal for logging via openLog or similar. + // Logs mesh traffic to the serial pins, ideal for logging via openLog or similar. LOG = 9; // includes other packets LOGTEXT = 10; // only text (channel & DM) } From 4c82a2f39d44c68a4fede369db789b1dc4167288 Mon Sep 17 00:00:00 2001 From: rcarteraz Date: Mon, 12 Jan 2026 14:02:04 -0700 Subject: [PATCH 183/253] Add T-Beam 1W --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 8de3a31..ca7a997 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -845,6 +845,11 @@ enum HardwareModel { */ MESHSTICK_1262 = 121; + /* + * LilyGo T-Beam 1W + */ + TBEAM_1_WATT = 122; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 786f3bbf98507374b730688d1d648bfcbcb47c4c Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 12 Jan 2026 15:36:39 -0600 Subject: [PATCH 184/253] Fix comment formatting in mesh.proto --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index ca7a997..33f81a5 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -845,7 +845,7 @@ enum HardwareModel { */ MESHSTICK_1262 = 121; - /* + /* * LilyGo T-Beam 1W */ TBEAM_1_WATT = 122; From e3d3abccc39d42d39994b2141cf7ae62a999e9dc Mon Sep 17 00:00:00 2001 From: Mike Robbins Date: Mon, 12 Jan 2026 22:19:58 -0500 Subject: [PATCH 185/253] (Updated comment only.) CLIENT_BASE now acts as ROUTER_LATE, not ROUTER --- meshtastic/config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 366a4e5..649495e 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -111,7 +111,7 @@ message Config { ROUTER_LATE = 11; /* - * Description: Treats packets from or to favorited nodes as ROUTER, and all other packets as CLIENT. + * Description: Treats packets from or to favorited nodes as ROUTER_LATE, and all other packets as CLIENT. * Technical Details: Used for stronger attic/roof nodes to distribute messages more widely * from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes * where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node. From 6c79c8be71b8cfc693812741ecdfb8202a1f9c4c Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Tue, 13 Jan 2026 16:20:13 +0100 Subject: [PATCH 186/253] Add T5 S3 ePaper Pro HW-Id mesh.proto --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 33f81a5..ecb8803 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -850,6 +850,11 @@ enum HardwareModel { */ TBEAM_1_WATT = 122; + /* + * LilyGo T5 S3 ePaper Pro (V1 and V2) + */ + T5_S3_EPAPER_PRO = 123; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 c42f97a38168faefbcfc1e8f3c1d6272cef8763f Mon Sep 17 00:00:00 2001 From: Christopher Yarbro Date: Fri, 16 Jan 2026 12:27:47 -0600 Subject: [PATCH 187/253] Add HDC1080 to telemetry protobuf --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 88d8213..12ad55f 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -795,6 +795,11 @@ enum TelemetrySensorType { * BH1750 light sensor */ BH1750 = 45; + + /* + * HDC1080 Temperature and Humidity Sensor + */ + HDC1080 = 46; } /* From af5d147428068aad4c0f3539c77e22fe13155ba4 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sat, 17 Jan 2026 13:12:01 +0100 Subject: [PATCH 188/253] Fix numbering in sensor config --- meshtastic/admin.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 229d7de..9cd2ea2 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -500,12 +500,12 @@ message AdminMessage { /* * Tell the node to reset into the OTA Loader */ - OTAEvent ota_request = 101; + OTAEvent ota_request = 102; /* * Parameters and sensor configuration */ - SensorConfig sensor_config = 102; + SensorConfig sensor_config = 103; } } From 1b1dc090ef38f708a276dfb51b17de5ca06b3ade Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Sat, 17 Jan 2026 09:53:09 -0800 Subject: [PATCH 189/253] Add noise_floor float field to LocalStats message --- meshtastic/telemetry.proto | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 88d8213..cbe9a2d 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -439,10 +439,15 @@ message LocalStats { */ uint32 heap_free_bytes = 13; - /* - * Number of packets that were dropped because the transmit queue was full. - */ + /* + * Number of packets that were dropped because the transmit queue was full. + */ uint32 num_tx_dropped = 14; + + /* + * Noise floor value measured in dBm + */ + float noise_floor = 15; } /* From 19c48339301cfbc48d98cce6c4f07c03bee73a3b Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Sat, 17 Jan 2026 15:50:12 -0600 Subject: [PATCH 190/253] Add StatusMessage message and portnum (#835) --- meshtastic/mesh.options | 3 ++- meshtastic/mesh.proto | 7 +++++++ meshtastic/module_config.options | 2 ++ meshtastic/module_config.proto | 15 +++++++++++++++ meshtastic/portnums.proto | 8 ++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/meshtastic/mesh.options b/meshtastic/mesh.options index 77479ce..1bae5eb 100644 --- a/meshtastic/mesh.options +++ b/meshtastic/mesh.options @@ -74,6 +74,7 @@ *StoreForwardPlusPlus.root_hash max_size:32 *StoreForwardPlusPlus.message max_size:240 +*StatusMessage.status max_size:80 # MyMessage.name max_size:40 # or fixed_length or fixed_count, or max_count @@ -94,4 +95,4 @@ *ChunkedPayload.chunk_count int_size:16 *ChunkedPayload.chunk_index int_size:16 -*ChunkedPayload.payload_chunk max_size:228 \ No newline at end of file +*ChunkedPayload.payload_chunk max_size:228 diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index ecb8803..3117af2 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1311,6 +1311,13 @@ message Waypoint { fixed32 icon = 8; } +/* + * Message for node status + */ +message StatusMessage { + string status = 1; +} + /* * This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server */ diff --git a/meshtastic/module_config.options b/meshtastic/module_config.options index bf2a5f4..95151b0 100644 --- a/meshtastic/module_config.options +++ b/meshtastic/module_config.options @@ -27,3 +27,5 @@ *DetectionSensorConfig.monitor_pin int_size:8 *DetectionSensorConfig.name max_size:20 *DetectionSensorConfig.detection_trigger_type max_size:8 + +*StatusMessage.node_status max_size:80 diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 7825937..ac13a56 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -769,6 +769,16 @@ message ModuleConfig { uint32 blue = 5; } + /* + * StatusMessage config - Allows setting a status message for a node to periodically rebroadcast + */ + message StatusMessageConfig { + /* + * The actual status string + */ + string node_status = 1; + } + /* * TODO: REPLACE */ @@ -837,6 +847,11 @@ message ModuleConfig { * TODO: REPLACE */ PaxcounterConfig paxcounter = 13; + + /* + * TODO: REPLACE + */ + StatusMessageConfig statusmessage = 14; } } diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 221f113..918b063 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -142,6 +142,14 @@ enum PortNum { */ STORE_FORWARD_PLUSPLUS_APP = 35; + /* + * Node Status module + * ENCODING: protobuf + * This module allows setting an extra string of status for a node. + * Broadcasts on change and on a timer, possibly once a day. + */ + NODE_STATUS_APP = 36; + /* * 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 152bab3589b62bc9d008079ab2b33316d42239b1 Mon Sep 17 00:00:00 2001 From: Steve Gilberd Date: Mon, 19 Jan 2026 18:13:18 +1300 Subject: [PATCH 191/253] Fix option name to prevent build failure in firmware --- meshtastic/module_config.options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/module_config.options b/meshtastic/module_config.options index 95151b0..c6158be 100644 --- a/meshtastic/module_config.options +++ b/meshtastic/module_config.options @@ -28,4 +28,4 @@ *DetectionSensorConfig.name max_size:20 *DetectionSensorConfig.detection_trigger_type max_size:8 -*StatusMessage.node_status max_size:80 +*StatusMessageConfig.node_status max_size:80 From 3193bab2c9af7bf4fbdea23bd400bcac18c2f714 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 19 Jan 2026 12:05:33 -0600 Subject: [PATCH 192/253] Change noise_floor type from float to int32 --- meshtastic/telemetry.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index cbe9a2d..4db51b7 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -447,7 +447,7 @@ message LocalStats { /* * Noise floor value measured in dBm */ - float noise_floor = 15; + int32 noise_floor = 15; } /* From 32906d5cdde821a89e9ac27fa3f2b116efe52e4f Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Tue, 20 Jan 2026 09:53:48 +0100 Subject: [PATCH 193/253] Format --- meshtastic/admin.proto | 46 +++++++++++++++++++++--------------------- meshtastic/mesh.proto | 2 +- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 9cd2ea2..8190ca1 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -638,61 +638,61 @@ message KeyVerificationAdmin { message SensorConfig { /* - * SCD4X CO2 Sensor configuration - */ + * SCD4X CO2 Sensor configuration + */ SCD4X_config scd4x_config = 1; /* - * SEN5X PM Sensor configuration - */ + * SEN5X PM Sensor configuration + */ SEN5X_config sen5x_config = 2; } message SCD4X_config { /* - * Set Automatic self-calibration enabled - */ + * Set Automatic self-calibration enabled + */ optional bool set_asc = 1; /* - * Recalibration target CO2 concentration in ppm (FRC or ASC) - */ + * Recalibration target CO2 concentration in ppm (FRC or ASC) + */ optional uint32 set_target_co2_conc = 2; /* - * Reference temperature in degC - */ + * Reference temperature in degC + */ optional float set_temperature = 3; /* - * Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure) - */ + * Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure) + */ optional uint32 set_altitude = 4; /* - * Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude) - */ + * Sensor ambient pressure in Pa. 70000 - 120000 Pa (overrides altitude) + */ optional uint32 set_ambient_pressure = 5; /* - * Perform a factory reset of the sensor - */ + * Perform a factory reset of the sensor + */ optional bool factory_reset = 6; /* - * Power mode for sensor (true for low power, false for normal) - */ + * Power mode for sensor (true for low power, false for normal) + */ optional bool set_power_mode = 7; } message SEN5X_config { /* - * Reference temperature in degC - */ + * Reference temperature in degC + */ optional float set_temperature = 1; /* - * One-shot mode (true for low power - one-shot mode, false for normal - continuous mode) - */ + * One-shot mode (true for low power - one-shot mode, false for normal - continuous mode) + */ optional bool set_one_shot_mode = 2; -} \ No newline at end of file +} diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index ecb8803..f620b76 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -846,7 +846,7 @@ enum HardwareModel { MESHSTICK_1262 = 121; /* - * LilyGo T-Beam 1W + * LilyGo T-Beam 1W */ TBEAM_1_WATT = 122; From 77c8329a59a9c96a61c447b5d5f1a52ca583e4f2 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 20 Jan 2026 07:54:12 -0600 Subject: [PATCH 194/253] Add missed StatusMessage protobufs, mainly for config (#847) * Add missed StatusMessage protobufs, mainly for config * format fix --- meshtastic/admin.proto | 5 +++++ meshtastic/localonly.proto | 5 +++++ meshtastic/mesh.proto | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 176d973..4b6eff8 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -152,6 +152,11 @@ message AdminMessage { * TODO: REPLACE */ PAXCOUNTER_CONFIG = 12; + + /* + * TODO: REPLACE + */ + STATUSMESSAGE_CONFIG = 13; } enum BackupLocation { diff --git a/meshtastic/localonly.proto b/meshtastic/localonly.proto index 50e7305..6da79a3 100644 --- a/meshtastic/localonly.proto +++ b/meshtastic/localonly.proto @@ -131,6 +131,11 @@ message LocalModuleConfig { */ ModuleConfig.PaxcounterConfig paxcounter = 14; + /* + * StatusMessage Config + */ + ModuleConfig.StatusMessageConfig statusmessage = 15; + /* * A version integer used to invalidate old save files when we make * incompatible changes This integer is set at build time and is private to diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 3117af2..aace7d4 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -846,7 +846,7 @@ enum HardwareModel { MESHSTICK_1262 = 121; /* - * LilyGo T-Beam 1W + * LilyGo T-Beam 1W */ TBEAM_1_WATT = 122; From 441e4b48526e04983a6f72bc87402adec8afb6c6 Mon Sep 17 00:00:00 2001 From: Dan D Date: Thu, 22 Jan 2026 22:19:26 -0500 Subject: [PATCH 195/253] Refactor publish workflow with separate build jobs and dry run support - Add dry_run input for testing without publishing - Split into separate jobs: codegen, build-typescript, build-rust - Add tsdown build step for ESM-only NPM package - Create release zip artifacts for NPM, JSR, and Rust packages - Upload zip assets to GitHub releases - Use OIDC authentication for JSR publishing (npx jsr publish) - Add explicit permissions for id-token write --- .github/workflows/publish.yml | 294 ++++++++++++++++++++++++++-------- 1 file changed, 230 insertions(+), 64 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d375521..9f00bbd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,76 +10,66 @@ on: description: "Version to publish (e.g. v1.2.3). Used when manually dispatching." required: false type: string + dry_run: + description: "Dry run mode - generate artifacts without publishing" + required: false + type: boolean + default: false -permissions: write-all +permissions: + contents: write + id-token: write jobs: codegen: runs-on: ubuntu-24.04 + outputs: + version: ${{ steps.version.outputs.VERSION }} + tag: ${{ steps.version.outputs.TAG }} steps: - name: Checkout code uses: actions/checkout@v4 with: - fetch-depth: 0 + 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 + - name: Determine version + id: version run: | set -euo pipefail if [ "${{ github.ref_type }}" = "tag" ]; then - VERSION="${{ github.ref_name }}" + TAG="${{ github.ref_name }}" elif [ -n "${{ inputs.version || '' }}" ]; then - VERSION="${{ inputs.version }}" + TAG="${{ 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 + VERSION="${TAG#v}" + echo "VERSION=$VERSION" >> "$GITHUB_OUTPUT" + echo "TAG=$TAG" >> "$GITHUB_OUTPUT" + echo "Resolved VERSION=$VERSION, TAG=$TAG" - name: Setup Buf uses: bufbuild/buf-setup-action@main with: github_token: ${{ github.token }} - - name: Generate code + - name: Generate protobuf code run: buf generate + - name: Set package versions + run: | + set -euxo pipefail + VERSION="${{ steps.version.outputs.VERSION }}" + 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; } + sed -i "s/__PACKAGE_VERSION__/${VERSION}/g" "$f" + done + - 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 + cp LICENSE README.md packages/ts/ + cp LICENSE README.md packages/rust/ - name: Upload TypeScript code uses: actions/upload-artifact@v4 @@ -87,33 +77,60 @@ jobs: name: ts_code path: packages/ts - - name: Push to schema registry - env: - BUF_TOKEN: ${{ secrets.BUF_TOKEN }} - run: | - buf push --tag ${{ github.ref_name }} + - name: Upload Rust code + uses: actions/upload-artifact@v4 + with: + name: rust_code + path: packages/rust - publish-jsr: + build-typescript: 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: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Install dependencies + run: npm install + + - name: Build with tsdown + run: npm run build + + - name: Show build output + run: | + echo "=== Build output ===" + ls -la + ls -la dist/ + + - name: Upload built NPM package + uses: actions/upload-artifact@v4 + with: + name: npm_package + path: | + dist/ + package.json + LICENSE + README.md + + - name: Upload JSR package + uses: actions/upload-artifact@v4 + with: + name: jsr_package + path: | + lib/ + mod.ts + deno.json + LICENSE + README.md + + build-rust: runs-on: ubuntu-24.04 needs: codegen steps: @@ -121,12 +138,161 @@ jobs: uses: actions/download-artifact@v4 with: name: rust_code - - name: Set up Rust + + - name: Setup Rust uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: Check Library - run: cargo check + + - name: Build library + run: cargo build --release + + - name: Show build output + run: | + echo "=== Build output ===" + ls -la + ls -la target/release/ || true + + - name: Upload built Rust package + uses: actions/upload-artifact@v4 + with: + name: rust_package + path: | + src/ + Cargo.toml + Cargo.lock + LICENSE + README.md + + create-release-zips: + runs-on: ubuntu-24.04 + needs: [codegen, build-typescript, build-rust] + steps: + - name: Download NPM package + uses: actions/download-artifact@v4 + with: + name: npm_package + path: npm_package + + - name: Download JSR package + uses: actions/download-artifact@v4 + with: + name: jsr_package + path: jsr_package + + - name: Download Rust package + uses: actions/download-artifact@v4 + with: + name: rust_package + path: rust_package + + - name: Create zip archives + run: | + cd npm_package && zip -r ../meshtastic-protobufs-npm.zip . && cd .. + cd jsr_package && zip -r ../meshtastic-protobufs-jsr.zip . && cd .. + cd rust_package && zip -r ../meshtastic-protobufs-rust.zip . && cd .. + + - name: Upload release zips + uses: actions/upload-artifact@v4 + with: + name: release_zips + path: | + meshtastic-protobufs-npm.zip + meshtastic-protobufs-jsr.zip + meshtastic-protobufs-rust.zip + + upload-release-assets: + runs-on: ubuntu-24.04 + needs: [codegen, create-release-zips] + if: ${{ !inputs.dry_run }} + steps: + - name: Download release zips + uses: actions/download-artifact@v4 + with: + name: release_zips + + - name: Upload assets to GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.codegen.outputs.tag }} + files: | + meshtastic-protobufs-npm.zip + meshtastic-protobufs-jsr.zip + meshtastic-protobufs-rust.zip + + push-buf-registry: + runs-on: ubuntu-24.04 + needs: codegen + if: ${{ !inputs.dry_run }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Buf + uses: bufbuild/buf-setup-action@main + with: + github_token: ${{ github.token }} + + - name: Push to schema registry + env: + BUF_TOKEN: ${{ secrets.BUF_TOKEN }} + run: buf push --tag ${{ needs.codegen.outputs.tag }} + + publish-npm: + runs-on: ubuntu-24.04 + needs: [codegen, build-typescript] + if: ${{ !inputs.dry_run }} + steps: + - name: Download NPM package + uses: actions/download-artifact@v4 + with: + name: npm_package + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + registry-url: "https://registry.npmjs.org" + + - name: Publish to NPM + run: npm publish --access public + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + publish-jsr: + runs-on: ubuntu-24.04 + needs: [codegen, build-typescript] + if: ${{ !inputs.dry_run }} + permissions: + contents: read + id-token: write + steps: + - name: Download JSR package + uses: actions/download-artifact@v4 + with: + name: jsr_package + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Publish to JSR + run: npx jsr publish + + publish-cargo: + runs-on: ubuntu-24.04 + needs: [codegen, build-rust] + if: ${{ !inputs.dry_run }} + steps: + - name: Download Rust package + uses: actions/download-artifact@v4 + with: + name: rust_package + + - name: Setup Rust + uses: actions-rust-lang/setup-rust-toolchain@v1 + - 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 + ignore-unpublished-changes: true From 84f8569c9e14b27ee81e1af005faf25552d8a505 Mon Sep 17 00:00:00 2001 From: Dan D Date: Thu, 22 Jan 2026 22:21:08 -0500 Subject: [PATCH 196/253] Rename ci.yml to schema-registry.yml for clarity --- .github/workflows/{ci.yml => schema-registry.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{ci.yml => schema-registry.yml} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/schema-registry.yml similarity index 100% rename from .github/workflows/ci.yml rename to .github/workflows/schema-registry.yml From 649568805f5001240f3df0ac13167616915a7167 Mon Sep 17 00:00:00 2001 From: Dan D Date: Thu, 22 Jan 2026 22:46:18 -0500 Subject: [PATCH 197/253] Remove Rust/Cargo publishing from workflow --- .github/workflows/publish.yml | 76 ++--------------------------------- 1 file changed, 4 insertions(+), 72 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9f00bbd..70bc637 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,4 +1,4 @@ -name: Publish to Cargo, JSR, & NPM +name: Publish to JSR & NPM on: push: @@ -61,15 +61,13 @@ jobs: run: | set -euxo pipefail VERSION="${{ steps.version.outputs.VERSION }}" - for f in packages/ts/deno.json packages/ts/package.json packages/rust/Cargo.toml; do + for f in packages/ts/deno.json packages/ts/package.json; do test -f "$f" || { echo "Missing $f" >&2; exit 1; } sed -i "s/__PACKAGE_VERSION__/${VERSION}/g" "$f" done - name: Copy license & README - run: | - cp LICENSE README.md packages/ts/ - cp LICENSE README.md packages/rust/ + run: cp LICENSE README.md packages/ts/ - name: Upload TypeScript code uses: actions/upload-artifact@v4 @@ -77,12 +75,6 @@ jobs: name: ts_code path: packages/ts - - name: Upload Rust code - uses: actions/upload-artifact@v4 - with: - name: rust_code - path: packages/rust - build-typescript: runs-on: ubuntu-24.04 needs: codegen @@ -130,41 +122,9 @@ jobs: LICENSE README.md - build-rust: - runs-on: ubuntu-24.04 - needs: codegen - steps: - - name: Download Rust code - uses: actions/download-artifact@v4 - with: - name: rust_code - - - name: Setup Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - - - name: Build library - run: cargo build --release - - - name: Show build output - run: | - echo "=== Build output ===" - ls -la - ls -la target/release/ || true - - - name: Upload built Rust package - uses: actions/upload-artifact@v4 - with: - name: rust_package - path: | - src/ - Cargo.toml - Cargo.lock - LICENSE - README.md - create-release-zips: runs-on: ubuntu-24.04 - needs: [codegen, build-typescript, build-rust] + needs: [codegen, build-typescript] steps: - name: Download NPM package uses: actions/download-artifact@v4 @@ -178,17 +138,10 @@ jobs: name: jsr_package path: jsr_package - - name: Download Rust package - uses: actions/download-artifact@v4 - with: - name: rust_package - path: rust_package - - name: Create zip archives run: | cd npm_package && zip -r ../meshtastic-protobufs-npm.zip . && cd .. cd jsr_package && zip -r ../meshtastic-protobufs-jsr.zip . && cd .. - cd rust_package && zip -r ../meshtastic-protobufs-rust.zip . && cd .. - name: Upload release zips uses: actions/upload-artifact@v4 @@ -197,7 +150,6 @@ jobs: path: | meshtastic-protobufs-npm.zip meshtastic-protobufs-jsr.zip - meshtastic-protobufs-rust.zip upload-release-assets: runs-on: ubuntu-24.04 @@ -216,7 +168,6 @@ jobs: files: | meshtastic-protobufs-npm.zip meshtastic-protobufs-jsr.zip - meshtastic-protobufs-rust.zip push-buf-registry: runs-on: ubuntu-24.04 @@ -277,22 +228,3 @@ jobs: - name: Publish to JSR run: npx jsr publish - - publish-cargo: - runs-on: ubuntu-24.04 - needs: [codegen, build-rust] - if: ${{ !inputs.dry_run }} - steps: - - name: Download Rust package - uses: actions/download-artifact@v4 - with: - name: rust_package - - - name: Setup Rust - uses: actions-rust-lang/setup-rust-toolchain@v1 - - - name: Publish to crates.io - uses: katyo/publish-crates@v2 - with: - registry-token: ${{ secrets.CARGO_TOKEN }} - ignore-unpublished-changes: true From 41b270cff026414277aaaf49b91ce6c9faabc6f1 Mon Sep 17 00:00:00 2001 From: Dan D Date: Thu, 22 Jan 2026 22:48:10 -0500 Subject: [PATCH 198/253] Remove Rust plugins from buf code generation --- buf.gen.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/buf.gen.yaml b/buf.gen.yaml index 1306002..daec499 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -3,8 +3,3 @@ 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 From cfa561adae6bd0ad1b2cac463918378204ae91de Mon Sep 17 00:00:00 2001 From: Dan D Date: Thu, 22 Jan 2026 23:00:28 -0500 Subject: [PATCH 199/253] Add debug output to diagnose missing lib files --- .github/workflows/publish.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 70bc637..03506af 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -57,6 +57,13 @@ jobs: - name: Generate protobuf code run: buf generate + - name: Show generated files + run: | + echo "=== packages/ts contents ===" + ls -la packages/ts/ + echo "=== packages/ts/lib contents ===" + ls -la packages/ts/lib/ || echo "lib folder not found" + - name: Set package versions run: | set -euxo pipefail @@ -84,6 +91,15 @@ jobs: with: name: ts_code + - name: Show downloaded files + run: | + echo "=== Working directory ===" + pwd + echo "=== Contents ===" + ls -la + echo "=== lib/ contents ===" + ls -la lib/ || echo "lib folder not found" + - name: Setup Node.js uses: actions/setup-node@v4 with: From 5fced3fa927c5fb0336ef5364bc0e0e43a69e241 Mon Sep 17 00:00:00 2001 From: Dan D Date: Thu, 22 Jan 2026 23:04:17 -0500 Subject: [PATCH 200/253] Move generated protobuf files from meshtastic/ to lib/ root --- .github/workflows/publish.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 03506af..2787fc2 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -57,6 +57,9 @@ jobs: - name: Generate protobuf code run: buf generate + - name: Move generated files to lib root + run: mv packages/ts/lib/meshtastic/*_pb.ts packages/ts/lib/ + - name: Show generated files run: | echo "=== packages/ts contents ===" From c84d2440ff32f153445f2326e9ff39f56f2554b9 Mon Sep 17 00:00:00 2001 From: Dan D Date: Fri, 30 Jan 2026 15:14:46 -0500 Subject: [PATCH 201/253] Ignore generated protobuf files in packages/ts/lib/ --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index e43b0f9..265ee7c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ .DS_Store + +# Generated protobuf files +packages/ts/lib/ From 9f65fd00e7ba76510938a4f595d7c41f2ca65c31 Mon Sep 17 00:00:00 2001 From: Dan D Date: Fri, 30 Jan 2026 15:20:32 -0500 Subject: [PATCH 202/253] Fix comment indentation in telemetry.proto --- meshtastic/telemetry.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 4db51b7..21a8497 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -439,9 +439,9 @@ message LocalStats { */ uint32 heap_free_bytes = 13; - /* - * Number of packets that were dropped because the transmit queue was full. - */ + /* + * Number of packets that were dropped because the transmit queue was full. + */ uint32 num_tx_dropped = 14; /* From e2daf8d914070d7b67e152e1656e737b5fc15938 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Mon, 19 Jan 2026 13:39:55 -0800 Subject: [PATCH 203/253] Add module traffic_management protobufs --- meshtastic/admin.proto | 5 +++ meshtastic/localonly.proto | 5 +++ meshtastic/module_config.proto | 57 ++++++++++++++++++++++++++++++++++ meshtastic/telemetry.proto | 19 ++++++++++++ 4 files changed, 86 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index d622e0e..ed373a5 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -157,6 +157,11 @@ message AdminMessage { * TODO: REPLACE */ STATUSMESSAGE_CONFIG = 13; + + /* + * Traffic management module config + */ + TRAFFICMANAGEMENT_CONFIG = 14; } enum BackupLocation { diff --git a/meshtastic/localonly.proto b/meshtastic/localonly.proto index 6da79a3..50b74f7 100644 --- a/meshtastic/localonly.proto +++ b/meshtastic/localonly.proto @@ -136,6 +136,11 @@ message LocalModuleConfig { */ ModuleConfig.StatusMessageConfig statusmessage = 15; + /* + * The part of the config that is specific to the Traffic Management module + */ + ModuleConfig.TrafficManagementConfig traffic_management = 16; + /* * A version integer used to invalidate old save files when we make * incompatible changes This integer is set at build time and is private to diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index ac13a56..80a2b44 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -295,6 +295,58 @@ message ModuleConfig { int32 ble_threshold = 4; } + /* + * Config for the Traffic Management module + */ + message TrafficManagementConfig { + /* + * Master enable for traffic management + */ + bool enabled = 1; + + /* + * Dry-run mode: log actions but don't drop/modify packets + */ + bool dry_run = 2; + + /* + * Position deduplication settings + */ + bool position_dedup_enabled = 3; + uint32 position_precision_bits = 4; + uint32 position_min_interval_secs = 5; + + /* + * NodeInfo direct response settings + */ + bool nodeinfo_direct_response = 6; + uint32 nodeinfo_direct_response_min_hops = 7; + + /* + * Rate limiting settings + */ + bool rate_limit_enabled = 8; + uint32 rate_limit_window_secs = 9; + uint32 rate_limit_max_packets = 10; + + /* + * Unknown/undecryptable packet handling + */ + bool drop_unknown_enabled = 11; + uint32 unknown_packet_threshold = 12; + + /* + * Hop exhaustion for local telemetry/position + */ + bool local_only_telemetry = 13; + bool local_only_position = 14; + + /* + * Router hop preservation + */ + bool router_preserve_hops = 15; + } + /* * Serial Config */ @@ -852,6 +904,11 @@ message ModuleConfig { * TODO: REPLACE */ StatusMessageConfig statusmessage = 14; + + /* + * TODO: REPLACE + */ + TrafficManagementConfig traffic_management = 15; } } diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 8b70ade..efcc4a4 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -450,6 +450,20 @@ message LocalStats { int32 noise_floor = 15; } +/* + * Traffic management statistics + */ +message TrafficManagementStats { + uint32 packets_inspected = 1; + uint32 position_dedup_drops = 2; + uint32 nodeinfo_cache_hits = 3; + uint32 rate_limit_drops = 4; + uint32 unknown_packet_drops = 5; + uint32 hop_exhausted_packets = 6; + uint32 dry_run_would_drop = 7; + uint32 router_hops_preserved = 8; +} + /* * Health telemetry metrics */ @@ -565,6 +579,11 @@ message Telemetry { * Linux host metrics */ HostMetrics host_metrics = 8; + + /* + * Traffic management statistics + */ + TrafficManagementStats traffic_management_stats = 9; } } From 4fbac7db2bb41253269c1712214575cb6a64e08b Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Mon, 19 Jan 2026 15:12:50 -0800 Subject: [PATCH 204/253] Updated probufs with more comments per submit requirement. --- meshtastic/admin.proto | 2 +- meshtastic/module_config.proto | 2 +- meshtastic/telemetry.proto | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index ed373a5..643e418 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -154,7 +154,7 @@ message AdminMessage { PAXCOUNTER_CONFIG = 12; /* - * TODO: REPLACE + * Traffic Management module config */ STATUSMESSAGE_CONFIG = 13; diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 80a2b44..feb8481 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -906,7 +906,7 @@ message ModuleConfig { StatusMessageConfig statusmessage = 14; /* - * TODO: REPLACE + * Traffic management module config for mesh network optimization */ TrafficManagementConfig traffic_management = 15; } diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index efcc4a4..5dd23c1 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -451,16 +451,47 @@ message LocalStats { } /* - * Traffic management statistics + * Traffic management statistics for mesh network optimization */ message TrafficManagementStats { + /* + * Total number of packets inspected by traffic management + */ uint32 packets_inspected = 1; + + /* + * Number of position packets dropped due to deduplication + */ uint32 position_dedup_drops = 2; + + /* + * Number of NodeInfo requests answered from cache + */ uint32 nodeinfo_cache_hits = 3; + + /* + * Number of packets dropped due to rate limiting + */ uint32 rate_limit_drops = 4; + + /* + * Number of unknown/undecryptable packets dropped + */ uint32 unknown_packet_drops = 5; + + /* + * Number of packets with hop_limit exhausted for local-only broadcast + */ uint32 hop_exhausted_packets = 6; + + /* + * Number of packets that would have been dropped in dry-run mode + */ uint32 dry_run_would_drop = 7; + + /* + * Number of times router hop preservation was applied + */ uint32 router_hops_preserved = 8; } From 542285b5d0d591d8e51b2203c8dc1602f9960338 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Mon, 19 Jan 2026 15:14:50 -0800 Subject: [PATCH 205/253] More comments --- meshtastic/module_config.proto | 47 +++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index feb8481..440ef9d 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -296,53 +296,82 @@ message ModuleConfig { } /* - * Config for the Traffic Management module + * Config for the Traffic Management module. + * Provides packet inspection and traffic shaping for mesh network optimization. */ message TrafficManagementConfig { /* - * Master enable for traffic management + * Master enable for traffic management module */ bool enabled = 1; /* - * Dry-run mode: log actions but don't drop/modify packets + * Dry-run mode: log actions but don't actually drop or modify packets */ bool dry_run = 2; /* - * Position deduplication settings + * Enable position deduplication to drop redundant position broadcasts */ bool position_dedup_enabled = 3; + + /* + * Number of bits of precision for position deduplication (0-32) + */ uint32 position_precision_bits = 4; + + /* + * Minimum interval in seconds between position updates from the same node + */ uint32 position_min_interval_secs = 5; /* - * NodeInfo direct response settings + * Enable direct response to NodeInfo requests from local cache */ bool nodeinfo_direct_response = 6; + + /* + * Minimum hop distance from requestor before responding to NodeInfo requests + */ uint32 nodeinfo_direct_response_min_hops = 7; /* - * Rate limiting settings + * Enable per-node rate limiting to throttle chatty nodes */ bool rate_limit_enabled = 8; + + /* + * Time window in seconds for rate limiting calculations + */ uint32 rate_limit_window_secs = 9; + + /* + * Maximum packets allowed per node within the rate limit window + */ uint32 rate_limit_max_packets = 10; /* - * Unknown/undecryptable packet handling + * Enable dropping of unknown/undecryptable packets from repeat offenders */ bool drop_unknown_enabled = 11; + + /* + * Number of unknown packets before dropping from a node + */ uint32 unknown_packet_threshold = 12; /* - * Hop exhaustion for local telemetry/position + * Set hop_limit to 0 for locally-originated telemetry broadcasts */ bool local_only_telemetry = 13; + + /* + * Set hop_limit to 0 for locally-originated position broadcasts + */ bool local_only_position = 14; /* - * Router hop preservation + * Preserve hop_limit for router-to-router traffic */ bool router_preserve_hops = 15; } From 84a26030379bb6e202c95b0b8c21f2784de84316 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Mon, 19 Jan 2026 15:19:18 -0800 Subject: [PATCH 206/253] Minor wording updates --- meshtastic/module_config.proto | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 440ef9d..be56f42 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -297,7 +297,7 @@ message ModuleConfig { /* * Config for the Traffic Management module. - * Provides packet inspection and traffic shaping for mesh network optimization. + * Provides packet inspection and traffic shaping to help reduce channel utilization */ message TrafficManagementConfig { /* @@ -351,7 +351,8 @@ message ModuleConfig { uint32 rate_limit_max_packets = 10; /* - * Enable dropping of unknown/undecryptable packets from repeat offenders + * Enable dropping of unknown/undecryptable packets per rate_limit_window_secs + */ bool drop_unknown_enabled = 11; @@ -361,12 +362,12 @@ message ModuleConfig { uint32 unknown_packet_threshold = 12; /* - * Set hop_limit to 0 for locally-originated telemetry broadcasts + * Set hop_limit to 0 for telemetry broadcasts */ bool local_only_telemetry = 13; /* - * Set hop_limit to 0 for locally-originated position broadcasts + * Set hop_limit to 0 for position broadcasts */ bool local_only_position = 14; From 693aaa395b1bae4fa8423d8f9278c96c8b31d64c Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Tue, 20 Jan 2026 23:48:48 -0800 Subject: [PATCH 207/253] Update zero_hop_telemetry / zero_hop_position --- meshtastic/module_config.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index be56f42..2a593e4 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -362,14 +362,14 @@ message ModuleConfig { uint32 unknown_packet_threshold = 12; /* - * Set hop_limit to 0 for telemetry broadcasts + * Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected) */ - bool local_only_telemetry = 13; + bool zero_hop_telemetry = 13; /* - * Set hop_limit to 0 for position broadcasts + * Set hop_limit to 0 for relayed position broadcasts (own packets unaffected) */ - bool local_only_position = 14; + bool zero_hop_position = 14; /* * Preserve hop_limit for router-to-router traffic From 7a1b5b683d291c950f077e67182ac12c61ffe747 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Wed, 21 Jan 2026 19:45:11 -0800 Subject: [PATCH 208/253] Hopefully last name change --- meshtastic/module_config.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 2a593e4..a7cd4e1 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -364,12 +364,12 @@ message ModuleConfig { /* * Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected) */ - bool zero_hop_telemetry = 13; + bool exhaust_hop_telemetry = 13; /* * Set hop_limit to 0 for relayed position broadcasts (own packets unaffected) */ - bool zero_hop_position = 14; + bool exhaust_hop_position = 14; /* * Preserve hop_limit for router-to-router traffic From 8b0cdd20f35c6e6367ed68b05362164d7879f867 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Thu, 22 Jan 2026 22:44:47 -0800 Subject: [PATCH 209/253] Fixing naming for traffic_management.nodeinfo_direct_response_min_hops to traffic_management.nodeinfo_direct_response_max_hops --- meshtastic/module_config.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index a7cd4e1..292f01e 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -333,7 +333,7 @@ message ModuleConfig { /* * Minimum hop distance from requestor before responding to NodeInfo requests */ - uint32 nodeinfo_direct_response_min_hops = 7; + uint32 nodeinfo_direct_response_max_hops = 7; /* * Enable per-node rate limiting to throttle chatty nodes From 780863b1ed78c8c70c281840429d5b91e6a00084 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Sat, 31 Jan 2026 09:14:13 -0800 Subject: [PATCH 210/253] Removed dry_run before potential release. There was no easy way to get these metrics. --- meshtastic/module_config.proto | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 292f01e..9405099 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -305,76 +305,71 @@ message ModuleConfig { */ bool enabled = 1; - /* - * Dry-run mode: log actions but don't actually drop or modify packets - */ - bool dry_run = 2; - /* * Enable position deduplication to drop redundant position broadcasts */ - bool position_dedup_enabled = 3; + bool position_dedup_enabled = 2; /* * Number of bits of precision for position deduplication (0-32) */ - uint32 position_precision_bits = 4; + uint32 position_precision_bits = 3; /* * Minimum interval in seconds between position updates from the same node */ - uint32 position_min_interval_secs = 5; + uint32 position_min_interval_secs = 4; /* * Enable direct response to NodeInfo requests from local cache */ - bool nodeinfo_direct_response = 6; + bool nodeinfo_direct_response = 5; /* * Minimum hop distance from requestor before responding to NodeInfo requests */ - uint32 nodeinfo_direct_response_max_hops = 7; + uint32 nodeinfo_direct_response_max_hops = 6; /* * Enable per-node rate limiting to throttle chatty nodes */ - bool rate_limit_enabled = 8; + bool rate_limit_enabled = 7; /* * Time window in seconds for rate limiting calculations */ - uint32 rate_limit_window_secs = 9; + uint32 rate_limit_window_secs = 8; /* * Maximum packets allowed per node within the rate limit window */ - uint32 rate_limit_max_packets = 10; + uint32 rate_limit_max_packets = 9; /* * Enable dropping of unknown/undecryptable packets per rate_limit_window_secs */ - bool drop_unknown_enabled = 11; + bool drop_unknown_enabled = 10; /* * Number of unknown packets before dropping from a node */ - uint32 unknown_packet_threshold = 12; + uint32 unknown_packet_threshold = 11; /* * Set hop_limit to 0 for relayed telemetry broadcasts (own packets unaffected) */ - bool exhaust_hop_telemetry = 13; + bool exhaust_hop_telemetry = 12; /* * Set hop_limit to 0 for relayed position broadcasts (own packets unaffected) */ - bool exhaust_hop_position = 14; + bool exhaust_hop_position = 13; /* * Preserve hop_limit for router-to-router traffic */ - bool router_preserve_hops = 15; + bool router_preserve_hops = 14; } /* From 55a3604fac23ebed8312f6f63fcf3e10639d41b8 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Sat, 31 Jan 2026 09:14:43 -0800 Subject: [PATCH 211/253] Same here --- meshtastic/telemetry.proto | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 5dd23c1..bdf505f 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -484,15 +484,10 @@ message TrafficManagementStats { */ uint32 hop_exhausted_packets = 6; - /* - * Number of packets that would have been dropped in dry-run mode - */ - uint32 dry_run_would_drop = 7; - /* * Number of times router hop preservation was applied */ - uint32 router_hops_preserved = 8; + uint32 router_hops_preserved = 7; } /* From 2fe13dbe06771b4449c3bcd13f6120faf78c8b7e Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Sat, 31 Jan 2026 09:22:19 -0800 Subject: [PATCH 212/253] Fixed misplaced comment after merge --- meshtastic/admin.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 643e418..ed373a5 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -154,7 +154,7 @@ message AdminMessage { PAXCOUNTER_CONFIG = 12; /* - * Traffic Management module config + * TODO: REPLACE */ STATUSMESSAGE_CONFIG = 13; From 518f8e6fb334804b9619382e3a0dd191cece538d Mon Sep 17 00:00:00 2001 From: Dan Ditomaso Date: Sun, 1 Feb 2026 09:57:29 -0500 Subject: [PATCH 213/253] Update .github/workflows/publish.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2787fc2..540e118 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -69,7 +69,7 @@ jobs: - name: Set package versions run: | - set -euxo pipefail + set -euo pipefail VERSION="${{ steps.version.outputs.VERSION }}" for f in packages/ts/deno.json packages/ts/package.json; do test -f "$f" || { echo "Missing $f" >&2; exit 1; } From 491783b16491fc3b3ae698c43173cee6fb010e1d Mon Sep 17 00:00:00 2001 From: Dan Ditomaso Date: Sun, 1 Feb 2026 09:58:03 -0500 Subject: [PATCH 214/253] Update .github/workflows/publish.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/publish.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 540e118..6c61aed 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -58,8 +58,22 @@ jobs: run: buf generate - name: Move generated files to lib root - run: mv packages/ts/lib/meshtastic/*_pb.ts packages/ts/lib/ + run: | + set -euo pipefail + src_dir="packages/ts/lib/meshtastic" + dest_dir="packages/ts/lib" + if [ ! -d "$src_dir" ]; then + echo "Expected source directory '$src_dir' does not exist. 'buf generate' may have failed or changed its output paths." >&2 + exit 1 + fi + + if ! compgen -G "$src_dir"/*_pb.ts > /dev/null; then + echo "No '*_pb.ts' files found in '$src_dir'. 'buf generate' may have produced no TypeScript files or changed their naming." >&2 + exit 1 + fi + + mv "$src_dir"/*_pb.ts "$dest_dir"/ - name: Show generated files run: | echo "=== packages/ts contents ===" From d8a9f035e5d421f5cd1157372abff094a6bb2f94 Mon Sep 17 00:00:00 2001 From: Tomas Kuchta Date: Wed, 4 Feb 2026 14:58:28 +0100 Subject: [PATCH 215/253] Add SHT21 sensor to TelemetrySensorType --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 8b70ade..5c377de 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -800,6 +800,11 @@ enum TelemetrySensorType { * BH1750 light sensor */ BH1750 = 45; + + /* + * STH21 Temperature and R. Humidity sensor + */ + SHT21 = 46; } /* From 862f87835e60974d3c05d45e210a3b0c5034b2e1 Mon Sep 17 00:00:00 2001 From: yarbschris <123770805+yarbschris@users.noreply.github.com> Date: Thu, 5 Feb 2026 15:55:35 -0600 Subject: [PATCH 216/253] Fix formatting --- meshtastic/telemetry.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 21ea1a0..71cf545 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -802,8 +802,8 @@ enum TelemetrySensorType { BH1750 = 45; /* - * HDC1080 Temperature and Humidity Sensor - */ + * HDC1080 Temperature and Humidity Sensor + */ HDC1080 = 46; } From 9f6cf6dcc1221641e359771d27b3b0d98ca0af52 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 6 Feb 2026 06:45:49 -0600 Subject: [PATCH 217/253] Bubbles pref --- meshtastic/config.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index 649495e..f1cdc4f 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -783,6 +783,11 @@ message Config { * If true, node names will show in long format */ bool use_long_node_name = 13; + + /* + * If true, the device will display message bubbles on screen. + */ + bool enable_message_bubbles = 14; } /* From 8316651be140af8f1ba931e9fe19d8317bc65229 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Fri, 6 Feb 2026 08:51:34 -0600 Subject: [PATCH 218/253] Fmt --- meshtastic/telemetry.proto | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 8b70ade..113b3ef 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -439,9 +439,9 @@ message LocalStats { */ uint32 heap_free_bytes = 13; - /* - * Number of packets that were dropped because the transmit queue was full. - */ + /* + * Number of packets that were dropped because the transmit queue was full. + */ uint32 num_tx_dropped = 14; /* From 2062d43158002926d6d9631317218a57923b64c6 Mon Sep 17 00:00:00 2001 From: Dan D Date: Sat, 7 Feb 2026 14:22:55 -0500 Subject: [PATCH 219/253] Fix JSR publish by adding .ts import extensions to protobuf codegen The bufbuild/es plugin generates imports without file extensions, which fails JSR's Deno-style module resolution (TS2307). Adding import_extension=.ts ensures all generated _pb.ts files use explicit .ts extensions in their relative imports. --- buf.gen.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buf.gen.yaml b/buf.gen.yaml index daec499..652f41a 100644 --- a/buf.gen.yaml +++ b/buf.gen.yaml @@ -2,4 +2,4 @@ version: v2 plugins: - remote: buf.build/bufbuild/es:v2.1.0 out: packages/ts/lib - opt: target=ts + opt: target=ts,import_extension=.ts From 5dd27945d2f281424801fb457172e8bfce87939e Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 9 Feb 2026 13:38:59 -0600 Subject: [PATCH 220/253] Fix comment formatting for SHT21 sensor --- meshtastic/telemetry.proto | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 5c377de..b7286ea 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -802,8 +802,8 @@ enum TelemetrySensorType { BH1750 = 45; /* - * STH21 Temperature and R. Humidity sensor - */ + * STH21 Temperature and R. Humidity sensor + */ SHT21 = 46; } From 53d91d47ef6eb736ab970d46d0736f4e60b70b08 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 9 Feb 2026 13:42:13 -0600 Subject: [PATCH 221/253] Add STC31 CO2 sensor to TelemetrySensorType enum --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index af04bdd..498cecd 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -810,6 +810,11 @@ enum TelemetrySensorType { * STH21 Temperature and R. Humidity sensor */ SHT21 = 47; + + /* + * Sensirion STC31 CO2 sensor + */ + STC31 = 48; } /* From 4eca1c78a8f863a5fdd2a26377fcab6a345c9a43 Mon Sep 17 00:00:00 2001 From: Clive Blackledge Date: Tue, 10 Feb 2026 11:49:22 -0800 Subject: [PATCH 222/253] buf format updates. --- meshtastic/module_config.proto | 1 - meshtastic/telemetry.proto | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index 9405099..a8a4307 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -347,7 +347,6 @@ message ModuleConfig { /* * Enable dropping of unknown/undecryptable packets per rate_limit_window_secs - */ bool drop_unknown_enabled = 10; diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index bdf505f..fe4cc44 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -439,9 +439,9 @@ message LocalStats { */ uint32 heap_free_bytes = 13; - /* - * Number of packets that were dropped because the transmit queue was full. - */ + /* + * Number of packets that were dropped because the transmit queue was full. + */ uint32 num_tx_dropped = 14; /* From 44298d374fd83cfbc36fdb76c6f966e980cadd93 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Thu, 12 Feb 2026 19:09:02 +0100 Subject: [PATCH 223/253] Add SCD30 CO2 sensor (#861) --- meshtastic/admin.proto | 37 +++++++++++++++++++++++++++++++++++++ meshtastic/telemetry.proto | 8 +++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index ed373a5..0fbfbe3 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -656,6 +656,11 @@ message SensorConfig { * SEN5X PM Sensor configuration */ SEN5X_config sen5x_config = 2; + + /* + * SCD30 CO2 Sensor configuration + */ + SCD30_config scd30_config = 3; } message SCD4X_config { @@ -706,3 +711,35 @@ message SEN5X_config { */ optional bool set_one_shot_mode = 2; } + +message SCD30_config { + /* + * Set Automatic self-calibration enabled + */ + optional bool set_asc = 1; + + /* + * Recalibration target CO2 concentration in ppm (FRC or ASC) + */ + optional uint32 set_target_co2_conc = 2; + + /* + * Reference temperature in degC + */ + optional float set_temperature = 3; + + /* + * Altitude of sensor in meters above sea level. 0 - 3000m (overrides ambient pressure) + */ + optional uint32 set_altitude = 4; + + /* + * Power mode for sensor (true for low power, false for normal) + */ + optional uint32 set_measurement_interval = 5; + + /* + * Perform a factory reset of the sensor + */ + optional bool soft_reset = 6; +} diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index b5e418e..8889718 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -836,6 +836,7 @@ enum TelemetrySensorType { * SEN5X PM SENSORS */ SEN5X = 43; + /* * TSL2561 light sensor */ @@ -845,7 +846,7 @@ enum TelemetrySensorType { * BH1750 light sensor */ BH1750 = 45; - + /* * HDC1080 Temperature and Humidity Sensor */ @@ -860,6 +861,11 @@ enum TelemetrySensorType { * Sensirion STC31 CO2 sensor */ STC31 = 48; + + /* + * SCD30 CO2, humidity, temperature sensor + */ + SCD30 = 49; } /* From fe66d9f525fce7cc8a173a013fa646715fc861bb Mon Sep 17 00:00:00 2001 From: Austin Lane Date: Fri, 20 Feb 2026 19:35:11 -0500 Subject: [PATCH 224/253] Add LilyGo T-Beam BPF The first/only 144-148Mhz device (for hams) --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index aace7d4..190aa63 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -855,6 +855,11 @@ enum HardwareModel { */ T5_S3_EPAPER_PRO = 123; + /* + * LilyGo T-Beam BPF (144-148Mhz) + */ + TBEAM_BPF = 124; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 93bee530c302594883dc28badad4c564b7274837 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Sat, 21 Feb 2026 08:36:45 +0100 Subject: [PATCH 225/253] add T-mini epaper s3 kit HW id (#863) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Thomas Göttgens --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 190aa63..d7f6647 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -860,6 +860,11 @@ enum HardwareModel { */ TBEAM_BPF = 124; + /* + * LilyGo T-Mini E-paper S3 Kit + */ + MINI_EPAPER_S3 = 125; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits. From 03b5089b406aee6afb9be7514dcbfaf291e8fb5f Mon Sep 17 00:00:00 2001 From: niccellular <79813408+niccellular@users.noreply.github.com> Date: Sun, 22 Feb 2026 18:35:43 -0500 Subject: [PATCH 226/253] enhancement: Add TAKConfig message for on-device TAK team/role configuration Add TAKConfig to ModuleConfig with Team and MemberRole fields, allowing TAK_TRACKER devices to configure ATAK group settings instead of using hardcoded defaults. - module_config.proto: TAKConfig message (team, role) at oneof field 16 - localonly.proto: tak field at position 17 in LocalModuleConfig - admin.proto: TAK_CONFIG = 15 in ModuleConfigType enum Co-Authored-By: Claude Opus 4.6 --- meshtastic/admin.proto | 5 +++++ meshtastic/localonly.proto | 5 +++++ meshtastic/module_config.proto | 23 +++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 0fbfbe3..5ecf310 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -162,6 +162,11 @@ message AdminMessage { * Traffic management module config */ TRAFFICMANAGEMENT_CONFIG = 14; + + /* + * TAK module config + */ + TAK_CONFIG = 15; } enum BackupLocation { diff --git a/meshtastic/localonly.proto b/meshtastic/localonly.proto index 50b74f7..2a6c7ca 100644 --- a/meshtastic/localonly.proto +++ b/meshtastic/localonly.proto @@ -141,6 +141,11 @@ message LocalModuleConfig { */ ModuleConfig.TrafficManagementConfig traffic_management = 16; + /* + * TAK Config + */ + ModuleConfig.TAKConfig tak = 17; + /* * A version integer used to invalidate old save files when we make * incompatible changes This integer is set at build time and is private to diff --git a/meshtastic/module_config.proto b/meshtastic/module_config.proto index a8a4307..10753c6 100644 --- a/meshtastic/module_config.proto +++ b/meshtastic/module_config.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package meshtastic; +import "meshtastic/atak.proto"; + option csharp_namespace = "Meshtastic.Protobufs"; option go_package = "github.com/meshtastic/go/generated"; option java_outer_classname = "ModuleConfigProtos"; @@ -933,6 +935,27 @@ message ModuleConfig { * Traffic management module config for mesh network optimization */ TrafficManagementConfig traffic_management = 15; + + /* + * TAK team/role configuration for TAK_TRACKER + */ + TAKConfig tak = 16; + } + + /* + * TAK team/role configuration + */ + message TAKConfig { + /* + * Team color. + * Default Unspecifed_Color -> firmware uses Cyan + */ + Team team = 1; + /* + * Member role. + * Default Unspecifed -> firmware uses TeamMember + */ + MemberRole role = 2; } } From a229208f29a59cf1d8cfa24cbb7567a08f2d1771 Mon Sep 17 00:00:00 2001 From: Quency-D <55523105+Quency-D@users.noreply.github.com> Date: Tue, 3 Mar 2026 17:30:14 +0800 Subject: [PATCH 227/253] Add the LORA FEM control variable. (#869) --- meshtastic/config.proto | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/meshtastic/config.proto b/meshtastic/config.proto index f1cdc4f..33eaa58 100644 --- a/meshtastic/config.proto +++ b/meshtastic/config.proto @@ -992,6 +992,23 @@ message Config { LONG_TURBO = 9; } + enum FEM_LNA_Mode { + /* + * FEM_LNA is present but disabled + */ + DISABLED = 0; + + /* + * FEM_LNA is present and enabled + */ + ENABLED = 1; + + /* + * FEM_LNA is not present on the device + */ + NOT_PRESENT = 2; + } + /* * When enabled, the `modem_preset` fields will be adhered to, else the `bandwidth`/`spread_factor`/`coding_rate` * will be taked from their respective manually defined fields @@ -1112,6 +1129,10 @@ message Config { * Sets the ok_to_mqtt bit on outgoing packets */ bool config_ok_to_mqtt = 105; + /* + * Set where LORA FEM is enabled, disabled, or not present + */ + FEM_LNA_Mode fem_lna_mode = 106; } message BluetoothConfig { From dee56bac97d65a5941f5b45df09e0eb1bafd2bd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Thu, 5 Mar 2026 11:56:15 +0100 Subject: [PATCH 228/253] Add LORAWAN_BRIDGE enum value to portnums.proto --- meshtastic/portnums.proto | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 918b063..07c8051 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -227,6 +227,12 @@ enum PortNum { */ POWERSTRESS_APP = 74; + /* + * LoraWAN Payload Transport + * ENCODING: compact binary LoRaWAN uplink (10-byte RF metadata + PHY payload) - see LoRaWANBridgeModule + */ + LORAWAN_BRIDGE = 75; + /* * Reticulum Network Stack Tunnel App * ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface From 109ea16d17545988cd19e692538cab198f9e5dfa Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Sat, 7 Mar 2026 17:08:37 +0100 Subject: [PATCH 229/253] add LilyGo T-Display S3 Pro --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index d7f6647..4d17449 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -865,6 +865,11 @@ enum HardwareModel { */ MINI_EPAPER_S3 = 125; + /* + * LilyGo T-Display S3 Pro LR1121 + */ + TDISPLAY_S3_PRO = 126; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 0cc9cb224e38523d794fdc5c6bb5c86f49720057 Mon Sep 17 00:00:00 2001 From: Manuel <71137295+mverch67@users.noreply.github.com> Date: Sat, 7 Mar 2026 17:12:43 +0100 Subject: [PATCH 230/253] fix formatting --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 4d17449..44888e9 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -868,7 +868,7 @@ enum HardwareModel { /* * LilyGo T-Display S3 Pro LR1121 */ - TDISPLAY_S3_PRO = 126; + TDISPLAY_S3_PRO = 126; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From bfbd52b9fcc4f857c61a4220b7385324f114adaf Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sat, 7 Mar 2026 22:28:17 +0100 Subject: [PATCH 231/253] Add SHTXX TelemetrySensorType --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 8889718..2aef8ed 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -866,6 +866,11 @@ enum TelemetrySensorType { * SCD30 CO2, humidity, temperature sensor */ SCD30 = 49; + + /* + * SHT family of sensors for temperature and humidity + */ + SHTXX = 50; } /* From a4234ead1d75b5e6ff58d517113cd58ef9451457 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sun, 8 Mar 2026 11:23:46 +0100 Subject: [PATCH 232/253] Add TODO - REMOVE on SHT31, SHT4X, SHT21 and SHTC3 --- meshtastic/telemetry.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index 2aef8ed..bd27a7b 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -653,7 +653,7 @@ enum TelemetrySensorType { BMP280 = 6; /* - * High accuracy temperature and humidity + * TODO - REMOVE High accuracy temperature and humidity */ SHTC3 = 7; @@ -678,7 +678,7 @@ enum TelemetrySensorType { QMC5883L = 11; /* - * High accuracy temperature and humidity + * TODO - REMOVE High accuracy temperature and humidity */ SHT31 = 12; @@ -703,7 +703,7 @@ enum TelemetrySensorType { RCWL9620 = 16; /* - * Sensirion High accuracy temperature and humidity + * TODO - REMOVE Sensirion High accuracy temperature and humidity */ SHT4X = 17; @@ -853,7 +853,7 @@ enum TelemetrySensorType { HDC1080 = 46; /* - * STH21 Temperature and R. Humidity sensor + * TODO - REMOVE STH21 Temperature and R. Humidity sensor */ SHT21 = 47; From 29a82c7b63c7ffb8c2d8d52d4fa959b2b3ba815c Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Sun, 8 Mar 2026 12:37:24 +0100 Subject: [PATCH 233/253] Add admin command for SHT accuracy setting --- meshtastic/admin.proto | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/meshtastic/admin.proto b/meshtastic/admin.proto index 5ecf310..ac29cc8 100644 --- a/meshtastic/admin.proto +++ b/meshtastic/admin.proto @@ -666,6 +666,11 @@ message SensorConfig { * SCD30 CO2 Sensor configuration */ SCD30_config scd30_config = 3; + + /* + * SHTXX temperature and relative humidity sensor configuration + */ + SHTXX_config shtxx_config = 4; } message SCD4X_config { @@ -748,3 +753,10 @@ message SCD30_config { */ optional bool soft_reset = 6; } + +message SHTXX_config { + /* + * Accuracy mode (0 = low, 1 = medium, 2 = high) + */ + optional uint32 set_accuracy = 1; +} From 313b9ee168bcfb08cc542b4de730e3ddefbfac16 Mon Sep 17 00:00:00 2001 From: DasAuryn <46376486+DasAuryn@users.noreply.github.com> Date: Tue, 17 Mar 2026 09:08:35 +0100 Subject: [PATCH 234/253] Add GroupAlarm app portnum --- meshtastic/portnums.proto | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 07c8051..f4d22e2 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -246,6 +246,13 @@ enum PortNum { */ CAYENNE_APP = 77; + /* + * GroupAlarm integration + * Used for transporting GroupAlarm-related messages between Meshtastic nodes + * and companion applications/services. + */ + GROUPALARM_APP = 112; + /* * Private applications should use portnums >= 256. * To simplify initial development and testing you can use "PRIVATE_APP" From 8436e98fcfa9201548609a7d8f8b8fef170d9d67 Mon Sep 17 00:00:00 2001 From: Quency-D Date: Thu, 19 Mar 2026 16:51:46 +0800 Subject: [PATCH 235/253] add heltec-mesh-node-t096 board --- meshtastic/mesh.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 44888e9..42ac642 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -870,6 +870,11 @@ enum HardwareModel { */ TDISPLAY_S3_PRO = 126; + /* + * Heltec Mesh Node T096 board features an nRF52840 CPU and a TFT screen. + */ + HELTEC_MESH_NODE_T096 = 126; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 45a2d2dc8b7c8ffd45e5f2783d67e22ab5e17fbc Mon Sep 17 00:00:00 2001 From: Quency-D Date: Thu, 19 Mar 2026 17:27:08 +0800 Subject: [PATCH 236/253] Correct the enumeration value. --- meshtastic/mesh.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 42ac642..7206f4a 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -873,7 +873,7 @@ enum HardwareModel { /* * Heltec Mesh Node T096 board features an nRF52840 CPU and a TFT screen. */ - HELTEC_MESH_NODE_T096 = 126; + HELTEC_MESH_NODE_T096 = 127; /* * ------------------------------------------------------------------------------------------------------------------------------------------ From 4c3fe0cf087e31022dd90011906e7698473a97b2 Mon Sep 17 00:00:00 2001 From: Dan Ditomaso Date: Fri, 20 Mar 2026 22:30:47 -0400 Subject: [PATCH 237/253] Update prost dependencies to 0.14.3 to address known CVE Bump prost and prost-types from 0.13.3 to 0.14.3 along with all transitive dependency updates to resolve a known security vulnerability in the Rust protobuf stack. --- packages/rust/Cargo.lock | 46 ++++++++++++++++++++-------------------- packages/rust/Cargo.toml | 4 ++-- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/rust/Cargo.lock b/packages/rust/Cargo.lock index 6b365f0..0b80556 100644 --- a/packages/rust/Cargo.lock +++ b/packages/rust/Cargo.lock @@ -1,30 +1,30 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "anyhow" -version = "1.0.89" +version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" +checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] name = "bytes" -version = "1.7.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" +checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "itertools" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" dependencies = [ "either", ] @@ -39,18 +39,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" dependencies = [ "unicode-ident", ] [[package]] name = "prost" -version = "0.13.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568" dependencies = [ "bytes", "prost-derive", @@ -58,9 +58,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b" dependencies = [ "anyhow", "itertools", @@ -71,27 +71,27 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.3" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7" dependencies = [ "prost", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" dependencies = [ "proc-macro2", ] [[package]] name = "syn" -version = "2.0.79" +version = "2.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" dependencies = [ "proc-macro2", "quote", @@ -100,6 +100,6 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.13" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" diff --git a/packages/rust/Cargo.toml b/packages/rust/Cargo.toml index ce52443..f8dda5d 100644 --- a/packages/rust/Cargo.toml +++ b/packages/rust/Cargo.toml @@ -11,5 +11,5 @@ include = [ ] [dependencies] -prost = "0.13.3" -prost-types = "0.13.3" +prost = "0.14.3" +prost-types = "0.14.3" From 1cd2e56ca2a021b4227324fc706f58e3eb78ebb5 Mon Sep 17 00:00:00 2001 From: SeeedZhangyh Date: Fri, 3 Apr 2026 14:57:52 +0800 Subject: [PATCH 238/253] Add Hardware Model for T1000-E-Pro --- meshtastic/mesh.proto | 3 +++ 1 file changed, 3 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 7206f4a..b2c6fa4 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -875,6 +875,9 @@ enum HardwareModel { */ HELTEC_MESH_NODE_T096 = 127; + /* Seeed studio T1000-E Pro tracker card. NRF52840 w/ LR2021 radio, GPS, button, buzzer, and sensors. */ + TRACKER_T1000_E_PRO = 128; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 dd951d77967eac696dc3621562a0fbc6bc6038d3 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Mon, 6 Apr 2026 20:32:31 -0500 Subject: [PATCH 239/253] Add ATAK Plugin V2 protobufs and expand CoT enums --- meshtastic/atak.options | 23 +- meshtastic/atak.proto | 444 ++++++++++++++++++++++++++++++++++++++ meshtastic/portnums.proto | 7 + 3 files changed, 473 insertions(+), 1 deletion(-) diff --git a/meshtastic/atak.options b/meshtastic/atak.options index cec1ca3..4b1095e 100644 --- a/meshtastic/atak.options +++ b/meshtastic/atak.options @@ -5,4 +5,25 @@ *GeoChat.message max_size:200 *GeoChat.to max_size:120 *GeoChat.to_callsign max_size:120 -*TAKPacket.detail max_size:220 \ No newline at end of file +*TAKPacket.detail max_size:220 +*TAKPacketV2.cot_type_str max_size:32 +*TAKPacketV2.callsign max_size:120 +*TAKPacketV2.uid max_size:48 +*TAKPacketV2.device_callsign max_size:120 +*TAKPacketV2.tak_version max_size:64 +*TAKPacketV2.tak_device max_size:32 +*TAKPacketV2.tak_platform max_size:32 +*TAKPacketV2.tak_os max_size:16 +*TAKPacketV2.endpoint max_size:32 +*TAKPacketV2.phone max_size:20 +*TAKPacketV2.raw_detail max_size:220 +*TAKPacketV2.stale_seconds int_size:16 +*TAKPacketV2.battery int_size:8 +*TAKPacketV2.course int_size:16 +*AircraftTrack.icao max_size:8 +*AircraftTrack.registration max_size:16 +*AircraftTrack.flight max_size:16 +*AircraftTrack.aircraft_type max_size:8 +*AircraftTrack.squawk int_size:16 +*AircraftTrack.category max_size:4 +*AircraftTrack.cot_host_id max_size:64 \ No newline at end of file diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 790c69b..60fb616 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -262,3 +262,447 @@ message PLI { */ uint32 course = 5; } + +/* + * CoT how field values. + * Represents how the coordinates were generated. + */ +enum CotHow { + /* + * Unspecified + */ + CotHow_Unspecified = 0; + /* + * Human entered + */ + CotHow_h_e = 1; + /* + * Machine generated + */ + CotHow_m_g = 2; + /* + * Human GPS/INS derived + */ + CotHow_h_g_i_g_o = 3; + /* + * Machine relayed (imported from another system/gateway) + */ + CotHow_m_r = 4; + /* + * Machine fused (corroborated from multiple sources) + */ + CotHow_m_f = 5; + /* + * Machine predicted + */ + CotHow_m_p = 6; + /* + * Machine simulated + */ + CotHow_m_s = 7; +} + +/* + * Well-known CoT event types. + * When the type is known, use the enum value for efficient encoding. + * For unknown types, set cot_type_id to CotType_Other and populate cot_type_str. + */ +enum CotType { + /* + * Unknown or unmapped type, use cot_type_str + */ + CotType_Other = 0; + /* + * a-f-G-U-C: Friendly ground unit combat + */ + CotType_a_f_G_U_C = 1; + /* + * a-f-G-U-C-I: Friendly ground unit combat infantry + */ + CotType_a_f_G_U_C_I = 2; + /* + * a-n-A-C-F: Neutral aircraft civilian fixed-wing + */ + CotType_a_n_A_C_F = 3; + /* + * a-n-A-C-H: Neutral aircraft civilian helicopter + */ + CotType_a_n_A_C_H = 4; + /* + * a-n-A-C: Neutral aircraft civilian + */ + CotType_a_n_A_C = 5; + /* + * a-f-A-M-H: Friendly aircraft military helicopter + */ + CotType_a_f_A_M_H = 6; + /* + * a-f-A-M: Friendly aircraft military + */ + CotType_a_f_A_M = 7; + /* + * a-f-A-M-F-F: Friendly aircraft military fixed-wing fighter + */ + CotType_a_f_A_M_F_F = 8; + /* + * a-f-A-M-H-A: Friendly aircraft military helicopter attack + */ + CotType_a_f_A_M_H_A = 9; + /* + * a-f-A-M-H-U-M: Friendly aircraft military helicopter utility medium + */ + CotType_a_f_A_M_H_U_M = 10; + /* + * a-h-A-M-F-F: Hostile aircraft military fixed-wing fighter + */ + CotType_a_h_A_M_F_F = 11; + /* + * a-h-A-M-H-A: Hostile aircraft military helicopter attack + */ + CotType_a_h_A_M_H_A = 12; + /* + * a-u-A-C: Unknown aircraft civilian + */ + CotType_a_u_A_C = 13; + /* + * t-x-d-d: Tasking delete/disconnect + */ + CotType_t_x_d_d = 14; + /* + * a-f-G-E-S-E: Friendly ground equipment sensor + */ + CotType_a_f_G_E_S_E = 15; + /* + * a-f-G-E-V-C: Friendly ground equipment vehicle + */ + CotType_a_f_G_E_V_C = 16; + /* + * a-f-S: Friendly sea + */ + CotType_a_f_S = 17; + /* + * a-f-A-M-F: Friendly aircraft military fixed-wing + */ + CotType_a_f_A_M_F = 18; + /* + * a-f-A-M-F-C-H: Friendly aircraft military fixed-wing cargo heavy + */ + CotType_a_f_A_M_F_C_H = 19; + /* + * a-f-A-M-F-U-L: Friendly aircraft military fixed-wing utility light + */ + CotType_a_f_A_M_F_U_L = 20; + /* + * a-f-A-M-F-L: Friendly aircraft military fixed-wing liaison + */ + CotType_a_f_A_M_F_L = 21; + /* + * a-f-A-M-F-P: Friendly aircraft military fixed-wing patrol + */ + CotType_a_f_A_M_F_P = 22; + /* + * a-f-A-C-H: Friendly aircraft civilian helicopter + */ + CotType_a_f_A_C_H = 23; + /* + * a-n-A-M-F-Q: Neutral aircraft military fixed-wing drone + */ + CotType_a_n_A_M_F_Q = 24; + + // --- Chat / messaging --- + + /* + * b-t-f: GeoChat message + */ + CotType_b_t_f = 25; + + // --- CASEVAC / MEDEVAC --- + + /* + * b-r-f-h-c: CASEVAC/MEDEVAC report + */ + CotType_b_r_f_h_c = 26; + + // --- Alerts --- + + /* + * b-a-o-pan: Ring the bell / alert all + */ + CotType_b_a_o_pan = 27; + /* + * b-a-o-opn: Troops in contact + */ + CotType_b_a_o_opn = 28; + /* + * b-a-o-can: Cancel alert + */ + CotType_b_a_o_can = 29; + /* + * b-a-o-tbl: 911 alert + */ + CotType_b_a_o_tbl = 30; + /* + * b-a-g: Geofence breach alert + */ + CotType_b_a_g = 31; + + // --- Generic ground atoms (simplified affiliation types) --- + + /* + * a-f-G: Friendly ground (generic) + */ + CotType_a_f_G = 32; + /* + * a-f-G-U: Friendly ground unit (generic) + */ + CotType_a_f_G_U = 33; + /* + * a-h-G: Hostile ground (generic) + */ + CotType_a_h_G = 34; + /* + * a-u-G: Unknown ground (generic) + */ + CotType_a_u_G = 35; + /* + * a-n-G: Neutral ground (generic) + */ + CotType_a_n_G = 36; + + // --- Routes and waypoints --- + + /* + * b-m-r: Route + */ + CotType_b_m_r = 37; + /* + * b-m-p-w: Route waypoint + */ + CotType_b_m_p_w = 38; + /* + * b-m-p-s-p-i: Self-position marker + */ + CotType_b_m_p_s_p_i = 39; + + // --- Drawing / tactical graphics --- + + /* + * u-d-f: Freeform shape (line/polygon) + */ + CotType_u_d_f = 40; + /* + * u-d-r: Rectangle + */ + CotType_u_d_r = 41; + /* + * u-d-c-c: Circle + */ + CotType_u_d_c_c = 42; + /* + * u-rb-a: Range/bearing line + */ + CotType_u_rb_a = 43; + + // --- Additional hostile/unknown aircraft --- + + /* + * a-h-A: Hostile aircraft (generic) + */ + CotType_a_h_A = 44; + /* + * a-u-A: Unknown aircraft (generic) + */ + CotType_a_u_A = 45; + /* + * a-f-A-M-H-Q: Friendly aircraft military helicopter observation + */ + CotType_a_f_A_M_H_Q = 46; +} + +/* + * Geopoint and altitude source + */ +enum GeoPointSource { + /* + * Unspecified + */ + GeoPointSource_Unspecified = 0; + /* + * GPS derived + */ + GeoPointSource_GPS = 1; + /* + * User entered + */ + GeoPointSource_USER = 2; + /* + * Network/external + */ + GeoPointSource_NETWORK = 3; +} + +/* + * Aircraft track information from ADS-B or military air tracking. + * Covers the majority of observed real-world CoT traffic. + */ +message AircraftTrack { + /* + * ICAO hex identifier (e.g. "AD237C") + */ + string icao = 1; + /* + * Aircraft registration (e.g. "N946AK") + */ + string registration = 2; + /* + * Flight number/callsign (e.g. "ASA864") + */ + string flight = 3; + /* + * ICAO aircraft type designator (e.g. "B39M") + */ + string aircraft_type = 4; + /* + * Transponder squawk code (0-7777 octal) + */ + uint32 squawk = 5; + /* + * ADS-B emitter category (e.g. "A3") + */ + string category = 6; + /* + * Received signal strength * 10 (e.g. -194 for -19.4 dBm) + */ + sint32 rssi_x10 = 7; + /* + * Whether receiver has GPS fix + */ + bool gps = 8; + /* + * CoT host ID for source attribution + */ + string cot_host_id = 9; +} + +/* + * ATAK v2 packet with expanded CoT field support and zstd dictionary compression. + * Sent on ATAK_PLUGIN_V2 port. The wire payload is: + * [1 byte flags][zstd-compressed TAKPacketV2 protobuf] + * Flags byte: bits 0-5 = dictionary ID, bits 6-7 = reserved. + */ +message TAKPacketV2 { + /* + * Well-known CoT event type enum. + * Use CotType_Other with cot_type_str for unknown types. + */ + CotType cot_type_id = 1; + /* + * How the coordinates were generated + */ + CotHow how = 2; + /* + * Callsign + */ + string callsign = 3; + /* + * Team color assignment + */ + Team team = 4; + /* + * Role of the group member + */ + MemberRole role = 5; + /* + * Latitude, multiply by 1e-7 to get degrees in floating point + */ + sfixed32 latitude_i = 6; + /* + * Longitude, multiply by 1e-7 to get degrees in floating point + */ + sfixed32 longitude_i = 7; + /* + * Altitude in meters (HAE) + */ + sint32 altitude = 8; + /* + * Speed in cm/s + */ + uint32 speed = 9; + /* + * Course in degrees * 100 (0-36000) + */ + uint32 course = 10; + /* + * Battery level 0-100 + */ + uint32 battery = 11; + /* + * Geopoint source + */ + GeoPointSource geo_src = 12; + /* + * Altitude source + */ + GeoPointSource alt_src = 13; + /* + * Device UID (UUID string or device ID like "ANDROID-xxxx") + */ + string uid = 14; + /* + * Device callsign + */ + string device_callsign = 15; + /* + * Stale time as seconds offset from event time + */ + uint32 stale_seconds = 16; + /* + * TAK client version string + */ + string tak_version = 17; + /* + * TAK device model + */ + string tak_device = 18; + /* + * TAK platform (ATAK-CIV, WebTAK, etc.) + */ + string tak_platform = 19; + /* + * TAK OS version + */ + string tak_os = 20; + /* + * Connection endpoint + */ + string endpoint = 21; + /* + * Phone number + */ + string phone = 22; + /* + * CoT event type string, only populated when cot_type_id is CotType_Other + */ + string cot_type_str = 23; + /* + * The payload of the packet + */ + oneof payload_variant { + /* + * Position report (true = PLI, no extra fields beyond the common ones above) + */ + bool pli = 30; + /* + * ATAK GeoChat message + */ + GeoChat chat = 31; + /* + * Aircraft track data (ADS-B, military air) + */ + AircraftTrack aircraft = 32; + /* + * Generic CoT detail XML for unmapped types + */ + bytes raw_detail = 33; + } +} diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index f4d22e2..6ed59bc 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -246,6 +246,13 @@ enum PortNum { */ CAYENNE_APP = 77; + /* + * ATAK Plugin V2 + * Portnum for payloads from the official Meshtastic ATAK plugin using + * TAKPacketV2 with zstd dictionary compression. +x */ + ATAK_PLUGIN_V2 = 78; + /* * GroupAlarm integration * Used for transporting GroupAlarm-related messages between Meshtastic nodes From 1e932be09ba766f64ad3d75e97d4eff3e5578a12 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 8 Apr 2026 07:36:27 -0500 Subject: [PATCH 240/253] Add additional CotType enums for aircraft, ground units, and other data messages --- meshtastic/atak.proto | 146 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 60fb616..2e6a24a 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -517,6 +517,152 @@ enum CotType { * a-f-A-M-H-Q: Friendly aircraft military helicopter observation */ CotType_a_f_A_M_H_Q = 46; + + // Friendly aircraft civilian + + /* + * a-f-A-C-F: Friendly aircraft civilian fixed-wing + */ + CotType_a_f_A_C_F = 47; + /* + * a-f-A-C: Friendly aircraft civilian (generic) + */ + CotType_a_f_A_C = 48; + /* + * a-f-A-C-L: Friendly aircraft civilian lighter-than-air + */ + CotType_a_f_A_C_L = 49; + /* + * a-f-A: Friendly aircraft (generic) + */ + CotType_a_f_A = 50; + + // Friendly aircraft military helicopter variants + + /* + * a-f-A-M-H-C: Friendly aircraft military helicopter cargo + */ + CotType_a_f_A_M_H_C = 51; + + // Neutral aircraft military + + /* + * a-n-A-M-F-F: Neutral aircraft military fixed-wing fighter + */ + CotType_a_n_A_M_F_F = 52; + + // Unknown aircraft civilian + + /* + * a-u-A-C-F: Unknown aircraft civilian fixed-wing + */ + CotType_a_u_A_C_F = 53; + + // Friendly ground unit subtypes + + /* + * a-f-G-U-C-F-T-A: Friendly ground unit combat forces theater aviation + */ + CotType_a_f_G_U_C_F_T_A = 54; + /* + * a-f-G-U-C-V-S: Friendly ground unit combat vehicle support + */ + CotType_a_f_G_U_C_V_S = 55; + /* + * a-f-G-U-C-R-X: Friendly ground unit combat reconnaissance exploitation + */ + CotType_a_f_G_U_C_R_X = 56; + /* + * a-f-G-U-C-I-Z: Friendly ground unit combat infantry mechanized + */ + CotType_a_f_G_U_C_I_Z = 57; + /* + * a-f-G-U-C-E-C-W: Friendly ground unit combat engineer construction wheeled + */ + CotType_a_f_G_U_C_E_C_W = 58; + /* + * a-f-G-U-C-I-L: Friendly ground unit combat infantry light + */ + CotType_a_f_G_U_C_I_L = 59; + /* + * a-f-G-U-C-R-O: Friendly ground unit combat reconnaissance other + */ + CotType_a_f_G_U_C_R_O = 60; + /* + * a-f-G-U-C-R-V: Friendly ground unit combat reconnaissance cavalry + */ + CotType_a_f_G_U_C_R_V = 61; + /* + * a-f-G-U-H: Friendly ground unit headquarters + */ + CotType_a_f_G_U_H = 62; + /* + * a-f-G-U-U-M-S-E: Friendly ground unit support medical surgical evacuation + */ + CotType_a_f_G_U_U_M_S_E = 63; + /* + * a-f-G-U-S-M-C: Friendly ground unit support maintenance collection + */ + CotType_a_f_G_U_S_M_C = 64; + + // Friendly ground equipment + + /* + * a-f-G-E-S: Friendly ground equipment sensor (generic) + */ + CotType_a_f_G_E_S = 65; + /* + * a-f-G-E: Friendly ground equipment (generic) + */ + CotType_a_f_G_E = 66; + /* + * a-f-G-E-V-C-U: Friendly ground equipment vehicle utility + */ + CotType_a_f_G_E_V_C_U = 67; + /* + * a-f-G-E-V-C-ps: Friendly ground equipment vehicle public safety + */ + CotType_a_f_G_E_V_C_ps = 68; + + // Unknown ground + + /* + * a-u-G-E-V: Unknown ground equipment vehicle + */ + CotType_a_u_G_E_V = 69; + + // Sea + + /* + * a-f-S-N-N-R: Friendly sea surface non-naval rescue + */ + CotType_a_f_S_N_N_R = 70; + + // Friendly force (non-domain-specific) + + /* + * a-f-F-B: Friendly force boundary + */ + CotType_a_f_F_B = 71; + + // Bits / data messages + + /* + * b-m-p-s-p-loc: Self-position location marker + */ + CotType_b_m_p_s_p_loc = 72; + /* + * b-i-v: Imagery/video + */ + CotType_b_i_v = 73; + /* + * b-f-t-r: File transfer request + */ + CotType_b_f_t_r = 74; + /* + * b-f-t-a: File transfer acknowledgment + */ + CotType_b_f_t_a = 75; } /* From 60842c17281d0ffe63e34762fe9cf5094a314562 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 8 Apr 2026 09:30:59 -0500 Subject: [PATCH 241/253] Busted --- meshtastic/portnums.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index 6ed59bc..b6c9776 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -250,7 +250,7 @@ enum PortNum { * ATAK Plugin V2 * Portnum for payloads from the official Meshtastic ATAK plugin using * TAKPacketV2 with zstd dictionary compression. -x */ + */ ATAK_PLUGIN_V2 = 78; /* From a4c649bd3e877dab9011d9e32dc778640ec22852 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Fri, 10 Apr 2026 13:26:49 +0200 Subject: [PATCH 242/253] Add DS248X bridge (#885) --- meshtastic/telemetry.proto | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index bd27a7b..e00345b 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -871,6 +871,11 @@ enum TelemetrySensorType { * SHT family of sensors for temperature and humidity */ SHTXX = 50; + + /* + * DS248X Bridge for one-wire temperature sensors + */ + DS248X = 51; } /* From 0e5eab17af5f1ba0ccfb92e180fdf880bac132fd Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Tue, 14 Apr 2026 05:33:08 -0500 Subject: [PATCH 243/253] Takv2 geometry and other structures (#891) --- meshtastic/atak.options | 83 +++- meshtastic/atak.proto | 901 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 981 insertions(+), 3 deletions(-) diff --git a/meshtastic/atak.options b/meshtastic/atak.options index 4b1095e..29ec3e1 100644 --- a/meshtastic/atak.options +++ b/meshtastic/atak.options @@ -26,4 +26,85 @@ *AircraftTrack.aircraft_type max_size:8 *AircraftTrack.squawk int_size:16 *AircraftTrack.category max_size:4 -*AircraftTrack.cot_host_id max_size:64 \ No newline at end of file +*AircraftTrack.cot_host_id max_size:64 + +# --- Typed geometry payloads (v2 protocol extension) --- +# +# CotGeoPoint: sint32 deltas from the enclosing event's latitude_i/longitude_i. +# For nearby vertices (telestrations, small rectangles) the varint+zigzag +# encoding is 2-3 bytes per field, cutting telestration vertex data in half +# versus sfixed32. int_size:32 keeps the C type a plain int32. +# Named with a `Cot` prefix to avoid a collision with `meshtastic.GeoPoint` +# in device_ui.proto, which is an unrelated zoom/latitude/longitude type. +*CotGeoPoint.lat_delta_i int_size:32 +*CotGeoPoint.lon_delta_i int_size:32 +# +# DrawnShape pool sizing. `kind` and `style` are varint enums (no int_size +# needed). stroke_color / fill_color are Team enum, also varint. stroke_argb +# / fill_argb are fixed32 (always 4 bytes on the wire). Vertex pool is 32 +# entries x ~12B each ~= 384B worst case. Telestrations beyond 32 vertices +# MUST be pre-truncated by the sender with `truncated = true`. +*DrawnShape.vertices max_count:32 +*DrawnShape.major_cm int_size:32 +*DrawnShape.minor_cm int_size:32 +*DrawnShape.angle_deg int_size:16 +*DrawnShape.stroke_weight_x10 int_size:16 +*DrawnShape.bullseye_distance_dm int_size:32 +*DrawnShape.bullseye_bearing_ref int_size:8 +*DrawnShape.bullseye_flags int_size:8 +*DrawnShape.bullseye_uid_ref max_size:48 + +# Marker pool sizing. Strings bounded tight to keep fixed pool small on +# ESP32 nanopb. parent_uid matches existing TAKPacketV2.uid cap (48). +# iconset fits "f7f71666-8b28-4b57-9fbb-e38e61d33b79/Google/hiker.png" +# (~52 chars) with slack. +*Marker.parent_uid max_size:48 +*Marker.parent_type max_size:24 +*Marker.parent_callsign max_size:24 +*Marker.iconset max_size:80 + +# RangeAndBearing pool sizing. +*RangeAndBearing.anchor_uid max_size:48 +*RangeAndBearing.range_cm int_size:32 +*RangeAndBearing.bearing_cdeg int_size:16 +*RangeAndBearing.stroke_weight_x10 int_size:16 + +# Route pool sizing. 16 links x ~24B each ~= 384B worst case. prefix is +# ATAK's short waypoint name prefix ("CP", "RP", etc.) — 8 chars is plenty. +*Route.links max_count:16 +*Route.prefix max_size:8 +*Route.stroke_weight_x10 int_size:16 +*Route.Link.uid max_size:48 +*Route.Link.callsign max_size:16 +*Route.Link.link_type int_size:8 + +# GeoChat receipt extension. receipt_for_uid matches TAKPacketV2.uid caps. +*GeoChat.receipt_for_uid max_size:48 + +# CasevacReport pool sizing. All numeric fields are small (0..255 for +# patient counts, 1 byte for flags bitfields); strings are short. +*CasevacReport.equipment_flags int_size:8 +*CasevacReport.terrain_flags int_size:8 +*CasevacReport.litter_patients int_size:8 +*CasevacReport.ambulatory_patients int_size:8 +*CasevacReport.us_military int_size:8 +*CasevacReport.us_civilian int_size:8 +*CasevacReport.non_us_military int_size:8 +*CasevacReport.non_us_civilian int_size:8 +*CasevacReport.epw int_size:8 +*CasevacReport.child int_size:8 +*CasevacReport.zone_marker max_size:16 +*CasevacReport.frequency max_size:16 + +# EmergencyAlert pool sizing. UIDs match TAKPacketV2.uid caps (48). +*EmergencyAlert.authoring_uid max_size:48 +*EmergencyAlert.cancel_reference_uid max_size:48 + +# TaskRequest pool sizing. All four strings are capped tight so the +# worst-case wire size stays under the LoRa MTU with headroom. task_type +# is a short category tag; target_uid/assignee_uid match TAKPacketV2.uid +# conventions; note is the one user-entered field. +*TaskRequest.task_type max_size:12 +*TaskRequest.target_uid max_size:32 +*TaskRequest.assignee_uid max_size:32 +*TaskRequest.note max_size:48 \ No newline at end of file diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 2e6a24a..7e94696 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -55,7 +55,21 @@ message TAKPacket { */ message GeoChat { /* - * The text message + * Receipt discriminator. Set alongside cot_type_id = b-t-f-d (delivered) + * or b-t-f-r (read). ReceiptType_None is the default for a normal chat + * message (cot_type_id = b-t-f). + * + * Receivers can detect a receipt by checking receipt_type != ReceiptType_None + * without re-parsing the envelope cot_type_id. + */ + enum ReceiptType { + ReceiptType_None = 0; // normal chat message + ReceiptType_Delivered = 1; // b-t-f-d delivered receipt + ReceiptType_Read = 2; // b-t-f-r read receipt + } + + /* + * The text message. Empty for receipts. */ string message = 1; @@ -68,6 +82,20 @@ message GeoChat { * Callsign of the recipient for the message */ optional string to_callsign = 3; + + /* + * UID of the chat message this event is acknowledging. Empty for a + * normal chat message; set for delivered / read receipts. Paired with + * receipt_type so receivers can match the ack back to the original + * outbound GeoChat by its event uid. + */ + string receipt_for_uid = 4; + + /* + * Receipt kind discriminator. See ReceiptType doc. Default ReceiptType_None + * means this is a regular chat message, not a receipt. + */ + ReceiptType receipt_type = 5; } /* @@ -663,6 +691,173 @@ enum CotType { * b-f-t-a: File transfer acknowledgment */ CotType_b_f_t_a = 75; + + // --- Additional drawing / tactical graphics --- + + /* + * u-d-f-m: Freehand telestration / annotation. Anchor at event point, + * geometry carried via DrawnShape.vertices. May be truncated to + * MAX_VERTICES by the sender. + */ + CotType_u_d_f_m = 76; + /* + * u-d-p: Closed polygon. Geometry carried via DrawnShape.vertices, + * implicitly closed (receiver duplicates first vertex as needed). + */ + CotType_u_d_p = 77; + + // --- Additional markers --- + + /* + * b-m-p-s-m: Spot map marker (colored dot at a point of interest). + */ + CotType_b_m_p_s_m = 78; + /* + * b-m-p-c: Checkpoint (intermediate route control point). + */ + CotType_b_m_p_c = 79; + + // --- Ranging tools --- + + /* + * u-r-b-c-c: Ranging circle (range rings centered on the event point). + */ + CotType_u_r_b_c_c = 80; + /* + * u-r-b-bullseye: Bullseye with configurable range rings and bearing + * reference (magnetic / true / grid). + */ + CotType_u_r_b_bullseye = 81; + + // ====================================================================== + // Expanded coverage from the ATAK-CIV quick-drop pallet (values 82-124). + // ====================================================================== + // + // All of these types existed as cot_type_str strings; promoting them to + // enum values turns a ~10-byte string into a 1-byte varint on the wire + // for every event that uses them. Grouped below by pallet section. + + // --- PLI self-reporting (1) ------------------------------------------ + /* + * a-f-G-E-V-A: Friendly armored vehicle, user-selectable self PLI. + */ + CotType_a_f_G_E_V_A = 82; + + // --- 2525 quick-drop: basic affiliation gaps ------------------------- + /* + * a-n-A: Neutral aircraft (friendly/hostile/unknown already present). + */ + CotType_a_n_A = 83; + + // --- 2525 quick-drop: artillery (4) ---------------------------------- + CotType_a_u_G_U_C_F = 84; + CotType_a_n_G_U_C_F = 85; + CotType_a_h_G_U_C_F = 86; + CotType_a_f_G_U_C_F = 87; + + // --- 2525 quick-drop: building (4) ----------------------------------- + CotType_a_u_G_I = 88; + CotType_a_n_G_I = 89; + CotType_a_h_G_I = 90; + CotType_a_f_G_I = 91; + + // --- 2525 quick-drop: mine (4) --------------------------------------- + CotType_a_u_G_E_X_M = 92; + CotType_a_n_G_E_X_M = 93; + CotType_a_h_G_E_X_M = 94; + CotType_a_f_G_E_X_M = 95; + + // --- 2525 quick-drop: ship (3; a-f-S already at 17) ------------------ + CotType_a_u_S = 96; + CotType_a_n_S = 97; + CotType_a_h_S = 98; + + // --- 2525 quick-drop: sniper (4) ------------------------------------- + CotType_a_u_G_U_C_I_d = 99; + CotType_a_n_G_U_C_I_d = 100; + CotType_a_h_G_U_C_I_d = 101; + CotType_a_f_G_U_C_I_d = 102; + + // --- 2525 quick-drop: tank (4) --------------------------------------- + CotType_a_u_G_E_V_A_T = 103; + CotType_a_n_G_E_V_A_T = 104; + CotType_a_h_G_E_V_A_T = 105; + CotType_a_f_G_E_V_A_T = 106; + + // --- 2525 quick-drop: troops (3; a-f-G-U-C-I already at 2) ----------- + CotType_a_u_G_U_C_I = 107; + CotType_a_n_G_U_C_I = 108; + CotType_a_h_G_U_C_I = 109; + + // --- 2525 quick-drop: generic vehicle (3; a-u-G-E-V already at 69) --- + CotType_a_n_G_E_V = 110; + CotType_a_h_G_E_V = 111; + CotType_a_f_G_E_V = 112; + + // --- Mission-specific points (4) ------------------------------------- + /* + * b-m-p-w-GOTO: Go To / bloodhound navigation target. + */ + CotType_b_m_p_w_GOTO = 113; + /* + * b-m-p-c-ip: Initial point (mission planning). + */ + CotType_b_m_p_c_ip = 114; + /* + * b-m-p-c-cp: Contact point (mission planning). + */ + CotType_b_m_p_c_cp = 115; + /* + * b-m-p-s-p-op: Observation post. + */ + CotType_b_m_p_s_p_op = 116; + + // --- Vehicle drawings (2) -------------------------------------------- + /* + * u-d-v: 2D vehicle outline drawn on the map. + */ + CotType_u_d_v = 117; + /* + * u-d-v-m: 3D vehicle model reference. + */ + CotType_u_d_v_m = 118; + + // --- Drawing shapes (1) ---------------------------------------------- + /* + * u-d-c-e: Non-circular ellipse (circle with distinct major/minor axes). + */ + CotType_u_d_c_e = 119; + + // --- Image / media marker (1) ---------------------------------------- + /* + * b-i-x-i: Quick Pic geotagged image marker. The image itself does not + * ride on LoRa; this event references the image via iconset metadata. + */ + CotType_b_i_x_i = 120; + + // --- GeoChat receipts (2) -------------------------------------------- + /* + * b-t-f-d: GeoChat delivered receipt. Carried on the existing `chat` + * payload_variant via GeoChat.receipt_for_uid + receipt_type. + */ + CotType_b_t_f_d = 121; + /* + * b-t-f-r: GeoChat read receipt. Same wire slot as b-t-f-d. + */ + CotType_b_t_f_r = 122; + + // --- Custom emergency (1) -------------------------------------------- + /* + * b-a-o-c: Custom / generic emergency beacon. + */ + CotType_b_a_o_c = 123; + + // --- Tasking (1) ----------------------------------------------------- + /* + * t-s: Task / engage request. Structured payload carried via the new + * TaskRequest typed variant. + */ + CotType_t_s = 124; } /* @@ -730,6 +925,668 @@ message AircraftTrack { string cot_host_id = 9; } +/* + * Compact geographic vertex used by repeated vertex lists in TAK geometry + * payloads. Named with a `Cot` prefix to avoid a namespace collision with + * `meshtastic.GeoPoint` in `device_ui.proto`, which is an unrelated zoom/ + * latitude/longitude type used by the on-device map UI. + * + * Encoded as a signed DELTA from TAKPacketV2.latitude_i / longitude_i (the + * enclosing event's anchor point). The absolute coordinate is recovered by + * the receiver as `event.latitude_i + vertex.lat_delta_i` (and likewise for + * longitude). + * + * Why deltas: a 32-vertex telestration with vertices clustered within a few + * hundred meters of the anchor has per-vertex deltas in the ±10^4 range. + * Under sint32+zigzag those encode as 2 bytes each (tag+varint), versus the + * 4 bytes that sfixed32 would always require. At 32 vertices that is ~128 + * bytes of savings — the difference between fitting under the LoRa MTU or + * not. Absolute coordinates (values ~10^9) would cost sint32 varint 5 bytes + * per field, which is why TAKPacketV2's top-level latitude_i / longitude_i + * stay sfixed32 — only small values win with sint32. + */ +message CotGeoPoint { + /* + * Latitude delta from TAKPacketV2.latitude_i, in 1e-7 degree units. + * Add to the enclosing event's latitude_i to recover the absolute latitude. + */ + sint32 lat_delta_i = 1; + /* + * Longitude delta from TAKPacketV2.longitude_i, in 1e-7 degree units. + */ + sint32 lon_delta_i = 2; +} + +/* + * User-drawn tactical graphic: circle, rectangle, polygon, polyline, freehand + * telestration, ranging circle, or bullseye. + * + * Covers CoT types u-d-c-c, u-d-r, u-d-f, u-d-f-m, u-d-p, u-r-b-c-c, + * u-r-b-bullseye. The shape's anchor position is carried on + * TAKPacketV2.latitude_i/longitude_i; polyline/polygon vertices are in the + * `vertices` repeated field as `CotGeoPoint` deltas from that anchor. + * + * Colors use the Team enum as a 14-color palette (see color encoding below) + * with a fixed32 exact-ARGB fallback for custom user-picked colors that + * don't map to a palette entry. + */ +message DrawnShape { + /* + * Shape kind discriminator. Drives receiver rendering and also controls + * which optional fields below are meaningful. + */ + enum Kind { + /* + * Unspecified (do not use on the wire) + */ + Kind_Unspecified = 0; + /* + * u-d-c-c: User-drawn circle (uses major/minor/angle, anchor = event point) + */ + Kind_Circle = 1; + /* + * u-d-r: User-drawn rectangle (uses vertices = 4 corners) + */ + Kind_Rectangle = 2; + /* + * u-d-f: User-drawn polyline (uses vertices, not closed) + */ + Kind_Freeform = 3; + /* + * u-d-f-m: Freehand telestration / annotation (uses vertices, may be truncated) + */ + Kind_Telestration = 4; + /* + * u-d-p: Closed polygon (uses vertices, implicitly closed) + */ + Kind_Polygon = 5; + /* + * u-r-b-c-c: Ranging circle (major/minor/angle, stroke + optional fill) + */ + Kind_RangingCircle = 6; + /* + * u-r-b-bullseye: Bullseye ring with range rings and bearing reference + */ + Kind_Bullseye = 7; + /* + * u-d-c-e: Ellipse with distinct major/minor axes (same storage as + * Kind_Circle — uses major_cm/minor_cm/angle_deg — but receivers + * render it as a non-circular ellipse rather than a round circle). + */ + Kind_Ellipse = 8; + /* + * u-d-v: 2D vehicle outline drawn on the map. Vertices carry the + * outline polygon; receivers draw it as a filled polygon. + */ + Kind_Vehicle2D = 9; + /* + * u-d-v-m: 3D vehicle model reference. Same vertex polygon as + * Kind_Vehicle2D; receivers that support 3D rendering extrude it. + */ + Kind_Vehicle3D = 10; + } + /* + * Explicit stroke/fill/both discriminator. + * + * ATAK's source XML distinguishes "stroke-only polyline" from "closed shape + * with both stroke and fill" by the presence of the element. + * Both states can hash to all-zero color fields, so we carry the signal + * explicitly. Parser sets this from (sawStrokeColor, sawFillColor) at the + * end of parse; builder uses it to decide which of / + * to emit in the reconstructed XML. + */ + enum StyleMode { + /* + * Unspecified — receiver infers from which color fields are non-zero. + */ + StyleMode_Unspecified = 0; + /* + * Stroke only. No in the source XML. Used for polylines, + * ranging lines, bullseye rings. + */ + StyleMode_StrokeOnly = 1; + /* + * Fill only. No in the source XML. Rare but valid in + * ATAK (solid region with no outline). + */ + StyleMode_FillOnly = 2; + /* + * Both stroke and fill present. Closed shapes: circle, rectangle, + * polygon, ranging circle. + */ + StyleMode_StrokeAndFill = 3; + } + /* + * Shape kind (circle, rectangle, freeform, etc.) + */ + Kind kind = 1; + /* + * Explicit stroke/fill/both discriminator. See StyleMode doc. + */ + StyleMode style = 2; + /* + * Ellipse major radius in centimeters. 0 for non-ellipse kinds. + */ + uint32 major_cm = 3; + /* + * Ellipse minor radius in centimeters. 0 for non-ellipse kinds. + */ + uint32 minor_cm = 4; + /* + * Ellipse rotation angle in degrees. Valid values are 0..360 inclusive; + * 0 and 360 are equivalent rotations. In proto3, an unset uint32 reads + * as 0, so senders should emit 0 when the angle is unspecified. + */ + uint32 angle_deg = 5; + /* + * Stroke color as a named palette entry from the Team enum. If + * Unspecifed_Color, the exact ARGB is carried in stroke_argb. + * Valid only when style is StrokeOnly or StrokeAndFill. + */ + Team stroke_color = 6; + /* + * Stroke color as an exact 32-bit ARGB bit pattern. Always populated + * on the wire; readers MUST use this value when stroke_color == + * Unspecifed_Color and MAY use it to recover the exact original bytes + * even when a palette entry is set. + */ + fixed32 stroke_argb = 7; + /* + * Stroke weight in tenths of a unit (e.g. 30 = 3.0). Typical ATAK + * range 10..60. + */ + uint32 stroke_weight_x10 = 8; + /* + * Fill color as a named palette entry. See stroke_color docs. + * Valid only when style is FillOnly or StrokeAndFill. + */ + Team fill_color = 9; + /* + * Fill color exact ARGB fallback. See stroke_argb docs. + */ + fixed32 fill_argb = 10; + /* + * Whether labels are rendered on this shape. + */ + bool labels_on = 11; + /* + * Vertex list for polyline/polygon/rectangle shapes. Capped at 32 by + * the nanopb pool; senders MUST truncate longer inputs and set + * `truncated = true`. + */ + repeated CotGeoPoint vertices = 12; + /* + * True if the sender truncated `vertices` to fit the pool. + */ + bool truncated = 13; + // --- Bullseye-only fields. All ignored unless kind == Kind_Bullseye. --- + /* + * Bullseye distance in meters * 10 (e.g. 3285 = 328.5 m). 0 = unset. + */ + uint32 bullseye_distance_dm = 14; + /* + * Bullseye bearing reference: 0 unset, 1 Magnetic, 2 True, 3 Grid. + */ + uint32 bullseye_bearing_ref = 15; + /* + * Bullseye attribute bit flags: + * bit 0: rangeRingVisible + * bit 1: hasRangeRings + * bit 2: edgeToCenter + * bit 3: mils + */ + uint32 bullseye_flags = 16; + /* + * Bullseye reference UID (anchor marker). Empty = anchor is self. + */ + string bullseye_uid_ref = 17; +} + +/* + * Fixed point of interest: spot marker, waypoint, checkpoint, 2525 symbol, + * or custom icon. + * + * Covers CoT types b-m-p-s-m, b-m-p-w, b-m-p-c, b-m-p-s-p-i, b-m-p-s-p-loc, + * plus a-u-G / a-f-G / a-h-G / a-n-G with iconset paths. The marker position + * is carried on TAKPacketV2.latitude_i/longitude_i; fields below carry only + * the marker-specific metadata. + */ +message Marker { + /* + * Marker kind. Used to pick sensible receiver defaults when the CoT type + * alone is ambiguous (e.g. a-u-G could be a 2525 symbol or a custom icon + * depending on the iconset path). + */ + enum Kind { + /* + * Unspecified — fall back to TAKPacketV2.cot_type_id + */ + Kind_Unspecified = 0; + /* + * b-m-p-s-m: Spot map marker + */ + Kind_Spot = 1; + /* + * b-m-p-w: Route waypoint + */ + Kind_Waypoint = 2; + /* + * b-m-p-c: Checkpoint + */ + Kind_Checkpoint = 3; + /* + * b-m-p-s-p-i / b-m-p-s-p-loc: Self-position marker + */ + Kind_SelfPosition = 4; + /* + * 2525B/C military symbol (iconsetpath = COT_MAPPING_2525B/...) + */ + Kind_Symbol2525 = 5; + /* + * COT_MAPPING_SPOTMAP icon (e.g. colored dot) + */ + Kind_SpotMap = 6; + /* + * Custom icon set (UUID/GroupName/filename.png) + */ + Kind_CustomIcon = 7; + /* + * b-m-p-w-GOTO: Go To / bloodhound navigation waypoint. + */ + Kind_GoToPoint = 8; + /* + * b-m-p-c-ip: Initial point (mission planning control point). + */ + Kind_InitialPoint = 9; + /* + * b-m-p-c-cp: Contact point (mission planning control point). + */ + Kind_ContactPoint = 10; + /* + * b-m-p-s-p-op: Observation post. + */ + Kind_ObservationPost = 11; + /* + * b-i-x-i: Quick Pic geotagged image marker. iconset carries the + * image reference (local filename or remote URL); the image itself + * does not ride on the LoRa wire. + */ + Kind_ImageMarker = 12; + } + /* + * Marker kind + */ + Kind kind = 1; + /* + * Marker color as a named palette entry. If Unspecifed_Color, the exact + * ARGB is in color_argb. + */ + Team color = 2; + /* + * Marker color exact ARGB bit pattern. Always populated on the wire. + */ + fixed32 color_argb = 3; + /* + * Status readiness flag (ATAK ). + */ + bool readiness = 4; + /* + * Parent link UID (ATAK ). Empty = no parent. + * For spot/waypoint markers this is typically the producing TAK user's UID. + */ + string parent_uid = 5; + /* + * Parent CoT type (e.g. "a-f-G-U-C"). Usually the parent TAK user's type. + */ + string parent_type = 6; + /* + * Parent callsign (e.g. "HOPE"). + */ + string parent_callsign = 7; + /* + * Iconset path stored verbatim. ATAK emits three flavors: + * Kind_Symbol2525 -> "COT_MAPPING_2525B//" + * Kind_SpotMap -> "COT_MAPPING_SPOTMAP//" + * Kind_CustomIcon -> "//.png" + * Stored end-to-end without prefix stripping; the ~19 bytes saved by + * stripping well-known prefixes are not worth the builder-side bug + * surface, and the dict compresses the repetition effectively. + */ + string iconset = 8; +} + +/* + * Range and bearing measurement line from the event anchor to a target point. + * + * Covers CoT type u-rb-a. The anchor position is on + * TAKPacketV2.latitude_i/longitude_i; the target endpoint is carried as a + * CotGeoPoint — same delta-from-anchor encoding used by DrawnShape.vertices + * so a self-anchored RAB (common case) encodes in zero bytes. + */ +message RangeAndBearing { + /* + * Target/anchor endpoint (delta-encoded from TAKPacketV2.latitude_i/longitude_i). + */ + CotGeoPoint anchor = 1; + /* + * Anchor UID (from ). Empty = free-standing. + */ + string anchor_uid = 2; + /* + * Range in centimeters (value * 100). Range 0..4294 km. + */ + uint32 range_cm = 3; + /* + * Bearing in degrees * 100 (0..36000). + */ + uint32 bearing_cdeg = 4; + /* + * Stroke color as a Team palette entry. See DrawnShape.stroke_color doc. + */ + Team stroke_color = 5; + /* + * Stroke color exact ARGB fallback. + */ + fixed32 stroke_argb = 6; + /* + * Stroke weight * 10 (e.g. 30 = 3.0). + */ + uint32 stroke_weight_x10 = 7; +} + +/* + * Named route consisting of ordered waypoints and control points. + * + * Covers CoT type b-m-r. The first waypoint's position is on + * TAKPacketV2.latitude_i/longitude_i; subsequent waypoints and checkpoints + * are in `links`. Link count is capped at 16 by the nanopb pool; senders + * MUST truncate longer routes and set `truncated = true`. + */ +message Route { + /* + * Travel method for the route. + */ + enum Method { + /* + * Unspecified / unknown + */ + Method_Unspecified = 0; + /* + * Driving / vehicle + */ + Method_Driving = 1; + /* + * Walking / foot + */ + Method_Walking = 2; + /* + * Flying + */ + Method_Flying = 3; + /* + * Swimming (individual) + */ + Method_Swimming = 4; + /* + * Watercraft (boat) + */ + Method_Watercraft = 5; + } + /* + * Route direction (infil = ingress, exfil = egress). + */ + enum Direction { + /* + * Unspecified + */ + Direction_Unspecified = 0; + /* + * Infiltration (ingress) + */ + Direction_Infil = 1; + /* + * Exfiltration (egress) + */ + Direction_Exfil = 2; + } + /* + * Route waypoint or control point. Each link corresponds to one ATAK + * entry inside the b-m-r event. + */ + message Link { + /* + * Waypoint position (delta-encoded from TAKPacketV2.latitude_i/longitude_i). + */ + CotGeoPoint point = 1; + /* + * Optional UID (empty = receiver derives). + */ + string uid = 2; + /* + * Optional display callsign (e.g. "CP1"). Empty for unnamed control points. + */ + string callsign = 3; + /* + * Link role: 0 = waypoint (b-m-p-w), 1 = checkpoint (b-m-p-c). + */ + uint32 link_type = 4; + } + /* + * Travel method + */ + Method method = 1; + /* + * Direction (infil/exfil) + */ + Direction direction = 2; + /* + * Waypoint name prefix (e.g. "CP"). + */ + string prefix = 3; + /* + * Stroke weight * 10 (e.g. 30 = 3.0). 0 = default. + */ + uint32 stroke_weight_x10 = 4; + /* + * Ordered list of route control points. Capped at 16. + */ + repeated Link links = 5; + /* + * True if the sender truncated `links` to fit the pool. + */ + bool truncated = 6; +} + +/* + * 9-line MEDEVAC request (CoT type b-r-f-h-c). + * + * Mirrors the ATAK MedLine tool's <_medevac_> detail element. Every field + * is optional (proto3 default); senders omit lines they don't have. The + * envelope (TAKPacketV2.uid, cot_type_id=b-r-f-h-c, latitude_i/longitude_i, + * altitude, callsign) carries Line 1 (location) and Line 2 (callsign). + * + * All numeric fields are tight varints so a complete 9-line request fits + * in well under 100 bytes of proto on the wire. + */ +message CasevacReport { + /* + * Line 3: precedence / urgency. + */ + enum Precedence { + Precedence_Unspecified = 0; + Precedence_Urgent = 1; // A - immediate, life-threatening + Precedence_UrgentSurgical = 2; // B - needs surgery + Precedence_Priority = 3; // C - within 4 hours + Precedence_Routine = 4; // D - within 24 hours + Precedence_Convenience = 5; // E - convenience + } + /* + * Line 7: HLZ marking method. + */ + enum HlzMarking { + HlzMarking_Unspecified = 0; + HlzMarking_Panels = 1; + HlzMarking_PyroSignal = 2; + HlzMarking_Smoke = 3; + HlzMarking_None = 4; + HlzMarking_Other = 5; + } + /* + * Line 6: security situation at the pickup zone. + */ + enum Security { + Security_Unspecified = 0; + Security_NoEnemy = 1; // N - no enemy activity + Security_PossibleEnemy = 2; // P - possible enemy + Security_EnemyInArea = 3; // E - enemy, approach with caution + Security_EnemyInArmedContact = 4; // X - armed escort required + } + + /* + * Line 3: precedence / urgency. + */ + Precedence precedence = 1; + /* + * Line 4: special equipment required, as a bitfield. + * bit 0: none + * bit 1: hoist + * bit 2: extraction equipment + * bit 3: ventilator + * bit 4: blood + */ + uint32 equipment_flags = 2; + /* + * Line 5: number of litter (stretcher-bound) patients. + */ + uint32 litter_patients = 3; + /* + * Line 5: number of ambulatory (walking-wounded) patients. + */ + uint32 ambulatory_patients = 4; + /* + * Line 6: security situation at the PZ. + */ + Security security = 5; + /* + * Line 7: HLZ marking method. + */ + HlzMarking hlz_marking = 6; + /* + * Line 7 supplementary: short free-text describing the zone marker + * (e.g. "Green smoke", "VS-17 panel west"). Capped tight in options. + */ + string zone_marker = 7; + // --- Line 8: patient nationality counts --- + uint32 us_military = 8; + uint32 us_civilian = 9; + uint32 non_us_military = 10; + uint32 non_us_civilian = 11; + uint32 epw = 12; // enemy prisoner of war + uint32 child = 13; + /* + * Line 9: terrain and obstacles at the PZ, as a bitfield. + * bit 0: slope + * bit 1: rough + * bit 2: loose + * bit 3: trees + * bit 4: wires + * bit 5: other + */ + uint32 terrain_flags = 14; + /* + * Line 2: radio frequency / callsign metadata (e.g. "38.90 Mhz" or + * "Victor 6"). Capped tight in options. + */ + string frequency = 15; +} + +/* + * Emergency alert / 911 beacon (CoT types b-a-o-tbl, b-a-o-pan, b-a-o-opn, + * b-a-o-can, b-a-o-c, b-a-g). + * + * Small, high-priority structured record. The CoT type string is still set + * on cot_type_id so receivers that ignore payload_variant can still display + * the alert from the enum alone; the typed fields let modern receivers show + * the authoring unit and handle cancel-referencing without XML parsing. + */ +message EmergencyAlert { + enum Type { + Type_Unspecified = 0; + Type_Alert911 = 1; // b-a-o-tbl + Type_RingTheBell = 2; // b-a-o-pan + Type_InContact = 3; // b-a-o-opn + Type_GeoFenceBreached = 4; // b-a-g + Type_Custom = 5; // b-a-o-c + Type_Cancel = 6; // b-a-o-can + } + /* + * Alert discriminator. + */ + Type type = 1; + /* + * UID of the unit that raised the alert. Often the same as + * TAKPacketV2.uid but can be a parent device uid when a tracker raises + * an alert on behalf of a dismount. + */ + string authoring_uid = 2; + /* + * For Type_Cancel: the uid of the alert being cancelled. Empty for + * non-cancel alert types. + */ + string cancel_reference_uid = 3; +} + +/* + * Task / engage request (CoT type t-s). + * + * Mirrors ATAK's TaskCotReceiver / CotTaskBuilder workflow. The envelope + * carries the task's originating uid (implicit requester), position, and + * creation time; the fields below carry structured metadata the raw-detail + * fallback currently loses. + * + * Fields are deliberately lean — this variant is closer to the MTU ceiling + * than the others, so every string is capped in options. + */ +message TaskRequest { + enum Priority { + Priority_Unspecified = 0; + Priority_Low = 1; + Priority_Normal = 2; + Priority_High = 3; + Priority_Critical = 4; + } + enum Status { + Status_Unspecified = 0; + Status_Pending = 1; // assigned, not yet acknowledged + Status_Acknowledged = 2; // assignee has seen it + Status_InProgress = 3; // assignee is working it + Status_Completed = 4; // task done + Status_Cancelled = 5; // cancelled before completion + } + + /* + * Short tag for the task category (e.g. "engage", "observe", "recon", + * "rescue"). Free text on the wire so ATAK-specific task taxonomies + * don't need proto coordination; capped tight in options. + */ + string task_type = 1; + /* + * UID of the target / map item being tasked. + */ + string target_uid = 2; + /* + * UID of the assigned unit. Empty = unassigned / broadcast task. + */ + string assignee_uid = 3; + Priority priority = 4; + Status status = 5; + /* + * Optional short note (reason, constraints, grid reference). Capped + * tight in options to keep the worst-case under the LoRa MTU. + */ + string note = 6; +} + /* * ATAK v2 packet with expanded CoT field support and zstd dictionary compression. * Sent on ATAK_PLUGIN_V2 port. The wire payload is: @@ -830,6 +1687,14 @@ message TAKPacketV2 { * CoT event type string, only populated when cot_type_id is CotType_Other */ string cot_type_str = 23; + /* + * Optional remarks / free-text annotation from the element. + * Populated for non-GeoChat payload types (shapes, markers, routes, etc.) + * when the original CoT event carried non-empty remarks text. + * GeoChat messages carry their text in GeoChat.message instead. + * Empty string (proto3 default) means no remarks were present. + */ + string remarks = 24; /* * The payload of the packet */ @@ -847,8 +1712,40 @@ message TAKPacketV2 { */ AircraftTrack aircraft = 32; /* - * Generic CoT detail XML for unmapped types + * Generic CoT detail XML for unmapped types. Kept as a fallback for CoT + * types not yet promoted to a typed variant; drawings, markers, ranging + * tools, and routes have dedicated variants below and should not land here. */ bytes raw_detail = 33; + /* + * User-drawn tactical graphic: circle, rectangle, polygon, polyline, + * telestration, ranging circle, or bullseye. See DrawnShape. + */ + DrawnShape shape = 34; + /* + * Fixed point of interest: spot marker, waypoint, checkpoint, 2525 + * symbol, or custom icon. See Marker. + */ + Marker marker = 35; + /* + * Range and bearing measurement line. See RangeAndBearing. + */ + RangeAndBearing rab = 36; + /* + * Named route with ordered waypoints and control points. See Route. + */ + Route route = 37; + /* + * 9-line MEDEVAC request. See CasevacReport. + */ + CasevacReport casevac = 38; + /* + * Emergency beacon / 911 alert. See EmergencyAlert. + */ + EmergencyAlert emergency = 39; + /* + * Task / engage request. See TaskRequest. + */ + TaskRequest task = 40; } } From 98e95eeaa26770e6ede0291753623e4744b6ede1 Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 14 Apr 2026 05:35:13 -0500 Subject: [PATCH 244/253] Remote Shell Protobufs (#892) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add initial dmshell * Remove unused code * Internally use RemoteShell * Formatting fix * Clarify comment for REMOTE_SHELL_APP Co-authored-by: Thomas Göttgens --- meshtastic/mesh.options | 2 ++ meshtastic/mesh.proto | 70 +++++++++++++++++++++++++++++++++++++++ meshtastic/portnums.proto | 5 +++ 3 files changed, 77 insertions(+) diff --git a/meshtastic/mesh.options b/meshtastic/mesh.options index 1bae5eb..2341e6c 100644 --- a/meshtastic/mesh.options +++ b/meshtastic/mesh.options @@ -74,6 +74,8 @@ *StoreForwardPlusPlus.root_hash max_size:32 *StoreForwardPlusPlus.message max_size:240 +*RemoteShell.payload max_size:200 + *StatusMessage.status max_size:80 # MyMessage.name max_size:40 diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index b2c6fa4..6ad24aa 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1288,6 +1288,76 @@ message StoreForwardPlusPlus { uint32 chain_count = 10; } +/* + * The actual over-the-mesh message doing RemoteShell + */ +message RemoteShell { + /* + * Frame op code for PTY session control and stream transport. + * + * Values 1-63 are client->server requests. + * Values 64-127 are server->client responses/events. + */ + enum OpCode { + OP_UNSET = 0; + + // Client -> server + OPEN = 1; + INPUT = 2; + RESIZE = 3; + CLOSE = 4; + PING = 5; + ACK = 6; + + // Server -> client + OPEN_OK = 64; + OUTPUT = 65; + CLOSED = 66; + ERROR = 67; + PONG = 68; + } + + /* + * Structured frame operation. + */ + OpCode op = 1; + + /* + * Logical PTY session identifier. + */ + uint32 session_id = 2; + + /* + * Monotonic sequence number for this frame. + */ + uint32 seq = 3; + + /* + * Cumulative ack sequence number. + */ + uint32 ack_seq = 4; + + /* + * Opaque bytes payload for INPUT/OUTPUT/ERROR and other frame bodies. + */ + bytes payload = 5; + + /* + * Terminal size columns used for OPEN/RESIZE signaling. + */ + uint32 cols = 6; + + /* + * Terminal size rows used for OPEN/RESIZE signaling. + */ + uint32 rows = 7; + + /* + * Bit flags for protocol extensions. + */ + uint32 flags = 8; +} + /* * Waypoint message, used to share arbitrary locations across the mesh */ diff --git a/meshtastic/portnums.proto b/meshtastic/portnums.proto index b6c9776..61412cf 100644 --- a/meshtastic/portnums.proto +++ b/meshtastic/portnums.proto @@ -115,6 +115,11 @@ enum PortNum { */ KEY_VERIFICATION_APP = 12; + /* + * Module/port for handling primitive remote shell access. + */ + REMOTE_SHELL_APP = 13; + /* * Provides a 'ping' service that replies to any packet it receives. * Also serves as a small example module. From a045501ea848f49d546cc10e4c162a32317d4c7e Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Tue, 14 Apr 2026 13:52:08 +0200 Subject: [PATCH 245/253] Multiple one wire channels (#886) * Add DS248X bridge * One wire temperature for multiple channels --- meshtastic/telemetry.options | 1 + meshtastic/telemetry.proto | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/meshtastic/telemetry.options b/meshtastic/telemetry.options index 81d2aa8..5db1af5 100644 --- a/meshtastic/telemetry.options +++ b/meshtastic/telemetry.options @@ -4,6 +4,7 @@ *EnvironmentMetrics.iaq int_size:16 *EnvironmentMetrics.wind_direction int_size:16 *EnvironmentMetrics.soil_moisture int_size:8 +*EnvironmentMetrics.one_wire_temperature max_count:8 *LocalStats.num_online_nodes int_size:16 *LocalStats.num_total_nodes int_size:16 diff --git a/meshtastic/telemetry.proto b/meshtastic/telemetry.proto index e00345b..f541ca9 100644 --- a/meshtastic/telemetry.proto +++ b/meshtastic/telemetry.proto @@ -153,6 +153,11 @@ message EnvironmentMetrics { * Soil temperature measured (*C) */ optional float soil_temperature = 22; + + /* + * One-wire temperature (*C) + */ + repeated float one_wire_temperature = 23; } /* From 940ac382a7d143040da5a880237f84c48ee31f2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Tue, 14 Apr 2026 14:51:23 +0200 Subject: [PATCH 246/253] add THINKNODE device IDs (#893) --- .gitignore | 1 + meshtastic/mesh.proto | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 265ee7c..dd68173 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ # Generated protobuf files packages/ts/lib/ +.bin/ diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 6ad24aa..032f1e2 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -875,9 +875,19 @@ enum HardwareModel { */ HELTEC_MESH_NODE_T096 = 127; - /* Seeed studio T1000-E Pro tracker card. NRF52840 w/ LR2021 radio, GPS, button, buzzer, and sensors. */ + /* + * Seeed studio T1000-E Pro tracker card. NRF52840 w/ LR2021 radio, + * GPS, button, buzzer, and sensors. + */ TRACKER_T1000_E_PRO = 128; + /* + * Elecrow ThinkNode M7, M8 and M9 + */ + THINKNODE_M7 = 129; + THINKNODE_M8 = 130; + THINKNODE_M9 = 131; + /* * ------------------------------------------------------------------------------------------------------------------------------------------ * 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 7900e5d2ddfc67806d37f0717d2f961dda18624d Mon Sep 17 00:00:00 2001 From: Jonathan Bennett Date: Tue, 14 Apr 2026 18:43:27 -0500 Subject: [PATCH 247/253] Add two more RemoteShell fields --- meshtastic/mesh.proto | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/meshtastic/mesh.proto b/meshtastic/mesh.proto index 032f1e2..fb585b9 100644 --- a/meshtastic/mesh.proto +++ b/meshtastic/mesh.proto @@ -1366,6 +1366,16 @@ message RemoteShell { * Bit flags for protocol extensions. */ uint32 flags = 8; + + /* + * The last sequence number TX'd. + */ + uint32 last_tx_seq = 9; + + /* + * The last sequence number RX'd. + */ + uint32 last_rx_seq = 10; } /* From 052a9fa4bffda16ba5a1ca625b829c75fac03151 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 15 Apr 2026 11:16:31 -0500 Subject: [PATCH 248/253] Add v2.x medline extensions and ZMistEntry message to CasevacReport --- meshtastic/atak.proto | 135 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 7e94696..b9dbaae 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1498,6 +1498,141 @@ message CasevacReport { * "Victor 6"). Capped tight in options. */ string frequency = 15; + + // --- v2.x medline extensions (tags 16–33) -------------------------------- + // + // Fields 16+ cost a 2-byte tag instead of 1 byte, but they're usually + // sparse so the on-wire delta is modest when most stay unset. A fully + // populated CASEVAC with 13 free-text fields + 2 ZMIST entries can run + // 200-400 bytes compressed, i.e. potentially over the 237 B LoRa MTU. + // Callers that hit the MTU on the `compressWithRemarksFallback` path + // SHOULD strip the tier-2 situational fields (tags 28-32 + terrain_other_detail) + // before dropping the packet entirely. See README "CASEVAC tier-2 stripping". + + /* + * Short title / MEDEVAC identifier (e.g. "EAGLE.15.181230"). Usually the + * same as the envelope callsign but ATAK sometimes carries a distinct + * ops-number here. + */ + string title = 16; + /* + * Primary medline free-text — the single most clinically important line + * on a MEDLINE form (e.g. "2 urgent litter patients, smoke on approach"). + * MUST be preserved under MTU pressure as long as any casevac is sent. + */ + string medline_remarks = 17; + + /* + * Line 3 (newer ATAK format): patient counts by precedence level. + * Coexists with the enum-style `precedence` field (tag 1) — older ATAK + * emits a single enum, newer ATAK emits these counts, and both can be + * set simultaneously. Senders populate whichever style(s) the source + * XML had; receivers prefer counts when non-zero. + */ + uint32 urgent_count = 18; + uint32 urgent_surgical_count = 19; + uint32 priority_count = 20; + uint32 routine_count = 21; + uint32 convenience_count = 22; + + /* + * Line 4 supplementary: free-text description of non-standard equipment + * (e.g. "Blood warmer"). Pairs with the `equipment_flags` bitfield. + */ + string equipment_detail = 23; + /* + * Line 1 override: MGRS grid when distinct from the event anchor point + * (e.g. "34T CQ 12345 67890"). Event lat/lon/hae still carries the + * numeric location; this field preserves the exact MGRS string the + * medic entered. + */ + string zone_protected_coord = 24; + /* + * Line 9 supplementary: slope direction (e.g. "N", "NE", "SSW") when + * `terrain_flags` bit 0 (slope) is set. + */ + string terrain_slope_dir = 25; + /* + * Line 9 supplementary: free-text description of "other" terrain hazards + * (e.g. "Loose debris on west edge") when `terrain_flags` bit 5 (other) + * is set. Tier-2 strippable under MTU pressure. + */ + string terrain_other_detail = 26; + /* + * Line 7 supplementary: how the zone is being marked right now + * (e.g. "Orange smoke", "VS-17 panel"). Complements the structured + * `hlz_marking` enum with a specific human-readable description. + */ + string marked_by = 27; + + // --- Tier-2 situational awareness (stripped first under MTU pressure) --- + // These fields are free-text context that helps the receiver plan the + // approach but aren't strictly required to evacuate the patient. + + /* + * Nearby obstacles on the approach (e.g. "Power lines north of HLZ"). + */ + string obstacles = 28; + /* + * Wind direction and speed (e.g. "270 at 12 kts"). + */ + string winds_are_from = 29; + /* + * Friendly forces posture near the pickup zone + * (e.g. "Squad east of HLZ"). + */ + string friendlies = 30; + /* + * Known or suspected enemy positions near the pickup zone + * (e.g. "Possible enemy on south ridge"). + */ + string enemy = 31; + /* + * Free-text description of the HLZ itself + * (e.g. "Primary HLZ is soccer field"). + */ + string hlz_remarks = 32; + + /* + * Per-patient clinical records. Each entry is one patient's ZMIST card + * (Zap number / Mechanism / Injuries / Signs / Treatment). Repeatable — + * a mass-casualty event can carry 1-6 entries in practice, limited by + * the 237 B LoRa MTU. + */ + repeated ZMistEntry zmist = 33; +} + +/* + * Per-patient clinical summary record — one entry per patient in a CASEVAC. + * Maps directly to ATAK's child element inside . + * All fields are optional free-text; senders populate what they have. + */ +message ZMistEntry { + /* + * Patient identifier / sequence label (e.g. "ZMIST-1", "ZMIST-2"). + */ + string title = 1; + /* + * Zap number — unique patient tracking ID (often a terse code like + * "Gunshot" or a serial). + */ + string z = 2; + /* + * Mechanism of injury (e.g. "Penetrating trauma", "Blast injury"). + */ + string m = 3; + /* + * Injuries observed (e.g. "Left thigh", "Concussion"). + */ + string i = 4; + /* + * Signs / vital stats (e.g. "Stable", "Priority", "BP 110/70"). + */ + string s = 5; + /* + * Treatment given (e.g. "Tourniquet 1810Z", "O2 administered"). + */ + string t = 6; } /* From da33d0ea72678e430e034275f724c754728235c8 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 15 Apr 2026 15:20:28 -0500 Subject: [PATCH 249/253] Add Environment and SensorFov annotations to TAKPacketV2 Two new top-level optional fields at tags 25 and 26 that attach to any payload_variant. Environment carries weather readings from CoT detail elements (temperature, wind direction, wind speed). SensorFov carries the 8 geometry attributes of ATAK-CIV's element (type, azimuth, range, horizontal and vertical FOV, elevation, roll, model), dropping the 9 display-only attributes (fovAlpha/RGB, strokeColor/Weight, hideFov, fovLabels, displayMagneticReference, rangeLines) that are receiver-side render hints. Units are chosen for compact varint encoding and parity with existing fields: temperature in deci-degrees Celsius (sint32), wind speed in cm/s to match TAKPacketV2.speed, all angles as whole degrees. Tags 27-29 reserved for future annotations before the payload_variant oneof resumes at tag 30. --- meshtastic/atak.proto | 119 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index b9dbaae..b8a4fe5 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1722,6 +1722,105 @@ message TaskRequest { string note = 6; } +/* + * Weather annotation from CoT detail element. + * + * Attaches to any TAKPacketV2 regardless of payload_variant — an Aircraft, + * PLI, or Marker can all carry observed conditions at the emitting station. + * ATAK-CIV ships an XSD for but no dedicated handler, so the + * element round-trips through the generic detail pipeline; this message + * promotes it to a first-class structured field. + * + * Target wire cost: ~6-8 bytes compressed with a fully populated instance. + */ +message Environment { + /* + * Temperature in deci-degrees Celsius. 225 = 22.5°C. + * Range covers -50°C to +50°C (-500 to +500) which spans every realistic + * outdoor TAK deployment. sint32 because negative temps are common in + * cold-weather ops. + */ + sint32 temperature_c_x10 = 1; + /* + * Wind direction in whole degrees, 0-359. "Direction FROM" per + * meteorological convention (matches CoT / ATAK). + */ + uint32 wind_direction_deg = 2; + /* + * Wind speed in cm/s. Matches the unit of TAKPacketV2.speed for + * consistency. 1200 = 12.00 m/s = ~27 mph. + */ + uint32 wind_speed_cm_s = 3; +} + +/* + * Sensor field-of-view cone from CoT detail element. + * + * Encodes the 8 geometry attributes that ATAK-CIV's SensorDetailHandler + * reads from the wire; drops the 9 visual-styling attributes that are + * receiver-side render hints (fovAlpha, fovRed/Green/Blue, strokeColor, + * strokeWeight, displayMagneticReference, hideFov, fovLabels, rangeLines). + * The receiving ATAK client restores those from its own defaults, same as + * every other CoT carried over Meshtastic today. + * + * Attaches to any TAKPacketV2 — a PLI with a sensor on the operator's head, + * an Aircraft with a FLIR turret, a Marker dropped on a UAV. + * Target wire cost: ~7-14 bytes compressed (dominated by model string). + */ +message SensorFov { + /* + * Coarse sensor category, inferred from `model` on parse when the source + * XML doesn't label it. Receivers that render differently per sensor + * class (thermal overlay vs daylight cone) use this. + */ + enum SensorType { + SensorType_Unspecified = 0; + SensorType_Camera = 1; // daylight / general optical + SensorType_Thermal = 2; // FLIR, thermal imager + SensorType_Laser = 3; // rangefinder, LRF, designator + SensorType_Nvg = 4; // night vision goggles + SensorType_Rf = 5; // radio/radar direction-finding + SensorType_Other = 6; + } + + SensorType type = 1; + /* + * Azimuth in whole degrees, 0-359. "Pointing direction" of the cone axis, + * measured clockwise from true north. Whole degrees match ATAK-CIV's + * SensorDetailHandler default (270°) and save varint bytes over centi-deg. + */ + uint32 azimuth_deg = 2; + /* + * Maximum range of the cone in meters. ATAK-CIV default is 100m. + */ + uint32 range_m = 3; + /* + * Horizontal field of view in whole degrees (cone's angular width). + * ATAK-CIV default is 45°. + */ + uint32 fov_horizontal_deg = 4; + /* + * Vertical field of view in whole degrees. ATAK-CIV default is 45°. + * Optional — a value of 0 means "not set / use horizontal FOV". + */ + uint32 fov_vertical_deg = 5; + /* + * Elevation angle in whole degrees. Positive = up, negative = down. + * Range -90 to +90. sint32 for varint efficiency on small negatives. + */ + sint32 elevation_deg = 6; + /* + * Roll (camera tilt) in whole degrees, -180 to +180. + * Optional — use 0 if the sensor doesn't track roll. + */ + sint32 roll_deg = 7; + /* + * Free-form device model identifier, e.g. "FLIR-Boson-640", "SEEK". + * Optional — empty string means "unknown model" (ATAK-CIV default). + */ + string model = 8; +} + /* * ATAK v2 packet with expanded CoT field support and zstd dictionary compression. * Sent on ATAK_PLUGIN_V2 port. The wire payload is: @@ -1830,6 +1929,26 @@ message TAKPacketV2 { * Empty string (proto3 default) means no remarks were present. */ string remarks = 24; + + // --- Sensor / environment annotations ---------------------------------- + // + // Both fields are OPTIONAL and attach to any payload_variant. They + // describe observed conditions at the emitting station — a PLI with + // environment data, an Aircraft with a sensor cone, a Marker with both. + // Absent by default; presence is signaled by the message being non-null. + + /* + * Observed weather conditions (temperature, wind). From . + */ + optional Environment environment = 25; + /* + * Sensor field-of-view cone (camera, FLIR, laser, etc.). From . + */ + optional SensorFov sensor_fov = 26; + + // Tags 27, 28, 29 reserved for future top-level annotations before the + // payload_variant oneof resumes at 30. + /* * The payload of the packet */ From 3ce7c51068cc45281f3a5fa353a8f4df6f7eca27 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Wed, 15 Apr 2026 16:29:03 -0500 Subject: [PATCH 250/253] Rename Environment -> TAKEnvironment to avoid SwiftUI collision MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The bare `Environment` message name clashes with SwiftUI's `@Environment` property wrapper, which is used by every SwiftUI view in an iOS consumer app. Importing the generated proto module (e.g. `MeshtasticProtobufs`) made `Environment` ambiguous in all 78 files of Meshtastic-Apple that reference `@Environment(\.scenePhase)` or similar, breaking the build. Field name `environment` on TAKPacketV2 stays unchanged — only the message type is renamed. Wire format is unaffected (proto3 encodes by tag number, not type name), but all generated code and source-level references must be regenerated. The `TAK` prefix matches the convention used by the outer TAKPacketV2 wrapper and is unambiguous across Swift (no SwiftUI/WeatherKit clash), Kotlin, Python, TypeScript, and C# targets. --- meshtastic/atak.proto | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index b8a4fe5..7223ee1 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1732,8 +1732,16 @@ message TaskRequest { * promotes it to a first-class structured field. * * Target wire cost: ~6-8 bytes compressed with a fully populated instance. + * + * Named `TAKEnvironment` (not just `Environment`) because the bare name + * collides with `SwiftUI.Environment` — every SwiftUI view in a consuming + * iOS app uses the `@Environment` property wrapper, and importing the + * generated proto module would make `Environment` ambiguous in every one + * of those files. The `TAK` prefix matches the convention used by the + * outer `TAKPacketV2` wrapper and is unambiguous across all target + * languages (Swift, Kotlin, Python, TypeScript, C#). */ -message Environment { +message TAKEnvironment { /* * Temperature in deci-degrees Celsius. 225 = 22.5°C. * Range covers -50°C to +50°C (-500 to +500) which spans every realistic @@ -1939,8 +1947,10 @@ message TAKPacketV2 { /* * Observed weather conditions (temperature, wind). From . + * Type is `TAKEnvironment`, not `Environment`, to avoid colliding with + * SwiftUI's `@Environment` property wrapper in iOS consumers. */ - optional Environment environment = 25; + optional TAKEnvironment environment = 25; /* * Sensor field-of-view cone (camera, FLIR, laser, etc.). From . */ From 3a398acbff52b7844b48965cd78b408d27a17ce2 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 16 Apr 2026 19:51:52 -0500 Subject: [PATCH 251/253] Update atak.proto Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/atak.proto | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 7223ee1..ec0c596 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1799,9 +1799,10 @@ message SensorFov { */ uint32 azimuth_deg = 2; /* - * Maximum range of the cone in meters. ATAK-CIV default is 100m. + * Maximum range of the cone in meters. + * Optional — if unset, receivers should use the ATAK-CIV default of 100m. */ - uint32 range_m = 3; + optional uint32 range_m = 3; /* * Horizontal field of view in whole degrees (cone's angular width). * ATAK-CIV default is 45°. From e5b07ae0b0d5901b3e9cf586c68f30f38589c42b Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Thu, 16 Apr 2026 19:52:05 -0500 Subject: [PATCH 252/253] Update atak.proto Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- meshtastic/atak.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index ec0c596..0325d92 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1957,6 +1957,7 @@ message TAKPacketV2 { */ optional SensorFov sensor_fov = 26; + reserved 27, 28, 29; // Tags 27, 28, 29 reserved for future top-level annotations before the // payload_variant oneof resumes at 30. From 793e274f599c7f08e4d343dd56607ab36e5486b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Apr 2026 00:56:12 +0000 Subject: [PATCH 253/253] Run buf format on atak proto Agent-Logs-Url: https://github.com/meshtastic/protobufs/sessions/059c2e02-63e3-467d-b032-dc5c15883261 Co-authored-by: thebentern <9000580+thebentern@users.noreply.github.com> --- meshtastic/atak.proto | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/meshtastic/atak.proto b/meshtastic/atak.proto index 0325d92..873e0b6 100644 --- a/meshtastic/atak.proto +++ b/meshtastic/atak.proto @@ -1783,11 +1783,11 @@ message SensorFov { */ enum SensorType { SensorType_Unspecified = 0; - SensorType_Camera = 1; // daylight / general optical - SensorType_Thermal = 2; // FLIR, thermal imager - SensorType_Laser = 3; // rangefinder, LRF, designator - SensorType_Nvg = 4; // night vision goggles - SensorType_Rf = 5; // radio/radar direction-finding + SensorType_Camera = 1; // daylight / general optical + SensorType_Thermal = 2; // FLIR, thermal imager + SensorType_Laser = 3; // rangefinder, LRF, designator + SensorType_Nvg = 4; // night vision goggles + SensorType_Rf = 5; // radio/radar direction-finding SensorType_Other = 6; }