From 257620e992f1e34da9b2784d49bb7c4f25bded13 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Tue, 2 Mar 2021 15:25:29 +0800 Subject: [PATCH] update from master --- docs/meshtastic/apponly_pb2.html | 13 +- docs/meshtastic/deviceonly_pb2.html | 27 +- .../environmental_measurement_pb2.html | 193 ++++++ docs/meshtastic/index.html | 15 +- docs/meshtastic/mesh_pb2.html | 605 +++++++++++------- docs/meshtastic/portnums_pb2.html | 63 +- docs/meshtastic/remote_hardware_pb2.html | 32 +- meshtastic/mesh_pb2.py | 64 +- proto | 2 +- setup.py | 4 + 10 files changed, 699 insertions(+), 319 deletions(-) create mode 100644 docs/meshtastic/environmental_measurement_pb2.html diff --git a/docs/meshtastic/apponly_pb2.html b/docs/meshtastic/apponly_pb2.html index 5fd09c6..879f970 100644 --- a/docs/meshtastic/apponly_pb2.html +++ b/docs/meshtastic/apponly_pb2.html @@ -5,7 +5,7 @@ meshtastic.apponly_pb2 API documentation - + @@ -22,6 +22,7 @@

Module meshtastic.apponly_pb2

+

Generated protocol buffer code.

Expand source code @@ -29,7 +30,7 @@
# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: apponly.proto
-
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -47,6 +48,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   package='',
   syntax='proto3',
   serialized_options=b'\n\023com.geeksville.meshB\007AppOnlyH\003',
+  create_key=_descriptor._internal_create_key,
   serialized_pb=b'\n\rapponly.proto\x1a\nmesh.proto\"V\n\x0fServiceEnvelope\x12\x1b\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\tB \n\x13\x63om.geeksville.meshB\x07\x41ppOnlyH\x03\x62\x06proto3'
   ,
   dependencies=[mesh__pb2.DESCRIPTOR,])
@@ -60,6 +62,7 @@ _SERVICEENVELOPE = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='packet', full_name='ServiceEnvelope.packet', index=0,
@@ -67,21 +70,21 @@ _SERVICEENVELOPE = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='channel_id', full_name='ServiceEnvelope.channel_id', index=1,
       number=2, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='gateway_id', full_name='ServiceEnvelope.gateway_id', index=2,
       number=3, type=9, cpp_type=9, label=1,
       has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
diff --git a/docs/meshtastic/deviceonly_pb2.html b/docs/meshtastic/deviceonly_pb2.html
index c2118be..40933a4 100644
--- a/docs/meshtastic/deviceonly_pb2.html
+++ b/docs/meshtastic/deviceonly_pb2.html
@@ -5,7 +5,7 @@
 
 
 meshtastic.deviceonly_pb2 API documentation
-
+
 
 
 
@@ -22,6 +22,7 @@
 

Module meshtastic.deviceonly_pb2

+

Generated protocol buffer code.

Expand source code @@ -29,7 +30,7 @@
# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: deviceonly.proto
-
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -47,6 +48,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
   package='',
   syntax='proto3',
   serialized_options=b'\n\023com.geeksville.meshB\nDeviceOnlyH\003',
+  create_key=_descriptor._internal_create_key,
   serialized_pb=b'\n\x10\x64\x65viceonly.proto\x1a\nmesh.proto\"\xab\x02\n\x0b\x44\x65viceState\x12\x1b\n\x05radio\x18\x01 \x01(\x0b\x32\x0c.RadioConfig\x12\x1c\n\x07my_node\x18\x02 \x01(\x0b\x32\x0b.MyNodeInfo\x12\x14\n\x05owner\x18\x03 \x01(\x0b\x32\x05.User\x12\x1a\n\x07node_db\x18\x04 \x03(\x0b\x32\t.NodeInfo\x12\"\n\rreceive_queue\x18\x05 \x03(\x0b\x32\x0b.MeshPacket\x12\x0f\n\x07version\x18\x08 \x01(\r\x12$\n\x0frx_text_message\x18\x07 \x01(\x0b\x32\x0b.MeshPacket\x12\x0f\n\x07no_save\x18\t \x01(\x08\x12\x15\n\rdid_gps_reset\x18\x0b \x01(\x08\x12,\n\x12secondary_channels\x18\x0c \x03(\x0b\x32\x10.ChannelSettingsB#\n\x13\x63om.geeksville.meshB\nDeviceOnlyH\x03\x62\x06proto3'
   ,
   dependencies=[mesh__pb2.DESCRIPTOR,])
