diff --git a/protobufs b/protobufs index 8f3972e57..0f2a3304e 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit 8f3972e579b09c7f4682f49c609a88e9d0ee2097 +Subproject commit 0f2a3304eebd89b5950ccfab98082778de3353a0 diff --git a/src/mesh/generated/admin.pb.c b/src/mesh/generated/admin.pb.c index 43c32055f..3fdd0cb3d 100644 --- a/src/mesh/generated/admin.pb.c +++ b/src/mesh/generated/admin.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "admin.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/admin.pb.h b/src/mesh/generated/admin.pb.h index 4257405fa..cdc62c795 100644 --- a/src/mesh/generated/admin.pb.h +++ b/src/mesh/generated/admin.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_ADMIN_PB_H_INCLUDED #define PB_ADMIN_PB_H_INCLUDED @@ -15,32 +15,49 @@ #endif /* Enum definitions */ -typedef enum _AdminMessage_ConfigType { - AdminMessage_ConfigType_DEVICE_CONFIG = 0, - AdminMessage_ConfigType_POSITION_CONFIG = 1, - AdminMessage_ConfigType_POWER_CONFIG = 2, - AdminMessage_ConfigType_NETWORK_CONFIG = 3, - AdminMessage_ConfigType_DISPLAY_CONFIG = 4, - AdminMessage_ConfigType_LORA_CONFIG = 5, - AdminMessage_ConfigType_BLUETOOTH_CONFIG = 6 +/* TODO: REPLACE */ +typedef enum _AdminMessage_ConfigType { + /* TODO: REPLACE */ + AdminMessage_ConfigType_DEVICE_CONFIG = 0, + /* TODO: REPLACE */ + AdminMessage_ConfigType_POSITION_CONFIG = 1, + /* TODO: REPLACE */ + AdminMessage_ConfigType_POWER_CONFIG = 2, + /* TODO: REPLACE */ + AdminMessage_ConfigType_NETWORK_CONFIG = 3, + /* TODO: REPLACE */ + AdminMessage_ConfigType_DISPLAY_CONFIG = 4, + /* TODO: REPLACE */ + AdminMessage_ConfigType_LORA_CONFIG = 5, + /* TODO: REPLACE */ + AdminMessage_ConfigType_BLUETOOTH_CONFIG = 6 } AdminMessage_ConfigType; -typedef enum _AdminMessage_ModuleConfigType { - AdminMessage_ModuleConfigType_MQTT_CONFIG = 0, - AdminMessage_ModuleConfigType_SERIAL_CONFIG = 1, - AdminMessage_ModuleConfigType_EXTNOTIF_CONFIG = 2, - AdminMessage_ModuleConfigType_STOREFORWARD_CONFIG = 3, - AdminMessage_ModuleConfigType_RANGETEST_CONFIG = 4, - AdminMessage_ModuleConfigType_TELEMETRY_CONFIG = 5, - AdminMessage_ModuleConfigType_CANNEDMSG_CONFIG = 6, - AdminMessage_ModuleConfigType_AUDIO_CONFIG = 7 +/* TODO: REPLACE */ +typedef enum _AdminMessage_ModuleConfigType { + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_MQTT_CONFIG = 0, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_SERIAL_CONFIG = 1, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_EXTNOTIF_CONFIG = 2, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_STOREFORWARD_CONFIG = 3, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_RANGETEST_CONFIG = 4, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_TELEMETRY_CONFIG = 5, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_CANNEDMSG_CONFIG = 6, + /* TODO: REPLACE */ + AdminMessage_ModuleConfigType_AUDIO_CONFIG = 7 } AdminMessage_ModuleConfigType; /* Struct definitions */ /* This message is handled by the Admin module and is responsible for all settings/channel read/write operations. This message is used to do settings operations to both remote AND local nodes. (Prior to 1.2 these operations were done via special ToRadio operations) */ -typedef struct _AdminMessage { +typedef struct _AdminMessage { pb_size_t which_payload_variant; union { /* Send the specified channel in the response to this message @@ -112,6 +129,10 @@ typedef struct _AdminMessage { } AdminMessage; +#ifdef __cplusplus +extern "C" { +#endif + /* Helper constants for enums */ #define _AdminMessage_ConfigType_MIN AdminMessage_ConfigType_DEVICE_CONFIG #define _AdminMessage_ConfigType_MAX AdminMessage_ConfigType_BLUETOOTH_CONFIG @@ -121,10 +142,9 @@ typedef struct _AdminMessage { #define _AdminMessage_ModuleConfigType_MAX AdminMessage_ModuleConfigType_AUDIO_CONFIG #define _AdminMessage_ModuleConfigType_ARRAYSIZE ((AdminMessage_ModuleConfigType)(AdminMessage_ModuleConfigType_AUDIO_CONFIG+1)) +#define AdminMessage_payload_variant_get_config_request_ENUMTYPE AdminMessage_ConfigType +#define AdminMessage_payload_variant_get_module_config_request_ENUMTYPE AdminMessage_ModuleConfigType -#ifdef __cplusplus -extern "C" { -#endif /* Initializer values for message structs */ #define AdminMessage_init_default {0, {0}} diff --git a/src/mesh/generated/apponly.pb.c b/src/mesh/generated/apponly.pb.c index 092c8e0b3..ce68d47c6 100644 --- a/src/mesh/generated/apponly.pb.c +++ b/src/mesh/generated/apponly.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "apponly.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/apponly.pb.h b/src/mesh/generated/apponly.pb.h index e5e933873..e0a6d7cd5 100644 --- a/src/mesh/generated/apponly.pb.h +++ b/src/mesh/generated/apponly.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_APPONLY_PB_H_INCLUDED #define PB_APPONLY_PB_H_INCLUDED @@ -17,7 +17,7 @@ any SECONDARY channels. No DISABLED channels are included. This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL */ -typedef struct _ChannelSet { +typedef struct _ChannelSet { /* Channel list with settings */ pb_size_t settings_count; ChannelSettings settings[8]; diff --git a/src/mesh/generated/cannedmessages.pb.c b/src/mesh/generated/cannedmessages.pb.c index faea133e6..448517f13 100644 --- a/src/mesh/generated/cannedmessages.pb.c +++ b/src/mesh/generated/cannedmessages.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "cannedmessages.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/cannedmessages.pb.h b/src/mesh/generated/cannedmessages.pb.h index 274601e4c..4981fef18 100644 --- a/src/mesh/generated/cannedmessages.pb.h +++ b/src/mesh/generated/cannedmessages.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_CANNEDMESSAGES_PB_H_INCLUDED #define PB_CANNEDMESSAGES_PB_H_INCLUDED @@ -11,7 +11,7 @@ /* Struct definitions */ /* Canned message module configuration. */ -typedef struct _CannedMessageModuleConfig { +typedef struct _CannedMessageModuleConfig { /* Predefined messages for canned message module separated by '|' characters. */ char messages[201]; } CannedMessageModuleConfig; diff --git a/src/mesh/generated/channel.pb.c b/src/mesh/generated/channel.pb.c index 2df73d5b3..d8e4d8332 100644 --- a/src/mesh/generated/channel.pb.c +++ b/src/mesh/generated/channel.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "channel.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/channel.pb.h b/src/mesh/generated/channel.pb.h index cdb29c553..2dc16bce5 100644 --- a/src/mesh/generated/channel.pb.h +++ b/src/mesh/generated/channel.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_CHANNEL_PB_H_INCLUDED #define PB_CHANNEL_PB_H_INCLUDED @@ -10,10 +10,23 @@ #endif /* Enum definitions */ -typedef enum _Channel_Role { - Channel_Role_DISABLED = 0, - Channel_Role_PRIMARY = 1, - Channel_Role_SECONDARY = 2 +/* How this channel is being used (or not). + Note: this field is an enum to give us options for the future. + In particular, someday we might make a 'SCANNING' option. + SCANNING channels could have different frequencies and the radio would + occasionally check that freq to see if anything is being transmitted. + For devices that have multiple physical radios attached, we could keep multiple PRIMARY/SCANNING channels active at once to allow + cross band routing as needed. + If a device has only a single radio (the common case) only one channel can be PRIMARY at a time + (but any number of SECONDARY channels can't be sent received on that common frequency) */ +typedef enum _Channel_Role { + /* This channel is not in use right now */ + Channel_Role_DISABLED = 0, + /* This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY */ + Channel_Role_PRIMARY = 1, + /* Secondary channels are only used for encryption/decryption/authentication purposes. + Their radio settings (freq etc) are ignored, only psk is used. */ + Channel_Role_SECONDARY = 2 } Channel_Role; /* Struct definitions */ @@ -37,7 +50,7 @@ typedef PB_BYTES_ARRAY_T(32) ChannelSettings_psk_t; FIXME: Add description of multi-channel support and how primary vs secondary channels are used. FIXME: explain how apps use channels for security. explain how remote settings and remote gpio are managed as an example */ -typedef struct _ChannelSettings { +typedef struct _ChannelSettings { /* Deprecated in favor of LoraConfig.channel_num */ uint32_t channel_num; /* A simple pre-shared key for now for crypto. @@ -79,7 +92,7 @@ typedef struct _ChannelSettings { } ChannelSettings; /* A pair of a channel number, mode and the (sharable) settings for that channel */ -typedef struct _Channel { +typedef struct _Channel { /* The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1) (Someday - not currently implemented) An index of -1 could be used to mean "set by name", in which case the target node will find and set the channel by settings.name. */ @@ -92,15 +105,18 @@ typedef struct _Channel { } Channel; +#ifdef __cplusplus +extern "C" { +#endif + /* Helper constants for enums */ #define _Channel_Role_MIN Channel_Role_DISABLED #define _Channel_Role_MAX Channel_Role_SECONDARY #define _Channel_Role_ARRAYSIZE ((Channel_Role)(Channel_Role_SECONDARY+1)) -#ifdef __cplusplus -extern "C" { -#endif +#define Channel_role_ENUMTYPE Channel_Role + /* Initializer values for message structs */ #define ChannelSettings_init_default {0, {0, {0}}, "", 0, 0, 0} diff --git a/src/mesh/generated/config.pb.c b/src/mesh/generated/config.pb.c index c5bc69552..8d1c55934 100644 --- a/src/mesh/generated/config.pb.c +++ b/src/mesh/generated/config.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "config.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/config.pb.h b/src/mesh/generated/config.pb.h index cdc89664c..95252bb4e 100644 --- a/src/mesh/generated/config.pb.h +++ b/src/mesh/generated/config.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_CONFIG_PB_H_INCLUDED #define PB_CONFIG_PB_H_INCLUDED @@ -10,169 +10,371 @@ #endif /* Enum definitions */ -typedef enum _Config_DeviceConfig_Role { - Config_DeviceConfig_Role_CLIENT = 0, - Config_DeviceConfig_Role_CLIENT_MUTE = 1, - Config_DeviceConfig_Role_ROUTER = 2, - Config_DeviceConfig_Role_ROUTER_CLIENT = 3 +/* Defines the device's role on the Mesh network */ +typedef enum _Config_DeviceConfig_Role { + /* Client device role */ + Config_DeviceConfig_Role_CLIENT = 0, + /* Client Mute device role + Same as a client except packets will not hop over this node, does not contribute to routing packets for mesh. */ + Config_DeviceConfig_Role_CLIENT_MUTE = 1, + /* Router device role. + Mesh packets will prefer to be routed over this node. This node will not be used by client apps. + The wifi/ble radios and the oled screen will be put to sleep. */ + Config_DeviceConfig_Role_ROUTER = 2, + /* Router Client device role + Mesh packets will prefer to be routed over this node. The Router Client can be used as both a Router and an app connected Client. */ + Config_DeviceConfig_Role_ROUTER_CLIENT = 3 } Config_DeviceConfig_Role; -typedef enum _Config_PositionConfig_PositionFlags { - Config_PositionConfig_PositionFlags_UNSET = 0, - Config_PositionConfig_PositionFlags_ALTITUDE = 1, - Config_PositionConfig_PositionFlags_ALTITUDE_MSL = 2, - Config_PositionConfig_PositionFlags_GEOIDAL_SEPARATION = 4, - Config_PositionConfig_PositionFlags_DOP = 8, - Config_PositionConfig_PositionFlags_HVDOP = 16, - Config_PositionConfig_PositionFlags_SATINVIEW = 32, - Config_PositionConfig_PositionFlags_SEQ_NO = 64, - Config_PositionConfig_PositionFlags_TIMESTAMP = 128, - Config_PositionConfig_PositionFlags_HEADING = 256, - Config_PositionConfig_PositionFlags_SPEED = 512 +/* Bit field of boolean configuration options, indicating which optional + fields to include when assembling POSITION messages + Longitude and latitude are always included (also time if GPS-synced) + NOTE: the more fields are included, the larger the message will be - + leading to longer airtime and a higher risk of packet loss */ +typedef enum _Config_PositionConfig_PositionFlags { + /* Required for compilation */ + Config_PositionConfig_PositionFlags_UNSET = 0, + /* Include an altitude value (if available) */ + Config_PositionConfig_PositionFlags_ALTITUDE = 1, + /* Altitude value is MSL */ + Config_PositionConfig_PositionFlags_ALTITUDE_MSL = 2, + /* Include geoidal separation */ + Config_PositionConfig_PositionFlags_GEOIDAL_SEPARATION = 4, + /* Include the DOP value ; PDOP used by default, see below */ + Config_PositionConfig_PositionFlags_DOP = 8, + /* If POS_DOP set, send separate HDOP / VDOP values instead of PDOP */ + Config_PositionConfig_PositionFlags_HVDOP = 16, + /* Include number of "satellites in view" */ + Config_PositionConfig_PositionFlags_SATINVIEW = 32, + /* Include a sequence number incremented per packet */ + Config_PositionConfig_PositionFlags_SEQ_NO = 64, + /* Include positional timestamp (from GPS solution) */ + Config_PositionConfig_PositionFlags_TIMESTAMP = 128, + /* Include positional heading + Intended for use with vehicle not walking speeds + walking speeds are likely to be error prone like the compass */ + Config_PositionConfig_PositionFlags_HEADING = 256, + /* Include positional speed + Intended for use with vehicle not walking speeds + walking speeds are likely to be error prone like the compass */ + Config_PositionConfig_PositionFlags_SPEED = 512 } Config_PositionConfig_PositionFlags; -typedef enum _Config_NetworkConfig_EthMode { - Config_NetworkConfig_EthMode_DHCP = 0, - Config_NetworkConfig_EthMode_STATIC = 1 +typedef enum _Config_NetworkConfig_EthMode { + /* obtain ip address via DHCP */ + Config_NetworkConfig_EthMode_DHCP = 0, + /* use static ip address */ + Config_NetworkConfig_EthMode_STATIC = 1 } Config_NetworkConfig_EthMode; -typedef enum _Config_DisplayConfig_GpsCoordinateFormat { - Config_DisplayConfig_GpsCoordinateFormat_DEC = 0, - Config_DisplayConfig_GpsCoordinateFormat_DMS = 1, - Config_DisplayConfig_GpsCoordinateFormat_UTM = 2, - Config_DisplayConfig_GpsCoordinateFormat_MGRS = 3, - Config_DisplayConfig_GpsCoordinateFormat_OLC = 4, - Config_DisplayConfig_GpsCoordinateFormat_OSGR = 5 +/* How the GPS coordinates are displayed on the OLED screen. */ +typedef enum _Config_DisplayConfig_GpsCoordinateFormat { + /* GPS coordinates are displayed in the normal decimal degrees format: + DD.DDDDDD DDD.DDDDDD */ + Config_DisplayConfig_GpsCoordinateFormat_DEC = 0, + /* GPS coordinates are displayed in the degrees minutes seconds format: + DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant */ + Config_DisplayConfig_GpsCoordinateFormat_DMS = 1, + /* Universal Transverse Mercator format: + ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing */ + Config_DisplayConfig_GpsCoordinateFormat_UTM = 2, + /* Military Grid Reference System format: + ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square, + E is easting, N is northing */ + Config_DisplayConfig_GpsCoordinateFormat_MGRS = 3, + /* Open Location Code (aka Plus Codes). */ + Config_DisplayConfig_GpsCoordinateFormat_OLC = 4, + /* Ordnance Survey Grid Reference (the National Grid System of the UK). + Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square, + E is the easting, N is the northing */ + Config_DisplayConfig_GpsCoordinateFormat_OSGR = 5 } Config_DisplayConfig_GpsCoordinateFormat; -typedef enum _Config_DisplayConfig_DisplayUnits { - Config_DisplayConfig_DisplayUnits_METRIC = 0, - Config_DisplayConfig_DisplayUnits_IMPERIAL = 1 +/* Unit display preference */ +typedef enum _Config_DisplayConfig_DisplayUnits { + /* Metric (Default) */ + Config_DisplayConfig_DisplayUnits_METRIC = 0, + /* Imperial */ + Config_DisplayConfig_DisplayUnits_IMPERIAL = 1 } Config_DisplayConfig_DisplayUnits; -typedef enum _Config_DisplayConfig_OledType { - Config_DisplayConfig_OledType_OLED_AUTO = 0, - Config_DisplayConfig_OledType_OLED_SSD1306 = 1, - Config_DisplayConfig_OledType_OLED_SH1106 = 2 +/* Override OLED outo detect with this if it fails. */ +typedef enum _Config_DisplayConfig_OledType { + /* Default / Auto */ + Config_DisplayConfig_OledType_OLED_AUTO = 0, + /* Default / Auto */ + Config_DisplayConfig_OledType_OLED_SSD1306 = 1, + /* Default / Auto */ + Config_DisplayConfig_OledType_OLED_SH1106 = 2 } Config_DisplayConfig_OledType; -typedef enum _Config_LoRaConfig_RegionCode { - Config_LoRaConfig_RegionCode_UNSET = 0, - Config_LoRaConfig_RegionCode_US = 1, - Config_LoRaConfig_RegionCode_EU_433 = 2, - Config_LoRaConfig_RegionCode_EU_868 = 3, - Config_LoRaConfig_RegionCode_CN = 4, - Config_LoRaConfig_RegionCode_JP = 5, - Config_LoRaConfig_RegionCode_ANZ = 6, - Config_LoRaConfig_RegionCode_KR = 7, - Config_LoRaConfig_RegionCode_TW = 8, - Config_LoRaConfig_RegionCode_RU = 9, - Config_LoRaConfig_RegionCode_IN = 10, - Config_LoRaConfig_RegionCode_NZ_865 = 11, - Config_LoRaConfig_RegionCode_TH = 12, - Config_LoRaConfig_RegionCode_LORA_24 = 13 +typedef enum _Config_LoRaConfig_RegionCode { + /* Region is not set */ + Config_LoRaConfig_RegionCode_UNSET = 0, + /* United States */ + Config_LoRaConfig_RegionCode_US = 1, + /* European Union 433mhz */ + Config_LoRaConfig_RegionCode_EU_433 = 2, + /* European Union 433mhz */ + Config_LoRaConfig_RegionCode_EU_868 = 3, + /* China */ + Config_LoRaConfig_RegionCode_CN = 4, + /* Japan */ + Config_LoRaConfig_RegionCode_JP = 5, + /* Australia / New Zealand */ + Config_LoRaConfig_RegionCode_ANZ = 6, + /* Korea */ + Config_LoRaConfig_RegionCode_KR = 7, + /* Taiwan */ + Config_LoRaConfig_RegionCode_TW = 8, + /* Russia */ + Config_LoRaConfig_RegionCode_RU = 9, + /* India */ + Config_LoRaConfig_RegionCode_IN = 10, + /* New Zealand 865mhz */ + Config_LoRaConfig_RegionCode_NZ_865 = 11, + /* Thailand */ + Config_LoRaConfig_RegionCode_TH = 12, + /* WLAN Band */ + Config_LoRaConfig_RegionCode_LORA_24 = 13 } Config_LoRaConfig_RegionCode; -typedef enum _Config_LoRaConfig_ModemPreset { - Config_LoRaConfig_ModemPreset_LONG_FAST = 0, - Config_LoRaConfig_ModemPreset_LONG_SLOW = 1, - Config_LoRaConfig_ModemPreset_VERY_LONG_SLOW = 2, - Config_LoRaConfig_ModemPreset_MEDIUM_SLOW = 3, - Config_LoRaConfig_ModemPreset_MEDIUM_FAST = 4, - Config_LoRaConfig_ModemPreset_SHORT_SLOW = 5, - Config_LoRaConfig_ModemPreset_SHORT_FAST = 6 +/* Standard predefined channel settings + Note: these mappings must match ModemPreset Choice in the device code. */ +typedef enum _Config_LoRaConfig_ModemPreset { + /* Long Range - Fast */ + Config_LoRaConfig_ModemPreset_LONG_FAST = 0, + /* Long Range - Slow */ + Config_LoRaConfig_ModemPreset_LONG_SLOW = 1, + /* Very Long Range - Slow */ + Config_LoRaConfig_ModemPreset_VERY_LONG_SLOW = 2, + /* Medium Range - Slow */ + Config_LoRaConfig_ModemPreset_MEDIUM_SLOW = 3, + /* Medium Range - Fast */ + Config_LoRaConfig_ModemPreset_MEDIUM_FAST = 4, + /* Short Range - Slow */ + Config_LoRaConfig_ModemPreset_SHORT_SLOW = 5, + /* Short Range - Fast */ + Config_LoRaConfig_ModemPreset_SHORT_FAST = 6 } Config_LoRaConfig_ModemPreset; -typedef enum _Config_BluetoothConfig_PairingMode { - Config_BluetoothConfig_PairingMode_RANDOM_PIN = 0, - Config_BluetoothConfig_PairingMode_FIXED_PIN = 1, - Config_BluetoothConfig_PairingMode_NO_PIN = 2 +typedef enum _Config_BluetoothConfig_PairingMode { + /* Device generates a random pin that will be shown on the screen of the device for pairing */ + Config_BluetoothConfig_PairingMode_RANDOM_PIN = 0, + /* Device requires a specified fixed pin for pairing */ + Config_BluetoothConfig_PairingMode_FIXED_PIN = 1, + /* Device requires no pin for pairing */ + Config_BluetoothConfig_PairingMode_NO_PIN = 2 } Config_BluetoothConfig_PairingMode; /* Struct definitions */ -typedef struct _Config_BluetoothConfig { - bool enabled; - Config_BluetoothConfig_PairingMode mode; - uint32_t fixed_pin; -} Config_BluetoothConfig; - -typedef struct _Config_DeviceConfig { +/* Configuration */ +typedef struct _Config_DeviceConfig { + /* Sets the role of node */ Config_DeviceConfig_Role role; + /* Disabling this will disable the SerialConsole by not initilizing the StreamAPI */ bool serial_enabled; + /* By default we turn off logging as soon as an API client connects (to keep shared serial link quiet). + Set this to true to leave the debug log outputting even when API is active. */ bool debug_log_enabled; + /* For boards without a hard wired button, this is the pin number that will be used + Boards that have more than one button can swap the function with this one. defaults to BUTTON_PIN if defined. */ uint32_t button_gpio; + /* For boards without a PWM buzzer, this is the pin number that will be used + Defaults to PIN_BUZZER if defined. */ uint32_t buzzer_gpio; } Config_DeviceConfig; -typedef struct _Config_DisplayConfig { - uint32_t screen_on_secs; - Config_DisplayConfig_GpsCoordinateFormat gps_format; - uint32_t auto_screen_carousel_secs; - bool compass_north_top; - bool flip_screen; - Config_DisplayConfig_DisplayUnits units; - Config_DisplayConfig_OledType oled; -} Config_DisplayConfig; - -typedef struct _Config_LoRaConfig { - bool use_preset; - Config_LoRaConfig_ModemPreset modem_preset; - uint16_t bandwidth; - uint32_t spread_factor; - uint8_t coding_rate; - float frequency_offset; - Config_LoRaConfig_RegionCode region; - uint32_t hop_limit; - bool tx_enabled; - int8_t tx_power; - uint16_t channel_num; - bool override_duty_cycle; - pb_size_t ignore_incoming_count; - uint32_t ignore_incoming[3]; -} Config_LoRaConfig; - -typedef struct _Config_NetworkConfig_IpV4Config { - uint32_t ip; - uint32_t gateway; - uint32_t subnet; - uint32_t dns; -} Config_NetworkConfig_IpV4Config; - -typedef struct _Config_PositionConfig { +/* Position Config */ +typedef struct _Config_PositionConfig { + /* We should send our position this often (but only if it has changed significantly) + Defaults to 15 minutes */ uint32_t position_broadcast_secs; + /* Adaptive position braoadcast, which is now the default. */ bool position_broadcast_smart_enabled; + /* If set, this node is at a fixed position. + We will generate GPS position updates at the regular interval, but use whatever the last lat/lon/alt we have for the node. + The lat/lon/alt can be set by an internal GPS or with the help of the app. */ bool fixed_position; + /* Is GPS enabled for this node? */ bool gps_enabled; + /* How often should we try to get GPS position (in seconds) + or zero for the default of once every 30 seconds + or a very large value (maxint) to update only once at boot. */ uint32_t gps_update_interval; + /* How long should we try to get our position during each gps_update_interval attempt? (in seconds) + Or if zero, use the default of 30 seconds. + If we don't get a new gps fix in that time, the gps will be put into sleep until the next gps_update_rate + window. */ uint32_t gps_attempt_time; + /* Bit field of boolean configuration options for POSITION messages + (bitwise OR of PositionFlags) */ uint32_t position_flags; + /* (Re)define GPS_RX_PIN for your board. */ uint32_t rx_gpio; + /* (Re)define GPS_TX_PIN for your board. */ uint32_t tx_gpio; } Config_PositionConfig; -typedef struct _Config_PowerConfig { +/* Power Config\ + See [Power Config](/docs/settings/config/power) for additional power config details. */ +typedef struct _Config_PowerConfig { + /* If set, we are powered from a low-current source (i.e. solar), so even if it looks like we have power flowing in + we should try to minimize power consumption as much as possible. + YOU DO NOT NEED TO SET THIS IF YOU'VE set is_router (it is implied in that case). + Advanced Option */ bool is_power_saving; + /* If non-zero, the device will fully power off this many seconds after external power is removed. */ uint32_t on_battery_shutdown_after_secs; + /* Ratio of voltage divider for battery pin eg. 3.20 (R1=100k, R2=220k) + Overrides the ADC_MULTIPLIER defined in variant for battery voltage calculation. + Should be set to floating point value between 2 and 4 + Fixes issues on Heltec v2 */ float adc_multiplier_override; + /* Wait Bluetooth Seconds + The number of seconds for to wait before turning off BLE in No Bluetooth states + 0 for default of 1 minute */ uint32_t wait_bluetooth_secs; + /* Mesh Super Deep Sleep Timeout Seconds + While in Light Sleep if this value is exceeded we will lower into super deep sleep + for sds_secs (default 1 year) or a button press + 0 for default of two hours, MAXUINT for disabled */ uint32_t mesh_sds_timeout_secs; + /* Super Deep Sleep Seconds + While in Light Sleep if mesh_sds_timeout_secs is exceeded we will lower into super deep sleep + for this value (default 1 year) or a button press + 0 for default of one year */ uint32_t sds_secs; + /* Light Sleep Seconds + In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on + ESP32 Only + 0 for default of 300 */ uint32_t ls_secs; + /* Minimum Wake Seconds + 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 + 0 for default of 10 seconds */ uint32_t min_wake_secs; } Config_PowerConfig; -typedef struct _Config_NetworkConfig { +typedef struct _Config_NetworkConfig_IpV4Config { + /* Static IP address */ + uint32_t ip; + /* Static gateway address */ + uint32_t gateway; + /* Static subnet mask */ + uint32_t subnet; + /* Static DNS server address */ + uint32_t dns; +} Config_NetworkConfig_IpV4Config; + +/* Network Config */ +typedef struct _Config_NetworkConfig { + /* Enable WiFi (disables Bluetooth) */ bool wifi_enabled; + /* If set, this node will try to join the specified wifi network and + acquire an address via DHCP */ char wifi_ssid[33]; + /* If set, will be use to authenticate to the named wifi */ char wifi_psk[64]; + /* NTP server to use if WiFi is conneced, defaults to `0.pool.ntp.org` */ char ntp_server[33]; + /* Enable Ethernet */ bool eth_enabled; + /* acquire an address via DHCP or assign static */ Config_NetworkConfig_EthMode eth_mode; + /* struct to keep static address */ bool has_ipv4_config; Config_NetworkConfig_IpV4Config ipv4_config; } Config_NetworkConfig; -typedef struct _Config { +/* Display Config */ +typedef struct _Config_DisplayConfig { + /* Number of seconds the screen stays on after pressing the user button or receiving a message + 0 for default of one minute MAXUINT for always on */ + uint32_t screen_on_secs; + /* How the GPS coordinates are formatted on the OLED screen. */ + Config_DisplayConfig_GpsCoordinateFormat gps_format; + /* Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds. + Potentially useful for devices without user buttons. */ + uint32_t auto_screen_carousel_secs; + /* If this is set, the displayed compass will always point north. if unset, the old behaviour + (top of display is heading direction) is used. */ + bool compass_north_top; + /* Flip screen vertically, for cases that mount the screen upside down */ + bool flip_screen; + /* Perferred display units */ + Config_DisplayConfig_DisplayUnits units; + /* Override auto-detect in screen */ + Config_DisplayConfig_OledType oled; +} Config_DisplayConfig; + +/* Lora Config */ +typedef struct _Config_LoRaConfig { + /* When enabled, the `modem_preset` fields will be adheared to, else the `bandwidth`/`spread_factor`/`coding_rate` + will be taked from their respective manually defined fields */ + bool use_preset; + /* Either modem_config or bandwidth/spreading/coding will be specified - NOT BOTH. + As a heuristic: If bandwidth is specified, do not use modem_config. + Because protobufs take ZERO space when the value is zero this works out nicely. + This value is replaced by bandwidth/spread_factor/coding_rate. + If you'd like to experiment with other options add them to MeshRadio.cpp in the device code. */ + Config_LoRaConfig_ModemPreset modem_preset; + /* Bandwidth in MHz + Certain bandwidth numbers are 'special' and will be converted to the + appropriate floating point value: 31 -> 31.25MHz */ + uint16_t bandwidth; + /* A number from 7 to 12. + Indicates number of chirps per symbol as 1<. Note: app developers are encouraged to also use the following standard @@ -481,8 +369,62 @@ typedef struct _User { bool is_licensed; } User; +/* A message used in our Dynamic Source Routing protocol (RFC 4728 based) */ +typedef struct _RouteDiscovery { + /* The list of nodenums this packet has visited so far */ + pb_size_t route_count; + uint32_t route[8]; +} RouteDiscovery; + +/* A Routing control Data packet handled by the routing module */ +typedef struct _Routing { + pb_size_t which_variant; + union { + /* A route request going from the requester */ + RouteDiscovery route_request; + /* A route reply */ + RouteDiscovery route_reply; + /* 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). */ + Routing_Error error_reason; + }; +} Routing; + +typedef PB_BYTES_ARRAY_T(237) Data_payload_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) */ +typedef struct _Data { + /* Formerly named typ and of type Type */ + PortNum portnum; + /* TODO: REPLACE */ + Data_payload_t payload; + /* Not normally used, but for testing a sender can request that recipient + responds in kind (i.e. if it received a position, it should unicast back it's position). + Note: that if you set this on a broadcast you will receive many replies. */ + bool want_response; + /* The address of the destination node. + This field is is filled in by the mesh radio device software, application + layer software should never need it. + RouteDiscovery messages _must_ populate this. + Other message types might need to if they are doing multihop routing. */ + uint32_t dest; + /* The address of the original sender for this message. + This field should _only_ be populated for reliable multihop packets (to keep + packets small). */ + uint32_t source; + /* Only used in routing or response messages. + Indicates the original message ID that this message is reporting failure on. (formerly called original_id) */ + uint32_t request_id; + /* If set, this message is intened to be a reply to a previously sent message with the defined id. */ + uint32_t reply_id; + /* Defaults to false. If true, then what is in the payload should be treated as an emoji like giving + a message a heart or poop emoji. */ + uint32_t emoji; +} Data; + /* Waypoint message, used to share arbitrary locations across the mesh */ -typedef struct _Waypoint { +typedef struct _Waypoint { /* Id of the waypoint */ uint32_t id; /* latitude_i */ @@ -504,7 +446,7 @@ typedef PB_BYTES_ARRAY_T(256) MeshPacket_encrypted_t; /* A packet envelope sent/received over the mesh only payload_variant is sent in the payload portion of the LORA packet. The other fields are either not sent at all, or sent in the special 16 byte LORA header. */ -typedef struct _MeshPacket { +typedef struct _MeshPacket { /* The sending node number. Note: Our crypto implementation uses this field as well. See [crypto](/docs/overview/encryption) for details. @@ -588,7 +530,7 @@ typedef struct _MeshPacket { level etc) SET_CONFIG (switches device to a new set of radio params and preshared key, drops all existing nodes, force our node to rejoin this new group) Full information about a node on the mesh */ -typedef struct _NodeInfo { +typedef struct _NodeInfo { /* The node number */ uint32_t num; /* The user info for this node */ @@ -608,25 +550,80 @@ typedef struct _NodeInfo { DeviceMetrics device_metrics; } NodeInfo; -/* A Routing control Data packet handled by the routing module */ -typedef struct _Routing { - pb_size_t which_variant; - union { - /* A route request going from the requester */ - RouteDiscovery route_request; - /* A route reply */ - RouteDiscovery route_reply; - /* 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). */ - Routing_Error error_reason; - }; -} Routing; +/* Unique local debugging info for this node + Note: we don't include position or the user info, because that will come in the + Sent to the phone in response to WantNodes. */ +typedef struct _MyNodeInfo { + /* Tells the phone what our node number is, default starting value is + lowbyte of macaddr, but it will be fixed if that is already in use */ + uint32_t my_node_num; + /* Note: This flag merely means we detected a hardware GPS in our node. + Not the same as UserPreferences.location_sharing */ + bool has_gps; + /* The maximum number of 'software' channels that can be set on this node. */ + uint32_t max_channels; + /* 0.0.5 etc... */ + char firmware_version[18]; + /* An error message we'd like to report back to the mothership through analytics. + It indicates a serious bug occurred on the device, the device coped with it, + but we still want to tell the devs about the bug. + This field will be cleared after the phone reads MyNodeInfo + (i.e. it will only be reported once) + a numeric error code to go with error message, zero means no error */ + CriticalErrorCode error_code; + /* A numeric error address (nonzero if available) */ + uint32_t error_address; + /* The total number of errors this node has ever encountered + (well - since the last time we discarded preferences) */ + uint32_t error_count; + /* The total number of reboots this node has ever encountered + (well - since the last time we discarded preferences) */ + uint32_t reboot_count; + /* Calculated bitrate of the current channel (in Bytes Per Second) */ + float bitrate; + /* How long before we consider a message abandoned and we can clear our + caches of any messages in flight Normally quite large to handle the worst case + message delivery time, 5 minutes. + Formerly called FLOOD_EXPIRE_TIME in the device code */ + uint32_t message_timeout_msec; + /* The minimum app version that can talk to this device. + Phone/PC apps should compare this to their build number and if too low tell the user they must update their app */ + uint32_t min_app_version; + /* 24 time windows of 1hr each with the airtime transmitted out of the device per hour. */ + pb_size_t air_period_tx_count; + uint32_t air_period_tx[8]; + /* 24 time windows of 1hr each with the airtime of valid packets for your mesh. */ + pb_size_t air_period_rx_count; + uint32_t air_period_rx[8]; + /* Is the device wifi capable? */ + bool has_wifi; + /* Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise). */ + float channel_utilization; + /* Percent of airtime for transmission used within the last hour. */ + float air_util_tx; +} MyNodeInfo; + +/* Debug output from the device. + To minimize the size of records inside the device code, if a time/source/level is not set + on the message it is assumed to be a continuation of the previously sent message. + This allows the device code to use fixed maxlen 64 byte strings for messages, + and then extend as needed by emitting multiple records. */ +typedef struct _LogRecord { + /* Log levels, chosen to match python logging conventions. */ + char message[64]; + /* Seconds since 1970 - or 0 for unknown/unset */ + uint32_t time; + /* Usually based on thread name - if known */ + char source[8]; + /* Not yet set */ + LogRecord_Level level; +} LogRecord; /* 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, at which point the next item in the FIFO will be populated. */ -typedef struct _FromRadio { +typedef struct _FromRadio { /* The packet id, used to allow the phone to request missing read packets from the FIFO, see our bluetooth docs */ uint32_t id; @@ -663,7 +660,7 @@ typedef struct _FromRadio { /* Packets/commands to the radio will be written (reliably) to the toRadio characteristic. Once the write completes the phone can assume it is handled. */ -typedef struct _ToRadio { +typedef struct _ToRadio { pb_size_t which_payload_variant; union { /* Send this packet on the mesh */ @@ -684,6 +681,19 @@ typedef struct _ToRadio { }; } ToRadio; +typedef PB_BYTES_ARRAY_T(237) Compressed_data_t; +/* Compressed message payload */ +typedef struct _Compressed { + /* PortNum to determine the how to handle the compressed payload. */ + PortNum portnum; + /* Compressed data. */ + Compressed_data_t data; +} Compressed; + + +#ifdef __cplusplus +extern "C" { +#endif /* Helper constants for enums */ #define _HardwareModel_MIN HardwareModel_UNSET @@ -722,10 +732,29 @@ typedef struct _ToRadio { #define _LogRecord_Level_MAX LogRecord_Level_CRITICAL #define _LogRecord_Level_ARRAYSIZE ((LogRecord_Level)(LogRecord_Level_CRITICAL+1)) +#define Position_location_source_ENUMTYPE Position_LocSource +#define Position_altitude_source_ENUMTYPE Position_AltSource + +#define User_hw_model_ENUMTYPE HardwareModel + + +#define Routing_variant_error_reason_ENUMTYPE Routing_Error + +#define Data_portnum_ENUMTYPE PortNum + + +#define MeshPacket_priority_ENUMTYPE MeshPacket_Priority +#define MeshPacket_delayed_ENUMTYPE MeshPacket_Delayed + + +#define MyNodeInfo_error_code_ENUMTYPE CriticalErrorCode + +#define LogRecord_level_ENUMTYPE LogRecord_Level + + + +#define Compressed_portnum_ENUMTYPE PortNum -#ifdef __cplusplus -extern "C" { -#endif /* Initializer values for message structs */ #define Position_init_default {0, 0, 0, 0, _Position_LocSource_MIN, _Position_AltSource_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} @@ -756,36 +785,6 @@ extern "C" { #define Compressed_init_zero {_PortNum_MIN, {0, {0}}} /* Field tags (for use in manual encoding/decoding) */ -#define Compressed_portnum_tag 1 -#define Compressed_data_tag 2 -#define Data_portnum_tag 1 -#define Data_payload_tag 2 -#define Data_want_response_tag 3 -#define Data_dest_tag 4 -#define Data_source_tag 5 -#define Data_request_id_tag 6 -#define Data_reply_id_tag 7 -#define Data_emoji_tag 8 -#define LogRecord_message_tag 1 -#define LogRecord_time_tag 2 -#define LogRecord_source_tag 3 -#define LogRecord_level_tag 4 -#define MyNodeInfo_my_node_num_tag 1 -#define MyNodeInfo_has_gps_tag 2 -#define MyNodeInfo_max_channels_tag 3 -#define MyNodeInfo_firmware_version_tag 4 -#define MyNodeInfo_error_code_tag 5 -#define MyNodeInfo_error_address_tag 6 -#define MyNodeInfo_error_count_tag 7 -#define MyNodeInfo_reboot_count_tag 8 -#define MyNodeInfo_bitrate_tag 9 -#define MyNodeInfo_message_timeout_msec_tag 10 -#define MyNodeInfo_min_app_version_tag 11 -#define MyNodeInfo_air_period_tx_tag 12 -#define MyNodeInfo_air_period_rx_tag 13 -#define MyNodeInfo_has_wifi_tag 14 -#define MyNodeInfo_channel_utilization_tag 15 -#define MyNodeInfo_air_util_tx_tag 16 #define Position_latitude_i_tag 1 #define Position_longitude_i_tag 2 #define Position_altitude_tag 3 @@ -808,13 +807,24 @@ extern "C" { #define Position_sensor_id_tag 20 #define Position_next_update_tag 21 #define Position_seq_number_tag 22 -#define RouteDiscovery_route_tag 1 #define User_id_tag 1 #define User_long_name_tag 2 #define User_short_name_tag 3 #define User_macaddr_tag 4 #define User_hw_model_tag 5 #define User_is_licensed_tag 6 +#define RouteDiscovery_route_tag 1 +#define Routing_route_request_tag 1 +#define Routing_route_reply_tag 2 +#define Routing_error_reason_tag 3 +#define Data_portnum_tag 1 +#define Data_payload_tag 2 +#define Data_want_response_tag 3 +#define Data_dest_tag 4 +#define Data_source_tag 5 +#define Data_request_id_tag 6 +#define Data_reply_id_tag 7 +#define Data_emoji_tag 8 #define Waypoint_id_tag 1 #define Waypoint_latitude_i_tag 2 #define Waypoint_longitude_i_tag 3 @@ -841,9 +851,26 @@ extern "C" { #define NodeInfo_snr_tag 4 #define NodeInfo_last_heard_tag 5 #define NodeInfo_device_metrics_tag 6 -#define Routing_route_request_tag 1 -#define Routing_route_reply_tag 2 -#define Routing_error_reason_tag 3 +#define MyNodeInfo_my_node_num_tag 1 +#define MyNodeInfo_has_gps_tag 2 +#define MyNodeInfo_max_channels_tag 3 +#define MyNodeInfo_firmware_version_tag 4 +#define MyNodeInfo_error_code_tag 5 +#define MyNodeInfo_error_address_tag 6 +#define MyNodeInfo_error_count_tag 7 +#define MyNodeInfo_reboot_count_tag 8 +#define MyNodeInfo_bitrate_tag 9 +#define MyNodeInfo_message_timeout_msec_tag 10 +#define MyNodeInfo_min_app_version_tag 11 +#define MyNodeInfo_air_period_tx_tag 12 +#define MyNodeInfo_air_period_rx_tag 13 +#define MyNodeInfo_has_wifi_tag 14 +#define MyNodeInfo_channel_utilization_tag 15 +#define MyNodeInfo_air_util_tx_tag 16 +#define LogRecord_message_tag 1 +#define LogRecord_time_tag 2 +#define LogRecord_source_tag 3 +#define LogRecord_level_tag 4 #define FromRadio_id_tag 1 #define FromRadio_packet_tag 2 #define FromRadio_my_info_tag 3 @@ -857,6 +884,8 @@ extern "C" { #define ToRadio_packet_tag 1 #define ToRadio_want_config_id_tag 3 #define ToRadio_disconnect_tag 4 +#define Compressed_portnum_tag 1 +#define Compressed_data_tag 2 /* Struct field encoding specification for nanopb */ #define Position_FIELDLIST(X, a) \ diff --git a/src/mesh/generated/module_config.pb.c b/src/mesh/generated/module_config.pb.c index 381ce6351..7d7de956e 100644 --- a/src/mesh/generated/module_config.pb.c +++ b/src/mesh/generated/module_config.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "module_config.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/module_config.pb.h b/src/mesh/generated/module_config.pb.h index 47f410a5c..6d677fd41 100644 --- a/src/mesh/generated/module_config.pb.h +++ b/src/mesh/generated/module_config.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_MODULE_CONFIG_PB_H_INCLUDED #define PB_MODULE_CONFIG_PB_H_INCLUDED @@ -10,141 +10,244 @@ #endif /* Enum definitions */ -typedef enum _ModuleConfig_AudioConfig_Audio_Baud { - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT = 0, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_3200 = 1, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_2400 = 2, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1600 = 3, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1400 = 4, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1300 = 5, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1200 = 6, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700 = 7, - ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B = 8 +/* Baudrate for codec2 voice */ +typedef enum _ModuleConfig_AudioConfig_Audio_Baud { + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT = 0, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_3200 = 1, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_2400 = 2, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1600 = 3, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1400 = 4, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1300 = 5, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_1200 = 6, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700 = 7, + ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B = 8 } ModuleConfig_AudioConfig_Audio_Baud; -typedef enum _ModuleConfig_SerialConfig_Serial_Baud { - ModuleConfig_SerialConfig_Serial_Baud_BAUD_DEFAULT = 0, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_110 = 1, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_300 = 2, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_600 = 3, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_1200 = 4, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_2400 = 5, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_4800 = 6, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_9600 = 7, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_19200 = 8, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_38400 = 9, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_57600 = 10, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_115200 = 11, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_230400 = 12, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_460800 = 13, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_576000 = 14, - ModuleConfig_SerialConfig_Serial_Baud_BAUD_921600 = 15 +/* TODO: REPLACE */ +typedef enum _ModuleConfig_SerialConfig_Serial_Baud { + ModuleConfig_SerialConfig_Serial_Baud_BAUD_DEFAULT = 0, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_110 = 1, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_300 = 2, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_600 = 3, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_1200 = 4, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_2400 = 5, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_4800 = 6, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_9600 = 7, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_19200 = 8, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_38400 = 9, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_57600 = 10, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_115200 = 11, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_230400 = 12, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_460800 = 13, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_576000 = 14, + ModuleConfig_SerialConfig_Serial_Baud_BAUD_921600 = 15 } ModuleConfig_SerialConfig_Serial_Baud; -typedef enum _ModuleConfig_SerialConfig_Serial_Mode { - ModuleConfig_SerialConfig_Serial_Mode_DEFAULT = 0, - ModuleConfig_SerialConfig_Serial_Mode_SIMPLE = 1, - ModuleConfig_SerialConfig_Serial_Mode_PROTO = 2, - ModuleConfig_SerialConfig_Serial_Mode_TEXTMSG = 3, - ModuleConfig_SerialConfig_Serial_Mode_NMEA = 4 +/* TODO: REPLACE */ +typedef enum _ModuleConfig_SerialConfig_Serial_Mode { + ModuleConfig_SerialConfig_Serial_Mode_DEFAULT = 0, + ModuleConfig_SerialConfig_Serial_Mode_SIMPLE = 1, + ModuleConfig_SerialConfig_Serial_Mode_PROTO = 2, + ModuleConfig_SerialConfig_Serial_Mode_TEXTMSG = 3, + ModuleConfig_SerialConfig_Serial_Mode_NMEA = 4 } ModuleConfig_SerialConfig_Serial_Mode; -typedef enum _ModuleConfig_CannedMessageConfig_InputEventChar { - ModuleConfig_CannedMessageConfig_InputEventChar_NONE = 0, - ModuleConfig_CannedMessageConfig_InputEventChar_UP = 17, - ModuleConfig_CannedMessageConfig_InputEventChar_DOWN = 18, - ModuleConfig_CannedMessageConfig_InputEventChar_LEFT = 19, - ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT = 20, - ModuleConfig_CannedMessageConfig_InputEventChar_SELECT = 10, - ModuleConfig_CannedMessageConfig_InputEventChar_BACK = 27, - ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL = 24 +/* TODO: REPLACE */ +typedef enum _ModuleConfig_CannedMessageConfig_InputEventChar { + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_NONE = 0, + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_UP = 17, + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_DOWN = 18, + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_LEFT = 19, + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_RIGHT = 20, + /* '\n' */ + ModuleConfig_CannedMessageConfig_InputEventChar_SELECT = 10, + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_BACK = 27, + /* TODO: REPLACE */ + ModuleConfig_CannedMessageConfig_InputEventChar_CANCEL = 24 } ModuleConfig_CannedMessageConfig_InputEventChar; /* Struct definitions */ -typedef struct _ModuleConfig_AudioConfig { - bool codec2_enabled; - uint8_t ptt_pin; - ModuleConfig_AudioConfig_Audio_Baud bitrate; - uint8_t i2s_ws; - uint8_t i2s_sd; - uint8_t i2s_din; - uint8_t i2s_sck; -} ModuleConfig_AudioConfig; - -typedef struct _ModuleConfig_CannedMessageConfig { - bool rotary1_enabled; - uint32_t inputbroker_pin_a; - uint32_t inputbroker_pin_b; - uint32_t inputbroker_pin_press; - ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_cw; - ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_ccw; - ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_press; - bool updown1_enabled; - bool enabled; - char allow_input_source[16]; - bool send_bell; -} ModuleConfig_CannedMessageConfig; - -typedef struct _ModuleConfig_ExternalNotificationConfig { - bool enabled; - uint32_t output_ms; - uint32_t output; - bool active; - bool alert_message; - bool alert_bell; - bool use_pwm; - uint8_t output_vibra; - uint8_t output_buzzer; - bool alert_message_vibra; - bool alert_message_buzzer; - bool alert_bell_vibra; - bool alert_bell_buzzer; - uint16_t nag_timeout; -} ModuleConfig_ExternalNotificationConfig; - -typedef struct _ModuleConfig_MQTTConfig { +/* MQTT Client Config */ +typedef struct _ModuleConfig_MQTTConfig { + /* If a meshtastic node is able to reach the internet it will normally attempt to gateway any channels that are marked as + is_uplink_enabled or is_downlink_enabled. */ bool enabled; + /* The server to use for our MQTT global message gateway feature. + If not set, the default server will be used */ char address[32]; + /* MQTT username to use (most useful for a custom MQTT server). + If using a custom server, this will be honoured even if empty. + If using the default server, this will only be honoured if set, otherwise the device will use the default username */ char username[64]; + /* MQTT password to use (most useful for a custom MQTT server). + If using a custom server, this will be honoured even if empty. + If using the default server, this will only be honoured if set, otherwise the device will use the default password */ char password[64]; + /* Whether to send encrypted or decrypted packets to MQTT. + This parameter is only honoured if you also set server + (the default official mqtt.meshtastic.org server can handle encrypted packets) + Decrypted packets may be useful for external systems that want to consume meshtastic packets */ bool encryption_enabled; + /* Whether to send / consume json packets on MQTT */ bool json_enabled; } ModuleConfig_MQTTConfig; -typedef struct _ModuleConfig_RangeTestConfig { - bool enabled; - uint32_t sender; - bool save; -} ModuleConfig_RangeTestConfig; +/* Audio Config for codec2 voice */ +typedef struct _ModuleConfig_AudioConfig { + /* Whether Audio is enabled */ + bool codec2_enabled; + /* PTT Pin */ + uint8_t ptt_pin; + /* The audio sample rate to use for codec2 */ + ModuleConfig_AudioConfig_Audio_Baud bitrate; + /* I2S Word Select */ + uint8_t i2s_ws; + /* I2S Data IN */ + uint8_t i2s_sd; + /* I2S Data OUT */ + uint8_t i2s_din; + /* I2S Clock */ + uint8_t i2s_sck; +} ModuleConfig_AudioConfig; -typedef struct _ModuleConfig_SerialConfig { +/* Serial Config */ +typedef struct _ModuleConfig_SerialConfig { + /* Preferences for the SerialModule + FIXME - Move this out of UserPreferences and into a section for module configuration. */ bool enabled; + /* TODO: REPLACE */ bool echo; + /* TODO: REPLACE */ uint32_t rxd; + /* TODO: REPLACE */ uint32_t txd; + /* TODO: REPLACE */ ModuleConfig_SerialConfig_Serial_Baud baud; + /* TODO: REPLACE */ uint32_t timeout; + /* TODO: REPLACE */ ModuleConfig_SerialConfig_Serial_Mode mode; } ModuleConfig_SerialConfig; -typedef struct _ModuleConfig_StoreForwardConfig { +/* External Notifications Config */ +typedef struct _ModuleConfig_ExternalNotificationConfig { + /* Enable the ExternalNotificationModule */ bool enabled; + /* When using in On/Off mode, keep the output on for this many + milliseconds. Default 1000ms (1 second). */ + uint32_t output_ms; + /* Define the output pin GPIO setting Defaults to + EXT_NOTIFY_OUT if set for the board. + In standalone devices this pin should drive the LED to match the UI. */ + uint32_t output; + /* IF this is true, the 'output' Pin will be pulled active high, false + means active low. */ + bool active; + /* True: Alert when a text message arrives (output) */ + bool alert_message; + /* True: Alert when the bell character is received (output) */ + bool alert_bell; + /* use a PWM output instead of a simple on/off output. This will ignore + the 'output', 'output_ms' and 'active' settings and use the + device.buzzer_gpio instead. */ + bool use_pwm; + /* Optional: Define a secondary output pin for a vibra motor + This is used in standalone devices to match the UI. */ + uint8_t output_vibra; + /* Optional: Define a tertiary output pin for an active buzzer + This is used in standalone devices to to match the UI. */ + uint8_t output_buzzer; + /* True: Alert when a text message arrives (output_vibra) */ + bool alert_message_vibra; + /* True: Alert when a text message arrives (output_buzzer) */ + bool alert_message_buzzer; + /* True: Alert when the bell character is received (output_vibra) */ + bool alert_bell_vibra; + /* True: Alert when the bell character is received (output_buzzer) */ + bool alert_bell_buzzer; + /* The notification will toggle with 'output_ms' for this time of seconds. + Default is 0 which means don't repeat at all. 60 would mean blink + and/or beep for 60 seconds */ + uint16_t nag_timeout; +} ModuleConfig_ExternalNotificationConfig; + +/* Store and Forward Module Config */ +typedef struct _ModuleConfig_StoreForwardConfig { + /* Enable the Store and Forward Module */ + bool enabled; + /* TODO: REPLACE */ bool heartbeat; + /* TODO: REPLACE */ uint32_t records; + /* TODO: REPLACE */ uint32_t history_return_max; + /* TODO: REPLACE */ uint32_t history_return_window; } ModuleConfig_StoreForwardConfig; -typedef struct _ModuleConfig_TelemetryConfig { +/* Preferences for the RangeTestModule */ +typedef struct _ModuleConfig_RangeTestConfig { + /* Enable the Range Test Module */ + bool enabled; + /* Send out range test messages from this node */ + uint32_t sender; + /* Bool value indicating that this node should save a RangeTest.csv file. + ESP32 Only */ + bool save; +} ModuleConfig_RangeTestConfig; + +/* Configuration for both device and environment metrics */ +typedef struct _ModuleConfig_TelemetryConfig { + /* Interval in seconds of how often we should try to send our + device metrics to the mesh */ uint32_t device_update_interval; uint32_t environment_update_interval; + /* Preferences for the Telemetry Module (Environment) + Enable/Disable the telemetry measurement module measurement collection */ bool environment_measurement_enabled; + /* Enable/Disable the telemetry measurement module on-device display */ bool environment_screen_enabled; + /* We'll always read the sensor in Celsius, but sometimes we might want to + display the results in Fahrenheit as a "user preference". */ bool environment_display_fahrenheit; } ModuleConfig_TelemetryConfig; +/* TODO: REPLACE */ +typedef struct _ModuleConfig_CannedMessageConfig { + /* Enable the rotary encoder #1. This is a 'dumb' encoder sending pulses on both A and B pins while rotating. */ + bool rotary1_enabled; + /* GPIO pin for rotary encoder A port. */ + uint32_t inputbroker_pin_a; + /* GPIO pin for rotary encoder B port. */ + uint32_t inputbroker_pin_b; + /* GPIO pin for rotary encoder Press port. */ + uint32_t inputbroker_pin_press; + /* Generate input event on CW of this kind. */ + ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_cw; + /* Generate input event on CCW of this kind. */ + ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_ccw; + /* Generate input event on Press of this kind. */ + ModuleConfig_CannedMessageConfig_InputEventChar inputbroker_event_press; + /* Enable the Up/Down/Select input device. Can be RAK rotary encoder or 3 buttons. Uses the a/b/press definitions from inputbroker. */ + bool updown1_enabled; + /* Enable/disable CannedMessageModule. */ + bool enabled; + /* Input event origin accepted by the canned message module. + Can be e.g. "rotEnc1", "upDownEnc1" or keyword "_any" */ + char allow_input_source[16]; + /* CannedMessageModule also sends a bell character with the messages. + ExternalNotificationModule can benefit from this feature. */ + bool send_bell; +} ModuleConfig_CannedMessageConfig; + /* Module Config */ -typedef struct _ModuleConfig { +typedef struct _ModuleConfig { pb_size_t which_payload_variant; union { /* TODO: REPLACE */ @@ -167,6 +270,10 @@ typedef struct _ModuleConfig { } ModuleConfig; +#ifdef __cplusplus +extern "C" { +#endif + /* Helper constants for enums */ #define _ModuleConfig_AudioConfig_Audio_Baud_MIN ModuleConfig_AudioConfig_Audio_Baud_CODEC2_DEFAULT #define _ModuleConfig_AudioConfig_Audio_Baud_MAX ModuleConfig_AudioConfig_Audio_Baud_CODEC2_700B @@ -185,9 +292,20 @@ typedef struct _ModuleConfig { #define _ModuleConfig_CannedMessageConfig_InputEventChar_ARRAYSIZE ((ModuleConfig_CannedMessageConfig_InputEventChar)(ModuleConfig_CannedMessageConfig_InputEventChar_BACK+1)) -#ifdef __cplusplus -extern "C" { -#endif + +#define ModuleConfig_AudioConfig_bitrate_ENUMTYPE ModuleConfig_AudioConfig_Audio_Baud + +#define ModuleConfig_SerialConfig_baud_ENUMTYPE ModuleConfig_SerialConfig_Serial_Baud +#define ModuleConfig_SerialConfig_mode_ENUMTYPE ModuleConfig_SerialConfig_Serial_Mode + + + + + +#define ModuleConfig_CannedMessageConfig_inputbroker_event_cw_ENUMTYPE ModuleConfig_CannedMessageConfig_InputEventChar +#define ModuleConfig_CannedMessageConfig_inputbroker_event_ccw_ENUMTYPE ModuleConfig_CannedMessageConfig_InputEventChar +#define ModuleConfig_CannedMessageConfig_inputbroker_event_press_ENUMTYPE ModuleConfig_CannedMessageConfig_InputEventChar + /* Initializer values for message structs */ #define ModuleConfig_init_default {0, {ModuleConfig_MQTTConfig_init_default}} @@ -210,6 +328,12 @@ extern "C" { #define ModuleConfig_CannedMessageConfig_init_zero {0, 0, 0, 0, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, _ModuleConfig_CannedMessageConfig_InputEventChar_MIN, 0, 0, "", 0} /* Field tags (for use in manual encoding/decoding) */ +#define ModuleConfig_MQTTConfig_enabled_tag 1 +#define ModuleConfig_MQTTConfig_address_tag 2 +#define ModuleConfig_MQTTConfig_username_tag 3 +#define ModuleConfig_MQTTConfig_password_tag 4 +#define ModuleConfig_MQTTConfig_encryption_enabled_tag 5 +#define ModuleConfig_MQTTConfig_json_enabled_tag 6 #define ModuleConfig_AudioConfig_codec2_enabled_tag 1 #define ModuleConfig_AudioConfig_ptt_pin_tag 2 #define ModuleConfig_AudioConfig_bitrate_tag 3 @@ -217,17 +341,13 @@ extern "C" { #define ModuleConfig_AudioConfig_i2s_sd_tag 5 #define ModuleConfig_AudioConfig_i2s_din_tag 6 #define ModuleConfig_AudioConfig_i2s_sck_tag 7 -#define ModuleConfig_CannedMessageConfig_rotary1_enabled_tag 1 -#define ModuleConfig_CannedMessageConfig_inputbroker_pin_a_tag 2 -#define ModuleConfig_CannedMessageConfig_inputbroker_pin_b_tag 3 -#define ModuleConfig_CannedMessageConfig_inputbroker_pin_press_tag 4 -#define ModuleConfig_CannedMessageConfig_inputbroker_event_cw_tag 5 -#define ModuleConfig_CannedMessageConfig_inputbroker_event_ccw_tag 6 -#define ModuleConfig_CannedMessageConfig_inputbroker_event_press_tag 7 -#define ModuleConfig_CannedMessageConfig_updown1_enabled_tag 8 -#define ModuleConfig_CannedMessageConfig_enabled_tag 9 -#define ModuleConfig_CannedMessageConfig_allow_input_source_tag 10 -#define ModuleConfig_CannedMessageConfig_send_bell_tag 11 +#define ModuleConfig_SerialConfig_enabled_tag 1 +#define ModuleConfig_SerialConfig_echo_tag 2 +#define ModuleConfig_SerialConfig_rxd_tag 3 +#define ModuleConfig_SerialConfig_txd_tag 4 +#define ModuleConfig_SerialConfig_baud_tag 5 +#define ModuleConfig_SerialConfig_timeout_tag 6 +#define ModuleConfig_SerialConfig_mode_tag 7 #define ModuleConfig_ExternalNotificationConfig_enabled_tag 1 #define ModuleConfig_ExternalNotificationConfig_output_ms_tag 2 #define ModuleConfig_ExternalNotificationConfig_output_tag 3 @@ -242,32 +362,30 @@ extern "C" { #define ModuleConfig_ExternalNotificationConfig_alert_bell_vibra_tag 12 #define ModuleConfig_ExternalNotificationConfig_alert_bell_buzzer_tag 13 #define ModuleConfig_ExternalNotificationConfig_nag_timeout_tag 14 -#define ModuleConfig_MQTTConfig_enabled_tag 1 -#define ModuleConfig_MQTTConfig_address_tag 2 -#define ModuleConfig_MQTTConfig_username_tag 3 -#define ModuleConfig_MQTTConfig_password_tag 4 -#define ModuleConfig_MQTTConfig_encryption_enabled_tag 5 -#define ModuleConfig_MQTTConfig_json_enabled_tag 6 -#define ModuleConfig_RangeTestConfig_enabled_tag 1 -#define ModuleConfig_RangeTestConfig_sender_tag 2 -#define ModuleConfig_RangeTestConfig_save_tag 3 -#define ModuleConfig_SerialConfig_enabled_tag 1 -#define ModuleConfig_SerialConfig_echo_tag 2 -#define ModuleConfig_SerialConfig_rxd_tag 3 -#define ModuleConfig_SerialConfig_txd_tag 4 -#define ModuleConfig_SerialConfig_baud_tag 5 -#define ModuleConfig_SerialConfig_timeout_tag 6 -#define ModuleConfig_SerialConfig_mode_tag 7 #define ModuleConfig_StoreForwardConfig_enabled_tag 1 #define ModuleConfig_StoreForwardConfig_heartbeat_tag 2 #define ModuleConfig_StoreForwardConfig_records_tag 3 #define ModuleConfig_StoreForwardConfig_history_return_max_tag 4 #define ModuleConfig_StoreForwardConfig_history_return_window_tag 5 +#define ModuleConfig_RangeTestConfig_enabled_tag 1 +#define ModuleConfig_RangeTestConfig_sender_tag 2 +#define ModuleConfig_RangeTestConfig_save_tag 3 #define ModuleConfig_TelemetryConfig_device_update_interval_tag 1 #define ModuleConfig_TelemetryConfig_environment_update_interval_tag 2 #define ModuleConfig_TelemetryConfig_environment_measurement_enabled_tag 3 #define ModuleConfig_TelemetryConfig_environment_screen_enabled_tag 4 #define ModuleConfig_TelemetryConfig_environment_display_fahrenheit_tag 5 +#define ModuleConfig_CannedMessageConfig_rotary1_enabled_tag 1 +#define ModuleConfig_CannedMessageConfig_inputbroker_pin_a_tag 2 +#define ModuleConfig_CannedMessageConfig_inputbroker_pin_b_tag 3 +#define ModuleConfig_CannedMessageConfig_inputbroker_pin_press_tag 4 +#define ModuleConfig_CannedMessageConfig_inputbroker_event_cw_tag 5 +#define ModuleConfig_CannedMessageConfig_inputbroker_event_ccw_tag 6 +#define ModuleConfig_CannedMessageConfig_inputbroker_event_press_tag 7 +#define ModuleConfig_CannedMessageConfig_updown1_enabled_tag 8 +#define ModuleConfig_CannedMessageConfig_enabled_tag 9 +#define ModuleConfig_CannedMessageConfig_allow_input_source_tag 10 +#define ModuleConfig_CannedMessageConfig_send_bell_tag 11 #define ModuleConfig_mqtt_tag 1 #define ModuleConfig_serial_tag 2 #define ModuleConfig_external_notification_tag 3 diff --git a/src/mesh/generated/mqtt.pb.c b/src/mesh/generated/mqtt.pb.c index 4fd6c6812..9c2a7eb63 100644 --- a/src/mesh/generated/mqtt.pb.c +++ b/src/mesh/generated/mqtt.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "mqtt.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/mqtt.pb.h b/src/mesh/generated/mqtt.pb.h index 789d38865..36de161cc 100644 --- a/src/mesh/generated/mqtt.pb.h +++ b/src/mesh/generated/mqtt.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_MQTT_PB_H_INCLUDED #define PB_MQTT_PB_H_INCLUDED @@ -12,7 +12,7 @@ /* Struct definitions */ /* This message wraps a MeshPacket with extra metadata about the sender and how it arrived. */ -typedef struct _ServiceEnvelope { +typedef struct _ServiceEnvelope { /* The (probably encrypted) packet */ struct _MeshPacket *packet; /* The global channel ID it was sent on */ diff --git a/src/mesh/generated/portnums.pb.c b/src/mesh/generated/portnums.pb.c index c8ef38c58..4e674aac5 100644 --- a/src/mesh/generated/portnums.pb.c +++ b/src/mesh/generated/portnums.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "portnums.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/portnums.pb.h b/src/mesh/generated/portnums.pb.h index 74805ed10..9e6a0b5b4 100644 --- a/src/mesh/generated/portnums.pb.h +++ b/src/mesh/generated/portnums.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_PORTNUMS_PB_H_INCLUDED #define PB_PORTNUMS_PB_H_INCLUDED @@ -22,89 +22,89 @@ Note: This was formerly a Type enum named 'typ' with the same id # We have change to this 'portnum' based scheme for specifying app handlers for particular payloads. This change is backwards compatible by treating the legacy OPAQUE/CLEAR_TEXT values identically. */ -typedef enum _PortNum { +typedef enum _PortNum { /* Deprecated: do not use in new code (formerly called OPAQUE) A message sent from a device outside of the mesh, in a form the mesh does not understand NOTE: This must be 0, because it is documented in IMeshService.aidl to be so */ - PortNum_UNKNOWN_APP = 0, + PortNum_UNKNOWN_APP = 0, /* A simple UTF-8 text message, which even the little micros in the mesh can understand and show on their screen eventually in some circumstances even signal might send messages in this form (see below) */ - PortNum_TEXT_MESSAGE_APP = 1, + PortNum_TEXT_MESSAGE_APP = 1, /* Reserved for built-in GPIO/example app. See remote_hardware.proto/HardwareMessage for details on the message sent/received to this port number */ - PortNum_REMOTE_HARDWARE_APP = 2, + PortNum_REMOTE_HARDWARE_APP = 2, /* The built-in position messaging app. Payload is a [Position](/docs/developers/protobufs/api#position) message */ - PortNum_POSITION_APP = 3, + PortNum_POSITION_APP = 3, /* The built-in user info app. Payload is a [User](/docs/developers/protobufs/api#user) message */ - PortNum_NODEINFO_APP = 4, + PortNum_NODEINFO_APP = 4, /* Protocol control packets for mesh protocol use. Payload is a [Routing](/docs/developers/protobufs/api#routing) message */ - PortNum_ROUTING_APP = 5, + PortNum_ROUTING_APP = 5, /* Admin control packets. Payload is a [AdminMessage](/docs/developers/protobufs/api#adminmessage) message */ - PortNum_ADMIN_APP = 6, + PortNum_ADMIN_APP = 6, /* Compressed TEXT_MESSAGE payloads. */ - PortNum_TEXT_MESSAGE_COMPRESSED_APP = 7, + PortNum_TEXT_MESSAGE_COMPRESSED_APP = 7, /* Waypoint payloads. Payload is a [Waypoint](/docs/developers/protobufs/api#waypoint) message */ - PortNum_WAYPOINT_APP = 8, + PortNum_WAYPOINT_APP = 8, /* Audio Payloads. Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now */ - PortNum_AUDIO_APP = 9, + PortNum_AUDIO_APP = 9, /* Provides a 'ping' service that replies to any packet it receives. Also serves as a small example module. */ - PortNum_REPLY_APP = 32, + PortNum_REPLY_APP = 32, /* Used for the python IP tunnel feature */ - PortNum_IP_TUNNEL_APP = 33, + PortNum_IP_TUNNEL_APP = 33, /* Provides a hardware serial interface to send and receive from the Meshtastic network. Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic network is forwarded to the RX pin while sending a packet to TX will go out to the Mesh network. Maximum packet size of 240 bytes. Module is disabled by default can be turned on by setting SERIAL_MODULE_ENABLED = 1 in SerialPlugh.cpp. */ - PortNum_SERIAL_APP = 64, + PortNum_SERIAL_APP = 64, /* STORE_FORWARD_APP (Work in Progress) Maintained by Jm Casler (MC Hamster) : jm@casler.org */ - PortNum_STORE_FORWARD_APP = 65, + PortNum_STORE_FORWARD_APP = 65, /* Optional port for messages for the range test module. */ - PortNum_RANGE_TEST_APP = 66, + PortNum_RANGE_TEST_APP = 66, /* Provides a format to send and receive telemetry data from the Meshtastic network. Maintained by Charles Crossan (crossan007) : crossan007@gmail.com */ - PortNum_TELEMETRY_APP = 67, + PortNum_TELEMETRY_APP = 67, /* Experimental tools for estimating node position without a GPS Maintained by Github user a-f-G-U-C (a Meshtastic contributor) Project files at https://github.com/a-f-G-U-C/Meshtastic-ZPS */ - PortNum_ZPS_APP = 68, + PortNum_ZPS_APP = 68, /* Used to let multiple instances of Linux native applications communicate as if they did using their LoRa chip. Maintained by GitHub user GUVWAF. Project files at https://github.com/GUVWAF/Meshtasticator */ - PortNum_SIMULATOR_APP = 69, + PortNum_SIMULATOR_APP = 69, /* Provides a traceroute functionality to show the route a packet towards a certain destination would take on the mesh. */ - PortNum_TRACEROUTE_APP = 70, + PortNum_TRACEROUTE_APP = 70, /* Private applications should use portnums >= 256. To simplify initial development and testing you can use "PRIVATE_APP" in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh)) */ - PortNum_PRIVATE_APP = 256, + PortNum_PRIVATE_APP = 256, /* ATAK Forwarder Module https://github.com/paulmandal/atak-forwarder */ - PortNum_ATAK_FORWARDER = 257, + PortNum_ATAK_FORWARDER = 257, /* Currently we limit port nums to no higher than this value */ - PortNum_MAX = 511 + PortNum_MAX = 511 } PortNum; +#ifdef __cplusplus +extern "C" { +#endif + /* Helper constants for enums */ #define _PortNum_MIN PortNum_UNKNOWN_APP #define _PortNum_MAX PortNum_MAX #define _PortNum_ARRAYSIZE ((PortNum)(PortNum_MAX+1)) -#ifdef __cplusplus -extern "C" { -#endif - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/src/mesh/generated/remote_hardware.pb.c b/src/mesh/generated/remote_hardware.pb.c index 9168bd71f..de6c4dc4b 100644 --- a/src/mesh/generated/remote_hardware.pb.c +++ b/src/mesh/generated/remote_hardware.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "remote_hardware.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/remote_hardware.pb.h b/src/mesh/generated/remote_hardware.pb.h index d923c1189..6c09809c5 100644 --- a/src/mesh/generated/remote_hardware.pb.h +++ b/src/mesh/generated/remote_hardware.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_REMOTE_HARDWARE_PB_H_INCLUDED #define PB_REMOTE_HARDWARE_PB_H_INCLUDED @@ -10,13 +10,22 @@ #endif /* Enum definitions */ -typedef enum _HardwareMessage_Type { - HardwareMessage_Type_UNSET = 0, - HardwareMessage_Type_WRITE_GPIOS = 1, - HardwareMessage_Type_WATCH_GPIOS = 2, - HardwareMessage_Type_GPIOS_CHANGED = 3, - HardwareMessage_Type_READ_GPIOS = 4, - HardwareMessage_Type_READ_GPIOS_REPLY = 5 +/* TODO: REPLACE */ +typedef enum _HardwareMessage_Type { + /* Unset/unused */ + HardwareMessage_Type_UNSET = 0, + /* Set gpio gpios based on gpio_mask/gpio_value */ + HardwareMessage_Type_WRITE_GPIOS = 1, + /* We are now interested in watching the gpio_mask gpios. + If the selected gpios change, please broadcast GPIOS_CHANGED. + Will implicitly change the gpios requested to be INPUT gpios. */ + HardwareMessage_Type_WATCH_GPIOS = 2, + /* The gpios listed in gpio_mask have changed, the new values are listed in gpio_value */ + HardwareMessage_Type_GPIOS_CHANGED = 3, + /* Read the gpios specified in gpio_mask, send back a READ_GPIOS_REPLY reply with gpio_value populated */ + HardwareMessage_Type_READ_GPIOS = 4, + /* A reply to READ_GPIOS. gpio_mask and gpio_value will be populated */ + HardwareMessage_Type_READ_GPIOS_REPLY = 5 } HardwareMessage_Type; /* Struct definitions */ @@ -29,7 +38,7 @@ typedef enum _HardwareMessage_Type { because no security yet (beyond the channel mechanism). It should be off by default and then protected based on some TBD mechanism (a special channel once multichannel support is included?) */ -typedef struct _HardwareMessage { +typedef struct _HardwareMessage { /* What type of HardwareMessage is this? */ HardwareMessage_Type type; /* What gpios are we changing. Not used for all MessageTypes, see MessageType for details */ @@ -40,15 +49,17 @@ typedef struct _HardwareMessage { } HardwareMessage; +#ifdef __cplusplus +extern "C" { +#endif + /* Helper constants for enums */ #define _HardwareMessage_Type_MIN HardwareMessage_Type_UNSET #define _HardwareMessage_Type_MAX HardwareMessage_Type_READ_GPIOS_REPLY #define _HardwareMessage_Type_ARRAYSIZE ((HardwareMessage_Type)(HardwareMessage_Type_READ_GPIOS_REPLY+1)) +#define HardwareMessage_type_ENUMTYPE HardwareMessage_Type -#ifdef __cplusplus -extern "C" { -#endif /* Initializer values for message structs */ #define HardwareMessage_init_default {_HardwareMessage_Type_MIN, 0, 0} diff --git a/src/mesh/generated/storeforward.pb.h b/src/mesh/generated/storeforward.pb.h index 3f21114ff..625fb273c 100644 --- a/src/mesh/generated/storeforward.pb.h +++ b/src/mesh/generated/storeforward.pb.h @@ -10,8 +10,8 @@ #endif /* Enum definitions */ -/* 001 - 063 = From Router - 064 - 127 = From Client */ +/* 1 - 99 = From Router + 101 - 199 = From Client */ typedef enum _StoreAndForward_RequestResponse { /* Unset/unused */ StoreAndForward_RequestResponse_UNSET = 0, @@ -29,16 +29,16 @@ typedef enum _StoreAndForward_RequestResponse { /* Router is responding to a request for history. */ StoreAndForward_RequestResponse_ROUTER_HISTORY = 6, /* Client is an in error state. */ - StoreAndForward_RequestResponse_CLIENT_ERROR = 64, + StoreAndForward_RequestResponse_CLIENT_ERROR = 101, /* Client has requested a replay from the router. */ - StoreAndForward_RequestResponse_CLIENT_HISTORY = 65, + StoreAndForward_RequestResponse_CLIENT_HISTORY = 102, /* Client has requested stats from the router. */ - StoreAndForward_RequestResponse_CLIENT_STATS = 66, + StoreAndForward_RequestResponse_CLIENT_STATS = 103, /* Client has requested the router respond. This can work as a "are you there" message. */ - StoreAndForward_RequestResponse_CLIENT_PING = 67, + StoreAndForward_RequestResponse_CLIENT_PING = 104, /* The response to a "Ping" */ - StoreAndForward_RequestResponse_CLIENT_PONG = 68, + StoreAndForward_RequestResponse_CLIENT_PONG = 105, /* Client has requested that the router abort processing the client's request */ StoreAndForward_RequestResponse_CLIENT_ABORT = 106 } StoreAndForward_RequestResponse; @@ -88,17 +88,15 @@ typedef struct _StoreAndForward_Heartbeat { typedef struct _StoreAndForward { /* TODO: REPLACE */ StoreAndForward_RequestResponse rr; - pb_size_t which_variant; - union { - /* TODO: REPLACE */ - StoreAndForward_Statistics stats; - /* TODO: REPLACE */ - StoreAndForward_History history; - /* TODO: REPLACE */ - StoreAndForward_Heartbeat heartbeat; - /* Empty Payload */ - bool empty; - } variant; + /* TODO: REPLACE */ + bool has_stats; + StoreAndForward_Statistics stats; + /* TODO: REPLACE */ + bool has_history; + StoreAndForward_History history; + /* TODO: REPLACE */ + bool has_heartbeat; + StoreAndForward_Heartbeat heartbeat; } StoreAndForward; @@ -118,11 +116,11 @@ extern "C" { /* Initializer values for message structs */ -#define StoreAndForward_init_default {_StoreAndForward_RequestResponse_MIN, 0, {StoreAndForward_Statistics_init_default}} +#define StoreAndForward_init_default {_StoreAndForward_RequestResponse_MIN, false, StoreAndForward_Statistics_init_default, false, StoreAndForward_History_init_default, false, StoreAndForward_Heartbeat_init_default} #define StoreAndForward_Statistics_init_default {0, 0, 0, 0, 0, 0, 0, 0, 0} #define StoreAndForward_History_init_default {0, 0, 0} #define StoreAndForward_Heartbeat_init_default {0, 0} -#define StoreAndForward_init_zero {_StoreAndForward_RequestResponse_MIN, 0, {StoreAndForward_Statistics_init_zero}} +#define StoreAndForward_init_zero {_StoreAndForward_RequestResponse_MIN, false, StoreAndForward_Statistics_init_zero, false, StoreAndForward_History_init_zero, false, StoreAndForward_Heartbeat_init_zero} #define StoreAndForward_Statistics_init_zero {0, 0, 0, 0, 0, 0, 0, 0, 0} #define StoreAndForward_History_init_zero {0, 0, 0} #define StoreAndForward_Heartbeat_init_zero {0, 0} @@ -146,20 +144,18 @@ extern "C" { #define StoreAndForward_stats_tag 2 #define StoreAndForward_history_tag 3 #define StoreAndForward_heartbeat_tag 4 -#define StoreAndForward_empty_tag 5 /* Struct field encoding specification for nanopb */ #define StoreAndForward_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UENUM, rr, 1) \ -X(a, STATIC, ONEOF, MESSAGE, (variant,stats,variant.stats), 2) \ -X(a, STATIC, ONEOF, MESSAGE, (variant,history,variant.history), 3) \ -X(a, STATIC, ONEOF, MESSAGE, (variant,heartbeat,variant.heartbeat), 4) \ -X(a, STATIC, ONEOF, BOOL, (variant,empty,variant.empty), 5) +X(a, STATIC, OPTIONAL, MESSAGE, stats, 2) \ +X(a, STATIC, OPTIONAL, MESSAGE, history, 3) \ +X(a, STATIC, OPTIONAL, MESSAGE, heartbeat, 4) #define StoreAndForward_CALLBACK NULL #define StoreAndForward_DEFAULT NULL -#define StoreAndForward_variant_stats_MSGTYPE StoreAndForward_Statistics -#define StoreAndForward_variant_history_MSGTYPE StoreAndForward_History -#define StoreAndForward_variant_heartbeat_MSGTYPE StoreAndForward_Heartbeat +#define StoreAndForward_stats_MSGTYPE StoreAndForward_Statistics +#define StoreAndForward_history_MSGTYPE StoreAndForward_History +#define StoreAndForward_heartbeat_MSGTYPE StoreAndForward_Heartbeat #define StoreAndForward_Statistics_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UINT32, messages_total, 1) \ @@ -202,7 +198,7 @@ extern const pb_msgdesc_t StoreAndForward_Heartbeat_msg; #define StoreAndForward_Heartbeat_size 12 #define StoreAndForward_History_size 18 #define StoreAndForward_Statistics_size 50 -#define StoreAndForward_size 54 +#define StoreAndForward_size 88 #ifdef __cplusplus } /* extern "C" */ diff --git a/src/mesh/generated/telemetry.pb.c b/src/mesh/generated/telemetry.pb.c index a68af6e14..50202f4d6 100644 --- a/src/mesh/generated/telemetry.pb.c +++ b/src/mesh/generated/telemetry.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #include "telemetry.pb.h" #if PB_PROTO_HEADER_VERSION != 40 diff --git a/src/mesh/generated/telemetry.pb.h b/src/mesh/generated/telemetry.pb.h index 16e69f442..df5458a1c 100644 --- a/src/mesh/generated/telemetry.pb.h +++ b/src/mesh/generated/telemetry.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.4.6 */ +/* Generated by nanopb-0.4.7 */ #ifndef PB_TELEMETRY_PB_H_INCLUDED #define PB_TELEMETRY_PB_H_INCLUDED @@ -11,36 +11,36 @@ /* Enum definitions */ /* TODO: REPLACE */ -typedef enum _TelemetrySensorType { +typedef enum _TelemetrySensorType { /* No external telemetry sensor explicitly set */ - TelemetrySensorType_SENSOR_UNSET = 0, + TelemetrySensorType_SENSOR_UNSET = 0, /* High accuracy temperature, pressure, humidity */ - TelemetrySensorType_BME280 = 1, + TelemetrySensorType_BME280 = 1, /* High accuracy temperature, pressure, humidity, and air resistance */ - TelemetrySensorType_BME680 = 2, + TelemetrySensorType_BME680 = 2, /* Very high accuracy temperature */ - TelemetrySensorType_MCP9808 = 3, + TelemetrySensorType_MCP9808 = 3, /* Moderate accuracy current and voltage */ - TelemetrySensorType_INA260 = 4, + TelemetrySensorType_INA260 = 4, /* Moderate accuracy current and voltage */ - TelemetrySensorType_INA219 = 5, + TelemetrySensorType_INA219 = 5, /* High accuracy temperature and pressure */ - TelemetrySensorType_BMP280 = 6, + TelemetrySensorType_BMP280 = 6, /* High accuracy temperature and humidity */ - TelemetrySensorType_SHTC3 = 7, + TelemetrySensorType_SHTC3 = 7, /* High accuracy pressure */ - TelemetrySensorType_LPS22 = 8, + TelemetrySensorType_LPS22 = 8, /* 3-Axis magnetic sensor */ - TelemetrySensorType_QMC6310 = 9, + TelemetrySensorType_QMC6310 = 9, /* 6-Axis inertial measurement sensor */ - TelemetrySensorType_QMI8658 = 10, + TelemetrySensorType_QMI8658 = 10, /* 3-Axis magnetic sensor */ - TelemetrySensorType_QMC5883L = 11 + TelemetrySensorType_QMC5883L = 11 } TelemetrySensorType; /* Struct definitions */ /* Key native device metrics such as battery level */ -typedef struct _DeviceMetrics { +typedef struct _DeviceMetrics { /* 1-100 (0 means powered) */ uint32_t battery_level; /* Voltage measured */ @@ -52,7 +52,7 @@ typedef struct _DeviceMetrics { } DeviceMetrics; /* Weather station or other environmental metrics */ -typedef struct _EnvironmentMetrics { +typedef struct _EnvironmentMetrics { /* Temperature measured */ float temperature; /* Relative humidity percent measured */ @@ -68,11 +68,11 @@ typedef struct _EnvironmentMetrics { } EnvironmentMetrics; /* Types of Measurements the telemetry module is equipped to handle */ -typedef struct _Telemetry { - /* This is usually not sent over the mesh (to save space), but it is sent - from the phone so that the local device can set its RTC If it is sent over - the mesh (because there are devices on the mesh without GPS), it will only - be sent by devices which has a hardware GPS clock (IE Mobile Phone). +typedef struct _Telemetry { + /* This is usually not sent over the mesh (to save space), but it is sent + from the phone so that the local device can set its RTC If it is sent over + the mesh (because there are devices on the mesh without GPS), it will only + be sent by devices which has a hardware GPS clock (IE Mobile Phone). seconds since 1970 */ uint32_t time; pb_size_t which_variant; @@ -85,15 +85,18 @@ typedef struct _Telemetry { } Telemetry; +#ifdef __cplusplus +extern "C" { +#endif + /* Helper constants for enums */ #define _TelemetrySensorType_MIN TelemetrySensorType_SENSOR_UNSET #define _TelemetrySensorType_MAX TelemetrySensorType_QMC5883L #define _TelemetrySensorType_ARRAYSIZE ((TelemetrySensorType)(TelemetrySensorType_QMC5883L+1)) -#ifdef __cplusplus -extern "C" { -#endif + + /* Initializer values for message structs */ #define DeviceMetrics_init_default {0, 0, 0, 0}