meshtastic 0.0.184 → 0.0.185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +1 -0
- data/Gemfile +2 -1
- data/documentation/README.md +5 -0
- data/documentation/forwarder.md +149 -0
- data/documentation/mesh-interface.md +157 -1
- data/documentation/payload-formats.md +187 -0
- data/documentation/reticulum.md +89 -0
- data/lib/meshtastic/atak.rb +98 -13
- data/lib/meshtastic/atak_pb.rb +3 -1
- data/lib/meshtastic/config_pb.rb +1 -1
- data/lib/meshtastic/field_metadata_pb.rb +1 -1
- data/lib/meshtastic/forwarder.rb +190 -0
- data/lib/meshtastic/forwarder_pb.rb +77 -0
- data/lib/meshtastic/mesh_beacon_pb.rb +1 -1
- data/lib/meshtastic/mesh_interface.rb +115 -65
- data/lib/meshtastic/mesh_pb.rb +2 -1
- data/lib/meshtastic/module_config_pb.rb +1 -1
- data/lib/meshtastic/mqtt.rb +4 -34
- data/lib/meshtastic/payload_compression.rb +90 -0
- data/lib/meshtastic/payload_formats.rb +248 -0
- data/lib/meshtastic/reticulum.rb +71 -0
- data/lib/meshtastic/serial.rb +1 -19
- data/lib/meshtastic/telemetry_pb.rb +2 -2
- data/lib/meshtastic/unishox2.rb +467 -0
- data/lib/meshtastic/version.rb +1 -1
- data/lib/meshtastic.rb +4 -0
- data/meshtastic.gemspec +2 -0
- data/spec/lib/meshtastic/atak_spec.rb +50 -0
- data/spec/lib/meshtastic/bluetooth_spec.rb +14 -0
- data/spec/lib/meshtastic/forwarder_pb_spec.rb +11 -0
- data/spec/lib/meshtastic/forwarder_spec.rb +97 -0
- data/spec/lib/meshtastic/mesh_interface_spec.rb +169 -0
- data/spec/lib/meshtastic/mqtt_spec.rb +56 -0
- data/spec/lib/meshtastic/payload_compression_spec.rb +43 -0
- data/spec/lib/meshtastic/payload_formats_spec.rb +160 -0
- data/spec/lib/meshtastic/reticulum_spec.rb +91 -0
- data/spec/lib/meshtastic/serial_spec.rb +46 -0
- data/spec/lib/meshtastic/tcp_spec.rb +15 -0
- data/spec/lib/meshtastic/unishox2_spec.rb +34 -0
- data/spec/support/payload_fixtures.rb +124 -0
- data/spec/support/reticulum_fixtures.json +12 -0
- data/spec/support/tak_codec_fixtures.rb +4 -0
- data/spec/support/unishox_fixtures.rb +4 -0
- metadata +36 -3
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# Generated descriptor data from paulmandal/libcotshrink
|
|
3
|
+
# Revision: 7d818b0d119a8df291770923b463fbb734b7e1b0
|
|
4
|
+
# MIT License
|
|
5
|
+
#
|
|
6
|
+
# Copyright (c) 2020 paulmandal
|
|
7
|
+
#
|
|
8
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
# of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
# in the Software without restriction, including without limitation the rights
|
|
11
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
# copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
# furnished to do so, subject to the following conditions:
|
|
14
|
+
#
|
|
15
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
# copies or substantial portions of the Software.
|
|
17
|
+
#
|
|
18
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
# SOFTWARE.
|
|
25
|
+
|
|
26
|
+
require 'google/protobuf'
|
|
27
|
+
require 'base64'
|
|
28
|
+
|
|
29
|
+
module Meshtastic
|
|
30
|
+
module ForwarderProtobuf
|
|
31
|
+
POOL = Google::Protobuf::DescriptorPool.new
|
|
32
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChRkZXRhaWwvY29udGFjdC5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIqMBCgdDb250YWN0EhoKCGNhbGxzaWduGAEgASgJUghjYWxsc2lnbhIiCgxlbmRwb2ludEFkZHIYAiABKAdSDGVuZHBvaW50QWRkchIUCgVwaG9uZRgDIAEoCVIFcGhvbmUSIgoMZW1haWxBZGRyZXNzGAQgASgJUgxlbWFpbEFkZHJlc3MSHgoKc2lwQWRkcmVzcxgFIAEoCFIKc2lwQWRkcmVzc0ITQg9Qcm90b2J1ZkNvbnRhY3RIA2IGcHJvdG8z'))
|
|
33
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChFkZXRhaWwvdGFrdi5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzImQKBFRha3YSDgoCb3MYASABKAVSAm9zEhgKB3ZlcnNpb24YAiABKAlSB3ZlcnNpb24SFgoGZGV2aWNlGAMgASgJUgZkZXZpY2USGgoIcGxhdGZvcm0YBCABKAlSCHBsYXRmb3JtQhBCDFByb3RvYnVmVGFrdkgDYgZwcm90bzM='))
|
|
34
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch1kZXRhaWwvdW5kZXJzY29yZV9ncm91cC5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIiUKD1VuZGVyc2NvcmVHcm91cBISCgRuYW1lGAEgASgJUgRuYW1lQhtCF1Byb3RvYnVmVW5kZXJzY29yZUdyb3VwSANiBnByb3RvMw=='))
|
|
35
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChJkZXRhaWwvdHJhY2sucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcyI1CgVUcmFjaxIWCgZjb3Vyc2UYASABKAVSBmNvdXJzZRIUCgVzcGVlZBgCIAEoBVIFc3BlZWRCEUINUHJvdG9idWZUcmFja0gDYgZwcm90bzM='))
|
|
36
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChRkZXRhaWwvcmVtYXJrcy5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIl8KB1JlbWFya3MSGAoHcmVtYXJrcxgBIAEoCVIHcmVtYXJrcxIWCgZzb3VyY2UYAiABKAlSBnNvdXJjZRIOCgJ0bxgDIAEoCVICdG8SEgoEdGltZRgEIAEoDVIEdGltZUITQg9Qcm90b2J1ZlJlbWFya3NIA2IGcHJvdG8z'))
|
|
37
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChlkZXRhaWwvY29tcGxleF9saW5rLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMinwEKC0NvbXBsZXhMaW5rEhAKA3VpZBgBIAEoCVIDdWlkEhIKBHR5cGUYAiABKAlSBHR5cGUSJgoOcGFyZW50Q2FsbHNpZ24YAyABKAlSDnBhcmVudENhbGxzaWduEhoKCHJlbGF0aW9uGAQgASgJUghyZWxhdGlvbhImCg5wcm9kdWN0aW9uVGltZRgFIAEoBVIOcHJvZHVjdGlvblRpbWVCF0ITUHJvdG9idWZDb21wbGV4TGlua0gDYgZwcm90bzM='))
|
|
38
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChpkZXRhaWwvZnJlZWhhbmRfbGluay5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIiIKDEZyZWVoYW5kTGluaxISCgRsaW5lGAEgASgMUgRsaW5lQhhCFFByb3RvYnVmRnJlZWhhbmRMaW5rSANiBnByb3RvMw=='))
|
|
39
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch9kZXRhaWwvc2VydmVyX2Rlc3RpbmF0aW9uLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMiNwoRU2VydmVyRGVzdGluYXRpb24SIgoMZGVzdGluYXRpb25zGAEgASgJUgxkZXN0aW5hdGlvbnNCHUIZUHJvdG9idWZTZXJ2ZXJEZXN0aW5hdGlvbkgDYgZwcm90bzM='))
|
|
40
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChJkZXRhaWwvbW9kZWwucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcyIbCgVNb2RlbBISCgRuYW1lGAEgASgJUgRuYW1lQhFCDVByb3RvYnVmTW9kZWxIA2IGcHJvdG8z'))
|
|
41
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChJkZXRhaWwvY29sb3IucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcyIxCgVDb2xvchISCgRhcmdiGAEgASgFUgRhcmdiEhQKBXZhbHVlGAIgASgFUgV2YWx1ZUIRQg1Qcm90b2J1ZkNvbG9ySANiBnByb3RvMw=='))
|
|
42
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChlkZXRhaWwvZGV0YWlsX3N0eWxlLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMaEmRldGFpbC9jb2xvci5wcm90byK6AQoLRGV0YWlsU3R5bGUSRwoFY29sb3IYASABKAsyMS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuQ29sb3JSBWNvbG9yEiIKDHN0cm9rZVdlaWdodBgCIAEoBVIMc3Ryb2tlV2VpZ2h0EiAKC3N0cm9rZUNvbG9yGAMgASgFUgtzdHJva2VDb2xvchIcCglmaWxsQ29sb3IYBCABKAVSCWZpbGxDb2xvckIXQhNQcm90b2J1ZkRldGFpbFN0eWxlSANiBnByb3RvMw=='))
|
|
43
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChNkZXRhaWwvaGVpZ2h0LnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMiKgoGSGVpZ2h0EiAKC2hlaWdodFZhbHVlGAEgASgFUgtoZWlnaHRWYWx1ZUISQg5Qcm90b2J1ZkhlaWdodEgDYgZwcm90bzM='))
|
|
44
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChpkZXRhaWwvc2hhcGUvZWxsaXBzZS5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIksKB0VsbGlwc2USFAoFbWFqb3IYASABKAVSBW1ham9yEhQKBW1pbm9yGAIgASgFUgVtaW5vchIUCgVhbmdsZRgDIAEoBVIFYW5nbGVCE0IPUHJvdG9idWZFbGxpcHNlSANiBnByb3RvMw=='))
|
|
45
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch1kZXRhaWwvc2hhcGUvbGluZV9zdHlsZS5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIjcKCUxpbmVTdHlsZRIUCgVjb2xvchgBIAEoA1IFY29sb3ISFAoFd2lkdGgYAiABKAVSBXdpZHRoQhVCEVByb3RvYnVmTGluZVN0eWxlSANiBnByb3RvMw=='))
|
|
46
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch1kZXRhaWwvc2hhcGUvcG9seV9zdHlsZS5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIiEKCVBvbHlTdHlsZRIUCgVjb2xvchgBIAEoA1IFY29sb3JCFUIRUHJvdG9idWZQb2x5U3R5bGVIA2IGcHJvdG8z'))
|
|
47
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChhkZXRhaWwvc2hhcGUvc3R5bGUucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxodZGV0YWlsL3NoYXBlL2xpbmVfc3R5bGUucHJvdG8aHWRldGFpbC9zaGFwZS9wb2x5X3N0eWxlLnByb3RvIrEBCgVTdHlsZRJTCglsaW5lU3R5bGUYASABKAsyNS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuTGluZVN0eWxlUglsaW5lU3R5bGUSUwoJcG9seVN0eWxlGAIgASgLMjUuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlBvbHlTdHlsZVIJcG9seVN0eWxlQhFCDVByb3RvYnVmU3R5bGVIA2IGcHJvdG8z'))
|
|
48
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch9kZXRhaWwvc2hhcGUvZWxsaXBzZV9saW5rLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMaGGRldGFpbC9zaGFwZS9zdHlsZS5wcm90byKYAQoLRWxsaXBzZUxpbmsSEAoDdWlkGAEgASgJUgN1aWQSEgoEdHlwZRgCIAEoCVIEdHlwZRIaCghyZWxhdGlvbhgDIAEoCVIIcmVsYXRpb24SRwoFc3R5bGUYBCABKAsyMS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuU3R5bGVSBXN0eWxlQhdCE1Byb3RvYnVmRWxsaXBzZUxpbmtIA2IGcHJvdG8z'))
|
|
49
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChhkZXRhaWwvc2hhcGUvc2hhcGUucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxoaZGV0YWlsL3NoYXBlL2VsbGlwc2UucHJvdG8aH2RldGFpbC9zaGFwZS9lbGxpcHNlX2xpbmsucHJvdG8iowEKBVNoYXBlEk0KB2VsbGlwc2UYASABKAsyMy5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuRWxsaXBzZVIHZWxsaXBzZRJLCgRsaW5rGAIgASgLMjcuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLkVsbGlwc2VMaW5rUgRsaW5rQhFCDVByb3RvYnVmU2hhcGVIA2IGcHJvdG8z'))
|
|
50
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch1kZXRhaWwvc2hhcGUvc2hhcGVfbGluay5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIkEKCVNoYXBlTGluaxIQCgNsYXQYASABKBFSA2xhdBIQCgNsb24YAiABKBFSA2xvbhIQCgNoYWUYAyABKBFSA2hhZUIVQhFQcm90b2J1ZlNoYXBlTGlua0gDYgZwcm90bzM='))
|
|
51
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChhkZXRhaWwvZHJhd25fc2hhcGUucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxodZGV0YWlsL3NoYXBlL3NoYXBlX2xpbmsucHJvdG8iVwoKRHJhd25TaGFwZRJJCgRsaW5rGAEgAygLMjUuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlNoYXBlTGlua1IEbGlua0IWQhJQcm90b2J1ZkRyYXduU2hhcGVIA2IGcHJvdG8z'))
|
|
52
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChNkZXRhaWwvc2Vuc29yLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMiigIKBlNlbnNvchIaCghmb3ZHcmVlbhgBIAEoBVIIZm92R3JlZW4SGAoHZm92Qmx1ZRgCIAEoBVIHZm92Qmx1ZRIWCgZmb3ZSZWQYAyABKAVSBmZvdlJlZBIUCgVyYW5nZRgEIAEoBVIFcmFuZ2USGAoHYXppbXV0aBgFIAEoBVIHYXppbXV0aBI6ChhkaXNwbGF5TWFnbmV0aWNSZWZlcmVuY2UYBiABKAVSGGRpc3BsYXlNYWduZXRpY1JlZmVyZW5jZRIQCgNmb3YYByABKAVSA2ZvdhIYCgdoaWRlRm92GAggASgIUgdoaWRlRm92EhoKCGZvdkFscGhhGAkgASgFUghmb3ZBbHBoYUISQg5Qcm90b2J1ZlNlbnNvckgDYgZwcm90bzM='))
|
|
53
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch1kZXRhaWwvcm91dGUvcm91dGVfbGluay5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIrkBCglSb3V0ZUxpbmsSEAoDdWlkGAEgASgJUgN1aWQSGgoIY2FsbHNpZ24YAiABKAlSCGNhbGxzaWduEhIKBHR5cGUYAyABKAlSBHR5cGUSEAoDbGF0GAQgASgRUgNsYXQSEAoDbG9uGAUgASgRUgNsb24SEAoDaGFlGAYgASgRUgNoYWUSGAoHcmVtYXJrcxgHIAEoCVIHcmVtYXJrcxIaCghyZWxhdGlvbhgIIAEoCVIIcmVsYXRpb25CFUIRUHJvdG9idWZSb3V0ZUxpbmtIA2IGcHJvdG8z'))
|
|
54
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChxkZXRhaWwvcm91dGUvbGlua19hdHRyLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMiOAoITGlua0F0dHISFAoFY29sb3IYASABKA1SBWNvbG9yEhYKBnByZWZpeBgCIAEoCVIGcHJlZml4QhRCEFByb3RvYnVmTGlua0F0dHJIA2IGcHJvdG8z'))
|
|
55
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChpkZXRhaWwvcm91dGUvdHJpZ2dlci5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIjMKB1RyaWdnZXISEgoEbW9kZRgBIAEoCVIEbW9kZRIUCgV2YWx1ZRgCIAEoBVIFdmFsdWVCE0IPUHJvdG9idWZUcmlnZ2VySANiBnByb3RvMw=='))
|
|
56
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChpkZXRhaWwvcm91dGUvbmF2X2N1ZS5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzGhpkZXRhaWwvcm91dGUvdHJpZ2dlci5wcm90byJ9CgZOYXZDdWUSFAoFdm9pY2UYASABKAlSBXZvaWNlEg4KAmlkGAIgASgJUgJpZBJNCgd0cmlnZ2VyGAMgAygLMjMuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlRyaWdnZXJSB3RyaWdnZXJCEkIOUHJvdG9idWZOYXZDdWVIA2IGcHJvdG8z'))
|
|
57
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChtkZXRhaWwvcm91dGUvbmF2X2N1ZXMucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxoaZGV0YWlsL3JvdXRlL25hdl9jdWUucHJvdG8iVwoHTmF2Q3VlcxJMCgduYXZDdWVzGAEgAygLMjIuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLk5hdkN1ZVIHbmF2Q3Vlc0ITQg9Qcm90b2J1Zk5hdkN1ZXNIA2IGcHJvdG8z'))
|
|
58
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch1kZXRhaWwvcm91dGUvcm91dGVfaW5mby5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzGhtkZXRhaWwvcm91dGUvbmF2X2N1ZXMucHJvdG8iWgoJUm91dGVJbmZvEk0KB25hdkN1ZXMYASABKAsyMy5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuTmF2Q3Vlc1IHbmF2Q3Vlc0IVQhFQcm90b2J1ZlJvdXRlSW5mb0gDYgZwcm90bzM='))
|
|
59
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChhkZXRhaWwvcm91dGUvcm91dGUucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxodZGV0YWlsL3JvdXRlL3JvdXRlX2xpbmsucHJvdG8aHGRldGFpbC9yb3V0ZS9saW5rX2F0dHIucHJvdG8aHWRldGFpbC9yb3V0ZS9yb3V0ZV9pbmZvLnByb3RvIvkBCgVSb3V0ZRJJCgRsaW5rGAEgAygLMjUuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlJvdXRlTGlua1IEbGluaxJQCghsaW5rQXR0chgCIAEoCzI0LmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5MaW5rQXR0clIIbGlua0F0dHISUwoJcm91dGVJbmZvGAMgASgLMjUuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlJvdXRlSW5mb1IJcm91dGVJbmZvQhFCDVByb3RvYnVmUm91dGVIA2IGcHJvdG8z'))
|
|
60
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch9kZXRhaWwvZ2VvY2hhdC9jaGF0X2dyb3VwLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMiLQoJQ2hhdEdyb3VwEg4KAmlkGAEgASgJUgJpZBIQCgN1aWQYAiADKAlSA3VpZEIVQhFQcm90b2J1ZkNoYXRHcm91cEgDYgZwcm90bzM='))
|
|
61
|
+
POOL.add_serialized_file(Base64.strict_decode64('CjJkZXRhaWwvZ2VvY2hhdC9oaWVyYXJjaHkvZ3JvdXAvZ3JvdXBfY29udGFjdC5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIjQKDEdyb3VwQ29udGFjdBIQCgN1aWQYASABKAlSA3VpZBISCgRuYW1lGAIgASgJUgRuYW1lQhhCFFByb3RvYnVmR3JvdXBDb250YWN0SANiBnByb3RvMw=='))
|
|
62
|
+
POOL.add_serialized_file(Base64.strict_decode64('CipkZXRhaWwvZ2VvY2hhdC9oaWVyYXJjaHkvZ3JvdXAvZ3JvdXAucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxoyZGV0YWlsL2dlb2NoYXQvaGllcmFyY2h5L2dyb3VwL2dyb3VwX2NvbnRhY3QucHJvdG8iygEKBUdyb3VwEhAKA3VpZBgBIAEoCVIDdWlkEhIKBG5hbWUYAiABKAlSBG5hbWUSUgoHY29udGFjdBgDIAMoCzI4LmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5Hcm91cENvbnRhY3RSB2NvbnRhY3QSRwoFZ3JvdXAYBCABKAsyMS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuR3JvdXBSBWdyb3VwQhFCDVByb3RvYnVmR3JvdXBIA2IGcHJvdG8z'))
|
|
63
|
+
POOL.add_serialized_file(Base64.strict_decode64('CihkZXRhaWwvZ2VvY2hhdC9oaWVyYXJjaHkvaGllcmFyY2h5LnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMaKmRldGFpbC9nZW9jaGF0L2hpZXJhcmNoeS9ncm91cC9ncm91cC5wcm90byJUCglIaWVyYXJjaHkSRwoFZ3JvdXAYASABKAsyMS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuR3JvdXBSBWdyb3VwQhVCEVByb3RvYnVmSGllcmFyY2h5SANiBnByb3RvMw=='))
|
|
64
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChlkZXRhaWwvZ2VvY2hhdC9jaGF0LnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMaH2RldGFpbC9nZW9jaGF0L2NoYXRfZ3JvdXAucHJvdG8aKGRldGFpbC9nZW9jaGF0L2hpZXJhcmNoeS9oaWVyYXJjaHkucHJvdG8i2gIKBENoYXQSFgoGcGFyZW50GAEgASgJUgZwYXJlbnQSHgoKZ3JvdXBPd25lchgCIAEoBVIKZ3JvdXBPd25lchIaCghjaGF0cm9vbRgDIAEoCVIIY2hhdHJvb20SDgoCaWQYBCABKAlSAmlkEiYKDnNlbmRlckNhbGxzaWduGAUgASgJUg5zZW5kZXJDYWxsc2lnbhJTCgljaGF0R3JvdXAYBiABKAsyNS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuQ2hhdEdyb3VwUgljaGF0R3JvdXASUwoJaGllcmFyY2h5GAcgASgLMjUuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLkhpZXJhcmNoeVIJaGllcmFyY2h5EhwKCW1lc3NhZ2VJZBgIIAEoCVIJbWVzc2FnZUlkQhBCDFByb3RvYnVmQ2hhdEgDYgZwcm90bzM='))
|
|
65
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch5kZXRhaWwvZ2VvY2hhdC9jaGF0X2xpbmsucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcyJMCghDaGF0TGluaxIQCgN1aWQYASABKAlSA3VpZBISCgR0eXBlGAIgASgJUgR0eXBlEhoKCHJlbGF0aW9uGAMgASgJUghyZWxhdGlvbkIUQhBQcm90b2J1ZkNoYXRMaW5rSANiBnByb3RvMw=='))
|
|
66
|
+
POOL.add_serialized_file(Base64.strict_decode64('CiNkZXRhaWwvdmlkZW8vY29ubmVjdGlvbl9lbnRyeS5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzIs8CCg9Db25uZWN0aW9uRW50cnkSJgoObmV0d29ya1RpbWVvdXQYASABKAVSDm5ldHdvcmtUaW1lb3V0EhAKA3VpZBgCIAEoCVIDdWlkEhIKBHBhdGgYAyABKAlSBHBhdGgSGgoIcHJvdG9jb2wYBCABKAlSCHByb3RvY29sEh4KCmJ1ZmZlclRpbWUYBSABKAVSCmJ1ZmZlclRpbWUSGAoHYWRkcmVzcxgGIAEoCVIHYWRkcmVzcxISCgRwb3J0GAcgASgFUgRwb3J0EhwKCXJvdmVyUG9ydBgIIAEoEVIJcm92ZXJQb3J0EiIKDHJ0c3BSZWxpYWJsZRgJIAEoBVIMcnRzcFJlbGlhYmxlEiwKEWlnbm9yZUVtYmVkZGVkS0xWGAogASgIUhFpZ25vcmVFbWJlZGRlZEtMVhIUCgVhbGlhcxgLIAEoCVIFYWxpYXNCG0IXUHJvdG9idWZDb25uZWN0aW9uRW50cnlIA2IGcHJvdG8z'))
|
|
67
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChhkZXRhaWwvdmlkZW8vdmlkZW8ucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxojZGV0YWlsL3ZpZGVvL2Nvbm5lY3Rpb25fZW50cnkucHJvdG8ikgEKBVZpZGVvEhAKA3VpZBgBIAEoCVIDdWlkEhAKA3VybBgCIAEoCVIDdXJsEmUKD2Nvbm5lY3Rpb25FbnRyeRgDIAMoCzI7LmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5Db25uZWN0aW9uRW50cnlSD2Nvbm5lY3Rpb25FbnRyeUIRQg1Qcm90b2J1ZlZpZGVvSANiBnByb3RvMw=='))
|
|
68
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChtkZXRhaWwvc2hhcGUvZ2VvZmVuY2UucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcyLpAwoIR2VvRmVuY2USLgoSZWxldmF0aW9uTW9uaXRvcmVkGAEgASgIUhJlbGV2YXRpb25Nb25pdG9yZWQSVgoHbW9uaXRvchgCIAEoDjI8LmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5HZW9GZW5jZS5Nb25pdG9yUgdtb25pdG9yElYKB3RyaWdnZXIYAyABKA4yPC5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuR2VvRmVuY2UuVHJpZ2dlclIHdHJpZ2dlchIaCgh0cmFja2luZxgEIAEoCFIIdHJhY2tpbmcSIgoMbWluRWxldmF0aW9uGAUgASgRUgxtaW5FbGV2YXRpb24SIgoMbWF4RWxldmF0aW9uGAYgASgRUgxtYXhFbGV2YXRpb24SJgoOYm91bmRpbmdTcGhlcmUYByABKAVSDmJvdW5kaW5nU3BoZXJlIigKB1RyaWdnZXISCQoFRU5UUlkQABIICgRFWElUEAESCAoEQk9USBACIkcKB01vbml0b3ISDAoIVEFLVVNFUlMQABIMCghGUklFTkRMWRABEgsKB0hPU1RJTEUQAhIKCgZDVVNUT00QAxIHCgNBTEwQBEIUQhBQcm90b2J1Zkdlb0ZlbmNlSANiBnByb3RvMw=='))
|
|
69
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch5kZXRhaWwvbWVkZXZhYy9mbG93X3RhZ3MucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcyJYCghGbG93VGFncxIuChJhbmRyb2lkTWVkaWNhbExpbmUYASABKAlSEmFuZHJvaWRNZWRpY2FsTGluZRIcCglvYnN0YWNsZXMYAiABKAlSCW9ic3RhY2xlc0IUQhBQcm90b2J1ZkZsb3dUYWdzSANiBnByb3RvMw=='))
|
|
70
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChlkZXRhaWwvbWVkZXZhYy9taXN0LnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMiugEKBE1pc3QSGgoIc3ltcHRvbXMYASABKAlSCHN5bXB0b21zEhwKCXRyZWF0bWVudBgCIAEoCVIJdHJlYXRtZW50EhYKBmluanVyeRgDIAEoCVIGaW5qdXJ5EiwKEW1lY2hhbmlzbU9mSW5qdXJ5GAQgASgJUhFtZWNoYW5pc21PZkluanVyeRIcCgl6YXBOdW1iZXIYBSABKAlSCXphcE51bWJlchIUCgV0aXRsZRgGIAEoCVIFdGl0bGVCEEIMUHJvdG9idWZNaXN0SANiBnByb3RvMw=='))
|
|
71
|
+
POOL.add_serialized_file(Base64.strict_decode64('Ch5kZXRhaWwvbWVkZXZhYy9taXN0c19tYXAucHJvdG8SKmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcxoZZGV0YWlsL21lZGV2YWMvbWlzdC5wcm90byJSCghNaXN0c01hcBJGCgV6TWlzdBgBIAMoCzIwLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5NaXN0UgV6TWlzdEIUQhBQcm90b2J1Zk1pc3RzTWFwSANiBnByb3RvMw=='))
|
|
72
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChxkZXRhaWwvbWVkZXZhYy9tZWRldmFjLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMaHmRldGFpbC9tZWRldmFjL21pc3RzX21hcC5wcm90byKpCgoHTWVkZXZhYxIUCgV0aXRsZRgBIAEoCVIFdGl0bGUSLAoRem9uZVByb3RTZWxlY3Rpb24YAiABKAVSEXpvbmVQcm90U2VsZWN0aW9uEhIKBGZyZXEYAyABKAlSBGZyZXESFgoGdXJnZW50GAQgASgFUgZ1cmdlbnQSGgoIcHJpb3JpdHkYBSABKAVSCHByaW9yaXR5EhgKB3JvdXRpbmUYBiABKAVSB3JvdXRpbmUSFAoFaG9pc3QYByABKAhSBWhvaXN0Eh4KCnZlbnRpbGF0b3IYCCABKAhSCnZlbnRpbGF0b3ISJgoOZXF1aXBtZW50T3RoZXIYCSABKAhSDmVxdWlwbWVudE90aGVyEjAKE2V4dHJhY3Rpb25FcXVpcG1lbnQYCiABKAhSE2V4dHJhY3Rpb25FcXVpcG1lbnQSJAoNZXF1aXBtZW50Tm9uZRgLIAEoCFINZXF1aXBtZW50Tm9uZRIoCg9lcXVpcG1lbnREZXRhaWwYDCABKAlSD2VxdWlwbWVudERldGFpbBIWCgZsaXR0ZXIYDSABKAVSBmxpdHRlchIeCgphbWJ1bGF0b3J5GA4gASgFUgphbWJ1bGF0b3J5EhoKCHNlY3VyaXR5GA8gASgFUghzZWN1cml0eRIeCgpobHpNYXJraW5nGBAgASgFUgpobHpNYXJraW5nEiQKDW5vbnVzQ2l2aWxpYW4YESABKAVSDW5vbnVzQ2l2aWxpYW4SHgoKdXNDaXZpbGlhbhgSIAEoBVIKdXNDaXZpbGlhbhIUCgVjaGlsZBgTIAEoBVIFY2hpbGQSEAoDZXB3GBQgASgFUgNlcHcSHgoKdXNNaWxpdGFyeRgVIAEoBVIKdXNNaWxpdGFyeRIkCg1ub251c01pbGl0YXJ5GBYgASgFUg1ub251c01pbGl0YXJ5EiIKDHRlcnJhaW5TbG9wZRgXIAEoCFIMdGVycmFpblNsb3BlEiIKDHRlcnJhaW5Sb3VnaBgYIAEoCFIMdGVycmFpblJvdWdoEiAKC3RlcnJhaW5Ob25lGBkgASgIUgt0ZXJyYWluTm9uZRIiCgx0ZXJyYWluT3RoZXIYGiABKAhSDHRlcnJhaW5PdGhlchIiCgx0ZXJyYWluTG9vc2UYGyABKAhSDHRlcnJhaW5Mb29zZRIuChJ0ZXJyYWluT3RoZXJEZXRhaWwYHCABKAlSEnRlcnJhaW5PdGhlckRldGFpbBIoCg90ZXJyYWluU2xvcGVEaXIYHSABKAlSD3RlcnJhaW5TbG9wZURpchImCg5tZWRsaW5lUmVtYXJrcxgeIAEoCVIObWVkbGluZVJlbWFya3MSGgoIbWFya2VkQnkYHyABKAlSCG1hcmtlZEJ5EhwKCW9ic3RhY2xlcxggIAEoCVIJb2JzdGFjbGVzEiIKDHdpbmRzQXJlRnJvbRghIAEoCVIMd2luZHNBcmVGcm9tEh4KCmZyaWVuZGxpZXMYIiABKAlSCmZyaWVuZGxpZXMSFAoFZW5lbXkYIyABKAlSBWVuZW15Eh4KCmhselJlbWFya3MYJCABKAlSCmhselJlbWFya3MSGgoIaGx6T3RoZXIYJSABKAlSCGhsek90aGVyEhgKB2Nhc2V2YWMYJiABKAhSB2Nhc2V2YWMSUgoJek1pc3RzTWFwGCcgASgLMjQuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLk1pc3RzTWFwUgl6TWlzdHNNYXBCE0IPUHJvdG9idWZNZWRldmFjSANiBnByb3RvMw=='))
|
|
73
|
+
POOL.add_serialized_file(Base64.strict_decode64('ChNkZXRhaWwvZGV0YWlsLnByb3RvEipjb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMaFGRldGFpbC9jb250YWN0LnByb3RvGhFkZXRhaWwvdGFrdi5wcm90bxodZGV0YWlsL3VuZGVyc2NvcmVfZ3JvdXAucHJvdG8aEmRldGFpbC90cmFjay5wcm90bxoUZGV0YWlsL3JlbWFya3MucHJvdG8aGWRldGFpbC9jb21wbGV4X2xpbmsucHJvdG8aGmRldGFpbC9mcmVlaGFuZF9saW5rLnByb3RvGh9kZXRhaWwvc2VydmVyX2Rlc3RpbmF0aW9uLnByb3RvGhJkZXRhaWwvbW9kZWwucHJvdG8aGWRldGFpbC9kZXRhaWxfc3R5bGUucHJvdG8aE2RldGFpbC9oZWlnaHQucHJvdG8aGGRldGFpbC9zaGFwZS9zaGFwZS5wcm90bxoYZGV0YWlsL2RyYXduX3NoYXBlLnByb3RvGhNkZXRhaWwvc2Vuc29yLnByb3RvGhhkZXRhaWwvcm91dGUvcm91dGUucHJvdG8aGWRldGFpbC9nZW9jaGF0L2NoYXQucHJvdG8aHmRldGFpbC9nZW9jaGF0L2NoYXRfbGluay5wcm90bxoYZGV0YWlsL3ZpZGVvL3ZpZGVvLnByb3RvGhtkZXRhaWwvc2hhcGUvZ2VvZmVuY2UucHJvdG8aHmRldGFpbC9tZWRldmFjL2Zsb3dfdGFncy5wcm90bxocZGV0YWlsL21lZGV2YWMvbWVkZXZhYy5wcm90byLKDQoGRGV0YWlsEk0KB2NvbnRhY3QYASABKAsyMy5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuQ29udGFjdFIHY29udGFjdBJECgR0YWt2GAIgASgLMjAuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlRha3ZSBHRha3YSUQoFZ3JvdXAYAyABKAsyOy5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuVW5kZXJzY29yZUdyb3VwUgVncm91cBJHCgV0cmFjaxgEIAEoCzIxLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5UcmFja1IFdHJhY2sSTQoHcmVtYXJrcxgFIAEoCzIzLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5SZW1hcmtzUgdyZW1hcmtzElkKC2NvbXBsZXhMaW5rGAYgASgLMjcuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLkNvbXBsZXhMaW5rUgtjb21wbGV4TGluaxJQCghjaGF0TGluaxgHIAEoCzI0LmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5DaGF0TGlua1IIY2hhdExpbmsSRAoEY2hhdBgIIAEoCzIwLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5DaGF0UgRjaGF0EmsKEXNlcnZlckRlc3RpbmF0aW9uGAkgASgLMj0uY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlNlcnZlckRlc3RpbmF0aW9uUhFzZXJ2ZXJEZXN0aW5hdGlvbhJHCgVtb2RlbBgKIAEoCzIxLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5Nb2RlbFIFbW9kZWwSWQoLZGV0YWlsU3R5bGUYCyABKAsyNy5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuRGV0YWlsU3R5bGVSC2RldGFpbFN0eWxlEkoKBmhlaWdodBgMIAEoCzIyLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5IZWlnaHRSBmhlaWdodBIgCgtpY29uU2V0UGF0aBgNIAEoCVILaWNvblNldFBhdGgSRwoFc2hhcGUYDiABKAsyMS5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuU2hhcGVSBXNoYXBlElYKCmRyYXduU2hhcGUYDyABKAsyNi5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuRHJhd25TaGFwZVIKZHJhd25TaGFwZRJHCgVyb3V0ZRgQIAEoCzIxLmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5Sb3V0ZVIFcm91dGUSSgoGc2Vuc29yGBEgASgLMjIuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlNlbnNvclIGc2Vuc29yEkcKBXZpZGVvGBIgASgLMjEuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLlZpZGVvUgV2aWRlbxJQCghnZW9GZW5jZRgTIAEoCzI0LmNvbS5wYXVsbWFuZGFsLmF0YWsubGliY290c2hyaW5rLnByb3RvYnVmcy5HZW9GZW5jZVIIZ2VvRmVuY2USXAoMZnJlZWhhbmRMaW5rGBQgASgLMjguY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLkZyZWVoYW5kTGlua1IMZnJlZWhhbmRMaW5rElAKCGZsb3dUYWdzGBUgASgLMjQuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLkZsb3dUYWdzUghmbG93VGFncxJNCgdtZWRldmFjGBYgASgLMjMuY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzLk1lZGV2YWNSB21lZGV2YWNCEkIOUHJvdG9idWZEZXRhaWxIA2IGcHJvdG8z'))
|
|
74
|
+
POOL.add_serialized_file(Base64.strict_decode64('Cg5jb3RldmVudC5wcm90bxIqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzGhNkZXRhaWwvZGV0YWlsLnByb3RvIooCCghDb3RFdmVudBIQCgN1aWQYASABKAlSA3VpZBISCgR0eXBlGAIgASgJUgR0eXBlEhAKA2xhdBgDIAEoEVIDbGF0EhAKA2xvbhgEIAEoEVIDbG9uEg4KAmNlGAUgASgFUgJjZRIOCgJsZRgGIAEoBVICbGUSIAoLY3VzdG9tQnl0ZXMYByABKAZSC2N1c3RvbUJ5dGVzEiYKDmN1c3RvbUJ5dGVzRXh0GAggASgGUg5jdXN0b21CeXRlc0V4dBJKCgZkZXRhaWwYCSABKAsyMi5jb20ucGF1bG1hbmRhbC5hdGFrLmxpYmNvdHNocmluay5wcm90b2J1ZnMuRGV0YWlsUgZkZXRhaWxCQAoqY29tLnBhdWxtYW5kYWwuYXRhay5saWJjb3RzaHJpbmsucHJvdG9idWZzQhBQcm90b2J1ZkNvdEV2ZW50SANiBnByb3RvMw=='))
|
|
75
|
+
CotEvent = POOL.lookup('com.paulmandal.atak.libcotshrink.protobufs.CotEvent').msgclass
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -8,7 +8,7 @@ require 'meshtastic/channel_pb'
|
|
|
8
8
|
require 'meshtastic/config_pb'
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
descriptor_data = "\n\x1cmeshtastic/mesh_beacon.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\"\
|
|
11
|
+
descriptor_data = "\n\x1cmeshtastic/mesh_beacon.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\"\xa4\x02\n\nMeshBeacon\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x32\n\roffer_channel\x18\x02 \x01(\x0b\x32\x1b.meshtastic.ChannelSettings\x12>\n\x0coffer_region\x18\x03 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12\x44\n\x0coffer_preset\x18\x04 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPresetH\x00\x88\x01\x01\x12!\n\x14offer_frequency_slot\x18\x05 \x01(\rH\x01\x88\x01\x01\x42\x0f\n\r_offer_presetB\x17\n\x15_offer_frequency_slotBf\n\x14org.meshtastic.protoB\x10MeshBeaconProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
|
|
12
12
|
|
|
13
13
|
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
14
14
|
pool.add_serialized_file(descriptor_data)
|
|
@@ -5,6 +5,24 @@ require 'meshtastic/mesh_pb'
|
|
|
5
5
|
# Plugin used to interact with Meshtastic nodes
|
|
6
6
|
module Meshtastic
|
|
7
7
|
class MeshInterface
|
|
8
|
+
# Wire schemas, not similarly named transport/status messages.
|
|
9
|
+
PROTOBUF_PAYLOADS = {
|
|
10
|
+
REMOTE_HARDWARE_APP: HardwareMessage, POSITION_APP: Position, NODEINFO_APP: User,
|
|
11
|
+
ROUTING_APP: Routing, ADMIN_APP: AdminMessage, WAYPOINT_APP: Waypoint,
|
|
12
|
+
KEY_VERIFICATION_APP: KeyVerification, REMOTE_SHELL_APP: RemoteShell,
|
|
13
|
+
PAXCOUNTER_APP: Paxcount, STORE_FORWARD_PLUSPLUS_APP: StoreForwardPlusPlus,
|
|
14
|
+
NODE_STATUS_APP: StatusMessage, MESH_BEACON_APP: MeshBeacon,
|
|
15
|
+
STORE_FORWARD_APP: StoreAndForward, TELEMETRY_APP: Telemetry,
|
|
16
|
+
SIMULATOR_APP: Compressed, TRACEROUTE_APP: RouteDiscovery,
|
|
17
|
+
NEIGHBORINFO_APP: NeighborInfo, ATAK_PLUGIN: TAKPacket, MAP_REPORT_APP: MapReport,
|
|
18
|
+
POWERSTRESS_APP: PowerStressMessage, LORAWAN_BRIDGE: LoRaWANBridge, ATAK_PLUGIN_V2: TAKPacketV2
|
|
19
|
+
}.freeze
|
|
20
|
+
TEXT_PAYLOADS = %i[TEXT_MESSAGE_APP DETECTION_SENSOR_APP ALERT_APP REPLY_APP RANGE_TEST_APP].freeze
|
|
21
|
+
BINARY_PAYLOADS = %i[TEXT_MESSAGE_COMPRESSED_APP AUDIO_APP IP_TUNNEL_APP ZPS_APP
|
|
22
|
+
CAYENNE_APP LORA_OTA_APP ATAK_FORWARDER RETICULUM_TUNNEL_APP].freeze
|
|
23
|
+
# No guessed protobuf decoding for application-owned or undefined bytes.
|
|
24
|
+
RAW_PAYLOADS = %i[UNKNOWN_APP PAGING_APP SERIAL_APP GROUPALARM_APP MAX].freeze
|
|
25
|
+
|
|
8
26
|
attr_accessor :acknowledgment,
|
|
9
27
|
:config_id,
|
|
10
28
|
:current_packet_id,
|
|
@@ -432,76 +450,53 @@ module Meshtastic
|
|
|
432
450
|
end
|
|
433
451
|
|
|
434
452
|
# Supported Method Parameters::
|
|
435
|
-
# Meshtastic::
|
|
436
|
-
# payload: 'required -
|
|
453
|
+
# Meshtastic::MeshInterface.decode_payload(
|
|
454
|
+
# payload: 'required - bytes to decode; nil decodes known proto3 defaults; unknown absent payload remains nil',
|
|
437
455
|
# msg_type: 'required - message type (e.g. :TEXT_MESSAGE_APP)',
|
|
438
456
|
# gps_metadata: 'optional - include GPS metadata in output (default: false)',
|
|
439
457
|
# )
|
|
440
458
|
|
|
441
459
|
def decode_payload(opts = {})
|
|
460
|
+
decode_application_payload(opts.merge(simulator_depth: 0))
|
|
461
|
+
end
|
|
462
|
+
|
|
463
|
+
def decode_application_payload(opts = {})
|
|
442
464
|
payload = opts[:payload]
|
|
443
465
|
msg_type = opts[:msg_type]
|
|
444
466
|
gps_metadata = opts[:gps_metadata]
|
|
445
467
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
# when :REPLY_APP
|
|
477
|
-
# decoder = Meshtastic::Reply
|
|
478
|
-
when :ROUTING_APP
|
|
479
|
-
decoder = Meshtastic::Routing
|
|
480
|
-
when :SERIAL_APP
|
|
481
|
-
decoder = Meshtastic::SerialConnectionStatus
|
|
482
|
-
when :SIMULATOR_APP
|
|
483
|
-
decoder = Meshtastic::Compressed
|
|
484
|
-
when :STORE_FORWARD_APP
|
|
485
|
-
decoder = Meshtastic::StoreAndForward
|
|
486
|
-
when :TELEMETRY_APP
|
|
487
|
-
decoder = Meshtastic::Telemetry
|
|
488
|
-
when :TEXT_MESSAGE_APP
|
|
489
|
-
return payload.dup.force_encoding(Encoding::UTF_8).scrub
|
|
490
|
-
when :UNKNOWN_APP
|
|
491
|
-
decoder = Meshtastic::Data
|
|
492
|
-
when :TRACEROUTE_APP
|
|
493
|
-
decoder = Meshtastic::RouteDiscovery
|
|
494
|
-
when :WAYPOINT_APP
|
|
495
|
-
decoder = Meshtastic::Waypoint
|
|
496
|
-
# when :ZPS_APP
|
|
497
|
-
# decoder = Meshtastic::Zps
|
|
498
|
-
else
|
|
499
|
-
puts "WARNING: Can't decode\n#{payload.inspect}\nw/ portnum: #{msg_type}"
|
|
500
|
-
return payload
|
|
468
|
+
msg_type = Meshtastic::PortNum.lookup(msg_type) || msg_type if msg_type.is_a?(Integer)
|
|
469
|
+
decoder = PROTOBUF_PAYLOADS[msg_type]
|
|
470
|
+
return (payload || '').dup.force_encoding(Encoding::UTF_8).scrub if TEXT_PAYLOADS.include?(msg_type)
|
|
471
|
+
return nil if payload.nil? && !decoder
|
|
472
|
+
|
|
473
|
+
return Meshtastic::Unishox2.decode(payload: payload) if msg_type == :TEXT_MESSAGE_COMPRESSED_APP
|
|
474
|
+
return Meshtastic::Forwarder.decode_packet(payload: payload) if msg_type == :ATAK_FORWARDER
|
|
475
|
+
return Meshtastic::Reticulum.decode_packet(payload: payload) if msg_type == :RETICULUM_TUNNEL_APP
|
|
476
|
+
return Meshtastic::PayloadFormats.decode(portnum: msg_type, payload: payload) if Meshtastic::PayloadFormats::PORTS.key?(msg_type)
|
|
477
|
+
|
|
478
|
+
return payload unless decoder
|
|
479
|
+
|
|
480
|
+
# Retain the next wrapper unchanged once eight simulator layers are decoded.
|
|
481
|
+
return payload if msg_type == :SIMULATOR_APP && opts[:simulator_depth] >= 8
|
|
482
|
+
|
|
483
|
+
payload ||= ''.b
|
|
484
|
+
payload = case msg_type
|
|
485
|
+
when :ATAK_PLUGIN
|
|
486
|
+
Meshtastic::ATAK.decode(portnum: msg_type, payload: payload).to_h
|
|
487
|
+
when :ATAK_PLUGIN_V2
|
|
488
|
+
payload.empty? ? {} : Meshtastic::ATAK.decode_v2(payload: payload).to_h
|
|
489
|
+
else
|
|
490
|
+
decoder.decode(payload).to_h
|
|
491
|
+
end
|
|
492
|
+
if msg_type == :SIMULATOR_APP
|
|
493
|
+
data = decode_application_payload(
|
|
494
|
+
payload: payload[:data], msg_type: payload.fetch(:portnum, 0),
|
|
495
|
+
gps_metadata: gps_metadata, simulator_depth: opts[:simulator_depth] + 1
|
|
496
|
+
)
|
|
497
|
+
payload[:data] = data unless data.nil?
|
|
501
498
|
end
|
|
502
499
|
|
|
503
|
-
payload = decoder.decode(payload).to_h
|
|
504
|
-
|
|
505
500
|
if payload.keys.include?(:latitude_i)
|
|
506
501
|
lat = payload[:latitude_i] * 0.0000001
|
|
507
502
|
payload[:latitude] = lat
|
|
@@ -542,11 +537,57 @@ module Meshtastic
|
|
|
542
537
|
end
|
|
543
538
|
|
|
544
539
|
payload
|
|
545
|
-
rescue
|
|
546
|
-
|
|
547
|
-
payload
|
|
548
|
-
|
|
549
|
-
|
|
540
|
+
rescue StandardError
|
|
541
|
+
# A malformed or unavailable application codec must not stop reception.
|
|
542
|
+
opts[:payload]
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
private :decode_application_payload
|
|
546
|
+
|
|
547
|
+
# Decode only the selected channel key; never reinterpret PKI as PSK crypto.
|
|
548
|
+
# AES-CTR parsing is not authentication or proof of origin.
|
|
549
|
+
def decrypt_packet(opts = {})
|
|
550
|
+
message = opts[:message]
|
|
551
|
+
return message if message[:decoded] || !message.key?(:encrypted)
|
|
552
|
+
|
|
553
|
+
if message[:pki_encrypted]
|
|
554
|
+
message[:decryption_error] = 'PKI ciphertext requires device-owned private keys'
|
|
555
|
+
return message
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
channel = opts[:channel]
|
|
559
|
+
psks = opts[:psks] || {}
|
|
560
|
+
psk = psks[channel] || psks[channel.to_s] || psks[channel.to_s.to_sym] unless channel.nil?
|
|
561
|
+
if channel.nil?
|
|
562
|
+
# Encrypted radio packets carry an eight-bit name/key XOR hash, not a slot.
|
|
563
|
+
candidates = psks.select do |name, value|
|
|
564
|
+
bytes = Base64.strict_decode64(value)
|
|
565
|
+
[16, 32].include?(bytes.bytesize) && (name.to_s.bytes + bytes.bytes).reduce(0, :^) == message.fetch(:channel, 0)
|
|
566
|
+
rescue ArgumentError
|
|
567
|
+
false
|
|
568
|
+
end
|
|
569
|
+
psk = candidates.values.first if candidates.size == 1
|
|
570
|
+
end
|
|
571
|
+
unless psk
|
|
572
|
+
message[:decryption_error] = 'No PSK for the selected channel'
|
|
573
|
+
return message
|
|
574
|
+
end
|
|
575
|
+
|
|
576
|
+
key = Base64.strict_decode64(psk)
|
|
577
|
+
raise ArgumentError, 'PSK must contain 16 or 32 bytes' unless [16, 32].include?(key.bytesize)
|
|
578
|
+
|
|
579
|
+
cipher = OpenSSL::Cipher.new(key.bytesize == 32 ? 'AES-256-CTR' : 'AES-128-CTR')
|
|
580
|
+
cipher.decrypt
|
|
581
|
+
cipher.key = key
|
|
582
|
+
cipher.iv = [message.fetch(:id, 0), 0, message.fetch(:from, 0), 0].pack('V4')
|
|
583
|
+
ciphertext = message[:encrypted]
|
|
584
|
+
plaintext = (ciphertext.empty? ? ''.b : cipher.update(ciphertext)) + cipher.final
|
|
585
|
+
message[:decoded] = Meshtastic::Data.decode(plaintext).to_h
|
|
586
|
+
message[:encrypted] = :decrypted
|
|
587
|
+
message
|
|
588
|
+
rescue ArgumentError, OpenSSL::Cipher::CipherError, Google::Protobuf::ParseError
|
|
589
|
+
message[:decryption_error] = 'Unable to decode with the selected channel PSK'
|
|
590
|
+
message
|
|
550
591
|
end
|
|
551
592
|
|
|
552
593
|
# Author(s):: 0day Inc. <support@0dayinc.com>
|
|
@@ -612,12 +653,21 @@ module Meshtastic
|
|
|
612
653
|
psks: 'optional - hash of :channel => psk key value pairs (default: { LongFast: \"AQ==\" })'
|
|
613
654
|
)
|
|
614
655
|
|
|
656
|
+
# Binary codecs: Unishox2, ATAK V1/V2, Forwarder, Reticulum and PayloadFormats.
|
|
657
|
+
# EXI unsupported; fragments are not automatically grouped.
|
|
658
|
+
# PCM and experimental ZPS profiles require the direct PayloadFormats API.
|
|
615
659
|
#{self}.decode_payload(
|
|
616
|
-
payload: 'required -
|
|
660
|
+
payload: 'required - bytes to decode; nil decodes known proto3 defaults; unknown absent payload remains nil',
|
|
617
661
|
msg_type: 'required - message type (e.g. :TEXT_MESSAGE_APP)',
|
|
618
662
|
gps_metadata: 'optional - include GPS metadata in output (default: false)',
|
|
619
663
|
)
|
|
620
664
|
|
|
665
|
+
#{self}.decrypt_packet(
|
|
666
|
+
message: 'required - decoded MeshPacket hash, updated in place',
|
|
667
|
+
psks: 'required - channel names mapped to full Base64 AES keys',
|
|
668
|
+
channel: 'optional - exact MQTT channel name; omitted selects unique radio channel hash'
|
|
669
|
+
)
|
|
670
|
+
|
|
621
671
|
#{self}.authors
|
|
622
672
|
"
|
|
623
673
|
end
|
data/lib/meshtastic/mesh_pb.rb
CHANGED
|
@@ -13,7 +13,7 @@ require 'meshtastic/telemetry_pb'
|
|
|
13
13
|
require 'meshtastic/xmodem_pb'
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
descriptor_data = "\n\x15meshtastic/mesh.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1ameshtastic/device_ui.proto\x1a\x1emeshtastic/module_config.proto\x1a\x19meshtastic/portnums.proto\x1a\x1ameshtastic/telemetry.proto\x1a\x17meshtastic/xmodem.proto\"\x87\x07\n\x08Position\x12\x17\n\nlatitude_i\x18\x01 \x01(\x0fH\x00\x88\x01\x01\x12\x18\n\x0blongitude_i\x18\x02 \x01(\x0fH\x01\x88\x01\x01\x12\x15\n\x08\x61ltitude\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x0c\n\x04time\x18\x04 \x01(\x07\x12\x37\n\x0flocation_source\x18\x05 \x01(\x0e\x32\x1e.meshtastic.Position.LocSource\x12\x37\n\x0f\x61ltitude_source\x18\x06 \x01(\x0e\x32\x1e.meshtastic.Position.AltSource\x12\x11\n\ttimestamp\x18\x07 \x01(\x07\x12\x1f\n\x17timestamp_millis_adjust\x18\x08 \x01(\x05\x12\x19\n\x0c\x61ltitude_hae\x18\t \x01(\x11H\x03\x88\x01\x01\x12(\n\x1b\x61ltitude_geoidal_separation\x18\n \x01(\x11H\x04\x88\x01\x01\x12\x0c\n\x04PDOP\x18\x0b \x01(\r\x12\x0c\n\x04HDOP\x18\x0c \x01(\r\x12\x0c\n\x04VDOP\x18\r \x01(\r\x12\x14\n\x0cgps_accuracy\x18\x0e \x01(\r\x12\x19\n\x0cground_speed\x18\x0f \x01(\rH\x05\x88\x01\x01\x12\x19\n\x0cground_track\x18\x10 \x01(\rH\x06\x88\x01\x01\x12\x13\n\x0b\x66ix_quality\x18\x11 \x01(\r\x12\x10\n\x08\x66ix_type\x18\x12 \x01(\r\x12\x14\n\x0csats_in_view\x18\x13 \x01(\r\x12\x11\n\tsensor_id\x18\x14 \x01(\r\x12\x13\n\x0bnext_update\x18\x15 \x01(\r\x12\x12\n\nseq_number\x18\x16 \x01(\r\x12\x16\n\x0eprecision_bits\x18\x17 \x01(\r\"N\n\tLocSource\x12\r\n\tLOC_UNSET\x10\x00\x12\x0e\n\nLOC_MANUAL\x10\x01\x12\x10\n\x0cLOC_INTERNAL\x10\x02\x12\x10\n\x0cLOC_EXTERNAL\x10\x03\"b\n\tAltSource\x12\r\n\tALT_UNSET\x10\x00\x12\x0e\n\nALT_MANUAL\x10\x01\x12\x10\n\x0c\x41LT_INTERNAL\x10\x02\x12\x10\n\x0c\x41LT_EXTERNAL\x10\x03\x12\x12\n\x0e\x41LT_BAROMETRIC\x10\x04\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_iB\x0b\n\t_altitudeB\x0f\n\r_altitude_haeB\x1e\n\x1c_altitude_geoidal_separationB\x0f\n\r_ground_speedB\x0f\n\r_ground_track\"\x8a\x02\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\x13\n\x07macaddr\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12+\n\x08hw_model\x18\x05 \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x13\n\x0bis_licensed\x18\x06 \x01(\x08\x12\x32\n\x04role\x18\x07 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12\x12\n\npublic_key\x18\x08 \x01(\x0c\x12\x1c\n\x0fis_unmessagable\x18\t \x01(\x08H\x00\x88\x01\x01\x42\x12\n\x10_is_unmessagable\"Z\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x01 \x03(\x07\x12\x13\n\x0bsnr_towards\x18\x02 \x03(\x05\x12\x12\n\nroute_back\x18\x03 \x03(\x07\x12\x10\n\x08snr_back\x18\x04 \x03(\x05\"\xac\x04\n\x07Routing\x12\x33\n\rroute_request\x18\x01 \x01(\x0b\x32\x1a.meshtastic.RouteDiscoveryH\x00\x12\x31\n\x0broute_reply\x18\x02 \x01(\x0b\x32\x1a.meshtastic.RouteDiscoveryH\x00\x12\x31\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\x19.meshtastic.Routing.ErrorH\x00\x12\x11\n\tack_proof\x18\x04 \x01(\x0c\"\xe7\x02\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\x12\x0f\n\x0bNO_RESPONSE\x10\x08\x12\x14\n\x10\x44UTY_CYCLE_LIMIT\x10\t\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10 \x12\x12\n\x0eNOT_AUTHORIZED\x10!\x12\x0e\n\nPKI_FAILED\x10\"\x12\x16\n\x12PKI_UNKNOWN_PUBKEY\x10#\x12\x19\n\x15\x41\x44MIN_BAD_SESSION_KEY\x10$\x12!\n\x1d\x41\x44MIN_PUBLIC_KEY_UNAUTHORIZED\x10%\x12\x17\n\x13RATE_LIMIT_EXCEEDED\x10&\x12\x1c\n\x18PKI_SEND_FAIL_PUBLIC_KEY\x10\'B\t\n\x07variant\"\xe5\x01\n\x04\x44\x61ta\x12$\n\x07portnum\x18\x01 \x01(\x0e\x32\x13.meshtastic.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\x12\x10\n\x08reply_id\x18\x07 \x01(\x07\x12\r\n\x05\x65moji\x18\x08 \x01(\x07\x12\x15\n\x08\x62itfield\x18\t \x01(\rH\x00\x88\x01\x01\x12\x18\n\x10xeddsa_signature\x18\n \x01(\x0c\x42\x0b\n\t_bitfield\">\n\x0fKeyVerification\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\r\n\x05hash1\x18\x02 \x01(\x0c\x12\r\n\x05hash2\x18\x03 \x01(\x0c\"\xcb\x03\n\x14StoreForwardPlusPlus\x12M\n\x11sfpp_message_type\x18\x01 \x01(\x0e\x32\x32.meshtastic.StoreForwardPlusPlus.SFPP_message_type\x12\x14\n\x0cmessage_hash\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63ommit_hash\x18\x03 \x01(\x0c\x12\x11\n\troot_hash\x18\x04 \x01(\x0c\x12\x0f\n\x07message\x18\x05 \x01(\x0c\x12\x17\n\x0f\x65ncapsulated_id\x18\x06 \x01(\r\x12\x17\n\x0f\x65ncapsulated_to\x18\x07 \x01(\r\x12\x19\n\x11\x65ncapsulated_from\x18\x08 \x01(\r\x12\x1b\n\x13\x65ncapsulated_rxtime\x18\t \x01(\r\x12\x13\n\x0b\x63hain_count\x18\n \x01(\r\"\x95\x01\n\x11SFPP_message_type\x12\x12\n\x0e\x43\x41NON_ANNOUNCE\x10\x00\x12\x0f\n\x0b\x43HAIN_QUERY\x10\x01\x12\x10\n\x0cLINK_REQUEST\x10\x03\x12\x10\n\x0cLINK_PROVIDE\x10\x04\x12\x1a\n\x16LINK_PROVIDE_FIRSTHALF\x10\x05\x12\x1b\n\x17LINK_PROVIDE_SECONDHALF\x10\x06\"\xe3\x02\n\x0bRemoteShell\x12*\n\x02op\x18\x01 \x01(\x0e\x32\x1e.meshtastic.RemoteShell.OpCode\x12\x12\n\nsession_id\x18\x02 \x01(\r\x12\x0b\n\x03seq\x18\x03 \x01(\r\x12\x0f\n\x07\x61\x63k_seq\x18\x04 \x01(\r\x12\x0f\n\x07payload\x18\x05 \x01(\x0c\x12\x0c\n\x04\x63ols\x18\x06 \x01(\r\x12\x0c\n\x04rows\x18\x07 \x01(\r\x12\r\n\x05\x66lags\x18\x08 \x01(\r\x12\x13\n\x0blast_tx_seq\x18\t \x01(\r\x12\x13\n\x0blast_rx_seq\x18\n \x01(\r\"\x8f\x01\n\x06OpCode\x12\x0c\n\x08OP_UNSET\x10\x00\x12\x08\n\x04OPEN\x10\x01\x12\t\n\x05INPUT\x10\x02\x12\n\n\x06RESIZE\x10\x03\x12\t\n\x05\x43LOSE\x10\x04\x12\x08\n\x04PING\x10\x05\x12\x07\n\x03\x41\x43K\x10\x06\x12\x0b\n\x07OPEN_OK\x10@\x12\n\n\x06OUTPUT\x10\x41\x12\n\n\x06\x43LOSED\x10\x42\x12\t\n\x05\x45RROR\x10\x43\x12\x08\n\x04PONG\x10\x44\"u\n\x0b\x42oundingBox\x12\x18\n\x10longitude_west_i\x18\x01 \x01(\x0f\x12\x18\n\x10latitude_south_i\x18\x02 \x01(\x0f\x12\x18\n\x10longitude_east_i\x18\x03 \x01(\x0f\x12\x18\n\x10latitude_north_i\x18\x04 \x01(\x0f\"\xea\x02\n\x08Waypoint\x12\n\n\x02id\x18\x01 \x01(\r\x12\x17\n\nlatitude_i\x18\x02 \x01(\x0fH\x00\x88\x01\x01\x12\x18\n\x0blongitude_i\x18\x03 \x01(\x0fH\x01\x88\x01\x01\x12\x0e\n\x06\x65xpire\x18\x04 \x01(\r\x12\x11\n\tlocked_to\x18\x05 \x01(\r\x12\x0c\n\x04name\x18\x06 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x0c\n\x04icon\x18\x08 \x01(\x07\x12\x17\n\x0fgeofence_radius\x18\t \x01(\r\x12\x32\n\x0c\x62ounding_box\x18\n \x01(\x0b\x32\x17.meshtastic.BoundingBoxH\x02\x88\x01\x01\x12\x17\n\x0fnotify_on_enter\x18\x0b \x01(\x08\x12\x16\n\x0enotify_on_exit\x18\x0c \x01(\x08\x12\x1d\n\x15notify_favorites_only\x18\r \x01(\x08\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_iB\x0f\n\r_bounding_box\"\x1f\n\rStatusMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\"l\n\x16MqttClientProxyMessage\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x12\x0e\n\x04text\x18\x03 \x01(\tH\x00\x12\x10\n\x08retained\x18\x04 \x01(\x08\x42\x11\n\x0fpayload_variant\"\x89\x08\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#\n\x07\x64\x65\x63oded\x18\x04 \x01(\x0b\x32\x10.meshtastic.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x14\n\x07rx_time\x18\x07 \x01(\x07H\x01\x88\x01\x01\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\t \x01(\r\x12\x10\n\x08want_ack\x18\n \x01(\x08\x12\x31\n\x08priority\x18\x0b \x01(\x0e\x32\x1f.meshtastic.MeshPacket.Priority\x12\x14\n\x07rx_rssi\x18\x0c \x01(\x05H\x02\x88\x01\x01\x12\x33\n\x07\x64\x65layed\x18\r \x01(\x0e\x32\x1e.meshtastic.MeshPacket.DelayedB\x02\x18\x01\x12\x10\n\x08via_mqtt\x18\x0e \x01(\x08\x12\x11\n\thop_start\x18\x0f \x01(\r\x12\x12\n\npublic_key\x18\x10 \x01(\x0c\x12\x15\n\rpki_encrypted\x18\x11 \x01(\x08\x12\x10\n\x08next_hop\x18\x12 \x01(\r\x12\x12\n\nrelay_node\x18\x13 \x01(\r\x12\x10\n\x08tx_after\x18\x14 \x01(\r\x12\x46\n\x13transport_mechanism\x18\x15 \x01(\x0e\x32).meshtastic.MeshPacket.TransportMechanism\x12\x15\n\rxeddsa_signed\x18\x16 \x01(\x08\"~\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\x0c\n\x08RESPONSE\x10P\x12\x08\n\x04HIGH\x10\x64\x12\t\n\x05\x41LERT\x10n\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\"B\n\x07\x44\x65layed\x12\x0c\n\x08NO_DELAY\x10\x00\x12\x15\n\x11\x44\x45LAYED_BROADCAST\x10\x01\x12\x12\n\x0e\x44\x45LAYED_DIRECT\x10\x02\"\xea\x01\n\x12TransportMechanism\x12\x16\n\x12TRANSPORT_INTERNAL\x10\x00\x12\x12\n\x0eTRANSPORT_LORA\x10\x01\x12\x17\n\x13TRANSPORT_LORA_ALT1\x10\x02\x12\x17\n\x13TRANSPORT_LORA_ALT2\x10\x03\x12\x17\n\x13TRANSPORT_LORA_ALT3\x10\x04\x12\x12\n\x0eTRANSPORT_MQTT\x10\x05\x12\x1b\n\x17TRANSPORT_MULTICAST_UDP\x10\x06\x12\x11\n\rTRANSPORT_API\x10\x07\x12\x19\n\x15TRANSPORT_UNICAST_UDP\x10\x08\x42\x11\n\x0fpayload_variantB\n\n\x08_rx_timeB\n\n\x08_rx_rssi\"\x93\x03\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1e\n\x04user\x18\x02 \x01(\x0b\x32\x10.meshtastic.User\x12&\n\x08position\x18\x03 \x01(\x0b\x32\x14.meshtastic.Position\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12\x31\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\x19.meshtastic.DeviceMetrics\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08via_mqtt\x18\x08 \x01(\x08\x12\x16\n\thops_away\x18\t \x01(\rH\x00\x88\x01\x01\x12\x13\n\x0bis_favorite\x18\n \x01(\x08\x12\x12\n\nis_ignored\x18\x0b \x01(\x08\x12 \n\x18is_key_manually_verified\x18\x0c \x01(\x08\x12\x10\n\x08is_muted\x18\r \x01(\x08\x12\x19\n\x11has_xeddsa_signed\x18\x0e \x01(\x08\x12\x1d\n\x15heard_on_current_lora\x18\x0f \x01(\x08\x42\x0c\n\n_hops_away\"\xc1\x01\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x14\n\x0creboot_count\x18\x08 \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0b \x01(\r\x12\x11\n\tdevice_id\x18\x0c \x01(\x0c\x12\x0f\n\x07pio_env\x18\r \x01(\t\x12\x35\n\x10\x66irmware_edition\x18\x0e \x01(\x0e\x32\x1b.meshtastic.FirmwareEdition\x12\x14\n\x0cnodedb_count\x18\x0f \x01(\r\"\xc0\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*\n\x05level\x18\x04 \x01(\x0e\x32\x1b.meshtastic.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\"P\n\x0bQueueStatus\x12\x0b\n\x03res\x18\x01 \x01(\x05\x12\x0c\n\x04\x66ree\x18\x02 \x01(\r\x12\x0e\n\x06maxlen\x18\x03 \x01(\r\x12\x16\n\x0emesh_packet_id\x18\x04 \x01(\r\"\xeb\x06\n\tFromRadio\x12\n\n\x02id\x18\x01 \x01(\r\x12(\n\x06packet\x18\x02 \x01(\x0b\x32\x16.meshtastic.MeshPacketH\x00\x12)\n\x07my_info\x18\x03 \x01(\x0b\x32\x16.meshtastic.MyNodeInfoH\x00\x12)\n\tnode_info\x18\x04 \x01(\x0b\x32\x14.meshtastic.NodeInfoH\x00\x12$\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12+\n\nlog_record\x18\x06 \x01(\x0b\x32\x15.meshtastic.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x07 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\x08 \x01(\x08H\x00\x12\x30\n\x0cmoduleConfig\x18\t \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12&\n\x07\x63hannel\x18\n \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12.\n\x0bqueueStatus\x18\x0b \x01(\x0b\x32\x17.meshtastic.QueueStatusH\x00\x12*\n\x0cxmodemPacket\x18\x0c \x01(\x0b\x32\x12.meshtastic.XModemH\x00\x12.\n\x08metadata\x18\r \x01(\x0b\x32\x1a.meshtastic.DeviceMetadataH\x00\x12\x44\n\x16mqttClientProxyMessage\x18\x0e \x01(\x0b\x32\".meshtastic.MqttClientProxyMessageH\x00\x12(\n\x08\x66ileInfo\x18\x0f \x01(\x0b\x32\x14.meshtastic.FileInfoH\x00\x12<\n\x12\x63lientNotification\x18\x10 \x01(\x0b\x32\x1e.meshtastic.ClientNotificationH\x00\x12\x34\n\x0e\x64\x65viceuiConfig\x18\x11 \x01(\x0b\x32\x1a.meshtastic.DeviceUIConfigH\x00\x12\x35\n\x0flockdown_status\x18\x12 \x01(\x0b\x32\x1a.meshtastic.LockdownStatusH\x00\x12\x39\n\x0eregion_presets\x18\x13 \x01(\x0b\x32\x1f.meshtastic.LoRaRegionPresetMapH\x00\x42\x11\n\x0fpayload_variant\"\x93\x02\n\x0eLockdownStatus\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .meshtastic.LockdownStatus.State\x12\x13\n\x0block_reason\x18\x02 \x01(\t\x12\x17\n\x0f\x62oots_remaining\x18\x03 \x01(\r\x12\x19\n\x11valid_until_epoch\x18\x04 \x01(\r\x12\x17\n\x0f\x62\x61\x63koff_seconds\x18\x05 \x01(\r\"n\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x13\n\x0fNEEDS_PROVISION\x10\x01\x12\n\n\x06LOCKED\x10\x02\x12\x0c\n\x08UNLOCKED\x10\x03\x12\x11\n\rUNLOCK_FAILED\x10\x04\x12\x0c\n\x08\x44ISABLED\x10\x05\"\xfa\x03\n\x12\x43lientNotification\x12\x15\n\x08reply_id\x18\x01 \x01(\rH\x01\x88\x01\x01\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12*\n\x05level\x18\x03 \x01(\x0e\x32\x1b.meshtastic.LogRecord.Level\x12\x0f\n\x07message\x18\x04 \x01(\t\x12Q\n\x1ekey_verification_number_inform\x18\x0b \x01(\x0b\x32\'.meshtastic.KeyVerificationNumberInformH\x00\x12S\n\x1fkey_verification_number_request\x18\x0c \x01(\x0b\x32(.meshtastic.KeyVerificationNumberRequestH\x00\x12\x42\n\x16key_verification_final\x18\r \x01(\x0b\x32 .meshtastic.KeyVerificationFinalH\x00\x12@\n\x15\x64uplicated_public_key\x18\x0e \x01(\x0b\x32\x1f.meshtastic.DuplicatedPublicKeyH\x00\x12\x34\n\x0flow_entropy_key\x18\x0f \x01(\x0b\x32\x19.meshtastic.LowEntropyKeyH\x00\x42\x11\n\x0fpayload_variantB\x0b\n\t_reply_id\"^\n\x1bKeyVerificationNumberInform\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\x17\n\x0fremote_longname\x18\x02 \x01(\t\x12\x17\n\x0fsecurity_number\x18\x03 \x01(\r\"F\n\x1cKeyVerificationNumberRequest\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\x17\n\x0fremote_longname\x18\x02 \x01(\t\"q\n\x14KeyVerificationFinal\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\x17\n\x0fremote_longname\x18\x02 \x01(\t\x12\x10\n\x08isSender\x18\x03 \x01(\x08\x12\x1f\n\x17verification_characters\x18\x04 \x01(\t\"\x15\n\x13\x44uplicatedPublicKey\"\x0f\n\rLowEntropyKey\"1\n\x08\x46ileInfo\x12\x11\n\tfile_name\x18\x01 \x01(\t\x12\x12\n\nsize_bytes\x18\x02 \x01(\r\"\x94\x02\n\x07ToRadio\x12(\n\x06packet\x18\x01 \x01(\x0b\x32\x16.meshtastic.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x03 \x01(\rH\x00\x12\x14\n\ndisconnect\x18\x04 \x01(\x08H\x00\x12*\n\x0cxmodemPacket\x18\x05 \x01(\x0b\x32\x12.meshtastic.XModemH\x00\x12\x44\n\x16mqttClientProxyMessage\x18\x06 \x01(\x0b\x32\".meshtastic.MqttClientProxyMessageH\x00\x12*\n\theartbeat\x18\x07 \x01(\x0b\x32\x15.meshtastic.HeartbeatH\x00\x42\x11\n\x0fpayload_variant\"@\n\nCompressed\x12$\n\x07portnum\x18\x01 \x01(\x0e\x32\x13.meshtastic.PortNum\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x87\x01\n\x0cNeighborInfo\x12\x0f\n\x07node_id\x18\x01 \x01(\r\x12\x17\n\x0flast_sent_by_id\x18\x02 \x01(\r\x12$\n\x1cnode_broadcast_interval_secs\x18\x03 \x01(\r\x12\'\n\tneighbors\x18\x04 \x03(\x0b\x32\x14.meshtastic.Neighbor\"d\n\x08Neighbor\x12\x0f\n\x07node_id\x18\x01 \x01(\r\x12\x0b\n\x03snr\x18\x02 \x01(\x02\x12\x14\n\x0clast_rx_time\x18\x03 \x01(\x07\x12$\n\x1cnode_broadcast_interval_secs\x18\x04 \x01(\r\"\xeb\x02\n\x0e\x44\x65viceMetadata\x12\x18\n\x10\x66irmware_version\x18\x01 \x01(\t\x12\x1c\n\x14\x64\x65vice_state_version\x18\x02 \x01(\r\x12\x13\n\x0b\x63\x61nShutdown\x18\x03 \x01(\x08\x12\x0f\n\x07hasWifi\x18\x04 \x01(\x08\x12\x14\n\x0chasBluetooth\x18\x05 \x01(\x08\x12\x13\n\x0bhasEthernet\x18\x06 \x01(\x08\x12\x32\n\x04role\x18\x07 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12\x16\n\x0eposition_flags\x18\x08 \x01(\r\x12+\n\x08hw_model\x18\t \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x19\n\x11hasRemoteHardware\x18\n \x01(\x08\x12\x0e\n\x06hasPKC\x18\x0b \x01(\x08\x12\x18\n\x10\x65xcluded_modules\x18\x0c \x01(\r\x12\x12\n\nhas_xeddsa\x18\x0e \x01(\x08\"\xa7\x01\n\x0fLoRaPresetGroup\x12:\n\x07presets\x18\x01 \x03(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x41\n\x0e\x64\x65\x66\x61ult_preset\x18\x02 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x15\n\rlicensed_only\x18\x03 \x01(\x08\"b\n\x11LoRaRegionPresets\x12\x38\n\x06region\x18\x01 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12\x13\n\x0bgroup_index\x18\x02 \x01(\r\"x\n\x13LoRaRegionPresetMap\x12+\n\x06groups\x18\x01 \x03(\x0b\x32\x1b.meshtastic.LoRaPresetGroup\x12\x34\n\rregion_groups\x18\x02 \x03(\x0b\x32\x1d.meshtastic.LoRaRegionPresets\"\x1a\n\tHeartbeat\x12\r\n\x05nonce\x18\x01 \x01(\r\"U\n\x15NodeRemoteHardwarePin\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12*\n\x03pin\x18\x02 \x01(\x0b\x32\x1d.meshtastic.RemoteHardwarePin\"e\n\x0e\x43hunkedPayload\x12\x12\n\npayload_id\x18\x01 \x01(\r\x12\x13\n\x0b\x63hunk_count\x18\x02 \x01(\r\x12\x13\n\x0b\x63hunk_index\x18\x03 \x01(\r\x12\x15\n\rpayload_chunk\x18\x04 \x01(\x0c\"\x1f\n\rresend_chunks\x12\x0e\n\x06\x63hunks\x18\x01 \x03(\r\"\xaa\x01\n\x16\x43hunkedPayloadResponse\x12\x12\n\npayload_id\x18\x01 \x01(\r\x12\x1a\n\x10request_transfer\x18\x02 \x01(\x08H\x00\x12\x19\n\x0f\x61\x63\x63\x65pt_transfer\x18\x03 \x01(\x08H\x00\x12\x32\n\rresend_chunks\x18\x04 \x01(\x0b\x32\x19.meshtastic.resend_chunksH\x00\x42\x11\n\x0fpayload_variant*\xdf\x16\n\rHardwareModel\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08TLORA_V2\x10\x01\x12\x0c\n\x08TLORA_V1\x10\x02\x12\x12\n\x0eTLORA_V2_1_1P6\x10\x03\x12\t\n\x05TBEAM\x10\x04\x12\x0f\n\x0bHELTEC_V2_0\x10\x05\x12\x0e\n\nTBEAM_V0P7\x10\x06\x12\n\n\x06T_ECHO\x10\x07\x12\x10\n\x0cTLORA_V1_1P3\x10\x08\x12\x0b\n\x07RAK4631\x10\t\x12\x0f\n\x0bHELTEC_V2_1\x10\n\x12\r\n\tHELTEC_V1\x10\x0b\x12\x18\n\x14LILYGO_TBEAM_S3_CORE\x10\x0c\x12\x0c\n\x08RAK11200\x10\r\x12\x0b\n\x07NANO_G1\x10\x0e\x12\x12\n\x0eTLORA_V2_1_1P8\x10\x0f\x12\x0f\n\x0bTLORA_T3_S3\x10\x10\x12\x14\n\x10NANO_G1_EXPLORER\x10\x11\x12\x11\n\rNANO_G2_ULTRA\x10\x12\x12\r\n\tLORA_TYPE\x10\x13\x12\x0b\n\x07WIPHONE\x10\x14\x12\x0e\n\nWIO_WM1110\x10\x15\x12\x0b\n\x07RAK2560\x10\x16\x12\x13\n\x0fHELTEC_HRU_3601\x10\x17\x12\x1a\n\x16HELTEC_WIRELESS_BRIDGE\x10\x18\x12\x0e\n\nSTATION_G1\x10\x19\x12\x0c\n\x08RAK11310\x10\x1a\x12\x15\n\x11MAKERFABS_TRACKER\x10\x1b\x12\x16\n\x12MAKERFABS_RESERVED\x10\x1c\x12\r\n\tCANARYONE\x10\x1d\x12\x0f\n\x0bRP2040_LORA\x10\x1e\x12\x0e\n\nSTATION_G2\x10\x1f\x12\x11\n\rLORA_RELAY_V1\x10 \x12\x0f\n\x0bT_ECHO_PLUS\x10!\x12\x07\n\x03PPR\x10\"\x12\x0f\n\x0bGENIEBLOCKS\x10#\x12\x11\n\rNRF52_UNKNOWN\x10$\x12\r\n\tPORTDUINO\x10%\x12\x0f\n\x0b\x41NDROID_SIM\x10&\x12\n\n\x06\x44IY_V1\x10\'\x12\x15\n\x11NRF52840_PCA10059\x10(\x12\n\n\x06\x44R_DEV\x10)\x12\x0b\n\x07M5STACK\x10*\x12\r\n\tHELTEC_V3\x10+\x12\x11\n\rHELTEC_WSL_V3\x10,\x12\x13\n\x0f\x42\x45TAFPV_2400_TX\x10-\x12\x17\n\x13\x42\x45TAFPV_900_NANO_TX\x10.\x12\x0c\n\x08RPI_PICO\x10/\x12\x1b\n\x17HELTEC_WIRELESS_TRACKER\x10\x30\x12\x19\n\x15HELTEC_WIRELESS_PAPER\x10\x31\x12\n\n\x06T_DECK\x10\x32\x12\x0e\n\nT_WATCH_S3\x10\x33\x12\x11\n\rPICOMPUTER_S3\x10\x34\x12\x0f\n\x0bHELTEC_HT62\x10\x35\x12\x12\n\x0e\x45\x42YTE_ESP32_S3\x10\x36\x12\x11\n\rESP32_S3_PICO\x10\x37\x12\r\n\tCHATTER_2\x10\x38\x12\x1e\n\x1aHELTEC_WIRELESS_PAPER_V1_0\x10\x39\x12 \n\x1cHELTEC_WIRELESS_TRACKER_V1_0\x10:\x12\x0b\n\x07UNPHONE\x10;\x12\x0c\n\x08TD_LORAC\x10<\x12\x13\n\x0f\x43\x44\x45\x42YTE_EORA_S3\x10=\x12\x0f\n\x0bTWC_MESH_V4\x10>\x12\x16\n\x12NRF52_PROMICRO_DIY\x10?\x12\x1f\n\x1bRADIOMASTER_900_BANDIT_NANO\x10@\x12\x1c\n\x18HELTEC_CAPSULE_SENSOR_V3\x10\x41\x12\x1d\n\x19HELTEC_VISION_MASTER_T190\x10\x42\x12\x1d\n\x19HELTEC_VISION_MASTER_E213\x10\x43\x12\x1d\n\x19HELTEC_VISION_MASTER_E290\x10\x44\x12\x19\n\x15HELTEC_MESH_NODE_T114\x10\x45\x12\x16\n\x12SENSECAP_INDICATOR\x10\x46\x12\x13\n\x0fTRACKER_T1000_E\x10G\x12\x0b\n\x07RAK3172\x10H\x12\n\n\x06WIO_E5\x10I\x12\x1a\n\x16RADIOMASTER_900_BANDIT\x10J\x12\x13\n\x0fME25LS01_4Y10TD\x10K\x12\x18\n\x14RP2040_FEATHER_RFM95\x10L\x12\x15\n\x11M5STACK_COREBASIC\x10M\x12\x11\n\rM5STACK_CORE2\x10N\x12\r\n\tRPI_PICO2\x10O\x12\x12\n\x0eM5STACK_CORES3\x10P\x12\x11\n\rSEEED_XIAO_S3\x10Q\x12\x0b\n\x07MS24SF1\x10R\x12\x0c\n\x08TLORA_C6\x10S\x12\x0f\n\x0bWISMESH_TAP\x10T\x12\r\n\tROUTASTIC\x10U\x12\x0c\n\x08MESH_TAB\x10V\x12\x0c\n\x08MESHLINK\x10W\x12\x12\n\x0eXIAO_NRF52_KIT\x10X\x12\x10\n\x0cTHINKNODE_M1\x10Y\x12\x10\n\x0cTHINKNODE_M2\x10Z\x12\x0f\n\x0bT_ETH_ELITE\x10[\x12\x15\n\x11HELTEC_SENSOR_HUB\x10\\\x12\r\n\tMUZI_BASE\x10]\x12\x16\n\x12HELTEC_MESH_POCKET\x10^\x12\x14\n\x10SEEED_SOLAR_NODE\x10_\x12\x18\n\x14NOMADSTAR_METEOR_PRO\x10`\x12\r\n\tCROWPANEL\x10\x61\x12\x0b\n\x07LINK_32\x10\x62\x12\x18\n\x14SEEED_WIO_TRACKER_L1\x10\x63\x12\x1d\n\x19SEEED_WIO_TRACKER_L1_EINK\x10\x64\x12\x0f\n\x0bMUZI_R1_NEO\x10\x65\x12\x0e\n\nT_DECK_PRO\x10\x66\x12\x10\n\x0cT_LORA_PAGER\x10g\x12\x14\n\x10M5STACK_RESERVED\x10h\x12\x0f\n\x0bWISMESH_TAG\x10i\x12\x0b\n\x07RAK3312\x10j\x12\x10\n\x0cTHINKNODE_M5\x10k\x12\x15\n\x11HELTEC_MESH_SOLAR\x10l\x12\x0f\n\x0bT_ECHO_LITE\x10m\x12\r\n\tHELTEC_V4\x10n\x12\x0f\n\x0bM5STACK_C6L\x10o\x12\x19\n\x15M5STACK_CARDPUTER_ADV\x10p\x12\x1e\n\x1aHELTEC_WIRELESS_TRACKER_V2\x10q\x12\x11\n\rT_WATCH_ULTRA\x10r\x12\x10\n\x0cTHINKNODE_M3\x10s\x12\x12\n\x0eWISMESH_TAP_V2\x10t\x12\x0b\n\x07RAK3401\x10u\x12\x0b\n\x07RAK6421\x10v\x12\x10\n\x0cTHINKNODE_M4\x10w\x12\x10\n\x0cTHINKNODE_M6\x10x\x12\x12\n\x0eMESHSTICK_1262\x10y\x12\x10\n\x0cTBEAM_1_WATT\x10z\x12\x14\n\x10T5_S3_EPAPER_PRO\x10{\x12\r\n\tTBEAM_BPF\x10|\x12\x12\n\x0eMINI_EPAPER_S3\x10}\x12\x13\n\x0fTDISPLAY_S3_PRO\x10~\x12\x19\n\x15HELTEC_MESH_NODE_T096\x10\x7f\x12\x14\n\x0fMESH_TRACKER_X1\x10\x80\x01\x12\x11\n\x0cTHINKNODE_M7\x10\x81\x01\x12\x11\n\x0cTHINKNODE_M8\x10\x82\x01\x12\x11\n\x0cTHINKNODE_M9\x10\x83\x01\x12\x11\n\x0cHELTEC_V4_R8\x10\x84\x01\x12\x18\n\x13HELTEC_MESH_NODE_T1\x10\x85\x01\x12\x0f\n\nSTATION_G3\x10\x86\x01\x12\x13\n\x0eT_IMPULSE_PLUS\x10\x87\x01\x12\x10\n\x0bT_ECHO_CARD\x10\x88\x01\x12\x19\n\x14SEEED_WIO_TRACKER_L2\x10\x89\x01\x12\x11\n\x0c\x43ROWPANEL_P4\x10\x8a\x01\x12\x19\n\x14HELTEC_MESH_TOWER_V2\x10\x8b\x01\x12\x13\n\x0eMESHNOLOGY_W10\x10\x8c\x01\x12\x10\n\x0bHELTEC_RC32\x10\x8d\x01\x12\x10\n\x0bHELTEC_RC52\x10\x8e\x01\x12\x10\n\x0bHELTEC_RCC6\x10\x8f\x01\x12 \n\x1bSEEED_WIO_TRACKER_L1_PRO_1W\x10\x90\x01\x12\x13\n\x0eMESHNOLOGY_W12\x10\x91\x01\x12\x11\n\x0cMESHPAGER_X2\x10\x92\x01\x12\x12\n\rT_CONNECT_PRO\x10\x93\x01\x12\x1a\n\x15\x41XIOMETA_GENESIS_MINI\x10\x94\x01\x12\x0f\n\nPRIVATE_HW\x10\xff\x01*,\n\tConstants\x12\x08\n\x04ZERO\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xe9\x01*\xb4\x02\n\x11\x43riticalErrorCode\x12\x08\n\x04NONE\x10\x00\x12\x0f\n\x0bTX_WATCHDOG\x10\x01\x12\x14\n\x10SLEEP_ENTER_WAIT\x10\x02\x12\x0c\n\x08NO_RADIO\x10\x03\x12\x0f\n\x0bUNSPECIFIED\x10\x04\x12\x15\n\x11UBLOX_UNIT_FAILED\x10\x05\x12\r\n\tNO_AXP192\x10\x06\x12\x19\n\x15INVALID_RADIO_SETTING\x10\x07\x12\x13\n\x0fTRANSMIT_FAILED\x10\x08\x12\x0c\n\x08\x42ROWNOUT\x10\t\x12\x12\n\x0eSX1262_FAILURE\x10\n\x12\x11\n\rRADIO_SPI_BUG\x10\x0b\x12 \n\x1c\x46LASH_CORRUPTION_RECOVERABLE\x10\x0c\x12\"\n\x1e\x46LASH_CORRUPTION_UNRECOVERABLE\x10\r*\xa1\x01\n\x0f\x46irmwareEdition\x12\x0b\n\x07VANILLA\x10\x00\x12\x11\n\rSMART_CITIZEN\x10\x01\x12\x0e\n\nOPEN_SAUCE\x10\x10\x12\n\n\x06\x44\x45\x46\x43ON\x10\x11\x12\x0f\n\x0b\x42URNING_MAN\x10\x12\x12\x0e\n\nHAMVENTION\x10\x13\x12\x07\n\x03\x46\x41\x42\x10\x14\x12\x0e\n\nDRAGON_CON\x10\x15\x12\x07\n\x03\x43\x43\x43\x10\x16\x12\x0f\n\x0b\x44IY_EDITION\x10\x7f*\x80\x03\n\x0f\x45xcludedModules\x12\x11\n\rEXCLUDED_NONE\x10\x00\x12\x0f\n\x0bMQTT_CONFIG\x10\x01\x12\x11\n\rSERIAL_CONFIG\x10\x02\x12\x13\n\x0f\x45XTNOTIF_CONFIG\x10\x04\x12\x17\n\x13STOREFORWARD_CONFIG\x10\x08\x12\x14\n\x10RANGETEST_CONFIG\x10\x10\x12\x14\n\x10TELEMETRY_CONFIG\x10 \x12\x14\n\x10\x43\x41NNEDMSG_CONFIG\x10@\x12\x11\n\x0c\x41UDIO_CONFIG\x10\x80\x01\x12\x1a\n\x15REMOTEHARDWARE_CONFIG\x10\x80\x02\x12\x18\n\x13NEIGHBORINFO_CONFIG\x10\x80\x04\x12\x1b\n\x16\x41MBIENTLIGHTING_CONFIG\x10\x80\x08\x12\x1b\n\x16\x44\x45TECTIONSENSOR_CONFIG\x10\x80\x10\x12\x16\n\x11PAXCOUNTER_CONFIG\x10\x80 \x12\x15\n\x10\x42LUETOOTH_CONFIG\x10\x80@\x12\x14\n\x0eNETWORK_CONFIG\x10\x80\x80\x01\x42`\n\x14org.meshtastic.protoB\nMeshProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
|
|
16
|
+
descriptor_data = "\n\x15meshtastic/mesh.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1ameshtastic/device_ui.proto\x1a\x1emeshtastic/module_config.proto\x1a\x19meshtastic/portnums.proto\x1a\x1ameshtastic/telemetry.proto\x1a\x17meshtastic/xmodem.proto\"\x87\x07\n\x08Position\x12\x17\n\nlatitude_i\x18\x01 \x01(\x0fH\x00\x88\x01\x01\x12\x18\n\x0blongitude_i\x18\x02 \x01(\x0fH\x01\x88\x01\x01\x12\x15\n\x08\x61ltitude\x18\x03 \x01(\x05H\x02\x88\x01\x01\x12\x0c\n\x04time\x18\x04 \x01(\x07\x12\x37\n\x0flocation_source\x18\x05 \x01(\x0e\x32\x1e.meshtastic.Position.LocSource\x12\x37\n\x0f\x61ltitude_source\x18\x06 \x01(\x0e\x32\x1e.meshtastic.Position.AltSource\x12\x11\n\ttimestamp\x18\x07 \x01(\x07\x12\x1f\n\x17timestamp_millis_adjust\x18\x08 \x01(\x05\x12\x19\n\x0c\x61ltitude_hae\x18\t \x01(\x11H\x03\x88\x01\x01\x12(\n\x1b\x61ltitude_geoidal_separation\x18\n \x01(\x11H\x04\x88\x01\x01\x12\x0c\n\x04PDOP\x18\x0b \x01(\r\x12\x0c\n\x04HDOP\x18\x0c \x01(\r\x12\x0c\n\x04VDOP\x18\r \x01(\r\x12\x14\n\x0cgps_accuracy\x18\x0e \x01(\r\x12\x19\n\x0cground_speed\x18\x0f \x01(\rH\x05\x88\x01\x01\x12\x19\n\x0cground_track\x18\x10 \x01(\rH\x06\x88\x01\x01\x12\x13\n\x0b\x66ix_quality\x18\x11 \x01(\r\x12\x10\n\x08\x66ix_type\x18\x12 \x01(\r\x12\x14\n\x0csats_in_view\x18\x13 \x01(\r\x12\x11\n\tsensor_id\x18\x14 \x01(\r\x12\x13\n\x0bnext_update\x18\x15 \x01(\r\x12\x12\n\nseq_number\x18\x16 \x01(\r\x12\x16\n\x0eprecision_bits\x18\x17 \x01(\r\"N\n\tLocSource\x12\r\n\tLOC_UNSET\x10\x00\x12\x0e\n\nLOC_MANUAL\x10\x01\x12\x10\n\x0cLOC_INTERNAL\x10\x02\x12\x10\n\x0cLOC_EXTERNAL\x10\x03\"b\n\tAltSource\x12\r\n\tALT_UNSET\x10\x00\x12\x0e\n\nALT_MANUAL\x10\x01\x12\x10\n\x0c\x41LT_INTERNAL\x10\x02\x12\x10\n\x0c\x41LT_EXTERNAL\x10\x03\x12\x12\n\x0e\x41LT_BAROMETRIC\x10\x04\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_iB\x0b\n\t_altitudeB\x0f\n\r_altitude_haeB\x1e\n\x1c_altitude_geoidal_separationB\x0f\n\r_ground_speedB\x0f\n\r_ground_track\"\x8a\x02\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\x13\n\x07macaddr\x18\x04 \x01(\x0c\x42\x02\x18\x01\x12+\n\x08hw_model\x18\x05 \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x13\n\x0bis_licensed\x18\x06 \x01(\x08\x12\x32\n\x04role\x18\x07 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12\x12\n\npublic_key\x18\x08 \x01(\x0c\x12\x1c\n\x0fis_unmessagable\x18\t \x01(\x08H\x00\x88\x01\x01\x42\x12\n\x10_is_unmessagable\"Z\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x01 \x03(\x07\x12\x13\n\x0bsnr_towards\x18\x02 \x03(\x05\x12\x12\n\nroute_back\x18\x03 \x03(\x07\x12\x10\n\x08snr_back\x18\x04 \x03(\x05\"\xac\x04\n\x07Routing\x12\x33\n\rroute_request\x18\x01 \x01(\x0b\x32\x1a.meshtastic.RouteDiscoveryH\x00\x12\x31\n\x0broute_reply\x18\x02 \x01(\x0b\x32\x1a.meshtastic.RouteDiscoveryH\x00\x12\x31\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\x19.meshtastic.Routing.ErrorH\x00\x12\x11\n\tack_proof\x18\x04 \x01(\x0c\"\xe7\x02\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\x12\x0f\n\x0bNO_RESPONSE\x10\x08\x12\x14\n\x10\x44UTY_CYCLE_LIMIT\x10\t\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10 \x12\x12\n\x0eNOT_AUTHORIZED\x10!\x12\x0e\n\nPKI_FAILED\x10\"\x12\x16\n\x12PKI_UNKNOWN_PUBKEY\x10#\x12\x19\n\x15\x41\x44MIN_BAD_SESSION_KEY\x10$\x12!\n\x1d\x41\x44MIN_PUBLIC_KEY_UNAUTHORIZED\x10%\x12\x17\n\x13RATE_LIMIT_EXCEEDED\x10&\x12\x1c\n\x18PKI_SEND_FAIL_PUBLIC_KEY\x10\'B\t\n\x07variant\"\xe5\x01\n\x04\x44\x61ta\x12$\n\x07portnum\x18\x01 \x01(\x0e\x32\x13.meshtastic.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\x12\x10\n\x08reply_id\x18\x07 \x01(\x07\x12\r\n\x05\x65moji\x18\x08 \x01(\x07\x12\x15\n\x08\x62itfield\x18\t \x01(\rH\x00\x88\x01\x01\x12\x18\n\x10xeddsa_signature\x18\n \x01(\x0c\x42\x0b\n\t_bitfield\">\n\x0fKeyVerification\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\r\n\x05hash1\x18\x02 \x01(\x0c\x12\r\n\x05hash2\x18\x03 \x01(\x0c\"\xcb\x03\n\x14StoreForwardPlusPlus\x12M\n\x11sfpp_message_type\x18\x01 \x01(\x0e\x32\x32.meshtastic.StoreForwardPlusPlus.SFPP_message_type\x12\x14\n\x0cmessage_hash\x18\x02 \x01(\x0c\x12\x13\n\x0b\x63ommit_hash\x18\x03 \x01(\x0c\x12\x11\n\troot_hash\x18\x04 \x01(\x0c\x12\x0f\n\x07message\x18\x05 \x01(\x0c\x12\x17\n\x0f\x65ncapsulated_id\x18\x06 \x01(\r\x12\x17\n\x0f\x65ncapsulated_to\x18\x07 \x01(\r\x12\x19\n\x11\x65ncapsulated_from\x18\x08 \x01(\r\x12\x1b\n\x13\x65ncapsulated_rxtime\x18\t \x01(\r\x12\x13\n\x0b\x63hain_count\x18\n \x01(\r\"\x95\x01\n\x11SFPP_message_type\x12\x12\n\x0e\x43\x41NON_ANNOUNCE\x10\x00\x12\x0f\n\x0b\x43HAIN_QUERY\x10\x01\x12\x10\n\x0cLINK_REQUEST\x10\x03\x12\x10\n\x0cLINK_PROVIDE\x10\x04\x12\x1a\n\x16LINK_PROVIDE_FIRSTHALF\x10\x05\x12\x1b\n\x17LINK_PROVIDE_SECONDHALF\x10\x06\"\xe3\x02\n\x0bRemoteShell\x12*\n\x02op\x18\x01 \x01(\x0e\x32\x1e.meshtastic.RemoteShell.OpCode\x12\x12\n\nsession_id\x18\x02 \x01(\r\x12\x0b\n\x03seq\x18\x03 \x01(\r\x12\x0f\n\x07\x61\x63k_seq\x18\x04 \x01(\r\x12\x0f\n\x07payload\x18\x05 \x01(\x0c\x12\x0c\n\x04\x63ols\x18\x06 \x01(\r\x12\x0c\n\x04rows\x18\x07 \x01(\r\x12\r\n\x05\x66lags\x18\x08 \x01(\r\x12\x13\n\x0blast_tx_seq\x18\t \x01(\r\x12\x13\n\x0blast_rx_seq\x18\n \x01(\r\"\x8f\x01\n\x06OpCode\x12\x0c\n\x08OP_UNSET\x10\x00\x12\x08\n\x04OPEN\x10\x01\x12\t\n\x05INPUT\x10\x02\x12\n\n\x06RESIZE\x10\x03\x12\t\n\x05\x43LOSE\x10\x04\x12\x08\n\x04PING\x10\x05\x12\x07\n\x03\x41\x43K\x10\x06\x12\x0b\n\x07OPEN_OK\x10@\x12\n\n\x06OUTPUT\x10\x41\x12\n\n\x06\x43LOSED\x10\x42\x12\t\n\x05\x45RROR\x10\x43\x12\x08\n\x04PONG\x10\x44\"u\n\x0b\x42oundingBox\x12\x18\n\x10longitude_west_i\x18\x01 \x01(\x0f\x12\x18\n\x10latitude_south_i\x18\x02 \x01(\x0f\x12\x18\n\x10longitude_east_i\x18\x03 \x01(\x0f\x12\x18\n\x10latitude_north_i\x18\x04 \x01(\x0f\"\xea\x02\n\x08Waypoint\x12\n\n\x02id\x18\x01 \x01(\r\x12\x17\n\nlatitude_i\x18\x02 \x01(\x0fH\x00\x88\x01\x01\x12\x18\n\x0blongitude_i\x18\x03 \x01(\x0fH\x01\x88\x01\x01\x12\x0e\n\x06\x65xpire\x18\x04 \x01(\r\x12\x11\n\tlocked_to\x18\x05 \x01(\r\x12\x0c\n\x04name\x18\x06 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x07 \x01(\t\x12\x0c\n\x04icon\x18\x08 \x01(\x07\x12\x17\n\x0fgeofence_radius\x18\t \x01(\r\x12\x32\n\x0c\x62ounding_box\x18\n \x01(\x0b\x32\x17.meshtastic.BoundingBoxH\x02\x88\x01\x01\x12\x17\n\x0fnotify_on_enter\x18\x0b \x01(\x08\x12\x16\n\x0enotify_on_exit\x18\x0c \x01(\x08\x12\x1d\n\x15notify_favorites_only\x18\r \x01(\x08\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_iB\x0f\n\r_bounding_box\"\x1f\n\rStatusMessage\x12\x0e\n\x06status\x18\x01 \x01(\t\"l\n\x16MqttClientProxyMessage\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x0e\n\x04\x64\x61ta\x18\x02 \x01(\x0cH\x00\x12\x0e\n\x04text\x18\x03 \x01(\tH\x00\x12\x10\n\x08retained\x18\x04 \x01(\x08\x42\x11\n\x0fpayload_variant\"\xb4\t\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#\n\x07\x64\x65\x63oded\x18\x04 \x01(\x0b\x32\x10.meshtastic.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x14\n\x07rx_time\x18\x07 \x01(\x07H\x01\x88\x01\x01\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\t \x01(\r\x12\x10\n\x08want_ack\x18\n \x01(\x08\x12\x31\n\x08priority\x18\x0b \x01(\x0e\x32\x1f.meshtastic.MeshPacket.Priority\x12\x14\n\x07rx_rssi\x18\x0c \x01(\x05H\x02\x88\x01\x01\x12\x33\n\x07\x64\x65layed\x18\r \x01(\x0e\x32\x1e.meshtastic.MeshPacket.DelayedB\x02\x18\x01\x12\x10\n\x08via_mqtt\x18\x0e \x01(\x08\x12\x11\n\thop_start\x18\x0f \x01(\r\x12\x12\n\npublic_key\x18\x10 \x01(\x0c\x12\x15\n\rpki_encrypted\x18\x11 \x01(\x08\x12\x10\n\x08next_hop\x18\x12 \x01(\r\x12\x12\n\nrelay_node\x18\x13 \x01(\r\x12\x10\n\x08tx_after\x18\x14 \x01(\r\x12\x46\n\x13transport_mechanism\x18\x15 \x01(\x0e\x32).meshtastic.MeshPacket.TransportMechanism\x12\x15\n\rxeddsa_signed\x18\x16 \x01(\x08\x12?\n\x10\x61\x63k_proof_status\x18\x17 \x01(\x0e\x32%.meshtastic.MeshPacket.AckProofStatus\"~\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\x0c\n\x08RESPONSE\x10P\x12\x08\n\x04HIGH\x10\x64\x12\t\n\x05\x41LERT\x10n\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\"B\n\x07\x44\x65layed\x12\x0c\n\x08NO_DELAY\x10\x00\x12\x15\n\x11\x44\x45LAYED_BROADCAST\x10\x01\x12\x12\n\x0e\x44\x45LAYED_DIRECT\x10\x02\"\xea\x01\n\x12TransportMechanism\x12\x16\n\x12TRANSPORT_INTERNAL\x10\x00\x12\x12\n\x0eTRANSPORT_LORA\x10\x01\x12\x17\n\x13TRANSPORT_LORA_ALT1\x10\x02\x12\x17\n\x13TRANSPORT_LORA_ALT2\x10\x03\x12\x17\n\x13TRANSPORT_LORA_ALT3\x10\x04\x12\x12\n\x0eTRANSPORT_MQTT\x10\x05\x12\x1b\n\x17TRANSPORT_MULTICAST_UDP\x10\x06\x12\x11\n\rTRANSPORT_API\x10\x07\x12\x19\n\x15TRANSPORT_UNICAST_UDP\x10\x08\"h\n\x0e\x41\x63kProofStatus\x12\x14\n\x10\x41\x43K_PROOF_ABSENT\x10\x00\x12\x13\n\x0f\x41\x43K_PROOF_VALID\x10\x01\x12\x15\n\x11\x41\x43K_PROOF_INVALID\x10\x02\x12\x14\n\x10\x41\x43K_PROOF_NO_KEY\x10\x03\x42\x11\n\x0fpayload_variantB\n\n\x08_rx_timeB\n\n\x08_rx_rssi\"\x93\x03\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1e\n\x04user\x18\x02 \x01(\x0b\x32\x10.meshtastic.User\x12&\n\x08position\x18\x03 \x01(\x0b\x32\x14.meshtastic.Position\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12\x31\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\x19.meshtastic.DeviceMetrics\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08via_mqtt\x18\x08 \x01(\x08\x12\x16\n\thops_away\x18\t \x01(\rH\x00\x88\x01\x01\x12\x13\n\x0bis_favorite\x18\n \x01(\x08\x12\x12\n\nis_ignored\x18\x0b \x01(\x08\x12 \n\x18is_key_manually_verified\x18\x0c \x01(\x08\x12\x10\n\x08is_muted\x18\r \x01(\x08\x12\x19\n\x11has_xeddsa_signed\x18\x0e \x01(\x08\x12\x1d\n\x15heard_on_current_lora\x18\x0f \x01(\x08\x42\x0c\n\n_hops_away\"\xc1\x01\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x14\n\x0creboot_count\x18\x08 \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0b \x01(\r\x12\x11\n\tdevice_id\x18\x0c \x01(\x0c\x12\x0f\n\x07pio_env\x18\r \x01(\t\x12\x35\n\x10\x66irmware_edition\x18\x0e \x01(\x0e\x32\x1b.meshtastic.FirmwareEdition\x12\x14\n\x0cnodedb_count\x18\x0f \x01(\r\"\xc0\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*\n\x05level\x18\x04 \x01(\x0e\x32\x1b.meshtastic.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\"P\n\x0bQueueStatus\x12\x0b\n\x03res\x18\x01 \x01(\x05\x12\x0c\n\x04\x66ree\x18\x02 \x01(\r\x12\x0e\n\x06maxlen\x18\x03 \x01(\r\x12\x16\n\x0emesh_packet_id\x18\x04 \x01(\r\"\xeb\x06\n\tFromRadio\x12\n\n\x02id\x18\x01 \x01(\r\x12(\n\x06packet\x18\x02 \x01(\x0b\x32\x16.meshtastic.MeshPacketH\x00\x12)\n\x07my_info\x18\x03 \x01(\x0b\x32\x16.meshtastic.MyNodeInfoH\x00\x12)\n\tnode_info\x18\x04 \x01(\x0b\x32\x14.meshtastic.NodeInfoH\x00\x12$\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12+\n\nlog_record\x18\x06 \x01(\x0b\x32\x15.meshtastic.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x07 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\x08 \x01(\x08H\x00\x12\x30\n\x0cmoduleConfig\x18\t \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12&\n\x07\x63hannel\x18\n \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12.\n\x0bqueueStatus\x18\x0b \x01(\x0b\x32\x17.meshtastic.QueueStatusH\x00\x12*\n\x0cxmodemPacket\x18\x0c \x01(\x0b\x32\x12.meshtastic.XModemH\x00\x12.\n\x08metadata\x18\r \x01(\x0b\x32\x1a.meshtastic.DeviceMetadataH\x00\x12\x44\n\x16mqttClientProxyMessage\x18\x0e \x01(\x0b\x32\".meshtastic.MqttClientProxyMessageH\x00\x12(\n\x08\x66ileInfo\x18\x0f \x01(\x0b\x32\x14.meshtastic.FileInfoH\x00\x12<\n\x12\x63lientNotification\x18\x10 \x01(\x0b\x32\x1e.meshtastic.ClientNotificationH\x00\x12\x34\n\x0e\x64\x65viceuiConfig\x18\x11 \x01(\x0b\x32\x1a.meshtastic.DeviceUIConfigH\x00\x12\x35\n\x0flockdown_status\x18\x12 \x01(\x0b\x32\x1a.meshtastic.LockdownStatusH\x00\x12\x39\n\x0eregion_presets\x18\x13 \x01(\x0b\x32\x1f.meshtastic.LoRaRegionPresetMapH\x00\x42\x11\n\x0fpayload_variant\"\x93\x02\n\x0eLockdownStatus\x12/\n\x05state\x18\x01 \x01(\x0e\x32 .meshtastic.LockdownStatus.State\x12\x13\n\x0block_reason\x18\x02 \x01(\t\x12\x17\n\x0f\x62oots_remaining\x18\x03 \x01(\r\x12\x19\n\x11valid_until_epoch\x18\x04 \x01(\r\x12\x17\n\x0f\x62\x61\x63koff_seconds\x18\x05 \x01(\r\"n\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x13\n\x0fNEEDS_PROVISION\x10\x01\x12\n\n\x06LOCKED\x10\x02\x12\x0c\n\x08UNLOCKED\x10\x03\x12\x11\n\rUNLOCK_FAILED\x10\x04\x12\x0c\n\x08\x44ISABLED\x10\x05\"\xfa\x03\n\x12\x43lientNotification\x12\x15\n\x08reply_id\x18\x01 \x01(\rH\x01\x88\x01\x01\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12*\n\x05level\x18\x03 \x01(\x0e\x32\x1b.meshtastic.LogRecord.Level\x12\x0f\n\x07message\x18\x04 \x01(\t\x12Q\n\x1ekey_verification_number_inform\x18\x0b \x01(\x0b\x32\'.meshtastic.KeyVerificationNumberInformH\x00\x12S\n\x1fkey_verification_number_request\x18\x0c \x01(\x0b\x32(.meshtastic.KeyVerificationNumberRequestH\x00\x12\x42\n\x16key_verification_final\x18\r \x01(\x0b\x32 .meshtastic.KeyVerificationFinalH\x00\x12@\n\x15\x64uplicated_public_key\x18\x0e \x01(\x0b\x32\x1f.meshtastic.DuplicatedPublicKeyH\x00\x12\x34\n\x0flow_entropy_key\x18\x0f \x01(\x0b\x32\x19.meshtastic.LowEntropyKeyH\x00\x42\x11\n\x0fpayload_variantB\x0b\n\t_reply_id\"^\n\x1bKeyVerificationNumberInform\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\x17\n\x0fremote_longname\x18\x02 \x01(\t\x12\x17\n\x0fsecurity_number\x18\x03 \x01(\r\"F\n\x1cKeyVerificationNumberRequest\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\x17\n\x0fremote_longname\x18\x02 \x01(\t\"q\n\x14KeyVerificationFinal\x12\r\n\x05nonce\x18\x01 \x01(\x04\x12\x17\n\x0fremote_longname\x18\x02 \x01(\t\x12\x10\n\x08isSender\x18\x03 \x01(\x08\x12\x1f\n\x17verification_characters\x18\x04 \x01(\t\"\x15\n\x13\x44uplicatedPublicKey\"\x0f\n\rLowEntropyKey\"1\n\x08\x46ileInfo\x12\x11\n\tfile_name\x18\x01 \x01(\t\x12\x12\n\nsize_bytes\x18\x02 \x01(\r\"\x94\x02\n\x07ToRadio\x12(\n\x06packet\x18\x01 \x01(\x0b\x32\x16.meshtastic.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x03 \x01(\rH\x00\x12\x14\n\ndisconnect\x18\x04 \x01(\x08H\x00\x12*\n\x0cxmodemPacket\x18\x05 \x01(\x0b\x32\x12.meshtastic.XModemH\x00\x12\x44\n\x16mqttClientProxyMessage\x18\x06 \x01(\x0b\x32\".meshtastic.MqttClientProxyMessageH\x00\x12*\n\theartbeat\x18\x07 \x01(\x0b\x32\x15.meshtastic.HeartbeatH\x00\x42\x11\n\x0fpayload_variant\"@\n\nCompressed\x12$\n\x07portnum\x18\x01 \x01(\x0e\x32\x13.meshtastic.PortNum\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x87\x01\n\x0cNeighborInfo\x12\x0f\n\x07node_id\x18\x01 \x01(\r\x12\x17\n\x0flast_sent_by_id\x18\x02 \x01(\r\x12$\n\x1cnode_broadcast_interval_secs\x18\x03 \x01(\r\x12\'\n\tneighbors\x18\x04 \x03(\x0b\x32\x14.meshtastic.Neighbor\"d\n\x08Neighbor\x12\x0f\n\x07node_id\x18\x01 \x01(\r\x12\x0b\n\x03snr\x18\x02 \x01(\x02\x12\x14\n\x0clast_rx_time\x18\x03 \x01(\x07\x12$\n\x1cnode_broadcast_interval_secs\x18\x04 \x01(\r\"\xeb\x02\n\x0e\x44\x65viceMetadata\x12\x18\n\x10\x66irmware_version\x18\x01 \x01(\t\x12\x1c\n\x14\x64\x65vice_state_version\x18\x02 \x01(\r\x12\x13\n\x0b\x63\x61nShutdown\x18\x03 \x01(\x08\x12\x0f\n\x07hasWifi\x18\x04 \x01(\x08\x12\x14\n\x0chasBluetooth\x18\x05 \x01(\x08\x12\x13\n\x0bhasEthernet\x18\x06 \x01(\x08\x12\x32\n\x04role\x18\x07 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12\x16\n\x0eposition_flags\x18\x08 \x01(\r\x12+\n\x08hw_model\x18\t \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x19\n\x11hasRemoteHardware\x18\n \x01(\x08\x12\x0e\n\x06hasPKC\x18\x0b \x01(\x08\x12\x18\n\x10\x65xcluded_modules\x18\x0c \x01(\r\x12\x12\n\nhas_xeddsa\x18\x0e \x01(\x08\"\xa7\x01\n\x0fLoRaPresetGroup\x12:\n\x07presets\x18\x01 \x03(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x41\n\x0e\x64\x65\x66\x61ult_preset\x18\x02 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x15\n\rlicensed_only\x18\x03 \x01(\x08\"b\n\x11LoRaRegionPresets\x12\x38\n\x06region\x18\x01 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12\x13\n\x0bgroup_index\x18\x02 \x01(\r\"x\n\x13LoRaRegionPresetMap\x12+\n\x06groups\x18\x01 \x03(\x0b\x32\x1b.meshtastic.LoRaPresetGroup\x12\x34\n\rregion_groups\x18\x02 \x03(\x0b\x32\x1d.meshtastic.LoRaRegionPresets\"\x1a\n\tHeartbeat\x12\r\n\x05nonce\x18\x01 \x01(\r\"U\n\x15NodeRemoteHardwarePin\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12*\n\x03pin\x18\x02 \x01(\x0b\x32\x1d.meshtastic.RemoteHardwarePin\"e\n\x0e\x43hunkedPayload\x12\x12\n\npayload_id\x18\x01 \x01(\r\x12\x13\n\x0b\x63hunk_count\x18\x02 \x01(\r\x12\x13\n\x0b\x63hunk_index\x18\x03 \x01(\r\x12\x15\n\rpayload_chunk\x18\x04 \x01(\x0c\"\x1f\n\rresend_chunks\x12\x0e\n\x06\x63hunks\x18\x01 \x03(\r\"\xaa\x01\n\x16\x43hunkedPayloadResponse\x12\x12\n\npayload_id\x18\x01 \x01(\r\x12\x1a\n\x10request_transfer\x18\x02 \x01(\x08H\x00\x12\x19\n\x0f\x61\x63\x63\x65pt_transfer\x18\x03 \x01(\x08H\x00\x12\x32\n\rresend_chunks\x18\x04 \x01(\x0b\x32\x19.meshtastic.resend_chunksH\x00\x42\x11\n\x0fpayload_variant*\xdf\x16\n\rHardwareModel\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08TLORA_V2\x10\x01\x12\x0c\n\x08TLORA_V1\x10\x02\x12\x12\n\x0eTLORA_V2_1_1P6\x10\x03\x12\t\n\x05TBEAM\x10\x04\x12\x0f\n\x0bHELTEC_V2_0\x10\x05\x12\x0e\n\nTBEAM_V0P7\x10\x06\x12\n\n\x06T_ECHO\x10\x07\x12\x10\n\x0cTLORA_V1_1P3\x10\x08\x12\x0b\n\x07RAK4631\x10\t\x12\x0f\n\x0bHELTEC_V2_1\x10\n\x12\r\n\tHELTEC_V1\x10\x0b\x12\x18\n\x14LILYGO_TBEAM_S3_CORE\x10\x0c\x12\x0c\n\x08RAK11200\x10\r\x12\x0b\n\x07NANO_G1\x10\x0e\x12\x12\n\x0eTLORA_V2_1_1P8\x10\x0f\x12\x0f\n\x0bTLORA_T3_S3\x10\x10\x12\x14\n\x10NANO_G1_EXPLORER\x10\x11\x12\x11\n\rNANO_G2_ULTRA\x10\x12\x12\r\n\tLORA_TYPE\x10\x13\x12\x0b\n\x07WIPHONE\x10\x14\x12\x0e\n\nWIO_WM1110\x10\x15\x12\x0b\n\x07RAK2560\x10\x16\x12\x13\n\x0fHELTEC_HRU_3601\x10\x17\x12\x1a\n\x16HELTEC_WIRELESS_BRIDGE\x10\x18\x12\x0e\n\nSTATION_G1\x10\x19\x12\x0c\n\x08RAK11310\x10\x1a\x12\x15\n\x11MAKERFABS_TRACKER\x10\x1b\x12\x16\n\x12MAKERFABS_RESERVED\x10\x1c\x12\r\n\tCANARYONE\x10\x1d\x12\x0f\n\x0bRP2040_LORA\x10\x1e\x12\x0e\n\nSTATION_G2\x10\x1f\x12\x11\n\rLORA_RELAY_V1\x10 \x12\x0f\n\x0bT_ECHO_PLUS\x10!\x12\x07\n\x03PPR\x10\"\x12\x0f\n\x0bGENIEBLOCKS\x10#\x12\x11\n\rNRF52_UNKNOWN\x10$\x12\r\n\tPORTDUINO\x10%\x12\x0f\n\x0b\x41NDROID_SIM\x10&\x12\n\n\x06\x44IY_V1\x10\'\x12\x15\n\x11NRF52840_PCA10059\x10(\x12\n\n\x06\x44R_DEV\x10)\x12\x0b\n\x07M5STACK\x10*\x12\r\n\tHELTEC_V3\x10+\x12\x11\n\rHELTEC_WSL_V3\x10,\x12\x13\n\x0f\x42\x45TAFPV_2400_TX\x10-\x12\x17\n\x13\x42\x45TAFPV_900_NANO_TX\x10.\x12\x0c\n\x08RPI_PICO\x10/\x12\x1b\n\x17HELTEC_WIRELESS_TRACKER\x10\x30\x12\x19\n\x15HELTEC_WIRELESS_PAPER\x10\x31\x12\n\n\x06T_DECK\x10\x32\x12\x0e\n\nT_WATCH_S3\x10\x33\x12\x11\n\rPICOMPUTER_S3\x10\x34\x12\x0f\n\x0bHELTEC_HT62\x10\x35\x12\x12\n\x0e\x45\x42YTE_ESP32_S3\x10\x36\x12\x11\n\rESP32_S3_PICO\x10\x37\x12\r\n\tCHATTER_2\x10\x38\x12\x1e\n\x1aHELTEC_WIRELESS_PAPER_V1_0\x10\x39\x12 \n\x1cHELTEC_WIRELESS_TRACKER_V1_0\x10:\x12\x0b\n\x07UNPHONE\x10;\x12\x0c\n\x08TD_LORAC\x10<\x12\x13\n\x0f\x43\x44\x45\x42YTE_EORA_S3\x10=\x12\x0f\n\x0bTWC_MESH_V4\x10>\x12\x16\n\x12NRF52_PROMICRO_DIY\x10?\x12\x1f\n\x1bRADIOMASTER_900_BANDIT_NANO\x10@\x12\x1c\n\x18HELTEC_CAPSULE_SENSOR_V3\x10\x41\x12\x1d\n\x19HELTEC_VISION_MASTER_T190\x10\x42\x12\x1d\n\x19HELTEC_VISION_MASTER_E213\x10\x43\x12\x1d\n\x19HELTEC_VISION_MASTER_E290\x10\x44\x12\x19\n\x15HELTEC_MESH_NODE_T114\x10\x45\x12\x16\n\x12SENSECAP_INDICATOR\x10\x46\x12\x13\n\x0fTRACKER_T1000_E\x10G\x12\x0b\n\x07RAK3172\x10H\x12\n\n\x06WIO_E5\x10I\x12\x1a\n\x16RADIOMASTER_900_BANDIT\x10J\x12\x13\n\x0fME25LS01_4Y10TD\x10K\x12\x18\n\x14RP2040_FEATHER_RFM95\x10L\x12\x15\n\x11M5STACK_COREBASIC\x10M\x12\x11\n\rM5STACK_CORE2\x10N\x12\r\n\tRPI_PICO2\x10O\x12\x12\n\x0eM5STACK_CORES3\x10P\x12\x11\n\rSEEED_XIAO_S3\x10Q\x12\x0b\n\x07MS24SF1\x10R\x12\x0c\n\x08TLORA_C6\x10S\x12\x0f\n\x0bWISMESH_TAP\x10T\x12\r\n\tROUTASTIC\x10U\x12\x0c\n\x08MESH_TAB\x10V\x12\x0c\n\x08MESHLINK\x10W\x12\x12\n\x0eXIAO_NRF52_KIT\x10X\x12\x10\n\x0cTHINKNODE_M1\x10Y\x12\x10\n\x0cTHINKNODE_M2\x10Z\x12\x0f\n\x0bT_ETH_ELITE\x10[\x12\x15\n\x11HELTEC_SENSOR_HUB\x10\\\x12\r\n\tMUZI_BASE\x10]\x12\x16\n\x12HELTEC_MESH_POCKET\x10^\x12\x14\n\x10SEEED_SOLAR_NODE\x10_\x12\x18\n\x14NOMADSTAR_METEOR_PRO\x10`\x12\r\n\tCROWPANEL\x10\x61\x12\x0b\n\x07LINK_32\x10\x62\x12\x18\n\x14SEEED_WIO_TRACKER_L1\x10\x63\x12\x1d\n\x19SEEED_WIO_TRACKER_L1_EINK\x10\x64\x12\x0f\n\x0bMUZI_R1_NEO\x10\x65\x12\x0e\n\nT_DECK_PRO\x10\x66\x12\x10\n\x0cT_LORA_PAGER\x10g\x12\x14\n\x10M5STACK_RESERVED\x10h\x12\x0f\n\x0bWISMESH_TAG\x10i\x12\x0b\n\x07RAK3312\x10j\x12\x10\n\x0cTHINKNODE_M5\x10k\x12\x15\n\x11HELTEC_MESH_SOLAR\x10l\x12\x0f\n\x0bT_ECHO_LITE\x10m\x12\r\n\tHELTEC_V4\x10n\x12\x0f\n\x0bM5STACK_C6L\x10o\x12\x19\n\x15M5STACK_CARDPUTER_ADV\x10p\x12\x1e\n\x1aHELTEC_WIRELESS_TRACKER_V2\x10q\x12\x11\n\rT_WATCH_ULTRA\x10r\x12\x10\n\x0cTHINKNODE_M3\x10s\x12\x12\n\x0eWISMESH_TAP_V2\x10t\x12\x0b\n\x07RAK3401\x10u\x12\x0b\n\x07RAK6421\x10v\x12\x10\n\x0cTHINKNODE_M4\x10w\x12\x10\n\x0cTHINKNODE_M6\x10x\x12\x12\n\x0eMESHSTICK_1262\x10y\x12\x10\n\x0cTBEAM_1_WATT\x10z\x12\x14\n\x10T5_S3_EPAPER_PRO\x10{\x12\r\n\tTBEAM_BPF\x10|\x12\x12\n\x0eMINI_EPAPER_S3\x10}\x12\x13\n\x0fTDISPLAY_S3_PRO\x10~\x12\x19\n\x15HELTEC_MESH_NODE_T096\x10\x7f\x12\x14\n\x0fMESH_TRACKER_X1\x10\x80\x01\x12\x11\n\x0cTHINKNODE_M7\x10\x81\x01\x12\x11\n\x0cTHINKNODE_M8\x10\x82\x01\x12\x11\n\x0cTHINKNODE_M9\x10\x83\x01\x12\x11\n\x0cHELTEC_V4_R8\x10\x84\x01\x12\x18\n\x13HELTEC_MESH_NODE_T1\x10\x85\x01\x12\x0f\n\nSTATION_G3\x10\x86\x01\x12\x13\n\x0eT_IMPULSE_PLUS\x10\x87\x01\x12\x10\n\x0bT_ECHO_CARD\x10\x88\x01\x12\x19\n\x14SEEED_WIO_TRACKER_L2\x10\x89\x01\x12\x11\n\x0c\x43ROWPANEL_P4\x10\x8a\x01\x12\x19\n\x14HELTEC_MESH_TOWER_V2\x10\x8b\x01\x12\x13\n\x0eMESHNOLOGY_W10\x10\x8c\x01\x12\x10\n\x0bHELTEC_RC32\x10\x8d\x01\x12\x10\n\x0bHELTEC_RC52\x10\x8e\x01\x12\x10\n\x0bHELTEC_RCC6\x10\x8f\x01\x12 \n\x1bSEEED_WIO_TRACKER_L1_PRO_1W\x10\x90\x01\x12\x13\n\x0eMESHNOLOGY_W12\x10\x91\x01\x12\x11\n\x0cMESHPAGER_X2\x10\x92\x01\x12\x12\n\rT_CONNECT_PRO\x10\x93\x01\x12\x1a\n\x15\x41XIOMETA_GENESIS_MINI\x10\x94\x01\x12\x0f\n\nPRIVATE_HW\x10\xff\x01*,\n\tConstants\x12\x08\n\x04ZERO\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xe9\x01*\xb4\x02\n\x11\x43riticalErrorCode\x12\x08\n\x04NONE\x10\x00\x12\x0f\n\x0bTX_WATCHDOG\x10\x01\x12\x14\n\x10SLEEP_ENTER_WAIT\x10\x02\x12\x0c\n\x08NO_RADIO\x10\x03\x12\x0f\n\x0bUNSPECIFIED\x10\x04\x12\x15\n\x11UBLOX_UNIT_FAILED\x10\x05\x12\r\n\tNO_AXP192\x10\x06\x12\x19\n\x15INVALID_RADIO_SETTING\x10\x07\x12\x13\n\x0fTRANSMIT_FAILED\x10\x08\x12\x0c\n\x08\x42ROWNOUT\x10\t\x12\x12\n\x0eSX1262_FAILURE\x10\n\x12\x11\n\rRADIO_SPI_BUG\x10\x0b\x12 \n\x1c\x46LASH_CORRUPTION_RECOVERABLE\x10\x0c\x12\"\n\x1e\x46LASH_CORRUPTION_UNRECOVERABLE\x10\r*\xa1\x01\n\x0f\x46irmwareEdition\x12\x0b\n\x07VANILLA\x10\x00\x12\x11\n\rSMART_CITIZEN\x10\x01\x12\x0e\n\nOPEN_SAUCE\x10\x10\x12\n\n\x06\x44\x45\x46\x43ON\x10\x11\x12\x0f\n\x0b\x42URNING_MAN\x10\x12\x12\x0e\n\nHAMVENTION\x10\x13\x12\x07\n\x03\x46\x41\x42\x10\x14\x12\x0e\n\nDRAGON_CON\x10\x15\x12\x07\n\x03\x43\x43\x43\x10\x16\x12\x0f\n\x0b\x44IY_EDITION\x10\x7f*\xe7\x03\n\x0f\x45xcludedModules\x12\x11\n\rEXCLUDED_NONE\x10\x00\x12\x0f\n\x0bMQTT_CONFIG\x10\x01\x12\x11\n\rSERIAL_CONFIG\x10\x02\x12\x13\n\x0f\x45XTNOTIF_CONFIG\x10\x04\x12\x17\n\x13STOREFORWARD_CONFIG\x10\x08\x12\x14\n\x10RANGETEST_CONFIG\x10\x10\x12\x14\n\x10TELEMETRY_CONFIG\x10 \x12\x14\n\x10\x43\x41NNEDMSG_CONFIG\x10@\x12\x11\n\x0c\x41UDIO_CONFIG\x10\x80\x01\x12\x1a\n\x15REMOTEHARDWARE_CONFIG\x10\x80\x02\x12\x18\n\x13NEIGHBORINFO_CONFIG\x10\x80\x04\x12\x1b\n\x16\x41MBIENTLIGHTING_CONFIG\x10\x80\x08\x12\x1b\n\x16\x44\x45TECTIONSENSOR_CONFIG\x10\x80\x10\x12\x16\n\x11PAXCOUNTER_CONFIG\x10\x80 \x12\x15\n\x10\x42LUETOOTH_CONFIG\x10\x80@\x12\x14\n\x0eNETWORK_CONFIG\x10\x80\x80\x01\x12\x1a\n\x14STATUSMESSAGE_CONFIG\x10\x80\x80\x02\x12\x1e\n\x18TRAFFICMANAGEMENT_CONFIG\x10\x80\x80\x04\x12\x10\n\nTAK_CONFIG\x10\x80\x80\x08\x12\x17\n\x11MESHBEACON_CONFIG\x10\x80\x80\x10\x42`\n\x14org.meshtastic.protoB\nMeshProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
|
|
17
17
|
|
|
18
18
|
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
19
19
|
pool.add_serialized_file(descriptor_data)
|
|
@@ -40,6 +40,7 @@ module Meshtastic
|
|
|
40
40
|
MeshPacket::Priority = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.MeshPacket.Priority").enummodule
|
|
41
41
|
MeshPacket::Delayed = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.MeshPacket.Delayed").enummodule
|
|
42
42
|
MeshPacket::TransportMechanism = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.MeshPacket.TransportMechanism").enummodule
|
|
43
|
+
MeshPacket::AckProofStatus = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.MeshPacket.AckProofStatus").enummodule
|
|
43
44
|
NodeInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.NodeInfo").msgclass
|
|
44
45
|
MyNodeInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.MyNodeInfo").msgclass
|
|
45
46
|
LogRecord = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.LogRecord").msgclass
|
|
@@ -10,7 +10,7 @@ require 'meshtastic/config_pb'
|
|
|
10
10
|
require 'meshtastic/field_metadata_pb'
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
descriptor_data = "\n\x1emeshtastic/module_config.proto\x12\nmeshtastic\x1a\x15meshtastic/atak.proto\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1fmeshtastic/field_metadata.proto\"\xf7\x63\n\x0cModuleConfig\x12\x33\n\x04mqtt\x18\x01 \x01(\x0b\x32#.meshtastic.ModuleConfig.MQTTConfigH\x00\x12\x37\n\x06serial\x18\x02 \x01(\x0b\x32%.meshtastic.ModuleConfig.SerialConfigH\x00\x12T\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32\x33.meshtastic.ModuleConfig.ExternalNotificationConfigH\x00\x12\x44\n\rstore_forward\x18\x04 \x01(\x0b\x32+.meshtastic.ModuleConfig.StoreForwardConfigH\x00\x12>\n\nrange_test\x18\x05 \x01(\x0b\x32(.meshtastic.ModuleConfig.RangeTestConfigH\x00\x12=\n\ttelemetry\x18\x06 \x01(\x0b\x32(.meshtastic.ModuleConfig.TelemetryConfigH\x00\x12\x46\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32,.meshtastic.ModuleConfig.CannedMessageConfigH\x00\x12\x35\n\x05\x61udio\x18\x08 \x01(\x0b\x32$.meshtastic.ModuleConfig.AudioConfigH\x00\x12H\n\x0fremote_hardware\x18\t \x01(\x0b\x32-.meshtastic.ModuleConfig.RemoteHardwareConfigH\x00\x12\x44\n\rneighbor_info\x18\n \x01(\x0b\x32+.meshtastic.ModuleConfig.NeighborInfoConfigH\x00\x12J\n\x10\x61mbient_lighting\x18\x0b \x01(\x0b\x32..meshtastic.ModuleConfig.AmbientLightingConfigH\x00\x12J\n\x10\x64\x65tection_sensor\x18\x0c \x01(\x0b\x32..meshtastic.ModuleConfig.DetectionSensorConfigH\x00\x12?\n\npaxcounter\x18\r \x01(\x0b\x32).meshtastic.ModuleConfig.PaxcounterConfigH\x00\x12\x45\n\rstatusmessage\x18\x0e \x01(\x0b\x32,.meshtastic.ModuleConfig.StatusMessageConfigH\x00\x12N\n\x12traffic_management\x18\x0f \x01(\x0b\x32\x30.meshtastic.ModuleConfig.TrafficManagementConfigH\x00\x12\x31\n\x03tak\x18\x10 \x01(\x0b\x32\".meshtastic.ModuleConfig.TAKConfigH\x00\x12@\n\x0bmesh_beacon\x18\x11 \x01(\x0b\x32).meshtastic.ModuleConfig.MeshBeaconConfigH\x00\x1a\xde\x06\n\nMQTTConfig\x12#\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x12\xca\xf3\x18\x0e:\x0cMQTT Enabled\x12\x1e\n\x07\x61\x64\x64ress\x18\x02 \x01(\tB\r\xca\xf3\x18\t:\x07\x41\x64\x64ress\x12 \n\x08username\x18\x03 \x01(\tB\x0e\xca\xf3\x18\n:\x08Username\x12 \n\x08password\x18\x04 \x01(\tB\x0e\xca\xf3\x18\n:\x08Password\x12\x34\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x42\x18\xca\xf3\x18\x14:\x12\x45ncryption Enabled\x12\x18\n\x0cjson_enabled\x18\x06 \x01(\x08\x42\x02\x18\x01\x12^\n\x0btls_enabled\x18\x07 \x01(\x08\x42I\xca\xf3\x18\x45:\x0bTLS EnabledB6TLS is required for the public Meshtastic MQTT server.\x12\x1e\n\x04root\x18\x08 \x01(\tB\x10\xca\xf3\x18\x0c:\nRoot Topic\x12{\n\x17proxy_to_client_enabled\x18\t \x01(\x08\x42Z\xca\xf3\x18V:\x11MQTT Client ProxyBAUtilizes the network connection on your phone to connect to MQTT.\x12\xb0\x02\n\x15map_reporting_enabled\x18\n \x01(\x08\x42\x90\x02\xca\xf3\x18\x8b\x02:\rMap ReportingB\xf9\x01Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name.\x12G\n\x13map_report_settings\x18\x0b \x01(\x0b\x32*.meshtastic.ModuleConfig.MapReportSettings\x1a\x9e\x02\n\x11MapReportSettings\x12<\n\x15publish_interval_secs\x18\x01 \x01(\rB\x1d\xca\xf3\x18\x19*\x01s:\x14Map Publish Interval\x12\x1a\n\x12position_precision\x18\x02 \x01(\r\x12\xae\x01\n\x16should_report_location\x18\x03 \x01(\x08\x42\x8d\x01\xca\xf3\x18\x88\x01:\x0fReport LocationBuI have read and understand the above. I voluntarily consent to the unencrypted transmission of my node data via MQTT.\x1a\x82\x01\n\x14RemoteHardwareConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1a\x61llow_undefined_pin_access\x18\x02 \x01(\x08\x12\x35\n\x0e\x61vailable_pins\x18\x03 \x03(\x0b\x32\x1d.meshtastic.RemoteHardwarePin\x1a\xba\x03\n\x12NeighborInfoConfig\x12\xb2\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xa0\x01\xca\xf3\x18\x9b\x01:\x15Neighbor Info EnabledB\x81\x01\x45nable neighbor info broadcasting. Periodically sends information about directly-heard neighbors to help visualize mesh topology.\x12\x31\n\x0fupdate_interval\x18\x02 \x01(\rB\x18\xca\xf3\x18\x14*\x01s:\x0fUpdate Interval\x12\xbb\x01\n\x12transmit_over_lora\x18\x03 \x01(\x08\x42\x9e\x01\xca\xf3\x18\x99\x01:\x12Transmit over LoRaB\x82\x01Whether to transmit neighbor info over LoRa in addition to MQTT and PhoneAPI. Not available on channels with default key and name.\x1a\x9a\x08\n\x15\x44\x65tectionSensorConfig\x12\x83\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xf1\x01\xca\xf3\x18\xec\x01:\x18\x44\x65tection Sensor EnabledB\xcf\x01\x45nables the detection sensor module, it needs to be enabled on both the node with the sensor, and any nodes that you want to receive detection sensor text messages or view the detection sensor log and chart.\x12R\n\x16minimum_broadcast_secs\x18\x02 \x01(\rB2\xca\xf3\x18.*\x01s:)Minimum time between detection broadcasts\x12?\n\x14state_broadcast_secs\x18\x03 \x01(\rB!\xca\xf3\x18\x1d*\x01s:\x18State Broadcast Interval\x12|\n\tsend_bell\x18\x04 \x01(\x08\x42i\xca\xf3\x18\x65:\tSend BellBXSend ASCII bell with alert message. Useful for triggering external notification on bell.\x12\x18\n\x04name\x18\x05 \x01(\tB\n\xca\xf3\x18\x06:\x04Name\x12.\n\x0bmonitor_pin\x18\x06 \x01(\rB\x19\xca\xf3\x18\x15:\x13GPIO Pin to monitor\x12m\n\x16\x64\x65tection_trigger_type\x18\x07 \x01(\x0e\x32:.meshtastic.ModuleConfig.DetectionSensorConfig.TriggerTypeB\x11\xca\xf3\x18\r:\x0bTriggerType\x12\xa3\x01\n\nuse_pullup\x18\x08 \x01(\x08\x42\x8e\x01\xca\xf3\x18\x89\x01:\x14Uses pullup resistorBqWhether or not use INPUT_PULLUP mode for GPIO pin. Only applicable if the board uses pull-up resistors on the pin\"\x88\x01\n\x0bTriggerType\x12\r\n\tLOGIC_LOW\x10\x00\x12\x0e\n\nLOGIC_HIGH\x10\x01\x12\x10\n\x0c\x46\x41LLING_EDGE\x10\x02\x12\x0f\n\x0bRISING_EDGE\x10\x03\x12\x1a\n\x16\x45ITHER_EDGE_ACTIVE_LOW\x10\x04\x12\x1b\n\x17\x45ITHER_EDGE_ACTIVE_HIGH\x10\x05\x1a\xe4\x05\n\x0b\x41udioConfig\x12z\n\x0e\x63odec2_enabled\x18\x01 \x01(\x08\x42\x62\xca\xf3\x18^:\x0e\x43odec2 EnabledBLEnable Codec2 audio encoding/decoding for voice communication over the mesh.\x12=\n\x07ptt_pin\x18\x02 \x01(\rB,\xca\xf3\x18(:\x07PTT PinB\x1dPush-to-talk GPIO pin number.\x12\xca\x01\n\x07\x62itrate\x18\x03 \x01(\x0e\x32/.meshtastic.ModuleConfig.AudioConfig.Audio_BaudB\x87\x01\xca\xf3\x18\x82\x01:\x07\x42itrateBwThe Codec2 bitrate to use. The sample rate is always 8 kHz. Lower bitrates use less bandwidth but reduce audio quality.\x12\x1c\n\x06i2s_ws\x18\x04 \x01(\rB\x0c\xca\xf3\x18\x08:\x06I2S WS\x12\x1c\n\x06i2s_sd\x18\x05 \x01(\rB\x0c\xca\xf3\x18\x08:\x06I2S SD\x12\x1e\n\x07i2s_din\x18\x06 \x01(\rB\r\xca\xf3\x18\t:\x07I2S DIN\x12\x1e\n\x07i2s_sck\x18\x07 \x01(\rB\r\xca\xf3\x18\t:\x07I2S SCK\"\xd0\x01\n\nAudio_Baud\x12\x12\n\x0e\x43ODEC2_DEFAULT\x10\x00\x12\x0f\n\x0b\x43ODEC2_3200\x10\x01\x12\x0f\n\x0b\x43ODEC2_2400\x10\x02\x12\x0f\n\x0b\x43ODEC2_1600\x10\x03\x12\x0f\n\x0b\x43ODEC2_1400\x10\x04\x12\x0f\n\x0b\x43ODEC2_1300\x10\x05\x12\x0f\n\x0b\x43ODEC2_1200\x10\x06\x12\x12\n\nCODEC2_700\x10\x07\x1a\x02\x08\x01\x12\x13\n\x0b\x43ODEC2_700B\x10\x08\x1a\x02\x08\x01\x12\x0f\n\x0b\x43ODEC2_700C\x10\t\x12\x0e\n\nCODEC2_450\x10\n\x1a\x81\x04\n\x10PaxcounterConfig\x12\xd5\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xc3\x01\xca\xf3\x18\xbe\x01:\x13PAX Counter EnabledB\xa6\x01When enabled the PAX Counter module counts the number of people passing by using WiFi and Bluetooth. Both WiFI and Bluetooth must be disabled for PAX counter to work.\x12<\n\x1apaxcounter_update_interval\x18\x02 \x01(\rB\x18\xca\xf3\x18\x14*\x01s:\x0fUpdate Interval\x12l\n\x0ewifi_threshold\x18\x03 \x01(\x05\x42T\xca\xf3\x18P:\x0eWiFi ThresholdB>RSSI threshold for WiFi device counting. Default is \xe2\x88\x92\x38\x30 dBm.\x12i\n\rble_threshold\x18\x04 \x01(\x05\x42R\xca\xf3\x18N:\rBLE ThresholdB=RSSI threshold for BLE device counting. Default is \xe2\x88\x92\x38\x30 dBm.\x1a\xc2\x05\n\x17TrafficManagementConfig\x12\x46\n\x1aposition_min_interval_secs\x18\x04 \x01(\rB\"\xca\xf3\x18\x1e*\x01s:\x19Minimum Position Interval\x12I\n!nodeinfo_direct_response_max_hops\x18\x06 \x01(\rB\x1e\xca\xf3\x18\x1a:\x18\x44irect NodeInfo Max Hops\x12:\n\x16rate_limit_window_secs\x18\x08 \x01(\rB\x1a\xca\xf3\x18\x16*\x01s:\x11Rate Limit Window\x12l\n\x16rate_limit_max_packets\x18\t \x01(\rBL\xca\xf3\x18H:\x16Rate Limit Max PacketsB.The most packets one node may send per window.\x12s\n\x18unknown_packet_threshold\x18\x0b \x01(\rBQ\xca\xf3\x18M:\x18Unknown Packet ThresholdB1How many per window before the sender is dropped.J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x07\x10\x08J\x04\x08\n\x10\x0bJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0fR\x07\x65nabledR\x16position_dedup_enabledR\x17position_precision_bitsR\x18nodeinfo_direct_responseR\x12rate_limit_enabledR\x14\x64rop_unknown_enabledR\x15\x65xhaust_hop_telemetryR\x14\x65xhaust_hop_positionR\x14router_preserve_hops\x1a\xe5\t\n\x0cSerialConfig\x12%\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x14\xca\xf3\x18\x10:\x0eSerial Enabled\x12Z\n\x04\x65\x63ho\x18\x02 \x01(\x08\x42L\xca\xf3\x18H:\x04\x45\x63hoB@If set, any packets you send will be echoed back to your device.\x12.\n\x03rxd\x18\x03 \x01(\rB!\xca\xf3\x18\x1d:\x1bReceive data (rxd) GPIO pin\x12/\n\x03txd\x18\x04 \x01(\rB\"\xca\xf3\x18\x1e:\x1cTransmit data (txd) GPIO pin\x12K\n\x04\x62\x61ud\x18\x05 \x01(\x0e\x32\x31.meshtastic.ModuleConfig.SerialConfig.Serial_BaudB\n\xca\xf3\x18\x06:\x04\x42\x61ud\x12\x1e\n\x07timeout\x18\x06 \x01(\rB\r\xca\xf3\x18\t:\x07Timeout\x12K\n\x04mode\x18\x07 \x01(\x0e\x32\x31.meshtastic.ModuleConfig.SerialConfig.Serial_ModeB\n\xca\xf3\x18\x06:\x04Mode\x12$\n\x1coverride_console_serial_port\x18\x08 \x01(\x08\"\xa2\x04\n\x0bSerial_Baud\x12\x1f\n\x0c\x42\x41UD_DEFAULT\x10\x00\x1a\r\xca\xf3\x18\t:\x07\x44\x65\x66\x61ult\x12\x1c\n\x08\x42\x41UD_110\x10\x01\x1a\x0e\xca\xf3\x18\n:\x08\x31\x31\x30 Baud\x12\x1c\n\x08\x42\x41UD_300\x10\x02\x1a\x0e\xca\xf3\x18\n:\x08\x33\x30\x30 Baud\x12\x1c\n\x08\x42\x41UD_600\x10\x03\x1a\x0e\xca\xf3\x18\n:\x08\x36\x30\x30 Baud\x12\x1e\n\tBAUD_1200\x10\x04\x1a\x0f\xca\xf3\x18\x0b:\t1200 Baud\x12\x1e\n\tBAUD_2400\x10\x05\x1a\x0f\xca\xf3\x18\x0b:\t2400 Baud\x12\x1e\n\tBAUD_4800\x10\x06\x1a\x0f\xca\xf3\x18\x0b:\t4800 Baud\x12\x1e\n\tBAUD_9600\x10\x07\x1a\x0f\xca\xf3\x18\x0b:\t9600 Baud\x12 \n\nBAUD_19200\x10\x08\x1a\x10\xca\xf3\x18\x0c:\n19200 Baud\x12 \n\nBAUD_38400\x10\t\x1a\x10\xca\xf3\x18\x0c:\n38400 Baud\x12 \n\nBAUD_57600\x10\n\x1a\x10\xca\xf3\x18\x0c:\n57600 Baud\x12\"\n\x0b\x42\x41UD_115200\x10\x0b\x1a\x11\xca\xf3\x18\r:\x0b\x31\x31\x35\x32\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_230400\x10\x0c\x1a\x11\xca\xf3\x18\r:\x0b\x32\x33\x30\x34\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_460800\x10\r\x1a\x11\xca\xf3\x18\r:\x0b\x34\x36\x30\x38\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_576000\x10\x0e\x1a\x11\xca\xf3\x18\r:\x0b\x35\x37\x36\x30\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_921600\x10\x0f\x1a\x11\xca\xf3\x18\r:\x0b\x39\x32\x31\x36\x30\x30 Baud\"\xeb\x01\n\x0bSerial_Mode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x18\n\x06SIMPLE\x10\x01\x1a\x0c\xca\xf3\x18\x08:\x06Simple\x12\x1a\n\x05PROTO\x10\x02\x1a\x0f\xca\xf3\x18\x0b:\tProtobufs\x12\x1f\n\x07TEXTMSG\x10\x03\x1a\x12\xca\xf3\x18\x0e:\x0cText Message\x12\x1e\n\x04NMEA\x10\x04\x1a\x14\xca\xf3\x18\x10:\x0eNMEA Positions\x12\x1a\n\x07\x43\x41LTOPO\x10\x05\x1a\r\xca\xf3\x18\t:\x07\x43\x41LTOPO\x12\x08\n\x04WS85\x10\x06\x12\r\n\tVE_DIRECT\x10\x07\x12\r\n\tMS_CONFIG\x10\x08\x12\x07\n\x03LOG\x10\t\x12\x0b\n\x07LOGTEXT\x10\n\x1a\xb1\n\n\x1a\x45xternalNotificationConfig\x12\x34\n\x07\x65nabled\x18\x01 \x01(\x08\x42#\xca\xf3\x18\x1f:\x1d\x45xternal Notification Enabled\x12\x31\n\toutput_ms\x18\x02 \x01(\rB\x1e\xca\xf3\x18\x1a*\x02ms:\x14GPIO Output Duration\x12%\n\x06output\x18\x03 \x01(\rB\x15\xca\xf3\x18\x11:\x0fOutput pin GPIO\x12\x31\n\x0coutput_vibra\x18\x08 \x01(\rB\x1b\xca\xf3\x18\x17:\x15Output pin vibra GPIO\x12\x33\n\routput_buzzer\x18\t \x01(\rB\x1c\xca\xf3\x18\x18:\x16Output pin buzzer GPIO\x12q\n\x06\x61\x63tive\x18\x04 \x01(\x08\x42\x61\xca\xf3\x18]:\x06\x41\x63tiveBSIf enabled, the \'output\' Pin will be pulled active high, disabled means active low.\x12;\n\ralert_message\x18\x05 \x01(\x08\x42$\xca\xf3\x18 :\x1e\x41lert when receiving a message\x12\x65\n\x13\x61lert_message_vibra\x18\n \x01(\x08\x42H\xca\xf3\x18\x44:\x11Vibra Motor AlertB/Alert GPIO vibra motor when receiving a message\x12N\n\x14\x61lert_message_buzzer\x18\x0b \x01(\x08\x42\x30\xca\xf3\x18,:*Alert GPIO buzzer when receiving a message\x12\x35\n\nalert_bell\x18\x06 \x01(\x08\x42!\xca\xf3\x18\x1d:\x1b\x41lert when receiving a bell\x12L\n\x10\x61lert_bell_vibra\x18\x0c \x01(\x08\x42\x32\xca\xf3\x18.:,Alert GPIO vibra motor when receiving a bell\x12H\n\x11\x61lert_bell_buzzer\x18\r \x01(\x08\x42-\xca\xf3\x18):\'Alert GPIO buzzer when receiving a bell\x12\xee\x01\n\x07use_pwm\x18\x07 \x01(\x08\x42\xdc\x01\xca\xf3\x18\xd7\x01:\x0eUse PWM BuzzerB\xc4\x01Use a PWM output (like the RAK Buzzer) for tunes instead of an on/off output. This will ignore the output, output duration and active settings and use the device config buzzer GPIO option instead.\x12)\n\x0bnag_timeout\x18\x0e \x01(\rB\x14\xca\xf3\x18\x10*\x01s:\x0bNag Timeout\x12\xc8\x01\n\x11use_i2s_as_buzzer\x18\x0f \x01(\x08\x42\xac\x01\xca\xf3\x18\xa7\x01:\x11Use I2S As BuzzerB\x91\x01\x45nables devices with native I2S audio output to use the RTTTL over speaker like a buzzer. T-Watch S3 and T-Deck for example have this capability.\x1a\xe1\x03\n\x12StoreForwardConfig\x12W\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x46\xca\xf3\x18\x42:\x19Store and Forward EnabledB%Enables the store and forward module.\x12]\n\theartbeat\x18\x02 \x01(\x08\x42J\xca\xf3\x18\x46:\x0eSend HeartbeatB4Send a heartbeat to advertise the server\'s presence.\x12(\n\x07records\x18\x03 \x01(\rB\x17\xca\xf3\x18\x13:\x11Number of records\x12\x34\n\x12history_return_max\x18\x04 \x01(\rB\x18\xca\xf3\x18\x14:\x12History Return Max\x12:\n\x15history_return_window\x18\x05 \x01(\rB\x1b\xca\xf3\x18\x17:\x15History Return Window\x12w\n\tis_server\x18\x06 \x01(\x08\x42\x64\xca\xf3\x18`:\x06ServerBVEnable this device as a Store and Forward server. Requires an ESP32 device with PSRAM.\x1a\x86\x02\n\x0fRangeTestConfig\x12)\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x18\xca\xf3\x18\x14:\x12Range Test Enabled\x12%\n\x06sender\x18\x02 \x01(\rB\x15\xca\xf3\x18\x11:\x0fSender Interval\x12\x87\x01\n\x04save\x18\x03 \x01(\x08\x42y\xca\xf3\x18u:\x04SaveBmSaves a CSV with the range test message details, currently only available on ESP32 devices with a web server.\x12\x17\n\x0f\x63lear_on_reboot\x18\x04 \x01(\x08\x1a\xe9\x07\n\x0fTelemetryConfig\x12@\n\x16\x64\x65vice_update_interval\x18\x01 \x01(\rB \xca\xf3\x18\x1c*\x01s:\x17\x44\x65vice Metrics Interval\x12J\n\x1b\x65nvironment_update_interval\x18\x02 \x01(\rB%\xca\xf3\x18!*\x01s:\x1c\x45nvironment Metrics Interval\x12J\n\x1f\x65nvironment_measurement_enabled\x18\x03 \x01(\x08\x42!\xca\xf3\x18\x1d:\x1b\x45nvironment Metrics Enabled\x12?\n\x1a\x65nvironment_screen_enabled\x18\x04 \x01(\x08\x42\x1b\xca\xf3\x18\x17:\x15Show on device screen\x12@\n\x1e\x65nvironment_display_fahrenheit\x18\x05 \x01(\x08\x42\x18\xca\xf3\x18\x14:\x12\x44isplay Fahrenheit\x12>\n\x13\x61ir_quality_enabled\x18\x06 \x01(\x08\x42!\xca\xf3\x18\x1d:\x1b\x41ir Quality Metrics Enabled\x12\x43\n\x14\x61ir_quality_interval\x18\x07 \x01(\rB%\xca\xf3\x18!*\x01s:\x1c\x41ir Quality Metrics Interval\x12\x42\n\x19power_measurement_enabled\x18\x08 \x01(\x08\x42\x1f\xca\xf3\x18\x1b:\x19Power Measurement Enabled\x12>\n\x15power_update_interval\x18\t \x01(\rB\x1f\xca\xf3\x18\x1b*\x01s:\x16Power Metrics Interval\x12\x30\n\x14power_screen_enabled\x18\n \x01(\x08\x42\x12\xca\xf3\x18\x0e:\x0cPower Screen\x12\"\n\x1ahealth_measurement_enabled\x18\x0b \x01(\x08\x12\x1e\n\x16health_update_interval\x18\x0c \x01(\r\x12\x1d\n\x15health_screen_enabled\x18\r \x01(\x08\x12\xb6\x01\n\x18\x64\x65vice_telemetry_enabled\x18\x0e \x01(\x08\x42\x93\x01\xca\xf3\x18\x8e\x01:\x18\x42roadcast Device MetricsBrEnable broadcasting device metrics to the mesh network. When disabled, metrics are only sent to connected clients.\x12\"\n\x1a\x61ir_quality_screen_enabled\x18\x0f \x01(\x08\x1a\xff\x06\n\x13\x43\x61nnedMessageConfig\x12\'\n\x0frotary1_enabled\x18\x01 \x01(\x08\x42\x0e\xca\xf3\x18\n:\x08Rotary 1\x12&\n\x11inputbroker_pin_a\x18\x02 \x01(\rB\x0b\xca\xf3\x18\x07:\x05Pin A\x12&\n\x11inputbroker_pin_b\x18\x03 \x01(\rB\x0b\xca\xf3\x18\x07:\x05Pin B\x12.\n\x15inputbroker_pin_press\x18\x04 \x01(\rB\x0f\xca\xf3\x18\x0b:\tPress Pin\x12w\n\x14inputbroker_event_cw\x18\x05 \x01(\x0e\x32;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharB\x1c\xca\xf3\x18\x18:\x16\x43lockwise Rotary Event\x12\x80\x01\n\x15inputbroker_event_ccw\x18\x06 \x01(\x0e\x32;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharB$\xca\xf3\x18 :\x1e\x43ounter Clockwise Rotary Event\x12w\n\x17inputbroker_event_press\x18\x07 \x01(\x0e\x32;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharB\x19\xca\xf3\x18\x15:\x13\x45ncoder Press Event\x12(\n\x0fupdown1_enabled\x18\x08 \x01(\x08\x42\x0f\xca\xf3\x18\x0b:\tUp Down 1\x12\x13\n\x07\x65nabled\x18\t \x01(\x08\x42\x02\x18\x01\x12\x1e\n\x12\x61llow_input_source\x18\n \x01(\tB\x02\x18\x01\x12\"\n\tsend_bell\x18\x0b \x01(\x08\x42\x0f\xca\xf3\x18\x0b:\tSend Bell\"\xc6\x01\n\x0eInputEventChar\x12\x14\n\x04NONE\x10\x00\x1a\n\xca\xf3\x18\x06:\x04None\x12\x10\n\x02UP\x10\x11\x1a\x08\xca\xf3\x18\x04:\x02Up\x12\x14\n\x04\x44OWN\x10\x12\x1a\n\xca\xf3\x18\x06:\x04\x44own\x12\x14\n\x04LEFT\x10\x13\x1a\n\xca\xf3\x18\x06:\x04Left\x12\x16\n\x05RIGHT\x10\x14\x1a\x0b\xca\xf3\x18\x07:\x05Right\x12\x18\n\x06SELECT\x10\n\x1a\x0c\xca\xf3\x18\x08:\x06Select\x12\x14\n\x04\x42\x41\x43K\x10\x1b\x1a\n\xca\xf3\x18\x06:\x04\x42\x61\x63k\x12\x18\n\x06\x43\x41NCEL\x10\x18\x1a\x0c\xca\xf3\x18\x08:\x06\x43\x61ncel\x1a\xd1\x04\n\x15\x41mbientLightingConfig\x12\x41\n\tled_state\x18\x01 \x01(\x08\x42.\xca\xf3\x18*:\tLED StateB\x1dThe state of the LED (on/off)\x12t\n\x07\x63urrent\x18\x02 \x01(\rBc\xca\xf3\x18_\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00?@:\x07\x43urrentB!Drive current for the LED output.J\x1fled|brightness|ambient|lighting\x12{\n\x03red\x18\x03 \x01(\rBn\xca\xf3\x18j\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\xe0o@:\x03RedB*The red level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting\x12\x81\x01\n\x05green\x18\x04 \x01(\rBr\xca\xf3\x18n\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\xe0o@:\x05GreenB,The green level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting\x12~\n\x04\x62lue\x18\x05 \x01(\rBp\xca\xf3\x18l\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\xe0o@:\x04\x42lueB+The blue level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting\x1a*\n\x13StatusMessageConfig\x12\x13\n\x0bnode_status\x18\x01 \x01(\t\x1a\xe3\x06\n\x10MeshBeaconConfig\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12(\n\x11\x62roadcast_message\x18\x04 \x01(\tB\r\xca\xf3\x18\t:\x07Message\x12<\n\x17\x62roadcast_offer_channel\x18\x05 \x01(\x0b\x32\x1b.meshtastic.ChannelSettings\x12H\n\x16\x62roadcast_offer_region\x18\x06 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12N\n\x16\x62roadcast_offer_preset\x18\x07 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPresetH\x00\x88\x01\x01\x12\x32\n\x17\x62roadcast_interval_secs\x18\x0b \x01(\rB\x11\xca\xf3\x18\r*\x01s:\x08Interval\x12T\n\x11\x62roadcast_targets\x18\r \x03(\x0b\x32\x39.meshtastic.ModuleConfig.MeshBeaconConfig.BroadcastTarget\x1a\xc4\x01\n\x0f\x42roadcastTarget\x12>\n\x06preset\x18\x01 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPresetH\x00\x88\x01\x01\x12\x38\n\x06region\x18\x02 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12\x1a\n\rchannel_index\x18\x04 \x01(\rH\x01\x88\x01\x01\x42\t\n\x07_presetB\x10\n\x0e_channel_index\"b\n\x05\x46lags\x12\r\n\tFLAG_NONE\x10\x00\x12\x17\n\x13\x46LAG_LISTEN_ENABLED\x10\x01\x12\x1a\n\x16\x46LAG_BROADCAST_ENABLED\x10\x02\x12\x15\n\x11\x46LAG_LEGACY_SPLIT\x10\x04\x42\x19\n\x17_broadcast_offer_presetJ\x04\x08\x03\x10\x04J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0bR\x16\x62roadcast_send_as_nodeR\x14\x62roadcast_on_channelR\x13\x62roadcast_on_regionR\x13\x62roadcast_on_preset\x1ai\n\tTAKConfig\x12*\n\x04team\x18\x01 \x01(\x0e\x32\x10.meshtastic.TeamB\n\xca\xf3\x18\x06:\x04Team\x12\x30\n\x04role\x18\x02 \x01(\x0e\x32\x16.meshtastic.MemberRoleB\n\xca\xf3\x18\x06:\x04RoleB\x11\n\x0fpayload_variant\"d\n\x11RemoteHardwarePin\x12\x10\n\x08gpio_pin\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12/\n\x04type\x18\x03 \x01(\x0e\x32!.meshtastic.RemoteHardwarePinType*I\n\x15RemoteHardwarePinType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x10\n\x0c\x44IGITAL_READ\x10\x01\x12\x11\n\rDIGITAL_WRITE\x10\x02\x42h\n\x14org.meshtastic.protoB\x12ModuleConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
|
|
13
|
+
descriptor_data = "\n\x1emeshtastic/module_config.proto\x12\nmeshtastic\x1a\x15meshtastic/atak.proto\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\x1fmeshtastic/field_metadata.proto\"\xadx\n\x0cModuleConfig\x12\x33\n\x04mqtt\x18\x01 \x01(\x0b\x32#.meshtastic.ModuleConfig.MQTTConfigH\x00\x12\x37\n\x06serial\x18\x02 \x01(\x0b\x32%.meshtastic.ModuleConfig.SerialConfigH\x00\x12T\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32\x33.meshtastic.ModuleConfig.ExternalNotificationConfigH\x00\x12\x44\n\rstore_forward\x18\x04 \x01(\x0b\x32+.meshtastic.ModuleConfig.StoreForwardConfigH\x00\x12>\n\nrange_test\x18\x05 \x01(\x0b\x32(.meshtastic.ModuleConfig.RangeTestConfigH\x00\x12=\n\ttelemetry\x18\x06 \x01(\x0b\x32(.meshtastic.ModuleConfig.TelemetryConfigH\x00\x12\x46\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32,.meshtastic.ModuleConfig.CannedMessageConfigH\x00\x12\x35\n\x05\x61udio\x18\x08 \x01(\x0b\x32$.meshtastic.ModuleConfig.AudioConfigH\x00\x12H\n\x0fremote_hardware\x18\t \x01(\x0b\x32-.meshtastic.ModuleConfig.RemoteHardwareConfigH\x00\x12\x44\n\rneighbor_info\x18\n \x01(\x0b\x32+.meshtastic.ModuleConfig.NeighborInfoConfigH\x00\x12J\n\x10\x61mbient_lighting\x18\x0b \x01(\x0b\x32..meshtastic.ModuleConfig.AmbientLightingConfigH\x00\x12J\n\x10\x64\x65tection_sensor\x18\x0c \x01(\x0b\x32..meshtastic.ModuleConfig.DetectionSensorConfigH\x00\x12?\n\npaxcounter\x18\r \x01(\x0b\x32).meshtastic.ModuleConfig.PaxcounterConfigH\x00\x12S\n\rstatusmessage\x18\x0e \x01(\x0b\x32,.meshtastic.ModuleConfig.StatusMessageConfigB\x0c\xca\xf3\x18\x08R\x06\x32.7.20H\x00\x12[\n\x12traffic_management\x18\x0f \x01(\x0b\x32\x30.meshtastic.ModuleConfig.TrafficManagementConfigB\x0b\xca\xf3\x18\x07R\x05\x32.8.0H\x00\x12>\n\x03tak\x18\x10 \x01(\x0b\x32\".meshtastic.ModuleConfig.TAKConfigB\x0b\xca\xf3\x18\x07R\x05\x32.8.0H\x00\x12M\n\x0bmesh_beacon\x18\x11 \x01(\x0b\x32).meshtastic.ModuleConfig.MeshBeaconConfigB\x0b\xca\xf3\x18\x07R\x05\x32.8.0H\x00\x1a\xe2\x07\n\nMQTTConfig\x12\x38\n\x07\x65nabled\x18\x01 \x01(\x08\x42\'\xca\xf3\x18#:\x0cMQTT EnabledB\x13\x45nable MQTT gateway\x12\x33\n\x07\x61\x64\x64ress\x18\x02 \x01(\tB\"\xca\xf3\x18\x1e:\x07\x41\x64\x64ressB\x13MQTT server address\x12/\n\x08username\x18\x03 \x01(\tB\x1d\xca\xf3\x18\x19:\x08UsernameB\rMQTT username\x12/\n\x08password\x18\x04 \x01(\tB\x1d\xca\xf3\x18\x19:\x08PasswordB\rMQTT password\x12T\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x42\x38\xca\xf3\x18\x34:\x12\x45ncryption EnabledB\x1eSend encrypted packets to MQTT\x12#\n\x0cjson_enabled\x18\x06 \x01(\x08\x42\r\x18\x01\xca\xf3\x18\x07Z\x05\x32.8.0\x12^\n\x0btls_enabled\x18\x07 \x01(\x08\x42I\xca\xf3\x18\x45:\x0bTLS EnabledB6TLS is required for the public Meshtastic MQTT server.\x12/\n\x04root\x18\x08 \x01(\tB!\xca\xf3\x18\x1d:\nRoot TopicB\x0fMQTT root topic\x12{\n\x17proxy_to_client_enabled\x18\t \x01(\x08\x42Z\xca\xf3\x18V:\x11MQTT Client ProxyBAUtilizes the network connection on your phone to connect to MQTT.\x12\xb0\x02\n\x15map_reporting_enabled\x18\n \x01(\x08\x42\x90\x02\xca\xf3\x18\x8b\x02:\rMap ReportingB\xf9\x01Your node will periodically send an unencrypted map report packet to the configured MQTT server, this includes id, short and long name, approximate location, hardware model, role, firmware version, LoRa region, modem preset and primary channel name.\x12G\n\x13map_report_settings\x18\x0b \x01(\x0b\x32*.meshtastic.ModuleConfig.MapReportSettings\x1a\xcb\x02\n\x11MapReportSettings\x12\x62\n\x15publish_interval_secs\x18\x01 \x01(\rBC\xca\xf3\x18?*\x01s:\x14Map Publish IntervalB$How often a map report is published.\x12\x1a\n\x12position_precision\x18\x02 \x01(\r\x12\xb5\x01\n\x16should_report_location\x18\x03 \x01(\x08\x42\x94\x01\xca\xf3\x18\x8f\x01:\x0fReport LocationBuI have read and understand the above. I voluntarily consent to the unencrypted transmission of my node data via MQTT.R\x05\x32.6.8\x1a\x82\x01\n\x14RemoteHardwareConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1a\x61llow_undefined_pin_access\x18\x02 \x01(\x08\x12\x35\n\x0e\x61vailable_pins\x18\x03 \x03(\x0b\x32\x1d.meshtastic.RemoteHardwarePin\x1a\xe1\x03\n\x12NeighborInfoConfig\x12\xb2\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xa0\x01\xca\xf3\x18\x9b\x01:\x15Neighbor Info EnabledB\x81\x01\x45nable neighbor info broadcasting. Periodically sends information about directly-heard neighbors to help visualize mesh topology.\x12X\n\x0fupdate_interval\x18\x02 \x01(\rB?\xca\xf3\x18;*\x01s:\x0fUpdate IntervalB%How often to broadcast neighbor info.\x12\xbb\x01\n\x12transmit_over_lora\x18\x03 \x01(\x08\x42\x9e\x01\xca\xf3\x18\x99\x01:\x12Transmit over LoRaB\x82\x01Whether to transmit neighbor info over LoRa in addition to MQTT and PhoneAPI. Not available on channels with default key and name.\x1a\xf2\n\n\x15\x44\x65tectionSensorConfig\x12\x83\x02\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xf1\x01\xca\xf3\x18\xec\x01:\x18\x44\x65tection Sensor EnabledB\xcf\x01\x45nables the detection sensor module, it needs to be enabled on both the node with the sensor, and any nodes that you want to receive detection sensor text messages or view the detection sensor log and chart.\x12~\n\x16minimum_broadcast_secs\x18\x02 \x01(\rB^\xca\xf3\x18Z*\x01s:)Minimum time between detection broadcastsB*Minimum time between detection broadcasts.\x12\xa1\x01\n\x14state_broadcast_secs\x18\x03 \x01(\rB\x82\x01\xca\xf3\x18~*\x01s:\x18State Broadcast IntervalB_How often to send the detection sensor state to the mesh, whether or not anything was detected.\x12|\n\tsend_bell\x18\x04 \x01(\x08\x42i\xca\xf3\x18\x65:\tSend BellBXSend ASCII bell with alert message. Useful for triggering external notification on bell.\x12\x37\n\x04name\x18\x05 \x01(\tB)\xca\xf3\x18%:\x04NameB\x1dSensor name for mesh messages\x12S\n\x0bmonitor_pin\x18\x06 \x01(\rB>\xca\xf3\x18::\x13GPIO Pin to monitorB#GPIO pin watched for state changes.\x12\x84\x01\n\x16\x64\x65tection_trigger_type\x18\x07 \x01(\x0e\x32:.meshtastic.ModuleConfig.DetectionSensorConfig.TriggerTypeB(\xca\xf3\x18$:\x0bTriggerTypeB\x15Type of trigger event\x12\xa3\x01\n\nuse_pullup\x18\x08 \x01(\x08\x42\x8e\x01\xca\xf3\x18\x89\x01:\x14Uses pullup resistorBqWhether or not use INPUT_PULLUP mode for GPIO pin. Only applicable if the board uses pull-up resistors on the pin\"\xf5\x01\n\x0bTriggerType\x12\x18\n\tLOGIC_LOW\x10\x00\x1a\t\xca\xf3\x18\x05:\x03Low\x12\x1a\n\nLOGIC_HIGH\x10\x01\x1a\n\xca\xf3\x18\x06:\x04High\x12$\n\x0c\x46\x41LLING_EDGE\x10\x02\x1a\x12\xca\xf3\x18\x0e:\x0c\x46\x61lling Edge\x12\"\n\x0bRISING_EDGE\x10\x03\x1a\x11\xca\xf3\x18\r:\x0bRising Edge\x12\x31\n\x16\x45ITHER_EDGE_ACTIVE_LOW\x10\x04\x1a\x15\xca\xf3\x18\x11:\x0f\x45ither Edge Low\x12\x33\n\x17\x45ITHER_EDGE_ACTIVE_HIGH\x10\x05\x1a\x16\xca\xf3\x18\x12:\x10\x45ither Edge High\x1a\xf2\x06\n\x0b\x41udioConfig\x12z\n\x0e\x63odec2_enabled\x18\x01 \x01(\x08\x42\x62\xca\xf3\x18^:\x0e\x43odec2 EnabledBLEnable Codec2 audio encoding/decoding for voice communication over the mesh.\x12=\n\x07ptt_pin\x18\x02 \x01(\rB,\xca\xf3\x18(:\x07PTT PinB\x1dPush-to-talk GPIO pin number.\x12\xca\x01\n\x07\x62itrate\x18\x03 \x01(\x0e\x32/.meshtastic.ModuleConfig.AudioConfig.Audio_BaudB\x87\x01\xca\xf3\x18\x82\x01:\x07\x42itrateBwThe Codec2 bitrate to use. The sample rate is always 8 kHz. Lower bitrates use less bandwidth but reduce audio quality.\x12\x1c\n\x06i2s_ws\x18\x04 \x01(\rB\x0c\xca\xf3\x18\x08:\x06I2S WS\x12\x1c\n\x06i2s_sd\x18\x05 \x01(\rB\x0c\xca\xf3\x18\x08:\x06I2S SD\x12\x1e\n\x07i2s_din\x18\x06 \x01(\rB\r\xca\xf3\x18\t:\x07I2S DIN\x12\x1e\n\x07i2s_sck\x18\x07 \x01(\rB\r\xca\xf3\x18\t:\x07I2S SCK\"\xde\x02\n\nAudio_Baud\x12!\n\x0e\x43ODEC2_DEFAULT\x10\x00\x1a\r\xca\xf3\x18\t:\x07\x44\x65\x66\x61ult\x12\x1f\n\x0b\x43ODEC2_3200\x10\x01\x1a\x0e\xca\xf3\x18\n:\x08\x33\x32\x30\x30 bps\x12\x1f\n\x0b\x43ODEC2_2400\x10\x02\x1a\x0e\xca\xf3\x18\n:\x08\x32\x34\x30\x30 bps\x12\x1f\n\x0b\x43ODEC2_1600\x10\x03\x1a\x0e\xca\xf3\x18\n:\x08\x31\x36\x30\x30 bps\x12\x1f\n\x0b\x43ODEC2_1400\x10\x04\x1a\x0e\xca\xf3\x18\n:\x08\x31\x34\x30\x30 bps\x12\x1f\n\x0b\x43ODEC2_1300\x10\x05\x1a\x0e\xca\xf3\x18\n:\x08\x31\x33\x30\x30 bps\x12\x1f\n\x0b\x43ODEC2_1200\x10\x06\x1a\x0e\xca\xf3\x18\n:\x08\x31\x32\x30\x30 bps\x12\x12\n\nCODEC2_700\x10\x07\x1a\x02\x08\x01\x12\x13\n\x0b\x43ODEC2_700B\x10\x08\x1a\x02\x08\x01\x12\x1f\n\x0b\x43ODEC2_700C\x10\t\x1a\x0e\xca\xf3\x18\n:\x08\x37\x30\x30\x43 bps\x12\x1d\n\nCODEC2_450\x10\n\x1a\r\xca\xf3\x18\t:\x07\x34\x35\x30 bps\x1a\xa9\x04\n\x10PaxcounterConfig\x12\xd5\x01\n\x07\x65nabled\x18\x01 \x01(\x08\x42\xc3\x01\xca\xf3\x18\xbe\x01:\x13PAX Counter EnabledB\xa6\x01When enabled the PAX Counter module counts the number of people passing by using WiFi and Bluetooth. Both WiFI and Bluetooth must be disabled for PAX counter to work.\x12\x83\x01\n\x1apaxcounter_update_interval\x18\x02 \x01(\rB_\xca\xf3\x18[*\x01s:\x0fUpdate IntervalBEHow often we can send a message to the mesh when people are detected.\x12\\\n\x0ewifi_threshold\x18\x03 \x01(\x05\x42\x44\xca\xf3\x18@*\x03\x64\x42m:\x0eWiFi ThresholdB)RSSI threshold for counting WiFi devices.\x12Y\n\rble_threshold\x18\x04 \x01(\x05\x42\x42\xca\xf3\x18>*\x03\x64\x42m:\rBLE ThresholdB(RSSI threshold for counting BLE devices.\x1a\xe2\x06\n\x17TrafficManagementConfig\x12\x8b\x01\n\x1aposition_min_interval_secs\x18\x04 \x01(\rBg\xca\xf3\x18\x63*\x01s:\x19Minimum Position IntervalBCPositions from the same node arriving sooner than this are dropped.\x12x\n!nodeinfo_direct_response_max_hops\x18\x06 \x01(\rBM\xca\xf3\x18I:\x18\x44irect NodeInfo Max HopsB-Only answer requestors within this many hops.\x12\x65\n\x16rate_limit_window_secs\x18\x08 \x01(\rBE\xca\xf3\x18\x41*\x01s:\x11Rate Limit WindowB)The time window packets are counted over.\x12l\n\x16rate_limit_max_packets\x18\t \x01(\rBL\xca\xf3\x18H:\x16Rate Limit Max PacketsB.The most packets one node may send per window.\x12s\n\x18unknown_packet_threshold\x18\x0b \x01(\rBQ\xca\xf3\x18M:\x18Unknown Packet ThresholdB1How many per window before the sender is dropped.J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x03\x10\x04J\x04\x08\x05\x10\x06J\x04\x08\x07\x10\x08J\x04\x08\n\x10\x0bJ\x04\x08\x0c\x10\rJ\x04\x08\r\x10\x0eJ\x04\x08\x0e\x10\x0fR\x07\x65nabledR\x16position_dedup_enabledR\x17position_precision_bitsR\x18nodeinfo_direct_responseR\x12rate_limit_enabledR\x14\x64rop_unknown_enabledR\x15\x65xhaust_hop_telemetryR\x14\x65xhaust_hop_positionR\x14router_preserve_hops\x1a\x9c\x0b\n\x0cSerialConfig\x12;\n\x07\x65nabled\x18\x01 \x01(\x08\x42*\xca\xf3\x18&:\x0eSerial EnabledB\x14\x45nable serial module\x12Z\n\x04\x65\x63ho\x18\x02 \x01(\x08\x42L\xca\xf3\x18H:\x04\x45\x63hoB@If set, any packets you send will be echoed back to your device.\x12=\n\x03rxd\x18\x03 \x01(\rB0\xca\xf3\x18,:\x1bReceive data (rxd) GPIO pinB\rRX pin number\x12>\n\x03txd\x18\x04 \x01(\rB1\xca\xf3\x18-:\x1cTransmit data (txd) GPIO pinB\rTX pin number\x12]\n\x04\x62\x61ud\x18\x05 \x01(\x0e\x32\x31.meshtastic.ModuleConfig.SerialConfig.Serial_BaudB\x1c\xca\xf3\x18\x18:\x04\x42\x61udB\x10Serial baud rate\x12\x62\n\x07timeout\x18\x06 \x01(\rBQ\xca\xf3\x18M:\x07TimeoutBBThe amount of time to wait before we consider your packet as done.\x12i\n\x04mode\x18\x07 \x01(\x0e\x32\x31.meshtastic.ModuleConfig.SerialConfig.Serial_ModeB(\xca\xf3\x18$:\x04ModeB\x1cSerial module operation mode\x12$\n\x1coverride_console_serial_port\x18\x08 \x01(\x08\"\xa2\x04\n\x0bSerial_Baud\x12\x1f\n\x0c\x42\x41UD_DEFAULT\x10\x00\x1a\r\xca\xf3\x18\t:\x07\x44\x65\x66\x61ult\x12\x1c\n\x08\x42\x41UD_110\x10\x01\x1a\x0e\xca\xf3\x18\n:\x08\x31\x31\x30 Baud\x12\x1c\n\x08\x42\x41UD_300\x10\x02\x1a\x0e\xca\xf3\x18\n:\x08\x33\x30\x30 Baud\x12\x1c\n\x08\x42\x41UD_600\x10\x03\x1a\x0e\xca\xf3\x18\n:\x08\x36\x30\x30 Baud\x12\x1e\n\tBAUD_1200\x10\x04\x1a\x0f\xca\xf3\x18\x0b:\t1200 Baud\x12\x1e\n\tBAUD_2400\x10\x05\x1a\x0f\xca\xf3\x18\x0b:\t2400 Baud\x12\x1e\n\tBAUD_4800\x10\x06\x1a\x0f\xca\xf3\x18\x0b:\t4800 Baud\x12\x1e\n\tBAUD_9600\x10\x07\x1a\x0f\xca\xf3\x18\x0b:\t9600 Baud\x12 \n\nBAUD_19200\x10\x08\x1a\x10\xca\xf3\x18\x0c:\n19200 Baud\x12 \n\nBAUD_38400\x10\t\x1a\x10\xca\xf3\x18\x0c:\n38400 Baud\x12 \n\nBAUD_57600\x10\n\x1a\x10\xca\xf3\x18\x0c:\n57600 Baud\x12\"\n\x0b\x42\x41UD_115200\x10\x0b\x1a\x11\xca\xf3\x18\r:\x0b\x31\x31\x35\x32\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_230400\x10\x0c\x1a\x11\xca\xf3\x18\r:\x0b\x32\x33\x30\x34\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_460800\x10\r\x1a\x11\xca\xf3\x18\r:\x0b\x34\x36\x30\x38\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_576000\x10\x0e\x1a\x11\xca\xf3\x18\r:\x0b\x35\x37\x36\x30\x30\x30 Baud\x12\"\n\x0b\x42\x41UD_921600\x10\x0f\x1a\x11\xca\xf3\x18\r:\x0b\x39\x32\x31\x36\x30\x30 Baud\"\xfa\x01\n\x0bSerial_Mode\x12\x1a\n\x07\x44\x45\x46\x41ULT\x10\x00\x1a\r\xca\xf3\x18\t:\x07\x44\x65\x66\x61ult\x12\x18\n\x06SIMPLE\x10\x01\x1a\x0c\xca\xf3\x18\x08:\x06Simple\x12\x1a\n\x05PROTO\x10\x02\x1a\x0f\xca\xf3\x18\x0b:\tProtobufs\x12\x1f\n\x07TEXTMSG\x10\x03\x1a\x12\xca\xf3\x18\x0e:\x0cText Message\x12\x1e\n\x04NMEA\x10\x04\x1a\x14\xca\xf3\x18\x10:\x0eNMEA Positions\x12\x1a\n\x07\x43\x41LTOPO\x10\x05\x1a\r\xca\xf3\x18\t:\x07\x43\x41LTOPO\x12\x08\n\x04WS85\x10\x06\x12\r\n\tVE_DIRECT\x10\x07\x12\r\n\tMS_CONFIG\x10\x08\x12\x07\n\x03LOG\x10\t\x12\x0b\n\x07LOGTEXT\x10\n\x1a\x9f\r\n\x1a\x45xternalNotificationConfig\x12S\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x42\xca\xf3\x18>:\x1d\x45xternal Notification EnabledB\x1d\x45nable external notifications\x12`\n\toutput_ms\x18\x02 \x01(\rBM\xca\xf3\x18I*\x02ms:\x14GPIO Output DurationB-In GPIO mode, how long to keep the output on.\x12s\n\x06output\x18\x03 \x01(\rBc\xca\xf3\x18_:\x0fOutput pin GPIOBLGPIO pin driven on notification. Defaults to the board\'s EXT_NOTIFY_OUT pin.\x12M\n\x0coutput_vibra\x18\x08 \x01(\rB7\xca\xf3\x18\x33:\x15Output pin vibra GPIOB\x1aVibration motor output pin\x12\x46\n\routput_buzzer\x18\t \x01(\rB/\xca\xf3\x18+:\x16Output pin buzzer GPIOB\x11\x42uzzer output pin\x12q\n\x06\x61\x63tive\x18\x04 \x01(\x08\x42\x61\xca\xf3\x18]:\x06\x41\x63tiveBSIf enabled, the \'output\' Pin will be pulled active high, disabled means active low.\x12V\n\ralert_message\x18\x05 \x01(\x08\x42?\xca\xf3\x18;:\x1e\x41lert when receiving a messageB\x19\x41lert on incoming message\x12\x65\n\x13\x61lert_message_vibra\x18\n \x01(\x08\x42H\xca\xf3\x18\x44:\x11Vibra Motor AlertB/Alert GPIO vibra motor when receiving a message\x12h\n\x14\x61lert_message_buzzer\x18\x0b \x01(\x08\x42J\xca\xf3\x18\x46:*Alert GPIO buzzer when receiving a messageB\x18\x42uzz on incoming message\x12N\n\nalert_bell\x18\x06 \x01(\x08\x42:\xca\xf3\x18\x36:\x1b\x41lert when receiving a bellB\x17\x41lert on bell character\x12g\n\x10\x61lert_bell_vibra\x18\x0c \x01(\x08\x42M\xca\xf3\x18I:,Alert GPIO vibra motor when receiving a bellB\x19Vibrate on bell character\x12`\n\x11\x61lert_bell_buzzer\x18\r \x01(\x08\x42\x45\xca\xf3\x18\x41:\'Alert GPIO buzzer when receiving a bellB\x16\x42uzz on bell character\x12\xee\x01\n\x07use_pwm\x18\x07 \x01(\x08\x42\xdc\x01\xca\xf3\x18\xd7\x01:\x0eUse PWM BuzzerB\xc4\x01Use a PWM output (like the RAK Buzzer) for tunes instead of an on/off output. This will ignore the output, output duration and active settings and use the device config buzzer GPIO option instead.\x12K\n\x0bnag_timeout\x18\x0e \x01(\rB6\xca\xf3\x18\x32*\x01s:\x0bNag TimeoutB How long the notification lasts.\x12\xc8\x01\n\x11use_i2s_as_buzzer\x18\x0f \x01(\x08\x42\xac\x01\xca\xf3\x18\xa7\x01:\x11Use I2S As BuzzerB\x91\x01\x45nables devices with native I2S audio output to use the RTTTL over speaker like a buzzer. T-Watch S3 and T-Deck for example have this capability.\x1a\xe1\x03\n\x12StoreForwardConfig\x12W\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x46\xca\xf3\x18\x42:\x19Store and Forward EnabledB%Enables the store and forward module.\x12]\n\theartbeat\x18\x02 \x01(\x08\x42J\xca\xf3\x18\x46:\x0eSend HeartbeatB4Send a heartbeat to advertise the server\'s presence.\x12(\n\x07records\x18\x03 \x01(\rB\x17\xca\xf3\x18\x13:\x11Number of records\x12\x34\n\x12history_return_max\x18\x04 \x01(\rB\x18\xca\xf3\x18\x14:\x12History Return Max\x12:\n\x15history_return_window\x18\x05 \x01(\rB\x1b\xca\xf3\x18\x17:\x15History Return Window\x12w\n\tis_server\x18\x06 \x01(\x08\x42\x64\xca\xf3\x18`:\x06ServerBVEnable this device as a Store and Forward server. Requires an ESP32 device with PSRAM.\x1a\xfa\x02\n\x0fRangeTestConfig\x12\x43\n\x07\x65nabled\x18\x01 \x01(\x08\x42\x32\xca\xf3\x18.:\x12Range Test EnabledB\x18\x45nable range test module\x12q\n\x06sender\x18\x02 \x01(\rBa\xca\xf3\x18]*\x01s:\x0fSender IntervalBGThis device will send out range test messages on the selected interval.\x12\x87\x01\n\x04save\x18\x03 \x01(\x08\x42y\xca\xf3\x18u:\x04SaveBmSaves a CSV with the range test message details, currently only available on ESP32 devices with a web server.\x12%\n\x0f\x63lear_on_reboot\x18\x04 \x01(\x08\x42\x0c\xca\xf3\x18\x08R\x06\x32.7.11\x1a\x97\x0b\n\x0fTelemetryConfig\x12r\n\x16\x64\x65vice_update_interval\x18\x01 \x01(\rBR\xca\xf3\x18N*\x01s:\x17\x44\x65vice Metrics IntervalB0How often device metrics are sent over the mesh.\x12\x81\x01\n\x1b\x65nvironment_update_interval\x18\x02 \x01(\rB\\\xca\xf3\x18X*\x01s:\x1c\x45nvironment Metrics IntervalB5How often environment metrics are sent over the mesh.\x12l\n\x1f\x65nvironment_measurement_enabled\x18\x03 \x01(\x08\x42\x43\xca\xf3\x18?:\x1b\x45nvironment Metrics EnabledB Collect environment measurements\x12k\n\x1a\x65nvironment_screen_enabled\x18\x04 \x01(\x08\x42G\xca\xf3\x18\x43:\x15Show on device screenB*Display environment measurements on device\x12\x63\n\x1e\x65nvironment_display_fahrenheit\x18\x05 \x01(\x08\x42;\xca\xf3\x18\x37:\x12\x44isplay FahrenheitB!Display environment in Fahrenheit\x12[\n\x13\x61ir_quality_enabled\x18\x06 \x01(\x08\x42>\xca\xf3\x18::\x1b\x41ir Quality Metrics EnabledB\x1b\x43ollect air quality metrics\x12z\n\x14\x61ir_quality_interval\x18\x07 \x01(\rB\\\xca\xf3\x18X*\x01s:\x1c\x41ir Quality Metrics IntervalB5How often air quality metrics are sent over the mesh.\x12Y\n\x19power_measurement_enabled\x18\x08 \x01(\x08\x42\x36\xca\xf3\x18\x32:\x19Power Measurement EnabledB\x15\x43ollect power metrics\x12o\n\x15power_update_interval\x18\t \x01(\rBP\xca\xf3\x18L*\x01s:\x16Power Metrics IntervalB/How often power metrics are sent over the mesh.\x12Q\n\x14power_screen_enabled\x18\n \x01(\x08\x42\x33\xca\xf3\x18/:\x0cPower ScreenB\x1f\x44isplay power metrics on device\x12\"\n\x1ahealth_measurement_enabled\x18\x0b \x01(\x08\x12\x1e\n\x16health_update_interval\x18\x0c \x01(\r\x12\x1d\n\x15health_screen_enabled\x18\r \x01(\x08\x12\xbe\x01\n\x18\x64\x65vice_telemetry_enabled\x18\x0e \x01(\x08\x42\x9b\x01\xca\xf3\x18\x96\x01:\x18\x42roadcast Device MetricsBrEnable broadcasting device metrics to the mesh network. When disabled, metrics are only sent to connected clients.R\x06\x32.7.13\x12\x30\n\x1a\x61ir_quality_screen_enabled\x18\x0f \x01(\x08\x42\x0c\xca\xf3\x18\x08R\x06\x32.7.18\x1a\xd0\t\n\x13\x43\x61nnedMessageConfig\x12>\n\x0frotary1_enabled\x18\x01 \x01(\x08\x42%\xca\xf3\x18!:\x08Rotary 1B\x15\x45nable rotary encoder\x12K\n\x11inputbroker_pin_a\x18\x02 \x01(\rB0\xca\xf3\x18,:\x05Pin AB#GPIO pin for rotary encoder A port.\x12K\n\x11inputbroker_pin_b\x18\x03 \x01(\rB0\xca\xf3\x18,:\x05Pin BB#GPIO pin for rotary encoder B port.\x12W\n\x15inputbroker_pin_press\x18\x04 \x01(\rB8\xca\xf3\x18\x34:\tPress PinB\'GPIO pin for rotary encoder Press port.\x12\x9b\x01\n\x14inputbroker_event_cw\x18\x05 \x01(\x0e\x32;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharB@\xca\xf3\x18<:\x16\x43lockwise Rotary EventB\"Input event for clockwise rotation\x12\xac\x01\n\x15inputbroker_event_ccw\x18\x06 \x01(\x0e\x32;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharBP\xca\xf3\x18L:\x1e\x43ounter Clockwise Rotary EventB*Input event for counter-clockwise rotation\x12\x96\x01\n\x17inputbroker_event_press\x18\x07 \x01(\x0e\x32;.meshtastic.ModuleConfig.CannedMessageConfig.InputEventCharB8\xca\xf3\x18\x34:\x13\x45ncoder Press EventB\x1dInput event for encoder press\x12\x45\n\x0fupdown1_enabled\x18\x08 \x01(\x08\x42,\xca\xf3\x18(:\tUp Down 1B\x1b\x45nable up/down/select input\x12\x1e\n\x07\x65nabled\x18\t \x01(\x08\x42\r\x18\x01\xca\xf3\x18\x07Z\x05\x32.7.0\x12)\n\x12\x61llow_input_source\x18\n \x01(\tB\r\x18\x01\xca\xf3\x18\x07Z\x05\x32.7.0\x12\x45\n\tsend_bell\x18\x0b \x01(\x08\x42\x32\xca\xf3\x18.:\tSend BellB!Send bell character with messages\"\xc6\x01\n\x0eInputEventChar\x12\x14\n\x04NONE\x10\x00\x1a\n\xca\xf3\x18\x06:\x04None\x12\x10\n\x02UP\x10\x11\x1a\x08\xca\xf3\x18\x04:\x02Up\x12\x14\n\x04\x44OWN\x10\x12\x1a\n\xca\xf3\x18\x06:\x04\x44own\x12\x14\n\x04LEFT\x10\x13\x1a\n\xca\xf3\x18\x06:\x04Left\x12\x16\n\x05RIGHT\x10\x14\x1a\x0b\xca\xf3\x18\x07:\x05Right\x12\x18\n\x06SELECT\x10\n\x1a\x0c\xca\xf3\x18\x08:\x06Select\x12\x14\n\x04\x42\x41\x43K\x10\x1b\x1a\n\xca\xf3\x18\x06:\x04\x42\x61\x63k\x12\x18\n\x06\x43\x41NCEL\x10\x18\x1a\x0c\xca\xf3\x18\x08:\x06\x43\x61ncel\x1a\xd1\x04\n\x15\x41mbientLightingConfig\x12\x41\n\tled_state\x18\x01 \x01(\x08\x42.\xca\xf3\x18*:\tLED StateB\x1dThe state of the LED (on/off)\x12t\n\x07\x63urrent\x18\x02 \x01(\rBc\xca\xf3\x18_\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\x00?@:\x07\x43urrentB!Drive current for the LED output.J\x1fled|brightness|ambient|lighting\x12{\n\x03red\x18\x03 \x01(\rBn\xca\xf3\x18j\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\xe0o@:\x03RedB*The red level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting\x12\x81\x01\n\x05green\x18\x04 \x01(\rBr\xca\xf3\x18n\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\xe0o@:\x05GreenB,The green level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting\x12~\n\x04\x62lue\x18\x05 \x01(\rBp\xca\xf3\x18l\x19\x00\x00\x00\x00\x00\x00\x00\x00!\x00\x00\x00\x00\x00\xe0o@:\x04\x42lueB+The blue level of the ambient lighting LED.J%color|colour|rgb|led|ambient|lighting\x1a*\n\x13StatusMessageConfig\x12\x13\n\x0bnode_status\x18\x01 \x01(\t\x1a\xa4\x08\n\x10MeshBeaconConfig\x12\r\n\x05\x66lags\x18\x01 \x01(\r\x12+\n\x1e\x62roadcast_offer_frequency_slot\x18\x02 \x01(\rH\x00\x88\x01\x01\x12G\n\x11\x62roadcast_message\x18\x04 \x01(\tB,\xca\xf3\x18(:\x07MessageB\x1dMessage for beacon broadcasts\x12<\n\x17\x62roadcast_offer_channel\x18\x05 \x01(\x0b\x32\x1b.meshtastic.ChannelSettings\x12H\n\x16\x62roadcast_offer_region\x18\x06 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12N\n\x16\x62roadcast_offer_preset\x18\x07 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPresetH\x01\x88\x01\x01\x12T\n\x17\x62roadcast_interval_secs\x18\x0b \x01(\rB3\xca\xf3\x18/*\x01s:\x08IntervalB How often a beacon is broadcast.\x12T\n\x11\x62roadcast_targets\x18\r \x03(\x0b\x32\x39.meshtastic.ModuleConfig.MeshBeaconConfig.BroadcastTarget\x1a\xf4\x01\n\x0f\x42roadcastTarget\x12>\n\x06preset\x18\x01 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPresetH\x00\x88\x01\x01\x12\x38\n\x06region\x18\x02 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12\x1a\n\rchannel_index\x18\x04 \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0e\x66requency_slot\x18\x05 \x01(\rH\x02\x88\x01\x01\x42\t\n\x07_presetB\x10\n\x0e_channel_indexB\x11\n\x0f_frequency_slot\"b\n\x05\x46lags\x12\r\n\tFLAG_NONE\x10\x00\x12\x17\n\x13\x46LAG_LISTEN_ENABLED\x10\x01\x12\x1a\n\x16\x46LAG_BROADCAST_ENABLED\x10\x02\x12\x15\n\x11\x46LAG_LEGACY_SPLIT\x10\x04\x42!\n\x1f_broadcast_offer_frequency_slotB\x19\n\x17_broadcast_offer_presetJ\x04\x08\x03\x10\x04J\x04\x08\x08\x10\tJ\x04\x08\t\x10\nJ\x04\x08\n\x10\x0bR\x16\x62roadcast_send_as_nodeR\x14\x62roadcast_on_channelR\x13\x62roadcast_on_regionR\x13\x62roadcast_on_preset\x1a\x8a\x01\n\tTAKConfig\x12:\n\x04team\x18\x01 \x01(\x0e\x32\x10.meshtastic.TeamB\x1a\xca\xf3\x18\x16:\x04TeamB\x0eTAK team color\x12\x41\n\x04role\x18\x02 \x01(\x0e\x32\x16.meshtastic.MemberRoleB\x1b\xca\xf3\x18\x17:\x04RoleB\x0fTAK member roleB\x11\n\x0fpayload_variant\"d\n\x11RemoteHardwarePin\x12\x10\n\x08gpio_pin\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12/\n\x04type\x18\x03 \x01(\x0e\x32!.meshtastic.RemoteHardwarePinType*I\n\x15RemoteHardwarePinType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x10\n\x0c\x44IGITAL_READ\x10\x01\x12\x11\n\rDIGITAL_WRITE\x10\x02\x42h\n\x14org.meshtastic.protoB\x12ModuleConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
|
|
14
14
|
|
|
15
15
|
pool = ::Google::Protobuf::DescriptorPool.generated_pool
|
|
16
16
|
pool.add_serialized_file(descriptor_data)
|