syntax = "proto3"; /* * Meshtastic protobufs * * For more information on protobufs (and tools to use them with the language of your choice) see * https://developers.google.com/protocol-buffers/docs/proto3 * * We are not placing any of these defs inside a package, because if you do the * resulting nanopb version is super verbose package mesh. * * Protobuf build instructions: * * To build java classes for reading writing: * protoc -I=. --java_out /tmp mesh.proto * * To generate Nanopb c code: * /home/kevinh/packages/nanopb-0.4.0-linux-x86/generator-bin/protoc --nanopb_out=/tmp -I=app/src/main/proto mesh.proto * * Nanopb binaries available here: https://jpa.kapsi.fi/nanopb/download/ use nanopb 0.4.0 */ option java_package = "com.geeksville.mesh"; option java_outer_classname = "RadioConfigProtos"; option optimize_for = LITE_RUNTIME; option go_package = "github.com/meshtastic/gomeshproto"; /* * The frequency/regulatory region the user has selected. * * Note: In 1.0 builds (which must still be supported by the android app for a * long time) this field will be unpopulated. * * If firmware is ever upgraded from an old 1.0ish build, the old * MyNodeInfo.region string will be used to set UserPreferences.region and the * old value will be no longer set. */ enum RegionCode { /* * TODO: REPLACE */ Unset = 0; /* * TODO: REPLACE */ US = 1; /* * TODO: REPLACE */ EU433 = 2; /* * TODO: REPLACE */ EU868 = 3; /* * TODO: REPLACE */ CN = 4; /* * TODO: REPLACE */ JP = 5; /* * TODO: REPLACE */ ANZ = 6; /* * TODO: REPLACE */ KR = 7; /* * TODO: REPLACE */ TW = 8; /* * TODO: REPLACE */ RU = 9; /* * TODO: REPLACE */ IN = 10; /* * TODO: REPLACE */ NZ865 = 11; /* * TODO: REPLACE */ TH = 12; } /* * Defines the device's role on the Mesh network * unset * Behave normally. * * Router * Functions as a router */ enum Role { /* * Default device role */ Default = 0; /* * Router device role */ Router = 1; } /* * Sets the charge control current of devices with a battery charger that can be * configured. This is passed into the axp power management chip like on the tbeam. */ enum ChargeCurrent { /* * TODO: REPLACE */ MAUnset = 0; /* * TODO: REPLACE */ MA100 = 1; /* * TODO: REPLACE */ MA190 = 2; /* * TODO: REPLACE */ MA280 = 3; /* * TODO: REPLACE */ MA360 = 4; /* * TODO: REPLACE */ MA450 = 5; /* * TODO: REPLACE */ MA550 = 6; /* * TODO: REPLACE */ MA630 = 7; /* * TODO: REPLACE */ MA700 = 8; /* * TODO: REPLACE */ MA780 = 9; /* * TODO: REPLACE */ MA880 = 10; /* * TODO: REPLACE */ MA960 = 11; /* * TODO: REPLACE */ MA1000 = 12; /* * TODO: REPLACE */ MA1080 = 13; /* * TODO: REPLACE */ MA1160 = 14; /* * TODO: REPLACE */ MA1240 = 15; /* * TODO: REPLACE */ MA1320 = 16; } /* * How the GPS coordinates are displayed on the OLED screen. */ enum GpsCoordinateFormat { /* * GPS coordinates are displayed in the normal decimal degrees format: * DD.DDDDDD DDD.DDDDDD */ GpsFormatDec = 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 */ GpsFormatDMS = 1; /* * GPS coordinates are displayed in Universal Transverse Mercator format: * ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing */ GpsFormatUTM = 2; /* * GPS coordinates are displayed in 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 */ GpsFormatMGRS = 3; /* * GPS coordinates are displayed in Open Location Code (aka Plus Codes). */ GpsFormatOLC = 4; /* * GPS coordinates are displayed in 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 */ GpsFormatOSGR = 5; } /* * 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 */ enum PositionFlags { /* * Required for compilation */ POS_UNDEFINED = 0x0000; /* * Include an altitude value (if available) */ POS_ALTITUDE = 0x0001; /* * Altitude value is MSL */ POS_ALT_MSL = 0x0002; /* * Include geoidal separation */ POS_GEO_SEP = 0x0004; /* * Include the DOP value ; PDOP used by default, see below */ POS_DOP = 0x0008; /* * If POS_DOP set, send separate HDOP / VDOP values instead of PDOP */ POS_HVDOP = 0x0010; /* * Include battery level */ POS_BATTERY = 0x0020; /* * Include number of "satellites in view" */ POS_SATINVIEW = 0x0040; /* * Include a sequence number incremented per packet */ POS_SEQ_NOS = 0x0080; /* * Include positional timestamp (from GPS solution) */ POS_TIMESTAMP = 0x0100; } /* * TODO: REPLACE */ enum InputEventChar { /* * TODO: REPLACE */ KEY_NONE = 0; /* * TODO: REPLACE */ KEY_UP = 17; /* * TODO: REPLACE */ KEY_DOWN = 18; /* * TODO: REPLACE */ KEY_LEFT = 19; /* * TODO: REPLACE */ KEY_RIGHT = 20; /* * '\n' */ KEY_SELECT = 10; /* * TODO: REPLACE */ KEY_BACK = 27; /* * TODO: REPLACE */ KEY_CANCEL = 24; } /* * The entire set of user settable/readable settings for our radio device. * Includes both the current channel settings and any preferences the user has * set for behavior of their node */ message RadioConfig { /* * See [software design](/docs/software/other/sw-design) for more information on these preferences */ message UserPreferences { /* * We should send our position this often (but only if it has changed significantly) * Defaults to 15 minutes */ uint32 position_broadcast_secs = 1; /* * We should send our position this often (but only if it has changed significantly) */ bool position_broadcast_smart_disabled = 17; /* * Send our owner info at least this often (also we always send once at boot - to rejoin the mesh) */ uint32 send_owner_interval = 2; /* * If we miss this many owner messages from a node, we declare the node * offline (defaults to 3 - to allow for some lost packets) (FIXME not yet used) * * uint32 num_missed_to_fail = 3; TODO: REMOVE/INTEGRATE */ /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of 1 minute */ uint32 wait_bluetooth_secs = 4; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of one minute */ uint32 screen_on_secs = 5; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of 15 minutes * IMPORTANT NOTE FOR DEVICE CLIENTS: YOU MUST SEND SOME SORT OF PACKET TO THE PHONE AT LEAST THIS OFTEN OR THE DEVICE WILL DECIDE YOU ARE GONE! */ uint32 phone_timeout_secs = 6; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of two hours, MAXUINT for disabled */ uint32 phone_sds_timeout_sec = 7; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of two hours, MAXUINT for disabled */ uint32 mesh_sds_timeout_secs = 8; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of one year */ uint32 sds_secs = 9; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of 3600 */ uint32 ls_secs = 10; /* * Power management state machine option. * See [power management](/docs/software/other/power) for details. * 0 for default of 10 seconds */ uint32 min_wake_secs = 11; /* * If set, this node will try to join the specified wifi network and * acquire an address via DHCP */ string wifi_ssid = 12; /* * If set, will be use to authenticate to the named wifi */ string wifi_password = 13; /* * If set, the node will operate as an AP (and DHCP server), otherwise it * will be a station */ bool wifi_ap_mode = 14; /* * The region code for my radio (US, CN, EU433, etc...) */ RegionCode region = 15; /* * Sets the current of the battery charger */ ChargeCurrent charge_current = 16; /* * Sets the role of node */ Role role = 18; /* * 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). */ bool is_low_power = 38; /* * 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 = 39; /* * If set, this will disable the SerialConsole by not initilizing the StreamAPI */ bool serial_disabled = 40; /* * Should we disbale location sharing with other nodes (or the local phone) */ bool location_share_disabled = 32; /* * Should the GPS be disabled for this node? */ bool gps_disabled = 33; /* * 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 gps_update_interval = 34; /* * 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 gps_attempt_time = 36; /* * Shall we accept 2D GPS fixes? By default, only 3D fixes are accepted * (during a 2D fix, altitude values are unreliable and will be excluded) */ bool gps_accept_2d = 45; /* * GPS maximum DOP accepted (dilution of precision) * Set a rejection threshold for GPS readings based on their precision, * relative to the GPS rated accuracy (which is typically ~3m) * Solutions above this value will be treated as retryable errors! * Useful range is between 1 - 64 (3m - <~200m) * By default (if zero), accept all GPS readings */ uint32 gps_max_dop = 46; /* * This parameter is for advanced users with advanced test equipment, we do not recommend most users use it. * A frequency offset that is added to to the calculated band center frequency. * Used to correct for crystal calibration errors. */ float frequency_offset = 41; /* * The server to use for our MQTT global message gateway feature. * If not set, the default server will be used */ string mqtt_server = 42; /* * 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. * But if this flag is set, all MQTT features will be disabled and no servers will be contacted. */ bool mqtt_disabled = 43; /* * How the GPS coordinates are displayed on the OLED screen. */ GpsCoordinateFormat gps_format = 44; /* * This setting is never saved to disk, but if set, all device settings will be returned to factory defaults. * (Region, serial number etc... will be preserved) */ bool factory_reset = 100; /* * 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 = 101; /* * If true, radio should not try to be smart about what packets to queue to * the phone * bool keep_all_packets = 101; * If true, we will try to capture all the packets sent on the mesh, not just the ones destined to our node. * bool promiscuous_mode = 102; * For testing it is useful sometimes to force a node to never listen to * particular other nodes (simulating radio out of range). All nodenums listed * in ignore_incoming will have packets they send droped on receive (by router.cpp) */ repeated uint32 ignore_incoming = 103; /* * Preferences for the SerialModule * FIXME - Move this out of UserPreferences and into a section for module configuration. */ bool serial_module_enabled = 120; /* * TODO: REPLACE */ bool serial_module_echo = 121; /* * TODO: REPLACE */ uint32 serial_module_rxd = 122; /* * TODO: REPLACE */ uint32 serial_module_txd = 123; /* * TODO: REPLACE */ uint32 serial_module_baud = 176; /* * TODO: REPLACE */ uint32 serial_module_timeout = 124; /* * TODO: REPLACE */ uint32 serial_module_mode = 125; /* * Preferences for the ExternalNotificationModule * FIXME - Move this out of UserPreferences and into a section for module configuration. */ bool ext_notification_module_enabled = 126; /* * TODO: REPLACE */ uint32 ext_notification_module_output_ms = 127; /* * TODO: REPLACE */ uint32 ext_notification_module_output = 128; /* * TODO: REPLACE */ bool ext_notification_module_active = 129; /* * TODO: REPLACE */ bool ext_notification_module_alert_message = 130; /* * TODO: REPLACE */ bool ext_notification_module_alert_bell = 131; /* * Preferences for the RangeTestModule * FIXME - Move this out of UserPreferences and into a section for module configuration. */ bool range_test_module_enabled = 132; /* * TODO: REPLACE */ uint32 range_test_module_sender = 133; /* * TODO: REPLACE */ bool range_test_module_save = 134; /* * Preferences for the StoreForwardModule *FIXME - Move this out of UserPreferences and into a section for module configuration. (was 136) */ bool store_forward_module_enabled = 148; /* * TODO: REPLACE */ bool store_forward_module_heartbeat = 149; /* * TODO: REPLACE */ uint32 store_forward_module_records = 137; /* * TODO: REPLACE */ uint32 store_forward_module_history_return_max = 138; /* * TODO: REPLACE */ uint32 store_forward_module_history_return_window = 139; /* * TODO: REPLACE */ reserved 136; /* * Preferences for the Teletry Module * FIXME - Move this out of UserPreferences and into a section for module configuration. * Enable/Disable the telemetry measurement module measurement collection */ bool telemetry_module_measurement_enabled = 140; /* * Enable/Disable the telemetry measurement module on-device display */ bool telemetry_module_screen_enabled = 141; /* * Sometimes sensor reads can fail. * If this happens, we will retry a configurable number of attempts, * each attempt will be delayed by the minimum required refresh rate for that sensor */ uint32 telemetry_module_read_error_count_threshold = 142; /* * Interval in seconds of how often we should try to send our * measurements to the mesh */ uint32 telemetry_module_update_interval = 143; /* * Sometimes we can end up with more than read_error_count_threshold failures. * In this case, we will stop trying to read from the sensor for a while. * Wait this long until trying to read from the sensor again */ uint32 telemetry_module_recovery_interval = 144; /* * We'll always read the sensor in Celsius, but sometimes we might want to * display the results in Fahrenheit as a "user preference". */ bool telemetry_module_display_fahrenheit = 145; /* * TODO: REPLACE */ enum TelemetrySensorType { /* * TODO: REPLACE */ DHT11 = 0; /* * TODO: REPLACE */ DS18B20 = 1; /* * TODO: REPLACE */ DHT12 = 2; /* * TODO: REPLACE */ DHT21 = 3; /* * TODO: REPLACE */ DHT22 = 4; /* * TODO: REPLACE */ BME280 = 5; /* * TODO: REPLACE */ BME680 = 6; /* * TODO: REPLACE */ MCP9808 = 7; /* * TODO: REPLACE */ SHTC3 = 8; }; /* * Specify the sensor type */ TelemetrySensorType telemetry_module_sensor_type = 146; /* * Specify the peferred GPIO Pin for sensor readings */ uint32 telemetry_module_sensor_pin = 147; /* * Bit field of boolean configuration options for POSITION messages * (bitwise OR of PositionFlags) */ uint32 position_flags = 150; /* * Circumvents the logic block for determining whether the device is powered or not. * Useful for devices with finicky ADC issues on the battery sense pins. */ bool is_always_powered = 151; /* * 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 auto_screen_carousel_secs = 152; /* * If non-zero, the device will fully power off this many seconds after external power is removed. * */ uint32 on_battery_shutdown_after_secs = 153; /* * Overrides HOPS_RELIABLE and sets the maximum number of hops. This can't be greater than 7. * */ uint32 hop_limit = 154; /* * 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 */ string mqtt_username = 155; /* * 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 */ string mqtt_password = 156; /* * Disable TX from the LoRa radio. Useful for hot-swapping antennas and other tests. * Defaults to false */ bool is_lora_tx_disabled = 157; /* * If set to true, enable power saving features of the esp32 */ bool is_power_saving = 158; /* * Enable the rotary encoder #1 */ bool rotary1_enabled = 160; /* * GPIO pin for rotary encoder A port. */ uint32 rotary1_pin_a = 161; /* * GPIO pin for rotary encoder B port. */ uint32 rotary1_pin_b = 162; /* * GPIO pin for rotary encoder Press port. */ uint32 rotary1_pin_press = 163; /* * Generate input event on CW of this kind. */ InputEventChar rotary1_event_cw = 164; /* * Generate input event on CCW of this kind. */ InputEventChar rotary1_event_ccw = 165; /* * Generate input event on Press of this kind. */ InputEventChar rotary1_event_press = 166; /* * Enable/disable CannedMessageModule. */ bool canned_message_module_enabled = 170; /* * Input event origin accepted by the canned message module. * Can be e.g. "rotEnc1" or keyword "_any" */ string canned_message_module_allow_input_source = 171; /* * CannedMessageModule also sends a bell character with the messages. * ExternalNotificationModule can benefit from this feature. */ bool canned_message_module_send_bell = 173; /* * Whether to send encrypted or decrypted packets to MQTT. * This parameter is only honoured if you also set mqtt_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 mqtt_encryption_enabled = 174; /* * 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. */ float adc_multiplier_override = 175; } /* * TODO: REPLACE */ UserPreferences preferences = 1; }