meshtastic 0.0.143 → 0.0.145

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.
Files changed (124) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +27 -0
  3. data/.gitignore +29 -0
  4. data/.rubocop.yml +35 -0
  5. data/.rubocop_todo.yml +134 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/AUTOGEN_meshtastic_protobufs.sh +28 -0
  9. data/CHANGELOG_BETWEEN_TAGS.txt +196 -0
  10. data/CODE_OF_CONDUCT.md +84 -0
  11. data/Gemfile +23 -0
  12. data/LICENSE +21 -0
  13. data/README.md +106 -0
  14. data/Rakefile +21 -0
  15. data/bin/meshtastic_autoinc_version +38 -0
  16. data/build_meshtastic_gem.sh +58 -0
  17. data/git_commit.sh +29 -0
  18. data/lib/meshtastic/admin.rb +24 -0
  19. data/lib/meshtastic/admin_pb.rb +31 -0
  20. data/lib/meshtastic/apponly.rb +24 -0
  21. data/lib/meshtastic/apponly_pb.rb +18 -0
  22. data/lib/meshtastic/atak.rb +24 -0
  23. data/lib/meshtastic/atak_pb.rb +22 -0
  24. data/lib/meshtastic/cannedmessages.rb +24 -0
  25. data/lib/meshtastic/cannedmessages_pb.rb +15 -0
  26. data/lib/meshtastic/channel.rb +24 -0
  27. data/lib/meshtastic/channel_pb.rb +18 -0
  28. data/lib/meshtastic/clientonly.rb +24 -0
  29. data/lib/meshtastic/clientonly_pb.rb +18 -0
  30. data/lib/meshtastic/config.rb +24 -0
  31. data/lib/meshtastic/config_pb.rb +42 -0
  32. data/lib/meshtastic/connection_status.rb +24 -0
  33. data/lib/meshtastic/connection_status_pb.rb +20 -0
  34. data/lib/meshtastic/device_ui_pb.rb +23 -0
  35. data/lib/meshtastic/deviceonly.rb +24 -0
  36. data/lib/meshtastic/deviceonly_pb.rb +28 -0
  37. data/lib/meshtastic/interdevice_pb.rb +17 -0
  38. data/lib/meshtastic/localonly.rb +24 -0
  39. data/lib/meshtastic/localonly_pb.rb +19 -0
  40. data/lib/meshtastic/mesh_interface.rb +596 -0
  41. data/lib/meshtastic/mesh_pb.rb +65 -0
  42. data/lib/meshtastic/module_config.rb +24 -0
  43. data/lib/meshtastic/module_config_pb.rb +36 -0
  44. data/lib/meshtastic/mqtt.rb +383 -0
  45. data/lib/meshtastic/mqtt_pb.rb +19 -0
  46. data/lib/meshtastic/paxcount.rb +24 -0
  47. data/lib/meshtastic/paxcount_pb.rb +15 -0
  48. data/lib/meshtastic/portnums.rb +24 -0
  49. data/lib/meshtastic/portnums_pb.rb +15 -0
  50. data/lib/meshtastic/powermon_pb.rb +18 -0
  51. data/lib/meshtastic/remote_hardware.rb +24 -0
  52. data/lib/meshtastic/remote_hardware_pb.rb +16 -0
  53. data/lib/meshtastic/rtttl.rb +24 -0
  54. data/lib/meshtastic/rtttl_pb.rb +15 -0
  55. data/lib/meshtastic/serial_interface.rb +550 -0
  56. data/lib/meshtastic/storeforward.rb +24 -0
  57. data/lib/meshtastic/storeforward_pb.rb +19 -0
  58. data/lib/meshtastic/stream_interface.rb +132 -0
  59. data/lib/meshtastic/telemetry.rb +24 -0
  60. data/lib/meshtastic/telemetry_pb.rb +24 -0
  61. data/lib/meshtastic/util.rb +70 -0
  62. data/lib/meshtastic/version.rb +5 -0
  63. data/lib/meshtastic/xmodem.rb +24 -0
  64. data/lib/meshtastic/xmodem_pb.rb +16 -0
  65. data/lib/meshtastic.rb +71 -0
  66. data/lib/nanopb_pb.rb +19 -0
  67. data/meshtastic.gemspec +73 -0
  68. data/reinstall_meshtastic_gemset.sh +29 -0
  69. data/sig/meshtastic.rbs +4 -0
  70. data/spec/lib/meshtastic/admin_pb_spec.rb +7 -0
  71. data/spec/lib/meshtastic/admin_spec.rb +6 -0
  72. data/spec/lib/meshtastic/apponly_pb_spec.rb +6 -0
  73. data/spec/lib/meshtastic/apponly_spec.rb +6 -0
  74. data/spec/lib/meshtastic/atak_pb_spec.rb +6 -0
  75. data/spec/lib/meshtastic/atak_spec.rb +6 -0
  76. data/spec/lib/meshtastic/cannedmessages_pb_spec.rb +6 -0
  77. data/spec/lib/meshtastic/cannedmessages_spec.rb +6 -0
  78. data/spec/lib/meshtastic/channel_pb_spec.rb +6 -0
  79. data/spec/lib/meshtastic/channel_spec.rb +6 -0
  80. data/spec/lib/meshtastic/clientonly_pb_spec.rb +6 -0
  81. data/spec/lib/meshtastic/clientonly_spec.rb +6 -0
  82. data/spec/lib/meshtastic/config_pb_spec.rb +6 -0
  83. data/spec/lib/meshtastic/config_spec.rb +6 -0
  84. data/spec/lib/meshtastic/connection_status_pb_spec.rb +6 -0
  85. data/spec/lib/meshtastic/connection_status_spec.rb +6 -0
  86. data/spec/lib/meshtastic/device_ui_pb_spec.rb +6 -0
  87. data/spec/lib/meshtastic/deviceonly_pb_spec.rb +6 -0
  88. data/spec/lib/meshtastic/deviceonly_spec.rb +6 -0
  89. data/spec/lib/meshtastic/interdevice_pb_spec.rb +6 -0
  90. data/spec/lib/meshtastic/localonly_pb_spec.rb +6 -0
  91. data/spec/lib/meshtastic/localonly_spec.rb +6 -0
  92. data/spec/lib/meshtastic/mesh_interface_spec.rb +6 -0
  93. data/spec/lib/meshtastic/mesh_pb_spec.rb +6 -0
  94. data/spec/lib/meshtastic/module_config_pb_spec.rb +6 -0
  95. data/spec/lib/meshtastic/module_config_spec.rb +6 -0
  96. data/spec/lib/meshtastic/mqtt_pb_spec.rb +6 -0
  97. data/spec/lib/meshtastic/mqtt_spec.rb +6 -0
  98. data/spec/lib/meshtastic/paxcount_pb_spec.rb +6 -0
  99. data/spec/lib/meshtastic/paxcount_spec.rb +6 -0
  100. data/spec/lib/meshtastic/portnums_pb_spec.rb +6 -0
  101. data/spec/lib/meshtastic/portnums_spec.rb +6 -0
  102. data/spec/lib/meshtastic/powermon_pb_spec.rb +6 -0
  103. data/spec/lib/meshtastic/remote_hardware_pb_spec.rb +6 -0
  104. data/spec/lib/meshtastic/remote_hardware_spec.rb +6 -0
  105. data/spec/lib/meshtastic/rtttl_pb_spec.rb +6 -0
  106. data/spec/lib/meshtastic/rtttl_spec.rb +6 -0
  107. data/spec/lib/meshtastic/serial_interface_spec.rb +6 -0
  108. data/spec/lib/meshtastic/storeforward_pb_spec.rb +6 -0
  109. data/spec/lib/meshtastic/storeforward_spec.rb +6 -0
  110. data/spec/lib/meshtastic/stream_interface_spec.rb +6 -0
  111. data/spec/lib/meshtastic/telemetry_pb_spec.rb +6 -0
  112. data/spec/lib/meshtastic/telemetry_spec.rb +6 -0
  113. data/spec/lib/meshtastic/util_spec.rb +6 -0
  114. data/spec/lib/meshtastic/version_spec.rb +17 -0
  115. data/spec/lib/meshtastic/xmodem_pb_spec.rb +6 -0
  116. data/spec/lib/meshtastic/xmodem_spec.rb +6 -0
  117. data/spec/lib/meshtastic_spec.rb +6 -0
  118. data/spec/lib/nanopb_pb_spec.rb +6 -0
  119. data/spec/spec_helper.rb +3 -0
  120. data/upgrade_Gemfile_gems.sh +21 -0
  121. data/upgrade_gem.sh +4 -0
  122. data/upgrade_meshtastic.sh +13 -0
  123. data/upgrade_ruby.sh +45 -0
  124. metadata +126 -3
