From 44298d374fd83cfbc36fdb76c6f966e980cadd93 Mon Sep 17 00:00:00 2001 From: oscgonfer Date: Thu, 12 Feb 2026 19:09:02 +0100 Subject: [PATCH 01/20] 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 02/20] 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 03/20] 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 04/20] 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 05/20] 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 06/20] 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 07/20] 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 08/20] 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 09/20] 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 10/20] 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 11/20] 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 12/20] 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 13/20] 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 14/20] 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 15/20] 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 16/20] 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 17/20] 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 18/20] 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 19/20] 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 20/20] 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; } /*