@@ -60,6 +62,7 @@ _DEVICESTATE = _descriptor.Descriptor(
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='radio', full_name='DeviceState.radio', index=0,
@@ -67,70 +70,70 @@ _DEVICESTATE = _descriptor.Descriptor(
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='my_node', full_name='DeviceState.my_node', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='owner', full_name='DeviceState.owner', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='node_db', full_name='DeviceState.node_db', index=3,
       number=4, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='receive_queue', full_name='DeviceState.receive_queue', index=4,
       number=5, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='version', full_name='DeviceState.version', index=5,
       number=8, type=13, cpp_type=3, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='rx_text_message', full_name='DeviceState.rx_text_message', index=6,
       number=7, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='no_save', full_name='DeviceState.no_save', index=7,
       number=9, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='did_gps_reset', full_name='DeviceState.did_gps_reset', index=8,
       number=11, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='secondary_channels', full_name='DeviceState.secondary_channels', index=9,
       number=12, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
diff --git a/docs/meshtastic/environmental_measurement_pb2.html b/docs/meshtastic/environmental_measurement_pb2.html
new file mode 100644
index 0000000..919316f
--- /dev/null
+++ b/docs/meshtastic/environmental_measurement_pb2.html
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+meshtastic.environmental_measurement_pb2 API documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Module meshtastic.environmental_measurement_pb2

+
+
+

Generated protocol buffer code.

+
+ +Expand source code + +
# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: environmental_measurement.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  name='environmental_measurement.proto',
+  package='',
+  syntax='proto3',
+  serialized_options=None,
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x1f\x65nvironmental_measurement.proto\"g\n\x18\x45nvironmentalMeasurement\x12\x13\n\x0btemperature\x18\x01 \x01(\x02\x12\x19\n\x11relative_humidity\x18\x02 \x01(\x02\x12\x1b\n\x13\x62\x61rometric_pressure\x18\x03 \x01(\x02\x62\x06proto3'
+)
+
+
+
+
+_ENVIRONMENTALMEASUREMENT = _descriptor.Descriptor(
+  name='EnvironmentalMeasurement',
+  full_name='EnvironmentalMeasurement',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='temperature', full_name='EnvironmentalMeasurement.temperature', index=0,
+      number=1, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='relative_humidity', full_name='EnvironmentalMeasurement.relative_humidity', index=1,
+      number=2, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='barometric_pressure', full_name='EnvironmentalMeasurement.barometric_pressure', index=2,
+      number=3, type=2, cpp_type=6, label=1,
+      has_default_value=False, default_value=float(0),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=35,
+  serialized_end=138,
+)
+
+DESCRIPTOR.message_types_by_name['EnvironmentalMeasurement'] = _ENVIRONMENTALMEASUREMENT
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+EnvironmentalMeasurement = _reflection.GeneratedProtocolMessageType('EnvironmentalMeasurement', (_message.Message,), {
+  'DESCRIPTOR' : _ENVIRONMENTALMEASUREMENT,
+  '__module__' : 'environmental_measurement_pb2'
+  # @@protoc_insertion_point(class_scope:EnvironmentalMeasurement)
+  })
+_sym_db.RegisterMessage(EnvironmentalMeasurement)
+
+
+# @@protoc_insertion_point(module_scope)
+
+
+
+
+
+
+
+
+
+

Classes

+
+
+class EnvironmentalMeasurement +(*args, **kwargs) +
+
+

A ProtocolMessage

+

Ancestors

+
    +
  • google.protobuf.pyext._message.CMessage
  • +
  • google.protobuf.message.Message
  • +
+

Class variables

+
+
var DESCRIPTOR
+
+
+
+
+

Instance variables

+
+
var barometric_pressure
+
+

Field EnvironmentalMeasurement.barometric_pressure

+
+
var relative_humidity
+
+

Field EnvironmentalMeasurement.relative_humidity

+
+
var temperature
+
+

Field EnvironmentalMeasurement.temperature

+
+
+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/docs/meshtastic/index.html b/docs/meshtastic/index.html index 8a8e58d..55c5cdd 100644 --- a/docs/meshtastic/index.html +++ b/docs/meshtastic/index.html @@ -874,7 +874,7 @@ class TCPInterface(StreamInterface):
meshtastic.apponly_pb2
-
+

Generated protocol buffer code.

meshtastic.ble
@@ -882,15 +882,19 @@ class TCPInterface(StreamInterface):
meshtastic.deviceonly_pb2
-
+

Generated protocol buffer code.

+
+
meshtastic.environmental_measurement_pb2
+
+

Generated protocol buffer code.

meshtastic.mesh_pb2
-
+

Generated protocol buffer code.

meshtastic.portnums_pb2
-
+

Generated protocol buffer code.

meshtastic.remote_hardware
@@ -898,7 +902,7 @@ class TCPInterface(StreamInterface):
meshtastic.remote_hardware_pb2
-
+

Generated protocol buffer code.

meshtastic.test
@@ -2222,6 +2226,7 @@ hostname {string} – Hostname/IP address of the device to connect to

meshtastic.apponly_pb2
  • meshtastic.ble
  • meshtastic.deviceonly_pb2
  • +
  • meshtastic.environmental_measurement_pb2
  • meshtastic.mesh_pb2
  • meshtastic.portnums_pb2
  • meshtastic.remote_hardware
  • diff --git a/docs/meshtastic/mesh_pb2.html b/docs/meshtastic/mesh_pb2.html index 9795504..667721c 100644 --- a/docs/meshtastic/mesh_pb2.html +++ b/docs/meshtastic/mesh_pb2.html @@ -5,7 +5,7 @@ meshtastic.mesh_pb2 API documentation - + @@ -22,6 +22,7 @@

    Module meshtastic.mesh_pb2

    +

    Generated protocol buffer code.

    Expand source code @@ -29,7 +30,7 @@
    # -*- coding: utf-8 -*-
     # Generated by the protocol buffer compiler.  DO NOT EDIT!
     # source: mesh.proto
    -
    +"""Generated protocol buffer code."""
     from google.protobuf.internal import enum_type_wrapper
     from google.protobuf import descriptor as _descriptor
     from google.protobuf import message as _message
    @@ -48,7 +49,8 @@ DESCRIPTOR = _descriptor.FileDescriptor(
       package='',
       syntax='proto3',
       serialized_options=b'\n\023com.geeksville.meshB\nMeshProtosH\003',
    -  serialized_pb=b'\n\nmesh.proto\x1a\x0eportnums.proto\"j\n\x08Position\x12\x12\n\nlatitude_i\x18\x07 \x01(\x11\x12\x13\n\x0blongitude_i\x18\x08 \x01(\x11\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07\"2\n\x04\x44\x61ta\x12\x19\n\x07portnum\x18\x01 \x01(\x0e\x32\x08.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x05\"\xeb\x02\n\tSubPacket\x12\x15\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x05.DataH\x00\x12(\n\rroute_request\x18\x06 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0broute_reply\x18\x07 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12$\n\x0c\x65rror_reason\x18\r \x01(\x0e\x32\x0c.ErrorReasonH\x00\x12!\n\x08position\x18\x01 \x01(\x0b\x32\t.PositionB\x02\x18\x01H\x00\x12\x19\n\x04user\x18\x04 \x01(\x0b\x32\x05.UserB\x02\x18\x01H\x00\x12\x15\n\rwant_response\x18\x05 \x01(\x08\x12\x14\n\nsuccess_id\x18\n \x01(\rH\x01\x12\x11\n\x07\x66\x61il_id\x18\x0b \x01(\rH\x01\x12\x0c\n\x04\x64\x65st\x18\t \x01(\r\x12\x0e\n\x06source\x18\x0c \x01(\r\x12\x13\n\x0boriginal_id\x18\x02 \x01(\rB\x10\n\x0epayloadVariantB\x0c\n\nackVariant\"\xda\x02\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\r\x12\n\n\x02to\x18\x02 \x01(\r\x12\x15\n\rchannel_index\x18\x04 \x01(\r\x12\x1d\n\x07\x64\x65\x63oded\x18\x03 \x01(\x0b\x32\n.SubPacketH\x00\x12\x13\n\tencrypted\x18\x08 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\r\x12\x0f\n\x07rx_time\x18\t \x01(\x07\x12\x0e\n\x06rx_snr\x18\x07 \x01(\x02\x12\x11\n\thop_limit\x18\n \x01(\r\x12\x10\n\x08want_ack\x18\x0b \x01(\x08\x12&\n\x08priority\x18\x0c \x01(\x0e\x32\x14.MeshPacket.Priority\"[\n\x08Priority\x12\t\n\x05UNSET\x10\x00\x12\x07\n\x03MIN\x10\x01\x12\x0e\n\nBACKGROUND\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10@\x12\x0c\n\x08RELIABLE\x10\x46\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\x42\x10\n\x0epayloadVariant\"\xe6\x02\n\x0f\x43hannelSettings\x12\x10\n\x08tx_power\x18\x01 \x01(\x05\x12\x32\n\x0cmodem_config\x18\x03 \x01(\x0e\x32\x1c.ChannelSettings.ModemConfig\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x15\n\rspread_factor\x18\x07 \x01(\r\x12\x13\n\x0b\x63oding_rate\x18\x08 \x01(\r\x12\x13\n\x0b\x63hannel_num\x18\t \x01(\r\x12\x0b\n\x03psk\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\n\n\x02id\x18\n \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x10 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x11 \x01(\x08\"`\n\x0bModemConfig\x12\x12\n\x0e\x42w125Cr45Sf128\x10\x00\x12\x12\n\x0e\x42w500Cr45Sf128\x10\x01\x12\x14\n\x10\x42w31_25Cr48Sf512\x10\x02\x12\x13\n\x0f\x42w125Cr48Sf4096\x10\x03\"\x82\x0b\n\x0bRadioConfig\x12\x31\n\x0bpreferences\x18\x01 \x01(\x0b\x32\x1c.RadioConfig.UserPreferences\x12.\n\x10\x63hannel_settings\x18\x02 \x01(\x0b\x32\x10.ChannelSettingsB\x02\x18\x01\x1a\x8f\n\n\x0fUserPreferences\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12\x1b\n\x13send_owner_interval\x18\x02 \x01(\r\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x16\n\x0escreen_on_secs\x18\x05 \x01(\r\x12\x1a\n\x12phone_timeout_secs\x18\x06 \x01(\r\x12\x1d\n\x15phone_sds_timeout_sec\x18\x07 \x01(\r\x12\x1d\n\x15mesh_sds_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08sds_secs\x18\t \x01(\r\x12\x0f\n\x07ls_secs\x18\n \x01(\r\x12\x15\n\rmin_wake_secs\x18\x0b \x01(\r\x12\x11\n\twifi_ssid\x18\x0c \x01(\t\x12\x15\n\rwifi_password\x18\r \x01(\t\x12\x14\n\x0cwifi_ap_mode\x18\x0e \x01(\x08\x12\x1b\n\x06region\x18\x0f \x01(\x0e\x32\x0b.RegionCode\x12&\n\x0e\x63harge_current\x18\x10 \x01(\x0e\x32\x0e.ChargeCurrent\x12\x11\n\tis_router\x18% \x01(\x08\x12\x14\n\x0cis_low_power\x18& \x01(\x08\x12\x16\n\x0e\x66ixed_position\x18\' \x01(\x08\x12\x15\n\rfactory_reset\x18\x64 \x01(\x08\x12\x19\n\x11\x64\x65\x62ug_log_enabled\x18\x65 \x01(\x08\x12(\n\x0elocation_share\x18  \x01(\x0e\x32\x10.LocationSharing\x12$\n\rgps_operation\x18! \x01(\x0e\x32\r.GpsOperation\x12\x1b\n\x13gps_update_interval\x18\" \x01(\r\x12\x18\n\x10gps_attempt_time\x18$ \x01(\r\x12\x17\n\x0fignore_incoming\x18g \x03(\r\x12\x1c\n\x14serialplugin_enabled\x18x \x01(\x08\x12\x19\n\x11serialplugin_echo\x18y \x01(\x08\x12\x18\n\x10serialplugin_rxd\x18z \x01(\r\x12\x18\n\x10serialplugin_txd\x18{ \x01(\r\x12\x1c\n\x14serialplugin_timeout\x18| \x01(\r\x12\x19\n\x11serialplugin_mode\x18} \x01(\r\x12\'\n\x1f\x65xt_notification_plugin_enabled\x18~ \x01(\x08\x12)\n!ext_notification_plugin_output_ms\x18\x7f \x01(\r\x12\'\n\x1e\x65xt_notification_plugin_output\x18\x80\x01 \x01(\r\x12\'\n\x1e\x65xt_notification_plugin_active\x18\x81\x01 \x01(\x08\x12.\n%ext_notification_plugin_alert_message\x18\x82\x01 \x01(\x08\x12+\n\"ext_notification_plugin_alert_bell\x18\x83\x01 \x01(\x08\x12\"\n\x19range_test_plugin_enabled\x18\x84\x01 \x01(\x08\x12!\n\x18range_test_plugin_sender\x18\x85\x01 \x01(\r\x12\x1f\n\x16range_test_plugin_save\x18\x86\x01 \x01(\x08\x12%\n\x1cstore_forward_plugin_enabled\x18\x88\x01 \x01(\x08\x12%\n\x1cstore_forward_plugin_records\x18\x89\x01 \x01(\r\"h\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\x10\n\x08next_hop\x18\x05 \x01(\r\"\xdd\x02\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x14\n\x0cnum_channels\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x10\n\x08hw_model\x18\x05 \x01(\t\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12&\n\nerror_code\x18\x07 \x01(\x0e\x32\x12.CriticalErrorCode\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\x12\x16\n\x0epacket_id_bits\x18\n \x01(\r\x12\x1d\n\x11\x63urrent_packet_id\x18\x0b \x01(\rB\x02\x18\x01\x12\x15\n\rnode_num_bits\x18\x0c \x01(\r\x12\x1c\n\x14message_timeout_msec\x18\r \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0e \x01(\r\"\xb5\x01\n\tLogRecord\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x1f\n\x05level\x18\x04 \x01(\x0e\x32\x10.LogRecord.Level\"X\n\x05Level\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x43RITICAL\x10\x32\x12\t\n\x05\x45RROR\x10(\x12\x0b\n\x07WARNING\x10\x1e\x12\x08\n\x04INFO\x10\x14\x12\t\n\x05\x44\x45\x42UG\x10\n\x12\t\n\x05TRACE\x10\x05\"\xa1\x02\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12\x1d\n\x05radio\x18\x06 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12 \n\nlog_record\x18\x07 \x01(\x0b\x32\n.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x12#\n\x07\x63hannel\x18\n \x01(\x0b\x32\x10.ChannelSettingsH\x00\x42\x10\n\x0epayloadVariant\"\xbc\x01\n\x07ToRadio\x12\x1d\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x12!\n\tset_radio\x18\x65 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1a\n\tset_owner\x18\x66 \x01(\x0b\x32\x05.UserH\x00\x12\'\n\x0bset_channel\x18g \x01(\x0b\x32\x10.ChannelSettingsH\x00\x42\x10\n\x0epayloadVariant*e\n\x0b\x45rrorReason\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08NO_ROUTE\x10\x01\x12\x0b\n\x07GOT_NAK\x10\x02\x12\x0b\n\x07TIMEOUT\x10\x03\x12\x10\n\x0cNO_INTERFACE\x10\x04\x12\x12\n\x0eMAX_RETRANSMIT\x10\x05*.\n\tConstants\x12\n\n\x06Unused\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xf0\x01*^\n\nRegionCode\x12\t\n\x05Unset\x10\x00\x12\x06\n\x02US\x10\x01\x12\t\n\x05\x45U433\x10\x02\x12\t\n\x05\x45U865\x10\x03\x12\x06\n\x02\x43N\x10\x04\x12\x06\n\x02JP\x10\x05\x12\x07\n\x03\x41NZ\x10\x06\x12\x06\n\x02KR\x10\x07\x12\x06\n\x02TW\x10\x08*\xd1\x01\n\rChargeCurrent\x12\x0b\n\x07MAUnset\x10\x00\x12\t\n\x05MA100\x10\x01\x12\t\n\x05MA190\x10\x02\x12\t\n\x05MA280\x10\x03\x12\t\n\x05MA360\x10\x04\x12\t\n\x05MA450\x10\x05\x12\t\n\x05MA550\x10\x06\x12\t\n\x05MA630\x10\x07\x12\t\n\x05MA700\x10\x08\x12\t\n\x05MA780\x10\t\x12\t\n\x05MA880\x10\n\x12\t\n\x05MA960\x10\x0b\x12\n\n\x06MA1000\x10\x0c\x12\n\n\x06MA1080\x10\r\x12\n\n\x06MA1160\x10\x0e\x12\n\n\x06MA1240\x10\x0f\x12\n\n\x06MA1320\x10\x10*j\n\x0cGpsOperation\x12\x0e\n\nGpsOpUnset\x10\x00\x12\x13\n\x0fGpsOpStationary\x10\x01\x12\x0f\n\x0bGpsOpMobile\x10\x02\x12\x11\n\rGpsOpTimeOnly\x10\x03\x12\x11\n\rGpsOpDisabled\x10\x04*@\n\x0fLocationSharing\x12\x0c\n\x08LocUnset\x10\x00\x12\x0e\n\nLocEnabled\x10\x01\x12\x0f\n\x0bLocDisabled\x10\x02*\xaf\x01\n\x11\x43riticalErrorCode\x12\x08\n\x04None\x10\x00\x12\x0e\n\nTxWatchdog\x10\x01\x12\x12\n\x0eSleepEnterWait\x10\x02\x12\x0b\n\x07NoRadio\x10\x03\x12\x0f\n\x0bUnspecified\x10\x04\x12\x13\n\x0fUBloxInitFailed\x10\x05\x12\x0c\n\x08NoAXP192\x10\x06\x12\x17\n\x13InvalidRadioSetting\x10\x07\x12\x12\n\x0eTransmitFailed\x10\x08\x42#\n\x13\x63om.geeksville.meshB\nMeshProtosH\x03\x62\x06proto3'
    +  create_key=_descriptor._internal_create_key,
    +  serialized_pb=b'\n\nmesh.proto\x1a\x0eportnums.proto\"j\n\x08Position\x12\x12\n\nlatitude_i\x18\x07 \x01(\x11\x12\x13\n\x0blongitude_i\x18\x08 \x01(\x11\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07\"2\n\x04\x44\x61ta\x12\x19\n\x07portnum\x18\x01 \x01(\x0e\x32\x08.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"J\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x05\"\xeb\x02\n\tSubPacket\x12\x15\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x05.DataH\x00\x12(\n\rroute_request\x18\x06 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0broute_reply\x18\x07 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12$\n\x0c\x65rror_reason\x18\r \x01(\x0e\x32\x0c.ErrorReasonH\x00\x12!\n\x08position\x18\x01 \x01(\x0b\x32\t.PositionB\x02\x18\x01H\x00\x12\x19\n\x04user\x18\x04 \x01(\x0b\x32\x05.UserB\x02\x18\x01H\x00\x12\x15\n\rwant_response\x18\x05 \x01(\x08\x12\x14\n\nsuccess_id\x18\n \x01(\rH\x01\x12\x11\n\x07\x66\x61il_id\x18\x0b \x01(\rH\x01\x12\x0c\n\x04\x64\x65st\x18\t \x01(\r\x12\x0e\n\x06source\x18\x0c \x01(\r\x12\x13\n\x0boriginal_id\x18\x02 \x01(\rB\x10\n\x0epayloadVariantB\x0c\n\nackVariant\"\xda\x02\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\r\x12\n\n\x02to\x18\x02 \x01(\r\x12\x15\n\rchannel_index\x18\x04 \x01(\r\x12\x1d\n\x07\x64\x65\x63oded\x18\x03 \x01(\x0b\x32\n.SubPacketH\x00\x12\x13\n\tencrypted\x18\x08 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\r\x12\x0f\n\x07rx_time\x18\t \x01(\x07\x12\x0e\n\x06rx_snr\x18\x07 \x01(\x02\x12\x11\n\thop_limit\x18\n \x01(\r\x12\x10\n\x08want_ack\x18\x0b \x01(\x08\x12&\n\x08priority\x18\x0c \x01(\x0e\x32\x14.MeshPacket.Priority\"[\n\x08Priority\x12\t\n\x05UNSET\x10\x00\x12\x07\n\x03MIN\x10\x01\x12\x0e\n\nBACKGROUND\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10@\x12\x0c\n\x08RELIABLE\x10\x46\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\x42\x10\n\x0epayloadVariant\"\xe6\x02\n\x0f\x43hannelSettings\x12\x10\n\x08tx_power\x18\x01 \x01(\x05\x12\x32\n\x0cmodem_config\x18\x03 \x01(\x0e\x32\x1c.ChannelSettings.ModemConfig\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x15\n\rspread_factor\x18\x07 \x01(\r\x12\x13\n\x0b\x63oding_rate\x18\x08 \x01(\r\x12\x13\n\x0b\x63hannel_num\x18\t \x01(\r\x12\x0b\n\x03psk\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\n\n\x02id\x18\n \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x10 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x11 \x01(\x08\"`\n\x0bModemConfig\x12\x12\n\x0e\x42w125Cr45Sf128\x10\x00\x12\x12\n\x0e\x42w500Cr45Sf128\x10\x01\x12\x14\n\x10\x42w31_25Cr48Sf512\x10\x02\x12\x13\n\x0f\x42w125Cr48Sf4096\x10\x03\"\xb9\r\n\x0bRadioConfig\x12\x31\n\x0bpreferences\x18\x01 \x01(\x0b\x32\x1c.RadioConfig.UserPreferences\x12.\n\x10\x63hannel_settings\x18\x02 \x01(\x0b\x32\x10.ChannelSettingsB\x02\x18\x01\x1a\xc6\x0c\n\x0fUserPreferences\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12\x1b\n\x13send_owner_interval\x18\x02 \x01(\r\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x16\n\x0escreen_on_secs\x18\x05 \x01(\r\x12\x1a\n\x12phone_timeout_secs\x18\x06 \x01(\r\x12\x1d\n\x15phone_sds_timeout_sec\x18\x07 \x01(\r\x12\x1d\n\x15mesh_sds_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08sds_secs\x18\t \x01(\r\x12\x0f\n\x07ls_secs\x18\n \x01(\r\x12\x15\n\rmin_wake_secs\x18\x0b \x01(\r\x12\x11\n\twifi_ssid\x18\x0c \x01(\t\x12\x15\n\rwifi_password\x18\r \x01(\t\x12\x14\n\x0cwifi_ap_mode\x18\x0e \x01(\x08\x12\x1b\n\x06region\x18\x0f \x01(\x0e\x32\x0b.RegionCode\x12&\n\x0e\x63harge_current\x18\x10 \x01(\x0e\x32\x0e.ChargeCurrent\x12\x11\n\tis_router\x18% \x01(\x08\x12\x14\n\x0cis_low_power\x18& \x01(\x08\x12\x16\n\x0e\x66ixed_position\x18\' \x01(\x08\x12\x15\n\rfactory_reset\x18\x64 \x01(\x08\x12\x19\n\x11\x64\x65\x62ug_log_enabled\x18\x65 \x01(\x08\x12(\n\x0elocation_share\x18  \x01(\x0e\x32\x10.LocationSharing\x12$\n\rgps_operation\x18! \x01(\x0e\x32\r.GpsOperation\x12\x1b\n\x13gps_update_interval\x18\" \x01(\r\x12\x18\n\x10gps_attempt_time\x18$ \x01(\r\x12\x17\n\x0fignore_incoming\x18g \x03(\r\x12\x1c\n\x14serialplugin_enabled\x18x \x01(\x08\x12\x19\n\x11serialplugin_echo\x18y \x01(\x08\x12\x18\n\x10serialplugin_rxd\x18z \x01(\r\x12\x18\n\x10serialplugin_txd\x18{ \x01(\r\x12\x1c\n\x14serialplugin_timeout\x18| \x01(\r\x12\x19\n\x11serialplugin_mode\x18} \x01(\r\x12\'\n\x1f\x65xt_notification_plugin_enabled\x18~ \x01(\x08\x12)\n!ext_notification_plugin_output_ms\x18\x7f \x01(\r\x12\'\n\x1e\x65xt_notification_plugin_output\x18\x80\x01 \x01(\r\x12\'\n\x1e\x65xt_notification_plugin_active\x18\x81\x01 \x01(\x08\x12.\n%ext_notification_plugin_alert_message\x18\x82\x01 \x01(\x08\x12+\n\"ext_notification_plugin_alert_bell\x18\x83\x01 \x01(\x08\x12\"\n\x19range_test_plugin_enabled\x18\x84\x01 \x01(\x08\x12!\n\x18range_test_plugin_sender\x18\x85\x01 \x01(\r\x12\x1f\n\x16range_test_plugin_save\x18\x86\x01 \x01(\x08\x12%\n\x1cstore_forward_plugin_enabled\x18\x88\x01 \x01(\x08\x12%\n\x1cstore_forward_plugin_records\x18\x89\x01 \x01(\r\x12=\n4environmental_measurement_plugin_measurement_enabled\x18\x8c\x01 \x01(\x08\x12\x38\n/environmental_measurement_plugin_screen_enabled\x18\x8d\x01 \x01(\x08\x12\x44\n;environmental_measurement_plugin_read_error_count_threshold\x18\x8e\x01 \x01(\r\x12\x39\n0environmental_measurement_plugin_update_interval\x18\x8f\x01 \x01(\r\x12;\n2environmental_measurement_plugin_recovery_interval\x18\x90\x01 \x01(\r\"h\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\x10\n\x08next_hop\x18\x05 \x01(\r\"\xe1\x02\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x14\n\x0cnum_channels\x18\x03 \x01(\x05\x12\x12\n\x06region\x18\x04 \x01(\tB\x02\x18\x01\x12\x10\n\x08hw_model\x18\x05 \x01(\t\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12&\n\nerror_code\x18\x07 \x01(\x0e\x32\x12.CriticalErrorCode\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\x12\x16\n\x0epacket_id_bits\x18\n \x01(\r\x12\x1d\n\x11\x63urrent_packet_id\x18\x0b \x01(\rB\x02\x18\x01\x12\x15\n\rnode_num_bits\x18\x0c \x01(\r\x12\x1c\n\x14message_timeout_msec\x18\r \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0e \x01(\r\"\xb5\x01\n\tLogRecord\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x1f\n\x05level\x18\x04 \x01(\x0e\x32\x10.LogRecord.Level\"X\n\x05Level\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x43RITICAL\x10\x32\x12\t\n\x05\x45RROR\x10(\x12\x0b\n\x07WARNING\x10\x1e\x12\x08\n\x04INFO\x10\x14\x12\t\n\x05\x44\x45\x42UG\x10\n\x12\t\n\x05TRACE\x10\x05\"\xa1\x02\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12\x1d\n\x05radio\x18\x06 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12 \n\nlog_record\x18\x07 \x01(\x0b\x32\n.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x12#\n\x07\x63hannel\x18\n \x01(\x0b\x32\x10.ChannelSettingsH\x00\x42\x10\n\x0epayloadVariant\"\xbc\x01\n\x07ToRadio\x12\x1d\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x12!\n\tset_radio\x18\x65 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1a\n\tset_owner\x18\x66 \x01(\x0b\x32\x05.UserH\x00\x12\'\n\x0bset_channel\x18g \x01(\x0b\x32\x10.ChannelSettingsH\x00\x42\x10\n\x0epayloadVariant*e\n\x0b\x45rrorReason\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08NO_ROUTE\x10\x01\x12\x0b\n\x07GOT_NAK\x10\x02\x12\x0b\n\x07TIMEOUT\x10\x03\x12\x10\n\x0cNO_INTERFACE\x10\x04\x12\x12\n\x0eMAX_RETRANSMIT\x10\x05*.\n\tConstants\x12\n\n\x06Unused\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xf0\x01*^\n\nRegionCode\x12\t\n\x05Unset\x10\x00\x12\x06\n\x02US\x10\x01\x12\t\n\x05\x45U433\x10\x02\x12\t\n\x05\x45U865\x10\x03\x12\x06\n\x02\x43N\x10\x04\x12\x06\n\x02JP\x10\x05\x12\x07\n\x03\x41NZ\x10\x06\x12\x06\n\x02KR\x10\x07\x12\x06\n\x02TW\x10\x08*\xd1\x01\n\rChargeCurrent\x12\x0b\n\x07MAUnset\x10\x00\x12\t\n\x05MA100\x10\x01\x12\t\n\x05MA190\x10\x02\x12\t\n\x05MA280\x10\x03\x12\t\n\x05MA360\x10\x04\x12\t\n\x05MA450\x10\x05\x12\t\n\x05MA550\x10\x06\x12\t\n\x05MA630\x10\x07\x12\t\n\x05MA700\x10\x08\x12\t\n\x05MA780\x10\t\x12\t\n\x05MA880\x10\n\x12\t\n\x05MA960\x10\x0b\x12\n\n\x06MA1000\x10\x0c\x12\n\n\x06MA1080\x10\r\x12\n\n\x06MA1160\x10\x0e\x12\n\n\x06MA1240\x10\x0f\x12\n\n\x06MA1320\x10\x10*j\n\x0cGpsOperation\x12\x0e\n\nGpsOpUnset\x10\x00\x12\x13\n\x0fGpsOpStationary\x10\x01\x12\x0f\n\x0bGpsOpMobile\x10\x02\x12\x11\n\rGpsOpTimeOnly\x10\x03\x12\x11\n\rGpsOpDisabled\x10\x04*@\n\x0fLocationSharing\x12\x0c\n\x08LocUnset\x10\x00\x12\x0e\n\nLocEnabled\x10\x01\x12\x0f\n\x0bLocDisabled\x10\x02*\xaf\x01\n\x11\x43riticalErrorCode\x12\x08\n\x04None\x10\x00\x12\x0e\n\nTxWatchdog\x10\x01\x12\x12\n\x0eSleepEnterWait\x10\x02\x12\x0b\n\x07NoRadio\x10\x03\x12\x0f\n\x0bUnspecified\x10\x04\x12\x13\n\x0fUBloxInitFailed\x10\x05\x12\x0c\n\x08NoAXP192\x10\x06\x12\x17\n\x13InvalidRadioSetting\x10\x07\x12\x12\n\x0eTransmitFailed\x10\x08\x42#\n\x13\x63om.geeksville.meshB\nMeshProtosH\x03\x62\x06proto3'
       ,
       dependencies=[portnums__pb2.DESCRIPTOR,])
     
    @@ -57,36 +59,43 @@ _ERRORREASON = _descriptor.EnumDescriptor(
       full_name='ErrorReason',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='NONE', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='NO_ROUTE', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='GOT_NAK', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='TIMEOUT', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='NO_INTERFACE', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MAX_RETRANSMIT', index=5, number=5,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=3913,
    -  serialized_end=4014,
    +  serialized_start=4228,
    +  serialized_end=4329,
     )
     _sym_db.RegisterEnumDescriptor(_ERRORREASON)
     
    @@ -96,20 +105,23 @@ _CONSTANTS = _descriptor.EnumDescriptor(
       full_name='Constants',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='Unused', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='DATA_PAYLOAD_LEN', index=1, number=240,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=4016,
    -  serialized_end=4062,
    +  serialized_start=4331,
    +  serialized_end=4377,
     )
     _sym_db.RegisterEnumDescriptor(_CONSTANTS)
     
    @@ -119,48 +131,58 @@ _REGIONCODE = _descriptor.EnumDescriptor(
       full_name='RegionCode',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='Unset', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='US', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='EU433', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='EU865', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='CN', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='JP', index=5, number=5,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='ANZ', index=6, number=6,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='KR', index=7, number=7,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='TW', index=8, number=8,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=4064,
    -  serialized_end=4158,
    +  serialized_start=4379,
    +  serialized_end=4473,
     )
     _sym_db.RegisterEnumDescriptor(_REGIONCODE)
     
    @@ -170,80 +192,98 @@ _CHARGECURRENT = _descriptor.EnumDescriptor(
       full_name='ChargeCurrent',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='MAUnset', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA100', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA190', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA280', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA360', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA450', index=5, number=5,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA550', index=6, number=6,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA630', index=7, number=7,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA700', index=8, number=8,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA780', index=9, number=9,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA880', index=10, number=10,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA960', index=11, number=11,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA1000', index=12, number=12,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA1080', index=13, number=13,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA1160', index=14, number=14,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA1240', index=15, number=15,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MA1320', index=16, number=16,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=4161,
    -  serialized_end=4370,
    +  serialized_start=4476,
    +  serialized_end=4685,
     )
     _sym_db.RegisterEnumDescriptor(_CHARGECURRENT)
     
    @@ -253,32 +293,38 @@ _GPSOPERATION = _descriptor.EnumDescriptor(
       full_name='GpsOperation',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='GpsOpUnset', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='GpsOpStationary', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='GpsOpMobile', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='GpsOpTimeOnly', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='GpsOpDisabled', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=4372,
    -  serialized_end=4478,
    +  serialized_start=4687,
    +  serialized_end=4793,
     )
     _sym_db.RegisterEnumDescriptor(_GPSOPERATION)
     
    @@ -288,24 +334,28 @@ _LOCATIONSHARING = _descriptor.EnumDescriptor(
       full_name='LocationSharing',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='LocUnset', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='LocEnabled', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='LocDisabled', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=4480,
    -  serialized_end=4544,
    +  serialized_start=4795,
    +  serialized_end=4859,
     )
     _sym_db.RegisterEnumDescriptor(_LOCATIONSHARING)
     
    @@ -315,48 +365,58 @@ _CRITICALERRORCODE = _descriptor.EnumDescriptor(
       full_name='CriticalErrorCode',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='None', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='TxWatchdog', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='SleepEnterWait', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='NoRadio', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='Unspecified', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='UBloxInitFailed', index=5, number=5,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='NoAXP192', index=6, number=6,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='InvalidRadioSetting', index=7, number=7,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='TransmitFailed', index=8, number=8,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=4547,
    -  serialized_end=4722,
    +  serialized_start=4862,
    +  serialized_end=5037,
     )
     _sym_db.RegisterEnumDescriptor(_CRITICALERRORCODE)
     
    @@ -419,35 +479,43 @@ _MESHPACKET_PRIORITY = _descriptor.EnumDescriptor(
       full_name='MeshPacket.Priority',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='UNSET', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MIN', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='BACKGROUND', index=2, number=10,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='DEFAULT', index=3, number=64,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='RELIABLE', index=4, number=70,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='ACK', index=5, number=120,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='MAX', index=6, number=127,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    @@ -461,23 +529,28 @@ _CHANNELSETTINGS_MODEMCONFIG = _descriptor.EnumDescriptor(
       full_name='ChannelSettings.ModemConfig',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='Bw125Cr45Sf128', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='Bw500Cr45Sf128', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='Bw31_25Cr48Sf512', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='Bw125Cr48Sf4096', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    @@ -491,40 +564,48 @@ _LOGRECORD_LEVEL = _descriptor.EnumDescriptor(
       full_name='LogRecord.Level',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='UNSET', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='CRITICAL', index=1, number=50,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='ERROR', index=2, number=40,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='WARNING', index=3, number=30,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='INFO', index=4, number=20,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='DEBUG', index=5, number=10,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='TRACE', index=6, number=5,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=3340,
    -  serialized_end=3428,
    +  serialized_start=3655,
    +  serialized_end=3743,
     )
     _sym_db.RegisterEnumDescriptor(_LOGRECORD_LEVEL)
     
    @@ -535,6 +616,7 @@ _POSITION = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='latitude_i', full_name='Position.latitude_i', index=0,
    @@ -542,35 +624,35 @@ _POSITION = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='longitude_i', full_name='Position.longitude_i', index=1,
           number=8, type=17, cpp_type=1, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='altitude', full_name='Position.altitude', index=2,
           number=3, type=5, cpp_type=1, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='battery_level', full_name='Position.battery_level', index=3,
           number=4, type=5, cpp_type=1, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='time', full_name='Position.time', index=4,
           number=9, type=7, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -594,6 +676,7 @@ _DATA = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='portnum', full_name='Data.portnum', index=0,
    @@ -601,14 +684,14 @@ _DATA = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='payload', full_name='Data.payload', index=1,
           number=2, type=12, cpp_type=9, label=1,
           has_default_value=False, default_value=b"",
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -632,6 +715,7 @@ _USER = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='id', full_name='User.id', index=0,
    @@ -639,28 +723,28 @@ _USER = _descriptor.Descriptor(
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='long_name', full_name='User.long_name', index=1,
           number=2, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='short_name', full_name='User.short_name', index=2,
           number=3, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='macaddr', full_name='User.macaddr', index=3,
           number=4, type=12, cpp_type=9, label=1,
           has_default_value=False, default_value=b"",
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -684,6 +768,7 @@ _ROUTEDISCOVERY = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='route', full_name='RouteDiscovery.route', index=0,
    @@ -691,7 +776,7 @@ _ROUTEDISCOVERY = _descriptor.Descriptor(
           has_default_value=False, default_value=[],
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -715,6 +800,7 @@ _SUBPACKET = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='data', full_name='SubPacket.data', index=0,
    @@ -722,84 +808,84 @@ _SUBPACKET = _descriptor.Descriptor(
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='route_request', full_name='SubPacket.route_request', index=1,
           number=6, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='route_reply', full_name='SubPacket.route_reply', index=2,
           number=7, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='error_reason', full_name='SubPacket.error_reason', index=3,
           number=13, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='position', full_name='SubPacket.position', index=4,
           number=1, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=b'\030\001', file=DESCRIPTOR),
    +      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='user', full_name='SubPacket.user', index=5,
           number=4, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=b'\030\001', file=DESCRIPTOR),
    +      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='want_response', full_name='SubPacket.want_response', index=6,
           number=5, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='success_id', full_name='SubPacket.success_id', index=7,
           number=10, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='fail_id', full_name='SubPacket.fail_id', index=8,
           number=11, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='dest', full_name='SubPacket.dest', index=9,
           number=9, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='source', full_name='SubPacket.source', index=10,
           number=12, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='original_id', full_name='SubPacket.original_id', index=11,
           number=2, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -813,10 +899,14 @@ _SUBPACKET = _descriptor.Descriptor(
       oneofs=[
         _descriptor.OneofDescriptor(
           name='payloadVariant', full_name='SubPacket.payloadVariant',
    -      index=0, containing_type=None, fields=[]),
    +      index=0, containing_type=None,
    +      create_key=_descriptor._internal_create_key,
    +    fields=[]),
         _descriptor.OneofDescriptor(
           name='ackVariant', full_name='SubPacket.ackVariant',
    -      index=1, containing_type=None, fields=[]),
    +      index=1, containing_type=None,
    +      create_key=_descriptor._internal_create_key,
    +    fields=[]),
       ],
       serialized_start=300,
       serialized_end=663,
    @@ -829,6 +919,7 @@ _MESHPACKET = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='from', full_name='MeshPacket.from', index=0,
    @@ -836,77 +927,77 @@ _MESHPACKET = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='to', full_name='MeshPacket.to', index=1,
           number=2, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='channel_index', full_name='MeshPacket.channel_index', index=2,
           number=4, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='decoded', full_name='MeshPacket.decoded', index=3,
           number=3, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='encrypted', full_name='MeshPacket.encrypted', index=4,
           number=8, type=12, cpp_type=9, label=1,
           has_default_value=False, default_value=b"",
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='id', full_name='MeshPacket.id', index=5,
           number=6, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='rx_time', full_name='MeshPacket.rx_time', index=6,
           number=9, type=7, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='rx_snr', full_name='MeshPacket.rx_snr', index=7,
           number=7, type=2, cpp_type=6, label=1,
           has_default_value=False, default_value=float(0),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='hop_limit', full_name='MeshPacket.hop_limit', index=8,
           number=10, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='want_ack', full_name='MeshPacket.want_ack', index=9,
           number=11, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='priority', full_name='MeshPacket.priority', index=10,
           number=12, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -921,7 +1012,9 @@ _MESHPACKET = _descriptor.Descriptor(
       oneofs=[
         _descriptor.OneofDescriptor(
           name='payloadVariant', full_name='MeshPacket.payloadVariant',
    -      index=0, containing_type=None, fields=[]),
    +      index=0, containing_type=None,
    +      create_key=_descriptor._internal_create_key,
    +    fields=[]),
       ],
       serialized_start=666,
       serialized_end=1012,
    @@ -934,6 +1027,7 @@ _CHANNELSETTINGS = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='tx_power', full_name='ChannelSettings.tx_power', index=0,
    @@ -941,77 +1035,77 @@ _CHANNELSETTINGS = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='modem_config', full_name='ChannelSettings.modem_config', index=1,
           number=3, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='bandwidth', full_name='ChannelSettings.bandwidth', index=2,
           number=6, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='spread_factor', full_name='ChannelSettings.spread_factor', index=3,
           number=7, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='coding_rate', full_name='ChannelSettings.coding_rate', index=4,
           number=8, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='channel_num', full_name='ChannelSettings.channel_num', index=5,
           number=9, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='psk', full_name='ChannelSettings.psk', index=6,
           number=4, type=12, cpp_type=9, label=1,
           has_default_value=False, default_value=b"",
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='name', full_name='ChannelSettings.name', index=7,
           number=5, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='id', full_name='ChannelSettings.id', index=8,
           number=10, type=7, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='uplink_enabled', full_name='ChannelSettings.uplink_enabled', index=9,
           number=16, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='downlink_enabled', full_name='ChannelSettings.downlink_enabled', index=10,
           number=17, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1036,6 +1130,7 @@ _RADIOCONFIG_USERPREFERENCES = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='position_broadcast_secs', full_name='RadioConfig.UserPreferences.position_broadcast_secs', index=0,
    @@ -1043,294 +1138,329 @@ _RADIOCONFIG_USERPREFERENCES = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='send_owner_interval', full_name='RadioConfig.UserPreferences.send_owner_interval', index=1,
           number=2, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='wait_bluetooth_secs', full_name='RadioConfig.UserPreferences.wait_bluetooth_secs', index=2,
           number=4, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='screen_on_secs', full_name='RadioConfig.UserPreferences.screen_on_secs', index=3,
           number=5, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='phone_timeout_secs', full_name='RadioConfig.UserPreferences.phone_timeout_secs', index=4,
           number=6, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='phone_sds_timeout_sec', full_name='RadioConfig.UserPreferences.phone_sds_timeout_sec', index=5,
           number=7, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='mesh_sds_timeout_secs', full_name='RadioConfig.UserPreferences.mesh_sds_timeout_secs', index=6,
           number=8, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='sds_secs', full_name='RadioConfig.UserPreferences.sds_secs', index=7,
           number=9, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ls_secs', full_name='RadioConfig.UserPreferences.ls_secs', index=8,
           number=10, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='min_wake_secs', full_name='RadioConfig.UserPreferences.min_wake_secs', index=9,
           number=11, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='wifi_ssid', full_name='RadioConfig.UserPreferences.wifi_ssid', index=10,
           number=12, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='wifi_password', full_name='RadioConfig.UserPreferences.wifi_password', index=11,
           number=13, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='wifi_ap_mode', full_name='RadioConfig.UserPreferences.wifi_ap_mode', index=12,
           number=14, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='region', full_name='RadioConfig.UserPreferences.region', index=13,
           number=15, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='charge_current', full_name='RadioConfig.UserPreferences.charge_current', index=14,
           number=16, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='is_router', full_name='RadioConfig.UserPreferences.is_router', index=15,
           number=37, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='is_low_power', full_name='RadioConfig.UserPreferences.is_low_power', index=16,
           number=38, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='fixed_position', full_name='RadioConfig.UserPreferences.fixed_position', index=17,
           number=39, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='factory_reset', full_name='RadioConfig.UserPreferences.factory_reset', index=18,
           number=100, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='debug_log_enabled', full_name='RadioConfig.UserPreferences.debug_log_enabled', index=19,
           number=101, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='location_share', full_name='RadioConfig.UserPreferences.location_share', index=20,
           number=32, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='gps_operation', full_name='RadioConfig.UserPreferences.gps_operation', index=21,
           number=33, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='gps_update_interval', full_name='RadioConfig.UserPreferences.gps_update_interval', index=22,
           number=34, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='gps_attempt_time', full_name='RadioConfig.UserPreferences.gps_attempt_time', index=23,
           number=36, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ignore_incoming', full_name='RadioConfig.UserPreferences.ignore_incoming', index=24,
           number=103, type=13, cpp_type=3, label=3,
           has_default_value=False, default_value=[],
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='serialplugin_enabled', full_name='RadioConfig.UserPreferences.serialplugin_enabled', index=25,
           number=120, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='serialplugin_echo', full_name='RadioConfig.UserPreferences.serialplugin_echo', index=26,
           number=121, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='serialplugin_rxd', full_name='RadioConfig.UserPreferences.serialplugin_rxd', index=27,
           number=122, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='serialplugin_txd', full_name='RadioConfig.UserPreferences.serialplugin_txd', index=28,
           number=123, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='serialplugin_timeout', full_name='RadioConfig.UserPreferences.serialplugin_timeout', index=29,
           number=124, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='serialplugin_mode', full_name='RadioConfig.UserPreferences.serialplugin_mode', index=30,
           number=125, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ext_notification_plugin_enabled', full_name='RadioConfig.UserPreferences.ext_notification_plugin_enabled', index=31,
           number=126, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ext_notification_plugin_output_ms', full_name='RadioConfig.UserPreferences.ext_notification_plugin_output_ms', index=32,
           number=127, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ext_notification_plugin_output', full_name='RadioConfig.UserPreferences.ext_notification_plugin_output', index=33,
           number=128, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ext_notification_plugin_active', full_name='RadioConfig.UserPreferences.ext_notification_plugin_active', index=34,
           number=129, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ext_notification_plugin_alert_message', full_name='RadioConfig.UserPreferences.ext_notification_plugin_alert_message', index=35,
           number=130, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='ext_notification_plugin_alert_bell', full_name='RadioConfig.UserPreferences.ext_notification_plugin_alert_bell', index=36,
           number=131, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='range_test_plugin_enabled', full_name='RadioConfig.UserPreferences.range_test_plugin_enabled', index=37,
           number=132, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='range_test_plugin_sender', full_name='RadioConfig.UserPreferences.range_test_plugin_sender', index=38,
           number=133, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='range_test_plugin_save', full_name='RadioConfig.UserPreferences.range_test_plugin_save', index=39,
           number=134, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='store_forward_plugin_enabled', full_name='RadioConfig.UserPreferences.store_forward_plugin_enabled', index=40,
           number=136, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='store_forward_plugin_records', full_name='RadioConfig.UserPreferences.store_forward_plugin_records', index=41,
           number=137, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    +    _descriptor.FieldDescriptor(
    +      name='environmental_measurement_plugin_measurement_enabled', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_measurement_enabled', index=42,
    +      number=140, type=8, cpp_type=7, label=1,
    +      has_default_value=False, default_value=False,
    +      message_type=None, enum_type=None, containing_type=None,
    +      is_extension=False, extension_scope=None,
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    +    _descriptor.FieldDescriptor(
    +      name='environmental_measurement_plugin_screen_enabled', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_screen_enabled', index=43,
    +      number=141, type=8, cpp_type=7, label=1,
    +      has_default_value=False, default_value=False,
    +      message_type=None, enum_type=None, containing_type=None,
    +      is_extension=False, extension_scope=None,
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    +    _descriptor.FieldDescriptor(
    +      name='environmental_measurement_plugin_read_error_count_threshold', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_read_error_count_threshold', index=44,
    +      number=142, type=13, cpp_type=3, label=1,
    +      has_default_value=False, default_value=0,
    +      message_type=None, enum_type=None, containing_type=None,
    +      is_extension=False, extension_scope=None,
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    +    _descriptor.FieldDescriptor(
    +      name='environmental_measurement_plugin_update_interval', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_update_interval', index=45,
    +      number=143, type=13, cpp_type=3, label=1,
    +      has_default_value=False, default_value=0,
    +      message_type=None, enum_type=None, containing_type=None,
    +      is_extension=False, extension_scope=None,
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
    +    _descriptor.FieldDescriptor(
    +      name='environmental_measurement_plugin_recovery_interval', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_recovery_interval', index=46,
    +      number=144, type=13, cpp_type=3, label=1,
    +      has_default_value=False, default_value=0,
    +      message_type=None, enum_type=None, containing_type=None,
    +      is_extension=False, extension_scope=None,
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1344,7 +1474,7 @@ _RADIOCONFIG_USERPREFERENCES = _descriptor.Descriptor(
       oneofs=[
       ],
       serialized_start=1491,
    -  serialized_end=2786,
    +  serialized_end=3097,
     )
     
     _RADIOCONFIG = _descriptor.Descriptor(
    @@ -1353,6 +1483,7 @@ _RADIOCONFIG = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='preferences', full_name='RadioConfig.preferences', index=0,
    @@ -1360,14 +1491,14 @@ _RADIOCONFIG = _descriptor.Descriptor(
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='channel_settings', full_name='RadioConfig.channel_settings', index=1,
           number=2, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=b'\030\001', file=DESCRIPTOR),
    +      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1381,7 +1512,7 @@ _RADIOCONFIG = _descriptor.Descriptor(
       oneofs=[
       ],
       serialized_start=1376,
    -  serialized_end=2786,
    +  serialized_end=3097,
     )
     
     
    @@ -1391,6 +1522,7 @@ _NODEINFO = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='num', full_name='NodeInfo.num', index=0,
    @@ -1398,35 +1530,35 @@ _NODEINFO = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='user', full_name='NodeInfo.user', index=1,
           number=2, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='position', full_name='NodeInfo.position', index=2,
           number=3, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='snr', full_name='NodeInfo.snr', index=3,
           number=7, type=2, cpp_type=6, label=1,
           has_default_value=False, default_value=float(0),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='next_hop', full_name='NodeInfo.next_hop', index=4,
           number=5, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1439,8 +1571,8 @@ _NODEINFO = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=2788,
    -  serialized_end=2892,
    +  serialized_start=3099,
    +  serialized_end=3203,
     )
     
     
    @@ -1450,6 +1582,7 @@ _MYNODEINFO = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='my_node_num', full_name='MyNodeInfo.my_node_num', index=0,
    @@ -1457,98 +1590,98 @@ _MYNODEINFO = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='has_gps', full_name='MyNodeInfo.has_gps', index=1,
           number=2, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='num_channels', full_name='MyNodeInfo.num_channels', index=2,
           number=3, type=5, cpp_type=1, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='region', full_name='MyNodeInfo.region', index=3,
           number=4, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='hw_model', full_name='MyNodeInfo.hw_model', index=4,
           number=5, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='firmware_version', full_name='MyNodeInfo.firmware_version', index=5,
           number=6, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='error_code', full_name='MyNodeInfo.error_code', index=6,
           number=7, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='error_address', full_name='MyNodeInfo.error_address', index=7,
           number=8, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='error_count', full_name='MyNodeInfo.error_count', index=8,
           number=9, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='packet_id_bits', full_name='MyNodeInfo.packet_id_bits', index=9,
           number=10, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='current_packet_id', full_name='MyNodeInfo.current_packet_id', index=10,
           number=11, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=b'\030\001', file=DESCRIPTOR),
    +      serialized_options=b'\030\001', file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='node_num_bits', full_name='MyNodeInfo.node_num_bits', index=11,
           number=12, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='message_timeout_msec', full_name='MyNodeInfo.message_timeout_msec', index=12,
           number=13, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='min_app_version', full_name='MyNodeInfo.min_app_version', index=13,
           number=14, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1561,8 +1694,8 @@ _MYNODEINFO = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=2895,
    -  serialized_end=3244,
    +  serialized_start=3206,
    +  serialized_end=3559,
     )
     
     
    @@ -1572,6 +1705,7 @@ _LOGRECORD = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='message', full_name='LogRecord.message', index=0,
    @@ -1579,28 +1713,28 @@ _LOGRECORD = _descriptor.Descriptor(
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='time', full_name='LogRecord.time', index=1,
           number=2, type=7, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='source', full_name='LogRecord.source', index=2,
           number=3, type=9, cpp_type=9, label=1,
           has_default_value=False, default_value=b"".decode('utf-8'),
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='level', full_name='LogRecord.level', index=3,
           number=4, type=14, cpp_type=8, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1614,8 +1748,8 @@ _LOGRECORD = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=3247,
    -  serialized_end=3428,
    +  serialized_start=3562,
    +  serialized_end=3743,
     )
     
     
    @@ -1625,6 +1759,7 @@ _FROMRADIO = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='num', full_name='FromRadio.num', index=0,
    @@ -1632,63 +1767,63 @@ _FROMRADIO = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='packet', full_name='FromRadio.packet', index=1,
           number=2, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='my_info', full_name='FromRadio.my_info', index=2,
           number=3, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='node_info', full_name='FromRadio.node_info', index=3,
           number=4, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='radio', full_name='FromRadio.radio', index=4,
           number=6, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='log_record', full_name='FromRadio.log_record', index=5,
           number=7, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='config_complete_id', full_name='FromRadio.config_complete_id', index=6,
           number=8, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='rebooted', full_name='FromRadio.rebooted', index=7,
           number=9, type=8, cpp_type=7, label=1,
           has_default_value=False, default_value=False,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='channel', full_name='FromRadio.channel', index=8,
           number=10, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1702,10 +1837,12 @@ _FROMRADIO = _descriptor.Descriptor(
       oneofs=[
         _descriptor.OneofDescriptor(
           name='payloadVariant', full_name='FromRadio.payloadVariant',
    -      index=0, containing_type=None, fields=[]),
    +      index=0, containing_type=None,
    +      create_key=_descriptor._internal_create_key,
    +    fields=[]),
       ],
    -  serialized_start=3431,
    -  serialized_end=3720,
    +  serialized_start=3746,
    +  serialized_end=4035,
     )
     
     
    @@ -1715,6 +1852,7 @@ _TORADIO = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='packet', full_name='ToRadio.packet', index=0,
    @@ -1722,35 +1860,35 @@ _TORADIO = _descriptor.Descriptor(
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='want_config_id', full_name='ToRadio.want_config_id', index=1,
           number=100, type=13, cpp_type=3, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='set_radio', full_name='ToRadio.set_radio', index=2,
           number=101, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='set_owner', full_name='ToRadio.set_owner', index=3,
           number=102, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='set_channel', full_name='ToRadio.set_channel', index=4,
           number=103, type=11, cpp_type=10, label=1,
           has_default_value=False, default_value=None,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    @@ -1764,10 +1902,12 @@ _TORADIO = _descriptor.Descriptor(
       oneofs=[
         _descriptor.OneofDescriptor(
           name='payloadVariant', full_name='ToRadio.payloadVariant',
    -      index=0, containing_type=None, fields=[]),
    +      index=0, containing_type=None,
    +      create_key=_descriptor._internal_create_key,
    +    fields=[]),
       ],
    -  serialized_start=3723,
    -  serialized_end=3911,
    +  serialized_start=4038,
    +  serialized_end=4226,
     )
     
     _DATA.fields_by_name['portnum'].enum_type = portnums__pb2._PORTNUM
    @@ -1999,6 +2139,7 @@ DESCRIPTOR._options = None
     _SUBPACKET.fields_by_name['position']._options = None
     _SUBPACKET.fields_by_name['user']._options = None
     _RADIOCONFIG.fields_by_name['channel_settings']._options = None
    +_MYNODEINFO.fields_by_name['region']._options = None
     _MYNODEINFO.fields_by_name['current_packet_id']._options = None
     # @@protoc_insertion_point(module_scope)
    diff --git a/docs/meshtastic/portnums_pb2.html b/docs/meshtastic/portnums_pb2.html index 62a1449..baaee4d 100644 --- a/docs/meshtastic/portnums_pb2.html +++ b/docs/meshtastic/portnums_pb2.html @@ -5,7 +5,7 @@ meshtastic.portnums_pb2 API documentation - + @@ -22,6 +22,7 @@

    Module meshtastic.portnums_pb2

    +

    Generated protocol buffer code.

    Expand source code @@ -29,7 +30,7 @@
    # -*- coding: utf-8 -*-
     # Generated by the protocol buffer compiler.  DO NOT EDIT!
     # source: portnums.proto
    -
    +"""Generated protocol buffer code."""
     from google.protobuf.internal import enum_type_wrapper
     from google.protobuf import descriptor as _descriptor
     from google.protobuf import message as _message
    @@ -47,7 +48,8 @@ DESCRIPTOR = _descriptor.FileDescriptor(
       package='',
       syntax='proto3',
       serialized_options=b'\n\023com.geeksville.meshB\010PortnumsH\003',
    -  serialized_pb=b'\n\x0eportnums.proto*\xf1\x01\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x42!\n\x13\x63om.geeksville.meshB\x08PortnumsH\x03\x62\x06proto3'
    +  create_key=_descriptor._internal_create_key,
    +  serialized_pb=b'\n\x0eportnums.proto*\x94\x02\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12!\n\x1d\x45NVIRONMENTAL_MEASUREMENT_APP\x10\"\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x42!\n\x13\x63om.geeksville.meshB\x08PortnumsH\x03\x62\x06proto3'
     )
     
     _PORTNUM = _descriptor.EnumDescriptor(
    @@ -55,60 +57,78 @@ _PORTNUM = _descriptor.EnumDescriptor(
       full_name='PortNum',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='UNKNOWN_APP', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='TEXT_MESSAGE_APP', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='REMOTE_HARDWARE_APP', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='POSITION_APP', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='NODEINFO_APP', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='REPLY_APP', index=5, number=32,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='IP_TUNNEL_APP', index=6, number=33,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
    -      name='SERIAL_APP', index=7, number=64,
    +      name='ENVIRONMENTAL_MEASUREMENT_APP', index=7, number=34,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
    -      name='STORE_FORWARD_APP', index=8, number=65,
    +      name='SERIAL_APP', index=8, number=64,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
    -      name='RANGE_TEST_APP', index=9, number=66,
    +      name='STORE_FORWARD_APP', index=9, number=65,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
    -      name='PRIVATE_APP', index=10, number=256,
    +      name='RANGE_TEST_APP', index=10, number=66,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
    -      name='ATAK_FORWARDER', index=11, number=257,
    +      name='PRIVATE_APP', index=11, number=256,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
    +    _descriptor.EnumValueDescriptor(
    +      name='ATAK_FORWARDER', index=12, number=257,
    +      serialized_options=None,
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
       serialized_start=19,
    -  serialized_end=260,
    +  serialized_end=295,
     )
     _sym_db.RegisterEnumDescriptor(_PORTNUM)
     
    @@ -120,6 +140,7 @@ POSITION_APP = 3
     NODEINFO_APP = 4
     REPLY_APP = 32
     IP_TUNNEL_APP = 33
    +ENVIRONMENTAL_MEASUREMENT_APP = 34
     SERIAL_APP = 64
     STORE_FORWARD_APP = 65
     RANGE_TEST_APP = 66
    diff --git a/docs/meshtastic/remote_hardware_pb2.html b/docs/meshtastic/remote_hardware_pb2.html
    index ccf79da..c591381 100644
    --- a/docs/meshtastic/remote_hardware_pb2.html
    +++ b/docs/meshtastic/remote_hardware_pb2.html
    @@ -5,7 +5,7 @@
     
     
     meshtastic.remote_hardware_pb2 API documentation
    -
    +
     
     
     
    @@ -22,6 +22,7 @@
     

    Module meshtastic.remote_hardware_pb2

    +

    Generated protocol buffer code.

    Expand source code @@ -29,7 +30,7 @@
    # -*- coding: utf-8 -*-
     # Generated by the protocol buffer compiler.  DO NOT EDIT!
     # source: remote_hardware.proto
    -
    +"""Generated protocol buffer code."""
     from google.protobuf import descriptor as _descriptor
     from google.protobuf import message as _message
     from google.protobuf import reflection as _reflection
    @@ -46,6 +47,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
       package='',
       syntax='proto3',
       serialized_options=b'\n\023com.geeksville.meshB\016RemoteHardwareH\003',
    +  create_key=_descriptor._internal_create_key,
       serialized_pb=b'\n\x15remote_hardware.proto\"\xca\x01\n\x0fHardwareMessage\x12\"\n\x03typ\x18\x01 \x01(\x0e\x32\x15.HardwareMessage.Type\x12\x11\n\tgpio_mask\x18\x02 \x01(\x04\x12\x12\n\ngpio_value\x18\x03 \x01(\x04\"l\n\x04Type\x12\t\n\x05UNSET\x10\x00\x12\x0f\n\x0bWRITE_GPIOS\x10\x01\x12\x0f\n\x0bWATCH_GPIOS\x10\x02\x12\x11\n\rGPIOS_CHANGED\x10\x03\x12\x0e\n\nREAD_GPIOS\x10\x04\x12\x14\n\x10READ_GPIOS_REPLY\x10\x05\x42\'\n\x13\x63om.geeksville.meshB\x0eRemoteHardwareH\x03\x62\x06proto3'
     )
     
    @@ -56,31 +58,38 @@ _HARDWAREMESSAGE_TYPE = _descriptor.EnumDescriptor(
       full_name='HardwareMessage.Type',
       filename=None,
       file=DESCRIPTOR,
    +  create_key=_descriptor._internal_create_key,
       values=[
         _descriptor.EnumValueDescriptor(
           name='UNSET', index=0, number=0,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='WRITE_GPIOS', index=1, number=1,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='WATCH_GPIOS', index=2, number=2,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='GPIOS_CHANGED', index=3, number=3,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='READ_GPIOS', index=4, number=4,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
         _descriptor.EnumValueDescriptor(
           name='READ_GPIOS_REPLY', index=5, number=5,
           serialized_options=None,
    -      type=None),
    +      type=None,
    +      create_key=_descriptor._internal_create_key),
       ],
       containing_type=None,
       serialized_options=None,
    @@ -96,6 +105,7 @@ _HARDWAREMESSAGE = _descriptor.Descriptor(
       filename=None,
       file=DESCRIPTOR,
       containing_type=None,
    +  create_key=_descriptor._internal_create_key,
       fields=[
         _descriptor.FieldDescriptor(
           name='typ', full_name='HardwareMessage.typ', index=0,
    @@ -103,21 +113,21 @@ _HARDWAREMESSAGE = _descriptor.Descriptor(
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='gpio_mask', full_name='HardwareMessage.gpio_mask', index=1,
           number=2, type=4, cpp_type=4, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
         _descriptor.FieldDescriptor(
           name='gpio_value', full_name='HardwareMessage.gpio_value', index=2,
           number=3, type=4, cpp_type=4, label=1,
           has_default_value=False, default_value=0,
           message_type=None, enum_type=None, containing_type=None,
           is_extension=False, extension_scope=None,
    -      serialized_options=None, file=DESCRIPTOR),
    +      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
       ],
       extensions=[
       ],
    diff --git a/meshtastic/mesh_pb2.py b/meshtastic/mesh_pb2.py
    index 41c23d5..488f536 100644
    --- a/meshtastic/mesh_pb2.py
    +++ b/meshtastic/mesh_pb2.py
    @@ -21,7 +21,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
       syntax='proto3',
       serialized_options=b'\n\023com.geeksville.meshB\nMeshProtosH\003',
       create_key=_descriptor._internal_create_key,
    -  serialized_pb=b'\n\nmesh.proto\x1a\x0eportnums.proto\"j\n\x08Position\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07\"J\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x07\"\x8e\x02\n\x07Routing\x12(\n\rroute_request\x18\x01 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0broute_reply\x18\x02 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\x0e.Routing.ErrorH\x00\"~\n\x05\x45rror\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08NO_ROUTE\x10\x01\x12\x0b\n\x07GOT_NAK\x10\x02\x12\x0b\n\x07TIMEOUT\x10\x03\x12\x10\n\x0cNO_INTERFACE\x10\x04\x12\x12\n\x0eMAX_RETRANSMIT\x10\x05\x12\x0e\n\nNO_CHANNEL\x10\x06\x12\r\n\tTOO_LARGE\x10\x07\x42\t\n\x07variant\"{\n\x04\x44\x61ta\x12\x19\n\x07portnum\x18\x01 \x01(\x0e\x32\x08.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x15\n\rwant_response\x18\x03 \x01(\x08\x12\x0c\n\x04\x64\x65st\x18\x04 \x01(\x07\x12\x0e\n\x06source\x18\x05 \x01(\x07\x12\x12\n\nrequest_id\x18\x06 \x01(\x07\"\xcf\x02\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x07\x12\n\n\x02to\x18\x02 \x01(\x07\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\r\x12\x18\n\x07\x64\x65\x63oded\x18\x04 \x01(\x0b\x32\x05.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x0f\n\x07rx_time\x18\x07 \x01(\x07\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\n \x01(\r\x12\x10\n\x08want_ack\x18\x0b \x01(\x08\x12&\n\x08priority\x18\x0c \x01(\x0e\x32\x14.MeshPacket.Priority\"[\n\x08Priority\x12\t\n\x05UNSET\x10\x00\x12\x07\n\x03MIN\x10\x01\x12\x0e\n\nBACKGROUND\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10@\x12\x0c\n\x08RELIABLE\x10\x46\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\x42\x10\n\x0epayloadVariant\"h\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\x10\n\x08next_hop\x18\x05 \x01(\r\"\xa6\x02\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x11\n\tnum_bands\x18\x03 \x01(\r\x12\x14\n\x0cmax_channels\x18\x0f \x01(\r\x12\x12\n\x06region\x18\x04 \x01(\tB\x02\x18\x01\x12\x10\n\x08hw_model\x18\x05 \x01(\t\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12&\n\nerror_code\x18\x07 \x01(\x0e\x32\x12.CriticalErrorCode\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\x12\x1c\n\x14message_timeout_msec\x18\r \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0e \x01(\r\"\xb5\x01\n\tLogRecord\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x1f\n\x05level\x18\x04 \x01(\x0e\x32\x10.LogRecord.Level\"X\n\x05Level\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x43RITICAL\x10\x32\x12\t\n\x05\x45RROR\x10(\x12\x0b\n\x07WARNING\x10\x1e\x12\x08\n\x04INFO\x10\x14\x12\t\n\x05\x44\x45\x42UG\x10\n\x12\t\n\x05TRACE\x10\x05\"\xe3\x01\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x0b \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12 \n\nlog_record\x18\x07 \x01(\x0b\x32\n.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x42\x10\n\x0epayloadVariantJ\x04\x08\x02\x10\x03\"Z\n\x07ToRadio\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x42\x10\n\x0epayloadVariantJ\x04\x08\x01\x10\x02*.\n\tConstants\x12\n\n\x06Unused\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xf0\x01*\xaf\x01\n\x11\x43riticalErrorCode\x12\x08\n\x04None\x10\x00\x12\x0e\n\nTxWatchdog\x10\x01\x12\x12\n\x0eSleepEnterWait\x10\x02\x12\x0b\n\x07NoRadio\x10\x03\x12\x0f\n\x0bUnspecified\x10\x04\x12\x13\n\x0fUBloxInitFailed\x10\x05\x12\x0c\n\x08NoAXP192\x10\x06\x12\x17\n\x13InvalidRadioSetting\x10\x07\x12\x12\n\x0eTransmitFailed\x10\x08\x42#\n\x13\x63om.geeksville.meshB\nMeshProtosH\x03\x62\x06proto3'
    +  serialized_pb=b'\n\nmesh.proto\x1a\x0eportnums.proto\"v\n\x08Position\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"J\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x07\"\x8e\x02\n\x07Routing\x12(\n\rroute_request\x18\x01 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0broute_reply\x18\x02 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\x0e.Routing.ErrorH\x00\"~\n\x05\x45rror\x12\x08\n\x04NONE\x10\x00\x12\x0c\n\x08NO_ROUTE\x10\x01\x12\x0b\n\x07GOT_NAK\x10\x02\x12\x0b\n\x07TIMEOUT\x10\x03\x12\x10\n\x0cNO_INTERFACE\x10\x04\x12\x12\n\x0eMAX_RETRANSMIT\x10\x05\x12\x0e\n\nNO_CHANNEL\x10\x06\x12\r\n\tTOO_LARGE\x10\x07\x42\t\n\x07variant\"{\n\x04\x44\x61ta\x12\x19\n\x07portnum\x18\x01 \x01(\x0e\x32\x08.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x15\n\rwant_response\x18\x03 \x01(\x08\x12\x0c\n\x04\x64\x65st\x18\x04 \x01(\x07\x12\x0e\n\x06source\x18\x05 \x01(\x07\x12\x12\n\nrequest_id\x18\x06 \x01(\x07\"\xcf\x02\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x07\x12\n\n\x02to\x18\x02 \x01(\x07\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\r\x12\x18\n\x07\x64\x65\x63oded\x18\x04 \x01(\x0b\x32\x05.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x0f\n\x07rx_time\x18\x07 \x01(\x07\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\n \x01(\r\x12\x10\n\x08want_ack\x18\x0b \x01(\x08\x12&\n\x08priority\x18\x0c \x01(\x0e\x32\x14.MeshPacket.Priority\"[\n\x08Priority\x12\t\n\x05UNSET\x10\x00\x12\x07\n\x03MIN\x10\x01\x12\x0e\n\nBACKGROUND\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10@\x12\x0c\n\x08RELIABLE\x10\x46\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\x42\x10\n\x0epayloadVariant\"h\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\x10\n\x08next_hop\x18\x05 \x01(\r\"\xa6\x02\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x11\n\tnum_bands\x18\x03 \x01(\r\x12\x14\n\x0cmax_channels\x18\x0f \x01(\r\x12\x12\n\x06region\x18\x04 \x01(\tB\x02\x18\x01\x12\x10\n\x08hw_model\x18\x05 \x01(\t\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12&\n\nerror_code\x18\x07 \x01(\x0e\x32\x12.CriticalErrorCode\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\x12\x1c\n\x14message_timeout_msec\x18\r \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0e \x01(\r\"\xb5\x01\n\tLogRecord\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x1f\n\x05level\x18\x04 \x01(\x0e\x32\x10.LogRecord.Level\"X\n\x05Level\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x43RITICAL\x10\x32\x12\t\n\x05\x45RROR\x10(\x12\x0b\n\x07WARNING\x10\x1e\x12\x08\n\x04INFO\x10\x14\x12\t\n\x05\x44\x45\x42UG\x10\n\x12\t\n\x05TRACE\x10\x05\"\xe9\x01\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x0b \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12 \n\nlog_record\x18\x07 \x01(\x0b\x32\n.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x42\x10\n\x0epayloadVariantJ\x04\x08\x02\x10\x03J\x04\x08\x06\x10\x07\"l\n\x07ToRadio\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x42\x10\n\x0epayloadVariantJ\x04\x08\x01\x10\x02J\x04\x08\x65\x10\x66J\x04\x08\x66\x10gJ\x04\x08g\x10h*.\n\tConstants\x12\n\n\x06Unused\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xf0\x01*\xaf\x01\n\x11\x43riticalErrorCode\x12\x08\n\x04None\x10\x00\x12\x0e\n\nTxWatchdog\x10\x01\x12\x12\n\x0eSleepEnterWait\x10\x02\x12\x0b\n\x07NoRadio\x10\x03\x12\x0f\n\x0bUnspecified\x10\x04\x12\x13\n\x0fUBloxInitFailed\x10\x05\x12\x0c\n\x08NoAXP192\x10\x06\x12\x17\n\x13InvalidRadioSetting\x10\x07\x12\x12\n\x0eTransmitFailed\x10\x08\x42#\n\x13\x63om.geeksville.meshB\nMeshProtosH\x03\x62\x06proto3'
       ,
       dependencies=[portnums__pb2.DESCRIPTOR,])
     
    @@ -45,8 +45,8 @@ _CONSTANTS = _descriptor.EnumDescriptor(
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=1892,
    -  serialized_end=1938,
    +  serialized_start=1928,
    +  serialized_end=1974,
     )
     _sym_db.RegisterEnumDescriptor(_CONSTANTS)
     
    @@ -106,8 +106,8 @@ _CRITICALERRORCODE = _descriptor.EnumDescriptor(
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=1941,
    -  serialized_end=2116,
    +  serialized_start=1977,
    +  serialized_end=2152,
     )
     _sym_db.RegisterEnumDescriptor(_CRITICALERRORCODE)
     
    @@ -175,8 +175,8 @@ _ROUTING_ERROR = _descriptor.EnumDescriptor(
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=381,
    -  serialized_end=507,
    +  serialized_start=393,
    +  serialized_end=519,
     )
     _sym_db.RegisterEnumDescriptor(_ROUTING_ERROR)
     
    @@ -225,8 +225,8 @@ _MESHPACKET_PRIORITY = _descriptor.EnumDescriptor(
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=872,
    -  serialized_end=963,
    +  serialized_start=884,
    +  serialized_end=975,
     )
     _sym_db.RegisterEnumDescriptor(_MESHPACKET_PRIORITY)
     
    @@ -275,8 +275,8 @@ _LOGRECORD_LEVEL = _descriptor.EnumDescriptor(
       ],
       containing_type=None,
       serialized_options=None,
    -  serialized_start=1480,
    -  serialized_end=1568,
    +  serialized_start=1492,
    +  serialized_end=1580,
     )
     _sym_db.RegisterEnumDescriptor(_LOGRECORD_LEVEL)
     
    @@ -337,7 +337,7 @@ _POSITION = _descriptor.Descriptor(
       oneofs=[
       ],
       serialized_start=30,
    -  serialized_end=136,
    +  serialized_end=148,
     )
     
     
    @@ -389,8 +389,8 @@ _USER = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=138,
    -  serialized_end=212,
    +  serialized_start=150,
    +  serialized_end=224,
     )
     
     
    @@ -421,8 +421,8 @@ _ROUTEDISCOVERY = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=214,
    -  serialized_end=245,
    +  serialized_start=226,
    +  serialized_end=257,
     )
     
     
    @@ -473,8 +473,8 @@ _ROUTING = _descriptor.Descriptor(
           create_key=_descriptor._internal_create_key,
         fields=[]),
       ],
    -  serialized_start=248,
    -  serialized_end=518,
    +  serialized_start=260,
    +  serialized_end=530,
     )
     
     
    @@ -540,8 +540,8 @@ _DATA = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=520,
    -  serialized_end=643,
    +  serialized_start=532,
    +  serialized_end=655,
     )
     
     
    @@ -648,8 +648,8 @@ _MESHPACKET = _descriptor.Descriptor(
           create_key=_descriptor._internal_create_key,
         fields=[]),
       ],
    -  serialized_start=646,
    -  serialized_end=981,
    +  serialized_start=658,
    +  serialized_end=993,
     )
     
     
    @@ -708,8 +708,8 @@ _NODEINFO = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=983,
    -  serialized_end=1087,
    +  serialized_start=995,
    +  serialized_end=1099,
     )
     
     
    @@ -817,8 +817,8 @@ _MYNODEINFO = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=1090,
    -  serialized_end=1384,
    +  serialized_start=1102,
    +  serialized_end=1396,
     )
     
     
    @@ -871,8 +871,8 @@ _LOGRECORD = _descriptor.Descriptor(
       extension_ranges=[],
       oneofs=[
       ],
    -  serialized_start=1387,
    -  serialized_end=1568,
    +  serialized_start=1399,
    +  serialized_end=1580,
     )
     
     
    @@ -950,8 +950,8 @@ _FROMRADIO = _descriptor.Descriptor(
           create_key=_descriptor._internal_create_key,
         fields=[]),
       ],
    -  serialized_start=1571,
    -  serialized_end=1798,
    +  serialized_start=1583,
    +  serialized_end=1816,
     )
     
     
    @@ -994,8 +994,8 @@ _TORADIO = _descriptor.Descriptor(
           create_key=_descriptor._internal_create_key,
         fields=[]),
       ],
    -  serialized_start=1800,
    -  serialized_end=1890,
    +  serialized_start=1818,
    +  serialized_end=1926,
     )
     
     _ROUTING.fields_by_name['route_request'].message_type = _ROUTEDISCOVERY
    diff --git a/proto b/proto
    index 3edb02d..7de496f 160000
    --- a/proto
    +++ b/proto
    @@ -1 +1 @@
    -Subproject commit 3edb02dabb9b8b72d90bbbb7233b557c09391b87
    +Subproject commit 7de496ffe941f88e9d99c2ef2c7bc01f79efe11e
    diff --git a/setup.py b/setup.py
    index 0307dd5..1f9c74d 100644
    --- a/setup.py
    +++ b/setup.py
    @@ -12,7 +12,11 @@ with open("README.md", "r") as fh:
     # This call to setup() does all the work
     setup(
         name="meshtastic",
    +<<<<<<< HEAD
         version="1.2.00",
    +=======
    +    version="1.1.50",
    +>>>>>>> dev
         description="Python API & client shell for talking to Meshtastic devices",
         long_description=long_description,
         long_description_content_type="text/markdown",