data/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # Meshtastic
2
+
3
+ Ruby gem for interfacing with Meshtastic nodes / network.
4
+
5
+ # Setting Expectations
6
+
7
+ This gem was created to support alt-comm capabilities w/in a security research framework known as [PWN](https://github.com/0dayInc/pwn). Contributors of this effort cannot guarantee full functionality or support for all Meshtastic features.
8
+
9
+ # Objectives
10
+
11
+ - Consume the latest [Meshtastic Protobof Specs](https://github.com/meshtastic/protobufs) and [auto-generate Ruby protobuf modules for Meshtastic](https://github.com/0dayInc/meshtastic/blob/master/AUTOGEN_meshtastic_protobufs.sh) using the `grpc_tools_ruby_protoc` command: `Complete`
12
+ - Integrate auto-generated Ruby protobuf modules into a working Ruby gem: `Complete`
13
+ - Scale out Meshtastic Ruby Modules for their respective protobufs within the meshtastic gem (e.g. Meshtastic::MQTTPB is auto-generated based on latest Meshtastic protobuf specs and extended via Meshtastic::MQTT for more MQTT interaction as desired): `Ongoing Effort`
14
+
15
+ ## Installation
16
+
17
+ Install the gem and add to the application's Gemfile by executing:
18
+
19
+ $ bundle add meshtastic
20
+
21
+ If bundler is not being used to manage dependencies, install the gem by executing:
22
+
23
+ $ gem install meshtastic
24
+
25
+ ## Usage
26
+
27
+ At the moment the only module available is `Meshtastic::MQTT`. To view MQTT messages, and include only messages containing `_APP` _and_ `LongFast` strings, use the following code:
28
+
29
+ ```ruby
30
+ require 'meshtastic'
31
+ Meshtastic::MQTT.help
32
+ mqtt_obj = Meshastic::MQTT.connect
33
+ puts mqtt_obj.inspect
34
+ Meshtastic::MQTT.subscribe(
35
+ mqtt_obj: mqtt_obj,
36
+ include: '_APP, LongFast'
37
+ )
38
+ ```
39
+
40
+ This code will dump the contents of every message:
41
+
42
+ ```ruby
43
+ require 'meshtastic'
44
+ mqtt_obj = Meshastic::MQTT.connect
45
+ Meshtastic::MQTT.subscribe(
46
+ mqtt_obj: mqtt_obj,
47
+ root_topic: 'msh',
48
+ region: 'US',
49
+ topic: '2/e/LongFast/#',
50
+ psks: { LongFast: 'AQ==' }
51
+ ) do |message|
52
+ puts message.inspect
53
+ end
54
+ ```
55
+
56
+ Sending a message over MQTT:
57
+
58
+ ```ruby
59
+ require 'meshtastic'
60
+ mqtt_obj = Meshastic::MQTT.connect
61
+ client_id = "!#{mqtt_obj.client_id}"
62
+ Meshtastic::MQTT.send_text(
63
+ mqtt_obj: mqtt_obj,
64
+ from: client_id,
65
+ to: '!ffffffff',
66
+ root_topic: 'msh',
67
+ region: 'US',
68
+ topic: '2/e/LongFast/#',
69
+ channel: 93,
70
+ text: 'Hello, World!',
71
+ psks: { LongFast: 'AQ==' }
72
+ )
73
+ ```
74
+
75
+ One of the "gotchas" when sending messages is ensuring you're sending over the proper integer for the `channel` parameter. The best way to determine the proper `channel` value is by sending a test message from within the meshtastic app and then viewing the MQTT message similar to the following:
76
+
77
+ ```ruby
78
+ require 'meshtastic'
79
+ mqtt_obj = Meshastic::MQTT.connect
80
+ Meshtastic::MQTT.subscribe(
81
+ mqtt_obj: mqtt_obj,
82
+ root_topic: 'msh',
83
+ region: 'US',
84
+ topic: '2/e/LongFast/#',
85
+ psks: { LongFast: 'AQ==' },
86
+ include: '!YOUR_CLIENT_ID'
87
+ ) do |message|
88
+ puts message.inspect
89
+ end
90
+ ```
91
+
92
+ You should see something like this:
93
+
94
+ ```
95
+ {packet: {from: 4080917205, to: 4294967295, channel: 93, id: 1198634591, rx_time: 1738614021, rx_snr: 0.0, hop_limit: 3, want_ack: false, priority: :HIGH, rx_rssi: 0, delayed: :NO_DELAY, via_mqtt: false, hop_start: 3, public_key: "", pki_encrypted: false, next_hop: 0, relay_node: 0, tx_after: 0, decoded: {portnum: :TEXT_MESSAGE_APP, payload: "WHAT IS MY channel VALUE?", want_response: false, dest: 0, source: 0, request_id: 0, reply_id: 0, emoji: 0, bitfield: 0}, encrypted: :decrypted, topic: "msh/US/2/e/LongFast/!f33ddad5", node_id_from: "!f33ddad5", node_id_to: "!ffffffff", rx_time_utc: "2025-01-01 07:00:00 UTC"}, channel_id: "LongFast", gateway_id: "!f33ddad5"}
96
+ ```
97
+
98
+ Note where is says `channel: 93`. This is the `channel` value required to send messages in this particular example.
99
+
100
+ ## Contributing
101
+
102
+ Bug reports and pull requests are welcome on GitHub at https://github.com/0dayinc/meshtastic. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/0dayinc/meshtastic/blob/master/CODE_OF_CONDUCT.md).
103
+
104
+ ## Code of Conduct
105
+
106
+ Everyone interacting in the Meshtastic project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/0dayinc/meshtastic/blob/master/CODE_OF_CONDUCT.md).
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+ require 'rdoc/task'
6
+ require 'rubocop/rake_task'
7
+
8
+ RSpec::Core::RakeTask.new(:spec)
9
+
10
+ RuboCop::RakeTask.new do |rubocop|
11
+ config_file = '.rubocop.yml'
12
+ rubocop.options = ['-E', '-S', '-c', config_file]
13
+ end
14
+
15
+ RDoc::Task.new do |rdoc|
16
+ rdoc.rdoc_files.include('lib/**/*.rb')
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ end
19
+
20
+ # task default: %i[spec rubocop rdoc]
21
+ task default: %i[rubocop rdoc]
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # frozen_string_literal: true
4
+
5
+ require 'meshtastic'
6
+
7
+ old_rev = Meshtastic::VERSION
8
+ placeholder_arr = old_rev.split('.')
9
+ major = placeholder_arr[0].to_i
10
+ minor = placeholder_arr[1].to_i
11
+ hotfix = placeholder_arr[2].to_i
12
+
13
+ if hotfix < 999
14
+ hotfix += 1
15
+ placeholder_arr[2] = hotfix.to_s
16
+ else
17
+ # TODO: Tag master branch once minor version is reached
18
+ placeholder_arr[2] = '0'
19
+ if minor < 9
20
+ minor += 1
21
+ placeholder_arr[1] = minor.to_s
22
+ else
23
+ placeholder_arr[1] = '0'
24
+ major += 1
25
+ placeholder_arr[0] = major.to_s
26
+ end
27
+ end
28
+
29
+ new_rev = placeholder_arr.join('.')
30
+
31
+ puts "Upgrading to #{new_rev}..."
32
+ File.open('./lib/meshtastic/version.rb', 'w') do |f|
33
+ f.puts '# frozen_string_literal: true'
34
+ f.puts "\n"
35
+ f.puts 'module Meshtastic'
36
+ f.puts " VERSION = '#{new_rev}'"
37
+ f.puts 'end'
38
+ end
@@ -0,0 +1,58 @@
1
+ #!/bin/bash --login
2
+ if [[ $MESHTASTIC_ROOT == '' ]]; then
3
+ if [[ ! -d '/opt/meshtastic' ]]; then
4
+ mesh_root=$(pwd)
5
+ else
6
+ mesh_root='/opt/meshtastic'
7
+ fi
8
+ else
9
+ mesh_root="${MESHTASTIC_ROOT}"
10
+ fi
11
+
12
+ ls pkg/*.gem 2> /dev/null | while read previous_gems; do
13
+ rvmsudo rm $previous_gems
14
+ done
15
+ old_ruby_version=`cat ${mesh_root}/.ruby-version`
16
+ # Default Strategy is to merge codebase
17
+ # rvmsudo git config pull.rebase false
18
+ # rvmsudo git pull origin master
19
+ git config pull.rebase false
20
+ git pull origin master
21
+ new_ruby_version=`cat ${mesh_root}/.ruby-version`
22
+
23
+ rvm list gemsets | grep `cat ${mesh_root}/.ruby-gemset`
24
+ if [[ $? != 0 ]]; then
25
+ echo "Ruby v${new_ruby_version} is not installed. Installing..."
26
+ cd $mesh_root && ./upgrade_ruby.sh $new_ruby_version
27
+ # Rely on RVM to creeate gemset
28
+ cd / && cd $mesh_root
29
+ fi
30
+
31
+ if [[ $old_ruby_version == $new_ruby_version ]]; then
32
+ export rvmsudo_secure_path=1
33
+ rvmsudo /bin/bash --login -c "cd ${mesh_root} && ./reinstall_meshtastic_gemset.sh"
34
+ rvmsudo rake
35
+ rvmsudo rake install
36
+ rvmsudo rake rerdoc
37
+ rvmsudo gem update --system
38
+ rvmsudo gem rdoc --rdoc --ri --overwrite -V meshtastic
39
+ echo "Invoking bundle-audit Gemfile Scanner..."
40
+ rvmsudo bundle-audit
41
+
42
+ latest_gem=$(ls pkg/*.gem)
43
+ if [[ $latest_gem != "" ]]; then
44
+ echo "Pushing ${latest_gem} to RubyGems.org..."
45
+ rvmsudo gem push $latest_gem --debug
46
+ fi
47
+ else
48
+ cd $mesh_root && ./upgrade_ruby.sh $new_ruby_version $old_ruby_version
49
+ fi
50
+
51
+ unpriv_user=`echo $USER`
52
+ if [[ $unpriv_user != 'root' ]]; then
53
+ if [[ $(uname -s) == 'Darwin' ]]; then
54
+ rvmsudo chown -R $unpriv_user $mesh_root
55
+ else
56
+ rvmsudo chown -R $unpriv_user:$unpriv_user $mesh_root
57
+ fi
58
+ fi
data/git_commit.sh ADDED
@@ -0,0 +1,29 @@
1
+ #!/bin/bash --login
2
+ if [[ $1 != "" && $2 != "" && $3 != "" ]]; then
3
+ # Default Strategy is to merge codebase
4
+ git config pull.rebase false
5
+ git config commit.gpgsign true
6
+ git pull origin master
7
+ git add . --all
8
+ echo 'Updating Gems to Latest Versions in Gemfile...'
9
+ ./upgrade_Gemfile_gems.sh
10
+ ./AUTOGEN_meshtastic_protobufs.sh
11
+ meshtastic_autoinc_version
12
+ if [[ $tag_this_version_bool == 'true' ]]; then
13
+ last_tag=$(git tag | tail -n 1)
14
+ git log $last_tag.. --oneline > CHANGELOG_BETWEEN_TAGS.txt
15
+ fi
16
+
17
+ git commit -a -S --author="${1} <${2}>" -m "${3}"
18
+ ./upgrade_meshtastic.sh
19
+ # Tag for every 100 commits (i.e. 0.1.100, 0.1.200, etc)
20
+ tag_this_version_bool=`ruby -r 'meshtastic' -e 'if Meshtastic::VERSION.split(".")[-1].to_i % 100 == 0; then print true; else print false; end'`
21
+ if [[ $tag_this_version_bool == 'true' ]]; then
22
+ this_version=`ruby -r 'meshtastic' -e 'print Meshtastic::VERSION'`
23
+ echo "Tagging: ${this_version}"
24
+ git tag $this_version
25
+ git push origin $this_version
26
+ fi
27
+ else
28
+ echo "USAGE: ${0} '<full name>' <email address> '<git commit comments>'"
29
+ fi
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/admin_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module Admin
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/admin.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'meshtastic/channel_pb'
8
+ require 'meshtastic/config_pb'
9
+ require 'meshtastic/connection_status_pb'
10
+ require 'meshtastic/device_ui_pb'
11
+ require 'meshtastic/mesh_pb'
12
+ require 'meshtastic/module_config_pb'
13
+
14
+
15
+ descriptor_data = "\n\x16meshtastic/admin.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\"meshtastic/connection_status.proto\x1a\x1ameshtastic/device_ui.proto\x1a\x15meshtastic/mesh.proto\x1a\x1emeshtastic/module_config.proto\"\xd6\x18\n\x0c\x41\x64minMessage\x12\x17\n\x0fsession_passkey\x18\x65 \x01(\x0c\x12\x1d\n\x13get_channel_request\x18\x01 \x01(\rH\x00\x12\x33\n\x14get_channel_response\x18\x02 \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x03 \x01(\x08H\x00\x12.\n\x12get_owner_response\x18\x04 \x01(\x0b\x32\x10.meshtastic.UserH\x00\x12\x41\n\x12get_config_request\x18\x05 \x01(\x0e\x32#.meshtastic.AdminMessage.ConfigTypeH\x00\x12\x31\n\x13get_config_response\x18\x06 \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12N\n\x19get_module_config_request\x18\x07 \x01(\x0e\x32).meshtastic.AdminMessage.ModuleConfigTypeH\x00\x12>\n\x1aget_module_config_response\x18\x08 \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12\x34\n*get_canned_message_module_messages_request\x18\n \x01(\x08H\x00\x12\x35\n+get_canned_message_module_messages_response\x18\x0b \x01(\tH\x00\x12%\n\x1bget_device_metadata_request\x18\x0c \x01(\x08H\x00\x12\x42\n\x1cget_device_metadata_response\x18\r \x01(\x0b\x32\x1a.meshtastic.DeviceMetadataH\x00\x12\x1e\n\x14get_ringtone_request\x18\x0e \x01(\x08H\x00\x12\x1f\n\x15get_ringtone_response\x18\x0f \x01(\tH\x00\x12.\n$get_device_connection_status_request\x18\x10 \x01(\x08H\x00\x12S\n%get_device_connection_status_response\x18\x11 \x01(\x0b\x32\".meshtastic.DeviceConnectionStatusH\x00\x12\x31\n\x0cset_ham_mode\x18\x12 \x01(\x0b\x32\x19.meshtastic.HamParametersH\x00\x12/\n%get_node_remote_hardware_pins_request\x18\x13 \x01(\x08H\x00\x12\\\n&get_node_remote_hardware_pins_response\x18\x14 \x01(\x0b\x32*.meshtastic.NodeRemoteHardwarePinsResponseH\x00\x12 \n\x16\x65nter_dfu_mode_request\x18\x15 \x01(\x08H\x00\x12\x1d\n\x13\x64\x65lete_file_request\x18\x16 \x01(\tH\x00\x12\x13\n\tset_scale\x18\x17 \x01(\rH\x00\x12\x45\n\x12\x62\x61\x63kup_preferences\x18\x18 \x01(\x0e\x32\'.meshtastic.AdminMessage.BackupLocationH\x00\x12\x46\n\x13restore_preferences\x18\x19 \x01(\x0e\x32\'.meshtastic.AdminMessage.BackupLocationH\x00\x12L\n\x19remove_backup_preferences\x18\x1a \x01(\x0e\x32\'.meshtastic.AdminMessage.BackupLocationH\x00\x12?\n\x10send_input_event\x18\x1b \x01(\x0b\x32#.meshtastic.AdminMessage.InputEventH\x00\x12%\n\tset_owner\x18 \x01(\x0b\x32\x10.meshtastic.UserH\x00\x12*\n\x0bset_channel\x18! \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12(\n\nset_config\x18\" \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12\x35\n\x11set_module_config\x18# \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12,\n\"set_canned_message_module_messages\x18$ \x01(\tH\x00\x12\x1e\n\x14set_ringtone_message\x18% \x01(\tH\x00\x12\x1b\n\x11remove_by_nodenum\x18& \x01(\rH\x00\x12\x1b\n\x11set_favorite_node\x18\' \x01(\rH\x00\x12\x1e\n\x14remove_favorite_node\x18( \x01(\rH\x00\x12\x32\n\x12set_fixed_position\x18) \x01(\x0b\x32\x14.meshtastic.PositionH\x00\x12\x1f\n\x15remove_fixed_position\x18* \x01(\x08H\x00\x12\x17\n\rset_time_only\x18+ \x01(\x07H\x00\x12\x1f\n\x15get_ui_config_request\x18, \x01(\x08H\x00\x12<\n\x16get_ui_config_response\x18- \x01(\x0b\x32\x1a.meshtastic.DeviceUIConfigH\x00\x12\x35\n\x0fstore_ui_config\x18. \x01(\x0b\x32\x1a.meshtastic.DeviceUIConfigH\x00\x12\x1a\n\x10set_ignored_node\x18/ \x01(\rH\x00\x12\x1d\n\x13remove_ignored_node\x18\x30 \x01(\rH\x00\x12\x1d\n\x13\x62\x65gin_edit_settings\x18@ \x01(\x08H\x00\x12\x1e\n\x14\x63ommit_edit_settings\x18\x41 \x01(\x08H\x00\x12\x30\n\x0b\x61\x64\x64_contact\x18\x42 \x01(\x0b\x32\x19.meshtastic.SharedContactH\x00\x12<\n\x10key_verification\x18\x43 \x01(\x0b\x32 .meshtastic.KeyVerificationAdminH\x00\x12\x1e\n\x14\x66\x61\x63tory_reset_device\x18^ \x01(\x05H\x00\x12\x1c\n\x12reboot_ota_seconds\x18_ \x01(\x05H\x00\x12\x18\n\x0e\x65xit_simulator\x18` \x01(\x08H\x00\x12\x18\n\x0ereboot_seconds\x18\x61 \x01(\x05H\x00\x12\x1a\n\x10shutdown_seconds\x18\x62 \x01(\x05H\x00\x12\x1e\n\x14\x66\x61\x63tory_reset_config\x18\x63 \x01(\x05H\x00\x12\x16\n\x0cnodedb_reset\x18\x64 \x01(\x08H\x00\x1aS\n\nInputEvent\x12\x12\n\nevent_code\x18\x01 \x01(\r\x12\x0f\n\x07kb_char\x18\x02 \x01(\r\x12\x0f\n\x07touch_x\x18\x03 \x01(\r\x12\x0f\n\x07touch_y\x18\x04 \x01(\r\"\xd6\x01\n\nConfigType\x12\x11\n\rDEVICE_CONFIG\x10\x00\x12\x13\n\x0fPOSITION_CONFIG\x10\x01\x12\x10\n\x0cPOWER_CONFIG\x10\x02\x12\x12\n\x0eNETWORK_CONFIG\x10\x03\x12\x12\n\x0e\x44ISPLAY_CONFIG\x10\x04\x12\x0f\n\x0bLORA_CONFIG\x10\x05\x12\x14\n\x10\x42LUETOOTH_CONFIG\x10\x06\x12\x13\n\x0fSECURITY_CONFIG\x10\x07\x12\x15\n\x11SESSIONKEY_CONFIG\x10\x08\x12\x13\n\x0f\x44\x45VICEUI_CONFIG\x10\t\"\xbb\x02\n\x10ModuleConfigType\x12\x0f\n\x0bMQTT_CONFIG\x10\x00\x12\x11\n\rSERIAL_CONFIG\x10\x01\x12\x13\n\x0f\x45XTNOTIF_CONFIG\x10\x02\x12\x17\n\x13STOREFORWARD_CONFIG\x10\x03\x12\x14\n\x10RANGETEST_CONFIG\x10\x04\x12\x14\n\x10TELEMETRY_CONFIG\x10\x05\x12\x14\n\x10\x43\x41NNEDMSG_CONFIG\x10\x06\x12\x10\n\x0c\x41UDIO_CONFIG\x10\x07\x12\x19\n\x15REMOTEHARDWARE_CONFIG\x10\x08\x12\x17\n\x13NEIGHBORINFO_CONFIG\x10\t\x12\x1a\n\x16\x41MBIENTLIGHTING_CONFIG\x10\n\x12\x1a\n\x16\x44\x45TECTIONSENSOR_CONFIG\x10\x0b\x12\x15\n\x11PAXCOUNTER_CONFIG\x10\x0c\"#\n\x0e\x42\x61\x63kupLocation\x12\t\n\x05\x46LASH\x10\x00\x12\x06\n\x02SD\x10\x01\x42\x11\n\x0fpayload_variant\"[\n\rHamParameters\x12\x11\n\tcall_sign\x18\x01 \x01(\t\x12\x10\n\x08tx_power\x18\x02 \x01(\x05\x12\x11\n\tfrequency\x18\x03 \x01(\x02\x12\x12\n\nshort_name\x18\x04 \x01(\t\"f\n\x1eNodeRemoteHardwarePinsResponse\x12\x44\n\x19node_remote_hardware_pins\x18\x01 \x03(\x0b\x32!.meshtastic.NodeRemoteHardwarePin\"s\n\rSharedContact\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12\x1e\n\x04user\x18\x02 \x01(\x0b\x32\x10.meshtastic.User\x12\x15\n\rshould_ignore\x18\x03 \x01(\x08\x12\x19\n\x11manually_verified\x18\x04 \x01(\x08\"\x9c\x02\n\x14KeyVerificationAdmin\x12\x42\n\x0cmessage_type\x18\x01 \x01(\x0e\x32,.meshtastic.KeyVerificationAdmin.MessageType\x12\x16\n\x0eremote_nodenum\x18\x02 \x01(\r\x12\r\n\x05nonce\x18\x03 \x01(\x04\x12\x1c\n\x0fsecurity_number\x18\x04 \x01(\rH\x00\x88\x01\x01\"g\n\x0bMessageType\x12\x19\n\x15INITIATE_VERIFICATION\x10\x00\x12\x1b\n\x17PROVIDE_SECURITY_NUMBER\x10\x01\x12\r\n\tDO_VERIFY\x10\x02\x12\x11\n\rDO_NOT_VERIFY\x10\x03\x42\x12\n\x10_security_numberBa\n\x14org.meshtastic.protoB\x0b\x41\x64minProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
16
+
17
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
18
+ pool.add_serialized_file(descriptor_data)
19
+
20
+ module Meshtastic
21
+ AdminMessage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.AdminMessage").msgclass
22
+ AdminMessage::InputEvent = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.AdminMessage.InputEvent").msgclass
23
+ AdminMessage::ConfigType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.AdminMessage.ConfigType").enummodule
24
+ AdminMessage::ModuleConfigType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.AdminMessage.ModuleConfigType").enummodule
25
+ AdminMessage::BackupLocation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.AdminMessage.BackupLocation").enummodule
26
+ HamParameters = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.HamParameters").msgclass
27
+ NodeRemoteHardwarePinsResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.NodeRemoteHardwarePinsResponse").msgclass
28
+ SharedContact = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.SharedContact").msgclass
29
+ KeyVerificationAdmin = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.KeyVerificationAdmin").msgclass
30
+ KeyVerificationAdmin::MessageType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.KeyVerificationAdmin.MessageType").enummodule
31
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/apponly_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module Apponly
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/apponly.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'meshtastic/channel_pb'
8
+ require 'meshtastic/config_pb'
9
+
10
+
11
+ descriptor_data = "\n\x18meshtastic/apponly.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\"o\n\nChannelSet\x12-\n\x08settings\x18\x01 \x03(\x0b\x32\x1b.meshtastic.ChannelSettings\x12\x32\n\x0blora_config\x18\x02 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfigBc\n\x14org.meshtastic.protoB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
12
+
13
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
14
+ pool.add_serialized_file(descriptor_data)
15
+
16
+ module Meshtastic
17
+ ChannelSet = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.ChannelSet").msgclass
18
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/atak_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module ATAK
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/atak.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+
8
+ descriptor_data = "\n\x15meshtastic/atak.proto\x12\nmeshtastic\"\xf8\x01\n\tTAKPacket\x12\x15\n\ris_compressed\x18\x01 \x01(\x08\x12$\n\x07\x63ontact\x18\x02 \x01(\x0b\x32\x13.meshtastic.Contact\x12 \n\x05group\x18\x03 \x01(\x0b\x32\x11.meshtastic.Group\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.meshtastic.Status\x12\x1e\n\x03pli\x18\x05 \x01(\x0b\x32\x0f.meshtastic.PLIH\x00\x12#\n\x04\x63hat\x18\x06 \x01(\x0b\x32\x13.meshtastic.GeoChatH\x00\x12\x10\n\x06\x64\x65tail\x18\x07 \x01(\x0cH\x00\x42\x11\n\x0fpayload_variant\"\\\n\x07GeoChat\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x02to\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0bto_callsign\x18\x03 \x01(\tH\x01\x88\x01\x01\x42\x05\n\x03_toB\x0e\n\x0c_to_callsign\"M\n\x05Group\x12$\n\x04role\x18\x01 \x01(\x0e\x32\x16.meshtastic.MemberRole\x12\x1e\n\x04team\x18\x02 \x01(\x0e\x32\x10.meshtastic.Team\"\x19\n\x06Status\x12\x0f\n\x07\x62\x61ttery\x18\x01 \x01(\r\"4\n\x07\x43ontact\x12\x10\n\x08\x63\x61llsign\x18\x01 \x01(\t\x12\x17\n\x0f\x64\x65vice_callsign\x18\x02 \x01(\t\"_\n\x03PLI\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\r\n\x05speed\x18\x04 \x01(\r\x12\x0e\n\x06\x63ourse\x18\x05 \x01(\r*\xc0\x01\n\x04Team\x12\x14\n\x10Unspecifed_Color\x10\x00\x12\t\n\x05White\x10\x01\x12\n\n\x06Yellow\x10\x02\x12\n\n\x06Orange\x10\x03\x12\x0b\n\x07Magenta\x10\x04\x12\x07\n\x03Red\x10\x05\x12\n\n\x06Maroon\x10\x06\x12\n\n\x06Purple\x10\x07\x12\r\n\tDark_Blue\x10\x08\x12\x08\n\x04\x42lue\x10\t\x12\x08\n\x04\x43yan\x10\n\x12\x08\n\x04Teal\x10\x0b\x12\t\n\x05Green\x10\x0c\x12\x0e\n\nDark_Green\x10\r\x12\t\n\x05\x42rown\x10\x0e*\x7f\n\nMemberRole\x12\x0e\n\nUnspecifed\x10\x00\x12\x0e\n\nTeamMember\x10\x01\x12\x0c\n\x08TeamLead\x10\x02\x12\x06\n\x02HQ\x10\x03\x12\n\n\x06Sniper\x10\x04\x12\t\n\x05Medic\x10\x05\x12\x13\n\x0f\x46orwardObserver\x10\x06\x12\x07\n\x03RTO\x10\x07\x12\x06\n\x02K9\x10\x08\x42`\n\x14org.meshtastic.protoB\nATAKProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
9
+
10
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
12
+
13
+ module Meshtastic
14
+ TAKPacket = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.TAKPacket").msgclass
15
+ GeoChat = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.GeoChat").msgclass
16
+ Group = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Group").msgclass
17
+ Status = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Status").msgclass
18
+ Contact = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Contact").msgclass
19
+ PLI = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.PLI").msgclass
20
+ Team = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Team").enummodule
21
+ MemberRole = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.MemberRole").enummodule
22
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/cannedmessages_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module Cannedmessages
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/cannedmessages.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+
8
+ descriptor_data = "\n\x1fmeshtastic/cannedmessages.proto\x12\nmeshtastic\"-\n\x19\x43\x61nnedMessageModuleConfig\x12\x10\n\x08messages\x18\x01 \x01(\tBo\n\x14org.meshtastic.protoB\x19\x43\x61nnedMessageConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
9
+
10
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
12
+
13
+ module Meshtastic
14
+ CannedMessageModuleConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.CannedMessageModuleConfig").msgclass
15
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/channel_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module Channel
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/channel.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+
8
+ descriptor_data = "\n\x18meshtastic/channel.proto\x12\nmeshtastic\"\xb8\x01\n\x0f\x43hannelSettings\x12\x17\n\x0b\x63hannel_num\x18\x01 \x01(\rB\x02\x18\x01\x12\x0b\n\x03psk\x18\x02 \x01(\x0c\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\n\n\x02id\x18\x04 \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x05 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x06 \x01(\x08\x12\x33\n\x0fmodule_settings\x18\x07 \x01(\x0b\x32\x1a.meshtastic.ModuleSettings\">\n\x0eModuleSettings\x12\x1a\n\x12position_precision\x18\x01 \x01(\r\x12\x10\n\x08is_muted\x18\x02 \x01(\x08\"\xa1\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12-\n\x08settings\x18\x02 \x01(\x0b\x32\x1b.meshtastic.ChannelSettings\x12&\n\x04role\x18\x03 \x01(\x0e\x32\x18.meshtastic.Channel.Role\"0\n\x04Role\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\x42\x63\n\x14org.meshtastic.protoB\rChannelProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
9
+
10
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
12
+
13
+ module Meshtastic
14
+ ChannelSettings = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.ChannelSettings").msgclass
15
+ ModuleSettings = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.ModuleSettings").msgclass
16
+ Channel = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Channel").msgclass
17
+ Channel::Role = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Channel.Role").enummodule
18
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/clientonly_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module Clientonly
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/clientonly.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'meshtastic/localonly_pb'
8
+ require 'meshtastic/mesh_pb'
9
+
10
+
11
+ descriptor_data = "\n\x1bmeshtastic/clientonly.proto\x12\nmeshtastic\x1a\x1ameshtastic/localonly.proto\x1a\x15meshtastic/mesh.proto\"\xa9\x03\n\rDeviceProfile\x12\x16\n\tlong_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nshort_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hannel_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12,\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x17.meshtastic.LocalConfigH\x03\x88\x01\x01\x12\x39\n\rmodule_config\x18\x05 \x01(\x0b\x32\x1d.meshtastic.LocalModuleConfigH\x04\x88\x01\x01\x12\x31\n\x0e\x66ixed_position\x18\x06 \x01(\x0b\x32\x14.meshtastic.PositionH\x05\x88\x01\x01\x12\x15\n\x08ringtone\x18\x07 \x01(\tH\x06\x88\x01\x01\x12\x1c\n\x0f\x63\x61nned_messages\x18\x08 \x01(\tH\x07\x88\x01\x01\x42\x0c\n\n_long_nameB\r\n\x0b_short_nameB\x0e\n\x0c_channel_urlB\t\n\x07_configB\x10\n\x0e_module_configB\x11\n\x0f_fixed_positionB\x0b\n\t_ringtoneB\x12\n\x10_canned_messagesBf\n\x14org.meshtastic.protoB\x10\x43lientOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
12
+
13
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
14
+ pool.add_serialized_file(descriptor_data)
15
+
16
+ module Meshtastic
17
+ DeviceProfile = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.DeviceProfile").msgclass
18
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'meshtastic/config_pb'
4
+
5
+ # Plugin used to interact with Meshtastic nodes
6
+ module Meshtastic
7
+ module Config
8
+ # Author(s):: 0day Inc. <support@0dayinc.com>
9
+
10
+ public_class_method def self.authors
11
+ "AUTHOR(S):
12
+ 0day Inc. <support@0dayinc.com>
13
+ "
14
+ end
15
+
16
+ # Display Usage for this Module
17
+
18
+ public_class_method def self.help
19
+ puts "USAGE:
20
+ #{self}.authors
21
+ "
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: meshtastic/config.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'meshtastic/device_ui_pb'
8
+
9
+
10
+ descriptor_data = "\n\x17meshtastic/config.proto\x12\nmeshtastic\x1a\x1ameshtastic/device_ui.proto\"\x8d)\n\x06\x43onfig\x12\x31\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x1f.meshtastic.Config.DeviceConfigH\x00\x12\x35\n\x08position\x18\x02 \x01(\x0b\x32!.meshtastic.Config.PositionConfigH\x00\x12/\n\x05power\x18\x03 \x01(\x0b\x32\x1e.meshtastic.Config.PowerConfigH\x00\x12\x33\n\x07network\x18\x04 \x01(\x0b\x32 .meshtastic.Config.NetworkConfigH\x00\x12\x33\n\x07\x64isplay\x18\x05 \x01(\x0b\x32 .meshtastic.Config.DisplayConfigH\x00\x12-\n\x04lora\x18\x06 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfigH\x00\x12\x37\n\tbluetooth\x18\x07 \x01(\x0b\x32\".meshtastic.Config.BluetoothConfigH\x00\x12\x35\n\x08security\x18\x08 \x01(\x0b\x32!.meshtastic.Config.SecurityConfigH\x00\x12\x39\n\nsessionkey\x18\t \x01(\x0b\x32#.meshtastic.Config.SessionkeyConfigH\x00\x12/\n\tdevice_ui\x18\n \x01(\x0b\x32\x1a.meshtastic.DeviceUIConfigH\x00\x1a\xf6\x06\n\x0c\x44\x65viceConfig\x12\x32\n\x04role\x18\x01 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12\x1a\n\x0eserial_enabled\x18\x02 \x01(\x08\x42\x02\x18\x01\x12\x13\n\x0b\x62utton_gpio\x18\x04 \x01(\r\x12\x13\n\x0b\x62uzzer_gpio\x18\x05 \x01(\r\x12I\n\x10rebroadcast_mode\x18\x06 \x01(\x0e\x32/.meshtastic.Config.DeviceConfig.RebroadcastMode\x12 \n\x18node_info_broadcast_secs\x18\x07 \x01(\r\x12\"\n\x1a\x64ouble_tap_as_button_press\x18\x08 \x01(\x08\x12\x16\n\nis_managed\x18\t \x01(\x08\x42\x02\x18\x01\x12\x1c\n\x14\x64isable_triple_click\x18\n \x01(\x08\x12\r\n\x05tzdef\x18\x0b \x01(\t\x12\x1e\n\x16led_heartbeat_disabled\x18\x0c \x01(\x08\x12?\n\x0b\x62uzzer_mode\x18\r \x01(\x0e\x32*.meshtastic.Config.DeviceConfig.BuzzerMode\"\xd4\x01\n\x04Role\x12\n\n\x06\x43LIENT\x10\x00\x12\x0f\n\x0b\x43LIENT_MUTE\x10\x01\x12\n\n\x06ROUTER\x10\x02\x12\x15\n\rROUTER_CLIENT\x10\x03\x1a\x02\x08\x01\x12\x10\n\x08REPEATER\x10\x04\x1a\x02\x08\x01\x12\x0b\n\x07TRACKER\x10\x05\x12\n\n\x06SENSOR\x10\x06\x12\x07\n\x03TAK\x10\x07\x12\x11\n\rCLIENT_HIDDEN\x10\x08\x12\x12\n\x0eLOST_AND_FOUND\x10\t\x12\x0f\n\x0bTAK_TRACKER\x10\n\x12\x0f\n\x0bROUTER_LATE\x10\x0b\x12\x0f\n\x0b\x43LIENT_BASE\x10\x0c\"s\n\x0fRebroadcastMode\x12\x07\n\x03\x41LL\x10\x00\x12\x15\n\x11\x41LL_SKIP_DECODING\x10\x01\x12\x0e\n\nLOCAL_ONLY\x10\x02\x12\x0e\n\nKNOWN_ONLY\x10\x03\x12\x08\n\x04NONE\x10\x04\x12\x16\n\x12\x43ORE_PORTNUMS_ONLY\x10\x05\"i\n\nBuzzerMode\x12\x0f\n\x0b\x41LL_ENABLED\x10\x00\x12\x0c\n\x08\x44ISABLED\x10\x01\x12\x16\n\x12NOTIFICATIONS_ONLY\x10\x02\x12\x0f\n\x0bSYSTEM_ONLY\x10\x03\x12\x13\n\x0f\x44IRECT_MSG_ONLY\x10\x04\x1a\x91\x05\n\x0ePositionConfig\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12(\n position_broadcast_smart_enabled\x18\x02 \x01(\x08\x12\x16\n\x0e\x66ixed_position\x18\x03 \x01(\x08\x12\x17\n\x0bgps_enabled\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\x1b\n\x13gps_update_interval\x18\x05 \x01(\r\x12\x1c\n\x10gps_attempt_time\x18\x06 \x01(\rB\x02\x18\x01\x12\x16\n\x0eposition_flags\x18\x07 \x01(\r\x12\x0f\n\x07rx_gpio\x18\x08 \x01(\r\x12\x0f\n\x07tx_gpio\x18\t \x01(\r\x12(\n broadcast_smart_minimum_distance\x18\n \x01(\r\x12-\n%broadcast_smart_minimum_interval_secs\x18\x0b \x01(\r\x12\x13\n\x0bgps_en_gpio\x18\x0c \x01(\r\x12;\n\x08gps_mode\x18\r \x01(\x0e\x32).meshtastic.Config.PositionConfig.GpsMode\"\xab\x01\n\rPositionFlags\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x41LTITUDE\x10\x01\x12\x10\n\x0c\x41LTITUDE_MSL\x10\x02\x12\x16\n\x12GEOIDAL_SEPARATION\x10\x04\x12\x07\n\x03\x44OP\x10\x08\x12\t\n\x05HVDOP\x10\x10\x12\r\n\tSATINVIEW\x10 \x12\n\n\x06SEQ_NO\x10@\x12\x0e\n\tTIMESTAMP\x10\x80\x01\x12\x0c\n\x07HEADING\x10\x80\x02\x12\n\n\x05SPEED\x10\x80\x04\"5\n\x07GpsMode\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x12\x0f\n\x0bNOT_PRESENT\x10\x02\x1a\x84\x02\n\x0bPowerConfig\x12\x17\n\x0fis_power_saving\x18\x01 \x01(\x08\x12&\n\x1eon_battery_shutdown_after_secs\x18\x02 \x01(\r\x12\x1f\n\x17\x61\x64\x63_multiplier_override\x18\x03 \x01(\x02\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x10\n\x08sds_secs\x18\x06 \x01(\r\x12\x0f\n\x07ls_secs\x18\x07 \x01(\r\x12\x15\n\rmin_wake_secs\x18\x08 \x01(\r\x12\"\n\x1a\x64\x65vice_battery_ina_address\x18\t \x01(\r\x12\x18\n\x10powermon_enables\x18 \x01(\x04\x1a\xe5\x03\n\rNetworkConfig\x12\x14\n\x0cwifi_enabled\x18\x01 \x01(\x08\x12\x11\n\twifi_ssid\x18\x03 \x01(\t\x12\x10\n\x08wifi_psk\x18\x04 \x01(\t\x12\x12\n\nntp_server\x18\x05 \x01(\t\x12\x13\n\x0b\x65th_enabled\x18\x06 \x01(\x08\x12\x42\n\x0c\x61\x64\x64ress_mode\x18\x07 \x01(\x0e\x32,.meshtastic.Config.NetworkConfig.AddressMode\x12@\n\x0bipv4_config\x18\x08 \x01(\x0b\x32+.meshtastic.Config.NetworkConfig.IpV4Config\x12\x16\n\x0ersyslog_server\x18\t \x01(\t\x12\x19\n\x11\x65nabled_protocols\x18\n \x01(\r\x12\x14\n\x0cipv6_enabled\x18\x0b \x01(\x08\x1a\x46\n\nIpV4Config\x12\n\n\x02ip\x18\x01 \x01(\x07\x12\x0f\n\x07gateway\x18\x02 \x01(\x07\x12\x0e\n\x06subnet\x18\x03 \x01(\x07\x12\x0b\n\x03\x64ns\x18\x04 \x01(\x07\"#\n\x0b\x41\x64\x64ressMode\x12\x08\n\x04\x44HCP\x10\x00\x12\n\n\x06STATIC\x10\x01\"4\n\rProtocolFlags\x12\x10\n\x0cNO_BROADCAST\x10\x00\x12\x11\n\rUDP_BROADCAST\x10\x01\x1a\x89\x08\n\rDisplayConfig\x12\x16\n\x0escreen_on_secs\x18\x01 \x01(\r\x12V\n\ngps_format\x18\x02 \x01(\x0e\x32>.meshtastic.Config.DisplayConfig.DeprecatedGpsCoordinateFormatB\x02\x18\x01\x12!\n\x19\x61uto_screen_carousel_secs\x18\x03 \x01(\r\x12\x1d\n\x11\x63ompass_north_top\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\x13\n\x0b\x66lip_screen\x18\x05 \x01(\x08\x12<\n\x05units\x18\x06 \x01(\x0e\x32-.meshtastic.Config.DisplayConfig.DisplayUnits\x12\x37\n\x04oled\x18\x07 \x01(\x0e\x32).meshtastic.Config.DisplayConfig.OledType\x12\x41\n\x0b\x64isplaymode\x18\x08 \x01(\x0e\x32,.meshtastic.Config.DisplayConfig.DisplayMode\x12\x14\n\x0cheading_bold\x18\t \x01(\x08\x12\x1d\n\x15wake_on_tap_or_motion\x18\n \x01(\x08\x12P\n\x13\x63ompass_orientation\x18\x0b \x01(\x0e\x32\x33.meshtastic.Config.DisplayConfig.CompassOrientation\x12\x15\n\ruse_12h_clock\x18\x0c \x01(\x08\x12\x1a\n\x12use_long_node_name\x18\r \x01(\x08\"+\n\x1d\x44\x65precatedGpsCoordinateFormat\x12\n\n\x06UNUSED\x10\x00\"(\n\x0c\x44isplayUnits\x12\n\n\x06METRIC\x10\x00\x12\x0c\n\x08IMPERIAL\x10\x01\"f\n\x08OledType\x12\r\n\tOLED_AUTO\x10\x00\x12\x10\n\x0cOLED_SSD1306\x10\x01\x12\x0f\n\x0bOLED_SH1106\x10\x02\x12\x0f\n\x0bOLED_SH1107\x10\x03\x12\x17\n\x13OLED_SH1107_128_128\x10\x04\"A\n\x0b\x44isplayMode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x0c\n\x08TWOCOLOR\x10\x01\x12\x0c\n\x08INVERTED\x10\x02\x12\t\n\x05\x43OLOR\x10\x03\"\xba\x01\n\x12\x43ompassOrientation\x12\r\n\tDEGREES_0\x10\x00\x12\x0e\n\nDEGREES_90\x10\x01\x12\x0f\n\x0b\x44\x45GREES_180\x10\x02\x12\x0f\n\x0b\x44\x45GREES_270\x10\x03\x12\x16\n\x12\x44\x45GREES_0_INVERTED\x10\x04\x12\x17\n\x13\x44\x45GREES_90_INVERTED\x10\x05\x12\x18\n\x14\x44\x45GREES_180_INVERTED\x10\x06\x12\x18\n\x14\x44\x45GREES_270_INVERTED\x10\x07\x1a\xda\x07\n\nLoRaConfig\x12\x12\n\nuse_preset\x18\x01 \x01(\x08\x12?\n\x0cmodem_preset\x18\x02 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x15\n\rspread_factor\x18\x04 \x01(\r\x12\x13\n\x0b\x63oding_rate\x18\x05 \x01(\r\x12\x18\n\x10\x66requency_offset\x18\x06 \x01(\x02\x12\x38\n\x06region\x18\x07 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12\x11\n\thop_limit\x18\x08 \x01(\r\x12\x12\n\ntx_enabled\x18\t \x01(\x08\x12\x10\n\x08tx_power\x18\n \x01(\x05\x12\x13\n\x0b\x63hannel_num\x18\x0b \x01(\r\x12\x1b\n\x13override_duty_cycle\x18\x0c \x01(\x08\x12\x1e\n\x16sx126x_rx_boosted_gain\x18\r \x01(\x08\x12\x1a\n\x12override_frequency\x18\x0e \x01(\x02\x12\x17\n\x0fpa_fan_disabled\x18\x0f \x01(\x08\x12\x17\n\x0fignore_incoming\x18g \x03(\r\x12\x13\n\x0bignore_mqtt\x18h \x01(\x08\x12\x19\n\x11\x63onfig_ok_to_mqtt\x18i \x01(\x08\"\xae\x02\n\nRegionCode\x12\t\n\x05UNSET\x10\x00\x12\x06\n\x02US\x10\x01\x12\n\n\x06\x45U_433\x10\x02\x12\n\n\x06\x45U_868\x10\x03\x12\x06\n\x02\x43N\x10\x04\x12\x06\n\x02JP\x10\x05\x12\x07\n\x03\x41NZ\x10\x06\x12\x06\n\x02KR\x10\x07\x12\x06\n\x02TW\x10\x08\x12\x06\n\x02RU\x10\t\x12\x06\n\x02IN\x10\n\x12\n\n\x06NZ_865\x10\x0b\x12\x06\n\x02TH\x10\x0c\x12\x0b\n\x07LORA_24\x10\r\x12\n\n\x06UA_433\x10\x0e\x12\n\n\x06UA_868\x10\x0f\x12\n\n\x06MY_433\x10\x10\x12\n\n\x06MY_919\x10\x11\x12\n\n\x06SG_923\x10\x12\x12\n\n\x06PH_433\x10\x13\x12\n\n\x06PH_868\x10\x14\x12\n\n\x06PH_915\x10\x15\x12\x0b\n\x07\x41NZ_433\x10\x16\x12\n\n\x06KZ_433\x10\x17\x12\n\n\x06KZ_863\x10\x18\x12\n\n\x06NP_865\x10\x19\x12\n\n\x06\x42R_902\x10\x1a\"\xa9\x01\n\x0bModemPreset\x12\r\n\tLONG_FAST\x10\x00\x12\r\n\tLONG_SLOW\x10\x01\x12\x16\n\x0eVERY_LONG_SLOW\x10\x02\x1a\x02\x08\x01\x12\x0f\n\x0bMEDIUM_SLOW\x10\x03\x12\x0f\n\x0bMEDIUM_FAST\x10\x04\x12\x0e\n\nSHORT_SLOW\x10\x05\x12\x0e\n\nSHORT_FAST\x10\x06\x12\x11\n\rLONG_MODERATE\x10\x07\x12\x0f\n\x0bSHORT_TURBO\x10\x08\x1a\xad\x01\n\x0f\x42luetoothConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12<\n\x04mode\x18\x02 \x01(\x0e\x32..meshtastic.Config.BluetoothConfig.PairingMode\x12\x11\n\tfixed_pin\x18\x03 \x01(\r\"8\n\x0bPairingMode\x12\x0e\n\nRANDOM_PIN\x10\x00\x12\r\n\tFIXED_PIN\x10\x01\x12\n\n\x06NO_PIN\x10\x02\x1a\xb6\x01\n\x0eSecurityConfig\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\x12\x13\n\x0bprivate_key\x18\x02 \x01(\x0c\x12\x11\n\tadmin_key\x18\x03 \x03(\x0c\x12\x12\n\nis_managed\x18\x04 \x01(\x08\x12\x16\n\x0eserial_enabled\x18\x05 \x01(\x08\x12\x1d\n\x15\x64\x65\x62ug_log_api_enabled\x18\x06 \x01(\x08\x12\x1d\n\x15\x61\x64min_channel_enabled\x18\x08 \x01(\x08\x1a\x12\n\x10SessionkeyConfigB\x11\n\x0fpayload_variantBb\n\x14org.meshtastic.protoB\x0c\x43onfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3"
11
+
12
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
13
+ pool.add_serialized_file(descriptor_data)
14
+
15
+ module Meshtastic
16
+ Config = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config").msgclass
17
+ Config::DeviceConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DeviceConfig").msgclass
18
+ Config::DeviceConfig::Role = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DeviceConfig.Role").enummodule
19
+ Config::DeviceConfig::RebroadcastMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DeviceConfig.RebroadcastMode").enummodule
20
+ Config::DeviceConfig::BuzzerMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DeviceConfig.BuzzerMode").enummodule
21
+ Config::PositionConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.PositionConfig").msgclass
22
+ Config::PositionConfig::PositionFlags = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.PositionConfig.PositionFlags").enummodule
23
+ Config::PositionConfig::GpsMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.PositionConfig.GpsMode").enummodule
24
+ Config::PowerConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.PowerConfig").msgclass
25
+ Config::NetworkConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.NetworkConfig").msgclass
26
+ Config::NetworkConfig::IpV4Config = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.NetworkConfig.IpV4Config").msgclass
27
+ Config::NetworkConfig::AddressMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.NetworkConfig.AddressMode").enummodule
28
+ Config::NetworkConfig::ProtocolFlags = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.NetworkConfig.ProtocolFlags").enummodule
29
+ Config::DisplayConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DisplayConfig").msgclass
30
+ Config::DisplayConfig::DeprecatedGpsCoordinateFormat = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DisplayConfig.DeprecatedGpsCoordinateFormat").enummodule
31
+ Config::DisplayConfig::DisplayUnits = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DisplayConfig.DisplayUnits").enummodule
32
+ Config::DisplayConfig::OledType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DisplayConfig.OledType").enummodule
33
+ Config::DisplayConfig::DisplayMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DisplayConfig.DisplayMode").enummodule
34
+ Config::DisplayConfig::CompassOrientation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.DisplayConfig.CompassOrientation").enummodule
35
+ Config::LoRaConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.LoRaConfig").msgclass
36
+ Config::LoRaConfig::RegionCode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.LoRaConfig.RegionCode").enummodule
37
+ Config::LoRaConfig::ModemPreset = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.LoRaConfig.ModemPreset").enummodule
38
+ Config::BluetoothConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.BluetoothConfig").msgclass
39
+ Config::BluetoothConfig::PairingMode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.BluetoothConfig.PairingMode").enummodule
40
+ Config::SecurityConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.SecurityConfig").msgclass
41
+ Config::SessionkeyConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("meshtastic.Config.SessionkeyConfig").msgclass
42
+ end