From 196a279ef09f83383f9a5ed987666e5eded80257 Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Thu, 9 Jul 2026 17:26:09 -0700 Subject: [PATCH 1/3] feat: consume packet authenticity settings --- lib/mesh/generated/meshtastic/config.pb.cpp | 12 +- lib/mesh/generated/meshtastic/config.pb.h | 590 +++---- lib/mesh/generated/meshtastic/mesh.pb.cpp | 52 +- lib/mesh/generated/meshtastic/mesh.pb.h | 1767 ++++++++++--------- platformio.ini | 3 +- test/test_MeshEnvelope.cpp | 16 + 6 files changed, 1307 insertions(+), 1133 deletions(-) diff --git a/lib/mesh/generated/meshtastic/config.pb.cpp b/lib/mesh/generated/meshtastic/config.pb.cpp index e098293..1c54989 100644 --- a/lib/mesh/generated/meshtastic/config.pb.cpp +++ b/lib/mesh/generated/meshtastic/config.pb.cpp @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-1.0.0-dev */ +/* Generated by nanopb-0.4.9.1 */ #include "meshtastic/config.pb.h" #if PB_PROTO_HEADER_VERSION != 40 @@ -8,22 +8,32 @@ PB_BIND(meshtastic_Config, meshtastic_Config, AUTO) + PB_BIND(meshtastic_Config_DeviceConfig, meshtastic_Config_DeviceConfig, AUTO) + PB_BIND(meshtastic_Config_PositionConfig, meshtastic_Config_PositionConfig, AUTO) + PB_BIND(meshtastic_Config_PowerConfig, meshtastic_Config_PowerConfig, AUTO) + PB_BIND(meshtastic_Config_NetworkConfig, meshtastic_Config_NetworkConfig, AUTO) + PB_BIND(meshtastic_Config_NetworkConfig_IpV4Config, meshtastic_Config_NetworkConfig_IpV4Config, AUTO) + PB_BIND(meshtastic_Config_DisplayConfig, meshtastic_Config_DisplayConfig, AUTO) + PB_BIND(meshtastic_Config_LoRaConfig, meshtastic_Config_LoRaConfig, 2) + PB_BIND(meshtastic_Config_BluetoothConfig, meshtastic_Config_BluetoothConfig, AUTO) + PB_BIND(meshtastic_Config_SecurityConfig, meshtastic_Config_SecurityConfig, AUTO) + PB_BIND(meshtastic_Config_SessionkeyConfig, meshtastic_Config_SessionkeyConfig, AUTO) diff --git a/lib/mesh/generated/meshtastic/config.pb.h b/lib/mesh/generated/meshtastic/config.pb.h index 17be32d..d6d149b 100644 --- a/lib/mesh/generated/meshtastic/config.pb.h +++ b/lib/mesh/generated/meshtastic/config.pb.h @@ -1,10 +1,10 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-1.0.0-dev */ +/* Generated by nanopb-0.4.9.1 */ #ifndef PB_MESHTASTIC_MESHTASTIC_CONFIG_PB_H_INCLUDED #define PB_MESHTASTIC_MESHTASTIC_CONFIG_PB_H_INCLUDED -#include "meshtastic/device_ui.pb.h" #include +#include "meshtastic/device_ui.pb.h" #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. @@ -24,11 +24,10 @@ typedef enum _meshtastic_Config_DeviceConfig_Role { This mode may still potentially have higher power usage due to it's preference in message rebroadcasting on the mesh. */ meshtastic_Config_DeviceConfig_Role_ROUTER = 2, meshtastic_Config_DeviceConfig_Role_ROUTER_CLIENT = 3, - /* 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. */ + /* 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. */ meshtastic_Config_DeviceConfig_Role_REPEATER = 4, /* Description: Broadcasts GPS position packets as priority. Technical Details: Position Mesh packets will be prioritized higher and sent more frequently by default. @@ -88,8 +87,7 @@ typedef enum _meshtastic_Config_DeviceConfig_RebroadcastMode { /* Ignores observed messages from foreign meshes like LOCAL_ONLY, but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB) */ meshtastic_Config_DeviceConfig_RebroadcastMode_KNOWN_ONLY = 3, - /* Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role. - */ + /* Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role. */ meshtastic_Config_DeviceConfig_RebroadcastMode_NONE = 4, /* Ignores packets from non-standard portnums such as: TAK, RangeTest, PaxCounter, etc. Only rebroadcasts packets with standard portnums: NodeInfo, Text, Position, Telemetry, and Routing. */ @@ -200,7 +198,9 @@ typedef enum _meshtastic_Config_DisplayConfig_OledType { /* Can not be auto detected but set by proto. Used for 128x64 screens */ meshtastic_Config_DisplayConfig_OledType_OLED_SH1107 = 3, /* Can not be auto detected but set by proto. Used for 128x128 screens */ - meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_128_128 = 4 + meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_128_128 = 4, + /* Can not be auto detected but set by proto. Used for 64x128 rotated screens */ + meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_ROTATED = 5 } meshtastic_Config_DisplayConfig_OledType; typedef enum _meshtastic_Config_DisplayConfig_DisplayMode { @@ -287,7 +287,33 @@ typedef enum _meshtastic_Config_LoRaConfig_RegionCode { /* Nepal 865MHz */ meshtastic_Config_LoRaConfig_RegionCode_NP_865 = 25, /* Brazil 902MHz */ - meshtastic_Config_LoRaConfig_RegionCode_BR_902 = 26 + meshtastic_Config_LoRaConfig_RegionCode_BR_902 = 26, + /* ITU Region 1 Amateur Radio 2m band (144-146 MHz) */ + meshtastic_Config_LoRaConfig_RegionCode_ITU1_2M = 27, + /* ITU Region 2 Amateur Radio 2m band (144-148 MHz) */ + meshtastic_Config_LoRaConfig_RegionCode_ITU2_2M = 28, + /* EU 866MHz band (Band no. 47b of 2006/771/EC and subsequent amendments) for Non-specific short-range devices (SRD) */ + meshtastic_Config_LoRaConfig_RegionCode_EU_866 = 29, + /* EU 874MHz and 917MHz bands (Band no. 1 and 4 of 2022/172/EC and subsequent amendments) for Non-specific short-range devices (SRD) */ + meshtastic_Config_LoRaConfig_RegionCode_EU_874 = 30, + meshtastic_Config_LoRaConfig_RegionCode_EU_917 = 31, + /* EU 868MHz band, with narrow presets */ + meshtastic_Config_LoRaConfig_RegionCode_EU_N_868 = 32, + /* ITU Region 3 Amateur Radio 2m band (144-148 MHz) */ + meshtastic_Config_LoRaConfig_RegionCode_ITU3_2M = 33, + /* ITU Region 1 Amateur Radio 70cm band (430-440 MHz) */ + meshtastic_Config_LoRaConfig_RegionCode_ITU1_70CM = 34, + /* ITU Region 2 Amateur Radio 70cm band (420-450 MHz) + Note: Some countries do not allocate 420-430 MHz or 440-450 MHz. + Check local law! */ + meshtastic_Config_LoRaConfig_RegionCode_ITU2_70CM = 35, + /* ITU Region 3 Amateur Radio 70cm band (430-450 MHz) + Note: Some countries do not allocate 440-450 MHz. Check local law! */ + meshtastic_Config_LoRaConfig_RegionCode_ITU3_70CM = 36, + /* ITU Region 2 Amateur Radio 1.25m '125cm' band (220-225 MHz) + Note: Some countries do not allocate 220-222 MHz (Ex: USA/Canada). + Check local law! */ + meshtastic_Config_LoRaConfig_RegionCode_ITU2_125CM = 37 } meshtastic_Config_LoRaConfig_RegionCode; /* Standard predefined channel settings @@ -317,7 +343,38 @@ typedef enum _meshtastic_Config_LoRaConfig_ModemPreset { meshtastic_Config_LoRaConfig_ModemPreset_SHORT_TURBO = 8, /* Long Range - Turbo This preset performs similarly to LongFast, but with 500Khz bandwidth. */ - meshtastic_Config_LoRaConfig_ModemPreset_LONG_TURBO = 9 + meshtastic_Config_LoRaConfig_ModemPreset_LONG_TURBO = 9, + /* Lite Fast + Medium range preset optimized for EU 866MHz SRD band with 125kHz bandwidth. + Comparable link budget to MEDIUM_FAST but compliant with Band no. 47b of 2006/771/EC. */ + meshtastic_Config_LoRaConfig_ModemPreset_LITE_FAST = 10, + /* Lite Slow + Medium-to-moderate range preset optimized for EU 866MHz SRD band with 125kHz bandwidth. + Comparable link budget to LONG_FAST but compliant with Band no. 47b of 2006/771/EC. */ + meshtastic_Config_LoRaConfig_ModemPreset_LITE_SLOW = 11, + /* Narrow Fast + Medium-to-moderate range preset optimized for EU 868MHz band with 62.5kHz bandwidth. + Comparable link budget to SHORT_SLOW, but with half the data rate. + Intended to avoid interference with other devices. */ + meshtastic_Config_LoRaConfig_ModemPreset_NARROW_FAST = 12, + /* Narrow Slow + Moderate range preset optimized for EU 868MHz band with 62.5kHz bandwidth. + Comparable link budget and data rate to LONG_FAST. */ + meshtastic_Config_LoRaConfig_ModemPreset_NARROW_SLOW = 13, + /* Tiny Fast + Preset optimized for compliance with Amateur Radio restrictions with 20kHz bandwidth. + Many regions limit data transmission bandwidth in lower amateur bands (2 Meter). + Note: TCXO with tight tolerances (±5 ppm or better) is *absolutely required* at these narrow bandwidths. + Only compatible with SX127x and SX126x chipsets. + Comparable link budget and data rate to LONG_FAST. */ + meshtastic_Config_LoRaConfig_ModemPreset_TINY_FAST = 14, + /* Tiny Slow + Preset optimized for compliance with Amateur Radio restrictions with 20kHz bandwidth. + Many regions limit data transmission bandwidth in lower amateur bands (2 Meter). + Note: TCXO with tight tolerances (±5 ppm or better) is *absolutely required* at these narrow bandwidths. + Only compatible with SX127x and SX126x chipsets. + Comparable link budget and data rate to LONG_MODERATE. */ + meshtastic_Config_LoRaConfig_ModemPreset_TINY_SLOW = 15 } meshtastic_Config_LoRaConfig_ModemPreset; typedef enum _meshtastic_Config_LoRaConfig_FEM_LNA_Mode { @@ -338,6 +395,18 @@ typedef enum _meshtastic_Config_BluetoothConfig_PairingMode { meshtastic_Config_BluetoothConfig_PairingMode_NO_PIN = 2 } meshtastic_Config_BluetoothConfig_PairingMode; +/* Controls how the device authenticates remotely received mesh packets. */ +typedef enum _meshtastic_Config_SecurityConfig_PacketSignaturePolicy { + /* Prefer authenticated packets while retaining compatibility with unsigned packets from nodes not known to sign. + This is the default and rejects unsigned, signable broadcasts from nodes that have previously signed. */ + meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_BALANCED = 0, + /* Accept unsigned packets for maximum compatibility while still rejecting malformed or invalid signatures. */ + meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_COMPATIBLE = 1, + /* Accept only packets authenticated by a verified XEdDSA signature or successful PKI decryption. + Unsigned, malformed, invalid, or unverifiable packets are ignored. */ + meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_STRICT = 2 +} meshtastic_Config_SecurityConfig_PacketSignaturePolicy; + /* Struct definitions */ /* Configuration */ typedef struct _meshtastic_Config_DeviceConfig { @@ -400,11 +469,9 @@ typedef struct _meshtastic_Config_PositionConfig { uint32_t rx_gpio; /* (Re)define GPS_TX_PIN for your board. */ uint32_t tx_gpio; - /* The minimum distance in meters traveled (since the last send) before we can send a position to the mesh if - * position_broadcast_smart_enabled */ + /* The minimum distance in meters traveled (since the last send) before we can send a position to the mesh if position_broadcast_smart_enabled */ uint32_t broadcast_smart_minimum_distance; - /* The minimum number of seconds (since the last send) before we can send a position to the mesh if - * position_broadcast_smart_enabled */ + /* The minimum number of seconds (since the last send) before we can send a position to the mesh if position_broadcast_smart_enabled */ uint32_t broadcast_smart_minimum_interval_secs; /* (Re)define PIN_GPS_EN for your board. */ uint32_t gps_en_gpio; @@ -415,8 +482,8 @@ typedef struct _meshtastic_Config_PositionConfig { /* Power Config\ See [Power Config](/docs/settings/config/power) for additional power config details. */ typedef struct _meshtastic_Config_PowerConfig { - /* Description: Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora - radio. Don't use this setting if you want to use your device with the phone apps or are using a device without a user button. + /* Description: Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio. + Don't use this setting if you want to use your device with the phone apps or are using a device without a user button. Technical Details: Works for ESP32 devices and NRF52 devices in the Sensor or Tracker roles */ bool is_power_saving; /* Description: If non-zero, the device will fully power off this many seconds after external power is removed. */ @@ -437,8 +504,8 @@ typedef struct _meshtastic_Config_PowerConfig { /* Description: In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on Technical Details: ESP32 Only 0 for default of 300 */ uint32_t ls_secs; - /* Description: While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in - no BLE mode for this value Technical Details: ESP32 Only 0 for default of 10 seconds */ + /* Description: While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in no BLE mode for this value + Technical Details: ESP32 Only 0 for default of 10 seconds */ uint32_t min_wake_secs; /* I2C address of INA_2XX to use for reading device battery voltage */ uint8_t device_battery_ina_address; @@ -594,6 +661,8 @@ typedef struct _meshtastic_Config_LoRaConfig { bool config_ok_to_mqtt; /* Set where LORA FEM is enabled, disabled, or not present */ meshtastic_Config_LoRaConfig_FEM_LNA_Mode fem_lna_mode; + /* Don't use radiolib to initialize the radio, instead listen for a serialHal connection */ + bool serial_hal_only; } meshtastic_Config_LoRaConfig; typedef struct _meshtastic_Config_BluetoothConfig { @@ -628,6 +697,8 @@ typedef struct _meshtastic_Config_SecurityConfig { bool debug_log_api_enabled; /* Allow incoming device control over the insecure legacy admin channel. */ bool admin_channel_enabled; + /* Determines the packet signature policy applied to remotely received mesh packets. */ + meshtastic_Config_SecurityConfig_PacketSignaturePolicy packet_signature_policy; } meshtastic_Config_SecurityConfig; /* Blank config request, strictly for getting the session key */ @@ -637,7 +708,7 @@ typedef struct _meshtastic_Config_SessionkeyConfig { typedef struct _meshtastic_Config { pb_size_t which_payload_variant; - union _meshtastic_Config_payload_variant { + union { meshtastic_Config_DeviceConfig device; meshtastic_Config_PositionConfig position; meshtastic_Config_PowerConfig power; @@ -651,6 +722,7 @@ typedef struct _meshtastic_Config { } payload_variant; } meshtastic_Config; + #ifdef __cplusplus extern "C" { #endif @@ -658,88 +730,72 @@ extern "C" { /* Helper constants for enums */ #define _meshtastic_Config_DeviceConfig_Role_MIN meshtastic_Config_DeviceConfig_Role_CLIENT #define _meshtastic_Config_DeviceConfig_Role_MAX meshtastic_Config_DeviceConfig_Role_CLIENT_BASE -#define _meshtastic_Config_DeviceConfig_Role_ARRAYSIZE \ - ((meshtastic_Config_DeviceConfig_Role)(meshtastic_Config_DeviceConfig_Role_CLIENT_BASE + 1)) +#define _meshtastic_Config_DeviceConfig_Role_ARRAYSIZE ((meshtastic_Config_DeviceConfig_Role)(meshtastic_Config_DeviceConfig_Role_CLIENT_BASE+1)) #define _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN meshtastic_Config_DeviceConfig_RebroadcastMode_ALL #define _meshtastic_Config_DeviceConfig_RebroadcastMode_MAX meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY -#define _meshtastic_Config_DeviceConfig_RebroadcastMode_ARRAYSIZE \ - ((meshtastic_Config_DeviceConfig_RebroadcastMode)(meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY + 1)) +#define _meshtastic_Config_DeviceConfig_RebroadcastMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_RebroadcastMode)(meshtastic_Config_DeviceConfig_RebroadcastMode_CORE_PORTNUMS_ONLY+1)) #define _meshtastic_Config_DeviceConfig_BuzzerMode_MIN meshtastic_Config_DeviceConfig_BuzzerMode_ALL_ENABLED #define _meshtastic_Config_DeviceConfig_BuzzerMode_MAX meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY -#define _meshtastic_Config_DeviceConfig_BuzzerMode_ARRAYSIZE \ - ((meshtastic_Config_DeviceConfig_BuzzerMode)(meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY + 1)) +#define _meshtastic_Config_DeviceConfig_BuzzerMode_ARRAYSIZE ((meshtastic_Config_DeviceConfig_BuzzerMode)(meshtastic_Config_DeviceConfig_BuzzerMode_DIRECT_MSG_ONLY+1)) #define _meshtastic_Config_PositionConfig_PositionFlags_MIN meshtastic_Config_PositionConfig_PositionFlags_UNSET #define _meshtastic_Config_PositionConfig_PositionFlags_MAX meshtastic_Config_PositionConfig_PositionFlags_SPEED -#define _meshtastic_Config_PositionConfig_PositionFlags_ARRAYSIZE \ - ((meshtastic_Config_PositionConfig_PositionFlags)(meshtastic_Config_PositionConfig_PositionFlags_SPEED + 1)) +#define _meshtastic_Config_PositionConfig_PositionFlags_ARRAYSIZE ((meshtastic_Config_PositionConfig_PositionFlags)(meshtastic_Config_PositionConfig_PositionFlags_SPEED+1)) #define _meshtastic_Config_PositionConfig_GpsMode_MIN meshtastic_Config_PositionConfig_GpsMode_DISABLED #define _meshtastic_Config_PositionConfig_GpsMode_MAX meshtastic_Config_PositionConfig_GpsMode_NOT_PRESENT -#define _meshtastic_Config_PositionConfig_GpsMode_ARRAYSIZE \ - ((meshtastic_Config_PositionConfig_GpsMode)(meshtastic_Config_PositionConfig_GpsMode_NOT_PRESENT + 1)) +#define _meshtastic_Config_PositionConfig_GpsMode_ARRAYSIZE ((meshtastic_Config_PositionConfig_GpsMode)(meshtastic_Config_PositionConfig_GpsMode_NOT_PRESENT+1)) #define _meshtastic_Config_NetworkConfig_AddressMode_MIN meshtastic_Config_NetworkConfig_AddressMode_DHCP #define _meshtastic_Config_NetworkConfig_AddressMode_MAX meshtastic_Config_NetworkConfig_AddressMode_STATIC -#define _meshtastic_Config_NetworkConfig_AddressMode_ARRAYSIZE \ - ((meshtastic_Config_NetworkConfig_AddressMode)(meshtastic_Config_NetworkConfig_AddressMode_STATIC + 1)) +#define _meshtastic_Config_NetworkConfig_AddressMode_ARRAYSIZE ((meshtastic_Config_NetworkConfig_AddressMode)(meshtastic_Config_NetworkConfig_AddressMode_STATIC+1)) #define _meshtastic_Config_NetworkConfig_ProtocolFlags_MIN meshtastic_Config_NetworkConfig_ProtocolFlags_NO_BROADCAST #define _meshtastic_Config_NetworkConfig_ProtocolFlags_MAX meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST -#define _meshtastic_Config_NetworkConfig_ProtocolFlags_ARRAYSIZE \ - ((meshtastic_Config_NetworkConfig_ProtocolFlags)(meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST + 1)) +#define _meshtastic_Config_NetworkConfig_ProtocolFlags_ARRAYSIZE ((meshtastic_Config_NetworkConfig_ProtocolFlags)(meshtastic_Config_NetworkConfig_ProtocolFlags_UDP_BROADCAST+1)) -#define _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN \ - meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_UNUSED -#define _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MAX \ - meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_UNUSED -#define _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_ARRAYSIZE \ - ((meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat)(meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_UNUSED + \ - 1)) +#define _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_UNUSED +#define _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MAX meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_UNUSED +#define _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_ARRAYSIZE ((meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat)(meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_UNUSED+1)) #define _meshtastic_Config_DisplayConfig_DisplayUnits_MIN meshtastic_Config_DisplayConfig_DisplayUnits_METRIC #define _meshtastic_Config_DisplayConfig_DisplayUnits_MAX meshtastic_Config_DisplayConfig_DisplayUnits_IMPERIAL -#define _meshtastic_Config_DisplayConfig_DisplayUnits_ARRAYSIZE \ - ((meshtastic_Config_DisplayConfig_DisplayUnits)(meshtastic_Config_DisplayConfig_DisplayUnits_IMPERIAL + 1)) +#define _meshtastic_Config_DisplayConfig_DisplayUnits_ARRAYSIZE ((meshtastic_Config_DisplayConfig_DisplayUnits)(meshtastic_Config_DisplayConfig_DisplayUnits_IMPERIAL+1)) #define _meshtastic_Config_DisplayConfig_OledType_MIN meshtastic_Config_DisplayConfig_OledType_OLED_AUTO -#define _meshtastic_Config_DisplayConfig_OledType_MAX meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_128_128 -#define _meshtastic_Config_DisplayConfig_OledType_ARRAYSIZE \ - ((meshtastic_Config_DisplayConfig_OledType)(meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_128_128 + 1)) +#define _meshtastic_Config_DisplayConfig_OledType_MAX meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_ROTATED +#define _meshtastic_Config_DisplayConfig_OledType_ARRAYSIZE ((meshtastic_Config_DisplayConfig_OledType)(meshtastic_Config_DisplayConfig_OledType_OLED_SH1107_ROTATED+1)) #define _meshtastic_Config_DisplayConfig_DisplayMode_MIN meshtastic_Config_DisplayConfig_DisplayMode_DEFAULT #define _meshtastic_Config_DisplayConfig_DisplayMode_MAX meshtastic_Config_DisplayConfig_DisplayMode_COLOR -#define _meshtastic_Config_DisplayConfig_DisplayMode_ARRAYSIZE \ - ((meshtastic_Config_DisplayConfig_DisplayMode)(meshtastic_Config_DisplayConfig_DisplayMode_COLOR + 1)) +#define _meshtastic_Config_DisplayConfig_DisplayMode_ARRAYSIZE ((meshtastic_Config_DisplayConfig_DisplayMode)(meshtastic_Config_DisplayConfig_DisplayMode_COLOR+1)) #define _meshtastic_Config_DisplayConfig_CompassOrientation_MIN meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_0 -#define _meshtastic_Config_DisplayConfig_CompassOrientation_MAX \ - meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED -#define _meshtastic_Config_DisplayConfig_CompassOrientation_ARRAYSIZE \ - ((meshtastic_Config_DisplayConfig_CompassOrientation)(meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED + \ - 1)) +#define _meshtastic_Config_DisplayConfig_CompassOrientation_MAX meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED +#define _meshtastic_Config_DisplayConfig_CompassOrientation_ARRAYSIZE ((meshtastic_Config_DisplayConfig_CompassOrientation)(meshtastic_Config_DisplayConfig_CompassOrientation_DEGREES_270_INVERTED+1)) #define _meshtastic_Config_LoRaConfig_RegionCode_MIN meshtastic_Config_LoRaConfig_RegionCode_UNSET -#define _meshtastic_Config_LoRaConfig_RegionCode_MAX meshtastic_Config_LoRaConfig_RegionCode_BR_902 -#define _meshtastic_Config_LoRaConfig_RegionCode_ARRAYSIZE \ - ((meshtastic_Config_LoRaConfig_RegionCode)(meshtastic_Config_LoRaConfig_RegionCode_BR_902 + 1)) +#define _meshtastic_Config_LoRaConfig_RegionCode_MAX meshtastic_Config_LoRaConfig_RegionCode_ITU2_125CM +#define _meshtastic_Config_LoRaConfig_RegionCode_ARRAYSIZE ((meshtastic_Config_LoRaConfig_RegionCode)(meshtastic_Config_LoRaConfig_RegionCode_ITU2_125CM+1)) #define _meshtastic_Config_LoRaConfig_ModemPreset_MIN meshtastic_Config_LoRaConfig_ModemPreset_LONG_FAST -#define _meshtastic_Config_LoRaConfig_ModemPreset_MAX meshtastic_Config_LoRaConfig_ModemPreset_LONG_TURBO -#define _meshtastic_Config_LoRaConfig_ModemPreset_ARRAYSIZE \ - ((meshtastic_Config_LoRaConfig_ModemPreset)(meshtastic_Config_LoRaConfig_ModemPreset_LONG_TURBO + 1)) +#define _meshtastic_Config_LoRaConfig_ModemPreset_MAX meshtastic_Config_LoRaConfig_ModemPreset_TINY_SLOW +#define _meshtastic_Config_LoRaConfig_ModemPreset_ARRAYSIZE ((meshtastic_Config_LoRaConfig_ModemPreset)(meshtastic_Config_LoRaConfig_ModemPreset_TINY_SLOW+1)) #define _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_MIN meshtastic_Config_LoRaConfig_FEM_LNA_Mode_DISABLED #define _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_MAX meshtastic_Config_LoRaConfig_FEM_LNA_Mode_NOT_PRESENT -#define _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_ARRAYSIZE \ - ((meshtastic_Config_LoRaConfig_FEM_LNA_Mode)(meshtastic_Config_LoRaConfig_FEM_LNA_Mode_NOT_PRESENT + 1)) +#define _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_ARRAYSIZE ((meshtastic_Config_LoRaConfig_FEM_LNA_Mode)(meshtastic_Config_LoRaConfig_FEM_LNA_Mode_NOT_PRESENT+1)) #define _meshtastic_Config_BluetoothConfig_PairingMode_MIN meshtastic_Config_BluetoothConfig_PairingMode_RANDOM_PIN #define _meshtastic_Config_BluetoothConfig_PairingMode_MAX meshtastic_Config_BluetoothConfig_PairingMode_NO_PIN -#define _meshtastic_Config_BluetoothConfig_PairingMode_ARRAYSIZE \ - ((meshtastic_Config_BluetoothConfig_PairingMode)(meshtastic_Config_BluetoothConfig_PairingMode_NO_PIN + 1)) +#define _meshtastic_Config_BluetoothConfig_PairingMode_ARRAYSIZE ((meshtastic_Config_BluetoothConfig_PairingMode)(meshtastic_Config_BluetoothConfig_PairingMode_NO_PIN+1)) + +#define _meshtastic_Config_SecurityConfig_PacketSignaturePolicy_MIN meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_BALANCED +#define _meshtastic_Config_SecurityConfig_PacketSignaturePolicy_MAX meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_STRICT +#define _meshtastic_Config_SecurityConfig_PacketSignaturePolicy_ARRAYSIZE ((meshtastic_Config_SecurityConfig_PacketSignaturePolicy)(meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_STRICT+1)) + #define meshtastic_Config_DeviceConfig_role_ENUMTYPE meshtastic_Config_DeviceConfig_Role #define meshtastic_Config_DeviceConfig_rebroadcast_mode_ENUMTYPE meshtastic_Config_DeviceConfig_RebroadcastMode @@ -747,8 +803,10 @@ extern "C" { #define meshtastic_Config_PositionConfig_gps_mode_ENUMTYPE meshtastic_Config_PositionConfig_GpsMode + #define meshtastic_Config_NetworkConfig_address_mode_ENUMTYPE meshtastic_Config_NetworkConfig_AddressMode + #define meshtastic_Config_DisplayConfig_gps_format_ENUMTYPE meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat #define meshtastic_Config_DisplayConfig_units_ENUMTYPE meshtastic_Config_DisplayConfig_DisplayUnits #define meshtastic_Config_DisplayConfig_oled_ENUMTYPE meshtastic_Config_DisplayConfig_OledType @@ -761,116 +819,36 @@ extern "C" { #define meshtastic_Config_BluetoothConfig_mode_ENUMTYPE meshtastic_Config_BluetoothConfig_PairingMode +#define meshtastic_Config_SecurityConfig_packet_signature_policy_ENUMTYPE meshtastic_Config_SecurityConfig_PacketSignaturePolicy + + + /* Initializer values for message structs */ -#define meshtastic_Config_init_default \ - { \ - 0, \ - { \ - meshtastic_Config_DeviceConfig_init_default \ - } \ - } -#define meshtastic_Config_DeviceConfig_init_default \ - { \ - _meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", \ - 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN \ - } -#define meshtastic_Config_PositionConfig_init_default \ - { \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN \ - } -#define meshtastic_Config_PowerConfig_init_default \ - { \ - 0, 0, 0, 0, 0, 0, 0, 0, 0 \ - } -#define meshtastic_Config_NetworkConfig_init_default \ - { \ - 0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, \ - meshtastic_Config_NetworkConfig_IpV4Config_init_default, "", 0, 0 \ - } -#define meshtastic_Config_NetworkConfig_IpV4Config_init_default \ - { \ - 0, 0, 0, 0 \ - } -#define meshtastic_Config_DisplayConfig_init_default \ - { \ - 0, _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN, 0, 0, 0, \ - _meshtastic_Config_DisplayConfig_DisplayUnits_MIN, _meshtastic_Config_DisplayConfig_OledType_MIN, \ - _meshtastic_Config_DisplayConfig_DisplayMode_MIN, 0, 0, _meshtastic_Config_DisplayConfig_CompassOrientation_MIN, 0, \ - 0, 0 \ - } -#define meshtastic_Config_LoRaConfig_init_default \ - { \ - 0, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _meshtastic_Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_MIN \ - } -#define meshtastic_Config_BluetoothConfig_init_default \ - { \ - 0, _meshtastic_Config_BluetoothConfig_PairingMode_MIN, 0 \ - } -#define meshtastic_Config_SecurityConfig_init_default \ - { \ - {0, {0}}, {0, {0}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}}, 0, 0, 0, 0 \ - } -#define meshtastic_Config_SessionkeyConfig_init_default \ - { \ - 0 \ - } -#define meshtastic_Config_init_zero \ - { \ - 0, \ - { \ - meshtastic_Config_DeviceConfig_init_zero \ - } \ - } -#define meshtastic_Config_DeviceConfig_init_zero \ - { \ - _meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", \ - 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN \ - } -#define meshtastic_Config_PositionConfig_init_zero \ - { \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN \ - } -#define meshtastic_Config_PowerConfig_init_zero \ - { \ - 0, 0, 0, 0, 0, 0, 0, 0, 0 \ - } -#define meshtastic_Config_NetworkConfig_init_zero \ - { \ - 0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, \ - meshtastic_Config_NetworkConfig_IpV4Config_init_zero, "", 0, 0 \ - } -#define meshtastic_Config_NetworkConfig_IpV4Config_init_zero \ - { \ - 0, 0, 0, 0 \ - } -#define meshtastic_Config_DisplayConfig_init_zero \ - { \ - 0, _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN, 0, 0, 0, \ - _meshtastic_Config_DisplayConfig_DisplayUnits_MIN, _meshtastic_Config_DisplayConfig_OledType_MIN, \ - _meshtastic_Config_DisplayConfig_DisplayMode_MIN, 0, 0, _meshtastic_Config_DisplayConfig_CompassOrientation_MIN, 0, \ - 0, 0 \ - } -#define meshtastic_Config_LoRaConfig_init_zero \ - { \ - 0, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _meshtastic_Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_MIN \ - } -#define meshtastic_Config_BluetoothConfig_init_zero \ - { \ - 0, _meshtastic_Config_BluetoothConfig_PairingMode_MIN, 0 \ - } -#define meshtastic_Config_SecurityConfig_init_zero \ - { \ - {0, {0}}, {0, {0}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}}, 0, 0, 0, 0 \ - } -#define meshtastic_Config_SessionkeyConfig_init_zero \ - { \ - 0 \ - } +#define meshtastic_Config_init_default {0, {meshtastic_Config_DeviceConfig_init_default}} +#define meshtastic_Config_DeviceConfig_init_default {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN} +#define meshtastic_Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN} +#define meshtastic_Config_PowerConfig_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0} +#define meshtastic_Config_NetworkConfig_init_default {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_default, "", 0, 0} +#define meshtastic_Config_NetworkConfig_IpV4Config_init_default {0, 0, 0, 0} +#define meshtastic_Config_DisplayConfig_init_default {0, _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN, 0, 0, 0, _meshtastic_Config_DisplayConfig_DisplayUnits_MIN, _meshtastic_Config_DisplayConfig_OledType_MIN, _meshtastic_Config_DisplayConfig_DisplayMode_MIN, 0, 0, _meshtastic_Config_DisplayConfig_CompassOrientation_MIN, 0, 0, 0} +#define meshtastic_Config_LoRaConfig_init_default {0, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _meshtastic_Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_MIN, 0} +#define meshtastic_Config_BluetoothConfig_init_default {0, _meshtastic_Config_BluetoothConfig_PairingMode_MIN, 0} +#define meshtastic_Config_SecurityConfig_init_default {{0, {0}}, {0, {0}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}}, 0, 0, 0, 0, _meshtastic_Config_SecurityConfig_PacketSignaturePolicy_MIN} +#define meshtastic_Config_SessionkeyConfig_init_default {0} +#define meshtastic_Config_init_zero {0, {meshtastic_Config_DeviceConfig_init_zero}} +#define meshtastic_Config_DeviceConfig_init_zero {_meshtastic_Config_DeviceConfig_Role_MIN, 0, 0, 0, _meshtastic_Config_DeviceConfig_RebroadcastMode_MIN, 0, 0, 0, 0, "", 0, _meshtastic_Config_DeviceConfig_BuzzerMode_MIN} +#define meshtastic_Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _meshtastic_Config_PositionConfig_GpsMode_MIN} +#define meshtastic_Config_PowerConfig_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0} +#define meshtastic_Config_NetworkConfig_init_zero {0, "", "", "", 0, _meshtastic_Config_NetworkConfig_AddressMode_MIN, false, meshtastic_Config_NetworkConfig_IpV4Config_init_zero, "", 0, 0} +#define meshtastic_Config_NetworkConfig_IpV4Config_init_zero {0, 0, 0, 0} +#define meshtastic_Config_DisplayConfig_init_zero {0, _meshtastic_Config_DisplayConfig_DeprecatedGpsCoordinateFormat_MIN, 0, 0, 0, _meshtastic_Config_DisplayConfig_DisplayUnits_MIN, _meshtastic_Config_DisplayConfig_OledType_MIN, _meshtastic_Config_DisplayConfig_DisplayMode_MIN, 0, 0, _meshtastic_Config_DisplayConfig_CompassOrientation_MIN, 0, 0, 0} +#define meshtastic_Config_LoRaConfig_init_zero {0, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _meshtastic_Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0}, 0, 0, _meshtastic_Config_LoRaConfig_FEM_LNA_Mode_MIN, 0} +#define meshtastic_Config_BluetoothConfig_init_zero {0, _meshtastic_Config_BluetoothConfig_PairingMode_MIN, 0} +#define meshtastic_Config_SecurityConfig_init_zero {{0, {0}}, {0, {0}}, 0, {{0, {0}}, {0, {0}}, {0, {0}}}, 0, 0, 0, 0, _meshtastic_Config_SecurityConfig_PacketSignaturePolicy_MIN} +#define meshtastic_Config_SessionkeyConfig_init_zero {0} /* Field tags (for use in manual encoding/decoding) */ -#define meshtastic_Config_DeviceConfig_role_tag 1 +#define meshtastic_Config_DeviceConfig_role_tag 1 #define meshtastic_Config_DeviceConfig_serial_enabled_tag 2 #define meshtastic_Config_DeviceConfig_button_gpio_tag 4 #define meshtastic_Config_DeviceConfig_buzzer_gpio_tag 5 @@ -938,7 +916,7 @@ extern "C" { #define meshtastic_Config_LoRaConfig_spread_factor_tag 4 #define meshtastic_Config_LoRaConfig_coding_rate_tag 5 #define meshtastic_Config_LoRaConfig_frequency_offset_tag 6 -#define meshtastic_Config_LoRaConfig_region_tag 7 +#define meshtastic_Config_LoRaConfig_region_tag 7 #define meshtastic_Config_LoRaConfig_hop_limit_tag 8 #define meshtastic_Config_LoRaConfig_tx_enabled_tag 9 #define meshtastic_Config_LoRaConfig_tx_power_tag 10 @@ -951,6 +929,7 @@ extern "C" { #define meshtastic_Config_LoRaConfig_ignore_mqtt_tag 104 #define meshtastic_Config_LoRaConfig_config_ok_to_mqtt_tag 105 #define meshtastic_Config_LoRaConfig_fem_lna_mode_tag 106 +#define meshtastic_Config_LoRaConfig_serial_hal_only_tag 107 #define meshtastic_Config_BluetoothConfig_enabled_tag 1 #define meshtastic_Config_BluetoothConfig_mode_tag 2 #define meshtastic_Config_BluetoothConfig_fixed_pin_tag 3 @@ -961,29 +940,30 @@ extern "C" { #define meshtastic_Config_SecurityConfig_serial_enabled_tag 5 #define meshtastic_Config_SecurityConfig_debug_log_api_enabled_tag 6 #define meshtastic_Config_SecurityConfig_admin_channel_enabled_tag 8 -#define meshtastic_Config_device_tag 1 -#define meshtastic_Config_position_tag 2 -#define meshtastic_Config_power_tag 3 -#define meshtastic_Config_network_tag 4 -#define meshtastic_Config_display_tag 5 -#define meshtastic_Config_lora_tag 6 -#define meshtastic_Config_bluetooth_tag 7 -#define meshtastic_Config_security_tag 8 -#define meshtastic_Config_sessionkey_tag 9 -#define meshtastic_Config_device_ui_tag 10 +#define meshtastic_Config_SecurityConfig_packet_signature_policy_tag 9 +#define meshtastic_Config_device_tag 1 +#define meshtastic_Config_position_tag 2 +#define meshtastic_Config_power_tag 3 +#define meshtastic_Config_network_tag 4 +#define meshtastic_Config_display_tag 5 +#define meshtastic_Config_lora_tag 6 +#define meshtastic_Config_bluetooth_tag 7 +#define meshtastic_Config_security_tag 8 +#define meshtastic_Config_sessionkey_tag 9 +#define meshtastic_Config_device_ui_tag 10 /* Struct field encoding specification for nanopb */ -#define meshtastic_Config_FIELDLIST(X, a) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, device, payload_variant.device), 1) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, position, payload_variant.position), 2) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, power, payload_variant.power), 3) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, network, payload_variant.network), 4) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, display, payload_variant.display), 5) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, lora, payload_variant.lora), 6) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, bluetooth, payload_variant.bluetooth), 7) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, security, payload_variant.security), 8) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, sessionkey, payload_variant.sessionkey), 9) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, device_ui, payload_variant.device_ui), 10) +#define meshtastic_Config_FIELDLIST(X, a) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,device,payload_variant.device), 1) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,position,payload_variant.position), 2) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,power,payload_variant.power), 3) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,network,payload_variant.network), 4) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,display,payload_variant.display), 5) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,lora,payload_variant.lora), 6) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,bluetooth,payload_variant.bluetooth), 7) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,security,payload_variant.security), 8) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,sessionkey,payload_variant.sessionkey), 9) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,device_ui,payload_variant.device_ui), 10) #define meshtastic_Config_CALLBACK NULL #define meshtastic_Config_DEFAULT NULL #define meshtastic_Config_payload_variant_device_MSGTYPE meshtastic_Config_DeviceConfig @@ -997,135 +977,137 @@ extern "C" { #define meshtastic_Config_payload_variant_sessionkey_MSGTYPE meshtastic_Config_SessionkeyConfig #define meshtastic_Config_payload_variant_device_ui_MSGTYPE meshtastic_DeviceUIConfig -#define meshtastic_Config_DeviceConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UENUM, role, 1) \ - X(a, STATIC, SINGULAR, BOOL, serial_enabled, 2) \ - X(a, STATIC, SINGULAR, UINT32, button_gpio, 4) \ - X(a, STATIC, SINGULAR, UINT32, buzzer_gpio, 5) \ - X(a, STATIC, SINGULAR, UENUM, rebroadcast_mode, 6) \ - X(a, STATIC, SINGULAR, UINT32, node_info_broadcast_secs, 7) \ - X(a, STATIC, SINGULAR, BOOL, double_tap_as_button_press, 8) \ - X(a, STATIC, SINGULAR, BOOL, is_managed, 9) \ - X(a, STATIC, SINGULAR, BOOL, disable_triple_click, 10) \ - X(a, STATIC, SINGULAR, STRING, tzdef, 11) \ - X(a, STATIC, SINGULAR, BOOL, led_heartbeat_disabled, 12) \ - X(a, STATIC, SINGULAR, UENUM, buzzer_mode, 13) +#define meshtastic_Config_DeviceConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, role, 1) \ +X(a, STATIC, SINGULAR, BOOL, serial_enabled, 2) \ +X(a, STATIC, SINGULAR, UINT32, button_gpio, 4) \ +X(a, STATIC, SINGULAR, UINT32, buzzer_gpio, 5) \ +X(a, STATIC, SINGULAR, UENUM, rebroadcast_mode, 6) \ +X(a, STATIC, SINGULAR, UINT32, node_info_broadcast_secs, 7) \ +X(a, STATIC, SINGULAR, BOOL, double_tap_as_button_press, 8) \ +X(a, STATIC, SINGULAR, BOOL, is_managed, 9) \ +X(a, STATIC, SINGULAR, BOOL, disable_triple_click, 10) \ +X(a, STATIC, SINGULAR, STRING, tzdef, 11) \ +X(a, STATIC, SINGULAR, BOOL, led_heartbeat_disabled, 12) \ +X(a, STATIC, SINGULAR, UENUM, buzzer_mode, 13) #define meshtastic_Config_DeviceConfig_CALLBACK NULL #define meshtastic_Config_DeviceConfig_DEFAULT NULL -#define meshtastic_Config_PositionConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, position_broadcast_secs, 1) \ - X(a, STATIC, SINGULAR, BOOL, position_broadcast_smart_enabled, 2) \ - X(a, STATIC, SINGULAR, BOOL, fixed_position, 3) \ - X(a, STATIC, SINGULAR, BOOL, gps_enabled, 4) \ - X(a, STATIC, SINGULAR, UINT32, gps_update_interval, 5) \ - X(a, STATIC, SINGULAR, UINT32, gps_attempt_time, 6) \ - X(a, STATIC, SINGULAR, UINT32, position_flags, 7) \ - X(a, STATIC, SINGULAR, UINT32, rx_gpio, 8) \ - X(a, STATIC, SINGULAR, UINT32, tx_gpio, 9) \ - X(a, STATIC, SINGULAR, UINT32, broadcast_smart_minimum_distance, 10) \ - X(a, STATIC, SINGULAR, UINT32, broadcast_smart_minimum_interval_secs, 11) \ - X(a, STATIC, SINGULAR, UINT32, gps_en_gpio, 12) \ - X(a, STATIC, SINGULAR, UENUM, gps_mode, 13) +#define meshtastic_Config_PositionConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, position_broadcast_secs, 1) \ +X(a, STATIC, SINGULAR, BOOL, position_broadcast_smart_enabled, 2) \ +X(a, STATIC, SINGULAR, BOOL, fixed_position, 3) \ +X(a, STATIC, SINGULAR, BOOL, gps_enabled, 4) \ +X(a, STATIC, SINGULAR, UINT32, gps_update_interval, 5) \ +X(a, STATIC, SINGULAR, UINT32, gps_attempt_time, 6) \ +X(a, STATIC, SINGULAR, UINT32, position_flags, 7) \ +X(a, STATIC, SINGULAR, UINT32, rx_gpio, 8) \ +X(a, STATIC, SINGULAR, UINT32, tx_gpio, 9) \ +X(a, STATIC, SINGULAR, UINT32, broadcast_smart_minimum_distance, 10) \ +X(a, STATIC, SINGULAR, UINT32, broadcast_smart_minimum_interval_secs, 11) \ +X(a, STATIC, SINGULAR, UINT32, gps_en_gpio, 12) \ +X(a, STATIC, SINGULAR, UENUM, gps_mode, 13) #define meshtastic_Config_PositionConfig_CALLBACK NULL #define meshtastic_Config_PositionConfig_DEFAULT NULL -#define meshtastic_Config_PowerConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, BOOL, is_power_saving, 1) \ - X(a, STATIC, SINGULAR, UINT32, on_battery_shutdown_after_secs, 2) \ - X(a, STATIC, SINGULAR, FLOAT, adc_multiplier_override, 3) \ - X(a, STATIC, SINGULAR, UINT32, wait_bluetooth_secs, 4) \ - X(a, STATIC, SINGULAR, UINT32, sds_secs, 6) \ - X(a, STATIC, SINGULAR, UINT32, ls_secs, 7) \ - X(a, STATIC, SINGULAR, UINT32, min_wake_secs, 8) \ - X(a, STATIC, SINGULAR, UINT32, device_battery_ina_address, 9) \ - X(a, STATIC, SINGULAR, UINT64, powermon_enables, 32) +#define meshtastic_Config_PowerConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, BOOL, is_power_saving, 1) \ +X(a, STATIC, SINGULAR, UINT32, on_battery_shutdown_after_secs, 2) \ +X(a, STATIC, SINGULAR, FLOAT, adc_multiplier_override, 3) \ +X(a, STATIC, SINGULAR, UINT32, wait_bluetooth_secs, 4) \ +X(a, STATIC, SINGULAR, UINT32, sds_secs, 6) \ +X(a, STATIC, SINGULAR, UINT32, ls_secs, 7) \ +X(a, STATIC, SINGULAR, UINT32, min_wake_secs, 8) \ +X(a, STATIC, SINGULAR, UINT32, device_battery_ina_address, 9) \ +X(a, STATIC, SINGULAR, UINT64, powermon_enables, 32) #define meshtastic_Config_PowerConfig_CALLBACK NULL #define meshtastic_Config_PowerConfig_DEFAULT NULL -#define meshtastic_Config_NetworkConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, BOOL, wifi_enabled, 1) \ - X(a, STATIC, SINGULAR, STRING, wifi_ssid, 3) \ - X(a, STATIC, SINGULAR, STRING, wifi_psk, 4) \ - X(a, STATIC, SINGULAR, STRING, ntp_server, 5) \ - X(a, STATIC, SINGULAR, BOOL, eth_enabled, 6) \ - X(a, STATIC, SINGULAR, UENUM, address_mode, 7) \ - X(a, STATIC, OPTIONAL, MESSAGE, ipv4_config, 8) \ - X(a, STATIC, SINGULAR, STRING, rsyslog_server, 9) \ - X(a, STATIC, SINGULAR, UINT32, enabled_protocols, 10) \ - X(a, STATIC, SINGULAR, BOOL, ipv6_enabled, 11) +#define meshtastic_Config_NetworkConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, BOOL, wifi_enabled, 1) \ +X(a, STATIC, SINGULAR, STRING, wifi_ssid, 3) \ +X(a, STATIC, SINGULAR, STRING, wifi_psk, 4) \ +X(a, STATIC, SINGULAR, STRING, ntp_server, 5) \ +X(a, STATIC, SINGULAR, BOOL, eth_enabled, 6) \ +X(a, STATIC, SINGULAR, UENUM, address_mode, 7) \ +X(a, STATIC, OPTIONAL, MESSAGE, ipv4_config, 8) \ +X(a, STATIC, SINGULAR, STRING, rsyslog_server, 9) \ +X(a, STATIC, SINGULAR, UINT32, enabled_protocols, 10) \ +X(a, STATIC, SINGULAR, BOOL, ipv6_enabled, 11) #define meshtastic_Config_NetworkConfig_CALLBACK NULL #define meshtastic_Config_NetworkConfig_DEFAULT NULL #define meshtastic_Config_NetworkConfig_ipv4_config_MSGTYPE meshtastic_Config_NetworkConfig_IpV4Config -#define meshtastic_Config_NetworkConfig_IpV4Config_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, FIXED32, ip, 1) \ - X(a, STATIC, SINGULAR, FIXED32, gateway, 2) \ - X(a, STATIC, SINGULAR, FIXED32, subnet, 3) \ - X(a, STATIC, SINGULAR, FIXED32, dns, 4) +#define meshtastic_Config_NetworkConfig_IpV4Config_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, FIXED32, ip, 1) \ +X(a, STATIC, SINGULAR, FIXED32, gateway, 2) \ +X(a, STATIC, SINGULAR, FIXED32, subnet, 3) \ +X(a, STATIC, SINGULAR, FIXED32, dns, 4) #define meshtastic_Config_NetworkConfig_IpV4Config_CALLBACK NULL #define meshtastic_Config_NetworkConfig_IpV4Config_DEFAULT NULL -#define meshtastic_Config_DisplayConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, screen_on_secs, 1) \ - X(a, STATIC, SINGULAR, UENUM, gps_format, 2) \ - X(a, STATIC, SINGULAR, UINT32, auto_screen_carousel_secs, 3) \ - X(a, STATIC, SINGULAR, BOOL, compass_north_top, 4) \ - X(a, STATIC, SINGULAR, BOOL, flip_screen, 5) \ - X(a, STATIC, SINGULAR, UENUM, units, 6) \ - X(a, STATIC, SINGULAR, UENUM, oled, 7) \ - X(a, STATIC, SINGULAR, UENUM, displaymode, 8) \ - X(a, STATIC, SINGULAR, BOOL, heading_bold, 9) \ - X(a, STATIC, SINGULAR, BOOL, wake_on_tap_or_motion, 10) \ - X(a, STATIC, SINGULAR, UENUM, compass_orientation, 11) \ - X(a, STATIC, SINGULAR, BOOL, use_12h_clock, 12) \ - X(a, STATIC, SINGULAR, BOOL, use_long_node_name, 13) \ - X(a, STATIC, SINGULAR, BOOL, enable_message_bubbles, 14) +#define meshtastic_Config_DisplayConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, screen_on_secs, 1) \ +X(a, STATIC, SINGULAR, UENUM, gps_format, 2) \ +X(a, STATIC, SINGULAR, UINT32, auto_screen_carousel_secs, 3) \ +X(a, STATIC, SINGULAR, BOOL, compass_north_top, 4) \ +X(a, STATIC, SINGULAR, BOOL, flip_screen, 5) \ +X(a, STATIC, SINGULAR, UENUM, units, 6) \ +X(a, STATIC, SINGULAR, UENUM, oled, 7) \ +X(a, STATIC, SINGULAR, UENUM, displaymode, 8) \ +X(a, STATIC, SINGULAR, BOOL, heading_bold, 9) \ +X(a, STATIC, SINGULAR, BOOL, wake_on_tap_or_motion, 10) \ +X(a, STATIC, SINGULAR, UENUM, compass_orientation, 11) \ +X(a, STATIC, SINGULAR, BOOL, use_12h_clock, 12) \ +X(a, STATIC, SINGULAR, BOOL, use_long_node_name, 13) \ +X(a, STATIC, SINGULAR, BOOL, enable_message_bubbles, 14) #define meshtastic_Config_DisplayConfig_CALLBACK NULL #define meshtastic_Config_DisplayConfig_DEFAULT NULL -#define meshtastic_Config_LoRaConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, BOOL, use_preset, 1) \ - X(a, STATIC, SINGULAR, UENUM, modem_preset, 2) \ - X(a, STATIC, SINGULAR, UINT32, bandwidth, 3) \ - X(a, STATIC, SINGULAR, UINT32, spread_factor, 4) \ - X(a, STATIC, SINGULAR, UINT32, coding_rate, 5) \ - X(a, STATIC, SINGULAR, FLOAT, frequency_offset, 6) \ - X(a, STATIC, SINGULAR, UENUM, region, 7) \ - X(a, STATIC, SINGULAR, UINT32, hop_limit, 8) \ - X(a, STATIC, SINGULAR, BOOL, tx_enabled, 9) \ - X(a, STATIC, SINGULAR, INT32, tx_power, 10) \ - X(a, STATIC, SINGULAR, UINT32, channel_num, 11) \ - X(a, STATIC, SINGULAR, BOOL, override_duty_cycle, 12) \ - X(a, STATIC, SINGULAR, BOOL, sx126x_rx_boosted_gain, 13) \ - X(a, STATIC, SINGULAR, FLOAT, override_frequency, 14) \ - X(a, STATIC, SINGULAR, BOOL, pa_fan_disabled, 15) \ - X(a, STATIC, REPEATED, UINT32, ignore_incoming, 103) \ - X(a, STATIC, SINGULAR, BOOL, ignore_mqtt, 104) \ - X(a, STATIC, SINGULAR, BOOL, config_ok_to_mqtt, 105) \ - X(a, STATIC, SINGULAR, UENUM, fem_lna_mode, 106) +#define meshtastic_Config_LoRaConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, BOOL, use_preset, 1) \ +X(a, STATIC, SINGULAR, UENUM, modem_preset, 2) \ +X(a, STATIC, SINGULAR, UINT32, bandwidth, 3) \ +X(a, STATIC, SINGULAR, UINT32, spread_factor, 4) \ +X(a, STATIC, SINGULAR, UINT32, coding_rate, 5) \ +X(a, STATIC, SINGULAR, FLOAT, frequency_offset, 6) \ +X(a, STATIC, SINGULAR, UENUM, region, 7) \ +X(a, STATIC, SINGULAR, UINT32, hop_limit, 8) \ +X(a, STATIC, SINGULAR, BOOL, tx_enabled, 9) \ +X(a, STATIC, SINGULAR, INT32, tx_power, 10) \ +X(a, STATIC, SINGULAR, UINT32, channel_num, 11) \ +X(a, STATIC, SINGULAR, BOOL, override_duty_cycle, 12) \ +X(a, STATIC, SINGULAR, BOOL, sx126x_rx_boosted_gain, 13) \ +X(a, STATIC, SINGULAR, FLOAT, override_frequency, 14) \ +X(a, STATIC, SINGULAR, BOOL, pa_fan_disabled, 15) \ +X(a, STATIC, REPEATED, UINT32, ignore_incoming, 103) \ +X(a, STATIC, SINGULAR, BOOL, ignore_mqtt, 104) \ +X(a, STATIC, SINGULAR, BOOL, config_ok_to_mqtt, 105) \ +X(a, STATIC, SINGULAR, UENUM, fem_lna_mode, 106) \ +X(a, STATIC, SINGULAR, BOOL, serial_hal_only, 107) #define meshtastic_Config_LoRaConfig_CALLBACK NULL #define meshtastic_Config_LoRaConfig_DEFAULT NULL -#define meshtastic_Config_BluetoothConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, BOOL, enabled, 1) \ - X(a, STATIC, SINGULAR, UENUM, mode, 2) \ - X(a, STATIC, SINGULAR, UINT32, fixed_pin, 3) +#define meshtastic_Config_BluetoothConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, BOOL, enabled, 1) \ +X(a, STATIC, SINGULAR, UENUM, mode, 2) \ +X(a, STATIC, SINGULAR, UINT32, fixed_pin, 3) #define meshtastic_Config_BluetoothConfig_CALLBACK NULL #define meshtastic_Config_BluetoothConfig_DEFAULT NULL -#define meshtastic_Config_SecurityConfig_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, BYTES, public_key, 1) \ - X(a, STATIC, SINGULAR, BYTES, private_key, 2) \ - X(a, STATIC, REPEATED, BYTES, admin_key, 3) \ - X(a, STATIC, SINGULAR, BOOL, is_managed, 4) \ - X(a, STATIC, SINGULAR, BOOL, serial_enabled, 5) \ - X(a, STATIC, SINGULAR, BOOL, debug_log_api_enabled, 6) \ - X(a, STATIC, SINGULAR, BOOL, admin_channel_enabled, 8) +#define meshtastic_Config_SecurityConfig_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, BYTES, public_key, 1) \ +X(a, STATIC, SINGULAR, BYTES, private_key, 2) \ +X(a, STATIC, REPEATED, BYTES, admin_key, 3) \ +X(a, STATIC, SINGULAR, BOOL, is_managed, 4) \ +X(a, STATIC, SINGULAR, BOOL, serial_enabled, 5) \ +X(a, STATIC, SINGULAR, BOOL, debug_log_api_enabled, 6) \ +X(a, STATIC, SINGULAR, BOOL, admin_channel_enabled, 8) \ +X(a, STATIC, SINGULAR, UENUM, packet_signature_policy, 9) #define meshtastic_Config_SecurityConfig_CALLBACK NULL #define meshtastic_Config_SecurityConfig_DEFAULT NULL -#define meshtastic_Config_SessionkeyConfig_FIELDLIST(X, a) +#define meshtastic_Config_SessionkeyConfig_FIELDLIST(X, a) \ #define meshtastic_Config_SessionkeyConfig_CALLBACK NULL #define meshtastic_Config_SessionkeyConfig_DEFAULT NULL @@ -1157,17 +1139,17 @@ extern const pb_msgdesc_t meshtastic_Config_SessionkeyConfig_msg; /* Maximum encoded size of messages (where known) */ #define MESHTASTIC_MESHTASTIC_CONFIG_PB_H_MAX_SIZE meshtastic_Config_size -#define meshtastic_Config_BluetoothConfig_size 10 -#define meshtastic_Config_DeviceConfig_size 100 -#define meshtastic_Config_DisplayConfig_size 36 -#define meshtastic_Config_LoRaConfig_size 88 +#define meshtastic_Config_BluetoothConfig_size 10 +#define meshtastic_Config_DeviceConfig_size 100 +#define meshtastic_Config_DisplayConfig_size 36 +#define meshtastic_Config_LoRaConfig_size 91 #define meshtastic_Config_NetworkConfig_IpV4Config_size 20 -#define meshtastic_Config_NetworkConfig_size 204 -#define meshtastic_Config_PositionConfig_size 62 -#define meshtastic_Config_PowerConfig_size 52 -#define meshtastic_Config_SecurityConfig_size 178 -#define meshtastic_Config_SessionkeyConfig_size 0 -#define meshtastic_Config_size 207 +#define meshtastic_Config_NetworkConfig_size 204 +#define meshtastic_Config_PositionConfig_size 62 +#define meshtastic_Config_PowerConfig_size 52 +#define meshtastic_Config_SecurityConfig_size 180 +#define meshtastic_Config_SessionkeyConfig_size 0 +#define meshtastic_Config_size 207 #ifdef __cplusplus } /* extern "C" */ diff --git a/lib/mesh/generated/meshtastic/mesh.pb.cpp b/lib/mesh/generated/meshtastic/mesh.pb.cpp index 3716e57..dee661b 100644 --- a/lib/mesh/generated/meshtastic/mesh.pb.cpp +++ b/lib/mesh/generated/meshtastic/mesh.pb.cpp @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-1.0.0-dev */ +/* Generated by nanopb-0.4.9.1 */ #include "meshtastic/mesh.pb.h" #if PB_PROTO_HEADER_VERSION != 40 @@ -8,66 +8,116 @@ PB_BIND(meshtastic_Position, meshtastic_Position, AUTO) + PB_BIND(meshtastic_User, meshtastic_User, AUTO) + PB_BIND(meshtastic_RouteDiscovery, meshtastic_RouteDiscovery, AUTO) + PB_BIND(meshtastic_Routing, meshtastic_Routing, AUTO) + PB_BIND(meshtastic_Data, meshtastic_Data, 2) + PB_BIND(meshtastic_KeyVerification, meshtastic_KeyVerification, AUTO) + PB_BIND(meshtastic_StoreForwardPlusPlus, meshtastic_StoreForwardPlusPlus, 2) + +PB_BIND(meshtastic_RemoteShell, meshtastic_RemoteShell, AUTO) + + +PB_BIND(meshtastic_BoundingBox, meshtastic_BoundingBox, AUTO) + + PB_BIND(meshtastic_Waypoint, meshtastic_Waypoint, AUTO) + PB_BIND(meshtastic_StatusMessage, meshtastic_StatusMessage, AUTO) + PB_BIND(meshtastic_MqttClientProxyMessage, meshtastic_MqttClientProxyMessage, 2) + PB_BIND(meshtastic_MeshPacket, meshtastic_MeshPacket, 2) + PB_BIND(meshtastic_NodeInfo, meshtastic_NodeInfo, 2) + PB_BIND(meshtastic_MyNodeInfo, meshtastic_MyNodeInfo, AUTO) + PB_BIND(meshtastic_LogRecord, meshtastic_LogRecord, 2) + PB_BIND(meshtastic_QueueStatus, meshtastic_QueueStatus, AUTO) + PB_BIND(meshtastic_FromRadio, meshtastic_FromRadio, 2) + +PB_BIND(meshtastic_LockdownStatus, meshtastic_LockdownStatus, AUTO) + + PB_BIND(meshtastic_ClientNotification, meshtastic_ClientNotification, 2) + PB_BIND(meshtastic_KeyVerificationNumberInform, meshtastic_KeyVerificationNumberInform, AUTO) + PB_BIND(meshtastic_KeyVerificationNumberRequest, meshtastic_KeyVerificationNumberRequest, AUTO) + PB_BIND(meshtastic_KeyVerificationFinal, meshtastic_KeyVerificationFinal, AUTO) + PB_BIND(meshtastic_DuplicatedPublicKey, meshtastic_DuplicatedPublicKey, AUTO) + PB_BIND(meshtastic_LowEntropyKey, meshtastic_LowEntropyKey, AUTO) + PB_BIND(meshtastic_FileInfo, meshtastic_FileInfo, AUTO) + PB_BIND(meshtastic_ToRadio, meshtastic_ToRadio, 2) + PB_BIND(meshtastic_Compressed, meshtastic_Compressed, AUTO) + PB_BIND(meshtastic_NeighborInfo, meshtastic_NeighborInfo, AUTO) + PB_BIND(meshtastic_Neighbor, meshtastic_Neighbor, AUTO) + PB_BIND(meshtastic_DeviceMetadata, meshtastic_DeviceMetadata, AUTO) + +PB_BIND(meshtastic_LoRaPresetGroup, meshtastic_LoRaPresetGroup, AUTO) + + +PB_BIND(meshtastic_LoRaRegionPresets, meshtastic_LoRaRegionPresets, AUTO) + + +PB_BIND(meshtastic_LoRaRegionPresetMap, meshtastic_LoRaRegionPresetMap, 2) + + PB_BIND(meshtastic_Heartbeat, meshtastic_Heartbeat, AUTO) + PB_BIND(meshtastic_NodeRemoteHardwarePin, meshtastic_NodeRemoteHardwarePin, AUTO) + PB_BIND(meshtastic_ChunkedPayload, meshtastic_ChunkedPayload, AUTO) + PB_BIND(meshtastic_resend_chunks, meshtastic_resend_chunks, AUTO) + PB_BIND(meshtastic_ChunkedPayloadResponse, meshtastic_ChunkedPayloadResponse, AUTO) diff --git a/lib/mesh/generated/meshtastic/mesh.pb.h b/lib/mesh/generated/meshtastic/mesh.pb.h index fd0fcdb..a59bb2f 100644 --- a/lib/mesh/generated/meshtastic/mesh.pb.h +++ b/lib/mesh/generated/meshtastic/mesh.pb.h @@ -1,8 +1,9 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-1.0.0-dev */ +/* Generated by nanopb-0.4.9.1 */ #ifndef PB_MESHTASTIC_MESHTASTIC_MESH_PB_H_INCLUDED #define PB_MESHTASTIC_MESHTASTIC_MESH_PB_H_INCLUDED +#include #include "meshtastic/channel.pb.h" #include "meshtastic/config.pb.h" #include "meshtastic/device_ui.pb.h" @@ -10,7 +11,6 @@ #include "meshtastic/portnums.pb.h" #include "meshtastic/telemetry.pb.h" #include "meshtastic/xmodem.pb.h" -#include #if PB_PROTO_HEADER_VERSION != 40 #error Regenerate this file with the current version of nanopb generator. @@ -78,10 +78,10 @@ typedef enum _meshtastic_HardwareModel { meshtastic_HardwareModel_STATION_G1 = 25, /* RAK11310 (RP2040 + SX1262) */ meshtastic_HardwareModel_RAK11310 = 26, - /* Makerfabs SenseLoRA Receiver (RP2040 + RFM96) */ - meshtastic_HardwareModel_SENSELORA_RP2040 = 27, - /* Makerfabs SenseLoRA Industrial Monitor (ESP32-S3 + RFM96) */ - meshtastic_HardwareModel_SENSELORA_S3 = 28, + /* Makerfabs Tracker Reserved */ + meshtastic_HardwareModel_MAKERFABS_TRACKER = 27, + /* Makerfabs Reserved */ + meshtastic_HardwareModel_MAKERFABS_RESERVED = 28, /* Canary Radio Company - CanaryOne: https://canaryradio.io/products/canaryone */ meshtastic_HardwareModel_CANARYONE = 29, /* Waveshare RP2040 LoRa - https://www.waveshare.com/rp2040-lora.htm */ @@ -110,8 +110,7 @@ typedef enum _meshtastic_HardwareModel { meshtastic_HardwareModel_NRF52840_PCA10059 = 40, /* Custom Disaster Radio esp32 v3 device https://github.com/sudomesh/disaster-radio/tree/master/hardware/board_esp32_v3 */ meshtastic_HardwareModel_DR_DEV = 41, - /* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) - https://m5stack.com/ */ + /* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/ */ meshtastic_HardwareModel_M5STACK = 42, /* New Heltec LoRA32 with ESP32-S3 CPU */ meshtastic_HardwareModel_HELTEC_V3 = 43, @@ -200,14 +199,12 @@ typedef enum _meshtastic_HardwareModel { https://www.adafruit.com/product/938 ^^^ short A0 to switch to I2C address 0x3C */ meshtastic_HardwareModel_RP2040_FEATHER_RFM95 = 76, - /* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) - https://m5stack.com/ */ + /* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/ */ meshtastic_HardwareModel_M5STACK_COREBASIC = 77, meshtastic_HardwareModel_M5STACK_CORE2 = 78, /* Pico2 with Waveshare Hat, same as Pico */ meshtastic_HardwareModel_RPI_PICO2 = 79, - /* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) - https://m5stack.com/ */ + /* M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/ */ meshtastic_HardwareModel_M5STACK_CORES3 = 80, /* Seeed XIAO S3 DK */ meshtastic_HardwareModel_SEEED_XIAO_S3 = 81, @@ -226,8 +223,7 @@ typedef enum _meshtastic_HardwareModel { /* Mesh-Tab, esp32 based https://github.com/valzzu/Mesh-Tab */ meshtastic_HardwareModel_MESH_TAB = 86, - /* MeshLink board developed by LoraItalia. NRF52840, eByte E22900M22S (Will also come with other frequencies), 25w MPPT solar - charger (5v,12v,18v selectable), support for gps, buzzer, oled or e-ink display, 10 gpios, hardware watchdog + /* MeshLink board developed by LoraItalia. NRF52840, eByte E22900M22S (Will also come with other frequencies), 25w MPPT solar charger (5v,12v,18v selectable), support for gps, buzzer, oled or e-ink display, 10 gpios, hardware watchdog https://www.loraitalia.it */ meshtastic_HardwareModel_MESHLINK = 87, /* Seeed XIAO nRF52840 + Wio SX1262 kit */ @@ -310,11 +306,42 @@ typedef enum _meshtastic_HardwareModel { meshtastic_HardwareModel_MINI_EPAPER_S3 = 125, /* LilyGo T-Display S3 Pro LR1121 */ meshtastic_HardwareModel_TDISPLAY_S3_PRO = 126, + /* Heltec Mesh Node T096 board features an nRF52840 CPU and a TFT screen. */ + meshtastic_HardwareModel_HELTEC_MESH_NODE_T096 = 127, + /* Seeed studio Mesh Tracker X1card. NRF52840 w/ LR2021 radio, + GPS, button, buzzer, and sensors. */ + meshtastic_HardwareModel_MESH_TRACKER_X1 = 128, + /* Elecrow ThinkNode M7, M8 and M9 */ + meshtastic_HardwareModel_THINKNODE_M7 = 129, + meshtastic_HardwareModel_THINKNODE_M8 = 130, + meshtastic_HardwareModel_THINKNODE_M9 = 131, + /* The Heltec-V4-R8 uses an ESP32S3R8 chip, plus an SX1262. */ + meshtastic_HardwareModel_HELTEC_V4_R8 = 132, + /* The HELTEC_MESH_NODE_T1 uses an NRF52840 chip, plus an SX1262. */ + meshtastic_HardwareModel_HELTEC_MESH_NODE_T1 = 133, + /* B&Q Consulting Station G3: TBD */ + meshtastic_HardwareModel_STATION_G3 = 134, + /* Lilygo T-Impulse-Plus */ + meshtastic_HardwareModel_T_IMPULSE_PLUS = 135, + /* Lilygo T-Echo Card */ + meshtastic_HardwareModel_T_ECHO_CARD = 136, + /* Seeed Tracker L2 */ + meshtastic_HardwareModel_SEEED_WIO_TRACKER_L2 = 137, + /* Elecrow CrowPanel Advance P4 models, ESP32-P4 and TFT with SX1262 radio plugin */ + meshtastic_HardwareModel_CROWPANEL_P4 = 138, + /* Heltec Mesh Tower V2 */ + meshtastic_HardwareModel_HELTEC_MESH_TOWER_V2 = 139, + /* Meshnology W10 */ + meshtastic_HardwareModel_MESHNOLOGY_W10 = 140, + /* Heltec ESP32S3 + SX1262 */ + meshtastic_HardwareModel_HELTEC_RC32 = 141, + /* Heltec NRF52840 + SX1262 */ + meshtastic_HardwareModel_HELTEC_RC52 = 142, + /* Heltec ESP32C6 + SX1262 */ + meshtastic_HardwareModel_HELTEC_RCC6 = 143, /* ------------------------------------------------------------------------------------------------------------------------------------------ - 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. - ------------------------------------------------------------------------------------------------------------------------------------------ - */ + 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. + ------------------------------------------------------------------------------------------------------------------------------------------ */ meshtastic_HardwareModel_PRIVATE_HW = 255 } meshtastic_HardwareModel; @@ -324,8 +351,8 @@ typedef enum _meshtastic_Constants { pass int constants between two very different environments */ meshtastic_Constants_ZERO = 0, /* From mesh.options - note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte - header is outside of this envelope */ + note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte header is + outside of this envelope */ meshtastic_Constants_DATA_PAYLOAD_LEN = 233 } meshtastic_Constants; @@ -359,17 +386,14 @@ typedef enum _meshtastic_CriticalErrorCode { /* Selftest of SX1262 radio chip failed */ meshtastic_CriticalErrorCode_SX1262_FAILURE = 10, /* A (likely software but possibly hardware) failure was detected while trying to send packets. - If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this - bug */ + If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this bug */ meshtastic_CriticalErrorCode_RADIO_SPI_BUG = 11, /* Corruption was detected on the flash filesystem but we were able to repair things. - If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the - field. */ + If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field. */ meshtastic_CriticalErrorCode_FLASH_CORRUPTION_RECOVERABLE = 12, /* Corruption was detected on the flash filesystem but we were unable to repair things. NOTE: Your node will probably need to be reconfigured the next time it reboots (it will lose the region code etc...) - If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the - field. */ + If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field. */ meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE = 13 } meshtastic_CriticalErrorCode; @@ -457,8 +481,8 @@ typedef enum _meshtastic_Position_AltSource { meshtastic_Position_AltSource_ALT_BAROMETRIC = 4 } meshtastic_Position_AltSource; -/* A failure in delivering a message (usually used for routing control messages, but might be provided in addition to ack.fail_id - to provide details on the type of failure). */ +/* A failure in delivering a message (usually used for routing control messages, but might be provided in addition to ack.fail_id to provide + details on the type of failure). */ typedef enum _meshtastic_Routing_Error { /* This message is not a failure */ meshtastic_Routing_Error_NONE = 0, @@ -476,8 +500,8 @@ typedef enum _meshtastic_Routing_Error { meshtastic_Routing_Error_NO_CHANNEL = 6, /* The packet was too big for sending (exceeds interface MTU after encoding) */ meshtastic_Routing_Error_TOO_LARGE = 7, - /* The request had want_response set, the request reached the destination node, but no service on that node wants to send a - response (possibly due to bad channel permissions) */ + /* The request had want_response set, the request reached the destination node, but no service on that node wants to send a response + (possibly due to bad channel permissions) */ meshtastic_Routing_Error_NO_RESPONSE = 8, /* Cannot send currently because duty cycle regulations will be violated. */ meshtastic_Routing_Error_DUTY_CYCLE_LIMIT = 9, @@ -486,8 +510,7 @@ typedef enum _meshtastic_Routing_Error { /* The application layer service on the remote node received your request, but considered your request not authorized (i.e you did not send the request on the required bound channel) */ meshtastic_Routing_Error_NOT_AUTHORIZED = 33, - /* The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at - all) */ + /* The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at all) */ meshtastic_Routing_Error_PKI_FAILED = 34, /* The receiving node does not have a Public Key to decode with */ meshtastic_Routing_Error_PKI_UNKNOWN_PUBKEY = 35, @@ -519,6 +542,27 @@ typedef enum _meshtastic_StoreForwardPlusPlus_SFPP_message_type { meshtastic_StoreForwardPlusPlus_SFPP_message_type_LINK_PROVIDE_SECONDHALF = 6 } meshtastic_StoreForwardPlusPlus_SFPP_message_type; +/* 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. */ +typedef enum _meshtastic_RemoteShell_OpCode { + meshtastic_RemoteShell_OpCode_OP_UNSET = 0, + /* Client -> server */ + meshtastic_RemoteShell_OpCode_OPEN = 1, + meshtastic_RemoteShell_OpCode_INPUT = 2, + meshtastic_RemoteShell_OpCode_RESIZE = 3, + meshtastic_RemoteShell_OpCode_CLOSE = 4, + meshtastic_RemoteShell_OpCode_PING = 5, + meshtastic_RemoteShell_OpCode_ACK = 6, + /* Server -> client */ + meshtastic_RemoteShell_OpCode_OPEN_OK = 64, + meshtastic_RemoteShell_OpCode_OUTPUT = 65, + meshtastic_RemoteShell_OpCode_CLOSED = 66, + meshtastic_RemoteShell_OpCode_ERROR = 67, + meshtastic_RemoteShell_OpCode_PONG = 68 +} meshtastic_RemoteShell_OpCode; + /* The priority of this message for sending. Higher priorities are sent first (when managing the transmit queue). This field is never sent over the air, it is only used internally inside of a local device node. @@ -591,7 +635,9 @@ typedef enum _meshtastic_MeshPacket_TransportMechanism { /* Arrived via Multicast UDP */ meshtastic_MeshPacket_TransportMechanism_TRANSPORT_MULTICAST_UDP = 6, /* Arrived via API connection */ - meshtastic_MeshPacket_TransportMechanism_TRANSPORT_API = 7 + meshtastic_MeshPacket_TransportMechanism_TRANSPORT_API = 7, + /* Arrived via Unicast UDP */ + meshtastic_MeshPacket_TransportMechanism_TRANSPORT_UNICAST_UDP = 8 } meshtastic_MeshPacket_TransportMechanism; /* Log levels, chosen to match python logging conventions. */ @@ -612,6 +658,32 @@ typedef enum _meshtastic_LogRecord_Level { meshtastic_LogRecord_Level_TRACE = 5 } meshtastic_LogRecord_Level; +typedef enum _meshtastic_LockdownStatus_State { + /* Default; should not be sent. */ + meshtastic_LockdownStatus_State_STATE_UNSPECIFIED = 0, + /* No passphrase has ever been provisioned on this device. + Client should prompt the operator to set one. */ + meshtastic_LockdownStatus_State_NEEDS_PROVISION = 1, + /* Storage is locked or this client has not authenticated yet. + lock_reason carries a machine-readable detail string. + Client should present (or auto-replay) a passphrase via + AdminMessage.lockdown_auth. */ + meshtastic_LockdownStatus_State_LOCKED = 2, + /* Passphrase accepted; client is now authorized for this connection. + boots_remaining and valid_until_epoch describe the active session + token's TTL. */ + meshtastic_LockdownStatus_State_UNLOCKED = 3, + /* Passphrase rejected. backoff_seconds is non-zero when rate-limited. */ + meshtastic_LockdownStatus_State_UNLOCK_FAILED = 4, + /* Lockdown is supported by this firmware but not currently active + (no passphrase has been provisioned, or it was disabled via + AdminMessage.lockdown_auth.disable). The device is operating in + normal, non-encrypted mode. Clients render the lockdown-mode + toggle as OFF on receiving this. Distinct from NEEDS_PROVISION, + which is only used during an in-progress enable flow. */ + meshtastic_LockdownStatus_State_DISABLED = 5 +} meshtastic_LockdownStatus_State; + /* Struct definitions */ /* A GPS Position */ typedef struct _meshtastic_Position { @@ -716,7 +788,10 @@ typedef struct _meshtastic_User { Note: app developers are encouraged to also use the following standard node IDs "^all" (for broadcast), "^local" (for the locally connected node) */ char id[16]; - /* A full name for this user, i.e. "Kevin Hester" */ + /* A full name for this user, i.e. "Kevin Hester" + Limited to 24 bytes of UTF-8: longer names are accepted from senders + built against the older 39-byte limit, but devices truncate them before + storing or rebroadcasting. Clients should enforce 24 bytes in their UI. */ char long_name[40]; /* A VERY short name, ideally two characters. Suitable for a tiny OLED screen */ @@ -775,6 +850,7 @@ typedef struct _meshtastic_Routing { } meshtastic_Routing; typedef PB_BYTES_ARRAY_T(233) meshtastic_Data_payload_t; +typedef PB_BYTES_ARRAY_T(64) meshtastic_Data_xeddsa_signature_t; /* (Formerly called SubPacket) The payload portion fo a packet, this is the actual bytes that are sent inside a radio packet (because from/to are broken out by the comms library) */ @@ -808,6 +884,8 @@ typedef struct _meshtastic_Data { /* Bitfield for extra flags. First use is to indicate that user approves the packet being uploaded to MQTT. */ bool has_bitfield; uint8_t bitfield; + /* XEdDSA signature for the payload */ + meshtastic_Data_xeddsa_signature_t xeddsa_signature; } meshtastic_Data; typedef PB_BYTES_ARRAY_T(32) meshtastic_KeyVerification_hash1_t; @@ -851,6 +929,48 @@ typedef struct _meshtastic_StoreForwardPlusPlus { uint32_t chain_count; } meshtastic_StoreForwardPlusPlus; +typedef PB_BYTES_ARRAY_T(200) meshtastic_RemoteShell_payload_t; +/* The actual over-the-mesh message doing RemoteShell */ +typedef struct _meshtastic_RemoteShell { + /* Structured frame operation. */ + meshtastic_RemoteShell_OpCode op; + /* Logical PTY session identifier. */ + uint32_t session_id; + /* Monotonic sequence number for this frame. */ + uint32_t seq; + /* Cumulative ack sequence number. */ + uint32_t ack_seq; + /* Opaque bytes payload for INPUT/OUTPUT/ERROR and other frame bodies. */ + meshtastic_RemoteShell_payload_t payload; + /* Terminal size columns used for OPEN/RESIZE signaling. */ + uint32_t cols; + /* Terminal size rows used for OPEN/RESIZE signaling. */ + uint32_t rows; + /* Bit flags for protocol extensions. */ + uint32_t flags; + /* The last sequence number TX'd. */ + uint32_t last_tx_seq; + /* The last sequence number RX'd. */ + uint32_t last_rx_seq; +} meshtastic_RemoteShell; + +/* A rectangular, axis-aligned geographic bounding box. + Used to define a rectangular geofence region for a Waypoint. + Fields are ordered west, south, east, north to match the standard bounding box + convention used by GeoJSON and PMTiles (min longitude, min latitude, max longitude, max latitude), + so the box can drive an offline map extract directly. + All coordinates are in degrees scaled by 1e-7 (same convention as Position and Waypoint). */ +typedef struct _meshtastic_BoundingBox { + /* Western edge of the box - minimum longitude (south-west corner) */ + int32_t longitude_west_i; + /* Southern edge of the box - minimum latitude (south-west corner) */ + int32_t latitude_south_i; + /* Eastern edge of the box - maximum longitude (north-east corner) */ + int32_t longitude_east_i; + /* Northern edge of the box - maximum latitude (north-east corner) */ + int32_t latitude_north_i; +} meshtastic_BoundingBox; + /* Waypoint message, used to share arbitrary locations across the mesh */ typedef struct _meshtastic_Waypoint { /* Id of the waypoint */ @@ -872,6 +992,25 @@ typedef struct _meshtastic_Waypoint { char description[100]; /* Designator icon for the waypoint in the form of a unicode emoji */ uint32_t icon; + /* If greater than zero, defines a circular geofence centred on this waypoint's + location (latitude_i / longitude_i) with this radius in meters. + Zero means the waypoint has no circular geofence. */ + uint32_t geofence_radius; + /* Optional rectangular geofence region for this waypoint. + May be used instead of, or in addition to, geofence_radius. */ + bool has_bounding_box; + meshtastic_BoundingBox bounding_box; + /* If true, a notification should be raised when a tracked node enters this + waypoint's geofence (the circular radius and/or the bounding box). */ + bool notify_on_enter; + /* If true, a notification should be raised when a tracked node exits this + waypoint's geofence (the circular radius and/or the bounding box). */ + bool notify_on_exit; + /* If true, only raise geofence enter/exit notifications for nodes that are + marked as favorites on the receiving device. Applies to both notify_on_enter + and notify_on_exit. Favorite status is resolved locally per receiver, so the + same waypoint alerts each node only for its own favorites. */ + bool notify_favorites_only; } meshtastic_Waypoint; /* Message for node status */ @@ -885,7 +1024,7 @@ typedef struct _meshtastic_MqttClientProxyMessage { /* The MQTT topic this message will be sent /received on */ char topic[60]; pb_size_t which_payload_variant; - union _meshtastic_MqttClientProxyMessage_payload_variant { + union { /* Bytes */ meshtastic_MqttClientProxyMessage_data_t data; /* Text */ @@ -953,11 +1092,11 @@ typedef struct _meshtastic_MeshPacket { We would like to receive a ack packet in response. Broadcasts messages treat this flag specially: Since acks for broadcasts would rapidly flood the channel, the normal ack behavior is suppressed. - Instead, the original sender listens to see if at least one node is rebroadcasting this packet (because naive flooding - algorithm). If it hears that the odds (given typical LoRa topologies) the odds are very high that every node should eventually - receive the message. So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender. If after some - time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic. Note: This flag - is normally sent in a flag bit in the header when sent over the wire */ + Instead, the original sender listens to see if at least one node is rebroadcasting this packet (because naive flooding algorithm). + If it hears that the odds (given typical LoRa topologies) the odds are very high that every node should eventually receive the message. + So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender. + If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic. + Note: This flag is normally sent in a flag bit in the header when sent over the wire */ bool want_ack; /* The priority of this message for sending. See MeshPacket.Priority description for more details. */ @@ -987,6 +1126,8 @@ typedef struct _meshtastic_MeshPacket { uint32_t tx_after; /* Indicates which transport mechanism this packet arrived over */ meshtastic_MeshPacket_TransportMechanism transport_mechanism; + /* Indicates whether the packet has a valid signature */ + bool xeddsa_signed; } meshtastic_MeshPacket; /* The bluetooth to device link: @@ -1011,8 +1152,8 @@ typedef struct _meshtastic_NodeInfo { /* The user info for this node */ bool has_user; meshtastic_User user; - /* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that - is no longer true. Position.time now indicates the last time we received a POSITION from that node. */ + /* This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true. + Position.time now indicates the last time we received a POSITION from that node. */ bool has_position; meshtastic_Position position; /* Returns the Signal-to-noise ratio (SNR) of the last received message, @@ -1043,6 +1184,10 @@ typedef struct _meshtastic_NodeInfo { /* True if node has been muted Persistes between NodeDB internal clean ups */ bool is_muted; + /* True if node is signing its packets via XEdDSA + Persists between NodeDB internal clean ups + LSB 1 of the bitfield */ + bool has_xeddsa_signed; } meshtastic_NodeInfo; typedef PB_BYTES_ARRAY_T(16) meshtastic_MyNodeInfo_device_id_t; @@ -1097,6 +1242,38 @@ typedef struct _meshtastic_QueueStatus { uint32_t mesh_packet_id; } meshtastic_QueueStatus; +/* Lockdown state report from firmware to client (for hardened builds + with MESHTASTIC_LOCKDOWN). Sent immediately after config_complete_id + to inform a freshly-connected unauthorized client what it must do, + and again in response to each LockdownAuth admin command. */ +typedef struct _meshtastic_LockdownStatus { + /* Current lockdown state being reported. */ + meshtastic_LockdownStatus_State state; + /* For LOCKED: machine-readable reason. Known values: + "needs_auth" — storage already unlocked, client must auth + "token_missing" — no boot token on flash + "token_expired" — boot token wall-clock TTL elapsed + "token_boots_zero" — boot token boot-count TTL exhausted + "token_hmac_fail" — token tampered or wrong device + "token_dek_fail" — token DEK decrypt failed + "token_wrong_size" — token file corrupted + "token_bad_magic" — token file corrupted + "not_provisioned" — should generally use NEEDS_PROVISION state instead + Other values may be added; clients should treat unknown values as + "locked, ask for passphrase". */ + char lock_reason[32]; + /* For UNLOCKED: remaining boots on the issued session token. + Decrements by 1 on each subsequent boot. */ + uint32_t boots_remaining; + /* For UNLOCKED: wall-clock expiry of the issued session token, + absolute Unix-epoch seconds. 0 = no time limit. */ + uint32_t valid_until_epoch; + /* For UNLOCK_FAILED: seconds the client must wait before another + passphrase attempt will be accepted. 0 = wrong passphrase, no + backoff (immediate retry allowed but advisable to prompt user). */ + uint32_t backoff_seconds; +} meshtastic_LockdownStatus; + typedef struct _meshtastic_KeyVerificationNumberInform { uint64_t nonce; char remote_longname[40]; @@ -1138,7 +1315,7 @@ typedef struct _meshtastic_ClientNotification { /* The message body of the notification */ char message[400]; pb_size_t which_payload_variant; - union _meshtastic_ClientNotification_payload_variant { + union { meshtastic_KeyVerificationNumberInform key_verification_number_inform; meshtastic_KeyVerificationNumberRequest key_verification_number_request; meshtastic_KeyVerificationFinal key_verification_final; @@ -1218,8 +1395,58 @@ typedef struct _meshtastic_DeviceMetadata { /* Bit field of boolean for excluded modules (bitwise OR of ExcludedModules) */ uint32_t excluded_modules; + /* Indicates whether this firmware build includes XEdDSA packet signature verification. + This is a read-only capability and must be false when XEdDSA is not compiled in. */ + bool has_xeddsa; } meshtastic_DeviceMetadata; +/* A distinct set of legal modem presets shared by one or more LoRa regions. + Regions that have an identical preset list / default / licensing reference + the same group (by index) via LoRaRegionPresetMap.region_groups. This keeps + the whole map small enough to fit in a single FromRadio packet, since most + regions share the one standard preset list. */ +typedef struct _meshtastic_LoRaPresetGroup { + /* The modem presets that are legal for every region referencing this group. */ + pb_size_t presets_count; + meshtastic_Config_LoRaConfig_ModemPreset presets[11]; + /* The firmware's default modem preset for regions in this group. + Always one of `presets`. Clients should select this when switching to one + of these regions, or when the current preset is not legal in the new region. */ + meshtastic_Config_LoRaConfig_ModemPreset default_preset; + /* True if regions referencing this group are for licensed operators only + (e.g. amateur / ham radio bands). Clients should warn or gate accordingly. */ + bool licensed_only; +} meshtastic_LoRaPresetGroup; + +/* Associates a single LoRa region with its preset group. */ +typedef struct _meshtastic_LoRaRegionPresets { + /* The LoRa region this entry describes. */ + meshtastic_Config_LoRaConfig_RegionCode region; + /* Index into LoRaRegionPresetMap.groups for the preset list that is legal + in `region`. */ + uint8_t group_index; +} meshtastic_LoRaRegionPresets; + +/* Map describing which modem presets are valid for each LoRa region. Sent by + the firmware during the want_config handshake (as FromRadio.region_presets) + so that client UIs can prevent illegal region+preset selections. + + Delivery is grouped to save space: `groups` holds each distinct preset list, + and `region_groups` maps every known region to one of those groups by index. + A region that does NOT appear in `region_groups` carries no constraint + information and should not be restricted by the client (e.g. firmware that + predates this message, or a region with no firmware table entry). Clients + must also tolerate this whole message being absent. */ +typedef struct _meshtastic_LoRaRegionPresetMap { + /* One entry per distinct (preset-list, default, licensing) combination. + Referenced by index from `region_groups`. */ + pb_size_t groups_count; + meshtastic_LoRaPresetGroup groups[8]; + /* One entry per known LoRa region, pointing at its preset group. */ + pb_size_t region_groups_count; + meshtastic_LoRaRegionPresets region_groups[38]; +} meshtastic_LoRaRegionPresetMap; + /* Packets from the radio to the phone will appear on the fromRadio characteristic. It will support READ and NOTIFY. When a new packet arrives the device will BLE notify? It will sit in that descriptor until consumed by the phone, @@ -1270,6 +1497,18 @@ typedef struct _meshtastic_FromRadio { meshtastic_ClientNotification clientNotification; /* Persistent data for device-ui */ meshtastic_DeviceUIConfig deviceuiConfig; + /* Lockdown state notification for hardened firmware builds. + Sent post-config (so unauthorized clients learn they must + provision/unlock) and after each LockdownAuth admin command + to report success or failure. Replaces the earlier scheme of + encoding state as magic-string prefixes inside ClientNotification. */ + meshtastic_LockdownStatus lockdown_status; + /* Map of which modem presets are legal in each LoRa region. Sent once + during the want_config handshake (right after `metadata`, before the + first `channel`) so client UIs can prevent the user from selecting an + illegal region+preset combination. A region that does not appear in + any group carries no constraint info and should not be restricted. */ + meshtastic_LoRaRegionPresetMap region_presets; }; } meshtastic_FromRadio; @@ -1339,7 +1578,7 @@ typedef struct _meshtastic_ChunkedPayloadResponse { /* The ID of the entire payload */ uint32_t payload_id; pb_size_t which_payload_variant; - union _meshtastic_ChunkedPayloadResponse_payload_variant { + union { /* Request to transfer chunked payload */ bool request_transfer; /* Accept the transfer chunked payload */ @@ -1349,6 +1588,7 @@ typedef struct _meshtastic_ChunkedPayloadResponse { } payload_variant; } meshtastic_ChunkedPayloadResponse; + #ifdef __cplusplus extern "C" { #endif @@ -1356,62 +1596,63 @@ extern "C" { /* Helper constants for enums */ #define _meshtastic_HardwareModel_MIN meshtastic_HardwareModel_UNSET #define _meshtastic_HardwareModel_MAX meshtastic_HardwareModel_PRIVATE_HW -#define _meshtastic_HardwareModel_ARRAYSIZE ((meshtastic_HardwareModel)(meshtastic_HardwareModel_PRIVATE_HW + 1)) +#define _meshtastic_HardwareModel_ARRAYSIZE ((meshtastic_HardwareModel)(meshtastic_HardwareModel_PRIVATE_HW+1)) #define _meshtastic_Constants_MIN meshtastic_Constants_ZERO #define _meshtastic_Constants_MAX meshtastic_Constants_DATA_PAYLOAD_LEN -#define _meshtastic_Constants_ARRAYSIZE ((meshtastic_Constants)(meshtastic_Constants_DATA_PAYLOAD_LEN + 1)) +#define _meshtastic_Constants_ARRAYSIZE ((meshtastic_Constants)(meshtastic_Constants_DATA_PAYLOAD_LEN+1)) #define _meshtastic_CriticalErrorCode_MIN meshtastic_CriticalErrorCode_NONE #define _meshtastic_CriticalErrorCode_MAX meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE -#define _meshtastic_CriticalErrorCode_ARRAYSIZE \ - ((meshtastic_CriticalErrorCode)(meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE + 1)) +#define _meshtastic_CriticalErrorCode_ARRAYSIZE ((meshtastic_CriticalErrorCode)(meshtastic_CriticalErrorCode_FLASH_CORRUPTION_UNRECOVERABLE+1)) #define _meshtastic_FirmwareEdition_MIN meshtastic_FirmwareEdition_VANILLA #define _meshtastic_FirmwareEdition_MAX meshtastic_FirmwareEdition_DIY_EDITION -#define _meshtastic_FirmwareEdition_ARRAYSIZE ((meshtastic_FirmwareEdition)(meshtastic_FirmwareEdition_DIY_EDITION + 1)) +#define _meshtastic_FirmwareEdition_ARRAYSIZE ((meshtastic_FirmwareEdition)(meshtastic_FirmwareEdition_DIY_EDITION+1)) #define _meshtastic_ExcludedModules_MIN meshtastic_ExcludedModules_EXCLUDED_NONE #define _meshtastic_ExcludedModules_MAX meshtastic_ExcludedModules_NETWORK_CONFIG -#define _meshtastic_ExcludedModules_ARRAYSIZE ((meshtastic_ExcludedModules)(meshtastic_ExcludedModules_NETWORK_CONFIG + 1)) +#define _meshtastic_ExcludedModules_ARRAYSIZE ((meshtastic_ExcludedModules)(meshtastic_ExcludedModules_NETWORK_CONFIG+1)) #define _meshtastic_Position_LocSource_MIN meshtastic_Position_LocSource_LOC_UNSET #define _meshtastic_Position_LocSource_MAX meshtastic_Position_LocSource_LOC_EXTERNAL -#define _meshtastic_Position_LocSource_ARRAYSIZE ((meshtastic_Position_LocSource)(meshtastic_Position_LocSource_LOC_EXTERNAL + 1)) +#define _meshtastic_Position_LocSource_ARRAYSIZE ((meshtastic_Position_LocSource)(meshtastic_Position_LocSource_LOC_EXTERNAL+1)) #define _meshtastic_Position_AltSource_MIN meshtastic_Position_AltSource_ALT_UNSET #define _meshtastic_Position_AltSource_MAX meshtastic_Position_AltSource_ALT_BAROMETRIC -#define _meshtastic_Position_AltSource_ARRAYSIZE \ - ((meshtastic_Position_AltSource)(meshtastic_Position_AltSource_ALT_BAROMETRIC + 1)) +#define _meshtastic_Position_AltSource_ARRAYSIZE ((meshtastic_Position_AltSource)(meshtastic_Position_AltSource_ALT_BAROMETRIC+1)) #define _meshtastic_Routing_Error_MIN meshtastic_Routing_Error_NONE #define _meshtastic_Routing_Error_MAX meshtastic_Routing_Error_PKI_SEND_FAIL_PUBLIC_KEY -#define _meshtastic_Routing_Error_ARRAYSIZE ((meshtastic_Routing_Error)(meshtastic_Routing_Error_PKI_SEND_FAIL_PUBLIC_KEY + 1)) +#define _meshtastic_Routing_Error_ARRAYSIZE ((meshtastic_Routing_Error)(meshtastic_Routing_Error_PKI_SEND_FAIL_PUBLIC_KEY+1)) #define _meshtastic_StoreForwardPlusPlus_SFPP_message_type_MIN meshtastic_StoreForwardPlusPlus_SFPP_message_type_CANON_ANNOUNCE -#define _meshtastic_StoreForwardPlusPlus_SFPP_message_type_MAX \ - meshtastic_StoreForwardPlusPlus_SFPP_message_type_LINK_PROVIDE_SECONDHALF -#define _meshtastic_StoreForwardPlusPlus_SFPP_message_type_ARRAYSIZE \ - ((meshtastic_StoreForwardPlusPlus_SFPP_message_type)(meshtastic_StoreForwardPlusPlus_SFPP_message_type_LINK_PROVIDE_SECONDHALF + \ - 1)) +#define _meshtastic_StoreForwardPlusPlus_SFPP_message_type_MAX meshtastic_StoreForwardPlusPlus_SFPP_message_type_LINK_PROVIDE_SECONDHALF +#define _meshtastic_StoreForwardPlusPlus_SFPP_message_type_ARRAYSIZE ((meshtastic_StoreForwardPlusPlus_SFPP_message_type)(meshtastic_StoreForwardPlusPlus_SFPP_message_type_LINK_PROVIDE_SECONDHALF+1)) + +#define _meshtastic_RemoteShell_OpCode_MIN meshtastic_RemoteShell_OpCode_OP_UNSET +#define _meshtastic_RemoteShell_OpCode_MAX meshtastic_RemoteShell_OpCode_PONG +#define _meshtastic_RemoteShell_OpCode_ARRAYSIZE ((meshtastic_RemoteShell_OpCode)(meshtastic_RemoteShell_OpCode_PONG+1)) #define _meshtastic_MeshPacket_Priority_MIN meshtastic_MeshPacket_Priority_UNSET #define _meshtastic_MeshPacket_Priority_MAX meshtastic_MeshPacket_Priority_MAX -#define _meshtastic_MeshPacket_Priority_ARRAYSIZE ((meshtastic_MeshPacket_Priority)(meshtastic_MeshPacket_Priority_MAX + 1)) +#define _meshtastic_MeshPacket_Priority_ARRAYSIZE ((meshtastic_MeshPacket_Priority)(meshtastic_MeshPacket_Priority_MAX+1)) #define _meshtastic_MeshPacket_Delayed_MIN meshtastic_MeshPacket_Delayed_NO_DELAY #define _meshtastic_MeshPacket_Delayed_MAX meshtastic_MeshPacket_Delayed_DELAYED_DIRECT -#define _meshtastic_MeshPacket_Delayed_ARRAYSIZE \ - ((meshtastic_MeshPacket_Delayed)(meshtastic_MeshPacket_Delayed_DELAYED_DIRECT + 1)) +#define _meshtastic_MeshPacket_Delayed_ARRAYSIZE ((meshtastic_MeshPacket_Delayed)(meshtastic_MeshPacket_Delayed_DELAYED_DIRECT+1)) #define _meshtastic_MeshPacket_TransportMechanism_MIN meshtastic_MeshPacket_TransportMechanism_TRANSPORT_INTERNAL -#define _meshtastic_MeshPacket_TransportMechanism_MAX meshtastic_MeshPacket_TransportMechanism_TRANSPORT_API -#define _meshtastic_MeshPacket_TransportMechanism_ARRAYSIZE \ - ((meshtastic_MeshPacket_TransportMechanism)(meshtastic_MeshPacket_TransportMechanism_TRANSPORT_API + 1)) +#define _meshtastic_MeshPacket_TransportMechanism_MAX meshtastic_MeshPacket_TransportMechanism_TRANSPORT_UNICAST_UDP +#define _meshtastic_MeshPacket_TransportMechanism_ARRAYSIZE ((meshtastic_MeshPacket_TransportMechanism)(meshtastic_MeshPacket_TransportMechanism_TRANSPORT_UNICAST_UDP+1)) #define _meshtastic_LogRecord_Level_MIN meshtastic_LogRecord_Level_UNSET #define _meshtastic_LogRecord_Level_MAX meshtastic_LogRecord_Level_CRITICAL -#define _meshtastic_LogRecord_Level_ARRAYSIZE ((meshtastic_LogRecord_Level)(meshtastic_LogRecord_Level_CRITICAL + 1)) +#define _meshtastic_LogRecord_Level_ARRAYSIZE ((meshtastic_LogRecord_Level)(meshtastic_LogRecord_Level_CRITICAL+1)) + +#define _meshtastic_LockdownStatus_State_MIN meshtastic_LockdownStatus_State_STATE_UNSPECIFIED +#define _meshtastic_LockdownStatus_State_MAX meshtastic_LockdownStatus_State_DISABLED +#define _meshtastic_LockdownStatus_State_ARRAYSIZE ((meshtastic_LockdownStatus_State)(meshtastic_LockdownStatus_State_DISABLED+1)) #define meshtastic_Position_location_source_ENUMTYPE meshtastic_Position_LocSource #define meshtastic_Position_altitude_source_ENUMTYPE meshtastic_Position_AltSource @@ -1419,439 +1660,194 @@ extern "C" { #define meshtastic_User_hw_model_ENUMTYPE meshtastic_HardwareModel #define meshtastic_User_role_ENUMTYPE meshtastic_Config_DeviceConfig_Role + #define meshtastic_Routing_variant_error_reason_ENUMTYPE meshtastic_Routing_Error #define meshtastic_Data_portnum_ENUMTYPE meshtastic_PortNum + #define meshtastic_StoreForwardPlusPlus_sfpp_message_type_ENUMTYPE meshtastic_StoreForwardPlusPlus_SFPP_message_type +#define meshtastic_RemoteShell_op_ENUMTYPE meshtastic_RemoteShell_OpCode + + + + + #define meshtastic_MeshPacket_priority_ENUMTYPE meshtastic_MeshPacket_Priority #define meshtastic_MeshPacket_delayed_ENUMTYPE meshtastic_MeshPacket_Delayed #define meshtastic_MeshPacket_transport_mechanism_ENUMTYPE meshtastic_MeshPacket_TransportMechanism + #define meshtastic_MyNodeInfo_firmware_edition_ENUMTYPE meshtastic_FirmwareEdition #define meshtastic_LogRecord_level_ENUMTYPE meshtastic_LogRecord_Level + + +#define meshtastic_LockdownStatus_state_ENUMTYPE meshtastic_LockdownStatus_State + #define meshtastic_ClientNotification_level_ENUMTYPE meshtastic_LogRecord_Level + + + + + + + #define meshtastic_Compressed_portnum_ENUMTYPE meshtastic_PortNum + + #define meshtastic_DeviceMetadata_role_ENUMTYPE meshtastic_Config_DeviceConfig_Role #define meshtastic_DeviceMetadata_hw_model_ENUMTYPE meshtastic_HardwareModel +#define meshtastic_LoRaPresetGroup_presets_ENUMTYPE meshtastic_Config_LoRaConfig_ModemPreset +#define meshtastic_LoRaPresetGroup_default_preset_ENUMTYPE meshtastic_Config_LoRaConfig_ModemPreset + +#define meshtastic_LoRaRegionPresets_region_ENUMTYPE meshtastic_Config_LoRaConfig_RegionCode + + + + + + + + /* Initializer values for message structs */ -#define meshtastic_Position_init_default \ - { \ - false, 0, false, 0, false, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, false, 0, \ - false, 0, 0, 0, 0, 0, false, 0, false, 0, 0, 0, 0, 0, 0, 0, 0 \ - } -#define meshtastic_User_init_default \ - { \ - "", "", "", {0}, _meshtastic_HardwareModel_MIN, 0, _meshtastic_Config_DeviceConfig_Role_MIN, {0, {0}}, false, 0 \ - } -#define meshtastic_RouteDiscovery_init_default \ - { \ - 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, \ - { \ - 0, 0, 0, 0, 0, 0, 0, 0 \ - } \ - } -#define meshtastic_Routing_init_default \ - { \ - 0, \ - { \ - meshtastic_RouteDiscovery_init_default \ - } \ - } -#define meshtastic_Data_init_default \ - { \ - _meshtastic_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0, false, 0 \ - } -#define meshtastic_KeyVerification_init_default \ - { \ - 0, {0, {0}}, \ - { \ - 0, \ - { \ - 0 \ - } \ - } \ - } -#define meshtastic_StoreForwardPlusPlus_init_default \ - { \ - _meshtastic_StoreForwardPlusPlus_SFPP_message_type_MIN, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, 0, 0, 0, 0, 0 \ - } -#define meshtastic_Waypoint_init_default \ - { \ - 0, false, 0, false, 0, 0, 0, "", "", 0 \ - } -#define meshtastic_StatusMessage_init_default \ - { \ - "" \ - } -#define meshtastic_MqttClientProxyMessage_init_default \ - { \ - "", 0, {{0, {0}}}, 0 \ - } -#define meshtastic_MeshPacket_init_default \ - { \ - 0, 0, 0, 0, {meshtastic_Data_init_default}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, \ - _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0, _meshtastic_MeshPacket_TransportMechanism_MIN \ - } -#define meshtastic_NodeInfo_init_default \ - { \ - 0, false, meshtastic_User_init_default, false, meshtastic_Position_init_default, 0, 0, false, \ - meshtastic_DeviceMetrics_init_default, 0, 0, false, 0, 0, 0, 0, 0 \ - } -#define meshtastic_MyNodeInfo_init_default \ - { \ - 0, 0, 0, {0, {0}}, "", _meshtastic_FirmwareEdition_MIN, 0 \ - } -#define meshtastic_LogRecord_init_default \ - { \ - "", 0, "", _meshtastic_LogRecord_Level_MIN \ - } -#define meshtastic_QueueStatus_init_default \ - { \ - 0, 0, 0, 0 \ - } -#define meshtastic_FromRadio_init_default \ - { \ - 0, 0, \ - { \ - meshtastic_MeshPacket_init_default \ - } \ - } -#define meshtastic_ClientNotification_init_default \ - { \ - false, 0, 0, _meshtastic_LogRecord_Level_MIN, "", 0, \ - { \ - meshtastic_KeyVerificationNumberInform_init_default \ - } \ - } -#define meshtastic_KeyVerificationNumberInform_init_default \ - { \ - 0, "", 0 \ - } -#define meshtastic_KeyVerificationNumberRequest_init_default \ - { \ - 0, "" \ - } -#define meshtastic_KeyVerificationFinal_init_default \ - { \ - 0, "", 0, "" \ - } -#define meshtastic_DuplicatedPublicKey_init_default \ - { \ - 0 \ - } -#define meshtastic_LowEntropyKey_init_default \ - { \ - 0 \ - } -#define meshtastic_FileInfo_init_default \ - { \ - "", 0 \ - } -#define meshtastic_ToRadio_init_default \ - { \ - 0, \ - { \ - meshtastic_MeshPacket_init_default \ - } \ - } -#define meshtastic_Compressed_init_default \ - { \ - _meshtastic_PortNum_MIN, \ - { \ - 0, \ - { \ - 0 \ - } \ - } \ - } -#define meshtastic_NeighborInfo_init_default \ - { \ - 0, 0, 0, 0, \ - { \ - meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, \ - meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, \ - meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, \ - meshtastic_Neighbor_init_default \ - } \ - } -#define meshtastic_Neighbor_init_default \ - { \ - 0, 0, 0, 0 \ - } -#define meshtastic_DeviceMetadata_init_default \ - { \ - "", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN, 0, 0, 0 \ - } -#define meshtastic_Heartbeat_init_default \ - { \ - 0 \ - } -#define meshtastic_NodeRemoteHardwarePin_init_default \ - { \ - 0, false, meshtastic_RemoteHardwarePin_init_default \ - } -#define meshtastic_ChunkedPayload_init_default \ - { \ - 0, 0, 0, \ - { \ - 0, \ - { \ - 0 \ - } \ - } \ - } -#define meshtastic_resend_chunks_init_default \ - { \ - { \ - {NULL}, NULL \ - } \ - } -#define meshtastic_ChunkedPayloadResponse_init_default \ - { \ - 0, 0, \ - { \ - 0 \ - } \ - } -#define meshtastic_Position_init_zero \ - { \ - false, 0, false, 0, false, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, false, 0, \ - false, 0, 0, 0, 0, 0, false, 0, false, 0, 0, 0, 0, 0, 0, 0, 0 \ - } -#define meshtastic_User_init_zero \ - { \ - "", "", "", {0}, _meshtastic_HardwareModel_MIN, 0, _meshtastic_Config_DeviceConfig_Role_MIN, {0, {0}}, false, 0 \ - } -#define meshtastic_RouteDiscovery_init_zero \ - { \ - 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, \ - { \ - 0, 0, 0, 0, 0, 0, 0, 0 \ - } \ - } -#define meshtastic_Routing_init_zero \ - { \ - 0, \ - { \ - meshtastic_RouteDiscovery_init_zero \ - } \ - } -#define meshtastic_Data_init_zero \ - { \ - _meshtastic_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0, false, 0 \ - } -#define meshtastic_KeyVerification_init_zero \ - { \ - 0, {0, {0}}, \ - { \ - 0, \ - { \ - 0 \ - } \ - } \ - } -#define meshtastic_StoreForwardPlusPlus_init_zero \ - { \ - _meshtastic_StoreForwardPlusPlus_SFPP_message_type_MIN, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, 0, 0, 0, 0, 0 \ - } -#define meshtastic_Waypoint_init_zero \ - { \ - 0, false, 0, false, 0, 0, 0, "", "", 0 \ - } -#define meshtastic_StatusMessage_init_zero \ - { \ - "" \ - } -#define meshtastic_MqttClientProxyMessage_init_zero \ - { \ - "", 0, {{0, {0}}}, 0 \ - } -#define meshtastic_MeshPacket_init_zero \ - { \ - 0, 0, 0, 0, {meshtastic_Data_init_zero}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, \ - _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0, _meshtastic_MeshPacket_TransportMechanism_MIN \ - } -#define meshtastic_NodeInfo_init_zero \ - { \ - 0, false, meshtastic_User_init_zero, false, meshtastic_Position_init_zero, 0, 0, false, \ - meshtastic_DeviceMetrics_init_zero, 0, 0, false, 0, 0, 0, 0, 0 \ - } -#define meshtastic_MyNodeInfo_init_zero \ - { \ - 0, 0, 0, {0, {0}}, "", _meshtastic_FirmwareEdition_MIN, 0 \ - } -#define meshtastic_LogRecord_init_zero \ - { \ - "", 0, "", _meshtastic_LogRecord_Level_MIN \ - } -#define meshtastic_QueueStatus_init_zero \ - { \ - 0, 0, 0, 0 \ - } -#define meshtastic_FromRadio_init_zero \ - { \ - 0, 0, \ - { \ - meshtastic_MeshPacket_init_zero \ - } \ - } -#define meshtastic_ClientNotification_init_zero \ - { \ - false, 0, 0, _meshtastic_LogRecord_Level_MIN, "", 0, \ - { \ - meshtastic_KeyVerificationNumberInform_init_zero \ - } \ - } -#define meshtastic_KeyVerificationNumberInform_init_zero \ - { \ - 0, "", 0 \ - } -#define meshtastic_KeyVerificationNumberRequest_init_zero \ - { \ - 0, "" \ - } -#define meshtastic_KeyVerificationFinal_init_zero \ - { \ - 0, "", 0, "" \ - } -#define meshtastic_DuplicatedPublicKey_init_zero \ - { \ - 0 \ - } -#define meshtastic_LowEntropyKey_init_zero \ - { \ - 0 \ - } -#define meshtastic_FileInfo_init_zero \ - { \ - "", 0 \ - } -#define meshtastic_ToRadio_init_zero \ - { \ - 0, \ - { \ - meshtastic_MeshPacket_init_zero \ - } \ - } -#define meshtastic_Compressed_init_zero \ - { \ - _meshtastic_PortNum_MIN, \ - { \ - 0, \ - { \ - 0 \ - } \ - } \ - } -#define meshtastic_NeighborInfo_init_zero \ - { \ - 0, 0, 0, 0, \ - { \ - meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, \ - meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, \ - meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, \ - meshtastic_Neighbor_init_zero \ - } \ - } -#define meshtastic_Neighbor_init_zero \ - { \ - 0, 0, 0, 0 \ - } -#define meshtastic_DeviceMetadata_init_zero \ - { \ - "", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN, 0, 0, 0 \ - } -#define meshtastic_Heartbeat_init_zero \ - { \ - 0 \ - } -#define meshtastic_NodeRemoteHardwarePin_init_zero \ - { \ - 0, false, meshtastic_RemoteHardwarePin_init_zero \ - } -#define meshtastic_ChunkedPayload_init_zero \ - { \ - 0, 0, 0, \ - { \ - 0, \ - { \ - 0 \ - } \ - } \ - } -#define meshtastic_resend_chunks_init_zero \ - { \ - { \ - {NULL}, NULL \ - } \ - } -#define meshtastic_ChunkedPayloadResponse_init_zero \ - { \ - 0, 0, \ - { \ - 0 \ - } \ - } +#define meshtastic_Position_init_default {false, 0, false, 0, false, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, false, 0, false, 0, 0, 0, 0, 0, false, 0, false, 0, 0, 0, 0, 0, 0, 0, 0} +#define meshtastic_User_init_default {"", "", "", {0}, _meshtastic_HardwareModel_MIN, 0, _meshtastic_Config_DeviceConfig_Role_MIN, {0, {0}}, false, 0} +#define meshtastic_RouteDiscovery_init_default {0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}} +#define meshtastic_Routing_init_default {0, {meshtastic_RouteDiscovery_init_default}} +#define meshtastic_Data_init_default {_meshtastic_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0, false, 0, {0, {0}}} +#define meshtastic_KeyVerification_init_default {0, {0, {0}}, {0, {0}}} +#define meshtastic_StoreForwardPlusPlus_init_default {_meshtastic_StoreForwardPlusPlus_SFPP_message_type_MIN, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, 0, 0, 0, 0, 0} +#define meshtastic_RemoteShell_init_default {_meshtastic_RemoteShell_OpCode_MIN, 0, 0, 0, {0, {0}}, 0, 0, 0, 0, 0} +#define meshtastic_BoundingBox_init_default {0, 0, 0, 0} +#define meshtastic_Waypoint_init_default {0, false, 0, false, 0, 0, 0, "", "", 0, 0, false, meshtastic_BoundingBox_init_default, 0, 0, 0} +#define meshtastic_StatusMessage_init_default {""} +#define meshtastic_MqttClientProxyMessage_init_default {"", 0, {{0, {0}}}, 0} +#define meshtastic_MeshPacket_init_default {0, 0, 0, 0, {meshtastic_Data_init_default}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0, _meshtastic_MeshPacket_TransportMechanism_MIN, 0} +#define meshtastic_NodeInfo_init_default {0, false, meshtastic_User_init_default, false, meshtastic_Position_init_default, 0, 0, false, meshtastic_DeviceMetrics_init_default, 0, 0, false, 0, 0, 0, 0, 0, 0} +#define meshtastic_MyNodeInfo_init_default {0, 0, 0, {0, {0}}, "", _meshtastic_FirmwareEdition_MIN, 0} +#define meshtastic_LogRecord_init_default {"", 0, "", _meshtastic_LogRecord_Level_MIN} +#define meshtastic_QueueStatus_init_default {0, 0, 0, 0} +#define meshtastic_FromRadio_init_default {0, 0, {meshtastic_MeshPacket_init_default}} +#define meshtastic_LockdownStatus_init_default {_meshtastic_LockdownStatus_State_MIN, "", 0, 0, 0} +#define meshtastic_ClientNotification_init_default {false, 0, 0, _meshtastic_LogRecord_Level_MIN, "", 0, {meshtastic_KeyVerificationNumberInform_init_default}} +#define meshtastic_KeyVerificationNumberInform_init_default {0, "", 0} +#define meshtastic_KeyVerificationNumberRequest_init_default {0, ""} +#define meshtastic_KeyVerificationFinal_init_default {0, "", 0, ""} +#define meshtastic_DuplicatedPublicKey_init_default {0} +#define meshtastic_LowEntropyKey_init_default {0} +#define meshtastic_FileInfo_init_default {"", 0} +#define meshtastic_ToRadio_init_default {0, {meshtastic_MeshPacket_init_default}} +#define meshtastic_Compressed_init_default {_meshtastic_PortNum_MIN, {0, {0}}} +#define meshtastic_NeighborInfo_init_default {0, 0, 0, 0, {meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default, meshtastic_Neighbor_init_default}} +#define meshtastic_Neighbor_init_default {0, 0, 0, 0} +#define meshtastic_DeviceMetadata_init_default {"", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN, 0, 0, 0, 0} +#define meshtastic_LoRaPresetGroup_init_default {0, {_meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN}, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0} +#define meshtastic_LoRaRegionPresets_init_default {_meshtastic_Config_LoRaConfig_RegionCode_MIN, 0} +#define meshtastic_LoRaRegionPresetMap_init_default {0, {meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default, meshtastic_LoRaPresetGroup_init_default}, 0, {meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default, meshtastic_LoRaRegionPresets_init_default}} +#define meshtastic_Heartbeat_init_default {0} +#define meshtastic_NodeRemoteHardwarePin_init_default {0, false, meshtastic_RemoteHardwarePin_init_default} +#define meshtastic_ChunkedPayload_init_default {0, 0, 0, {0, {0}}} +#define meshtastic_resend_chunks_init_default {{{NULL}, NULL}} +#define meshtastic_ChunkedPayloadResponse_init_default {0, 0, {0}} +#define meshtastic_Position_init_zero {false, 0, false, 0, false, 0, 0, _meshtastic_Position_LocSource_MIN, _meshtastic_Position_AltSource_MIN, 0, 0, false, 0, false, 0, 0, 0, 0, 0, false, 0, false, 0, 0, 0, 0, 0, 0, 0, 0} +#define meshtastic_User_init_zero {"", "", "", {0}, _meshtastic_HardwareModel_MIN, 0, _meshtastic_Config_DeviceConfig_Role_MIN, {0, {0}}, false, 0} +#define meshtastic_RouteDiscovery_init_zero {0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}, 0, {0, 0, 0, 0, 0, 0, 0, 0}} +#define meshtastic_Routing_init_zero {0, {meshtastic_RouteDiscovery_init_zero}} +#define meshtastic_Data_init_zero {_meshtastic_PortNum_MIN, {0, {0}}, 0, 0, 0, 0, 0, 0, false, 0, {0, {0}}} +#define meshtastic_KeyVerification_init_zero {0, {0, {0}}, {0, {0}}} +#define meshtastic_StoreForwardPlusPlus_init_zero {_meshtastic_StoreForwardPlusPlus_SFPP_message_type_MIN, {0, {0}}, {0, {0}}, {0, {0}}, {0, {0}}, 0, 0, 0, 0, 0} +#define meshtastic_RemoteShell_init_zero {_meshtastic_RemoteShell_OpCode_MIN, 0, 0, 0, {0, {0}}, 0, 0, 0, 0, 0} +#define meshtastic_BoundingBox_init_zero {0, 0, 0, 0} +#define meshtastic_Waypoint_init_zero {0, false, 0, false, 0, 0, 0, "", "", 0, 0, false, meshtastic_BoundingBox_init_zero, 0, 0, 0} +#define meshtastic_StatusMessage_init_zero {""} +#define meshtastic_MqttClientProxyMessage_init_zero {"", 0, {{0, {0}}}, 0} +#define meshtastic_MeshPacket_init_zero {0, 0, 0, 0, {meshtastic_Data_init_zero}, 0, 0, 0, 0, 0, _meshtastic_MeshPacket_Priority_MIN, 0, _meshtastic_MeshPacket_Delayed_MIN, 0, 0, {0, {0}}, 0, 0, 0, 0, _meshtastic_MeshPacket_TransportMechanism_MIN, 0} +#define meshtastic_NodeInfo_init_zero {0, false, meshtastic_User_init_zero, false, meshtastic_Position_init_zero, 0, 0, false, meshtastic_DeviceMetrics_init_zero, 0, 0, false, 0, 0, 0, 0, 0, 0} +#define meshtastic_MyNodeInfo_init_zero {0, 0, 0, {0, {0}}, "", _meshtastic_FirmwareEdition_MIN, 0} +#define meshtastic_LogRecord_init_zero {"", 0, "", _meshtastic_LogRecord_Level_MIN} +#define meshtastic_QueueStatus_init_zero {0, 0, 0, 0} +#define meshtastic_FromRadio_init_zero {0, 0, {meshtastic_MeshPacket_init_zero}} +#define meshtastic_LockdownStatus_init_zero {_meshtastic_LockdownStatus_State_MIN, "", 0, 0, 0} +#define meshtastic_ClientNotification_init_zero {false, 0, 0, _meshtastic_LogRecord_Level_MIN, "", 0, {meshtastic_KeyVerificationNumberInform_init_zero}} +#define meshtastic_KeyVerificationNumberInform_init_zero {0, "", 0} +#define meshtastic_KeyVerificationNumberRequest_init_zero {0, ""} +#define meshtastic_KeyVerificationFinal_init_zero {0, "", 0, ""} +#define meshtastic_DuplicatedPublicKey_init_zero {0} +#define meshtastic_LowEntropyKey_init_zero {0} +#define meshtastic_FileInfo_init_zero {"", 0} +#define meshtastic_ToRadio_init_zero {0, {meshtastic_MeshPacket_init_zero}} +#define meshtastic_Compressed_init_zero {_meshtastic_PortNum_MIN, {0, {0}}} +#define meshtastic_NeighborInfo_init_zero {0, 0, 0, 0, {meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero, meshtastic_Neighbor_init_zero}} +#define meshtastic_Neighbor_init_zero {0, 0, 0, 0} +#define meshtastic_DeviceMetadata_init_zero {"", 0, 0, 0, 0, 0, _meshtastic_Config_DeviceConfig_Role_MIN, 0, _meshtastic_HardwareModel_MIN, 0, 0, 0, 0} +#define meshtastic_LoRaPresetGroup_init_zero {0, {_meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, _meshtastic_Config_LoRaConfig_ModemPreset_MIN}, _meshtastic_Config_LoRaConfig_ModemPreset_MIN, 0} +#define meshtastic_LoRaRegionPresets_init_zero {_meshtastic_Config_LoRaConfig_RegionCode_MIN, 0} +#define meshtastic_LoRaRegionPresetMap_init_zero {0, {meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero, meshtastic_LoRaPresetGroup_init_zero}, 0, {meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero, meshtastic_LoRaRegionPresets_init_zero}} +#define meshtastic_Heartbeat_init_zero {0} +#define meshtastic_NodeRemoteHardwarePin_init_zero {0, false, meshtastic_RemoteHardwarePin_init_zero} +#define meshtastic_ChunkedPayload_init_zero {0, 0, 0, {0, {0}}} +#define meshtastic_resend_chunks_init_zero {{{NULL}, NULL}} +#define meshtastic_ChunkedPayloadResponse_init_zero {0, 0, {0}} /* Field tags (for use in manual encoding/decoding) */ -#define meshtastic_Position_latitude_i_tag 1 -#define meshtastic_Position_longitude_i_tag 2 -#define meshtastic_Position_altitude_tag 3 -#define meshtastic_Position_time_tag 4 -#define meshtastic_Position_location_source_tag 5 -#define meshtastic_Position_altitude_source_tag 6 -#define meshtastic_Position_timestamp_tag 7 +#define meshtastic_Position_latitude_i_tag 1 +#define meshtastic_Position_longitude_i_tag 2 +#define meshtastic_Position_altitude_tag 3 +#define meshtastic_Position_time_tag 4 +#define meshtastic_Position_location_source_tag 5 +#define meshtastic_Position_altitude_source_tag 6 +#define meshtastic_Position_timestamp_tag 7 #define meshtastic_Position_timestamp_millis_adjust_tag 8 -#define meshtastic_Position_altitude_hae_tag 9 +#define meshtastic_Position_altitude_hae_tag 9 #define meshtastic_Position_altitude_geoidal_separation_tag 10 -#define meshtastic_Position_PDOP_tag 11 -#define meshtastic_Position_HDOP_tag 12 -#define meshtastic_Position_VDOP_tag 13 -#define meshtastic_Position_gps_accuracy_tag 14 -#define meshtastic_Position_ground_speed_tag 15 -#define meshtastic_Position_ground_track_tag 16 -#define meshtastic_Position_fix_quality_tag 17 -#define meshtastic_Position_fix_type_tag 18 -#define meshtastic_Position_sats_in_view_tag 19 -#define meshtastic_Position_sensor_id_tag 20 -#define meshtastic_Position_next_update_tag 21 -#define meshtastic_Position_seq_number_tag 22 -#define meshtastic_Position_precision_bits_tag 23 -#define meshtastic_User_id_tag 1 -#define meshtastic_User_long_name_tag 2 -#define meshtastic_User_short_name_tag 3 -#define meshtastic_User_macaddr_tag 4 -#define meshtastic_User_hw_model_tag 5 -#define meshtastic_User_is_licensed_tag 6 -#define meshtastic_User_role_tag 7 -#define meshtastic_User_public_key_tag 8 -#define meshtastic_User_is_unmessagable_tag 9 -#define meshtastic_RouteDiscovery_route_tag 1 +#define meshtastic_Position_PDOP_tag 11 +#define meshtastic_Position_HDOP_tag 12 +#define meshtastic_Position_VDOP_tag 13 +#define meshtastic_Position_gps_accuracy_tag 14 +#define meshtastic_Position_ground_speed_tag 15 +#define meshtastic_Position_ground_track_tag 16 +#define meshtastic_Position_fix_quality_tag 17 +#define meshtastic_Position_fix_type_tag 18 +#define meshtastic_Position_sats_in_view_tag 19 +#define meshtastic_Position_sensor_id_tag 20 +#define meshtastic_Position_next_update_tag 21 +#define meshtastic_Position_seq_number_tag 22 +#define meshtastic_Position_precision_bits_tag 23 +#define meshtastic_User_id_tag 1 +#define meshtastic_User_long_name_tag 2 +#define meshtastic_User_short_name_tag 3 +#define meshtastic_User_macaddr_tag 4 +#define meshtastic_User_hw_model_tag 5 +#define meshtastic_User_is_licensed_tag 6 +#define meshtastic_User_role_tag 7 +#define meshtastic_User_public_key_tag 8 +#define meshtastic_User_is_unmessagable_tag 9 +#define meshtastic_RouteDiscovery_route_tag 1 #define meshtastic_RouteDiscovery_snr_towards_tag 2 #define meshtastic_RouteDiscovery_route_back_tag 3 -#define meshtastic_RouteDiscovery_snr_back_tag 4 -#define meshtastic_Routing_route_request_tag 1 -#define meshtastic_Routing_route_reply_tag 2 -#define meshtastic_Routing_error_reason_tag 3 -#define meshtastic_Data_portnum_tag 1 -#define meshtastic_Data_payload_tag 2 -#define meshtastic_Data_want_response_tag 3 -#define meshtastic_Data_dest_tag 4 -#define meshtastic_Data_source_tag 5 -#define meshtastic_Data_request_id_tag 6 -#define meshtastic_Data_reply_id_tag 7 -#define meshtastic_Data_emoji_tag 8 -#define meshtastic_Data_bitfield_tag 9 -#define meshtastic_KeyVerification_nonce_tag 1 -#define meshtastic_KeyVerification_hash1_tag 2 -#define meshtastic_KeyVerification_hash2_tag 3 +#define meshtastic_RouteDiscovery_snr_back_tag 4 +#define meshtastic_Routing_route_request_tag 1 +#define meshtastic_Routing_route_reply_tag 2 +#define meshtastic_Routing_error_reason_tag 3 +#define meshtastic_Data_portnum_tag 1 +#define meshtastic_Data_payload_tag 2 +#define meshtastic_Data_want_response_tag 3 +#define meshtastic_Data_dest_tag 4 +#define meshtastic_Data_source_tag 5 +#define meshtastic_Data_request_id_tag 6 +#define meshtastic_Data_reply_id_tag 7 +#define meshtastic_Data_emoji_tag 8 +#define meshtastic_Data_bitfield_tag 9 +#define meshtastic_Data_xeddsa_signature_tag 10 +#define meshtastic_KeyVerification_nonce_tag 1 +#define meshtastic_KeyVerification_hash1_tag 2 +#define meshtastic_KeyVerification_hash2_tag 3 #define meshtastic_StoreForwardPlusPlus_sfpp_message_type_tag 1 #define meshtastic_StoreForwardPlusPlus_message_hash_tag 2 #define meshtastic_StoreForwardPlusPlus_commit_hash_tag 3 @@ -1862,68 +1858,94 @@ extern "C" { #define meshtastic_StoreForwardPlusPlus_encapsulated_from_tag 8 #define meshtastic_StoreForwardPlusPlus_encapsulated_rxtime_tag 9 #define meshtastic_StoreForwardPlusPlus_chain_count_tag 10 -#define meshtastic_Waypoint_id_tag 1 -#define meshtastic_Waypoint_latitude_i_tag 2 -#define meshtastic_Waypoint_longitude_i_tag 3 -#define meshtastic_Waypoint_expire_tag 4 -#define meshtastic_Waypoint_locked_to_tag 5 -#define meshtastic_Waypoint_name_tag 6 -#define meshtastic_Waypoint_description_tag 7 -#define meshtastic_Waypoint_icon_tag 8 -#define meshtastic_StatusMessage_status_tag 1 +#define meshtastic_RemoteShell_op_tag 1 +#define meshtastic_RemoteShell_session_id_tag 2 +#define meshtastic_RemoteShell_seq_tag 3 +#define meshtastic_RemoteShell_ack_seq_tag 4 +#define meshtastic_RemoteShell_payload_tag 5 +#define meshtastic_RemoteShell_cols_tag 6 +#define meshtastic_RemoteShell_rows_tag 7 +#define meshtastic_RemoteShell_flags_tag 8 +#define meshtastic_RemoteShell_last_tx_seq_tag 9 +#define meshtastic_RemoteShell_last_rx_seq_tag 10 +#define meshtastic_BoundingBox_longitude_west_i_tag 1 +#define meshtastic_BoundingBox_latitude_south_i_tag 2 +#define meshtastic_BoundingBox_longitude_east_i_tag 3 +#define meshtastic_BoundingBox_latitude_north_i_tag 4 +#define meshtastic_Waypoint_id_tag 1 +#define meshtastic_Waypoint_latitude_i_tag 2 +#define meshtastic_Waypoint_longitude_i_tag 3 +#define meshtastic_Waypoint_expire_tag 4 +#define meshtastic_Waypoint_locked_to_tag 5 +#define meshtastic_Waypoint_name_tag 6 +#define meshtastic_Waypoint_description_tag 7 +#define meshtastic_Waypoint_icon_tag 8 +#define meshtastic_Waypoint_geofence_radius_tag 9 +#define meshtastic_Waypoint_bounding_box_tag 10 +#define meshtastic_Waypoint_notify_on_enter_tag 11 +#define meshtastic_Waypoint_notify_on_exit_tag 12 +#define meshtastic_Waypoint_notify_favorites_only_tag 13 +#define meshtastic_StatusMessage_status_tag 1 #define meshtastic_MqttClientProxyMessage_topic_tag 1 #define meshtastic_MqttClientProxyMessage_data_tag 2 #define meshtastic_MqttClientProxyMessage_text_tag 3 #define meshtastic_MqttClientProxyMessage_retained_tag 4 -#define meshtastic_MeshPacket_from_tag 1 -#define meshtastic_MeshPacket_to_tag 2 -#define meshtastic_MeshPacket_channel_tag 3 -#define meshtastic_MeshPacket_decoded_tag 4 -#define meshtastic_MeshPacket_encrypted_tag 5 -#define meshtastic_MeshPacket_id_tag 6 -#define meshtastic_MeshPacket_rx_time_tag 7 -#define meshtastic_MeshPacket_rx_snr_tag 8 -#define meshtastic_MeshPacket_hop_limit_tag 9 -#define meshtastic_MeshPacket_want_ack_tag 10 -#define meshtastic_MeshPacket_priority_tag 11 -#define meshtastic_MeshPacket_rx_rssi_tag 12 -#define meshtastic_MeshPacket_delayed_tag 13 -#define meshtastic_MeshPacket_via_mqtt_tag 14 -#define meshtastic_MeshPacket_hop_start_tag 15 -#define meshtastic_MeshPacket_public_key_tag 16 -#define meshtastic_MeshPacket_pki_encrypted_tag 17 -#define meshtastic_MeshPacket_next_hop_tag 18 -#define meshtastic_MeshPacket_relay_node_tag 19 -#define meshtastic_MeshPacket_tx_after_tag 20 +#define meshtastic_MeshPacket_from_tag 1 +#define meshtastic_MeshPacket_to_tag 2 +#define meshtastic_MeshPacket_channel_tag 3 +#define meshtastic_MeshPacket_decoded_tag 4 +#define meshtastic_MeshPacket_encrypted_tag 5 +#define meshtastic_MeshPacket_id_tag 6 +#define meshtastic_MeshPacket_rx_time_tag 7 +#define meshtastic_MeshPacket_rx_snr_tag 8 +#define meshtastic_MeshPacket_hop_limit_tag 9 +#define meshtastic_MeshPacket_want_ack_tag 10 +#define meshtastic_MeshPacket_priority_tag 11 +#define meshtastic_MeshPacket_rx_rssi_tag 12 +#define meshtastic_MeshPacket_delayed_tag 13 +#define meshtastic_MeshPacket_via_mqtt_tag 14 +#define meshtastic_MeshPacket_hop_start_tag 15 +#define meshtastic_MeshPacket_public_key_tag 16 +#define meshtastic_MeshPacket_pki_encrypted_tag 17 +#define meshtastic_MeshPacket_next_hop_tag 18 +#define meshtastic_MeshPacket_relay_node_tag 19 +#define meshtastic_MeshPacket_tx_after_tag 20 #define meshtastic_MeshPacket_transport_mechanism_tag 21 -#define meshtastic_NodeInfo_num_tag 1 -#define meshtastic_NodeInfo_user_tag 2 -#define meshtastic_NodeInfo_position_tag 3 -#define meshtastic_NodeInfo_snr_tag 4 -#define meshtastic_NodeInfo_last_heard_tag 5 -#define meshtastic_NodeInfo_device_metrics_tag 6 -#define meshtastic_NodeInfo_channel_tag 7 -#define meshtastic_NodeInfo_via_mqtt_tag 8 -#define meshtastic_NodeInfo_hops_away_tag 9 -#define meshtastic_NodeInfo_is_favorite_tag 10 -#define meshtastic_NodeInfo_is_ignored_tag 11 +#define meshtastic_MeshPacket_xeddsa_signed_tag 22 +#define meshtastic_NodeInfo_num_tag 1 +#define meshtastic_NodeInfo_user_tag 2 +#define meshtastic_NodeInfo_position_tag 3 +#define meshtastic_NodeInfo_snr_tag 4 +#define meshtastic_NodeInfo_last_heard_tag 5 +#define meshtastic_NodeInfo_device_metrics_tag 6 +#define meshtastic_NodeInfo_channel_tag 7 +#define meshtastic_NodeInfo_via_mqtt_tag 8 +#define meshtastic_NodeInfo_hops_away_tag 9 +#define meshtastic_NodeInfo_is_favorite_tag 10 +#define meshtastic_NodeInfo_is_ignored_tag 11 #define meshtastic_NodeInfo_is_key_manually_verified_tag 12 -#define meshtastic_NodeInfo_is_muted_tag 13 -#define meshtastic_MyNodeInfo_my_node_num_tag 1 -#define meshtastic_MyNodeInfo_reboot_count_tag 8 +#define meshtastic_NodeInfo_is_muted_tag 13 +#define meshtastic_NodeInfo_has_xeddsa_signed_tag 14 +#define meshtastic_MyNodeInfo_my_node_num_tag 1 +#define meshtastic_MyNodeInfo_reboot_count_tag 8 #define meshtastic_MyNodeInfo_min_app_version_tag 11 -#define meshtastic_MyNodeInfo_device_id_tag 12 -#define meshtastic_MyNodeInfo_pio_env_tag 13 +#define meshtastic_MyNodeInfo_device_id_tag 12 +#define meshtastic_MyNodeInfo_pio_env_tag 13 #define meshtastic_MyNodeInfo_firmware_edition_tag 14 -#define meshtastic_MyNodeInfo_nodedb_count_tag 15 -#define meshtastic_LogRecord_message_tag 1 -#define meshtastic_LogRecord_time_tag 2 -#define meshtastic_LogRecord_source_tag 3 -#define meshtastic_LogRecord_level_tag 4 -#define meshtastic_QueueStatus_res_tag 1 -#define meshtastic_QueueStatus_free_tag 2 -#define meshtastic_QueueStatus_maxlen_tag 3 +#define meshtastic_MyNodeInfo_nodedb_count_tag 15 +#define meshtastic_LogRecord_message_tag 1 +#define meshtastic_LogRecord_time_tag 2 +#define meshtastic_LogRecord_source_tag 3 +#define meshtastic_LogRecord_level_tag 4 +#define meshtastic_QueueStatus_res_tag 1 +#define meshtastic_QueueStatus_free_tag 2 +#define meshtastic_QueueStatus_maxlen_tag 3 #define meshtastic_QueueStatus_mesh_packet_id_tag 4 +#define meshtastic_LockdownStatus_state_tag 1 +#define meshtastic_LockdownStatus_lock_reason_tag 2 +#define meshtastic_LockdownStatus_boots_remaining_tag 3 +#define meshtastic_LockdownStatus_valid_until_epoch_tag 4 +#define meshtastic_LockdownStatus_backoff_seconds_tag 5 #define meshtastic_KeyVerificationNumberInform_nonce_tag 1 #define meshtastic_KeyVerificationNumberInform_remote_longname_tag 2 #define meshtastic_KeyVerificationNumberInform_security_number_tag 3 @@ -1934,281 +1956,325 @@ extern "C" { #define meshtastic_KeyVerificationFinal_isSender_tag 3 #define meshtastic_KeyVerificationFinal_verification_characters_tag 4 #define meshtastic_ClientNotification_reply_id_tag 1 -#define meshtastic_ClientNotification_time_tag 2 -#define meshtastic_ClientNotification_level_tag 3 +#define meshtastic_ClientNotification_time_tag 2 +#define meshtastic_ClientNotification_level_tag 3 #define meshtastic_ClientNotification_message_tag 4 #define meshtastic_ClientNotification_key_verification_number_inform_tag 11 #define meshtastic_ClientNotification_key_verification_number_request_tag 12 #define meshtastic_ClientNotification_key_verification_final_tag 13 #define meshtastic_ClientNotification_duplicated_public_key_tag 14 #define meshtastic_ClientNotification_low_entropy_key_tag 15 -#define meshtastic_FileInfo_file_name_tag 1 -#define meshtastic_FileInfo_size_bytes_tag 2 -#define meshtastic_Compressed_portnum_tag 1 -#define meshtastic_Compressed_data_tag 2 -#define meshtastic_Neighbor_node_id_tag 1 -#define meshtastic_Neighbor_snr_tag 2 -#define meshtastic_Neighbor_last_rx_time_tag 3 +#define meshtastic_FileInfo_file_name_tag 1 +#define meshtastic_FileInfo_size_bytes_tag 2 +#define meshtastic_Compressed_portnum_tag 1 +#define meshtastic_Compressed_data_tag 2 +#define meshtastic_Neighbor_node_id_tag 1 +#define meshtastic_Neighbor_snr_tag 2 +#define meshtastic_Neighbor_last_rx_time_tag 3 #define meshtastic_Neighbor_node_broadcast_interval_secs_tag 4 -#define meshtastic_NeighborInfo_node_id_tag 1 +#define meshtastic_NeighborInfo_node_id_tag 1 #define meshtastic_NeighborInfo_last_sent_by_id_tag 2 #define meshtastic_NeighborInfo_node_broadcast_interval_secs_tag 3 -#define meshtastic_NeighborInfo_neighbors_tag 4 +#define meshtastic_NeighborInfo_neighbors_tag 4 #define meshtastic_DeviceMetadata_firmware_version_tag 1 #define meshtastic_DeviceMetadata_device_state_version_tag 2 #define meshtastic_DeviceMetadata_canShutdown_tag 3 -#define meshtastic_DeviceMetadata_hasWifi_tag 4 +#define meshtastic_DeviceMetadata_hasWifi_tag 4 #define meshtastic_DeviceMetadata_hasBluetooth_tag 5 #define meshtastic_DeviceMetadata_hasEthernet_tag 6 -#define meshtastic_DeviceMetadata_role_tag 7 +#define meshtastic_DeviceMetadata_role_tag 7 #define meshtastic_DeviceMetadata_position_flags_tag 8 -#define meshtastic_DeviceMetadata_hw_model_tag 9 +#define meshtastic_DeviceMetadata_hw_model_tag 9 #define meshtastic_DeviceMetadata_hasRemoteHardware_tag 10 -#define meshtastic_DeviceMetadata_hasPKC_tag 11 +#define meshtastic_DeviceMetadata_hasPKC_tag 11 #define meshtastic_DeviceMetadata_excluded_modules_tag 12 -#define meshtastic_FromRadio_id_tag 1 -#define meshtastic_FromRadio_packet_tag 2 -#define meshtastic_FromRadio_my_info_tag 3 -#define meshtastic_FromRadio_node_info_tag 4 -#define meshtastic_FromRadio_config_tag 5 -#define meshtastic_FromRadio_log_record_tag 6 +#define meshtastic_DeviceMetadata_has_xeddsa_tag 14 +#define meshtastic_LoRaPresetGroup_presets_tag 1 +#define meshtastic_LoRaPresetGroup_default_preset_tag 2 +#define meshtastic_LoRaPresetGroup_licensed_only_tag 3 +#define meshtastic_LoRaRegionPresets_region_tag 1 +#define meshtastic_LoRaRegionPresets_group_index_tag 2 +#define meshtastic_LoRaRegionPresetMap_groups_tag 1 +#define meshtastic_LoRaRegionPresetMap_region_groups_tag 2 +#define meshtastic_FromRadio_id_tag 1 +#define meshtastic_FromRadio_packet_tag 2 +#define meshtastic_FromRadio_my_info_tag 3 +#define meshtastic_FromRadio_node_info_tag 4 +#define meshtastic_FromRadio_config_tag 5 +#define meshtastic_FromRadio_log_record_tag 6 #define meshtastic_FromRadio_config_complete_id_tag 7 -#define meshtastic_FromRadio_rebooted_tag 8 -#define meshtastic_FromRadio_moduleConfig_tag 9 -#define meshtastic_FromRadio_channel_tag 10 -#define meshtastic_FromRadio_queueStatus_tag 11 -#define meshtastic_FromRadio_xmodemPacket_tag 12 -#define meshtastic_FromRadio_metadata_tag 13 +#define meshtastic_FromRadio_rebooted_tag 8 +#define meshtastic_FromRadio_moduleConfig_tag 9 +#define meshtastic_FromRadio_channel_tag 10 +#define meshtastic_FromRadio_queueStatus_tag 11 +#define meshtastic_FromRadio_xmodemPacket_tag 12 +#define meshtastic_FromRadio_metadata_tag 13 #define meshtastic_FromRadio_mqttClientProxyMessage_tag 14 -#define meshtastic_FromRadio_fileInfo_tag 15 +#define meshtastic_FromRadio_fileInfo_tag 15 #define meshtastic_FromRadio_clientNotification_tag 16 -#define meshtastic_FromRadio_deviceuiConfig_tag 17 -#define meshtastic_Heartbeat_nonce_tag 1 -#define meshtastic_ToRadio_packet_tag 1 -#define meshtastic_ToRadio_want_config_id_tag 3 -#define meshtastic_ToRadio_disconnect_tag 4 -#define meshtastic_ToRadio_xmodemPacket_tag 5 +#define meshtastic_FromRadio_deviceuiConfig_tag 17 +#define meshtastic_FromRadio_lockdown_status_tag 18 +#define meshtastic_FromRadio_region_presets_tag 19 +#define meshtastic_Heartbeat_nonce_tag 1 +#define meshtastic_ToRadio_packet_tag 1 +#define meshtastic_ToRadio_want_config_id_tag 3 +#define meshtastic_ToRadio_disconnect_tag 4 +#define meshtastic_ToRadio_xmodemPacket_tag 5 #define meshtastic_ToRadio_mqttClientProxyMessage_tag 6 -#define meshtastic_ToRadio_heartbeat_tag 7 +#define meshtastic_ToRadio_heartbeat_tag 7 #define meshtastic_NodeRemoteHardwarePin_node_num_tag 1 #define meshtastic_NodeRemoteHardwarePin_pin_tag 2 #define meshtastic_ChunkedPayload_payload_id_tag 1 #define meshtastic_ChunkedPayload_chunk_count_tag 2 #define meshtastic_ChunkedPayload_chunk_index_tag 3 #define meshtastic_ChunkedPayload_payload_chunk_tag 4 -#define meshtastic_resend_chunks_chunks_tag 1 +#define meshtastic_resend_chunks_chunks_tag 1 #define meshtastic_ChunkedPayloadResponse_payload_id_tag 1 #define meshtastic_ChunkedPayloadResponse_request_transfer_tag 2 #define meshtastic_ChunkedPayloadResponse_accept_transfer_tag 3 #define meshtastic_ChunkedPayloadResponse_resend_chunks_tag 4 /* Struct field encoding specification for nanopb */ -#define meshtastic_Position_FIELDLIST(X, a) \ - X(a, STATIC, OPTIONAL, SFIXED32, latitude_i, 1) \ - X(a, STATIC, OPTIONAL, SFIXED32, longitude_i, 2) \ - X(a, STATIC, OPTIONAL, INT32, altitude, 3) \ - X(a, STATIC, SINGULAR, FIXED32, time, 4) \ - X(a, STATIC, SINGULAR, UENUM, location_source, 5) \ - X(a, STATIC, SINGULAR, UENUM, altitude_source, 6) \ - X(a, STATIC, SINGULAR, FIXED32, timestamp, 7) \ - X(a, STATIC, SINGULAR, INT32, timestamp_millis_adjust, 8) \ - X(a, STATIC, OPTIONAL, SINT32, altitude_hae, 9) \ - X(a, STATIC, OPTIONAL, SINT32, altitude_geoidal_separation, 10) \ - X(a, STATIC, SINGULAR, UINT32, PDOP, 11) \ - X(a, STATIC, SINGULAR, UINT32, HDOP, 12) \ - X(a, STATIC, SINGULAR, UINT32, VDOP, 13) \ - X(a, STATIC, SINGULAR, UINT32, gps_accuracy, 14) \ - X(a, STATIC, OPTIONAL, UINT32, ground_speed, 15) \ - X(a, STATIC, OPTIONAL, UINT32, ground_track, 16) \ - X(a, STATIC, SINGULAR, UINT32, fix_quality, 17) \ - X(a, STATIC, SINGULAR, UINT32, fix_type, 18) \ - X(a, STATIC, SINGULAR, UINT32, sats_in_view, 19) \ - X(a, STATIC, SINGULAR, UINT32, sensor_id, 20) \ - X(a, STATIC, SINGULAR, UINT32, next_update, 21) \ - X(a, STATIC, SINGULAR, UINT32, seq_number, 22) \ - X(a, STATIC, SINGULAR, UINT32, precision_bits, 23) +#define meshtastic_Position_FIELDLIST(X, a) \ +X(a, STATIC, OPTIONAL, SFIXED32, latitude_i, 1) \ +X(a, STATIC, OPTIONAL, SFIXED32, longitude_i, 2) \ +X(a, STATIC, OPTIONAL, INT32, altitude, 3) \ +X(a, STATIC, SINGULAR, FIXED32, time, 4) \ +X(a, STATIC, SINGULAR, UENUM, location_source, 5) \ +X(a, STATIC, SINGULAR, UENUM, altitude_source, 6) \ +X(a, STATIC, SINGULAR, FIXED32, timestamp, 7) \ +X(a, STATIC, SINGULAR, INT32, timestamp_millis_adjust, 8) \ +X(a, STATIC, OPTIONAL, SINT32, altitude_hae, 9) \ +X(a, STATIC, OPTIONAL, SINT32, altitude_geoidal_separation, 10) \ +X(a, STATIC, SINGULAR, UINT32, PDOP, 11) \ +X(a, STATIC, SINGULAR, UINT32, HDOP, 12) \ +X(a, STATIC, SINGULAR, UINT32, VDOP, 13) \ +X(a, STATIC, SINGULAR, UINT32, gps_accuracy, 14) \ +X(a, STATIC, OPTIONAL, UINT32, ground_speed, 15) \ +X(a, STATIC, OPTIONAL, UINT32, ground_track, 16) \ +X(a, STATIC, SINGULAR, UINT32, fix_quality, 17) \ +X(a, STATIC, SINGULAR, UINT32, fix_type, 18) \ +X(a, STATIC, SINGULAR, UINT32, sats_in_view, 19) \ +X(a, STATIC, SINGULAR, UINT32, sensor_id, 20) \ +X(a, STATIC, SINGULAR, UINT32, next_update, 21) \ +X(a, STATIC, SINGULAR, UINT32, seq_number, 22) \ +X(a, STATIC, SINGULAR, UINT32, precision_bits, 23) #define meshtastic_Position_CALLBACK NULL #define meshtastic_Position_DEFAULT NULL -#define meshtastic_User_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, STRING, id, 1) \ - X(a, STATIC, SINGULAR, STRING, long_name, 2) \ - X(a, STATIC, SINGULAR, STRING, short_name, 3) \ - X(a, STATIC, SINGULAR, FIXED_LENGTH_BYTES, macaddr, 4) \ - X(a, STATIC, SINGULAR, UENUM, hw_model, 5) \ - X(a, STATIC, SINGULAR, BOOL, is_licensed, 6) \ - X(a, STATIC, SINGULAR, UENUM, role, 7) \ - X(a, STATIC, SINGULAR, BYTES, public_key, 8) \ - X(a, STATIC, OPTIONAL, BOOL, is_unmessagable, 9) +#define meshtastic_User_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, id, 1) \ +X(a, STATIC, SINGULAR, STRING, long_name, 2) \ +X(a, STATIC, SINGULAR, STRING, short_name, 3) \ +X(a, STATIC, SINGULAR, FIXED_LENGTH_BYTES, macaddr, 4) \ +X(a, STATIC, SINGULAR, UENUM, hw_model, 5) \ +X(a, STATIC, SINGULAR, BOOL, is_licensed, 6) \ +X(a, STATIC, SINGULAR, UENUM, role, 7) \ +X(a, STATIC, SINGULAR, BYTES, public_key, 8) \ +X(a, STATIC, OPTIONAL, BOOL, is_unmessagable, 9) #define meshtastic_User_CALLBACK NULL #define meshtastic_User_DEFAULT NULL -#define meshtastic_RouteDiscovery_FIELDLIST(X, a) \ - X(a, STATIC, REPEATED, FIXED32, route, 1) \ - X(a, STATIC, REPEATED, INT32, snr_towards, 2) \ - X(a, STATIC, REPEATED, FIXED32, route_back, 3) \ - X(a, STATIC, REPEATED, INT32, snr_back, 4) +#define meshtastic_RouteDiscovery_FIELDLIST(X, a) \ +X(a, STATIC, REPEATED, FIXED32, route, 1) \ +X(a, STATIC, REPEATED, INT32, snr_towards, 2) \ +X(a, STATIC, REPEATED, FIXED32, route_back, 3) \ +X(a, STATIC, REPEATED, INT32, snr_back, 4) #define meshtastic_RouteDiscovery_CALLBACK NULL #define meshtastic_RouteDiscovery_DEFAULT NULL -#define meshtastic_Routing_FIELDLIST(X, a) \ - X(a, STATIC, ONEOF, MESSAGE, (variant, route_request, route_request), 1) \ - X(a, STATIC, ONEOF, MESSAGE, (variant, route_reply, route_reply), 2) \ - X(a, STATIC, ONEOF, UENUM, (variant, error_reason, error_reason), 3) +#define meshtastic_Routing_FIELDLIST(X, a) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,route_request,route_request), 1) \ +X(a, STATIC, ONEOF, MESSAGE, (variant,route_reply,route_reply), 2) \ +X(a, STATIC, ONEOF, UENUM, (variant,error_reason,error_reason), 3) #define meshtastic_Routing_CALLBACK NULL #define meshtastic_Routing_DEFAULT NULL #define meshtastic_Routing_variant_route_request_MSGTYPE meshtastic_RouteDiscovery #define meshtastic_Routing_variant_route_reply_MSGTYPE meshtastic_RouteDiscovery -#define meshtastic_Data_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UENUM, portnum, 1) \ - X(a, STATIC, SINGULAR, BYTES, payload, 2) \ - X(a, STATIC, SINGULAR, BOOL, want_response, 3) \ - X(a, STATIC, SINGULAR, FIXED32, dest, 4) \ - X(a, STATIC, SINGULAR, FIXED32, source, 5) \ - X(a, STATIC, SINGULAR, FIXED32, request_id, 6) \ - X(a, STATIC, SINGULAR, FIXED32, reply_id, 7) \ - X(a, STATIC, SINGULAR, FIXED32, emoji, 8) \ - X(a, STATIC, OPTIONAL, UINT32, bitfield, 9) +#define meshtastic_Data_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, portnum, 1) \ +X(a, STATIC, SINGULAR, BYTES, payload, 2) \ +X(a, STATIC, SINGULAR, BOOL, want_response, 3) \ +X(a, STATIC, SINGULAR, FIXED32, dest, 4) \ +X(a, STATIC, SINGULAR, FIXED32, source, 5) \ +X(a, STATIC, SINGULAR, FIXED32, request_id, 6) \ +X(a, STATIC, SINGULAR, FIXED32, reply_id, 7) \ +X(a, STATIC, SINGULAR, FIXED32, emoji, 8) \ +X(a, STATIC, OPTIONAL, UINT32, bitfield, 9) \ +X(a, STATIC, SINGULAR, BYTES, xeddsa_signature, 10) #define meshtastic_Data_CALLBACK NULL #define meshtastic_Data_DEFAULT NULL -#define meshtastic_KeyVerification_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ - X(a, STATIC, SINGULAR, BYTES, hash1, 2) \ - X(a, STATIC, SINGULAR, BYTES, hash2, 3) +#define meshtastic_KeyVerification_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ +X(a, STATIC, SINGULAR, BYTES, hash1, 2) \ +X(a, STATIC, SINGULAR, BYTES, hash2, 3) #define meshtastic_KeyVerification_CALLBACK NULL #define meshtastic_KeyVerification_DEFAULT NULL -#define meshtastic_StoreForwardPlusPlus_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UENUM, sfpp_message_type, 1) \ - X(a, STATIC, SINGULAR, BYTES, message_hash, 2) \ - X(a, STATIC, SINGULAR, BYTES, commit_hash, 3) \ - X(a, STATIC, SINGULAR, BYTES, root_hash, 4) \ - X(a, STATIC, SINGULAR, BYTES, message, 5) \ - X(a, STATIC, SINGULAR, UINT32, encapsulated_id, 6) \ - X(a, STATIC, SINGULAR, UINT32, encapsulated_to, 7) \ - X(a, STATIC, SINGULAR, UINT32, encapsulated_from, 8) \ - X(a, STATIC, SINGULAR, UINT32, encapsulated_rxtime, 9) \ - X(a, STATIC, SINGULAR, UINT32, chain_count, 10) +#define meshtastic_StoreForwardPlusPlus_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, sfpp_message_type, 1) \ +X(a, STATIC, SINGULAR, BYTES, message_hash, 2) \ +X(a, STATIC, SINGULAR, BYTES, commit_hash, 3) \ +X(a, STATIC, SINGULAR, BYTES, root_hash, 4) \ +X(a, STATIC, SINGULAR, BYTES, message, 5) \ +X(a, STATIC, SINGULAR, UINT32, encapsulated_id, 6) \ +X(a, STATIC, SINGULAR, UINT32, encapsulated_to, 7) \ +X(a, STATIC, SINGULAR, UINT32, encapsulated_from, 8) \ +X(a, STATIC, SINGULAR, UINT32, encapsulated_rxtime, 9) \ +X(a, STATIC, SINGULAR, UINT32, chain_count, 10) #define meshtastic_StoreForwardPlusPlus_CALLBACK NULL #define meshtastic_StoreForwardPlusPlus_DEFAULT NULL -#define meshtastic_Waypoint_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, id, 1) \ - X(a, STATIC, OPTIONAL, SFIXED32, latitude_i, 2) \ - X(a, STATIC, OPTIONAL, SFIXED32, longitude_i, 3) \ - X(a, STATIC, SINGULAR, UINT32, expire, 4) \ - X(a, STATIC, SINGULAR, UINT32, locked_to, 5) \ - X(a, STATIC, SINGULAR, STRING, name, 6) \ - X(a, STATIC, SINGULAR, STRING, description, 7) \ - X(a, STATIC, SINGULAR, FIXED32, icon, 8) +#define meshtastic_RemoteShell_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, op, 1) \ +X(a, STATIC, SINGULAR, UINT32, session_id, 2) \ +X(a, STATIC, SINGULAR, UINT32, seq, 3) \ +X(a, STATIC, SINGULAR, UINT32, ack_seq, 4) \ +X(a, STATIC, SINGULAR, BYTES, payload, 5) \ +X(a, STATIC, SINGULAR, UINT32, cols, 6) \ +X(a, STATIC, SINGULAR, UINT32, rows, 7) \ +X(a, STATIC, SINGULAR, UINT32, flags, 8) \ +X(a, STATIC, SINGULAR, UINT32, last_tx_seq, 9) \ +X(a, STATIC, SINGULAR, UINT32, last_rx_seq, 10) +#define meshtastic_RemoteShell_CALLBACK NULL +#define meshtastic_RemoteShell_DEFAULT NULL + +#define meshtastic_BoundingBox_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, SFIXED32, longitude_west_i, 1) \ +X(a, STATIC, SINGULAR, SFIXED32, latitude_south_i, 2) \ +X(a, STATIC, SINGULAR, SFIXED32, longitude_east_i, 3) \ +X(a, STATIC, SINGULAR, SFIXED32, latitude_north_i, 4) +#define meshtastic_BoundingBox_CALLBACK NULL +#define meshtastic_BoundingBox_DEFAULT NULL + +#define meshtastic_Waypoint_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, id, 1) \ +X(a, STATIC, OPTIONAL, SFIXED32, latitude_i, 2) \ +X(a, STATIC, OPTIONAL, SFIXED32, longitude_i, 3) \ +X(a, STATIC, SINGULAR, UINT32, expire, 4) \ +X(a, STATIC, SINGULAR, UINT32, locked_to, 5) \ +X(a, STATIC, SINGULAR, STRING, name, 6) \ +X(a, STATIC, SINGULAR, STRING, description, 7) \ +X(a, STATIC, SINGULAR, FIXED32, icon, 8) \ +X(a, STATIC, SINGULAR, UINT32, geofence_radius, 9) \ +X(a, STATIC, OPTIONAL, MESSAGE, bounding_box, 10) \ +X(a, STATIC, SINGULAR, BOOL, notify_on_enter, 11) \ +X(a, STATIC, SINGULAR, BOOL, notify_on_exit, 12) \ +X(a, STATIC, SINGULAR, BOOL, notify_favorites_only, 13) #define meshtastic_Waypoint_CALLBACK NULL #define meshtastic_Waypoint_DEFAULT NULL +#define meshtastic_Waypoint_bounding_box_MSGTYPE meshtastic_BoundingBox -#define meshtastic_StatusMessage_FIELDLIST(X, a) X(a, STATIC, SINGULAR, STRING, status, 1) +#define meshtastic_StatusMessage_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, status, 1) #define meshtastic_StatusMessage_CALLBACK NULL #define meshtastic_StatusMessage_DEFAULT NULL -#define meshtastic_MqttClientProxyMessage_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, STRING, topic, 1) \ - X(a, STATIC, ONEOF, BYTES, (payload_variant, data, payload_variant.data), 2) \ - X(a, STATIC, ONEOF, STRING, (payload_variant, text, payload_variant.text), 3) \ - X(a, STATIC, SINGULAR, BOOL, retained, 4) +#define meshtastic_MqttClientProxyMessage_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, topic, 1) \ +X(a, STATIC, ONEOF, BYTES, (payload_variant,data,payload_variant.data), 2) \ +X(a, STATIC, ONEOF, STRING, (payload_variant,text,payload_variant.text), 3) \ +X(a, STATIC, SINGULAR, BOOL, retained, 4) #define meshtastic_MqttClientProxyMessage_CALLBACK NULL #define meshtastic_MqttClientProxyMessage_DEFAULT NULL -#define meshtastic_MeshPacket_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, FIXED32, from, 1) \ - X(a, STATIC, SINGULAR, FIXED32, to, 2) \ - X(a, STATIC, SINGULAR, UINT32, channel, 3) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, decoded, decoded), 4) \ - X(a, STATIC, ONEOF, BYTES, (payload_variant, encrypted, encrypted), 5) \ - X(a, STATIC, SINGULAR, FIXED32, id, 6) \ - X(a, STATIC, SINGULAR, FIXED32, rx_time, 7) \ - X(a, STATIC, SINGULAR, FLOAT, rx_snr, 8) \ - X(a, STATIC, SINGULAR, UINT32, hop_limit, 9) \ - X(a, STATIC, SINGULAR, BOOL, want_ack, 10) \ - X(a, STATIC, SINGULAR, UENUM, priority, 11) \ - X(a, STATIC, SINGULAR, INT32, rx_rssi, 12) \ - X(a, STATIC, SINGULAR, UENUM, delayed, 13) \ - X(a, STATIC, SINGULAR, BOOL, via_mqtt, 14) \ - X(a, STATIC, SINGULAR, UINT32, hop_start, 15) \ - X(a, STATIC, SINGULAR, BYTES, public_key, 16) \ - X(a, STATIC, SINGULAR, BOOL, pki_encrypted, 17) \ - X(a, STATIC, SINGULAR, UINT32, next_hop, 18) \ - X(a, STATIC, SINGULAR, UINT32, relay_node, 19) \ - X(a, STATIC, SINGULAR, UINT32, tx_after, 20) \ - X(a, STATIC, SINGULAR, UENUM, transport_mechanism, 21) +#define meshtastic_MeshPacket_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, FIXED32, from, 1) \ +X(a, STATIC, SINGULAR, FIXED32, to, 2) \ +X(a, STATIC, SINGULAR, UINT32, channel, 3) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,decoded,decoded), 4) \ +X(a, STATIC, ONEOF, BYTES, (payload_variant,encrypted,encrypted), 5) \ +X(a, STATIC, SINGULAR, FIXED32, id, 6) \ +X(a, STATIC, SINGULAR, FIXED32, rx_time, 7) \ +X(a, STATIC, SINGULAR, FLOAT, rx_snr, 8) \ +X(a, STATIC, SINGULAR, UINT32, hop_limit, 9) \ +X(a, STATIC, SINGULAR, BOOL, want_ack, 10) \ +X(a, STATIC, SINGULAR, UENUM, priority, 11) \ +X(a, STATIC, SINGULAR, INT32, rx_rssi, 12) \ +X(a, STATIC, SINGULAR, UENUM, delayed, 13) \ +X(a, STATIC, SINGULAR, BOOL, via_mqtt, 14) \ +X(a, STATIC, SINGULAR, UINT32, hop_start, 15) \ +X(a, STATIC, SINGULAR, BYTES, public_key, 16) \ +X(a, STATIC, SINGULAR, BOOL, pki_encrypted, 17) \ +X(a, STATIC, SINGULAR, UINT32, next_hop, 18) \ +X(a, STATIC, SINGULAR, UINT32, relay_node, 19) \ +X(a, STATIC, SINGULAR, UINT32, tx_after, 20) \ +X(a, STATIC, SINGULAR, UENUM, transport_mechanism, 21) \ +X(a, STATIC, SINGULAR, BOOL, xeddsa_signed, 22) #define meshtastic_MeshPacket_CALLBACK NULL #define meshtastic_MeshPacket_DEFAULT NULL #define meshtastic_MeshPacket_payload_variant_decoded_MSGTYPE meshtastic_Data -#define meshtastic_NodeInfo_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, num, 1) \ - X(a, STATIC, OPTIONAL, MESSAGE, user, 2) \ - X(a, STATIC, OPTIONAL, MESSAGE, position, 3) \ - X(a, STATIC, SINGULAR, FLOAT, snr, 4) \ - X(a, STATIC, SINGULAR, FIXED32, last_heard, 5) \ - X(a, STATIC, OPTIONAL, MESSAGE, device_metrics, 6) \ - X(a, STATIC, SINGULAR, UINT32, channel, 7) \ - X(a, STATIC, SINGULAR, BOOL, via_mqtt, 8) \ - X(a, STATIC, OPTIONAL, UINT32, hops_away, 9) \ - X(a, STATIC, SINGULAR, BOOL, is_favorite, 10) \ - X(a, STATIC, SINGULAR, BOOL, is_ignored, 11) \ - X(a, STATIC, SINGULAR, BOOL, is_key_manually_verified, 12) \ - X(a, STATIC, SINGULAR, BOOL, is_muted, 13) +#define meshtastic_NodeInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, num, 1) \ +X(a, STATIC, OPTIONAL, MESSAGE, user, 2) \ +X(a, STATIC, OPTIONAL, MESSAGE, position, 3) \ +X(a, STATIC, SINGULAR, FLOAT, snr, 4) \ +X(a, STATIC, SINGULAR, FIXED32, last_heard, 5) \ +X(a, STATIC, OPTIONAL, MESSAGE, device_metrics, 6) \ +X(a, STATIC, SINGULAR, UINT32, channel, 7) \ +X(a, STATIC, SINGULAR, BOOL, via_mqtt, 8) \ +X(a, STATIC, OPTIONAL, UINT32, hops_away, 9) \ +X(a, STATIC, SINGULAR, BOOL, is_favorite, 10) \ +X(a, STATIC, SINGULAR, BOOL, is_ignored, 11) \ +X(a, STATIC, SINGULAR, BOOL, is_key_manually_verified, 12) \ +X(a, STATIC, SINGULAR, BOOL, is_muted, 13) \ +X(a, STATIC, SINGULAR, BOOL, has_xeddsa_signed, 14) #define meshtastic_NodeInfo_CALLBACK NULL #define meshtastic_NodeInfo_DEFAULT NULL #define meshtastic_NodeInfo_user_MSGTYPE meshtastic_User #define meshtastic_NodeInfo_position_MSGTYPE meshtastic_Position #define meshtastic_NodeInfo_device_metrics_MSGTYPE meshtastic_DeviceMetrics -#define meshtastic_MyNodeInfo_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, my_node_num, 1) \ - X(a, STATIC, SINGULAR, UINT32, reboot_count, 8) \ - X(a, STATIC, SINGULAR, UINT32, min_app_version, 11) \ - X(a, STATIC, SINGULAR, BYTES, device_id, 12) \ - X(a, STATIC, SINGULAR, STRING, pio_env, 13) \ - X(a, STATIC, SINGULAR, UENUM, firmware_edition, 14) \ - X(a, STATIC, SINGULAR, UINT32, nodedb_count, 15) +#define meshtastic_MyNodeInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, my_node_num, 1) \ +X(a, STATIC, SINGULAR, UINT32, reboot_count, 8) \ +X(a, STATIC, SINGULAR, UINT32, min_app_version, 11) \ +X(a, STATIC, SINGULAR, BYTES, device_id, 12) \ +X(a, STATIC, SINGULAR, STRING, pio_env, 13) \ +X(a, STATIC, SINGULAR, UENUM, firmware_edition, 14) \ +X(a, STATIC, SINGULAR, UINT32, nodedb_count, 15) #define meshtastic_MyNodeInfo_CALLBACK NULL #define meshtastic_MyNodeInfo_DEFAULT NULL -#define meshtastic_LogRecord_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, STRING, message, 1) \ - X(a, STATIC, SINGULAR, FIXED32, time, 2) \ - X(a, STATIC, SINGULAR, STRING, source, 3) \ - X(a, STATIC, SINGULAR, UENUM, level, 4) +#define meshtastic_LogRecord_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, message, 1) \ +X(a, STATIC, SINGULAR, FIXED32, time, 2) \ +X(a, STATIC, SINGULAR, STRING, source, 3) \ +X(a, STATIC, SINGULAR, UENUM, level, 4) #define meshtastic_LogRecord_CALLBACK NULL #define meshtastic_LogRecord_DEFAULT NULL -#define meshtastic_QueueStatus_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, INT32, res, 1) \ - X(a, STATIC, SINGULAR, UINT32, free, 2) \ - X(a, STATIC, SINGULAR, UINT32, maxlen, 3) \ - X(a, STATIC, SINGULAR, UINT32, mesh_packet_id, 4) +#define meshtastic_QueueStatus_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, INT32, res, 1) \ +X(a, STATIC, SINGULAR, UINT32, free, 2) \ +X(a, STATIC, SINGULAR, UINT32, maxlen, 3) \ +X(a, STATIC, SINGULAR, UINT32, mesh_packet_id, 4) #define meshtastic_QueueStatus_CALLBACK NULL #define meshtastic_QueueStatus_DEFAULT NULL -#define meshtastic_FromRadio_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, id, 1) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, packet, packet), 2) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, my_info, my_info), 3) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, node_info, node_info), 4) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, config, config), 5) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, log_record, log_record), 6) \ - X(a, STATIC, ONEOF, UINT32, (payload_variant, config_complete_id, config_complete_id), 7) \ - X(a, STATIC, ONEOF, BOOL, (payload_variant, rebooted, rebooted), 8) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, moduleConfig, moduleConfig), 9) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, channel, channel), 10) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, queueStatus, queueStatus), 11) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, xmodemPacket, xmodemPacket), 12) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, metadata, metadata), 13) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, mqttClientProxyMessage, mqttClientProxyMessage), 14) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, fileInfo, fileInfo), 15) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, clientNotification, clientNotification), 16) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, deviceuiConfig, deviceuiConfig), 17) +#define meshtastic_FromRadio_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, id, 1) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,packet,packet), 2) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,my_info,my_info), 3) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,node_info,node_info), 4) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,config,config), 5) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,log_record,log_record), 6) \ +X(a, STATIC, ONEOF, UINT32, (payload_variant,config_complete_id,config_complete_id), 7) \ +X(a, STATIC, ONEOF, BOOL, (payload_variant,rebooted,rebooted), 8) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,moduleConfig,moduleConfig), 9) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,channel,channel), 10) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,queueStatus,queueStatus), 11) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,xmodemPacket,xmodemPacket), 12) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,metadata,metadata), 13) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,mqttClientProxyMessage,mqttClientProxyMessage), 14) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,fileInfo,fileInfo), 15) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,clientNotification,clientNotification), 16) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,deviceuiConfig,deviceuiConfig), 17) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,lockdown_status,lockdown_status), 18) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,region_presets,region_presets), 19) #define meshtastic_FromRadio_CALLBACK NULL #define meshtastic_FromRadio_DEFAULT NULL #define meshtastic_FromRadio_payload_variant_packet_MSGTYPE meshtastic_MeshPacket @@ -2225,73 +2291,80 @@ extern "C" { #define meshtastic_FromRadio_payload_variant_fileInfo_MSGTYPE meshtastic_FileInfo #define meshtastic_FromRadio_payload_variant_clientNotification_MSGTYPE meshtastic_ClientNotification #define meshtastic_FromRadio_payload_variant_deviceuiConfig_MSGTYPE meshtastic_DeviceUIConfig - -#define meshtastic_ClientNotification_FIELDLIST(X, a) \ - X(a, STATIC, OPTIONAL, UINT32, reply_id, 1) \ - X(a, STATIC, SINGULAR, FIXED32, time, 2) \ - X(a, STATIC, SINGULAR, UENUM, level, 3) \ - X(a, STATIC, SINGULAR, STRING, message, 4) \ - X(a, STATIC, ONEOF, MESSAGE, \ - (payload_variant, key_verification_number_inform, payload_variant.key_verification_number_inform), 11) \ - X(a, STATIC, ONEOF, MESSAGE, \ - (payload_variant, key_verification_number_request, payload_variant.key_verification_number_request), 12) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, key_verification_final, payload_variant.key_verification_final), 13) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, duplicated_public_key, payload_variant.duplicated_public_key), 14) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, low_entropy_key, payload_variant.low_entropy_key), 15) +#define meshtastic_FromRadio_payload_variant_lockdown_status_MSGTYPE meshtastic_LockdownStatus +#define meshtastic_FromRadio_payload_variant_region_presets_MSGTYPE meshtastic_LoRaRegionPresetMap + +#define meshtastic_LockdownStatus_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, state, 1) \ +X(a, STATIC, SINGULAR, STRING, lock_reason, 2) \ +X(a, STATIC, SINGULAR, UINT32, boots_remaining, 3) \ +X(a, STATIC, SINGULAR, UINT32, valid_until_epoch, 4) \ +X(a, STATIC, SINGULAR, UINT32, backoff_seconds, 5) +#define meshtastic_LockdownStatus_CALLBACK NULL +#define meshtastic_LockdownStatus_DEFAULT NULL + +#define meshtastic_ClientNotification_FIELDLIST(X, a) \ +X(a, STATIC, OPTIONAL, UINT32, reply_id, 1) \ +X(a, STATIC, SINGULAR, FIXED32, time, 2) \ +X(a, STATIC, SINGULAR, UENUM, level, 3) \ +X(a, STATIC, SINGULAR, STRING, message, 4) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,key_verification_number_inform,payload_variant.key_verification_number_inform), 11) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,key_verification_number_request,payload_variant.key_verification_number_request), 12) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,key_verification_final,payload_variant.key_verification_final), 13) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,duplicated_public_key,payload_variant.duplicated_public_key), 14) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,low_entropy_key,payload_variant.low_entropy_key), 15) #define meshtastic_ClientNotification_CALLBACK NULL #define meshtastic_ClientNotification_DEFAULT NULL -#define meshtastic_ClientNotification_payload_variant_key_verification_number_inform_MSGTYPE \ - meshtastic_KeyVerificationNumberInform -#define meshtastic_ClientNotification_payload_variant_key_verification_number_request_MSGTYPE \ - meshtastic_KeyVerificationNumberRequest +#define meshtastic_ClientNotification_payload_variant_key_verification_number_inform_MSGTYPE meshtastic_KeyVerificationNumberInform +#define meshtastic_ClientNotification_payload_variant_key_verification_number_request_MSGTYPE meshtastic_KeyVerificationNumberRequest #define meshtastic_ClientNotification_payload_variant_key_verification_final_MSGTYPE meshtastic_KeyVerificationFinal #define meshtastic_ClientNotification_payload_variant_duplicated_public_key_MSGTYPE meshtastic_DuplicatedPublicKey #define meshtastic_ClientNotification_payload_variant_low_entropy_key_MSGTYPE meshtastic_LowEntropyKey -#define meshtastic_KeyVerificationNumberInform_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ - X(a, STATIC, SINGULAR, STRING, remote_longname, 2) \ - X(a, STATIC, SINGULAR, UINT32, security_number, 3) +#define meshtastic_KeyVerificationNumberInform_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ +X(a, STATIC, SINGULAR, STRING, remote_longname, 2) \ +X(a, STATIC, SINGULAR, UINT32, security_number, 3) #define meshtastic_KeyVerificationNumberInform_CALLBACK NULL #define meshtastic_KeyVerificationNumberInform_DEFAULT NULL -#define meshtastic_KeyVerificationNumberRequest_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ - X(a, STATIC, SINGULAR, STRING, remote_longname, 2) +#define meshtastic_KeyVerificationNumberRequest_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ +X(a, STATIC, SINGULAR, STRING, remote_longname, 2) #define meshtastic_KeyVerificationNumberRequest_CALLBACK NULL #define meshtastic_KeyVerificationNumberRequest_DEFAULT NULL -#define meshtastic_KeyVerificationFinal_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ - X(a, STATIC, SINGULAR, STRING, remote_longname, 2) \ - X(a, STATIC, SINGULAR, BOOL, isSender, 3) \ - X(a, STATIC, SINGULAR, STRING, verification_characters, 4) +#define meshtastic_KeyVerificationFinal_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT64, nonce, 1) \ +X(a, STATIC, SINGULAR, STRING, remote_longname, 2) \ +X(a, STATIC, SINGULAR, BOOL, isSender, 3) \ +X(a, STATIC, SINGULAR, STRING, verification_characters, 4) #define meshtastic_KeyVerificationFinal_CALLBACK NULL #define meshtastic_KeyVerificationFinal_DEFAULT NULL -#define meshtastic_DuplicatedPublicKey_FIELDLIST(X, a) +#define meshtastic_DuplicatedPublicKey_FIELDLIST(X, a) \ #define meshtastic_DuplicatedPublicKey_CALLBACK NULL #define meshtastic_DuplicatedPublicKey_DEFAULT NULL -#define meshtastic_LowEntropyKey_FIELDLIST(X, a) +#define meshtastic_LowEntropyKey_FIELDLIST(X, a) \ #define meshtastic_LowEntropyKey_CALLBACK NULL #define meshtastic_LowEntropyKey_DEFAULT NULL -#define meshtastic_FileInfo_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, STRING, file_name, 1) \ - X(a, STATIC, SINGULAR, UINT32, size_bytes, 2) +#define meshtastic_FileInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, file_name, 1) \ +X(a, STATIC, SINGULAR, UINT32, size_bytes, 2) #define meshtastic_FileInfo_CALLBACK NULL #define meshtastic_FileInfo_DEFAULT NULL -#define meshtastic_ToRadio_FIELDLIST(X, a) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, packet, packet), 1) \ - X(a, STATIC, ONEOF, UINT32, (payload_variant, want_config_id, want_config_id), 3) \ - X(a, STATIC, ONEOF, BOOL, (payload_variant, disconnect, disconnect), 4) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, xmodemPacket, xmodemPacket), 5) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, mqttClientProxyMessage, mqttClientProxyMessage), 6) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, heartbeat, heartbeat), 7) +#define meshtastic_ToRadio_FIELDLIST(X, a) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,packet,packet), 1) \ +X(a, STATIC, ONEOF, UINT32, (payload_variant,want_config_id,want_config_id), 3) \ +X(a, STATIC, ONEOF, BOOL, (payload_variant,disconnect,disconnect), 4) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,xmodemPacket,xmodemPacket), 5) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,mqttClientProxyMessage,mqttClientProxyMessage), 6) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,heartbeat,heartbeat), 7) #define meshtastic_ToRadio_CALLBACK NULL #define meshtastic_ToRadio_DEFAULT NULL #define meshtastic_ToRadio_payload_variant_packet_MSGTYPE meshtastic_MeshPacket @@ -2299,73 +2372,97 @@ extern "C" { #define meshtastic_ToRadio_payload_variant_mqttClientProxyMessage_MSGTYPE meshtastic_MqttClientProxyMessage #define meshtastic_ToRadio_payload_variant_heartbeat_MSGTYPE meshtastic_Heartbeat -#define meshtastic_Compressed_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UENUM, portnum, 1) \ - X(a, STATIC, SINGULAR, BYTES, data, 2) +#define meshtastic_Compressed_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, portnum, 1) \ +X(a, STATIC, SINGULAR, BYTES, data, 2) #define meshtastic_Compressed_CALLBACK NULL #define meshtastic_Compressed_DEFAULT NULL -#define meshtastic_NeighborInfo_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, node_id, 1) \ - X(a, STATIC, SINGULAR, UINT32, last_sent_by_id, 2) \ - X(a, STATIC, SINGULAR, UINT32, node_broadcast_interval_secs, 3) \ - X(a, STATIC, REPEATED, MESSAGE, neighbors, 4) +#define meshtastic_NeighborInfo_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, node_id, 1) \ +X(a, STATIC, SINGULAR, UINT32, last_sent_by_id, 2) \ +X(a, STATIC, SINGULAR, UINT32, node_broadcast_interval_secs, 3) \ +X(a, STATIC, REPEATED, MESSAGE, neighbors, 4) #define meshtastic_NeighborInfo_CALLBACK NULL #define meshtastic_NeighborInfo_DEFAULT NULL #define meshtastic_NeighborInfo_neighbors_MSGTYPE meshtastic_Neighbor -#define meshtastic_Neighbor_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, node_id, 1) \ - X(a, STATIC, SINGULAR, FLOAT, snr, 2) \ - X(a, STATIC, SINGULAR, FIXED32, last_rx_time, 3) \ - X(a, STATIC, SINGULAR, UINT32, node_broadcast_interval_secs, 4) +#define meshtastic_Neighbor_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, node_id, 1) \ +X(a, STATIC, SINGULAR, FLOAT, snr, 2) \ +X(a, STATIC, SINGULAR, FIXED32, last_rx_time, 3) \ +X(a, STATIC, SINGULAR, UINT32, node_broadcast_interval_secs, 4) #define meshtastic_Neighbor_CALLBACK NULL #define meshtastic_Neighbor_DEFAULT NULL -#define meshtastic_DeviceMetadata_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, STRING, firmware_version, 1) \ - X(a, STATIC, SINGULAR, UINT32, device_state_version, 2) \ - X(a, STATIC, SINGULAR, BOOL, canShutdown, 3) \ - X(a, STATIC, SINGULAR, BOOL, hasWifi, 4) \ - X(a, STATIC, SINGULAR, BOOL, hasBluetooth, 5) \ - X(a, STATIC, SINGULAR, BOOL, hasEthernet, 6) \ - X(a, STATIC, SINGULAR, UENUM, role, 7) \ - X(a, STATIC, SINGULAR, UINT32, position_flags, 8) \ - X(a, STATIC, SINGULAR, UENUM, hw_model, 9) \ - X(a, STATIC, SINGULAR, BOOL, hasRemoteHardware, 10) \ - X(a, STATIC, SINGULAR, BOOL, hasPKC, 11) \ - X(a, STATIC, SINGULAR, UINT32, excluded_modules, 12) +#define meshtastic_DeviceMetadata_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, STRING, firmware_version, 1) \ +X(a, STATIC, SINGULAR, UINT32, device_state_version, 2) \ +X(a, STATIC, SINGULAR, BOOL, canShutdown, 3) \ +X(a, STATIC, SINGULAR, BOOL, hasWifi, 4) \ +X(a, STATIC, SINGULAR, BOOL, hasBluetooth, 5) \ +X(a, STATIC, SINGULAR, BOOL, hasEthernet, 6) \ +X(a, STATIC, SINGULAR, UENUM, role, 7) \ +X(a, STATIC, SINGULAR, UINT32, position_flags, 8) \ +X(a, STATIC, SINGULAR, UENUM, hw_model, 9) \ +X(a, STATIC, SINGULAR, BOOL, hasRemoteHardware, 10) \ +X(a, STATIC, SINGULAR, BOOL, hasPKC, 11) \ +X(a, STATIC, SINGULAR, UINT32, excluded_modules, 12) \ +X(a, STATIC, SINGULAR, BOOL, has_xeddsa, 14) #define meshtastic_DeviceMetadata_CALLBACK NULL #define meshtastic_DeviceMetadata_DEFAULT NULL -#define meshtastic_Heartbeat_FIELDLIST(X, a) X(a, STATIC, SINGULAR, UINT32, nonce, 1) +#define meshtastic_LoRaPresetGroup_FIELDLIST(X, a) \ +X(a, STATIC, REPEATED, UENUM, presets, 1) \ +X(a, STATIC, SINGULAR, UENUM, default_preset, 2) \ +X(a, STATIC, SINGULAR, BOOL, licensed_only, 3) +#define meshtastic_LoRaPresetGroup_CALLBACK NULL +#define meshtastic_LoRaPresetGroup_DEFAULT NULL + +#define meshtastic_LoRaRegionPresets_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UENUM, region, 1) \ +X(a, STATIC, SINGULAR, UINT32, group_index, 2) +#define meshtastic_LoRaRegionPresets_CALLBACK NULL +#define meshtastic_LoRaRegionPresets_DEFAULT NULL + +#define meshtastic_LoRaRegionPresetMap_FIELDLIST(X, a) \ +X(a, STATIC, REPEATED, MESSAGE, groups, 1) \ +X(a, STATIC, REPEATED, MESSAGE, region_groups, 2) +#define meshtastic_LoRaRegionPresetMap_CALLBACK NULL +#define meshtastic_LoRaRegionPresetMap_DEFAULT NULL +#define meshtastic_LoRaRegionPresetMap_groups_MSGTYPE meshtastic_LoRaPresetGroup +#define meshtastic_LoRaRegionPresetMap_region_groups_MSGTYPE meshtastic_LoRaRegionPresets + +#define meshtastic_Heartbeat_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, nonce, 1) #define meshtastic_Heartbeat_CALLBACK NULL #define meshtastic_Heartbeat_DEFAULT NULL -#define meshtastic_NodeRemoteHardwarePin_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, node_num, 1) \ - X(a, STATIC, OPTIONAL, MESSAGE, pin, 2) +#define meshtastic_NodeRemoteHardwarePin_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, node_num, 1) \ +X(a, STATIC, OPTIONAL, MESSAGE, pin, 2) #define meshtastic_NodeRemoteHardwarePin_CALLBACK NULL #define meshtastic_NodeRemoteHardwarePin_DEFAULT NULL #define meshtastic_NodeRemoteHardwarePin_pin_MSGTYPE meshtastic_RemoteHardwarePin -#define meshtastic_ChunkedPayload_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, payload_id, 1) \ - X(a, STATIC, SINGULAR, UINT32, chunk_count, 2) \ - X(a, STATIC, SINGULAR, UINT32, chunk_index, 3) \ - X(a, STATIC, SINGULAR, BYTES, payload_chunk, 4) +#define meshtastic_ChunkedPayload_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, payload_id, 1) \ +X(a, STATIC, SINGULAR, UINT32, chunk_count, 2) \ +X(a, STATIC, SINGULAR, UINT32, chunk_index, 3) \ +X(a, STATIC, SINGULAR, BYTES, payload_chunk, 4) #define meshtastic_ChunkedPayload_CALLBACK NULL #define meshtastic_ChunkedPayload_DEFAULT NULL -#define meshtastic_resend_chunks_FIELDLIST(X, a) X(a, CALLBACK, REPEATED, UINT32, chunks, 1) +#define meshtastic_resend_chunks_FIELDLIST(X, a) \ +X(a, CALLBACK, REPEATED, UINT32, chunks, 1) #define meshtastic_resend_chunks_CALLBACK pb_default_field_callback #define meshtastic_resend_chunks_DEFAULT NULL -#define meshtastic_ChunkedPayloadResponse_FIELDLIST(X, a) \ - X(a, STATIC, SINGULAR, UINT32, payload_id, 1) \ - X(a, STATIC, ONEOF, BOOL, (payload_variant, request_transfer, payload_variant.request_transfer), 2) \ - X(a, STATIC, ONEOF, BOOL, (payload_variant, accept_transfer, payload_variant.accept_transfer), 3) \ - X(a, STATIC, ONEOF, MESSAGE, (payload_variant, resend_chunks, payload_variant.resend_chunks), 4) +#define meshtastic_ChunkedPayloadResponse_FIELDLIST(X, a) \ +X(a, STATIC, SINGULAR, UINT32, payload_id, 1) \ +X(a, STATIC, ONEOF, BOOL, (payload_variant,request_transfer,payload_variant.request_transfer), 2) \ +X(a, STATIC, ONEOF, BOOL, (payload_variant,accept_transfer,payload_variant.accept_transfer), 3) \ +X(a, STATIC, ONEOF, MESSAGE, (payload_variant,resend_chunks,payload_variant.resend_chunks), 4) #define meshtastic_ChunkedPayloadResponse_CALLBACK NULL #define meshtastic_ChunkedPayloadResponse_DEFAULT NULL #define meshtastic_ChunkedPayloadResponse_payload_variant_resend_chunks_MSGTYPE meshtastic_resend_chunks @@ -2377,6 +2474,8 @@ extern const pb_msgdesc_t meshtastic_Routing_msg; extern const pb_msgdesc_t meshtastic_Data_msg; extern const pb_msgdesc_t meshtastic_KeyVerification_msg; extern const pb_msgdesc_t meshtastic_StoreForwardPlusPlus_msg; +extern const pb_msgdesc_t meshtastic_RemoteShell_msg; +extern const pb_msgdesc_t meshtastic_BoundingBox_msg; extern const pb_msgdesc_t meshtastic_Waypoint_msg; extern const pb_msgdesc_t meshtastic_StatusMessage_msg; extern const pb_msgdesc_t meshtastic_MqttClientProxyMessage_msg; @@ -2386,6 +2485,7 @@ extern const pb_msgdesc_t meshtastic_MyNodeInfo_msg; extern const pb_msgdesc_t meshtastic_LogRecord_msg; extern const pb_msgdesc_t meshtastic_QueueStatus_msg; extern const pb_msgdesc_t meshtastic_FromRadio_msg; +extern const pb_msgdesc_t meshtastic_LockdownStatus_msg; extern const pb_msgdesc_t meshtastic_ClientNotification_msg; extern const pb_msgdesc_t meshtastic_KeyVerificationNumberInform_msg; extern const pb_msgdesc_t meshtastic_KeyVerificationNumberRequest_msg; @@ -2398,6 +2498,9 @@ extern const pb_msgdesc_t meshtastic_Compressed_msg; extern const pb_msgdesc_t meshtastic_NeighborInfo_msg; extern const pb_msgdesc_t meshtastic_Neighbor_msg; extern const pb_msgdesc_t meshtastic_DeviceMetadata_msg; +extern const pb_msgdesc_t meshtastic_LoRaPresetGroup_msg; +extern const pb_msgdesc_t meshtastic_LoRaRegionPresets_msg; +extern const pb_msgdesc_t meshtastic_LoRaRegionPresetMap_msg; extern const pb_msgdesc_t meshtastic_Heartbeat_msg; extern const pb_msgdesc_t meshtastic_NodeRemoteHardwarePin_msg; extern const pb_msgdesc_t meshtastic_ChunkedPayload_msg; @@ -2412,6 +2515,8 @@ extern const pb_msgdesc_t meshtastic_ChunkedPayloadResponse_msg; #define meshtastic_Data_fields &meshtastic_Data_msg #define meshtastic_KeyVerification_fields &meshtastic_KeyVerification_msg #define meshtastic_StoreForwardPlusPlus_fields &meshtastic_StoreForwardPlusPlus_msg +#define meshtastic_RemoteShell_fields &meshtastic_RemoteShell_msg +#define meshtastic_BoundingBox_fields &meshtastic_BoundingBox_msg #define meshtastic_Waypoint_fields &meshtastic_Waypoint_msg #define meshtastic_StatusMessage_fields &meshtastic_StatusMessage_msg #define meshtastic_MqttClientProxyMessage_fields &meshtastic_MqttClientProxyMessage_msg @@ -2421,6 +2526,7 @@ extern const pb_msgdesc_t meshtastic_ChunkedPayloadResponse_msg; #define meshtastic_LogRecord_fields &meshtastic_LogRecord_msg #define meshtastic_QueueStatus_fields &meshtastic_QueueStatus_msg #define meshtastic_FromRadio_fields &meshtastic_FromRadio_msg +#define meshtastic_LockdownStatus_fields &meshtastic_LockdownStatus_msg #define meshtastic_ClientNotification_fields &meshtastic_ClientNotification_msg #define meshtastic_KeyVerificationNumberInform_fields &meshtastic_KeyVerificationNumberInform_msg #define meshtastic_KeyVerificationNumberRequest_fields &meshtastic_KeyVerificationNumberRequest_msg @@ -2433,6 +2539,9 @@ extern const pb_msgdesc_t meshtastic_ChunkedPayloadResponse_msg; #define meshtastic_NeighborInfo_fields &meshtastic_NeighborInfo_msg #define meshtastic_Neighbor_fields &meshtastic_Neighbor_msg #define meshtastic_DeviceMetadata_fields &meshtastic_DeviceMetadata_msg +#define meshtastic_LoRaPresetGroup_fields &meshtastic_LoRaPresetGroup_msg +#define meshtastic_LoRaRegionPresets_fields &meshtastic_LoRaRegionPresets_msg +#define meshtastic_LoRaRegionPresetMap_fields &meshtastic_LoRaRegionPresetMap_msg #define meshtastic_Heartbeat_fields &meshtastic_Heartbeat_msg #define meshtastic_NodeRemoteHardwarePin_fields &meshtastic_NodeRemoteHardwarePin_msg #define meshtastic_ChunkedPayload_fields &meshtastic_ChunkedPayload_msg @@ -2443,37 +2552,43 @@ extern const pb_msgdesc_t meshtastic_ChunkedPayloadResponse_msg; /* meshtastic_resend_chunks_size depends on runtime parameters */ /* meshtastic_ChunkedPayloadResponse_size depends on runtime parameters */ #define MESHTASTIC_MESHTASTIC_MESH_PB_H_MAX_SIZE meshtastic_FromRadio_size -#define meshtastic_ChunkedPayload_size 245 -#define meshtastic_ClientNotification_size 482 -#define meshtastic_Compressed_size 239 -#define meshtastic_Data_size 269 -#define meshtastic_DeviceMetadata_size 54 -#define meshtastic_DuplicatedPublicKey_size 0 -#define meshtastic_FileInfo_size 236 -#define meshtastic_FromRadio_size 510 -#define meshtastic_Heartbeat_size 6 -#define meshtastic_KeyVerificationFinal_size 65 +#define meshtastic_BoundingBox_size 20 +#define meshtastic_ChunkedPayload_size 245 +#define meshtastic_ClientNotification_size 482 +#define meshtastic_Compressed_size 239 +#define meshtastic_Data_size 335 +#define meshtastic_DeviceMetadata_size 56 +#define meshtastic_DuplicatedPublicKey_size 0 +#define meshtastic_FileInfo_size 236 +#define meshtastic_FromRadio_size 510 +#define meshtastic_Heartbeat_size 6 +#define meshtastic_KeyVerificationFinal_size 65 #define meshtastic_KeyVerificationNumberInform_size 58 #define meshtastic_KeyVerificationNumberRequest_size 52 -#define meshtastic_KeyVerification_size 79 -#define meshtastic_LogRecord_size 426 -#define meshtastic_LowEntropyKey_size 0 -#define meshtastic_MeshPacket_size 381 -#define meshtastic_MqttClientProxyMessage_size 501 -#define meshtastic_MyNodeInfo_size 83 -#define meshtastic_NeighborInfo_size 258 -#define meshtastic_Neighbor_size 22 -#define meshtastic_NodeInfo_size 325 -#define meshtastic_NodeRemoteHardwarePin_size 29 -#define meshtastic_Position_size 144 -#define meshtastic_QueueStatus_size 23 -#define meshtastic_RouteDiscovery_size 256 -#define meshtastic_Routing_size 259 -#define meshtastic_StatusMessage_size 81 -#define meshtastic_StoreForwardPlusPlus_size 377 -#define meshtastic_ToRadio_size 504 -#define meshtastic_User_size 115 -#define meshtastic_Waypoint_size 165 +#define meshtastic_KeyVerification_size 79 +#define meshtastic_LoRaPresetGroup_size 26 +#define meshtastic_LoRaRegionPresetMap_size 490 +#define meshtastic_LoRaRegionPresets_size 5 +#define meshtastic_LockdownStatus_size 53 +#define meshtastic_LogRecord_size 426 +#define meshtastic_LowEntropyKey_size 0 +#define meshtastic_MeshPacket_size 450 +#define meshtastic_MqttClientProxyMessage_size 501 +#define meshtastic_MyNodeInfo_size 83 +#define meshtastic_NeighborInfo_size 258 +#define meshtastic_Neighbor_size 22 +#define meshtastic_NodeInfo_size 327 +#define meshtastic_NodeRemoteHardwarePin_size 29 +#define meshtastic_Position_size 144 +#define meshtastic_QueueStatus_size 23 +#define meshtastic_RemoteShell_size 253 +#define meshtastic_RouteDiscovery_size 256 +#define meshtastic_Routing_size 259 +#define meshtastic_StatusMessage_size 81 +#define meshtastic_StoreForwardPlusPlus_size 377 +#define meshtastic_ToRadio_size 504 +#define meshtastic_User_size 115 +#define meshtastic_Waypoint_size 199 #ifdef __cplusplus } /* extern "C" */ diff --git a/platformio.ini b/platformio.ini index b0ef91f..7462b18 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,7 +13,8 @@ default_envs = native-mui [device-ui_base] lib_deps = - https://github.com/meshtastic/device-ui/archive/97809314020fcf0ff419c480bd1ccb192d7af311.zip + ; Temporary draft dependency for device-ui#341. Replace with the merged upstream commit before leaving draft. + https://github.com/RCGV1/device-ui/archive/f9c0db84e7fe48986d1ce6df2b8d757f560686a8.zip [env] platform = espressif32@6.9.0 diff --git a/test/test_MeshEnvelope.cpp b/test/test_MeshEnvelope.cpp index 756e80f..fa8e0cd 100644 --- a/test/test_MeshEnvelope.cpp +++ b/test/test_MeshEnvelope.cpp @@ -1,4 +1,6 @@ #include "comms/MeshEnvelope.h" +#include "meshtastic/config.pb.h" +#include "meshtastic/mesh.pb.h" #include uint8_t buffer[512]; @@ -81,6 +83,19 @@ void test_MeshEnvelope_validate_packet_with_skip_bytes(void) { TEST_ASSERT_EQUAL(0x05, buffer[3]); } +void test_packet_authenticity_schema_contract(void) { + meshtastic_Config_SecurityConfig security = meshtastic_Config_SecurityConfig_init_default; + meshtastic_DeviceMetadata metadata = meshtastic_DeviceMetadata_init_zero; + + TEST_ASSERT_EQUAL(9, meshtastic_Config_SecurityConfig_packet_signature_policy_tag); + TEST_ASSERT_EQUAL(14, meshtastic_DeviceMetadata_has_xeddsa_tag); + TEST_ASSERT_EQUAL(meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_BALANCED, + security.packet_signature_policy); + TEST_ASSERT_FALSE(metadata.has_xeddsa); + TEST_ASSERT_EQUAL(1, meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_COMPATIBLE); + TEST_ASSERT_EQUAL(2, meshtastic_Config_SecurityConfig_PacketSignaturePolicy_PACKET_SIGNATURE_POLICY_STRICT); +} + void RUN_UNITY_TESTS() { UNITY_BEGIN(); @@ -94,6 +109,7 @@ void RUN_UNITY_TESTS() { RUN_TEST(test_MeshEnvelope_validate_partial_packet); RUN_TEST(test_MeshEnvelope_validate_skip_bytes); RUN_TEST(test_MeshEnvelope_validate_packet_with_skip_bytes); + RUN_TEST(test_packet_authenticity_schema_contract); UNITY_END(); } From f23fe8cc0d18af5d1afe6236ce7e24e1d06092cb Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Fri, 10 Jul 2026 10:37:13 -0700 Subject: [PATCH 2/3] test: isolate MeshEnvelope fixture globals --- test/test_MeshEnvelope.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_MeshEnvelope.cpp b/test/test_MeshEnvelope.cpp index fa8e0cd..ffbd8a8 100644 --- a/test/test_MeshEnvelope.cpp +++ b/test/test_MeshEnvelope.cpp @@ -3,10 +3,10 @@ #include "meshtastic/mesh.pb.h" #include -uint8_t buffer[512]; -char* buf = (char*)buffer; -size_t size; -size_t payload; +static uint8_t buffer[512]; +static char *buf = reinterpret_cast(buffer); +static size_t size; +static size_t payload; void tearDown(void) { From fd97d2ee8380daafc86fdb06b4b64dd1c0a4f445 Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Sat, 11 Jul 2026 22:26:24 -0700 Subject: [PATCH 3/3] test(mui): support configurable validation inputs --- .../validation/packet-auth/confirm-strict.png | Bin 0 -> 11905 bytes docs/validation/packet-auth/dropdown-open.png | Bin 0 -> 11604 bytes .../validation/packet-auth/modal-balanced.png | Bin 0 -> 10860 bytes src/main.cpp | 29 ++++++++++++++++-- 4 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 docs/validation/packet-auth/confirm-strict.png create mode 100644 docs/validation/packet-auth/dropdown-open.png create mode 100644 docs/validation/packet-auth/modal-balanced.png diff --git a/docs/validation/packet-auth/confirm-strict.png b/docs/validation/packet-auth/confirm-strict.png new file mode 100644 index 0000000000000000000000000000000000000000..6f74e88716676fdaad5c998f84edcda54b8c564d GIT binary patch literal 11905 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 literal 0 HcmV?d00001 diff --git a/docs/validation/packet-auth/modal-balanced.png b/docs/validation/packet-auth/modal-balanced.png new file mode 100644 index 0000000000000000000000000000000000000000..589382d6be4444d3c66ed3f60d228a00ce537da2 GIT binary patch literal 10860 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 literal 0 HcmV?d00001 diff --git a/src/main.cpp b/src/main.cpp index 8393b6c..4de96cb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,8 @@ #include "comms/SerialClient.h" #include "comms/UARTClient.h" #include "graphics/DeviceScreen.h" +#include +#include #if defined(ARCH_PORTDUINO) #include @@ -96,16 +98,26 @@ void portduinoSetup(void) { const char *tty = getenv("MUI_TTY"); const char *hostname = getenv("MUI_SERVER"); + const char *portValue = getenv("MUI_PORT"); const char *size = getenv("MUI_SIZE"); + uint16_t remotePort = SERVER_PORT; + if (portValue != nullptr && *portValue != '\0') { + char *end = nullptr; + const unsigned long parsedPort = std::strtoul(portValue, &end, 10); + if (end != portValue && *end == '\0' && parsedPort <= 65535) { + remotePort = static_cast(parsedPort); + } + } + if (!ttydev.empty()) client = new LinuxSerialClient(ttydev.c_str()); else if (tty != nullptr) client = new LinuxSerialClient(tty); else if (!remoteHost.empty()) - client = new EthClient(remoteHost.c_str()); + client = new EthClient(remoteHost.c_str(), remotePort); else if (hostname != nullptr) - client = new EthClient(hostname); + client = new EthClient(hostname, remotePort); else client = new EthClient(); @@ -124,7 +136,18 @@ void portduinoSetup(void) #ifdef USE_FRAMEBUFFER screen = &DeviceScreen::create(DisplayDriverConfig(DisplayDriverConfig::device_t::FB, x, y)); #else - screen = &DeviceScreen::create(DisplayDriverConfig(DisplayDriverConfig::device_t::X11, x, y)); + DisplayDriverConfig displayConfig(DisplayDriverConfig::device_t::X11, x, y); + // Native Linux builds normally have no physical input devices attached. + // Allow tests (and headless CI) to provide the event devices explicitly, + // while preserving the previous no-input behavior when unset. + DisplayDriverConfig::input_config_t inputConfig; + if (const char *keyboard = getenv("MUI_KEYBOARD_DEVICE")) + inputConfig.keyboardDevice = keyboard; + if (const char *pointer = getenv("MUI_POINTER_DEVICE")) + inputConfig.pointerDevice = pointer; + if (!inputConfig.keyboardDevice.empty() || !inputConfig.pointerDevice.empty()) + displayConfig.input(std::move(inputConfig)); + screen = &DeviceScreen::create(std::move(displayConfig)); #endif } #endif