diff --git a/meshtastic/protobuf/UPSTREAM_REV.txt b/meshtastic/protobuf/UPSTREAM_REV.txt
index ad080a8..65cd3ab 100644
--- a/meshtastic/protobuf/UPSTREAM_REV.txt
+++ b/meshtastic/protobuf/UPSTREAM_REV.txt
@@ -1 +1 @@
-59cb394dcfc4432cb216358ca26e861c7d13f462
+9ab4a1d08cb833d897aee2367013318718391f2f
diff --git a/meshtastic/protobuf/admin_pb2.py b/meshtastic/protobuf/admin_pb2.py
index f5709da..d3266b7 100644
--- a/meshtastic/protobuf/admin_pb2.py
+++ b/meshtastic/protobuf/admin_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/admin.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -19,32 +19,50 @@ from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb
from meshtastic.protobuf import module_config_pb2 as meshtastic_dot_protobuf_dot_module__config__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmeshtastic/protobuf/admin.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a+meshtastic/protobuf/connection_status.proto\x1a#meshtastic/protobuf/device_ui.proto\x1a\x1emeshtastic/protobuf/mesh.proto\x1a\'meshtastic/protobuf/module_config.proto\"\xa5\x1a\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<\n\x14get_channel_response\x18\x02 \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x03 \x01(\x08H\x00\x12\x37\n\x12get_owner_response\x18\x04 \x01(\x0b\x32\x19.meshtastic.protobuf.UserH\x00\x12J\n\x12get_config_request\x18\x05 \x01(\x0e\x32,.meshtastic.protobuf.AdminMessage.ConfigTypeH\x00\x12:\n\x13get_config_response\x18\x06 \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12W\n\x19get_module_config_request\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.AdminMessage.ModuleConfigTypeH\x00\x12G\n\x1aget_module_config_response\x18\x08 \x01(\x0b\x32!.meshtastic.protobuf.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\x12K\n\x1cget_device_metadata_response\x18\r \x01(\x0b\x32#.meshtastic.protobuf.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\x12\\\n%get_device_connection_status_response\x18\x11 \x01(\x0b\x32+.meshtastic.protobuf.DeviceConnectionStatusH\x00\x12:\n\x0cset_ham_mode\x18\x12 \x01(\x0b\x32\".meshtastic.protobuf.HamParametersH\x00\x12/\n%get_node_remote_hardware_pins_request\x18\x13 \x01(\x08H\x00\x12\x65\n&get_node_remote_hardware_pins_response\x18\x14 \x01(\x0b\x32\x33.meshtastic.protobuf.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\x12N\n\x12\x62\x61\x63kup_preferences\x18\x18 \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12O\n\x13restore_preferences\x18\x19 \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12U\n\x19remove_backup_preferences\x18\x1a \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12H\n\x10send_input_event\x18\x1b \x01(\x0b\x32,.meshtastic.protobuf.AdminMessage.InputEventH\x00\x12.\n\tset_owner\x18 \x01(\x0b\x32\x19.meshtastic.protobuf.UserH\x00\x12\x33\n\x0bset_channel\x18! \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x31\n\nset_config\x18\" \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12>\n\x11set_module_config\x18# \x01(\x0b\x32!.meshtastic.protobuf.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;\n\x12set_fixed_position\x18) \x01(\x0b\x32\x1d.meshtastic.protobuf.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\x45\n\x16get_ui_config_response\x18- \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x12>\n\x0fstore_ui_config\x18. \x01(\x0b\x32#.meshtastic.protobuf.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\x39\n\x0b\x61\x64\x64_contact\x18\x42 \x01(\x0b\x32\".meshtastic.protobuf.SharedContactH\x00\x12\x45\n\x10key_verification\x18\x43 \x01(\x0b\x32).meshtastic.protobuf.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(\x05H\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\"o\n\x1eNodeRemoteHardwarePinsResponse\x12M\n\x19node_remote_hardware_pins\x18\x01 \x03(\x0b\x32*.meshtastic.protobuf.NodeRemoteHardwarePin\"|\n\rSharedContact\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x19.meshtastic.protobuf.User\x12\x15\n\rshould_ignore\x18\x03 \x01(\x08\x12\x19\n\x11manually_verified\x18\x04 \x01(\x08\"\xa5\x02\n\x14KeyVerificationAdmin\x12K\n\x0cmessage_type\x18\x01 \x01(\x0e\x32\x35.meshtastic.protobuf.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')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmeshtastic/protobuf/admin.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a+meshtastic/protobuf/connection_status.proto\x1a#meshtastic/protobuf/device_ui.proto\x1a\x1emeshtastic/protobuf/mesh.proto\x1a\'meshtastic/protobuf/module_config.proto\"\x9e\x1d\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<\n\x14get_channel_response\x18\x02 \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x03 \x01(\x08H\x00\x12\x37\n\x12get_owner_response\x18\x04 \x01(\x0b\x32\x19.meshtastic.protobuf.UserH\x00\x12J\n\x12get_config_request\x18\x05 \x01(\x0e\x32,.meshtastic.protobuf.AdminMessage.ConfigTypeH\x00\x12:\n\x13get_config_response\x18\x06 \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12W\n\x19get_module_config_request\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.AdminMessage.ModuleConfigTypeH\x00\x12G\n\x1aget_module_config_response\x18\x08 \x01(\x0b\x32!.meshtastic.protobuf.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\x12K\n\x1cget_device_metadata_response\x18\r \x01(\x0b\x32#.meshtastic.protobuf.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\x12\\\n%get_device_connection_status_response\x18\x11 \x01(\x0b\x32+.meshtastic.protobuf.DeviceConnectionStatusH\x00\x12:\n\x0cset_ham_mode\x18\x12 \x01(\x0b\x32\".meshtastic.protobuf.HamParametersH\x00\x12/\n%get_node_remote_hardware_pins_request\x18\x13 \x01(\x08H\x00\x12\x65\n&get_node_remote_hardware_pins_response\x18\x14 \x01(\x0b\x32\x33.meshtastic.protobuf.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\x12N\n\x12\x62\x61\x63kup_preferences\x18\x18 \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12O\n\x13restore_preferences\x18\x19 \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12U\n\x19remove_backup_preferences\x18\x1a \x01(\x0e\x32\x30.meshtastic.protobuf.AdminMessage.BackupLocationH\x00\x12H\n\x10send_input_event\x18\x1b \x01(\x0b\x32,.meshtastic.protobuf.AdminMessage.InputEventH\x00\x12.\n\tset_owner\x18 \x01(\x0b\x32\x19.meshtastic.protobuf.UserH\x00\x12\x33\n\x0bset_channel\x18! \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x31\n\nset_config\x18\" \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12>\n\x11set_module_config\x18# \x01(\x0b\x32!.meshtastic.protobuf.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;\n\x12set_fixed_position\x18) \x01(\x0b\x32\x1d.meshtastic.protobuf.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\x45\n\x16get_ui_config_response\x18- \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x12>\n\x0fstore_ui_config\x18. \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x12\x1a\n\x10set_ignored_node\x18/ \x01(\rH\x00\x12\x1d\n\x13remove_ignored_node\x18\x30 \x01(\rH\x00\x12\x1b\n\x11toggle_muted_node\x18\x31 \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\x39\n\x0b\x61\x64\x64_contact\x18\x42 \x01(\x0b\x32\".meshtastic.protobuf.SharedContactH\x00\x12\x45\n\x10key_verification\x18\x43 \x01(\x0b\x32).meshtastic.protobuf.KeyVerificationAdminH\x00\x12\x1e\n\x14\x66\x61\x63tory_reset_device\x18^ \x01(\x05H\x00\x12 \n\x12reboot_ota_seconds\x18_ \x01(\x05\x42\x02\x18\x01H\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\x12\x41\n\x0bota_request\x18\x66 \x01(\x0b\x32*.meshtastic.protobuf.AdminMessage.OTAEventH\x00\x12:\n\rsensor_config\x18g \x01(\x0b\x32!.meshtastic.protobuf.SensorConfigH\x00\x12:\n\rlockdown_auth\x18h \x01(\x0b\x32!.meshtastic.protobuf.LockdownAuthH\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\x1aS\n\x08OTAEvent\x12\x35\n\x0freboot_ota_mode\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.OTAMode\x12\x10\n\x08ota_hash\x18\x02 \x01(\x0c\"\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\"\x83\x03\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\x12\x18\n\x14STATUSMESSAGE_CONFIG\x10\r\x12\x1c\n\x18TRAFFICMANAGEMENT_CONFIG\x10\x0e\x12\x0e\n\nTAK_CONFIG\x10\x0f\"#\n\x0e\x42\x61\x63kupLocation\x12\t\n\x05\x46LASH\x10\x00\x12\x06\n\x02SD\x10\x01\x42\x11\n\x0fpayload_variant\"h\n\x0cLockdownAuth\x12\x12\n\npassphrase\x18\x01 \x01(\x0c\x12\x17\n\x0f\x62oots_remaining\x18\x02 \x01(\r\x12\x19\n\x11valid_until_epoch\x18\x03 \x01(\r\x12\x10\n\x08lock_now\x18\x04 \x01(\x08\"[\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\"o\n\x1eNodeRemoteHardwarePinsResponse\x12M\n\x19node_remote_hardware_pins\x18\x01 \x03(\x0b\x32*.meshtastic.protobuf.NodeRemoteHardwarePin\"|\n\rSharedContact\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x19.meshtastic.protobuf.User\x12\x15\n\rshould_ignore\x18\x03 \x01(\x08\x12\x19\n\x11manually_verified\x18\x04 \x01(\x08\"\xa5\x02\n\x14KeyVerificationAdmin\x12K\n\x0cmessage_type\x18\x01 \x01(\x0e\x32\x35.meshtastic.protobuf.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_number\"\xf2\x01\n\x0cSensorConfig\x12\x37\n\x0cscd4x_config\x18\x01 \x01(\x0b\x32!.meshtastic.protobuf.SCD4X_config\x12\x37\n\x0csen5x_config\x18\x02 \x01(\x0b\x32!.meshtastic.protobuf.SEN5X_config\x12\x37\n\x0cscd30_config\x18\x03 \x01(\x0b\x32!.meshtastic.protobuf.SCD30_config\x12\x37\n\x0cshtxx_config\x18\x04 \x01(\x0b\x32!.meshtastic.protobuf.SHTXX_config\"\xe2\x02\n\x0cSCD4X_config\x12\x14\n\x07set_asc\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12 \n\x13set_target_co2_conc\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x0fset_temperature\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x19\n\x0cset_altitude\x18\x04 \x01(\rH\x03\x88\x01\x01\x12!\n\x14set_ambient_pressure\x18\x05 \x01(\rH\x04\x88\x01\x01\x12\x1a\n\rfactory_reset\x18\x06 \x01(\x08H\x05\x88\x01\x01\x12\x1b\n\x0eset_power_mode\x18\x07 \x01(\x08H\x06\x88\x01\x01\x42\n\n\x08_set_ascB\x16\n\x14_set_target_co2_concB\x12\n\x10_set_temperatureB\x0f\n\r_set_altitudeB\x17\n\x15_set_ambient_pressureB\x10\n\x0e_factory_resetB\x11\n\x0f_set_power_mode\"v\n\x0cSEN5X_config\x12\x1c\n\x0fset_temperature\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x1e\n\x11set_one_shot_mode\x18\x02 \x01(\x08H\x01\x88\x01\x01\x42\x12\n\x10_set_temperatureB\x14\n\x12_set_one_shot_mode\"\xb4\x02\n\x0cSCD30_config\x12\x14\n\x07set_asc\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12 \n\x13set_target_co2_conc\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1c\n\x0fset_temperature\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x19\n\x0cset_altitude\x18\x04 \x01(\rH\x03\x88\x01\x01\x12%\n\x18set_measurement_interval\x18\x05 \x01(\rH\x04\x88\x01\x01\x12\x17\n\nsoft_reset\x18\x06 \x01(\x08H\x05\x88\x01\x01\x42\n\n\x08_set_ascB\x16\n\x14_set_target_co2_concB\x12\n\x10_set_temperatureB\x0f\n\r_set_altitudeB\x1b\n\x19_set_measurement_intervalB\r\n\x0b_soft_reset\":\n\x0cSHTXX_config\x12\x19\n\x0cset_accuracy\x18\x01 \x01(\rH\x00\x88\x01\x01\x42\x0f\n\r_set_accuracy*7\n\x07OTAMode\x12\x11\n\rNO_REBOOT_OTA\x10\x00\x12\x0b\n\x07OTA_BLE\x10\x01\x12\x0c\n\x08OTA_WIFI\x10\x02\x42\x61\n\x14org.meshtastic.protoB\x0b\x41\x64minProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.admin_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.admin_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\013AdminProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_ADMINMESSAGE']._serialized_start=281
- _globals['_ADMINMESSAGE']._serialized_end=3646
- _globals['_ADMINMESSAGE_INPUTEVENT']._serialized_start=2972
- _globals['_ADMINMESSAGE_INPUTEVENT']._serialized_end=3055
- _globals['_ADMINMESSAGE_CONFIGTYPE']._serialized_start=3058
- _globals['_ADMINMESSAGE_CONFIGTYPE']._serialized_end=3272
- _globals['_ADMINMESSAGE_MODULECONFIGTYPE']._serialized_start=3275
- _globals['_ADMINMESSAGE_MODULECONFIGTYPE']._serialized_end=3590
- _globals['_ADMINMESSAGE_BACKUPLOCATION']._serialized_start=3592
- _globals['_ADMINMESSAGE_BACKUPLOCATION']._serialized_end=3627
- _globals['_HAMPARAMETERS']._serialized_start=3648
- _globals['_HAMPARAMETERS']._serialized_end=3739
- _globals['_NODEREMOTEHARDWAREPINSRESPONSE']._serialized_start=3741
- _globals['_NODEREMOTEHARDWAREPINSRESPONSE']._serialized_end=3852
- _globals['_SHAREDCONTACT']._serialized_start=3854
- _globals['_SHAREDCONTACT']._serialized_end=3978
- _globals['_KEYVERIFICATIONADMIN']._serialized_start=3981
- _globals['_KEYVERIFICATIONADMIN']._serialized_end=4274
- _globals['_KEYVERIFICATIONADMIN_MESSAGETYPE']._serialized_start=4151
- _globals['_KEYVERIFICATIONADMIN_MESSAGETYPE']._serialized_end=4254
+ _ADMINMESSAGE.fields_by_name['reboot_ota_seconds']._options = None
+ _ADMINMESSAGE.fields_by_name['reboot_ota_seconds']._serialized_options = b'\030\001'
+ _OTAMODE._serialized_start=5852
+ _OTAMODE._serialized_end=5907
+ _ADMINMESSAGE._serialized_start=281
+ _ADMINMESSAGE._serialized_end=4023
+ _ADMINMESSAGE_INPUTEVENT._serialized_start=3192
+ _ADMINMESSAGE_INPUTEVENT._serialized_end=3275
+ _ADMINMESSAGE_OTAEVENT._serialized_start=3277
+ _ADMINMESSAGE_OTAEVENT._serialized_end=3360
+ _ADMINMESSAGE_CONFIGTYPE._serialized_start=3363
+ _ADMINMESSAGE_CONFIGTYPE._serialized_end=3577
+ _ADMINMESSAGE_MODULECONFIGTYPE._serialized_start=3580
+ _ADMINMESSAGE_MODULECONFIGTYPE._serialized_end=3967
+ _ADMINMESSAGE_BACKUPLOCATION._serialized_start=3969
+ _ADMINMESSAGE_BACKUPLOCATION._serialized_end=4004
+ _LOCKDOWNAUTH._serialized_start=4025
+ _LOCKDOWNAUTH._serialized_end=4129
+ _HAMPARAMETERS._serialized_start=4131
+ _HAMPARAMETERS._serialized_end=4222
+ _NODEREMOTEHARDWAREPINSRESPONSE._serialized_start=4224
+ _NODEREMOTEHARDWAREPINSRESPONSE._serialized_end=4335
+ _SHAREDCONTACT._serialized_start=4337
+ _SHAREDCONTACT._serialized_end=4461
+ _KEYVERIFICATIONADMIN._serialized_start=4464
+ _KEYVERIFICATIONADMIN._serialized_end=4757
+ _KEYVERIFICATIONADMIN_MESSAGETYPE._serialized_start=4634
+ _KEYVERIFICATIONADMIN_MESSAGETYPE._serialized_end=4737
+ _SENSORCONFIG._serialized_start=4760
+ _SENSORCONFIG._serialized_end=5002
+ _SCD4X_CONFIG._serialized_start=5005
+ _SCD4X_CONFIG._serialized_end=5359
+ _SEN5X_CONFIG._serialized_start=5361
+ _SEN5X_CONFIG._serialized_end=5479
+ _SCD30_CONFIG._serialized_start=5482
+ _SCD30_CONFIG._serialized_end=5790
+ _SHTXX_CONFIG._serialized_start=5792
+ _SHTXX_CONFIG._serialized_end=5850
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/admin_pb2.pyi b/meshtastic/protobuf/admin_pb2.pyi
index 9d189d1..29e86d7 100644
--- a/meshtastic/protobuf/admin_pb2.pyi
+++ b/meshtastic/protobuf/admin_pb2.pyi
@@ -1,889 +1,313 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from meshtastic.protobuf import channel_pb2 as _channel_pb2
+from meshtastic.protobuf import config_pb2 as _config_pb2
+from meshtastic.protobuf import connection_status_pb2 as _connection_status_pb2
+from meshtastic.protobuf import device_ui_pb2 as _device_ui_pb2
+from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
+from meshtastic.protobuf import module_config_pb2 as _module_config_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.internal.containers
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import meshtastic.protobuf.channel_pb2
-import meshtastic.protobuf.config_pb2
-import meshtastic.protobuf.connection_status_pb2
-import meshtastic.protobuf.device_ui_pb2
-import meshtastic.protobuf.mesh_pb2
-import meshtastic.protobuf.module_config_pb2
-import sys
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
+NO_REBOOT_OTA: OTAMode
+OTA_BLE: OTAMode
+OTA_WIFI: OTAMode
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class AdminMessage(_message.Message):
+ __slots__ = ["add_contact", "backup_preferences", "begin_edit_settings", "commit_edit_settings", "delete_file_request", "enter_dfu_mode_request", "exit_simulator", "factory_reset_config", "factory_reset_device", "get_canned_message_module_messages_request", "get_canned_message_module_messages_response", "get_channel_request", "get_channel_response", "get_config_request", "get_config_response", "get_device_connection_status_request", "get_device_connection_status_response", "get_device_metadata_request", "get_device_metadata_response", "get_module_config_request", "get_module_config_response", "get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", "get_owner_request", "get_owner_response", "get_ringtone_request", "get_ringtone_response", "get_ui_config_request", "get_ui_config_response", "key_verification", "lockdown_auth", "nodedb_reset", "ota_request", "reboot_ota_seconds", "reboot_seconds", "remove_backup_preferences", "remove_by_nodenum", "remove_favorite_node", "remove_fixed_position", "remove_ignored_node", "restore_preferences", "send_input_event", "sensor_config", "session_passkey", "set_canned_message_module_messages", "set_channel", "set_config", "set_favorite_node", "set_fixed_position", "set_ham_mode", "set_ignored_node", "set_module_config", "set_owner", "set_ringtone_message", "set_scale", "set_time_only", "shutdown_seconds", "store_ui_config", "toggle_muted_node"]
+ class BackupLocation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class ConfigType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class ModuleConfigType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class InputEvent(_message.Message):
+ __slots__ = ["event_code", "kb_char", "touch_x", "touch_y"]
+ EVENT_CODE_FIELD_NUMBER: _ClassVar[int]
+ KB_CHAR_FIELD_NUMBER: _ClassVar[int]
+ TOUCH_X_FIELD_NUMBER: _ClassVar[int]
+ TOUCH_Y_FIELD_NUMBER: _ClassVar[int]
+ event_code: int
+ kb_char: int
+ touch_x: int
+ touch_y: int
+ def __init__(self, event_code: _Optional[int] = ..., kb_char: _Optional[int] = ..., touch_x: _Optional[int] = ..., touch_y: _Optional[int] = ...) -> None: ...
+ class OTAEvent(_message.Message):
+ __slots__ = ["ota_hash", "reboot_ota_mode"]
+ OTA_HASH_FIELD_NUMBER: _ClassVar[int]
+ REBOOT_OTA_MODE_FIELD_NUMBER: _ClassVar[int]
+ ota_hash: bytes
+ reboot_ota_mode: OTAMode
+ def __init__(self, reboot_ota_mode: _Optional[_Union[OTAMode, str]] = ..., ota_hash: _Optional[bytes] = ...) -> None: ...
+ ADD_CONTACT_FIELD_NUMBER: _ClassVar[int]
+ AMBIENTLIGHTING_CONFIG: AdminMessage.ModuleConfigType
+ AUDIO_CONFIG: AdminMessage.ModuleConfigType
+ BACKUP_PREFERENCES_FIELD_NUMBER: _ClassVar[int]
+ BEGIN_EDIT_SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ BLUETOOTH_CONFIG: AdminMessage.ConfigType
+ CANNEDMSG_CONFIG: AdminMessage.ModuleConfigType
+ COMMIT_EDIT_SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ DELETE_FILE_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ DETECTIONSENSOR_CONFIG: AdminMessage.ModuleConfigType
+ DEVICEUI_CONFIG: AdminMessage.ConfigType
+ DEVICE_CONFIG: AdminMessage.ConfigType
+ DISPLAY_CONFIG: AdminMessage.ConfigType
+ ENTER_DFU_MODE_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ EXIT_SIMULATOR_FIELD_NUMBER: _ClassVar[int]
+ EXTNOTIF_CONFIG: AdminMessage.ModuleConfigType
+ FACTORY_RESET_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ FACTORY_RESET_DEVICE_FIELD_NUMBER: _ClassVar[int]
+ FLASH: AdminMessage.BackupLocation
+ GET_CANNED_MESSAGE_MODULE_MESSAGES_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_CANNED_MESSAGE_MODULE_MESSAGES_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_CHANNEL_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_CHANNEL_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_CONFIG_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_CONFIG_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_DEVICE_CONNECTION_STATUS_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_DEVICE_CONNECTION_STATUS_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_DEVICE_METADATA_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_DEVICE_METADATA_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_MODULE_CONFIG_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_MODULE_CONFIG_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_NODE_REMOTE_HARDWARE_PINS_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_NODE_REMOTE_HARDWARE_PINS_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_OWNER_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_OWNER_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_RINGTONE_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_RINGTONE_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ GET_UI_CONFIG_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ GET_UI_CONFIG_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ KEY_VERIFICATION_FIELD_NUMBER: _ClassVar[int]
+ LOCKDOWN_AUTH_FIELD_NUMBER: _ClassVar[int]
+ LORA_CONFIG: AdminMessage.ConfigType
+ MQTT_CONFIG: AdminMessage.ModuleConfigType
+ NEIGHBORINFO_CONFIG: AdminMessage.ModuleConfigType
+ NETWORK_CONFIG: AdminMessage.ConfigType
+ NODEDB_RESET_FIELD_NUMBER: _ClassVar[int]
+ OTA_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ PAXCOUNTER_CONFIG: AdminMessage.ModuleConfigType
+ POSITION_CONFIG: AdminMessage.ConfigType
+ POWER_CONFIG: AdminMessage.ConfigType
+ RANGETEST_CONFIG: AdminMessage.ModuleConfigType
+ REBOOT_OTA_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ REBOOT_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ REMOTEHARDWARE_CONFIG: AdminMessage.ModuleConfigType
+ REMOVE_BACKUP_PREFERENCES_FIELD_NUMBER: _ClassVar[int]
+ REMOVE_BY_NODENUM_FIELD_NUMBER: _ClassVar[int]
+ REMOVE_FAVORITE_NODE_FIELD_NUMBER: _ClassVar[int]
+ REMOVE_FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
+ REMOVE_IGNORED_NODE_FIELD_NUMBER: _ClassVar[int]
+ RESTORE_PREFERENCES_FIELD_NUMBER: _ClassVar[int]
+ SD: AdminMessage.BackupLocation
+ SECURITY_CONFIG: AdminMessage.ConfigType
+ SEND_INPUT_EVENT_FIELD_NUMBER: _ClassVar[int]
+ SENSOR_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SERIAL_CONFIG: AdminMessage.ModuleConfigType
+ SESSIONKEY_CONFIG: AdminMessage.ConfigType
+ SESSION_PASSKEY_FIELD_NUMBER: _ClassVar[int]
+ SET_CANNED_MESSAGE_MODULE_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+ SET_CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ SET_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SET_FAVORITE_NODE_FIELD_NUMBER: _ClassVar[int]
+ SET_FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
+ SET_HAM_MODE_FIELD_NUMBER: _ClassVar[int]
+ SET_IGNORED_NODE_FIELD_NUMBER: _ClassVar[int]
+ SET_MODULE_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SET_OWNER_FIELD_NUMBER: _ClassVar[int]
+ SET_RINGTONE_MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ SET_SCALE_FIELD_NUMBER: _ClassVar[int]
+ SET_TIME_ONLY_FIELD_NUMBER: _ClassVar[int]
+ SHUTDOWN_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ STATUSMESSAGE_CONFIG: AdminMessage.ModuleConfigType
+ STOREFORWARD_CONFIG: AdminMessage.ModuleConfigType
+ STORE_UI_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ TAK_CONFIG: AdminMessage.ModuleConfigType
+ TELEMETRY_CONFIG: AdminMessage.ModuleConfigType
+ TOGGLE_MUTED_NODE_FIELD_NUMBER: _ClassVar[int]
+ TRAFFICMANAGEMENT_CONFIG: AdminMessage.ModuleConfigType
+ add_contact: SharedContact
+ backup_preferences: AdminMessage.BackupLocation
+ begin_edit_settings: bool
+ commit_edit_settings: bool
+ delete_file_request: str
+ enter_dfu_mode_request: bool
+ exit_simulator: bool
+ factory_reset_config: int
+ factory_reset_device: int
+ get_canned_message_module_messages_request: bool
+ get_canned_message_module_messages_response: str
+ get_channel_request: int
+ get_channel_response: _channel_pb2.Channel
+ get_config_request: AdminMessage.ConfigType
+ get_config_response: _config_pb2.Config
+ get_device_connection_status_request: bool
+ get_device_connection_status_response: _connection_status_pb2.DeviceConnectionStatus
+ get_device_metadata_request: bool
+ get_device_metadata_response: _mesh_pb2.DeviceMetadata
+ get_module_config_request: AdminMessage.ModuleConfigType
+ get_module_config_response: _module_config_pb2.ModuleConfig
+ get_node_remote_hardware_pins_request: bool
+ get_node_remote_hardware_pins_response: NodeRemoteHardwarePinsResponse
+ get_owner_request: bool
+ get_owner_response: _mesh_pb2.User
+ get_ringtone_request: bool
+ get_ringtone_response: str
+ get_ui_config_request: bool
+ get_ui_config_response: _device_ui_pb2.DeviceUIConfig
+ key_verification: KeyVerificationAdmin
+ lockdown_auth: LockdownAuth
+ nodedb_reset: bool
+ ota_request: AdminMessage.OTAEvent
+ reboot_ota_seconds: int
+ reboot_seconds: int
+ remove_backup_preferences: AdminMessage.BackupLocation
+ remove_by_nodenum: int
+ remove_favorite_node: int
+ remove_fixed_position: bool
+ remove_ignored_node: int
+ restore_preferences: AdminMessage.BackupLocation
+ send_input_event: AdminMessage.InputEvent
+ sensor_config: SensorConfig
+ session_passkey: bytes
+ set_canned_message_module_messages: str
+ set_channel: _channel_pb2.Channel
+ set_config: _config_pb2.Config
+ set_favorite_node: int
+ set_fixed_position: _mesh_pb2.Position
+ set_ham_mode: HamParameters
+ set_ignored_node: int
+ set_module_config: _module_config_pb2.ModuleConfig
+ set_owner: _mesh_pb2.User
+ set_ringtone_message: str
+ set_scale: int
+ set_time_only: int
+ shutdown_seconds: int
+ store_ui_config: _device_ui_pb2.DeviceUIConfig
+ toggle_muted_node: int
+ def __init__(self, session_passkey: _Optional[bytes] = ..., get_channel_request: _Optional[int] = ..., get_channel_response: _Optional[_Union[_channel_pb2.Channel, _Mapping]] = ..., get_owner_request: bool = ..., get_owner_response: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., get_config_request: _Optional[_Union[AdminMessage.ConfigType, str]] = ..., get_config_response: _Optional[_Union[_config_pb2.Config, _Mapping]] = ..., get_module_config_request: _Optional[_Union[AdminMessage.ModuleConfigType, str]] = ..., get_module_config_response: _Optional[_Union[_module_config_pb2.ModuleConfig, _Mapping]] = ..., get_canned_message_module_messages_request: bool = ..., get_canned_message_module_messages_response: _Optional[str] = ..., get_device_metadata_request: bool = ..., get_device_metadata_response: _Optional[_Union[_mesh_pb2.DeviceMetadata, _Mapping]] = ..., get_ringtone_request: bool = ..., get_ringtone_response: _Optional[str] = ..., get_device_connection_status_request: bool = ..., get_device_connection_status_response: _Optional[_Union[_connection_status_pb2.DeviceConnectionStatus, _Mapping]] = ..., set_ham_mode: _Optional[_Union[HamParameters, _Mapping]] = ..., get_node_remote_hardware_pins_request: bool = ..., get_node_remote_hardware_pins_response: _Optional[_Union[NodeRemoteHardwarePinsResponse, _Mapping]] = ..., enter_dfu_mode_request: bool = ..., delete_file_request: _Optional[str] = ..., set_scale: _Optional[int] = ..., backup_preferences: _Optional[_Union[AdminMessage.BackupLocation, str]] = ..., restore_preferences: _Optional[_Union[AdminMessage.BackupLocation, str]] = ..., remove_backup_preferences: _Optional[_Union[AdminMessage.BackupLocation, str]] = ..., send_input_event: _Optional[_Union[AdminMessage.InputEvent, _Mapping]] = ..., set_owner: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., set_channel: _Optional[_Union[_channel_pb2.Channel, _Mapping]] = ..., set_config: _Optional[_Union[_config_pb2.Config, _Mapping]] = ..., set_module_config: _Optional[_Union[_module_config_pb2.ModuleConfig, _Mapping]] = ..., set_canned_message_module_messages: _Optional[str] = ..., set_ringtone_message: _Optional[str] = ..., remove_by_nodenum: _Optional[int] = ..., set_favorite_node: _Optional[int] = ..., remove_favorite_node: _Optional[int] = ..., set_fixed_position: _Optional[_Union[_mesh_pb2.Position, _Mapping]] = ..., remove_fixed_position: bool = ..., set_time_only: _Optional[int] = ..., get_ui_config_request: bool = ..., get_ui_config_response: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ..., store_ui_config: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ..., set_ignored_node: _Optional[int] = ..., remove_ignored_node: _Optional[int] = ..., toggle_muted_node: _Optional[int] = ..., begin_edit_settings: bool = ..., commit_edit_settings: bool = ..., add_contact: _Optional[_Union[SharedContact, _Mapping]] = ..., key_verification: _Optional[_Union[KeyVerificationAdmin, _Mapping]] = ..., factory_reset_device: _Optional[int] = ..., reboot_ota_seconds: _Optional[int] = ..., exit_simulator: bool = ..., reboot_seconds: _Optional[int] = ..., shutdown_seconds: _Optional[int] = ..., factory_reset_config: _Optional[int] = ..., nodedb_reset: bool = ..., ota_request: _Optional[_Union[AdminMessage.OTAEvent, _Mapping]] = ..., sensor_config: _Optional[_Union[SensorConfig, _Mapping]] = ..., lockdown_auth: _Optional[_Union[LockdownAuth, _Mapping]] = ...) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class HamParameters(_message.Message):
+ __slots__ = ["call_sign", "frequency", "short_name", "tx_power"]
+ CALL_SIGN_FIELD_NUMBER: _ClassVar[int]
+ FREQUENCY_FIELD_NUMBER: _ClassVar[int]
+ SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
+ TX_POWER_FIELD_NUMBER: _ClassVar[int]
+ call_sign: str
+ frequency: float
+ short_name: str
+ tx_power: int
+ def __init__(self, call_sign: _Optional[str] = ..., tx_power: _Optional[int] = ..., frequency: _Optional[float] = ..., short_name: _Optional[str] = ...) -> None: ...
-@typing.final
-class AdminMessage(google.protobuf.message.Message):
- """
- This message is handled by the Admin module and is responsible for all settings/channel read/write operations.
- This message is used to do settings operations to both remote AND local nodes.
- (Prior to 1.2 these operations were done via special ToRadio operations)
- """
+class KeyVerificationAdmin(_message.Message):
+ __slots__ = ["message_type", "nonce", "remote_nodenum", "security_number"]
+ class MessageType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ DO_NOT_VERIFY: KeyVerificationAdmin.MessageType
+ DO_VERIFY: KeyVerificationAdmin.MessageType
+ INITIATE_VERIFICATION: KeyVerificationAdmin.MessageType
+ MESSAGE_TYPE_FIELD_NUMBER: _ClassVar[int]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ PROVIDE_SECURITY_NUMBER: KeyVerificationAdmin.MessageType
+ REMOTE_NODENUM_FIELD_NUMBER: _ClassVar[int]
+ SECURITY_NUMBER_FIELD_NUMBER: _ClassVar[int]
+ message_type: KeyVerificationAdmin.MessageType
+ nonce: int
+ remote_nodenum: int
+ security_number: int
+ def __init__(self, message_type: _Optional[_Union[KeyVerificationAdmin.MessageType, str]] = ..., remote_nodenum: _Optional[int] = ..., nonce: _Optional[int] = ..., security_number: _Optional[int] = ...) -> None: ...
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class LockdownAuth(_message.Message):
+ __slots__ = ["boots_remaining", "lock_now", "passphrase", "valid_until_epoch"]
+ BOOTS_REMAINING_FIELD_NUMBER: _ClassVar[int]
+ LOCK_NOW_FIELD_NUMBER: _ClassVar[int]
+ PASSPHRASE_FIELD_NUMBER: _ClassVar[int]
+ VALID_UNTIL_EPOCH_FIELD_NUMBER: _ClassVar[int]
+ boots_remaining: int
+ lock_now: bool
+ passphrase: bytes
+ valid_until_epoch: int
+ def __init__(self, passphrase: _Optional[bytes] = ..., boots_remaining: _Optional[int] = ..., valid_until_epoch: _Optional[int] = ..., lock_now: bool = ...) -> None: ...
- class _ConfigType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class NodeRemoteHardwarePinsResponse(_message.Message):
+ __slots__ = ["node_remote_hardware_pins"]
+ NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: _ClassVar[int]
+ node_remote_hardware_pins: _containers.RepeatedCompositeFieldContainer[_mesh_pb2.NodeRemoteHardwarePin]
+ def __init__(self, node_remote_hardware_pins: _Optional[_Iterable[_Union[_mesh_pb2.NodeRemoteHardwarePin, _Mapping]]] = ...) -> None: ...
- class _ConfigTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[AdminMessage._ConfigType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DEVICE_CONFIG: AdminMessage._ConfigType.ValueType # 0
- """
- TODO: REPLACE
- """
- POSITION_CONFIG: AdminMessage._ConfigType.ValueType # 1
- """
- TODO: REPLACE
- """
- POWER_CONFIG: AdminMessage._ConfigType.ValueType # 2
- """
- TODO: REPLACE
- """
- NETWORK_CONFIG: AdminMessage._ConfigType.ValueType # 3
- """
- TODO: REPLACE
- """
- DISPLAY_CONFIG: AdminMessage._ConfigType.ValueType # 4
- """
- TODO: REPLACE
- """
- LORA_CONFIG: AdminMessage._ConfigType.ValueType # 5
- """
- TODO: REPLACE
- """
- BLUETOOTH_CONFIG: AdminMessage._ConfigType.ValueType # 6
- """
- TODO: REPLACE
- """
- SECURITY_CONFIG: AdminMessage._ConfigType.ValueType # 7
- """
- TODO: REPLACE
- """
- SESSIONKEY_CONFIG: AdminMessage._ConfigType.ValueType # 8
- """
- Session key config
- """
- DEVICEUI_CONFIG: AdminMessage._ConfigType.ValueType # 9
- """
- device-ui config
- """
+class SCD30_config(_message.Message):
+ __slots__ = ["set_altitude", "set_asc", "set_measurement_interval", "set_target_co2_conc", "set_temperature", "soft_reset"]
+ SET_ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ SET_ASC_FIELD_NUMBER: _ClassVar[int]
+ SET_MEASUREMENT_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ SET_TARGET_CO2_CONC_FIELD_NUMBER: _ClassVar[int]
+ SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ SOFT_RESET_FIELD_NUMBER: _ClassVar[int]
+ set_altitude: int
+ set_asc: bool
+ set_measurement_interval: int
+ set_target_co2_conc: int
+ set_temperature: float
+ soft_reset: bool
+ def __init__(self, set_asc: bool = ..., set_target_co2_conc: _Optional[int] = ..., set_temperature: _Optional[float] = ..., set_altitude: _Optional[int] = ..., set_measurement_interval: _Optional[int] = ..., soft_reset: bool = ...) -> None: ...
- class ConfigType(_ConfigType, metaclass=_ConfigTypeEnumTypeWrapper):
- """
- TODO: REPLACE
- """
+class SCD4X_config(_message.Message):
+ __slots__ = ["factory_reset", "set_altitude", "set_ambient_pressure", "set_asc", "set_power_mode", "set_target_co2_conc", "set_temperature"]
+ FACTORY_RESET_FIELD_NUMBER: _ClassVar[int]
+ SET_ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ SET_AMBIENT_PRESSURE_FIELD_NUMBER: _ClassVar[int]
+ SET_ASC_FIELD_NUMBER: _ClassVar[int]
+ SET_POWER_MODE_FIELD_NUMBER: _ClassVar[int]
+ SET_TARGET_CO2_CONC_FIELD_NUMBER: _ClassVar[int]
+ SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ factory_reset: bool
+ set_altitude: int
+ set_ambient_pressure: int
+ set_asc: bool
+ set_power_mode: bool
+ set_target_co2_conc: int
+ set_temperature: float
+ def __init__(self, set_asc: bool = ..., set_target_co2_conc: _Optional[int] = ..., set_temperature: _Optional[float] = ..., set_altitude: _Optional[int] = ..., set_ambient_pressure: _Optional[int] = ..., factory_reset: bool = ..., set_power_mode: bool = ...) -> None: ...
- DEVICE_CONFIG: AdminMessage.ConfigType.ValueType # 0
- """
- TODO: REPLACE
- """
- POSITION_CONFIG: AdminMessage.ConfigType.ValueType # 1
- """
- TODO: REPLACE
- """
- POWER_CONFIG: AdminMessage.ConfigType.ValueType # 2
- """
- TODO: REPLACE
- """
- NETWORK_CONFIG: AdminMessage.ConfigType.ValueType # 3
- """
- TODO: REPLACE
- """
- DISPLAY_CONFIG: AdminMessage.ConfigType.ValueType # 4
- """
- TODO: REPLACE
- """
- LORA_CONFIG: AdminMessage.ConfigType.ValueType # 5
- """
- TODO: REPLACE
- """
- BLUETOOTH_CONFIG: AdminMessage.ConfigType.ValueType # 6
- """
- TODO: REPLACE
- """
- SECURITY_CONFIG: AdminMessage.ConfigType.ValueType # 7
- """
- TODO: REPLACE
- """
- SESSIONKEY_CONFIG: AdminMessage.ConfigType.ValueType # 8
- """
- Session key config
- """
- DEVICEUI_CONFIG: AdminMessage.ConfigType.ValueType # 9
- """
- device-ui config
- """
+class SEN5X_config(_message.Message):
+ __slots__ = ["set_one_shot_mode", "set_temperature"]
+ SET_ONE_SHOT_MODE_FIELD_NUMBER: _ClassVar[int]
+ SET_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ set_one_shot_mode: bool
+ set_temperature: float
+ def __init__(self, set_temperature: _Optional[float] = ..., set_one_shot_mode: bool = ...) -> None: ...
- class _ModuleConfigType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class SHTXX_config(_message.Message):
+ __slots__ = ["set_accuracy"]
+ SET_ACCURACY_FIELD_NUMBER: _ClassVar[int]
+ set_accuracy: int
+ def __init__(self, set_accuracy: _Optional[int] = ...) -> None: ...
- class _ModuleConfigTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[AdminMessage._ModuleConfigType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- MQTT_CONFIG: AdminMessage._ModuleConfigType.ValueType # 0
- """
- TODO: REPLACE
- """
- SERIAL_CONFIG: AdminMessage._ModuleConfigType.ValueType # 1
- """
- TODO: REPLACE
- """
- EXTNOTIF_CONFIG: AdminMessage._ModuleConfigType.ValueType # 2
- """
- TODO: REPLACE
- """
- STOREFORWARD_CONFIG: AdminMessage._ModuleConfigType.ValueType # 3
- """
- TODO: REPLACE
- """
- RANGETEST_CONFIG: AdminMessage._ModuleConfigType.ValueType # 4
- """
- TODO: REPLACE
- """
- TELEMETRY_CONFIG: AdminMessage._ModuleConfigType.ValueType # 5
- """
- TODO: REPLACE
- """
- CANNEDMSG_CONFIG: AdminMessage._ModuleConfigType.ValueType # 6
- """
- TODO: REPLACE
- """
- AUDIO_CONFIG: AdminMessage._ModuleConfigType.ValueType # 7
- """
- TODO: REPLACE
- """
- REMOTEHARDWARE_CONFIG: AdminMessage._ModuleConfigType.ValueType # 8
- """
- TODO: REPLACE
- """
- NEIGHBORINFO_CONFIG: AdminMessage._ModuleConfigType.ValueType # 9
- """
- TODO: REPLACE
- """
- AMBIENTLIGHTING_CONFIG: AdminMessage._ModuleConfigType.ValueType # 10
- """
- TODO: REPLACE
- """
- DETECTIONSENSOR_CONFIG: AdminMessage._ModuleConfigType.ValueType # 11
- """
- TODO: REPLACE
- """
- PAXCOUNTER_CONFIG: AdminMessage._ModuleConfigType.ValueType # 12
- """
- TODO: REPLACE
- """
+class SensorConfig(_message.Message):
+ __slots__ = ["scd30_config", "scd4x_config", "sen5x_config", "shtxx_config"]
+ SCD30_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SCD4X_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SEN5X_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SHTXX_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ scd30_config: SCD30_config
+ scd4x_config: SCD4X_config
+ sen5x_config: SEN5X_config
+ shtxx_config: SHTXX_config
+ def __init__(self, scd4x_config: _Optional[_Union[SCD4X_config, _Mapping]] = ..., sen5x_config: _Optional[_Union[SEN5X_config, _Mapping]] = ..., scd30_config: _Optional[_Union[SCD30_config, _Mapping]] = ..., shtxx_config: _Optional[_Union[SHTXX_config, _Mapping]] = ...) -> None: ...
- class ModuleConfigType(_ModuleConfigType, metaclass=_ModuleConfigTypeEnumTypeWrapper):
- """
- TODO: REPLACE
- """
+class SharedContact(_message.Message):
+ __slots__ = ["manually_verified", "node_num", "should_ignore", "user"]
+ MANUALLY_VERIFIED_FIELD_NUMBER: _ClassVar[int]
+ NODE_NUM_FIELD_NUMBER: _ClassVar[int]
+ SHOULD_IGNORE_FIELD_NUMBER: _ClassVar[int]
+ USER_FIELD_NUMBER: _ClassVar[int]
+ manually_verified: bool
+ node_num: int
+ should_ignore: bool
+ user: _mesh_pb2.User
+ def __init__(self, node_num: _Optional[int] = ..., user: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., should_ignore: bool = ..., manually_verified: bool = ...) -> None: ...
- MQTT_CONFIG: AdminMessage.ModuleConfigType.ValueType # 0
- """
- TODO: REPLACE
- """
- SERIAL_CONFIG: AdminMessage.ModuleConfigType.ValueType # 1
- """
- TODO: REPLACE
- """
- EXTNOTIF_CONFIG: AdminMessage.ModuleConfigType.ValueType # 2
- """
- TODO: REPLACE
- """
- STOREFORWARD_CONFIG: AdminMessage.ModuleConfigType.ValueType # 3
- """
- TODO: REPLACE
- """
- RANGETEST_CONFIG: AdminMessage.ModuleConfigType.ValueType # 4
- """
- TODO: REPLACE
- """
- TELEMETRY_CONFIG: AdminMessage.ModuleConfigType.ValueType # 5
- """
- TODO: REPLACE
- """
- CANNEDMSG_CONFIG: AdminMessage.ModuleConfigType.ValueType # 6
- """
- TODO: REPLACE
- """
- AUDIO_CONFIG: AdminMessage.ModuleConfigType.ValueType # 7
- """
- TODO: REPLACE
- """
- REMOTEHARDWARE_CONFIG: AdminMessage.ModuleConfigType.ValueType # 8
- """
- TODO: REPLACE
- """
- NEIGHBORINFO_CONFIG: AdminMessage.ModuleConfigType.ValueType # 9
- """
- TODO: REPLACE
- """
- AMBIENTLIGHTING_CONFIG: AdminMessage.ModuleConfigType.ValueType # 10
- """
- TODO: REPLACE
- """
- DETECTIONSENSOR_CONFIG: AdminMessage.ModuleConfigType.ValueType # 11
- """
- TODO: REPLACE
- """
- PAXCOUNTER_CONFIG: AdminMessage.ModuleConfigType.ValueType # 12
- """
- TODO: REPLACE
- """
-
- class _BackupLocation:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _BackupLocationEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[AdminMessage._BackupLocation.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- FLASH: AdminMessage._BackupLocation.ValueType # 0
- """
- Backup to the internal flash
- """
- SD: AdminMessage._BackupLocation.ValueType # 1
- """
- Backup to the SD card
- """
-
- class BackupLocation(_BackupLocation, metaclass=_BackupLocationEnumTypeWrapper): ...
- FLASH: AdminMessage.BackupLocation.ValueType # 0
- """
- Backup to the internal flash
- """
- SD: AdminMessage.BackupLocation.ValueType # 1
- """
- Backup to the SD card
- """
-
- @typing.final
- class InputEvent(google.protobuf.message.Message):
- """
- Input event message to be sent to the node.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- EVENT_CODE_FIELD_NUMBER: builtins.int
- KB_CHAR_FIELD_NUMBER: builtins.int
- TOUCH_X_FIELD_NUMBER: builtins.int
- TOUCH_Y_FIELD_NUMBER: builtins.int
- event_code: builtins.int
- """
- The input event code
- """
- kb_char: builtins.int
- """
- Keyboard character code
- """
- touch_x: builtins.int
- """
- The touch X coordinate
- """
- touch_y: builtins.int
- """
- The touch Y coordinate
- """
- def __init__(
- self,
- *,
- event_code: builtins.int = ...,
- kb_char: builtins.int = ...,
- touch_x: builtins.int = ...,
- touch_y: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["event_code", b"event_code", "kb_char", b"kb_char", "touch_x", b"touch_x", "touch_y", b"touch_y"]) -> None: ...
-
- SESSION_PASSKEY_FIELD_NUMBER: builtins.int
- GET_CHANNEL_REQUEST_FIELD_NUMBER: builtins.int
- GET_CHANNEL_RESPONSE_FIELD_NUMBER: builtins.int
- GET_OWNER_REQUEST_FIELD_NUMBER: builtins.int
- GET_OWNER_RESPONSE_FIELD_NUMBER: builtins.int
- GET_CONFIG_REQUEST_FIELD_NUMBER: builtins.int
- GET_CONFIG_RESPONSE_FIELD_NUMBER: builtins.int
- GET_MODULE_CONFIG_REQUEST_FIELD_NUMBER: builtins.int
- GET_MODULE_CONFIG_RESPONSE_FIELD_NUMBER: builtins.int
- GET_CANNED_MESSAGE_MODULE_MESSAGES_REQUEST_FIELD_NUMBER: builtins.int
- GET_CANNED_MESSAGE_MODULE_MESSAGES_RESPONSE_FIELD_NUMBER: builtins.int
- GET_DEVICE_METADATA_REQUEST_FIELD_NUMBER: builtins.int
- GET_DEVICE_METADATA_RESPONSE_FIELD_NUMBER: builtins.int
- GET_RINGTONE_REQUEST_FIELD_NUMBER: builtins.int
- GET_RINGTONE_RESPONSE_FIELD_NUMBER: builtins.int
- GET_DEVICE_CONNECTION_STATUS_REQUEST_FIELD_NUMBER: builtins.int
- GET_DEVICE_CONNECTION_STATUS_RESPONSE_FIELD_NUMBER: builtins.int
- SET_HAM_MODE_FIELD_NUMBER: builtins.int
- GET_NODE_REMOTE_HARDWARE_PINS_REQUEST_FIELD_NUMBER: builtins.int
- GET_NODE_REMOTE_HARDWARE_PINS_RESPONSE_FIELD_NUMBER: builtins.int
- ENTER_DFU_MODE_REQUEST_FIELD_NUMBER: builtins.int
- DELETE_FILE_REQUEST_FIELD_NUMBER: builtins.int
- SET_SCALE_FIELD_NUMBER: builtins.int
- BACKUP_PREFERENCES_FIELD_NUMBER: builtins.int
- RESTORE_PREFERENCES_FIELD_NUMBER: builtins.int
- REMOVE_BACKUP_PREFERENCES_FIELD_NUMBER: builtins.int
- SEND_INPUT_EVENT_FIELD_NUMBER: builtins.int
- SET_OWNER_FIELD_NUMBER: builtins.int
- SET_CHANNEL_FIELD_NUMBER: builtins.int
- SET_CONFIG_FIELD_NUMBER: builtins.int
- SET_MODULE_CONFIG_FIELD_NUMBER: builtins.int
- SET_CANNED_MESSAGE_MODULE_MESSAGES_FIELD_NUMBER: builtins.int
- SET_RINGTONE_MESSAGE_FIELD_NUMBER: builtins.int
- REMOVE_BY_NODENUM_FIELD_NUMBER: builtins.int
- SET_FAVORITE_NODE_FIELD_NUMBER: builtins.int
- REMOVE_FAVORITE_NODE_FIELD_NUMBER: builtins.int
- SET_FIXED_POSITION_FIELD_NUMBER: builtins.int
- REMOVE_FIXED_POSITION_FIELD_NUMBER: builtins.int
- SET_TIME_ONLY_FIELD_NUMBER: builtins.int
- GET_UI_CONFIG_REQUEST_FIELD_NUMBER: builtins.int
- GET_UI_CONFIG_RESPONSE_FIELD_NUMBER: builtins.int
- STORE_UI_CONFIG_FIELD_NUMBER: builtins.int
- SET_IGNORED_NODE_FIELD_NUMBER: builtins.int
- REMOVE_IGNORED_NODE_FIELD_NUMBER: builtins.int
- BEGIN_EDIT_SETTINGS_FIELD_NUMBER: builtins.int
- COMMIT_EDIT_SETTINGS_FIELD_NUMBER: builtins.int
- ADD_CONTACT_FIELD_NUMBER: builtins.int
- KEY_VERIFICATION_FIELD_NUMBER: builtins.int
- FACTORY_RESET_DEVICE_FIELD_NUMBER: builtins.int
- REBOOT_OTA_SECONDS_FIELD_NUMBER: builtins.int
- EXIT_SIMULATOR_FIELD_NUMBER: builtins.int
- REBOOT_SECONDS_FIELD_NUMBER: builtins.int
- SHUTDOWN_SECONDS_FIELD_NUMBER: builtins.int
- FACTORY_RESET_CONFIG_FIELD_NUMBER: builtins.int
- NODEDB_RESET_FIELD_NUMBER: builtins.int
- session_passkey: builtins.bytes
- """
- The node generates this key and sends it with any get_x_response packets.
- The client MUST include the same key with any set_x commands. Key expires after 300 seconds.
- Prevents replay attacks for admin messages.
- """
- get_channel_request: builtins.int
- """
- Send the specified channel in the response to this message
- NOTE: This field is sent with the channel index + 1 (to ensure we never try to send 'zero' - which protobufs treats as not present)
- """
- get_owner_request: builtins.bool
- """
- Send the current owner data in the response to this message.
- """
- get_config_request: global___AdminMessage.ConfigType.ValueType
- """
- Ask for the following config data to be sent
- """
- get_module_config_request: global___AdminMessage.ModuleConfigType.ValueType
- """
- Ask for the following config data to be sent
- """
- get_canned_message_module_messages_request: builtins.bool
- """
- Get the Canned Message Module messages in the response to this message.
- """
- get_canned_message_module_messages_response: builtins.str
- """
- Get the Canned Message Module messages in the response to this message.
- """
- get_device_metadata_request: builtins.bool
- """
- Request the node to send device metadata (firmware, protobuf version, etc)
- """
- get_ringtone_request: builtins.bool
- """
- Get the Ringtone in the response to this message.
- """
- get_ringtone_response: builtins.str
- """
- Get the Ringtone in the response to this message.
- """
- get_device_connection_status_request: builtins.bool
- """
- Request the node to send it's connection status
- """
- get_node_remote_hardware_pins_request: builtins.bool
- """
- Get the mesh's nodes with their available gpio pins for RemoteHardware module use
- """
- enter_dfu_mode_request: builtins.bool
- """
- Enter (UF2) DFU mode
- Only implemented on NRF52 currently
- """
- delete_file_request: builtins.str
- """
- Delete the file by the specified path from the device
- """
- set_scale: builtins.int
- """
- Set zero and offset for scale chips
- """
- backup_preferences: global___AdminMessage.BackupLocation.ValueType
- """
- Backup the node's preferences
- """
- restore_preferences: global___AdminMessage.BackupLocation.ValueType
- """
- Restore the node's preferences
- """
- remove_backup_preferences: global___AdminMessage.BackupLocation.ValueType
- """
- Remove backups of the node's preferences
- """
- set_canned_message_module_messages: builtins.str
- """
- Set the Canned Message Module messages text.
- """
- set_ringtone_message: builtins.str
- """
- Set the ringtone for ExternalNotification.
- """
- remove_by_nodenum: builtins.int
- """
- Remove the node by the specified node-num from the NodeDB on the device
- """
- set_favorite_node: builtins.int
- """
- Set specified node-num to be favorited on the NodeDB on the device
- """
- remove_favorite_node: builtins.int
- """
- Set specified node-num to be un-favorited on the NodeDB on the device
- """
- remove_fixed_position: builtins.bool
- """
- Clear fixed position coordinates and then set position.fixed_position = false
- """
- set_time_only: builtins.int
- """
- Set time only on the node
- Convenience method to set the time on the node (as Net quality) without any other position data
- """
- get_ui_config_request: builtins.bool
- """
- Tell the node to send the stored ui data.
- """
- set_ignored_node: builtins.int
- """
- Set specified node-num to be ignored on the NodeDB on the device
- """
- remove_ignored_node: builtins.int
- """
- Set specified node-num to be un-ignored on the NodeDB on the device
- """
- begin_edit_settings: builtins.bool
- """
- Begins an edit transaction for config, module config, owner, and channel settings changes
- This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings)
- """
- commit_edit_settings: builtins.bool
- """
- Commits an open transaction for any edits made to config, module config, owner, and channel settings
- """
- factory_reset_device: builtins.int
- """
- Tell the node to factory reset config everything; all device state and configuration will be returned to factory defaults and BLE bonds will be cleared.
- """
- reboot_ota_seconds: builtins.int
- """
- Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
- Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth.
- """
- exit_simulator: builtins.bool
- """
- This message is only supported for the simulator Portduino build.
- If received the simulator will exit successfully.
- """
- reboot_seconds: builtins.int
- """
- Tell the node to reboot in this many seconds (or <0 to cancel reboot)
- """
- shutdown_seconds: builtins.int
- """
- Tell the node to shutdown in this many seconds (or <0 to cancel shutdown)
- """
- factory_reset_config: builtins.int
- """
- Tell the node to factory reset config; all device state and configuration will be returned to factory defaults; BLE bonds will be preserved.
- """
- nodedb_reset: builtins.int
- """
- Tell the node to reset the nodedb.
- """
- @property
- def get_channel_response(self) -> meshtastic.protobuf.channel_pb2.Channel:
- """
- TODO: REPLACE
- """
-
- @property
- def get_owner_response(self) -> meshtastic.protobuf.mesh_pb2.User:
- """
- TODO: REPLACE
- """
-
- @property
- def get_config_response(self) -> meshtastic.protobuf.config_pb2.Config:
- """
- Send the current Config in the response to this message.
- """
-
- @property
- def get_module_config_response(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig:
- """
- Send the current Config in the response to this message.
- """
-
- @property
- def get_device_metadata_response(self) -> meshtastic.protobuf.mesh_pb2.DeviceMetadata:
- """
- Device metadata response
- """
-
- @property
- def get_device_connection_status_response(self) -> meshtastic.protobuf.connection_status_pb2.DeviceConnectionStatus:
- """
- Device connection status response
- """
-
- @property
- def set_ham_mode(self) -> global___HamParameters:
- """
- Setup a node for licensed amateur (ham) radio operation
- """
-
- @property
- def get_node_remote_hardware_pins_response(self) -> global___NodeRemoteHardwarePinsResponse:
- """
- Respond with the mesh's nodes with their available gpio pins for RemoteHardware module use
- """
-
- @property
- def send_input_event(self) -> global___AdminMessage.InputEvent:
- """
- Send an input event to the node.
- This is used to trigger physical input events like button presses, touch events, etc.
- """
-
- @property
- def set_owner(self) -> meshtastic.protobuf.mesh_pb2.User:
- """
- Set the owner for this node
- """
-
- @property
- def set_channel(self) -> meshtastic.protobuf.channel_pb2.Channel:
- """
- Set channels (using the new API).
- A special channel is the "primary channel".
- The other records are secondary channels.
- Note: only one channel can be marked as primary.
- If the client sets a particular channel to be primary, the previous channel will be set to SECONDARY automatically.
- """
-
- @property
- def set_config(self) -> meshtastic.protobuf.config_pb2.Config:
- """
- Set the current Config
- """
-
- @property
- def set_module_config(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig:
- """
- Set the current Config
- """
-
- @property
- def set_fixed_position(self) -> meshtastic.protobuf.mesh_pb2.Position:
- """
- Set fixed position data on the node and then set the position.fixed_position = true
- """
-
- @property
- def get_ui_config_response(self) -> meshtastic.protobuf.device_ui_pb2.DeviceUIConfig:
- """
- Reply stored device ui data.
- """
-
- @property
- def store_ui_config(self) -> meshtastic.protobuf.device_ui_pb2.DeviceUIConfig:
- """
- Tell the node to store UI data persistently.
- """
-
- @property
- def add_contact(self) -> global___SharedContact:
- """
- Add a contact (User) to the nodedb
- """
-
- @property
- def key_verification(self) -> global___KeyVerificationAdmin:
- """
- Initiate or respond to a key verification request
- """
-
- def __init__(
- self,
- *,
- session_passkey: builtins.bytes = ...,
- get_channel_request: builtins.int = ...,
- get_channel_response: meshtastic.protobuf.channel_pb2.Channel | None = ...,
- get_owner_request: builtins.bool = ...,
- get_owner_response: meshtastic.protobuf.mesh_pb2.User | None = ...,
- get_config_request: global___AdminMessage.ConfigType.ValueType = ...,
- get_config_response: meshtastic.protobuf.config_pb2.Config | None = ...,
- get_module_config_request: global___AdminMessage.ModuleConfigType.ValueType = ...,
- get_module_config_response: meshtastic.protobuf.module_config_pb2.ModuleConfig | None = ...,
- get_canned_message_module_messages_request: builtins.bool = ...,
- get_canned_message_module_messages_response: builtins.str = ...,
- get_device_metadata_request: builtins.bool = ...,
- get_device_metadata_response: meshtastic.protobuf.mesh_pb2.DeviceMetadata | None = ...,
- get_ringtone_request: builtins.bool = ...,
- get_ringtone_response: builtins.str = ...,
- get_device_connection_status_request: builtins.bool = ...,
- get_device_connection_status_response: meshtastic.protobuf.connection_status_pb2.DeviceConnectionStatus | None = ...,
- set_ham_mode: global___HamParameters | None = ...,
- get_node_remote_hardware_pins_request: builtins.bool = ...,
- get_node_remote_hardware_pins_response: global___NodeRemoteHardwarePinsResponse | None = ...,
- enter_dfu_mode_request: builtins.bool = ...,
- delete_file_request: builtins.str = ...,
- set_scale: builtins.int = ...,
- backup_preferences: global___AdminMessage.BackupLocation.ValueType = ...,
- restore_preferences: global___AdminMessage.BackupLocation.ValueType = ...,
- remove_backup_preferences: global___AdminMessage.BackupLocation.ValueType = ...,
- send_input_event: global___AdminMessage.InputEvent | None = ...,
- set_owner: meshtastic.protobuf.mesh_pb2.User | None = ...,
- set_channel: meshtastic.protobuf.channel_pb2.Channel | None = ...,
- set_config: meshtastic.protobuf.config_pb2.Config | None = ...,
- set_module_config: meshtastic.protobuf.module_config_pb2.ModuleConfig | None = ...,
- set_canned_message_module_messages: builtins.str = ...,
- set_ringtone_message: builtins.str = ...,
- remove_by_nodenum: builtins.int = ...,
- set_favorite_node: builtins.int = ...,
- remove_favorite_node: builtins.int = ...,
- set_fixed_position: meshtastic.protobuf.mesh_pb2.Position | None = ...,
- remove_fixed_position: builtins.bool = ...,
- set_time_only: builtins.int = ...,
- get_ui_config_request: builtins.bool = ...,
- get_ui_config_response: meshtastic.protobuf.device_ui_pb2.DeviceUIConfig | None = ...,
- store_ui_config: meshtastic.protobuf.device_ui_pb2.DeviceUIConfig | None = ...,
- set_ignored_node: builtins.int = ...,
- remove_ignored_node: builtins.int = ...,
- begin_edit_settings: builtins.bool = ...,
- commit_edit_settings: builtins.bool = ...,
- add_contact: global___SharedContact | None = ...,
- key_verification: global___KeyVerificationAdmin | None = ...,
- factory_reset_device: builtins.int = ...,
- reboot_ota_seconds: builtins.int = ...,
- exit_simulator: builtins.bool = ...,
- reboot_seconds: builtins.int = ...,
- shutdown_seconds: builtins.int = ...,
- factory_reset_config: builtins.int = ...,
- nodedb_reset: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["add_contact", b"add_contact", "backup_preferences", b"backup_preferences", "begin_edit_settings", b"begin_edit_settings", "commit_edit_settings", b"commit_edit_settings", "delete_file_request", b"delete_file_request", "enter_dfu_mode_request", b"enter_dfu_mode_request", "exit_simulator", b"exit_simulator", "factory_reset_config", b"factory_reset_config", "factory_reset_device", b"factory_reset_device", "get_canned_message_module_messages_request", b"get_canned_message_module_messages_request", "get_canned_message_module_messages_response", b"get_canned_message_module_messages_response", "get_channel_request", b"get_channel_request", "get_channel_response", b"get_channel_response", "get_config_request", b"get_config_request", "get_config_response", b"get_config_response", "get_device_connection_status_request", b"get_device_connection_status_request", "get_device_connection_status_response", b"get_device_connection_status_response", "get_device_metadata_request", b"get_device_metadata_request", "get_device_metadata_response", b"get_device_metadata_response", "get_module_config_request", b"get_module_config_request", "get_module_config_response", b"get_module_config_response", "get_node_remote_hardware_pins_request", b"get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", b"get_node_remote_hardware_pins_response", "get_owner_request", b"get_owner_request", "get_owner_response", b"get_owner_response", "get_ringtone_request", b"get_ringtone_request", "get_ringtone_response", b"get_ringtone_response", "get_ui_config_request", b"get_ui_config_request", "get_ui_config_response", b"get_ui_config_response", "key_verification", b"key_verification", "nodedb_reset", b"nodedb_reset", "payload_variant", b"payload_variant", "reboot_ota_seconds", b"reboot_ota_seconds", "reboot_seconds", b"reboot_seconds", "remove_backup_preferences", b"remove_backup_preferences", "remove_by_nodenum", b"remove_by_nodenum", "remove_favorite_node", b"remove_favorite_node", "remove_fixed_position", b"remove_fixed_position", "remove_ignored_node", b"remove_ignored_node", "restore_preferences", b"restore_preferences", "send_input_event", b"send_input_event", "set_canned_message_module_messages", b"set_canned_message_module_messages", "set_channel", b"set_channel", "set_config", b"set_config", "set_favorite_node", b"set_favorite_node", "set_fixed_position", b"set_fixed_position", "set_ham_mode", b"set_ham_mode", "set_ignored_node", b"set_ignored_node", "set_module_config", b"set_module_config", "set_owner", b"set_owner", "set_ringtone_message", b"set_ringtone_message", "set_scale", b"set_scale", "set_time_only", b"set_time_only", "shutdown_seconds", b"shutdown_seconds", "store_ui_config", b"store_ui_config"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["add_contact", b"add_contact", "backup_preferences", b"backup_preferences", "begin_edit_settings", b"begin_edit_settings", "commit_edit_settings", b"commit_edit_settings", "delete_file_request", b"delete_file_request", "enter_dfu_mode_request", b"enter_dfu_mode_request", "exit_simulator", b"exit_simulator", "factory_reset_config", b"factory_reset_config", "factory_reset_device", b"factory_reset_device", "get_canned_message_module_messages_request", b"get_canned_message_module_messages_request", "get_canned_message_module_messages_response", b"get_canned_message_module_messages_response", "get_channel_request", b"get_channel_request", "get_channel_response", b"get_channel_response", "get_config_request", b"get_config_request", "get_config_response", b"get_config_response", "get_device_connection_status_request", b"get_device_connection_status_request", "get_device_connection_status_response", b"get_device_connection_status_response", "get_device_metadata_request", b"get_device_metadata_request", "get_device_metadata_response", b"get_device_metadata_response", "get_module_config_request", b"get_module_config_request", "get_module_config_response", b"get_module_config_response", "get_node_remote_hardware_pins_request", b"get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", b"get_node_remote_hardware_pins_response", "get_owner_request", b"get_owner_request", "get_owner_response", b"get_owner_response", "get_ringtone_request", b"get_ringtone_request", "get_ringtone_response", b"get_ringtone_response", "get_ui_config_request", b"get_ui_config_request", "get_ui_config_response", b"get_ui_config_response", "key_verification", b"key_verification", "nodedb_reset", b"nodedb_reset", "payload_variant", b"payload_variant", "reboot_ota_seconds", b"reboot_ota_seconds", "reboot_seconds", b"reboot_seconds", "remove_backup_preferences", b"remove_backup_preferences", "remove_by_nodenum", b"remove_by_nodenum", "remove_favorite_node", b"remove_favorite_node", "remove_fixed_position", b"remove_fixed_position", "remove_ignored_node", b"remove_ignored_node", "restore_preferences", b"restore_preferences", "send_input_event", b"send_input_event", "session_passkey", b"session_passkey", "set_canned_message_module_messages", b"set_canned_message_module_messages", "set_channel", b"set_channel", "set_config", b"set_config", "set_favorite_node", b"set_favorite_node", "set_fixed_position", b"set_fixed_position", "set_ham_mode", b"set_ham_mode", "set_ignored_node", b"set_ignored_node", "set_module_config", b"set_module_config", "set_owner", b"set_owner", "set_ringtone_message", b"set_ringtone_message", "set_scale", b"set_scale", "set_time_only", b"set_time_only", "shutdown_seconds", b"shutdown_seconds", "store_ui_config", b"store_ui_config"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["get_channel_request", "get_channel_response", "get_owner_request", "get_owner_response", "get_config_request", "get_config_response", "get_module_config_request", "get_module_config_response", "get_canned_message_module_messages_request", "get_canned_message_module_messages_response", "get_device_metadata_request", "get_device_metadata_response", "get_ringtone_request", "get_ringtone_response", "get_device_connection_status_request", "get_device_connection_status_response", "set_ham_mode", "get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", "enter_dfu_mode_request", "delete_file_request", "set_scale", "backup_preferences", "restore_preferences", "remove_backup_preferences", "send_input_event", "set_owner", "set_channel", "set_config", "set_module_config", "set_canned_message_module_messages", "set_ringtone_message", "remove_by_nodenum", "set_favorite_node", "remove_favorite_node", "set_fixed_position", "remove_fixed_position", "set_time_only", "get_ui_config_request", "get_ui_config_response", "store_ui_config", "set_ignored_node", "remove_ignored_node", "begin_edit_settings", "commit_edit_settings", "add_contact", "key_verification", "factory_reset_device", "reboot_ota_seconds", "exit_simulator", "reboot_seconds", "shutdown_seconds", "factory_reset_config", "nodedb_reset"] | None: ...
-
-global___AdminMessage = AdminMessage
-
-@typing.final
-class HamParameters(google.protobuf.message.Message):
- """
- Parameters for setting up Meshtastic for ameteur radio usage
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CALL_SIGN_FIELD_NUMBER: builtins.int
- TX_POWER_FIELD_NUMBER: builtins.int
- FREQUENCY_FIELD_NUMBER: builtins.int
- SHORT_NAME_FIELD_NUMBER: builtins.int
- call_sign: builtins.str
- """
- Amateur radio call sign, eg. KD2ABC
- """
- tx_power: builtins.int
- """
- Transmit power in dBm at the LoRA transceiver, not including any amplification
- """
- frequency: builtins.float
- """
- The selected frequency of LoRA operation
- Please respect your local laws, regulations, and band plans.
- Ensure your radio is capable of operating of the selected frequency before setting this.
- """
- short_name: builtins.str
- """
- Optional short name of user
- """
- def __init__(
- self,
- *,
- call_sign: builtins.str = ...,
- tx_power: builtins.int = ...,
- frequency: builtins.float = ...,
- short_name: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["call_sign", b"call_sign", "frequency", b"frequency", "short_name", b"short_name", "tx_power", b"tx_power"]) -> None: ...
-
-global___HamParameters = HamParameters
-
-@typing.final
-class NodeRemoteHardwarePinsResponse(google.protobuf.message.Message):
- """
- Response envelope for node_remote_hardware_pins
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: builtins.int
- @property
- def node_remote_hardware_pins(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.protobuf.mesh_pb2.NodeRemoteHardwarePin]:
- """
- Nodes and their respective remote hardware GPIO pins
- """
-
- def __init__(
- self,
- *,
- node_remote_hardware_pins: collections.abc.Iterable[meshtastic.protobuf.mesh_pb2.NodeRemoteHardwarePin] | None = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["node_remote_hardware_pins", b"node_remote_hardware_pins"]) -> None: ...
-
-global___NodeRemoteHardwarePinsResponse = NodeRemoteHardwarePinsResponse
-
-@typing.final
-class SharedContact(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NODE_NUM_FIELD_NUMBER: builtins.int
- USER_FIELD_NUMBER: builtins.int
- SHOULD_IGNORE_FIELD_NUMBER: builtins.int
- MANUALLY_VERIFIED_FIELD_NUMBER: builtins.int
- node_num: builtins.int
- """
- The node number of the contact
- """
- should_ignore: builtins.bool
- """
- Add this contact to the blocked / ignored list
- """
- manually_verified: builtins.bool
- """
- Set the IS_KEY_MANUALLY_VERIFIED bit
- """
- @property
- def user(self) -> meshtastic.protobuf.mesh_pb2.User:
- """
- The User of the contact
- """
-
- def __init__(
- self,
- *,
- node_num: builtins.int = ...,
- user: meshtastic.protobuf.mesh_pb2.User | None = ...,
- should_ignore: builtins.bool = ...,
- manually_verified: builtins.bool = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["user", b"user"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["manually_verified", b"manually_verified", "node_num", b"node_num", "should_ignore", b"should_ignore", "user", b"user"]) -> None: ...
-
-global___SharedContact = SharedContact
-
-@typing.final
-class KeyVerificationAdmin(google.protobuf.message.Message):
- """
- This message is used by a client to initiate or complete a key verification
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _MessageType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _MessageTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[KeyVerificationAdmin._MessageType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- INITIATE_VERIFICATION: KeyVerificationAdmin._MessageType.ValueType # 0
- """
- This is the first stage, where a client initiates
- """
- PROVIDE_SECURITY_NUMBER: KeyVerificationAdmin._MessageType.ValueType # 1
- """
- After the nonce has been returned over the mesh, the client prompts for the security number
- And uses this message to provide it to the node.
- """
- DO_VERIFY: KeyVerificationAdmin._MessageType.ValueType # 2
- """
- Once the user has compared the verification message, this message notifies the node.
- """
- DO_NOT_VERIFY: KeyVerificationAdmin._MessageType.ValueType # 3
- """
- This is the cancel path, can be taken at any point
- """
-
- class MessageType(_MessageType, metaclass=_MessageTypeEnumTypeWrapper):
- """
- Three stages of this request.
- """
-
- INITIATE_VERIFICATION: KeyVerificationAdmin.MessageType.ValueType # 0
- """
- This is the first stage, where a client initiates
- """
- PROVIDE_SECURITY_NUMBER: KeyVerificationAdmin.MessageType.ValueType # 1
- """
- After the nonce has been returned over the mesh, the client prompts for the security number
- And uses this message to provide it to the node.
- """
- DO_VERIFY: KeyVerificationAdmin.MessageType.ValueType # 2
- """
- Once the user has compared the verification message, this message notifies the node.
- """
- DO_NOT_VERIFY: KeyVerificationAdmin.MessageType.ValueType # 3
- """
- This is the cancel path, can be taken at any point
- """
-
- MESSAGE_TYPE_FIELD_NUMBER: builtins.int
- REMOTE_NODENUM_FIELD_NUMBER: builtins.int
- NONCE_FIELD_NUMBER: builtins.int
- SECURITY_NUMBER_FIELD_NUMBER: builtins.int
- message_type: global___KeyVerificationAdmin.MessageType.ValueType
- remote_nodenum: builtins.int
- """
- The nodenum we're requesting
- """
- nonce: builtins.int
- """
- The nonce is used to track the connection
- """
- security_number: builtins.int
- """
- The 4 digit code generated by the remote node, and communicated outside the mesh
- """
- def __init__(
- self,
- *,
- message_type: global___KeyVerificationAdmin.MessageType.ValueType = ...,
- remote_nodenum: builtins.int = ...,
- nonce: builtins.int = ...,
- security_number: builtins.int | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_security_number", b"_security_number", "security_number", b"security_number"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_security_number", b"_security_number", "message_type", b"message_type", "nonce", b"nonce", "remote_nodenum", b"remote_nodenum", "security_number", b"security_number"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["_security_number", b"_security_number"]) -> typing.Literal["security_number"] | None: ...
-
-global___KeyVerificationAdmin = KeyVerificationAdmin
+class OTAMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/apponly_pb2.py b/meshtastic/protobuf/apponly_pb2.py
index 70e04e8..975753e 100644
--- a/meshtastic/protobuf/apponly_pb2.py
+++ b/meshtastic/protobuf/apponly_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/apponly.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -17,12 +17,12 @@ from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!meshtastic/protobuf/apponly.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\"\x81\x01\n\nChannelSet\x12\x36\n\x08settings\x18\x01 \x03(\x0b\x32$.meshtastic.protobuf.ChannelSettings\x12;\n\x0blora_config\x18\x02 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfigBc\n\x14org.meshtastic.protoB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.apponly_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.apponly_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_CHANNELSET']._serialized_start=128
- _globals['_CHANNELSET']._serialized_end=257
+ _CHANNELSET._serialized_start=128
+ _CHANNELSET._serialized_end=257
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/apponly_pb2.pyi b/meshtastic/protobuf/apponly_pb2.pyi
index c8a34bc..9852714 100644
--- a/meshtastic/protobuf/apponly_pb2.pyi
+++ b/meshtastic/protobuf/apponly_pb2.pyi
@@ -1,52 +1,16 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from meshtastic.protobuf import channel_pb2 as _channel_pb2
+from meshtastic.protobuf import config_pb2 as _config_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.internal.containers
-import google.protobuf.message
-import meshtastic.protobuf.channel_pb2
-import meshtastic.protobuf.config_pb2
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class ChannelSet(google.protobuf.message.Message):
- """
- This is the most compact possible representation for a set of channels.
- It includes only one PRIMARY channel (which must be first) and
- any SECONDARY channels.
- No DISABLED channels are included.
- This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- SETTINGS_FIELD_NUMBER: builtins.int
- LORA_CONFIG_FIELD_NUMBER: builtins.int
- @property
- def settings(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.protobuf.channel_pb2.ChannelSettings]:
- """
- Channel list with settings
- """
-
- @property
- def lora_config(self) -> meshtastic.protobuf.config_pb2.Config.LoRaConfig:
- """
- LoRa config
- """
-
- def __init__(
- self,
- *,
- settings: collections.abc.Iterable[meshtastic.protobuf.channel_pb2.ChannelSettings] | None = ...,
- lora_config: meshtastic.protobuf.config_pb2.Config.LoRaConfig | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["lora_config", b"lora_config"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["lora_config", b"lora_config", "settings", b"settings"]) -> None: ...
-
-global___ChannelSet = ChannelSet
+class ChannelSet(_message.Message):
+ __slots__ = ["lora_config", "settings"]
+ LORA_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ lora_config: _config_pb2.Config.LoRaConfig
+ settings: _containers.RepeatedCompositeFieldContainer[_channel_pb2.ChannelSettings]
+ def __init__(self, settings: _Optional[_Iterable[_Union[_channel_pb2.ChannelSettings, _Mapping]]] = ..., lora_config: _Optional[_Union[_config_pb2.Config.LoRaConfig, _Mapping]] = ...) -> None: ...
diff --git a/meshtastic/protobuf/atak_pb2.py b/meshtastic/protobuf/atak_pb2.py
index b0fee1a..841f2c4 100644
--- a/meshtastic/protobuf/atak_pb2.py
+++ b/meshtastic/protobuf/atak_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/atak.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -13,28 +13,92 @@ _sym_db = _symbol_database.Default()
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/atak.proto\x12\x13meshtastic.protobuf\"\xa5\x02\n\tTAKPacket\x12\x15\n\ris_compressed\x18\x01 \x01(\x08\x12-\n\x07\x63ontact\x18\x02 \x01(\x0b\x32\x1c.meshtastic.protobuf.Contact\x12)\n\x05group\x18\x03 \x01(\x0b\x32\x1a.meshtastic.protobuf.Group\x12+\n\x06status\x18\x04 \x01(\x0b\x32\x1b.meshtastic.protobuf.Status\x12\'\n\x03pli\x18\x05 \x01(\x0b\x32\x18.meshtastic.protobuf.PLIH\x00\x12,\n\x04\x63hat\x18\x06 \x01(\x0b\x32\x1c.meshtastic.protobuf.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\"_\n\x05Group\x12-\n\x04role\x18\x01 \x01(\x0e\x32\x1f.meshtastic.protobuf.MemberRole\x12\'\n\x04team\x18\x02 \x01(\x0e\x32\x19.meshtastic.protobuf.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')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/atak.proto\x12\x13meshtastic.protobuf\"\xa5\x02\n\tTAKPacket\x12\x15\n\ris_compressed\x18\x01 \x01(\x08\x12-\n\x07\x63ontact\x18\x02 \x01(\x0b\x32\x1c.meshtastic.protobuf.Contact\x12)\n\x05group\x18\x03 \x01(\x0b\x32\x1a.meshtastic.protobuf.Group\x12+\n\x06status\x18\x04 \x01(\x0b\x32\x1b.meshtastic.protobuf.Status\x12\'\n\x03pli\x18\x05 \x01(\x0b\x32\x18.meshtastic.protobuf.PLIH\x00\x12,\n\x04\x63hat\x18\x06 \x01(\x0b\x32\x1c.meshtastic.protobuf.GeoChatH\x00\x12\x10\n\x06\x64\x65tail\x18\x07 \x01(\x0cH\x00\x42\x11\n\x0fpayload_variant\"\xfd\x02\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\x12\x17\n\x0freceipt_for_uid\x18\x04 \x01(\t\x12>\n\x0creceipt_type\x18\x05 \x01(\x0e\x32(.meshtastic.protobuf.GeoChat.ReceiptType\x12\x11\n\x04lang\x18\x06 \x01(\tH\x02\x88\x01\x01\x12\x14\n\x07room_id\x18\x07 \x01(\tH\x03\x88\x01\x01\x12\x1d\n\x10voice_profile_id\x18\x08 \x01(\tH\x04\x88\x01\x01\"T\n\x0bReceiptType\x12\x14\n\x10ReceiptType_None\x10\x00\x12\x19\n\x15ReceiptType_Delivered\x10\x01\x12\x14\n\x10ReceiptType_Read\x10\x02\x42\x05\n\x03_toB\x0e\n\x0c_to_callsignB\x07\n\x05_langB\n\n\x08_room_idB\x13\n\x11_voice_profile_id\"_\n\x05Group\x12-\n\x04role\x18\x01 \x01(\x0e\x32\x1f.meshtastic.protobuf.MemberRole\x12\'\n\x04team\x18\x02 \x01(\x0e\x32\x19.meshtastic.protobuf.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\"\xb0\x01\n\rAircraftTrack\x12\x0c\n\x04icao\x18\x01 \x01(\t\x12\x14\n\x0cregistration\x18\x02 \x01(\t\x12\x0e\n\x06\x66light\x18\x03 \x01(\t\x12\x15\n\raircraft_type\x18\x04 \x01(\t\x12\x0e\n\x06squawk\x18\x05 \x01(\r\x12\x10\n\x08\x63\x61tegory\x18\x06 \x01(\t\x12\x10\n\x08rssi_x10\x18\x07 \x01(\x11\x12\x0b\n\x03gps\x18\x08 \x01(\x08\x12\x13\n\x0b\x63ot_host_id\x18\t \x01(\t\"7\n\x0b\x43otGeoPoint\x12\x13\n\x0blat_delta_i\x18\x01 \x01(\x11\x12\x13\n\x0blon_delta_i\x18\x02 \x01(\x11\"\xf8\x06\n\nDrawnShape\x12\x32\n\x04kind\x18\x01 \x01(\x0e\x32$.meshtastic.protobuf.DrawnShape.Kind\x12\x38\n\x05style\x18\x02 \x01(\x0e\x32).meshtastic.protobuf.DrawnShape.StyleMode\x12\x10\n\x08major_cm\x18\x03 \x01(\r\x12\x10\n\x08minor_cm\x18\x04 \x01(\r\x12\x11\n\tangle_deg\x18\x05 \x01(\r\x12/\n\x0cstroke_color\x18\x06 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x13\n\x0bstroke_argb\x18\x07 \x01(\x07\x12\x19\n\x11stroke_weight_x10\x18\x08 \x01(\r\x12-\n\nfill_color\x18\t \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x11\n\tfill_argb\x18\n \x01(\x07\x12\x11\n\tlabels_on\x18\x0b \x01(\x08\x12\x32\n\x08vertices\x18\x0c \x03(\x0b\x32 .meshtastic.protobuf.CotGeoPoint\x12\x11\n\ttruncated\x18\r \x01(\x08\x12\x1c\n\x14\x62ullseye_distance_dm\x18\x0e \x01(\r\x12\x1c\n\x14\x62ullseye_bearing_ref\x18\x0f \x01(\r\x12\x16\n\x0e\x62ullseye_flags\x18\x10 \x01(\r\x12\x18\n\x10\x62ullseye_uid_ref\x18\x11 \x01(\t\"\xe2\x01\n\x04Kind\x12\x14\n\x10Kind_Unspecified\x10\x00\x12\x0f\n\x0bKind_Circle\x10\x01\x12\x12\n\x0eKind_Rectangle\x10\x02\x12\x11\n\rKind_Freeform\x10\x03\x12\x15\n\x11Kind_Telestration\x10\x04\x12\x10\n\x0cKind_Polygon\x10\x05\x12\x16\n\x12Kind_RangingCircle\x10\x06\x12\x11\n\rKind_Bullseye\x10\x07\x12\x10\n\x0cKind_Ellipse\x10\x08\x12\x12\n\x0eKind_Vehicle2D\x10\t\x12\x12\n\x0eKind_Vehicle3D\x10\n\"u\n\tStyleMode\x12\x19\n\x15StyleMode_Unspecified\x10\x00\x12\x18\n\x14StyleMode_StrokeOnly\x10\x01\x12\x16\n\x12StyleMode_FillOnly\x10\x02\x12\x1b\n\x17StyleMode_StrokeAndFill\x10\x03\"\xf7\x03\n\x06Marker\x12.\n\x04kind\x18\x01 \x01(\x0e\x32 .meshtastic.protobuf.Marker.Kind\x12(\n\x05\x63olor\x18\x02 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x12\n\ncolor_argb\x18\x03 \x01(\x07\x12\x11\n\treadiness\x18\x04 \x01(\x08\x12\x12\n\nparent_uid\x18\x05 \x01(\t\x12\x13\n\x0bparent_type\x18\x06 \x01(\t\x12\x17\n\x0fparent_callsign\x18\x07 \x01(\t\x12\x0f\n\x07iconset\x18\x08 \x01(\t\"\x98\x02\n\x04Kind\x12\x14\n\x10Kind_Unspecified\x10\x00\x12\r\n\tKind_Spot\x10\x01\x12\x11\n\rKind_Waypoint\x10\x02\x12\x13\n\x0fKind_Checkpoint\x10\x03\x12\x15\n\x11Kind_SelfPosition\x10\x04\x12\x13\n\x0fKind_Symbol2525\x10\x05\x12\x10\n\x0cKind_SpotMap\x10\x06\x12\x13\n\x0fKind_CustomIcon\x10\x07\x12\x12\n\x0eKind_GoToPoint\x10\x08\x12\x15\n\x11Kind_InitialPoint\x10\t\x12\x15\n\x11Kind_ContactPoint\x10\n\x12\x18\n\x14Kind_ObservationPost\x10\x0b\x12\x14\n\x10Kind_ImageMarker\x10\x0c\"\xe0\x01\n\x0fRangeAndBearing\x12\x30\n\x06\x61nchor\x18\x01 \x01(\x0b\x32 .meshtastic.protobuf.CotGeoPoint\x12\x12\n\nanchor_uid\x18\x02 \x01(\t\x12\x10\n\x08range_cm\x18\x03 \x01(\r\x12\x14\n\x0c\x62\x65\x61ring_cdeg\x18\x04 \x01(\r\x12/\n\x0cstroke_color\x18\x05 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12\x13\n\x0bstroke_argb\x18\x06 \x01(\x07\x12\x19\n\x11stroke_weight_x10\x18\x07 \x01(\r\"\xa8\x04\n\x05Route\x12\x31\n\x06method\x18\x01 \x01(\x0e\x32!.meshtastic.protobuf.Route.Method\x12\x37\n\tdirection\x18\x02 \x01(\x0e\x32$.meshtastic.protobuf.Route.Direction\x12\x0e\n\x06prefix\x18\x03 \x01(\t\x12\x19\n\x11stroke_weight_x10\x18\x04 \x01(\r\x12.\n\x05links\x18\x05 \x03(\x0b\x32\x1f.meshtastic.protobuf.Route.Link\x12\x11\n\ttruncated\x18\x06 \x01(\x08\x1ai\n\x04Link\x12/\n\x05point\x18\x01 \x01(\x0b\x32 .meshtastic.protobuf.CotGeoPoint\x12\x0b\n\x03uid\x18\x02 \x01(\t\x12\x10\n\x08\x63\x61llsign\x18\x03 \x01(\t\x12\x11\n\tlink_type\x18\x04 \x01(\r\"\x87\x01\n\x06Method\x12\x16\n\x12Method_Unspecified\x10\x00\x12\x12\n\x0eMethod_Driving\x10\x01\x12\x12\n\x0eMethod_Walking\x10\x02\x12\x11\n\rMethod_Flying\x10\x03\x12\x13\n\x0fMethod_Swimming\x10\x04\x12\x15\n\x11Method_Watercraft\x10\x05\"P\n\tDirection\x12\x19\n\x15\x44irection_Unspecified\x10\x00\x12\x13\n\x0f\x44irection_Infil\x10\x01\x12\x13\n\x0f\x44irection_Exfil\x10\x02\"\xfa\n\n\rCasevacReport\x12\x41\n\nprecedence\x18\x01 \x01(\x0e\x32-.meshtastic.protobuf.CasevacReport.Precedence\x12\x17\n\x0f\x65quipment_flags\x18\x02 \x01(\r\x12\x17\n\x0flitter_patients\x18\x03 \x01(\r\x12\x1b\n\x13\x61mbulatory_patients\x18\x04 \x01(\r\x12=\n\x08security\x18\x05 \x01(\x0e\x32+.meshtastic.protobuf.CasevacReport.Security\x12\x42\n\x0bhlz_marking\x18\x06 \x01(\x0e\x32-.meshtastic.protobuf.CasevacReport.HlzMarking\x12\x13\n\x0bzone_marker\x18\x07 \x01(\t\x12\x13\n\x0bus_military\x18\x08 \x01(\r\x12\x13\n\x0bus_civilian\x18\t \x01(\r\x12\x17\n\x0fnon_us_military\x18\n \x01(\r\x12\x17\n\x0fnon_us_civilian\x18\x0b \x01(\r\x12\x0b\n\x03\x65pw\x18\x0c \x01(\r\x12\r\n\x05\x63hild\x18\r \x01(\r\x12\x15\n\rterrain_flags\x18\x0e \x01(\r\x12\x11\n\tfrequency\x18\x0f \x01(\t\x12\r\n\x05title\x18\x10 \x01(\t\x12\x17\n\x0fmedline_remarks\x18\x11 \x01(\t\x12\x14\n\x0curgent_count\x18\x12 \x01(\r\x12\x1d\n\x15urgent_surgical_count\x18\x13 \x01(\r\x12\x16\n\x0epriority_count\x18\x14 \x01(\r\x12\x15\n\rroutine_count\x18\x15 \x01(\r\x12\x19\n\x11\x63onvenience_count\x18\x16 \x01(\r\x12\x18\n\x10\x65quipment_detail\x18\x17 \x01(\t\x12\x1c\n\x14zone_protected_coord\x18\x18 \x01(\t\x12\x19\n\x11terrain_slope_dir\x18\x19 \x01(\t\x12\x1c\n\x14terrain_other_detail\x18\x1a \x01(\t\x12\x11\n\tmarked_by\x18\x1b \x01(\t\x12\x11\n\tobstacles\x18\x1c \x01(\t\x12\x16\n\x0ewinds_are_from\x18\x1d \x01(\t\x12\x12\n\nfriendlies\x18\x1e \x01(\t\x12\r\n\x05\x65nemy\x18\x1f \x01(\t\x12\x13\n\x0bhlz_remarks\x18 \x01(\t\x12.\n\x05zmist\x18! \x03(\x0b\x32\x1f.meshtastic.protobuf.ZMistEntry\"\xab\x01\n\nPrecedence\x12\x1a\n\x16Precedence_Unspecified\x10\x00\x12\x15\n\x11Precedence_Urgent\x10\x01\x12\x1d\n\x19Precedence_UrgentSurgical\x10\x02\x12\x17\n\x13Precedence_Priority\x10\x03\x12\x16\n\x12Precedence_Routine\x10\x04\x12\x1a\n\x16Precedence_Convenience\x10\x05\"\x9b\x01\n\nHlzMarking\x12\x1a\n\x16HlzMarking_Unspecified\x10\x00\x12\x15\n\x11HlzMarking_Panels\x10\x01\x12\x19\n\x15HlzMarking_PyroSignal\x10\x02\x12\x14\n\x10HlzMarking_Smoke\x10\x03\x12\x13\n\x0fHlzMarking_None\x10\x04\x12\x14\n\x10HlzMarking_Other\x10\x05\"\x92\x01\n\x08Security\x12\x18\n\x14Security_Unspecified\x10\x00\x12\x14\n\x10Security_NoEnemy\x10\x01\x12\x1a\n\x16Security_PossibleEnemy\x10\x02\x12\x18\n\x14Security_EnemyInArea\x10\x03\x12 \n\x1cSecurity_EnemyInArmedContact\x10\x04\"R\n\nZMistEntry\x12\r\n\x05title\x18\x01 \x01(\t\x12\t\n\x01z\x18\x02 \x01(\t\x12\t\n\x01m\x18\x03 \x01(\t\x12\t\n\x01i\x18\x04 \x01(\t\x12\t\n\x01s\x18\x05 \x01(\t\x12\t\n\x01t\x18\x06 \x01(\t\"\x96\x02\n\x0e\x45mergencyAlert\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.meshtastic.protobuf.EmergencyAlert.Type\x12\x15\n\rauthoring_uid\x18\x02 \x01(\t\x12\x1c\n\x14\x63\x61ncel_reference_uid\x18\x03 \x01(\t\"\x96\x01\n\x04Type\x12\x14\n\x10Type_Unspecified\x10\x00\x12\x11\n\rType_Alert911\x10\x01\x12\x14\n\x10Type_RingTheBell\x10\x02\x12\x12\n\x0eType_InContact\x10\x03\x12\x19\n\x15Type_GeoFenceBreached\x10\x04\x12\x0f\n\x0bType_Custom\x10\x05\x12\x0f\n\x0bType_Cancel\x10\x06\"\xd8\x03\n\x0bTaskRequest\x12\x11\n\ttask_type\x18\x01 \x01(\t\x12\x12\n\ntarget_uid\x18\x02 \x01(\t\x12\x14\n\x0c\x61ssignee_uid\x18\x03 \x01(\t\x12;\n\x08priority\x18\x04 \x01(\x0e\x32).meshtastic.protobuf.TaskRequest.Priority\x12\x37\n\x06status\x18\x05 \x01(\x0e\x32\'.meshtastic.protobuf.TaskRequest.Status\x12\x0c\n\x04note\x18\x06 \x01(\t\"u\n\x08Priority\x12\x18\n\x14Priority_Unspecified\x10\x00\x12\x10\n\x0cPriority_Low\x10\x01\x12\x13\n\x0fPriority_Normal\x10\x02\x12\x11\n\rPriority_High\x10\x03\x12\x15\n\x11Priority_Critical\x10\x04\"\x90\x01\n\x06Status\x12\x16\n\x12Status_Unspecified\x10\x00\x12\x12\n\x0eStatus_Pending\x10\x01\x12\x17\n\x13Status_Acknowledged\x10\x02\x12\x15\n\x11Status_InProgress\x10\x03\x12\x14\n\x10Status_Completed\x10\x04\x12\x14\n\x10Status_Cancelled\x10\x05\"`\n\x0eTAKEnvironment\x12\x19\n\x11temperature_c_x10\x18\x01 \x01(\x11\x12\x1a\n\x12wind_direction_deg\x18\x02 \x01(\r\x12\x17\n\x0fwind_speed_cm_s\x18\x03 \x01(\r\"\x96\x03\n\tSensorFov\x12\x37\n\x04type\x18\x01 \x01(\x0e\x32).meshtastic.protobuf.SensorFov.SensorType\x12\x13\n\x0b\x61zimuth_deg\x18\x02 \x01(\r\x12\x14\n\x07range_m\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\x12\x66ov_horizontal_deg\x18\x04 \x01(\r\x12\x18\n\x10\x66ov_vertical_deg\x18\x05 \x01(\r\x12\x15\n\relevation_deg\x18\x06 \x01(\x11\x12\x10\n\x08roll_deg\x18\x07 \x01(\x11\x12\r\n\x05model\x18\x08 \x01(\t\"\xaa\x01\n\nSensorType\x12\x1a\n\x16SensorType_Unspecified\x10\x00\x12\x15\n\x11SensorType_Camera\x10\x01\x12\x16\n\x12SensorType_Thermal\x10\x02\x12\x14\n\x10SensorType_Laser\x10\x03\x12\x12\n\x0eSensorType_Nvg\x10\x04\x12\x11\n\rSensorType_Rf\x10\x05\x12\x14\n\x10SensorType_Other\x10\x06\x42\n\n\x08_range_m\"U\n\x0eTakTalkMessage\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x13\n\x0b\x63hatroom_id\x18\x02 \x01(\t\x12\x0c\n\x04lang\x18\x03 \x01(\t\x12\x12\n\nfrom_voice\x18\x04 \x01(\x08\"d\n\x0fTakTalkRoomData\x12\x17\n\x0fsender_callsign\x18\x01 \x01(\t\x12\x0f\n\x07room_id\x18\x02 \x01(\t\x12\x11\n\troom_name\x18\x03 \x01(\t\x12\x14\n\x0cparticipants\x18\x04 \x03(\t\"\xa2\x0b\n\x0bTAKPacketV2\x12\x31\n\x0b\x63ot_type_id\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.CotType\x12(\n\x03how\x18\x02 \x01(\x0e\x32\x1b.meshtastic.protobuf.CotHow\x12\x10\n\x08\x63\x61llsign\x18\x03 \x01(\t\x12\'\n\x04team\x18\x04 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12-\n\x04role\x18\x05 \x01(\x0e\x32\x1f.meshtastic.protobuf.MemberRole\x12\x12\n\nlatitude_i\x18\x06 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x07 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x08 \x01(\x11\x12\r\n\x05speed\x18\t \x01(\r\x12\x0e\n\x06\x63ourse\x18\n \x01(\r\x12\x0f\n\x07\x62\x61ttery\x18\x0b \x01(\r\x12\x34\n\x07geo_src\x18\x0c \x01(\x0e\x32#.meshtastic.protobuf.GeoPointSource\x12\x34\n\x07\x61lt_src\x18\r \x01(\x0e\x32#.meshtastic.protobuf.GeoPointSource\x12\x0b\n\x03uid\x18\x0e \x01(\t\x12\x17\n\x0f\x64\x65vice_callsign\x18\x0f \x01(\t\x12\x15\n\rstale_seconds\x18\x10 \x01(\r\x12\x13\n\x0btak_version\x18\x11 \x01(\t\x12\x12\n\ntak_device\x18\x12 \x01(\t\x12\x14\n\x0ctak_platform\x18\x13 \x01(\t\x12\x0e\n\x06tak_os\x18\x14 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x15 \x01(\t\x12\r\n\x05phone\x18\x16 \x01(\t\x12\x14\n\x0c\x63ot_type_str\x18\x17 \x01(\t\x12\x0f\n\x07remarks\x18\x18 \x01(\t\x12=\n\x0b\x65nvironment\x18\x19 \x01(\x0b\x32#.meshtastic.protobuf.TAKEnvironmentH\x01\x88\x01\x01\x12\x37\n\nsensor_fov\x18\x1a \x01(\x0b\x32\x1e.meshtastic.protobuf.SensorFovH\x02\x88\x01\x01\x12\r\n\x03pli\x18\x1e \x01(\x08H\x00\x12,\n\x04\x63hat\x18\x1f \x01(\x0b\x32\x1c.meshtastic.protobuf.GeoChatH\x00\x12\x36\n\x08\x61ircraft\x18 \x01(\x0b\x32\".meshtastic.protobuf.AircraftTrackH\x00\x12\x14\n\nraw_detail\x18! \x01(\x0cH\x00\x12\x30\n\x05shape\x18\" \x01(\x0b\x32\x1f.meshtastic.protobuf.DrawnShapeH\x00\x12-\n\x06marker\x18# \x01(\x0b\x32\x1b.meshtastic.protobuf.MarkerH\x00\x12\x33\n\x03rab\x18$ \x01(\x0b\x32$.meshtastic.protobuf.RangeAndBearingH\x00\x12+\n\x05route\x18% \x01(\x0b\x32\x1a.meshtastic.protobuf.RouteH\x00\x12\x35\n\x07\x63\x61sevac\x18& \x01(\x0b\x32\".meshtastic.protobuf.CasevacReportH\x00\x12\x38\n\temergency\x18\' \x01(\x0b\x32#.meshtastic.protobuf.EmergencyAlertH\x00\x12\x30\n\x04task\x18( \x01(\x0b\x32 .meshtastic.protobuf.TaskRequestH\x00\x12\x36\n\x07taktalk\x18) \x01(\x0b\x32#.meshtastic.protobuf.TakTalkMessageH\x00\x12<\n\x0ctaktalk_room\x18* \x01(\x0b\x32$.meshtastic.protobuf.TakTalkRoomDataH\x00\x42\x11\n\x0fpayload_variantB\x0e\n\x0c_environmentB\r\n\x0b_sensor_fovJ\x04\x08\x1b\x10\x1cJ\x04\x08\x1c\x10\x1dJ\x04\x08\x1d\x10\x1e*\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*\x96\x01\n\x06\x43otHow\x12\x16\n\x12\x43otHow_Unspecified\x10\x00\x12\x0e\n\nCotHow_h_e\x10\x01\x12\x0e\n\nCotHow_m_g\x10\x02\x12\x14\n\x10\x43otHow_h_g_i_g_o\x10\x03\x12\x0e\n\nCotHow_m_r\x10\x04\x12\x0e\n\nCotHow_m_f\x10\x05\x12\x0e\n\nCotHow_m_p\x10\x06\x12\x0e\n\nCotHow_m_s\x10\x07*\x83\x17\n\x07\x43otType\x12\x11\n\rCotType_Other\x10\x00\x12\x15\n\x11\x43otType_a_f_G_U_C\x10\x01\x12\x17\n\x13\x43otType_a_f_G_U_C_I\x10\x02\x12\x15\n\x11\x43otType_a_n_A_C_F\x10\x03\x12\x15\n\x11\x43otType_a_n_A_C_H\x10\x04\x12\x13\n\x0f\x43otType_a_n_A_C\x10\x05\x12\x15\n\x11\x43otType_a_f_A_M_H\x10\x06\x12\x13\n\x0f\x43otType_a_f_A_M\x10\x07\x12\x17\n\x13\x43otType_a_f_A_M_F_F\x10\x08\x12\x17\n\x13\x43otType_a_f_A_M_H_A\x10\t\x12\x19\n\x15\x43otType_a_f_A_M_H_U_M\x10\n\x12\x17\n\x13\x43otType_a_h_A_M_F_F\x10\x0b\x12\x17\n\x13\x43otType_a_h_A_M_H_A\x10\x0c\x12\x13\n\x0f\x43otType_a_u_A_C\x10\r\x12\x13\n\x0f\x43otType_t_x_d_d\x10\x0e\x12\x17\n\x13\x43otType_a_f_G_E_S_E\x10\x0f\x12\x17\n\x13\x43otType_a_f_G_E_V_C\x10\x10\x12\x11\n\rCotType_a_f_S\x10\x11\x12\x15\n\x11\x43otType_a_f_A_M_F\x10\x12\x12\x19\n\x15\x43otType_a_f_A_M_F_C_H\x10\x13\x12\x19\n\x15\x43otType_a_f_A_M_F_U_L\x10\x14\x12\x17\n\x13\x43otType_a_f_A_M_F_L\x10\x15\x12\x17\n\x13\x43otType_a_f_A_M_F_P\x10\x16\x12\x15\n\x11\x43otType_a_f_A_C_H\x10\x17\x12\x17\n\x13\x43otType_a_n_A_M_F_Q\x10\x18\x12\x11\n\rCotType_b_t_f\x10\x19\x12\x15\n\x11\x43otType_b_r_f_h_c\x10\x1a\x12\x15\n\x11\x43otType_b_a_o_pan\x10\x1b\x12\x15\n\x11\x43otType_b_a_o_opn\x10\x1c\x12\x15\n\x11\x43otType_b_a_o_can\x10\x1d\x12\x15\n\x11\x43otType_b_a_o_tbl\x10\x1e\x12\x11\n\rCotType_b_a_g\x10\x1f\x12\x11\n\rCotType_a_f_G\x10 \x12\x13\n\x0f\x43otType_a_f_G_U\x10!\x12\x11\n\rCotType_a_h_G\x10\"\x12\x11\n\rCotType_a_u_G\x10#\x12\x11\n\rCotType_a_n_G\x10$\x12\x11\n\rCotType_b_m_r\x10%\x12\x13\n\x0f\x43otType_b_m_p_w\x10&\x12\x17\n\x13\x43otType_b_m_p_s_p_i\x10\'\x12\x11\n\rCotType_u_d_f\x10(\x12\x11\n\rCotType_u_d_r\x10)\x12\x13\n\x0f\x43otType_u_d_c_c\x10*\x12\x12\n\x0e\x43otType_u_rb_a\x10+\x12\x11\n\rCotType_a_h_A\x10,\x12\x11\n\rCotType_a_u_A\x10-\x12\x17\n\x13\x43otType_a_f_A_M_H_Q\x10.\x12\x15\n\x11\x43otType_a_f_A_C_F\x10/\x12\x13\n\x0f\x43otType_a_f_A_C\x10\x30\x12\x15\n\x11\x43otType_a_f_A_C_L\x10\x31\x12\x11\n\rCotType_a_f_A\x10\x32\x12\x17\n\x13\x43otType_a_f_A_M_H_C\x10\x33\x12\x17\n\x13\x43otType_a_n_A_M_F_F\x10\x34\x12\x15\n\x11\x43otType_a_u_A_C_F\x10\x35\x12\x1b\n\x17\x43otType_a_f_G_U_C_F_T_A\x10\x36\x12\x19\n\x15\x43otType_a_f_G_U_C_V_S\x10\x37\x12\x19\n\x15\x43otType_a_f_G_U_C_R_X\x10\x38\x12\x19\n\x15\x43otType_a_f_G_U_C_I_Z\x10\x39\x12\x1b\n\x17\x43otType_a_f_G_U_C_E_C_W\x10:\x12\x19\n\x15\x43otType_a_f_G_U_C_I_L\x10;\x12\x19\n\x15\x43otType_a_f_G_U_C_R_O\x10<\x12\x19\n\x15\x43otType_a_f_G_U_C_R_V\x10=\x12\x15\n\x11\x43otType_a_f_G_U_H\x10>\x12\x1b\n\x17\x43otType_a_f_G_U_U_M_S_E\x10?\x12\x19\n\x15\x43otType_a_f_G_U_S_M_C\x10@\x12\x15\n\x11\x43otType_a_f_G_E_S\x10\x41\x12\x13\n\x0f\x43otType_a_f_G_E\x10\x42\x12\x19\n\x15\x43otType_a_f_G_E_V_C_U\x10\x43\x12\x1a\n\x16\x43otType_a_f_G_E_V_C_ps\x10\x44\x12\x15\n\x11\x43otType_a_u_G_E_V\x10\x45\x12\x17\n\x13\x43otType_a_f_S_N_N_R\x10\x46\x12\x13\n\x0f\x43otType_a_f_F_B\x10G\x12\x19\n\x15\x43otType_b_m_p_s_p_loc\x10H\x12\x11\n\rCotType_b_i_v\x10I\x12\x13\n\x0f\x43otType_b_f_t_r\x10J\x12\x13\n\x0f\x43otType_b_f_t_a\x10K\x12\x13\n\x0f\x43otType_u_d_f_m\x10L\x12\x11\n\rCotType_u_d_p\x10M\x12\x15\n\x11\x43otType_b_m_p_s_m\x10N\x12\x13\n\x0f\x43otType_b_m_p_c\x10O\x12\x15\n\x11\x43otType_u_r_b_c_c\x10P\x12\x1a\n\x16\x43otType_u_r_b_bullseye\x10Q\x12\x17\n\x13\x43otType_a_f_G_E_V_A\x10R\x12\x11\n\rCotType_a_n_A\x10S\x12\x17\n\x13\x43otType_a_u_G_U_C_F\x10T\x12\x17\n\x13\x43otType_a_n_G_U_C_F\x10U\x12\x17\n\x13\x43otType_a_h_G_U_C_F\x10V\x12\x17\n\x13\x43otType_a_f_G_U_C_F\x10W\x12\x13\n\x0f\x43otType_a_u_G_I\x10X\x12\x13\n\x0f\x43otType_a_n_G_I\x10Y\x12\x13\n\x0f\x43otType_a_h_G_I\x10Z\x12\x13\n\x0f\x43otType_a_f_G_I\x10[\x12\x17\n\x13\x43otType_a_u_G_E_X_M\x10\\\x12\x17\n\x13\x43otType_a_n_G_E_X_M\x10]\x12\x17\n\x13\x43otType_a_h_G_E_X_M\x10^\x12\x17\n\x13\x43otType_a_f_G_E_X_M\x10_\x12\x11\n\rCotType_a_u_S\x10`\x12\x11\n\rCotType_a_n_S\x10\x61\x12\x11\n\rCotType_a_h_S\x10\x62\x12\x19\n\x15\x43otType_a_u_G_U_C_I_d\x10\x63\x12\x19\n\x15\x43otType_a_n_G_U_C_I_d\x10\x64\x12\x19\n\x15\x43otType_a_h_G_U_C_I_d\x10\x65\x12\x19\n\x15\x43otType_a_f_G_U_C_I_d\x10\x66\x12\x19\n\x15\x43otType_a_u_G_E_V_A_T\x10g\x12\x19\n\x15\x43otType_a_n_G_E_V_A_T\x10h\x12\x19\n\x15\x43otType_a_h_G_E_V_A_T\x10i\x12\x19\n\x15\x43otType_a_f_G_E_V_A_T\x10j\x12\x17\n\x13\x43otType_a_u_G_U_C_I\x10k\x12\x17\n\x13\x43otType_a_n_G_U_C_I\x10l\x12\x17\n\x13\x43otType_a_h_G_U_C_I\x10m\x12\x15\n\x11\x43otType_a_n_G_E_V\x10n\x12\x15\n\x11\x43otType_a_h_G_E_V\x10o\x12\x15\n\x11\x43otType_a_f_G_E_V\x10p\x12\x18\n\x14\x43otType_b_m_p_w_GOTO\x10q\x12\x16\n\x12\x43otType_b_m_p_c_ip\x10r\x12\x16\n\x12\x43otType_b_m_p_c_cp\x10s\x12\x18\n\x14\x43otType_b_m_p_s_p_op\x10t\x12\x11\n\rCotType_u_d_v\x10u\x12\x13\n\x0f\x43otType_u_d_v_m\x10v\x12\x13\n\x0f\x43otType_u_d_c_e\x10w\x12\x13\n\x0f\x43otType_b_i_x_i\x10x\x12\x13\n\x0f\x43otType_b_t_f_d\x10y\x12\x13\n\x0f\x43otType_b_t_f_r\x10z\x12\x13\n\x0f\x43otType_b_a_o_c\x10{\x12\x0f\n\x0b\x43otType_t_s\x10|\x12\x11\n\rCotType_m_t_t\x10}\x12\r\n\tCotType_y\x10~*}\n\x0eGeoPointSource\x12\x1e\n\x1aGeoPointSource_Unspecified\x10\x00\x12\x16\n\x12GeoPointSource_GPS\x10\x01\x12\x17\n\x13GeoPointSource_USER\x10\x02\x12\x1a\n\x16GeoPointSource_NETWORK\x10\x03\x42`\n\x14org.meshtastic.protoB\nATAKProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.atak_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.atak_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nATAKProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_TEAM']._serialized_start=721
- _globals['_TEAM']._serialized_end=913
- _globals['_MEMBERROLE']._serialized_start=915
- _globals['_MEMBERROLE']._serialized_end=1042
- _globals['_TAKPACKET']._serialized_start=56
- _globals['_TAKPACKET']._serialized_end=349
- _globals['_GEOCHAT']._serialized_start=351
- _globals['_GEOCHAT']._serialized_end=443
- _globals['_GROUP']._serialized_start=445
- _globals['_GROUP']._serialized_end=540
- _globals['_STATUS']._serialized_start=542
- _globals['_STATUS']._serialized_end=567
- _globals['_CONTACT']._serialized_start=569
- _globals['_CONTACT']._serialized_end=621
- _globals['_PLI']._serialized_start=623
- _globals['_PLI']._serialized_end=718
+ _TEAM._serialized_start=7812
+ _TEAM._serialized_end=8004
+ _MEMBERROLE._serialized_start=8006
+ _MEMBERROLE._serialized_end=8133
+ _COTHOW._serialized_start=8136
+ _COTHOW._serialized_end=8286
+ _COTTYPE._serialized_start=8289
+ _COTTYPE._serialized_end=11236
+ _GEOPOINTSOURCE._serialized_start=11238
+ _GEOPOINTSOURCE._serialized_end=11363
+ _TAKPACKET._serialized_start=56
+ _TAKPACKET._serialized_end=349
+ _GEOCHAT._serialized_start=352
+ _GEOCHAT._serialized_end=733
+ _GEOCHAT_RECEIPTTYPE._serialized_start=584
+ _GEOCHAT_RECEIPTTYPE._serialized_end=668
+ _GROUP._serialized_start=735
+ _GROUP._serialized_end=830
+ _STATUS._serialized_start=832
+ _STATUS._serialized_end=857
+ _CONTACT._serialized_start=859
+ _CONTACT._serialized_end=911
+ _PLI._serialized_start=913
+ _PLI._serialized_end=1008
+ _AIRCRAFTTRACK._serialized_start=1011
+ _AIRCRAFTTRACK._serialized_end=1187
+ _COTGEOPOINT._serialized_start=1189
+ _COTGEOPOINT._serialized_end=1244
+ _DRAWNSHAPE._serialized_start=1247
+ _DRAWNSHAPE._serialized_end=2135
+ _DRAWNSHAPE_KIND._serialized_start=1790
+ _DRAWNSHAPE_KIND._serialized_end=2016
+ _DRAWNSHAPE_STYLEMODE._serialized_start=2018
+ _DRAWNSHAPE_STYLEMODE._serialized_end=2135
+ _MARKER._serialized_start=2138
+ _MARKER._serialized_end=2641
+ _MARKER_KIND._serialized_start=2361
+ _MARKER_KIND._serialized_end=2641
+ _RANGEANDBEARING._serialized_start=2644
+ _RANGEANDBEARING._serialized_end=2868
+ _ROUTE._serialized_start=2871
+ _ROUTE._serialized_end=3423
+ _ROUTE_LINK._serialized_start=3098
+ _ROUTE_LINK._serialized_end=3203
+ _ROUTE_METHOD._serialized_start=3206
+ _ROUTE_METHOD._serialized_end=3341
+ _ROUTE_DIRECTION._serialized_start=3343
+ _ROUTE_DIRECTION._serialized_end=3423
+ _CASEVACREPORT._serialized_start=3426
+ _CASEVACREPORT._serialized_end=4828
+ _CASEVACREPORT_PRECEDENCE._serialized_start=4350
+ _CASEVACREPORT_PRECEDENCE._serialized_end=4521
+ _CASEVACREPORT_HLZMARKING._serialized_start=4524
+ _CASEVACREPORT_HLZMARKING._serialized_end=4679
+ _CASEVACREPORT_SECURITY._serialized_start=4682
+ _CASEVACREPORT_SECURITY._serialized_end=4828
+ _ZMISTENTRY._serialized_start=4830
+ _ZMISTENTRY._serialized_end=4912
+ _EMERGENCYALERT._serialized_start=4915
+ _EMERGENCYALERT._serialized_end=5193
+ _EMERGENCYALERT_TYPE._serialized_start=5043
+ _EMERGENCYALERT_TYPE._serialized_end=5193
+ _TASKREQUEST._serialized_start=5196
+ _TASKREQUEST._serialized_end=5668
+ _TASKREQUEST_PRIORITY._serialized_start=5404
+ _TASKREQUEST_PRIORITY._serialized_end=5521
+ _TASKREQUEST_STATUS._serialized_start=5524
+ _TASKREQUEST_STATUS._serialized_end=5668
+ _TAKENVIRONMENT._serialized_start=5670
+ _TAKENVIRONMENT._serialized_end=5766
+ _SENSORFOV._serialized_start=5769
+ _SENSORFOV._serialized_end=6175
+ _SENSORFOV_SENSORTYPE._serialized_start=5993
+ _SENSORFOV_SENSORTYPE._serialized_end=6163
+ _TAKTALKMESSAGE._serialized_start=6177
+ _TAKTALKMESSAGE._serialized_end=6262
+ _TAKTALKROOMDATA._serialized_start=6264
+ _TAKTALKROOMDATA._serialized_end=6364
+ _TAKPACKETV2._serialized_start=6367
+ _TAKPACKETV2._serialized_end=7809
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/atak_pb2.pyi b/meshtastic/protobuf/atak_pb2.pyi
index 34814f9..2440438 100644
--- a/meshtastic/protobuf/atak_pb2.pyi
+++ b/meshtastic/protobuf/atak_pb2.pyi
@@ -1,477 +1,748 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+Blue: Team
+Brown: Team
+CotHow_Unspecified: CotHow
+CotHow_h_e: CotHow
+CotHow_h_g_i_g_o: CotHow
+CotHow_m_f: CotHow
+CotHow_m_g: CotHow
+CotHow_m_p: CotHow
+CotHow_m_r: CotHow
+CotHow_m_s: CotHow
+CotType_Other: CotType
+CotType_a_f_A: CotType
+CotType_a_f_A_C: CotType
+CotType_a_f_A_C_F: CotType
+CotType_a_f_A_C_H: CotType
+CotType_a_f_A_C_L: CotType
+CotType_a_f_A_M: CotType
+CotType_a_f_A_M_F: CotType
+CotType_a_f_A_M_F_C_H: CotType
+CotType_a_f_A_M_F_F: CotType
+CotType_a_f_A_M_F_L: CotType
+CotType_a_f_A_M_F_P: CotType
+CotType_a_f_A_M_F_U_L: CotType
+CotType_a_f_A_M_H: CotType
+CotType_a_f_A_M_H_A: CotType
+CotType_a_f_A_M_H_C: CotType
+CotType_a_f_A_M_H_Q: CotType
+CotType_a_f_A_M_H_U_M: CotType
+CotType_a_f_F_B: CotType
+CotType_a_f_G: CotType
+CotType_a_f_G_E: CotType
+CotType_a_f_G_E_S: CotType
+CotType_a_f_G_E_S_E: CotType
+CotType_a_f_G_E_V: CotType
+CotType_a_f_G_E_V_A: CotType
+CotType_a_f_G_E_V_A_T: CotType
+CotType_a_f_G_E_V_C: CotType
+CotType_a_f_G_E_V_C_U: CotType
+CotType_a_f_G_E_V_C_ps: CotType
+CotType_a_f_G_E_X_M: CotType
+CotType_a_f_G_I: CotType
+CotType_a_f_G_U: CotType
+CotType_a_f_G_U_C: CotType
+CotType_a_f_G_U_C_E_C_W: CotType
+CotType_a_f_G_U_C_F: CotType
+CotType_a_f_G_U_C_F_T_A: CotType
+CotType_a_f_G_U_C_I: CotType
+CotType_a_f_G_U_C_I_L: CotType
+CotType_a_f_G_U_C_I_Z: CotType
+CotType_a_f_G_U_C_I_d: CotType
+CotType_a_f_G_U_C_R_O: CotType
+CotType_a_f_G_U_C_R_V: CotType
+CotType_a_f_G_U_C_R_X: CotType
+CotType_a_f_G_U_C_V_S: CotType
+CotType_a_f_G_U_H: CotType
+CotType_a_f_G_U_S_M_C: CotType
+CotType_a_f_G_U_U_M_S_E: CotType
+CotType_a_f_S: CotType
+CotType_a_f_S_N_N_R: CotType
+CotType_a_h_A: CotType
+CotType_a_h_A_M_F_F: CotType
+CotType_a_h_A_M_H_A: CotType
+CotType_a_h_G: CotType
+CotType_a_h_G_E_V: CotType
+CotType_a_h_G_E_V_A_T: CotType
+CotType_a_h_G_E_X_M: CotType
+CotType_a_h_G_I: CotType
+CotType_a_h_G_U_C_F: CotType
+CotType_a_h_G_U_C_I: CotType
+CotType_a_h_G_U_C_I_d: CotType
+CotType_a_h_S: CotType
+CotType_a_n_A: CotType
+CotType_a_n_A_C: CotType
+CotType_a_n_A_C_F: CotType
+CotType_a_n_A_C_H: CotType
+CotType_a_n_A_M_F_F: CotType
+CotType_a_n_A_M_F_Q: CotType
+CotType_a_n_G: CotType
+CotType_a_n_G_E_V: CotType
+CotType_a_n_G_E_V_A_T: CotType
+CotType_a_n_G_E_X_M: CotType
+CotType_a_n_G_I: CotType
+CotType_a_n_G_U_C_F: CotType
+CotType_a_n_G_U_C_I: CotType
+CotType_a_n_G_U_C_I_d: CotType
+CotType_a_n_S: CotType
+CotType_a_u_A: CotType
+CotType_a_u_A_C: CotType
+CotType_a_u_A_C_F: CotType
+CotType_a_u_G: CotType
+CotType_a_u_G_E_V: CotType
+CotType_a_u_G_E_V_A_T: CotType
+CotType_a_u_G_E_X_M: CotType
+CotType_a_u_G_I: CotType
+CotType_a_u_G_U_C_F: CotType
+CotType_a_u_G_U_C_I: CotType
+CotType_a_u_G_U_C_I_d: CotType
+CotType_a_u_S: CotType
+CotType_b_a_g: CotType
+CotType_b_a_o_c: CotType
+CotType_b_a_o_can: CotType
+CotType_b_a_o_opn: CotType
+CotType_b_a_o_pan: CotType
+CotType_b_a_o_tbl: CotType
+CotType_b_f_t_a: CotType
+CotType_b_f_t_r: CotType
+CotType_b_i_v: CotType
+CotType_b_i_x_i: CotType
+CotType_b_m_p_c: CotType
+CotType_b_m_p_c_cp: CotType
+CotType_b_m_p_c_ip: CotType
+CotType_b_m_p_s_m: CotType
+CotType_b_m_p_s_p_i: CotType
+CotType_b_m_p_s_p_loc: CotType
+CotType_b_m_p_s_p_op: CotType
+CotType_b_m_p_w: CotType
+CotType_b_m_p_w_GOTO: CotType
+CotType_b_m_r: CotType
+CotType_b_r_f_h_c: CotType
+CotType_b_t_f: CotType
+CotType_b_t_f_d: CotType
+CotType_b_t_f_r: CotType
+CotType_m_t_t: CotType
+CotType_t_s: CotType
+CotType_t_x_d_d: CotType
+CotType_u_d_c_c: CotType
+CotType_u_d_c_e: CotType
+CotType_u_d_f: CotType
+CotType_u_d_f_m: CotType
+CotType_u_d_p: CotType
+CotType_u_d_r: CotType
+CotType_u_d_v: CotType
+CotType_u_d_v_m: CotType
+CotType_u_r_b_bullseye: CotType
+CotType_u_r_b_c_c: CotType
+CotType_u_rb_a: CotType
+CotType_y: CotType
+Cyan: Team
+DESCRIPTOR: _descriptor.FileDescriptor
+Dark_Blue: Team
+Dark_Green: Team
+ForwardObserver: MemberRole
+GeoPointSource_GPS: GeoPointSource
+GeoPointSource_NETWORK: GeoPointSource
+GeoPointSource_USER: GeoPointSource
+GeoPointSource_Unspecified: GeoPointSource
+Green: Team
+HQ: MemberRole
+K9: MemberRole
+Magenta: Team
+Maroon: Team
+Medic: MemberRole
+Orange: Team
+Purple: Team
+RTO: MemberRole
+Red: Team
+Sniper: MemberRole
+Teal: Team
+TeamLead: MemberRole
+TeamMember: MemberRole
+Unspecifed: MemberRole
+Unspecifed_Color: Team
+White: Team
+Yellow: Team
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class AircraftTrack(_message.Message):
+ __slots__ = ["aircraft_type", "category", "cot_host_id", "flight", "gps", "icao", "registration", "rssi_x10", "squawk"]
+ AIRCRAFT_TYPE_FIELD_NUMBER: _ClassVar[int]
+ CATEGORY_FIELD_NUMBER: _ClassVar[int]
+ COT_HOST_ID_FIELD_NUMBER: _ClassVar[int]
+ FLIGHT_FIELD_NUMBER: _ClassVar[int]
+ GPS_FIELD_NUMBER: _ClassVar[int]
+ ICAO_FIELD_NUMBER: _ClassVar[int]
+ REGISTRATION_FIELD_NUMBER: _ClassVar[int]
+ RSSI_X10_FIELD_NUMBER: _ClassVar[int]
+ SQUAWK_FIELD_NUMBER: _ClassVar[int]
+ aircraft_type: str
+ category: str
+ cot_host_id: str
+ flight: str
+ gps: bool
+ icao: str
+ registration: str
+ rssi_x10: int
+ squawk: int
+ def __init__(self, icao: _Optional[str] = ..., registration: _Optional[str] = ..., flight: _Optional[str] = ..., aircraft_type: _Optional[str] = ..., squawk: _Optional[int] = ..., category: _Optional[str] = ..., rssi_x10: _Optional[int] = ..., gps: bool = ..., cot_host_id: _Optional[str] = ...) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class CasevacReport(_message.Message):
+ __slots__ = ["ambulatory_patients", "child", "convenience_count", "enemy", "epw", "equipment_detail", "equipment_flags", "frequency", "friendlies", "hlz_marking", "hlz_remarks", "litter_patients", "marked_by", "medline_remarks", "non_us_civilian", "non_us_military", "obstacles", "precedence", "priority_count", "routine_count", "security", "terrain_flags", "terrain_other_detail", "terrain_slope_dir", "title", "urgent_count", "urgent_surgical_count", "us_civilian", "us_military", "winds_are_from", "zmist", "zone_marker", "zone_protected_coord"]
+ class HlzMarking(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Precedence(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Security(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ AMBULATORY_PATIENTS_FIELD_NUMBER: _ClassVar[int]
+ CHILD_FIELD_NUMBER: _ClassVar[int]
+ CONVENIENCE_COUNT_FIELD_NUMBER: _ClassVar[int]
+ ENEMY_FIELD_NUMBER: _ClassVar[int]
+ EPW_FIELD_NUMBER: _ClassVar[int]
+ EQUIPMENT_DETAIL_FIELD_NUMBER: _ClassVar[int]
+ EQUIPMENT_FLAGS_FIELD_NUMBER: _ClassVar[int]
+ FREQUENCY_FIELD_NUMBER: _ClassVar[int]
+ FRIENDLIES_FIELD_NUMBER: _ClassVar[int]
+ HLZ_MARKING_FIELD_NUMBER: _ClassVar[int]
+ HLZ_REMARKS_FIELD_NUMBER: _ClassVar[int]
+ HlzMarking_None: CasevacReport.HlzMarking
+ HlzMarking_Other: CasevacReport.HlzMarking
+ HlzMarking_Panels: CasevacReport.HlzMarking
+ HlzMarking_PyroSignal: CasevacReport.HlzMarking
+ HlzMarking_Smoke: CasevacReport.HlzMarking
+ HlzMarking_Unspecified: CasevacReport.HlzMarking
+ LITTER_PATIENTS_FIELD_NUMBER: _ClassVar[int]
+ MARKED_BY_FIELD_NUMBER: _ClassVar[int]
+ MEDLINE_REMARKS_FIELD_NUMBER: _ClassVar[int]
+ NON_US_CIVILIAN_FIELD_NUMBER: _ClassVar[int]
+ NON_US_MILITARY_FIELD_NUMBER: _ClassVar[int]
+ OBSTACLES_FIELD_NUMBER: _ClassVar[int]
+ PRECEDENCE_FIELD_NUMBER: _ClassVar[int]
+ PRIORITY_COUNT_FIELD_NUMBER: _ClassVar[int]
+ Precedence_Convenience: CasevacReport.Precedence
+ Precedence_Priority: CasevacReport.Precedence
+ Precedence_Routine: CasevacReport.Precedence
+ Precedence_Unspecified: CasevacReport.Precedence
+ Precedence_Urgent: CasevacReport.Precedence
+ Precedence_UrgentSurgical: CasevacReport.Precedence
+ ROUTINE_COUNT_FIELD_NUMBER: _ClassVar[int]
+ SECURITY_FIELD_NUMBER: _ClassVar[int]
+ Security_EnemyInArea: CasevacReport.Security
+ Security_EnemyInArmedContact: CasevacReport.Security
+ Security_NoEnemy: CasevacReport.Security
+ Security_PossibleEnemy: CasevacReport.Security
+ Security_Unspecified: CasevacReport.Security
+ TERRAIN_FLAGS_FIELD_NUMBER: _ClassVar[int]
+ TERRAIN_OTHER_DETAIL_FIELD_NUMBER: _ClassVar[int]
+ TERRAIN_SLOPE_DIR_FIELD_NUMBER: _ClassVar[int]
+ TITLE_FIELD_NUMBER: _ClassVar[int]
+ URGENT_COUNT_FIELD_NUMBER: _ClassVar[int]
+ URGENT_SURGICAL_COUNT_FIELD_NUMBER: _ClassVar[int]
+ US_CIVILIAN_FIELD_NUMBER: _ClassVar[int]
+ US_MILITARY_FIELD_NUMBER: _ClassVar[int]
+ WINDS_ARE_FROM_FIELD_NUMBER: _ClassVar[int]
+ ZMIST_FIELD_NUMBER: _ClassVar[int]
+ ZONE_MARKER_FIELD_NUMBER: _ClassVar[int]
+ ZONE_PROTECTED_COORD_FIELD_NUMBER: _ClassVar[int]
+ ambulatory_patients: int
+ child: int
+ convenience_count: int
+ enemy: str
+ epw: int
+ equipment_detail: str
+ equipment_flags: int
+ frequency: str
+ friendlies: str
+ hlz_marking: CasevacReport.HlzMarking
+ hlz_remarks: str
+ litter_patients: int
+ marked_by: str
+ medline_remarks: str
+ non_us_civilian: int
+ non_us_military: int
+ obstacles: str
+ precedence: CasevacReport.Precedence
+ priority_count: int
+ routine_count: int
+ security: CasevacReport.Security
+ terrain_flags: int
+ terrain_other_detail: str
+ terrain_slope_dir: str
+ title: str
+ urgent_count: int
+ urgent_surgical_count: int
+ us_civilian: int
+ us_military: int
+ winds_are_from: str
+ zmist: _containers.RepeatedCompositeFieldContainer[ZMistEntry]
+ zone_marker: str
+ zone_protected_coord: str
+ def __init__(self, precedence: _Optional[_Union[CasevacReport.Precedence, str]] = ..., equipment_flags: _Optional[int] = ..., litter_patients: _Optional[int] = ..., ambulatory_patients: _Optional[int] = ..., security: _Optional[_Union[CasevacReport.Security, str]] = ..., hlz_marking: _Optional[_Union[CasevacReport.HlzMarking, str]] = ..., zone_marker: _Optional[str] = ..., us_military: _Optional[int] = ..., us_civilian: _Optional[int] = ..., non_us_military: _Optional[int] = ..., non_us_civilian: _Optional[int] = ..., epw: _Optional[int] = ..., child: _Optional[int] = ..., terrain_flags: _Optional[int] = ..., frequency: _Optional[str] = ..., title: _Optional[str] = ..., medline_remarks: _Optional[str] = ..., urgent_count: _Optional[int] = ..., urgent_surgical_count: _Optional[int] = ..., priority_count: _Optional[int] = ..., routine_count: _Optional[int] = ..., convenience_count: _Optional[int] = ..., equipment_detail: _Optional[str] = ..., zone_protected_coord: _Optional[str] = ..., terrain_slope_dir: _Optional[str] = ..., terrain_other_detail: _Optional[str] = ..., marked_by: _Optional[str] = ..., obstacles: _Optional[str] = ..., winds_are_from: _Optional[str] = ..., friendlies: _Optional[str] = ..., enemy: _Optional[str] = ..., hlz_remarks: _Optional[str] = ..., zmist: _Optional[_Iterable[_Union[ZMistEntry, _Mapping]]] = ...) -> None: ...
-class _Team:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class Contact(_message.Message):
+ __slots__ = ["callsign", "device_callsign"]
+ CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ callsign: str
+ device_callsign: str
+ def __init__(self, callsign: _Optional[str] = ..., device_callsign: _Optional[str] = ...) -> None: ...
-class _TeamEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Team.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- Unspecifed_Color: _Team.ValueType # 0
- """
- Unspecifed
- """
- White: _Team.ValueType # 1
- """
- White
- """
- Yellow: _Team.ValueType # 2
- """
- Yellow
- """
- Orange: _Team.ValueType # 3
- """
- Orange
- """
- Magenta: _Team.ValueType # 4
- """
- Magenta
- """
- Red: _Team.ValueType # 5
- """
- Red
- """
- Maroon: _Team.ValueType # 6
- """
- Maroon
- """
- Purple: _Team.ValueType # 7
- """
- Purple
- """
- Dark_Blue: _Team.ValueType # 8
- """
- Dark Blue
- """
- Blue: _Team.ValueType # 9
- """
- Blue
- """
- Cyan: _Team.ValueType # 10
- """
- Cyan
- """
- Teal: _Team.ValueType # 11
- """
- Teal
- """
- Green: _Team.ValueType # 12
- """
- Green
- """
- Dark_Green: _Team.ValueType # 13
- """
- Dark Green
- """
- Brown: _Team.ValueType # 14
- """
- Brown
- """
+class CotGeoPoint(_message.Message):
+ __slots__ = ["lat_delta_i", "lon_delta_i"]
+ LAT_DELTA_I_FIELD_NUMBER: _ClassVar[int]
+ LON_DELTA_I_FIELD_NUMBER: _ClassVar[int]
+ lat_delta_i: int
+ lon_delta_i: int
+ def __init__(self, lat_delta_i: _Optional[int] = ..., lon_delta_i: _Optional[int] = ...) -> None: ...
-class Team(_Team, metaclass=_TeamEnumTypeWrapper): ...
+class DrawnShape(_message.Message):
+ __slots__ = ["angle_deg", "bullseye_bearing_ref", "bullseye_distance_dm", "bullseye_flags", "bullseye_uid_ref", "fill_argb", "fill_color", "kind", "labels_on", "major_cm", "minor_cm", "stroke_argb", "stroke_color", "stroke_weight_x10", "style", "truncated", "vertices"]
+ class Kind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class StyleMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ANGLE_DEG_FIELD_NUMBER: _ClassVar[int]
+ BULLSEYE_BEARING_REF_FIELD_NUMBER: _ClassVar[int]
+ BULLSEYE_DISTANCE_DM_FIELD_NUMBER: _ClassVar[int]
+ BULLSEYE_FLAGS_FIELD_NUMBER: _ClassVar[int]
+ BULLSEYE_UID_REF_FIELD_NUMBER: _ClassVar[int]
+ FILL_ARGB_FIELD_NUMBER: _ClassVar[int]
+ FILL_COLOR_FIELD_NUMBER: _ClassVar[int]
+ KIND_FIELD_NUMBER: _ClassVar[int]
+ Kind_Bullseye: DrawnShape.Kind
+ Kind_Circle: DrawnShape.Kind
+ Kind_Ellipse: DrawnShape.Kind
+ Kind_Freeform: DrawnShape.Kind
+ Kind_Polygon: DrawnShape.Kind
+ Kind_RangingCircle: DrawnShape.Kind
+ Kind_Rectangle: DrawnShape.Kind
+ Kind_Telestration: DrawnShape.Kind
+ Kind_Unspecified: DrawnShape.Kind
+ Kind_Vehicle2D: DrawnShape.Kind
+ Kind_Vehicle3D: DrawnShape.Kind
+ LABELS_ON_FIELD_NUMBER: _ClassVar[int]
+ MAJOR_CM_FIELD_NUMBER: _ClassVar[int]
+ MINOR_CM_FIELD_NUMBER: _ClassVar[int]
+ STROKE_ARGB_FIELD_NUMBER: _ClassVar[int]
+ STROKE_COLOR_FIELD_NUMBER: _ClassVar[int]
+ STROKE_WEIGHT_X10_FIELD_NUMBER: _ClassVar[int]
+ STYLE_FIELD_NUMBER: _ClassVar[int]
+ StyleMode_FillOnly: DrawnShape.StyleMode
+ StyleMode_StrokeAndFill: DrawnShape.StyleMode
+ StyleMode_StrokeOnly: DrawnShape.StyleMode
+ StyleMode_Unspecified: DrawnShape.StyleMode
+ TRUNCATED_FIELD_NUMBER: _ClassVar[int]
+ VERTICES_FIELD_NUMBER: _ClassVar[int]
+ angle_deg: int
+ bullseye_bearing_ref: int
+ bullseye_distance_dm: int
+ bullseye_flags: int
+ bullseye_uid_ref: str
+ fill_argb: int
+ fill_color: Team
+ kind: DrawnShape.Kind
+ labels_on: bool
+ major_cm: int
+ minor_cm: int
+ stroke_argb: int
+ stroke_color: Team
+ stroke_weight_x10: int
+ style: DrawnShape.StyleMode
+ truncated: bool
+ vertices: _containers.RepeatedCompositeFieldContainer[CotGeoPoint]
+ def __init__(self, kind: _Optional[_Union[DrawnShape.Kind, str]] = ..., style: _Optional[_Union[DrawnShape.StyleMode, str]] = ..., major_cm: _Optional[int] = ..., minor_cm: _Optional[int] = ..., angle_deg: _Optional[int] = ..., stroke_color: _Optional[_Union[Team, str]] = ..., stroke_argb: _Optional[int] = ..., stroke_weight_x10: _Optional[int] = ..., fill_color: _Optional[_Union[Team, str]] = ..., fill_argb: _Optional[int] = ..., labels_on: bool = ..., vertices: _Optional[_Iterable[_Union[CotGeoPoint, _Mapping]]] = ..., truncated: bool = ..., bullseye_distance_dm: _Optional[int] = ..., bullseye_bearing_ref: _Optional[int] = ..., bullseye_flags: _Optional[int] = ..., bullseye_uid_ref: _Optional[str] = ...) -> None: ...
-Unspecifed_Color: Team.ValueType # 0
-"""
-Unspecifed
-"""
-White: Team.ValueType # 1
-"""
-White
-"""
-Yellow: Team.ValueType # 2
-"""
-Yellow
-"""
-Orange: Team.ValueType # 3
-"""
-Orange
-"""
-Magenta: Team.ValueType # 4
-"""
-Magenta
-"""
-Red: Team.ValueType # 5
-"""
-Red
-"""
-Maroon: Team.ValueType # 6
-"""
-Maroon
-"""
-Purple: Team.ValueType # 7
-"""
-Purple
-"""
-Dark_Blue: Team.ValueType # 8
-"""
-Dark Blue
-"""
-Blue: Team.ValueType # 9
-"""
-Blue
-"""
-Cyan: Team.ValueType # 10
-"""
-Cyan
-"""
-Teal: Team.ValueType # 11
-"""
-Teal
-"""
-Green: Team.ValueType # 12
-"""
-Green
-"""
-Dark_Green: Team.ValueType # 13
-"""
-Dark Green
-"""
-Brown: Team.ValueType # 14
-"""
-Brown
-"""
-global___Team = Team
+class EmergencyAlert(_message.Message):
+ __slots__ = ["authoring_uid", "cancel_reference_uid", "type"]
+ class Type(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ AUTHORING_UID_FIELD_NUMBER: _ClassVar[int]
+ CANCEL_REFERENCE_UID_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ Type_Alert911: EmergencyAlert.Type
+ Type_Cancel: EmergencyAlert.Type
+ Type_Custom: EmergencyAlert.Type
+ Type_GeoFenceBreached: EmergencyAlert.Type
+ Type_InContact: EmergencyAlert.Type
+ Type_RingTheBell: EmergencyAlert.Type
+ Type_Unspecified: EmergencyAlert.Type
+ authoring_uid: str
+ cancel_reference_uid: str
+ type: EmergencyAlert.Type
+ def __init__(self, type: _Optional[_Union[EmergencyAlert.Type, str]] = ..., authoring_uid: _Optional[str] = ..., cancel_reference_uid: _Optional[str] = ...) -> None: ...
-class _MemberRole:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class GeoChat(_message.Message):
+ __slots__ = ["lang", "message", "receipt_for_uid", "receipt_type", "room_id", "to", "to_callsign", "voice_profile_id"]
+ class ReceiptType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ LANG_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_FOR_UID_FIELD_NUMBER: _ClassVar[int]
+ RECEIPT_TYPE_FIELD_NUMBER: _ClassVar[int]
+ ROOM_ID_FIELD_NUMBER: _ClassVar[int]
+ ReceiptType_Delivered: GeoChat.ReceiptType
+ ReceiptType_None: GeoChat.ReceiptType
+ ReceiptType_Read: GeoChat.ReceiptType
+ TO_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ TO_FIELD_NUMBER: _ClassVar[int]
+ VOICE_PROFILE_ID_FIELD_NUMBER: _ClassVar[int]
+ lang: str
+ message: str
+ receipt_for_uid: str
+ receipt_type: GeoChat.ReceiptType
+ room_id: str
+ to: str
+ to_callsign: str
+ voice_profile_id: str
+ def __init__(self, message: _Optional[str] = ..., to: _Optional[str] = ..., to_callsign: _Optional[str] = ..., receipt_for_uid: _Optional[str] = ..., receipt_type: _Optional[_Union[GeoChat.ReceiptType, str]] = ..., lang: _Optional[str] = ..., room_id: _Optional[str] = ..., voice_profile_id: _Optional[str] = ...) -> None: ...
-class _MemberRoleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_MemberRole.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- Unspecifed: _MemberRole.ValueType # 0
- """
- Unspecifed
- """
- TeamMember: _MemberRole.ValueType # 1
- """
- Team Member
- """
- TeamLead: _MemberRole.ValueType # 2
- """
- Team Lead
- """
- HQ: _MemberRole.ValueType # 3
- """
- Headquarters
- """
- Sniper: _MemberRole.ValueType # 4
- """
- Airsoft enthusiast
- """
- Medic: _MemberRole.ValueType # 5
- """
- Medic
- """
- ForwardObserver: _MemberRole.ValueType # 6
- """
- ForwardObserver
- """
- RTO: _MemberRole.ValueType # 7
- """
- Radio Telephone Operator
- """
- K9: _MemberRole.ValueType # 8
- """
- Doggo
- """
+class Group(_message.Message):
+ __slots__ = ["role", "team"]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ TEAM_FIELD_NUMBER: _ClassVar[int]
+ role: MemberRole
+ team: Team
+ def __init__(self, role: _Optional[_Union[MemberRole, str]] = ..., team: _Optional[_Union[Team, str]] = ...) -> None: ...
-class MemberRole(_MemberRole, metaclass=_MemberRoleEnumTypeWrapper):
- """
- Role of the group member
- """
+class Marker(_message.Message):
+ __slots__ = ["color", "color_argb", "iconset", "kind", "parent_callsign", "parent_type", "parent_uid", "readiness"]
+ class Kind(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ COLOR_ARGB_FIELD_NUMBER: _ClassVar[int]
+ COLOR_FIELD_NUMBER: _ClassVar[int]
+ ICONSET_FIELD_NUMBER: _ClassVar[int]
+ KIND_FIELD_NUMBER: _ClassVar[int]
+ Kind_Checkpoint: Marker.Kind
+ Kind_ContactPoint: Marker.Kind
+ Kind_CustomIcon: Marker.Kind
+ Kind_GoToPoint: Marker.Kind
+ Kind_ImageMarker: Marker.Kind
+ Kind_InitialPoint: Marker.Kind
+ Kind_ObservationPost: Marker.Kind
+ Kind_SelfPosition: Marker.Kind
+ Kind_Spot: Marker.Kind
+ Kind_SpotMap: Marker.Kind
+ Kind_Symbol2525: Marker.Kind
+ Kind_Unspecified: Marker.Kind
+ Kind_Waypoint: Marker.Kind
+ PARENT_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ PARENT_TYPE_FIELD_NUMBER: _ClassVar[int]
+ PARENT_UID_FIELD_NUMBER: _ClassVar[int]
+ READINESS_FIELD_NUMBER: _ClassVar[int]
+ color: Team
+ color_argb: int
+ iconset: str
+ kind: Marker.Kind
+ parent_callsign: str
+ parent_type: str
+ parent_uid: str
+ readiness: bool
+ def __init__(self, kind: _Optional[_Union[Marker.Kind, str]] = ..., color: _Optional[_Union[Team, str]] = ..., color_argb: _Optional[int] = ..., readiness: bool = ..., parent_uid: _Optional[str] = ..., parent_type: _Optional[str] = ..., parent_callsign: _Optional[str] = ..., iconset: _Optional[str] = ...) -> None: ...
-Unspecifed: MemberRole.ValueType # 0
-"""
-Unspecifed
-"""
-TeamMember: MemberRole.ValueType # 1
-"""
-Team Member
-"""
-TeamLead: MemberRole.ValueType # 2
-"""
-Team Lead
-"""
-HQ: MemberRole.ValueType # 3
-"""
-Headquarters
-"""
-Sniper: MemberRole.ValueType # 4
-"""
-Airsoft enthusiast
-"""
-Medic: MemberRole.ValueType # 5
-"""
-Medic
-"""
-ForwardObserver: MemberRole.ValueType # 6
-"""
-ForwardObserver
-"""
-RTO: MemberRole.ValueType # 7
-"""
-Radio Telephone Operator
-"""
-K9: MemberRole.ValueType # 8
-"""
-Doggo
-"""
-global___MemberRole = MemberRole
+class PLI(_message.Message):
+ __slots__ = ["altitude", "course", "latitude_i", "longitude_i", "speed"]
+ ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ COURSE_FIELD_NUMBER: _ClassVar[int]
+ LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ SPEED_FIELD_NUMBER: _ClassVar[int]
+ altitude: int
+ course: int
+ latitude_i: int
+ longitude_i: int
+ speed: int
+ def __init__(self, latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., speed: _Optional[int] = ..., course: _Optional[int] = ...) -> None: ...
-@typing.final
-class TAKPacket(google.protobuf.message.Message):
- """
- Packets for the official ATAK Plugin
- """
+class RangeAndBearing(_message.Message):
+ __slots__ = ["anchor", "anchor_uid", "bearing_cdeg", "range_cm", "stroke_argb", "stroke_color", "stroke_weight_x10"]
+ ANCHOR_FIELD_NUMBER: _ClassVar[int]
+ ANCHOR_UID_FIELD_NUMBER: _ClassVar[int]
+ BEARING_CDEG_FIELD_NUMBER: _ClassVar[int]
+ RANGE_CM_FIELD_NUMBER: _ClassVar[int]
+ STROKE_ARGB_FIELD_NUMBER: _ClassVar[int]
+ STROKE_COLOR_FIELD_NUMBER: _ClassVar[int]
+ STROKE_WEIGHT_X10_FIELD_NUMBER: _ClassVar[int]
+ anchor: CotGeoPoint
+ anchor_uid: str
+ bearing_cdeg: int
+ range_cm: int
+ stroke_argb: int
+ stroke_color: Team
+ stroke_weight_x10: int
+ def __init__(self, anchor: _Optional[_Union[CotGeoPoint, _Mapping]] = ..., anchor_uid: _Optional[str] = ..., range_cm: _Optional[int] = ..., bearing_cdeg: _Optional[int] = ..., stroke_color: _Optional[_Union[Team, str]] = ..., stroke_argb: _Optional[int] = ..., stroke_weight_x10: _Optional[int] = ...) -> None: ...
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class Route(_message.Message):
+ __slots__ = ["direction", "links", "method", "prefix", "stroke_weight_x10", "truncated"]
+ class Direction(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Method(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Link(_message.Message):
+ __slots__ = ["callsign", "link_type", "point", "uid"]
+ CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ LINK_TYPE_FIELD_NUMBER: _ClassVar[int]
+ POINT_FIELD_NUMBER: _ClassVar[int]
+ UID_FIELD_NUMBER: _ClassVar[int]
+ callsign: str
+ link_type: int
+ point: CotGeoPoint
+ uid: str
+ def __init__(self, point: _Optional[_Union[CotGeoPoint, _Mapping]] = ..., uid: _Optional[str] = ..., callsign: _Optional[str] = ..., link_type: _Optional[int] = ...) -> None: ...
+ DIRECTION_FIELD_NUMBER: _ClassVar[int]
+ Direction_Exfil: Route.Direction
+ Direction_Infil: Route.Direction
+ Direction_Unspecified: Route.Direction
+ LINKS_FIELD_NUMBER: _ClassVar[int]
+ METHOD_FIELD_NUMBER: _ClassVar[int]
+ Method_Driving: Route.Method
+ Method_Flying: Route.Method
+ Method_Swimming: Route.Method
+ Method_Unspecified: Route.Method
+ Method_Walking: Route.Method
+ Method_Watercraft: Route.Method
+ PREFIX_FIELD_NUMBER: _ClassVar[int]
+ STROKE_WEIGHT_X10_FIELD_NUMBER: _ClassVar[int]
+ TRUNCATED_FIELD_NUMBER: _ClassVar[int]
+ direction: Route.Direction
+ links: _containers.RepeatedCompositeFieldContainer[Route.Link]
+ method: Route.Method
+ prefix: str
+ stroke_weight_x10: int
+ truncated: bool
+ def __init__(self, method: _Optional[_Union[Route.Method, str]] = ..., direction: _Optional[_Union[Route.Direction, str]] = ..., prefix: _Optional[str] = ..., stroke_weight_x10: _Optional[int] = ..., links: _Optional[_Iterable[_Union[Route.Link, _Mapping]]] = ..., truncated: bool = ...) -> None: ...
- IS_COMPRESSED_FIELD_NUMBER: builtins.int
- CONTACT_FIELD_NUMBER: builtins.int
- GROUP_FIELD_NUMBER: builtins.int
- STATUS_FIELD_NUMBER: builtins.int
- PLI_FIELD_NUMBER: builtins.int
- CHAT_FIELD_NUMBER: builtins.int
- DETAIL_FIELD_NUMBER: builtins.int
- is_compressed: builtins.bool
- """
- Are the payloads strings compressed for LoRA transport?
- """
- detail: builtins.bytes
- """
- Generic CoT detail XML
- May be compressed / truncated by the sender (EUD)
- """
- @property
- def contact(self) -> global___Contact:
- """
- The contact / callsign for ATAK user
- """
+class SensorFov(_message.Message):
+ __slots__ = ["azimuth_deg", "elevation_deg", "fov_horizontal_deg", "fov_vertical_deg", "model", "range_m", "roll_deg", "type"]
+ class SensorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ AZIMUTH_DEG_FIELD_NUMBER: _ClassVar[int]
+ ELEVATION_DEG_FIELD_NUMBER: _ClassVar[int]
+ FOV_HORIZONTAL_DEG_FIELD_NUMBER: _ClassVar[int]
+ FOV_VERTICAL_DEG_FIELD_NUMBER: _ClassVar[int]
+ MODEL_FIELD_NUMBER: _ClassVar[int]
+ RANGE_M_FIELD_NUMBER: _ClassVar[int]
+ ROLL_DEG_FIELD_NUMBER: _ClassVar[int]
+ SensorType_Camera: SensorFov.SensorType
+ SensorType_Laser: SensorFov.SensorType
+ SensorType_Nvg: SensorFov.SensorType
+ SensorType_Other: SensorFov.SensorType
+ SensorType_Rf: SensorFov.SensorType
+ SensorType_Thermal: SensorFov.SensorType
+ SensorType_Unspecified: SensorFov.SensorType
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ azimuth_deg: int
+ elevation_deg: int
+ fov_horizontal_deg: int
+ fov_vertical_deg: int
+ model: str
+ range_m: int
+ roll_deg: int
+ type: SensorFov.SensorType
+ def __init__(self, type: _Optional[_Union[SensorFov.SensorType, str]] = ..., azimuth_deg: _Optional[int] = ..., range_m: _Optional[int] = ..., fov_horizontal_deg: _Optional[int] = ..., fov_vertical_deg: _Optional[int] = ..., elevation_deg: _Optional[int] = ..., roll_deg: _Optional[int] = ..., model: _Optional[str] = ...) -> None: ...
- @property
- def group(self) -> global___Group:
- """
- The group for ATAK user
- """
+class Status(_message.Message):
+ __slots__ = ["battery"]
+ BATTERY_FIELD_NUMBER: _ClassVar[int]
+ battery: int
+ def __init__(self, battery: _Optional[int] = ...) -> None: ...
- @property
- def status(self) -> global___Status:
- """
- The status of the ATAK EUD
- """
+class TAKEnvironment(_message.Message):
+ __slots__ = ["temperature_c_x10", "wind_direction_deg", "wind_speed_cm_s"]
+ TEMPERATURE_C_X10_FIELD_NUMBER: _ClassVar[int]
+ WIND_DIRECTION_DEG_FIELD_NUMBER: _ClassVar[int]
+ WIND_SPEED_CM_S_FIELD_NUMBER: _ClassVar[int]
+ temperature_c_x10: int
+ wind_direction_deg: int
+ wind_speed_cm_s: int
+ def __init__(self, temperature_c_x10: _Optional[int] = ..., wind_direction_deg: _Optional[int] = ..., wind_speed_cm_s: _Optional[int] = ...) -> None: ...
- @property
- def pli(self) -> global___PLI:
- """
- TAK position report
- """
+class TAKPacket(_message.Message):
+ __slots__ = ["chat", "contact", "detail", "group", "is_compressed", "pli", "status"]
+ CHAT_FIELD_NUMBER: _ClassVar[int]
+ CONTACT_FIELD_NUMBER: _ClassVar[int]
+ DETAIL_FIELD_NUMBER: _ClassVar[int]
+ GROUP_FIELD_NUMBER: _ClassVar[int]
+ IS_COMPRESSED_FIELD_NUMBER: _ClassVar[int]
+ PLI_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ chat: GeoChat
+ contact: Contact
+ detail: bytes
+ group: Group
+ is_compressed: bool
+ pli: PLI
+ status: Status
+ def __init__(self, is_compressed: bool = ..., contact: _Optional[_Union[Contact, _Mapping]] = ..., group: _Optional[_Union[Group, _Mapping]] = ..., status: _Optional[_Union[Status, _Mapping]] = ..., pli: _Optional[_Union[PLI, _Mapping]] = ..., chat: _Optional[_Union[GeoChat, _Mapping]] = ..., detail: _Optional[bytes] = ...) -> None: ...
- @property
- def chat(self) -> global___GeoChat:
- """
- ATAK GeoChat message
- """
+class TAKPacketV2(_message.Message):
+ __slots__ = ["aircraft", "alt_src", "altitude", "battery", "callsign", "casevac", "chat", "cot_type_id", "cot_type_str", "course", "device_callsign", "emergency", "endpoint", "environment", "geo_src", "how", "latitude_i", "longitude_i", "marker", "phone", "pli", "rab", "raw_detail", "remarks", "role", "route", "sensor_fov", "shape", "speed", "stale_seconds", "tak_device", "tak_os", "tak_platform", "tak_version", "taktalk", "taktalk_room", "task", "team", "uid"]
+ AIRCRAFT_FIELD_NUMBER: _ClassVar[int]
+ ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ ALT_SRC_FIELD_NUMBER: _ClassVar[int]
+ BATTERY_FIELD_NUMBER: _ClassVar[int]
+ CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ CASEVAC_FIELD_NUMBER: _ClassVar[int]
+ CHAT_FIELD_NUMBER: _ClassVar[int]
+ COT_TYPE_ID_FIELD_NUMBER: _ClassVar[int]
+ COT_TYPE_STR_FIELD_NUMBER: _ClassVar[int]
+ COURSE_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ EMERGENCY_FIELD_NUMBER: _ClassVar[int]
+ ENDPOINT_FIELD_NUMBER: _ClassVar[int]
+ ENVIRONMENT_FIELD_NUMBER: _ClassVar[int]
+ GEO_SRC_FIELD_NUMBER: _ClassVar[int]
+ HOW_FIELD_NUMBER: _ClassVar[int]
+ LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ MARKER_FIELD_NUMBER: _ClassVar[int]
+ PHONE_FIELD_NUMBER: _ClassVar[int]
+ PLI_FIELD_NUMBER: _ClassVar[int]
+ RAB_FIELD_NUMBER: _ClassVar[int]
+ RAW_DETAIL_FIELD_NUMBER: _ClassVar[int]
+ REMARKS_FIELD_NUMBER: _ClassVar[int]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ ROUTE_FIELD_NUMBER: _ClassVar[int]
+ SENSOR_FOV_FIELD_NUMBER: _ClassVar[int]
+ SHAPE_FIELD_NUMBER: _ClassVar[int]
+ SPEED_FIELD_NUMBER: _ClassVar[int]
+ STALE_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ TAKTALK_FIELD_NUMBER: _ClassVar[int]
+ TAKTALK_ROOM_FIELD_NUMBER: _ClassVar[int]
+ TAK_DEVICE_FIELD_NUMBER: _ClassVar[int]
+ TAK_OS_FIELD_NUMBER: _ClassVar[int]
+ TAK_PLATFORM_FIELD_NUMBER: _ClassVar[int]
+ TAK_VERSION_FIELD_NUMBER: _ClassVar[int]
+ TASK_FIELD_NUMBER: _ClassVar[int]
+ TEAM_FIELD_NUMBER: _ClassVar[int]
+ UID_FIELD_NUMBER: _ClassVar[int]
+ aircraft: AircraftTrack
+ alt_src: GeoPointSource
+ altitude: int
+ battery: int
+ callsign: str
+ casevac: CasevacReport
+ chat: GeoChat
+ cot_type_id: CotType
+ cot_type_str: str
+ course: int
+ device_callsign: str
+ emergency: EmergencyAlert
+ endpoint: str
+ environment: TAKEnvironment
+ geo_src: GeoPointSource
+ how: CotHow
+ latitude_i: int
+ longitude_i: int
+ marker: Marker
+ phone: str
+ pli: bool
+ rab: RangeAndBearing
+ raw_detail: bytes
+ remarks: str
+ role: MemberRole
+ route: Route
+ sensor_fov: SensorFov
+ shape: DrawnShape
+ speed: int
+ stale_seconds: int
+ tak_device: str
+ tak_os: str
+ tak_platform: str
+ tak_version: str
+ taktalk: TakTalkMessage
+ taktalk_room: TakTalkRoomData
+ task: TaskRequest
+ team: Team
+ uid: str
+ def __init__(self, cot_type_id: _Optional[_Union[CotType, str]] = ..., how: _Optional[_Union[CotHow, str]] = ..., callsign: _Optional[str] = ..., team: _Optional[_Union[Team, str]] = ..., role: _Optional[_Union[MemberRole, str]] = ..., latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., speed: _Optional[int] = ..., course: _Optional[int] = ..., battery: _Optional[int] = ..., geo_src: _Optional[_Union[GeoPointSource, str]] = ..., alt_src: _Optional[_Union[GeoPointSource, str]] = ..., uid: _Optional[str] = ..., device_callsign: _Optional[str] = ..., stale_seconds: _Optional[int] = ..., tak_version: _Optional[str] = ..., tak_device: _Optional[str] = ..., tak_platform: _Optional[str] = ..., tak_os: _Optional[str] = ..., endpoint: _Optional[str] = ..., phone: _Optional[str] = ..., cot_type_str: _Optional[str] = ..., remarks: _Optional[str] = ..., environment: _Optional[_Union[TAKEnvironment, _Mapping]] = ..., sensor_fov: _Optional[_Union[SensorFov, _Mapping]] = ..., pli: bool = ..., chat: _Optional[_Union[GeoChat, _Mapping]] = ..., aircraft: _Optional[_Union[AircraftTrack, _Mapping]] = ..., raw_detail: _Optional[bytes] = ..., shape: _Optional[_Union[DrawnShape, _Mapping]] = ..., marker: _Optional[_Union[Marker, _Mapping]] = ..., rab: _Optional[_Union[RangeAndBearing, _Mapping]] = ..., route: _Optional[_Union[Route, _Mapping]] = ..., casevac: _Optional[_Union[CasevacReport, _Mapping]] = ..., emergency: _Optional[_Union[EmergencyAlert, _Mapping]] = ..., task: _Optional[_Union[TaskRequest, _Mapping]] = ..., taktalk: _Optional[_Union[TakTalkMessage, _Mapping]] = ..., taktalk_room: _Optional[_Union[TakTalkRoomData, _Mapping]] = ...) -> None: ...
- def __init__(
- self,
- *,
- is_compressed: builtins.bool = ...,
- contact: global___Contact | None = ...,
- group: global___Group | None = ...,
- status: global___Status | None = ...,
- pli: global___PLI | None = ...,
- chat: global___GeoChat | None = ...,
- detail: builtins.bytes = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["chat", b"chat", "contact", b"contact", "detail", b"detail", "group", b"group", "payload_variant", b"payload_variant", "pli", b"pli", "status", b"status"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["chat", b"chat", "contact", b"contact", "detail", b"detail", "group", b"group", "is_compressed", b"is_compressed", "payload_variant", b"payload_variant", "pli", b"pli", "status", b"status"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["pli", "chat", "detail"] | None: ...
+class TakTalkMessage(_message.Message):
+ __slots__ = ["chatroom_id", "from_voice", "lang", "text"]
+ CHATROOM_ID_FIELD_NUMBER: _ClassVar[int]
+ FROM_VOICE_FIELD_NUMBER: _ClassVar[int]
+ LANG_FIELD_NUMBER: _ClassVar[int]
+ TEXT_FIELD_NUMBER: _ClassVar[int]
+ chatroom_id: str
+ from_voice: bool
+ lang: str
+ text: str
+ def __init__(self, text: _Optional[str] = ..., chatroom_id: _Optional[str] = ..., lang: _Optional[str] = ..., from_voice: bool = ...) -> None: ...
-global___TAKPacket = TAKPacket
+class TakTalkRoomData(_message.Message):
+ __slots__ = ["participants", "room_id", "room_name", "sender_callsign"]
+ PARTICIPANTS_FIELD_NUMBER: _ClassVar[int]
+ ROOM_ID_FIELD_NUMBER: _ClassVar[int]
+ ROOM_NAME_FIELD_NUMBER: _ClassVar[int]
+ SENDER_CALLSIGN_FIELD_NUMBER: _ClassVar[int]
+ participants: _containers.RepeatedScalarFieldContainer[str]
+ room_id: str
+ room_name: str
+ sender_callsign: str
+ def __init__(self, sender_callsign: _Optional[str] = ..., room_id: _Optional[str] = ..., room_name: _Optional[str] = ..., participants: _Optional[_Iterable[str]] = ...) -> None: ...
-@typing.final
-class GeoChat(google.protobuf.message.Message):
- """
- ATAK GeoChat message
- """
+class TaskRequest(_message.Message):
+ __slots__ = ["assignee_uid", "note", "priority", "status", "target_uid", "task_type"]
+ class Priority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Status(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ASSIGNEE_UID_FIELD_NUMBER: _ClassVar[int]
+ NOTE_FIELD_NUMBER: _ClassVar[int]
+ PRIORITY_FIELD_NUMBER: _ClassVar[int]
+ Priority_Critical: TaskRequest.Priority
+ Priority_High: TaskRequest.Priority
+ Priority_Low: TaskRequest.Priority
+ Priority_Normal: TaskRequest.Priority
+ Priority_Unspecified: TaskRequest.Priority
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ Status_Acknowledged: TaskRequest.Status
+ Status_Cancelled: TaskRequest.Status
+ Status_Completed: TaskRequest.Status
+ Status_InProgress: TaskRequest.Status
+ Status_Pending: TaskRequest.Status
+ Status_Unspecified: TaskRequest.Status
+ TARGET_UID_FIELD_NUMBER: _ClassVar[int]
+ TASK_TYPE_FIELD_NUMBER: _ClassVar[int]
+ assignee_uid: str
+ note: str
+ priority: TaskRequest.Priority
+ status: TaskRequest.Status
+ target_uid: str
+ task_type: str
+ def __init__(self, task_type: _Optional[str] = ..., target_uid: _Optional[str] = ..., assignee_uid: _Optional[str] = ..., priority: _Optional[_Union[TaskRequest.Priority, str]] = ..., status: _Optional[_Union[TaskRequest.Status, str]] = ..., note: _Optional[str] = ...) -> None: ...
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class ZMistEntry(_message.Message):
+ __slots__ = ["i", "m", "s", "t", "title", "z"]
+ I_FIELD_NUMBER: _ClassVar[int]
+ M_FIELD_NUMBER: _ClassVar[int]
+ S_FIELD_NUMBER: _ClassVar[int]
+ TITLE_FIELD_NUMBER: _ClassVar[int]
+ T_FIELD_NUMBER: _ClassVar[int]
+ Z_FIELD_NUMBER: _ClassVar[int]
+ i: str
+ m: str
+ s: str
+ t: str
+ title: str
+ z: str
+ def __init__(self, title: _Optional[str] = ..., z: _Optional[str] = ..., m: _Optional[str] = ..., i: _Optional[str] = ..., s: _Optional[str] = ..., t: _Optional[str] = ...) -> None: ...
- MESSAGE_FIELD_NUMBER: builtins.int
- TO_FIELD_NUMBER: builtins.int
- TO_CALLSIGN_FIELD_NUMBER: builtins.int
- message: builtins.str
- """
- The text message
- """
- to: builtins.str
- """
- Uid recipient of the message
- """
- to_callsign: builtins.str
- """
- Callsign of the recipient for the message
- """
- def __init__(
- self,
- *,
- message: builtins.str = ...,
- to: builtins.str | None = ...,
- to_callsign: builtins.str | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_to", b"_to", "_to_callsign", b"_to_callsign", "to", b"to", "to_callsign", b"to_callsign"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_to", b"_to", "_to_callsign", b"_to_callsign", "message", b"message", "to", b"to", "to_callsign", b"to_callsign"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_to", b"_to"]) -> typing.Literal["to"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_to_callsign", b"_to_callsign"]) -> typing.Literal["to_callsign"] | None: ...
+class Team(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-global___GeoChat = GeoChat
+class MemberRole(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-@typing.final
-class Group(google.protobuf.message.Message):
- """
- ATAK Group
- <__group role='Team Member' name='Cyan'/>
- """
+class CotHow(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class CotType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
- ROLE_FIELD_NUMBER: builtins.int
- TEAM_FIELD_NUMBER: builtins.int
- role: global___MemberRole.ValueType
- """
- Role of the group member
- """
- team: global___Team.ValueType
- """
- Team (color)
- Default Cyan
- """
- def __init__(
- self,
- *,
- role: global___MemberRole.ValueType = ...,
- team: global___Team.ValueType = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["role", b"role", "team", b"team"]) -> None: ...
-
-global___Group = Group
-
-@typing.final
-class Status(google.protobuf.message.Message):
- """
- ATAK EUD Status
-
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- BATTERY_FIELD_NUMBER: builtins.int
- battery: builtins.int
- """
- Battery level
- """
- def __init__(
- self,
- *,
- battery: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["battery", b"battery"]) -> None: ...
-
-global___Status = Status
-
-@typing.final
-class Contact(google.protobuf.message.Message):
- """
- ATAK Contact
-
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CALLSIGN_FIELD_NUMBER: builtins.int
- DEVICE_CALLSIGN_FIELD_NUMBER: builtins.int
- callsign: builtins.str
- """
- Callsign
- """
- device_callsign: builtins.str
- """
- Device callsign
-
- IP address of endpoint in integer form (0.0.0.0 default)
- """
- def __init__(
- self,
- *,
- callsign: builtins.str = ...,
- device_callsign: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["callsign", b"callsign", "device_callsign", b"device_callsign"]) -> None: ...
-
-global___Contact = Contact
-
-@typing.final
-class PLI(google.protobuf.message.Message):
- """
- Position Location Information from ATAK
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- LATITUDE_I_FIELD_NUMBER: builtins.int
- LONGITUDE_I_FIELD_NUMBER: builtins.int
- ALTITUDE_FIELD_NUMBER: builtins.int
- SPEED_FIELD_NUMBER: builtins.int
- COURSE_FIELD_NUMBER: builtins.int
- latitude_i: builtins.int
- """
- The new preferred location encoding, multiply by 1e-7 to get degrees
- in floating point
- """
- longitude_i: builtins.int
- """
- The new preferred location encoding, multiply by 1e-7 to get degrees
- in floating point
- """
- altitude: builtins.int
- """
- Altitude (ATAK prefers HAE)
- """
- speed: builtins.int
- """
- Speed
- """
- course: builtins.int
- """
- Course in degrees
- """
- def __init__(
- self,
- *,
- latitude_i: builtins.int = ...,
- longitude_i: builtins.int = ...,
- altitude: builtins.int = ...,
- speed: builtins.int = ...,
- course: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["altitude", b"altitude", "course", b"course", "latitude_i", b"latitude_i", "longitude_i", b"longitude_i", "speed", b"speed"]) -> None: ...
-
-global___PLI = PLI
+class GeoPointSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/cannedmessages_pb2.py b/meshtastic/protobuf/cannedmessages_pb2.py
index 569fe14..d97ee29 100644
--- a/meshtastic/protobuf/cannedmessages_pb2.py
+++ b/meshtastic/protobuf/cannedmessages_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/cannedmessages.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,12 +15,12 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(meshtastic/protobuf/cannedmessages.proto\x12\x13meshtastic.protobuf\"-\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')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.cannedmessages_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.cannedmessages_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\031CannedMessageConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_CANNEDMESSAGEMODULECONFIG']._serialized_start=65
- _globals['_CANNEDMESSAGEMODULECONFIG']._serialized_end=110
+ _CANNEDMESSAGEMODULECONFIG._serialized_start=65
+ _CANNEDMESSAGEMODULECONFIG._serialized_end=110
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/cannedmessages_pb2.pyi b/meshtastic/protobuf/cannedmessages_pb2.pyi
index 33c5e2b..dc34b8a 100644
--- a/meshtastic/protobuf/cannedmessages_pb2.pyi
+++ b/meshtastic/protobuf/cannedmessages_pb2.pyi
@@ -1,33 +1,11 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class CannedMessageModuleConfig(google.protobuf.message.Message):
- """
- Canned message module configuration.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- MESSAGES_FIELD_NUMBER: builtins.int
- messages: builtins.str
- """
- Predefined messages for canned message module separated by '|' characters.
- """
- def __init__(
- self,
- *,
- messages: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["messages", b"messages"]) -> None: ...
-
-global___CannedMessageModuleConfig = CannedMessageModuleConfig
+class CannedMessageModuleConfig(_message.Message):
+ __slots__ = ["messages"]
+ MESSAGES_FIELD_NUMBER: _ClassVar[int]
+ messages: str
+ def __init__(self, messages: _Optional[str] = ...) -> None: ...
diff --git a/meshtastic/protobuf/channel_pb2.py b/meshtastic/protobuf/channel_pb2.py
index 94a5f00..b93271e 100644
--- a/meshtastic/protobuf/channel_pb2.py
+++ b/meshtastic/protobuf/channel_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/channel.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,20 +15,20 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!meshtastic/protobuf/channel.proto\x12\x13meshtastic.protobuf\"\xc1\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<\n\x0fmodule_settings\x18\x07 \x01(\x0b\x32#.meshtastic.protobuf.ModuleSettings\">\n\x0eModuleSettings\x12\x1a\n\x12position_precision\x18\x01 \x01(\r\x12\x10\n\x08is_muted\x18\x02 \x01(\x08\"\xb3\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12\x36\n\x08settings\x18\x02 \x01(\x0b\x32$.meshtastic.protobuf.ChannelSettings\x12/\n\x04role\x18\x03 \x01(\x0e\x32!.meshtastic.protobuf.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')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.channel_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.channel_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\rChannelProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
_CHANNELSETTINGS.fields_by_name['channel_num']._options = None
_CHANNELSETTINGS.fields_by_name['channel_num']._serialized_options = b'\030\001'
- _globals['_CHANNELSETTINGS']._serialized_start=59
- _globals['_CHANNELSETTINGS']._serialized_end=252
- _globals['_MODULESETTINGS']._serialized_start=254
- _globals['_MODULESETTINGS']._serialized_end=316
- _globals['_CHANNEL']._serialized_start=319
- _globals['_CHANNEL']._serialized_end=498
- _globals['_CHANNEL_ROLE']._serialized_start=450
- _globals['_CHANNEL_ROLE']._serialized_end=498
+ _CHANNELSETTINGS._serialized_start=59
+ _CHANNELSETTINGS._serialized_end=252
+ _MODULESETTINGS._serialized_start=254
+ _MODULESETTINGS._serialized_end=316
+ _CHANNEL._serialized_start=319
+ _CHANNEL._serialized_end=498
+ _CHANNEL_ROLE._serialized_start=450
+ _CHANNEL_ROLE._serialized_end=498
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/channel_pb2.pyi b/meshtastic/protobuf/channel_pb2.pyi
index 6e2be59..6adba06 100644
--- a/meshtastic/protobuf/channel_pb2.pyi
+++ b/meshtastic/protobuf/channel_pb2.pyi
@@ -1,234 +1,47 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class Channel(_message.Message):
+ __slots__ = ["index", "role", "settings"]
+ class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ DISABLED: Channel.Role
+ INDEX_FIELD_NUMBER: _ClassVar[int]
+ PRIMARY: Channel.Role
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ SECONDARY: Channel.Role
+ SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ index: int
+ role: Channel.Role
+ settings: ChannelSettings
+ def __init__(self, index: _Optional[int] = ..., settings: _Optional[_Union[ChannelSettings, _Mapping]] = ..., role: _Optional[_Union[Channel.Role, str]] = ...) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class ChannelSettings(_message.Message):
+ __slots__ = ["channel_num", "downlink_enabled", "id", "module_settings", "name", "psk", "uplink_enabled"]
+ CHANNEL_NUM_FIELD_NUMBER: _ClassVar[int]
+ DOWNLINK_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ MODULE_SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ PSK_FIELD_NUMBER: _ClassVar[int]
+ UPLINK_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ channel_num: int
+ downlink_enabled: bool
+ id: int
+ module_settings: ModuleSettings
+ name: str
+ psk: bytes
+ uplink_enabled: bool
+ def __init__(self, channel_num: _Optional[int] = ..., psk: _Optional[bytes] = ..., name: _Optional[str] = ..., id: _Optional[int] = ..., uplink_enabled: bool = ..., downlink_enabled: bool = ..., module_settings: _Optional[_Union[ModuleSettings, _Mapping]] = ...) -> None: ...
-@typing.final
-class ChannelSettings(google.protobuf.message.Message):
- """
- This information can be encoded as a QRcode/url so that other users can configure
- their radio to join the same channel.
- A note about how channel names are shown to users: channelname-X
- poundsymbol is a prefix used to indicate this is a channel name (idea from @professr).
- Where X is a letter from A-Z (base 26) representing a hash of the PSK for this
- channel - so that if the user changes anything about the channel (which does
- force a new PSK) this letter will also change. Thus preventing user confusion if
- two friends try to type in a channel name of "BobsChan" and then can't talk
- because their PSKs will be different.
- The PSK is hashed into this letter by "0x41 + [xor all bytes of the psk ] modulo 26"
- This also allows the option of someday if people have the PSK off (zero), the
- users COULD type in a channel name and be able to talk.
- FIXME: Add description of multi-channel support and how primary vs secondary channels are used.
- FIXME: explain how apps use channels for security.
- explain how remote settings and remote gpio are managed as an example
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CHANNEL_NUM_FIELD_NUMBER: builtins.int
- PSK_FIELD_NUMBER: builtins.int
- NAME_FIELD_NUMBER: builtins.int
- ID_FIELD_NUMBER: builtins.int
- UPLINK_ENABLED_FIELD_NUMBER: builtins.int
- DOWNLINK_ENABLED_FIELD_NUMBER: builtins.int
- MODULE_SETTINGS_FIELD_NUMBER: builtins.int
- channel_num: builtins.int
- """
- Deprecated in favor of LoraConfig.channel_num
- """
- psk: builtins.bytes
- """
- A simple pre-shared key for now for crypto.
- Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
- A special shorthand is used for 1 byte long psks.
- These psks should be treated as only minimally secure,
- because they are listed in this source code.
- Those bytes are mapped using the following scheme:
- `0` = No crypto
- `1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0x01}
- `2` through 10 = The default channel key, except with 1 through 9 added to the last byte.
- Shown to user as simple1 through 10
- """
- name: builtins.str
- """
- A SHORT name that will be packed into the URL.
- Less than 12 bytes.
- Something for end users to call the channel
- If this is the empty string it is assumed that this channel
- is the special (minimally secure) "Default"channel.
- In user interfaces it should be rendered as a local language translation of "X".
- For channel_num hashing empty string will be treated as "X".
- Where "X" is selected based on the English words listed above for ModemPreset
- """
- id: builtins.int
- """
- Used to construct a globally unique channel ID.
- The full globally unique ID will be: "name.id" where ID is shown as base36.
- Assuming that the number of meshtastic users is below 20K (true for a long time)
- the chance of this 64 bit random number colliding with anyone else is super low.
- And the penalty for collision is low as well, it just means that anyone trying to decrypt channel messages might need to
- try multiple candidate channels.
- Any time a non wire compatible change is made to a channel, this field should be regenerated.
- There are a small number of 'special' globally known (and fairly) insecure standard channels.
- Those channels do not have a numeric id included in the settings, but instead it is pulled from
- a table of well known IDs.
- (see Well Known Channels FIXME)
- """
- uplink_enabled: builtins.bool
- """
- If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe
- """
- downlink_enabled: builtins.bool
- """
- If true, messages seen on the internet will be forwarded to the local mesh.
- """
- @property
- def module_settings(self) -> global___ModuleSettings:
- """
- Per-channel module settings.
- """
-
- def __init__(
- self,
- *,
- channel_num: builtins.int = ...,
- psk: builtins.bytes = ...,
- name: builtins.str = ...,
- id: builtins.int = ...,
- uplink_enabled: builtins.bool = ...,
- downlink_enabled: builtins.bool = ...,
- module_settings: global___ModuleSettings | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["module_settings", b"module_settings"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["channel_num", b"channel_num", "downlink_enabled", b"downlink_enabled", "id", b"id", "module_settings", b"module_settings", "name", b"name", "psk", b"psk", "uplink_enabled", b"uplink_enabled"]) -> None: ...
-
-global___ChannelSettings = ChannelSettings
-
-@typing.final
-class ModuleSettings(google.protobuf.message.Message):
- """
- This message is specifically for modules to store per-channel configuration data.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- POSITION_PRECISION_FIELD_NUMBER: builtins.int
- IS_MUTED_FIELD_NUMBER: builtins.int
- position_precision: builtins.int
- """
- Bits of precision for the location sent in position packets.
- """
- is_muted: builtins.bool
- """
- Controls whether or not the client / device should mute the current channel
- Useful for noisy public channels you don't necessarily want to disable
- """
- def __init__(
- self,
- *,
- position_precision: builtins.int = ...,
- is_muted: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["is_muted", b"is_muted", "position_precision", b"position_precision"]) -> None: ...
-
-global___ModuleSettings = ModuleSettings
-
-@typing.final
-class Channel(google.protobuf.message.Message):
- """
- A pair of a channel number, mode and the (sharable) settings for that channel
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Role:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _RoleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Channel._Role.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DISABLED: Channel._Role.ValueType # 0
- """
- This channel is not in use right now
- """
- PRIMARY: Channel._Role.ValueType # 1
- """
- This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY
- """
- SECONDARY: Channel._Role.ValueType # 2
- """
- Secondary channels are only used for encryption/decryption/authentication purposes.
- Their radio settings (freq etc) are ignored, only psk is used.
- """
-
- class Role(_Role, metaclass=_RoleEnumTypeWrapper):
- """
- How this channel is being used (or not).
- Note: this field is an enum to give us options for the future.
- In particular, someday we might make a 'SCANNING' option.
- SCANNING channels could have different frequencies and the radio would
- occasionally check that freq to see if anything is being transmitted.
- For devices that have multiple physical radios attached, we could keep multiple PRIMARY/SCANNING channels active at once to allow
- cross band routing as needed.
- If a device has only a single radio (the common case) only one channel can be PRIMARY at a time
- (but any number of SECONDARY channels can't be sent received on that common frequency)
- """
-
- DISABLED: Channel.Role.ValueType # 0
- """
- This channel is not in use right now
- """
- PRIMARY: Channel.Role.ValueType # 1
- """
- This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY
- """
- SECONDARY: Channel.Role.ValueType # 2
- """
- Secondary channels are only used for encryption/decryption/authentication purposes.
- Their radio settings (freq etc) are ignored, only psk is used.
- """
-
- INDEX_FIELD_NUMBER: builtins.int
- SETTINGS_FIELD_NUMBER: builtins.int
- ROLE_FIELD_NUMBER: builtins.int
- index: builtins.int
- """
- The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
- (Someday - not currently implemented) An index of -1 could be used to mean "set by name",
- in which case the target node will find and set the channel by settings.name.
- """
- role: global___Channel.Role.ValueType
- """
- TODO: REPLACE
- """
- @property
- def settings(self) -> global___ChannelSettings:
- """
- The new settings, or NULL to disable that channel
- """
-
- def __init__(
- self,
- *,
- index: builtins.int = ...,
- settings: global___ChannelSettings | None = ...,
- role: global___Channel.Role.ValueType = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["settings", b"settings"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["index", b"index", "role", b"role", "settings", b"settings"]) -> None: ...
-
-global___Channel = Channel
+class ModuleSettings(_message.Message):
+ __slots__ = ["is_muted", "position_precision"]
+ IS_MUTED_FIELD_NUMBER: _ClassVar[int]
+ POSITION_PRECISION_FIELD_NUMBER: _ClassVar[int]
+ is_muted: bool
+ position_precision: int
+ def __init__(self, position_precision: _Optional[int] = ..., is_muted: bool = ...) -> None: ...
diff --git a/meshtastic/protobuf/clientonly_pb2.py b/meshtastic/protobuf/clientonly_pb2.py
index 7245538..923009f 100644
--- a/meshtastic/protobuf/clientonly_pb2.py
+++ b/meshtastic/protobuf/clientonly_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/clientonly.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -17,12 +17,12 @@ from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$meshtastic/protobuf/clientonly.proto\x12\x13meshtastic.protobuf\x1a#meshtastic/protobuf/localonly.proto\x1a\x1emeshtastic/protobuf/mesh.proto\"\xc4\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\x35\n\x06\x63onfig\x18\x04 \x01(\x0b\x32 .meshtastic.protobuf.LocalConfigH\x03\x88\x01\x01\x12\x42\n\rmodule_config\x18\x05 \x01(\x0b\x32&.meshtastic.protobuf.LocalModuleConfigH\x04\x88\x01\x01\x12:\n\x0e\x66ixed_position\x18\x06 \x01(\x0b\x32\x1d.meshtastic.protobuf.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')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.clientonly_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.clientonly_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\020ClientOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_DEVICEPROFILE']._serialized_start=131
- _globals['_DEVICEPROFILE']._serialized_end=583
+ _DEVICEPROFILE._serialized_start=131
+ _DEVICEPROFILE._serialized_end=583
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/clientonly_pb2.pyi b/meshtastic/protobuf/clientonly_pb2.pyi
index 78725be..cf9f5a6 100644
--- a/meshtastic/protobuf/clientonly_pb2.pyi
+++ b/meshtastic/protobuf/clientonly_pb2.pyi
@@ -1,101 +1,27 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from meshtastic.protobuf import localonly_pb2 as _localonly_pb2
+from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import meshtastic.protobuf.localonly_pb2
-import meshtastic.protobuf.mesh_pb2
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class DeviceProfile(google.protobuf.message.Message):
- """
- This abstraction is used to contain any configuration for provisioning a node on any client.
- It is useful for importing and exporting configurations.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- LONG_NAME_FIELD_NUMBER: builtins.int
- SHORT_NAME_FIELD_NUMBER: builtins.int
- CHANNEL_URL_FIELD_NUMBER: builtins.int
- CONFIG_FIELD_NUMBER: builtins.int
- MODULE_CONFIG_FIELD_NUMBER: builtins.int
- FIXED_POSITION_FIELD_NUMBER: builtins.int
- RINGTONE_FIELD_NUMBER: builtins.int
- CANNED_MESSAGES_FIELD_NUMBER: builtins.int
- long_name: builtins.str
- """
- Long name for the node
- """
- short_name: builtins.str
- """
- Short name of the node
- """
- channel_url: builtins.str
- """
- The url of the channels from our node
- """
- ringtone: builtins.str
- """
- Ringtone for ExternalNotification
- """
- canned_messages: builtins.str
- """
- Predefined messages for CannedMessage
- """
- @property
- def config(self) -> meshtastic.protobuf.localonly_pb2.LocalConfig:
- """
- The Config of the node
- """
-
- @property
- def module_config(self) -> meshtastic.protobuf.localonly_pb2.LocalModuleConfig:
- """
- The ModuleConfig of the node
- """
-
- @property
- def fixed_position(self) -> meshtastic.protobuf.mesh_pb2.Position:
- """
- Fixed position data
- """
-
- def __init__(
- self,
- *,
- long_name: builtins.str | None = ...,
- short_name: builtins.str | None = ...,
- channel_url: builtins.str | None = ...,
- config: meshtastic.protobuf.localonly_pb2.LocalConfig | None = ...,
- module_config: meshtastic.protobuf.localonly_pb2.LocalModuleConfig | None = ...,
- fixed_position: meshtastic.protobuf.mesh_pb2.Position | None = ...,
- ringtone: builtins.str | None = ...,
- canned_messages: builtins.str | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_canned_messages", b"_canned_messages", "_channel_url", b"_channel_url", "_config", b"_config", "_fixed_position", b"_fixed_position", "_long_name", b"_long_name", "_module_config", b"_module_config", "_ringtone", b"_ringtone", "_short_name", b"_short_name", "canned_messages", b"canned_messages", "channel_url", b"channel_url", "config", b"config", "fixed_position", b"fixed_position", "long_name", b"long_name", "module_config", b"module_config", "ringtone", b"ringtone", "short_name", b"short_name"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_canned_messages", b"_canned_messages", "_channel_url", b"_channel_url", "_config", b"_config", "_fixed_position", b"_fixed_position", "_long_name", b"_long_name", "_module_config", b"_module_config", "_ringtone", b"_ringtone", "_short_name", b"_short_name", "canned_messages", b"canned_messages", "channel_url", b"channel_url", "config", b"config", "fixed_position", b"fixed_position", "long_name", b"long_name", "module_config", b"module_config", "ringtone", b"ringtone", "short_name", b"short_name"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_canned_messages", b"_canned_messages"]) -> typing.Literal["canned_messages"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_channel_url", b"_channel_url"]) -> typing.Literal["channel_url"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_config", b"_config"]) -> typing.Literal["config"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_fixed_position", b"_fixed_position"]) -> typing.Literal["fixed_position"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_long_name", b"_long_name"]) -> typing.Literal["long_name"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_module_config", b"_module_config"]) -> typing.Literal["module_config"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ringtone", b"_ringtone"]) -> typing.Literal["ringtone"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_short_name", b"_short_name"]) -> typing.Literal["short_name"] | None: ...
-
-global___DeviceProfile = DeviceProfile
+class DeviceProfile(_message.Message):
+ __slots__ = ["canned_messages", "channel_url", "config", "fixed_position", "long_name", "module_config", "ringtone", "short_name"]
+ CANNED_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+ CHANNEL_URL_FIELD_NUMBER: _ClassVar[int]
+ CONFIG_FIELD_NUMBER: _ClassVar[int]
+ FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
+ LONG_NAME_FIELD_NUMBER: _ClassVar[int]
+ MODULE_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ RINGTONE_FIELD_NUMBER: _ClassVar[int]
+ SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
+ canned_messages: str
+ channel_url: str
+ config: _localonly_pb2.LocalConfig
+ fixed_position: _mesh_pb2.Position
+ long_name: str
+ module_config: _localonly_pb2.LocalModuleConfig
+ ringtone: str
+ short_name: str
+ def __init__(self, long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., channel_url: _Optional[str] = ..., config: _Optional[_Union[_localonly_pb2.LocalConfig, _Mapping]] = ..., module_config: _Optional[_Union[_localonly_pb2.LocalModuleConfig, _Mapping]] = ..., fixed_position: _Optional[_Union[_mesh_pb2.Position, _Mapping]] = ..., ringtone: _Optional[str] = ..., canned_messages: _Optional[str] = ...) -> None: ...
diff --git a/meshtastic/protobuf/config_pb2.py b/meshtastic/protobuf/config_pb2.py
index 85efc94..bdc06e6 100644
--- a/meshtastic/protobuf/config_pb2.py
+++ b/meshtastic/protobuf/config_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/config.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -14,12 +14,12 @@ _sym_db = _symbol_database.Default()
from meshtastic.protobuf import device_ui_pb2 as meshtastic_dot_protobuf_dot_device__ui__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtastic/protobuf/config.proto\x12\x13meshtastic.protobuf\x1a#meshtastic/protobuf/device_ui.proto\"\xe5*\n\x06\x43onfig\x12:\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32(.meshtastic.protobuf.Config.DeviceConfigH\x00\x12>\n\x08position\x18\x02 \x01(\x0b\x32*.meshtastic.protobuf.Config.PositionConfigH\x00\x12\x38\n\x05power\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.Config.PowerConfigH\x00\x12<\n\x07network\x18\x04 \x01(\x0b\x32).meshtastic.protobuf.Config.NetworkConfigH\x00\x12<\n\x07\x64isplay\x18\x05 \x01(\x0b\x32).meshtastic.protobuf.Config.DisplayConfigH\x00\x12\x36\n\x04lora\x18\x06 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfigH\x00\x12@\n\tbluetooth\x18\x07 \x01(\x0b\x32+.meshtastic.protobuf.Config.BluetoothConfigH\x00\x12>\n\x08security\x18\x08 \x01(\x0b\x32*.meshtastic.protobuf.Config.SecurityConfigH\x00\x12\x42\n\nsessionkey\x18\t \x01(\x0b\x32,.meshtastic.protobuf.Config.SessionkeyConfigH\x00\x12\x38\n\tdevice_ui\x18\n \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x1a\x91\x07\n\x0c\x44\x65viceConfig\x12;\n\x04role\x18\x01 \x01(\x0e\x32-.meshtastic.protobuf.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\x12R\n\x10rebroadcast_mode\x18\x06 \x01(\x0e\x32\x38.meshtastic.protobuf.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\x12H\n\x0b\x62uzzer_mode\x18\r \x01(\x0e\x32\x33.meshtastic.protobuf.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\x9a\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\x44\n\x08gps_mode\x18\r \x01(\x0e\x32\x32.meshtastic.protobuf.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\xf7\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\x12K\n\x0c\x61\x64\x64ress_mode\x18\x07 \x01(\x0e\x32\x35.meshtastic.protobuf.Config.NetworkConfig.AddressMode\x12I\n\x0bipv4_config\x18\x08 \x01(\x0b\x32\x34.meshtastic.protobuf.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\xb6\x08\n\rDisplayConfig\x12\x16\n\x0escreen_on_secs\x18\x01 \x01(\r\x12_\n\ngps_format\x18\x02 \x01(\x0e\x32G.meshtastic.protobuf.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\x45\n\x05units\x18\x06 \x01(\x0e\x32\x36.meshtastic.protobuf.Config.DisplayConfig.DisplayUnits\x12@\n\x04oled\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.Config.DisplayConfig.OledType\x12J\n\x0b\x64isplaymode\x18\x08 \x01(\x0e\x32\x35.meshtastic.protobuf.Config.DisplayConfig.DisplayMode\x12\x14\n\x0cheading_bold\x18\t \x01(\x08\x12\x1d\n\x15wake_on_tap_or_motion\x18\n \x01(\x08\x12Y\n\x13\x63ompass_orientation\x18\x0b \x01(\x0e\x32<.meshtastic.protobuf.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\xec\x07\n\nLoRaConfig\x12\x12\n\nuse_preset\x18\x01 \x01(\x08\x12H\n\x0cmodem_preset\x18\x02 \x01(\x0e\x32\x32.meshtastic.protobuf.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\x41\n\x06region\x18\x07 \x01(\x0e\x32\x31.meshtastic.protobuf.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\xb6\x01\n\x0f\x42luetoothConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x45\n\x04mode\x18\x02 \x01(\x0e\x32\x37.meshtastic.protobuf.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')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtastic/protobuf/config.proto\x12\x13meshtastic.protobuf\x1a#meshtastic/protobuf/device_ui.proto\"\xeb-\n\x06\x43onfig\x12:\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32(.meshtastic.protobuf.Config.DeviceConfigH\x00\x12>\n\x08position\x18\x02 \x01(\x0b\x32*.meshtastic.protobuf.Config.PositionConfigH\x00\x12\x38\n\x05power\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.Config.PowerConfigH\x00\x12<\n\x07network\x18\x04 \x01(\x0b\x32).meshtastic.protobuf.Config.NetworkConfigH\x00\x12<\n\x07\x64isplay\x18\x05 \x01(\x0b\x32).meshtastic.protobuf.Config.DisplayConfigH\x00\x12\x36\n\x04lora\x18\x06 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfigH\x00\x12@\n\tbluetooth\x18\x07 \x01(\x0b\x32+.meshtastic.protobuf.Config.BluetoothConfigH\x00\x12>\n\x08security\x18\x08 \x01(\x0b\x32*.meshtastic.protobuf.Config.SecurityConfigH\x00\x12\x42\n\nsessionkey\x18\t \x01(\x0b\x32,.meshtastic.protobuf.Config.SessionkeyConfigH\x00\x12\x38\n\tdevice_ui\x18\n \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x1a\x91\x07\n\x0c\x44\x65viceConfig\x12;\n\x04role\x18\x01 \x01(\x0e\x32-.meshtastic.protobuf.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\x12R\n\x10rebroadcast_mode\x18\x06 \x01(\x0e\x32\x38.meshtastic.protobuf.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\x12H\n\x0b\x62uzzer_mode\x18\r \x01(\x0e\x32\x33.meshtastic.protobuf.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\x9a\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\x44\n\x08gps_mode\x18\r \x01(\x0e\x32\x32.meshtastic.protobuf.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\xf7\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\x12K\n\x0c\x61\x64\x64ress_mode\x18\x07 \x01(\x0e\x32\x35.meshtastic.protobuf.Config.NetworkConfig.AddressMode\x12I\n\x0bipv4_config\x18\x08 \x01(\x0b\x32\x34.meshtastic.protobuf.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\xef\x08\n\rDisplayConfig\x12\x16\n\x0escreen_on_secs\x18\x01 \x01(\r\x12_\n\ngps_format\x18\x02 \x01(\x0e\x32G.meshtastic.protobuf.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\x45\n\x05units\x18\x06 \x01(\x0e\x32\x36.meshtastic.protobuf.Config.DisplayConfig.DisplayUnits\x12@\n\x04oled\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.Config.DisplayConfig.OledType\x12J\n\x0b\x64isplaymode\x18\x08 \x01(\x0e\x32\x35.meshtastic.protobuf.Config.DisplayConfig.DisplayMode\x12\x14\n\x0cheading_bold\x18\t \x01(\x08\x12\x1d\n\x15wake_on_tap_or_motion\x18\n \x01(\x08\x12Y\n\x13\x63ompass_orientation\x18\x0b \x01(\x0e\x32<.meshtastic.protobuf.Config.DisplayConfig.CompassOrientation\x12\x15\n\ruse_12h_clock\x18\x0c \x01(\x08\x12\x1a\n\x12use_long_node_name\x18\r \x01(\x08\x12\x1e\n\x16\x65nable_message_bubbles\x18\x0e \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\"\x7f\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\x12\x17\n\x13OLED_SH1107_ROTATED\x10\x05\"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\xb9\n\n\nLoRaConfig\x12\x12\n\nuse_preset\x18\x01 \x01(\x08\x12H\n\x0cmodem_preset\x18\x02 \x01(\x0e\x32\x32.meshtastic.protobuf.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\x41\n\x06region\x18\x07 \x01(\x0e\x32\x31.meshtastic.protobuf.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\x12I\n\x0c\x66\x65m_lna_mode\x18j \x01(\x0e\x32\x33.meshtastic.protobuf.Config.LoRaConfig.FEM_LNA_Mode\x12\x17\n\x0fserial_hal_only\x18k \x01(\x08\"\x87\x03\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\x12\x0b\n\x07ITU1_2M\x10\x1b\x12\x0b\n\x07ITU2_2M\x10\x1c\x12\n\n\x06\x45U_866\x10\x1d\x12\n\n\x06\x45U_874\x10\x1e\x12\n\n\x06\x45U_917\x10\x1f\x12\x0c\n\x08\x45U_N_868\x10 \x12\x0b\n\x07ITU3_2M\x10!\"\xfd\x01\n\x0bModemPreset\x12\r\n\tLONG_FAST\x10\x00\x12\x11\n\tLONG_SLOW\x10\x01\x1a\x02\x08\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\x12\x0e\n\nLONG_TURBO\x10\t\x12\r\n\tLITE_FAST\x10\n\x12\r\n\tLITE_SLOW\x10\x0b\x12\x0f\n\x0bNARROW_FAST\x10\x0c\x12\x0f\n\x0bNARROW_SLOW\x10\r\":\n\x0c\x46\x45M_LNA_Mode\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x12\x0f\n\x0bNOT_PRESENT\x10\x02\x1a\xb6\x01\n\x0f\x42luetoothConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x45\n\x04mode\x18\x02 \x01(\x0e\x32\x37.meshtastic.protobuf.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')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.config_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.config_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\014ConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
_CONFIG_DEVICECONFIG_ROLE.values_by_name["ROUTER_CLIENT"]._options = None
@@ -38,58 +38,62 @@ if _descriptor._USE_C_DESCRIPTORS == False:
_CONFIG_DISPLAYCONFIG.fields_by_name['gps_format']._serialized_options = b'\030\001'
_CONFIG_DISPLAYCONFIG.fields_by_name['compass_north_top']._options = None
_CONFIG_DISPLAYCONFIG.fields_by_name['compass_north_top']._serialized_options = b'\030\001'
+ _CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_SLOW"]._options = None
+ _CONFIG_LORACONFIG_MODEMPRESET.values_by_name["LONG_SLOW"]._serialized_options = b'\010\001'
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["VERY_LONG_SLOW"]._options = None
_CONFIG_LORACONFIG_MODEMPRESET.values_by_name["VERY_LONG_SLOW"]._serialized_options = b'\010\001'
- _globals['_CONFIG']._serialized_start=95
- _globals['_CONFIG']._serialized_end=5572
- _globals['_CONFIG_DEVICECONFIG']._serialized_start=724
- _globals['_CONFIG_DEVICECONFIG']._serialized_end=1637
- _globals['_CONFIG_DEVICECONFIG_ROLE']._serialized_start=1201
- _globals['_CONFIG_DEVICECONFIG_ROLE']._serialized_end=1413
- _globals['_CONFIG_DEVICECONFIG_REBROADCASTMODE']._serialized_start=1415
- _globals['_CONFIG_DEVICECONFIG_REBROADCASTMODE']._serialized_end=1530
- _globals['_CONFIG_DEVICECONFIG_BUZZERMODE']._serialized_start=1532
- _globals['_CONFIG_DEVICECONFIG_BUZZERMODE']._serialized_end=1637
- _globals['_CONFIG_POSITIONCONFIG']._serialized_start=1640
- _globals['_CONFIG_POSITIONCONFIG']._serialized_end=2306
- _globals['_CONFIG_POSITIONCONFIG_POSITIONFLAGS']._serialized_start=2080
- _globals['_CONFIG_POSITIONCONFIG_POSITIONFLAGS']._serialized_end=2251
- _globals['_CONFIG_POSITIONCONFIG_GPSMODE']._serialized_start=2253
- _globals['_CONFIG_POSITIONCONFIG_GPSMODE']._serialized_end=2306
- _globals['_CONFIG_POWERCONFIG']._serialized_start=2309
- _globals['_CONFIG_POWERCONFIG']._serialized_end=2569
- _globals['_CONFIG_NETWORKCONFIG']._serialized_start=2572
- _globals['_CONFIG_NETWORKCONFIG']._serialized_end=3075
- _globals['_CONFIG_NETWORKCONFIG_IPV4CONFIG']._serialized_start=2914
- _globals['_CONFIG_NETWORKCONFIG_IPV4CONFIG']._serialized_end=2984
- _globals['_CONFIG_NETWORKCONFIG_ADDRESSMODE']._serialized_start=2986
- _globals['_CONFIG_NETWORKCONFIG_ADDRESSMODE']._serialized_end=3021
- _globals['_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS']._serialized_start=3023
- _globals['_CONFIG_NETWORKCONFIG_PROTOCOLFLAGS']._serialized_end=3075
- _globals['_CONFIG_DISPLAYCONFIG']._serialized_start=3078
- _globals['_CONFIG_DISPLAYCONFIG']._serialized_end=4156
- _globals['_CONFIG_DISPLAYCONFIG_DEPRECATEDGPSCOORDINATEFORMAT']._serialized_start=3711
- _globals['_CONFIG_DISPLAYCONFIG_DEPRECATEDGPSCOORDINATEFORMAT']._serialized_end=3754
- _globals['_CONFIG_DISPLAYCONFIG_DISPLAYUNITS']._serialized_start=3756
- _globals['_CONFIG_DISPLAYCONFIG_DISPLAYUNITS']._serialized_end=3796
- _globals['_CONFIG_DISPLAYCONFIG_OLEDTYPE']._serialized_start=3798
- _globals['_CONFIG_DISPLAYCONFIG_OLEDTYPE']._serialized_end=3900
- _globals['_CONFIG_DISPLAYCONFIG_DISPLAYMODE']._serialized_start=3902
- _globals['_CONFIG_DISPLAYCONFIG_DISPLAYMODE']._serialized_end=3967
- _globals['_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION']._serialized_start=3970
- _globals['_CONFIG_DISPLAYCONFIG_COMPASSORIENTATION']._serialized_end=4156
- _globals['_CONFIG_LORACONFIG']._serialized_start=4159
- _globals['_CONFIG_LORACONFIG']._serialized_end=5163
- _globals['_CONFIG_LORACONFIG_REGIONCODE']._serialized_start=4689
- _globals['_CONFIG_LORACONFIG_REGIONCODE']._serialized_end=4991
- _globals['_CONFIG_LORACONFIG_MODEMPRESET']._serialized_start=4994
- _globals['_CONFIG_LORACONFIG_MODEMPRESET']._serialized_end=5163
- _globals['_CONFIG_BLUETOOTHCONFIG']._serialized_start=5166
- _globals['_CONFIG_BLUETOOTHCONFIG']._serialized_end=5348
- _globals['_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE']._serialized_start=5292
- _globals['_CONFIG_BLUETOOTHCONFIG_PAIRINGMODE']._serialized_end=5348
- _globals['_CONFIG_SECURITYCONFIG']._serialized_start=5351
- _globals['_CONFIG_SECURITYCONFIG']._serialized_end=5533
- _globals['_CONFIG_SESSIONKEYCONFIG']._serialized_start=5535
- _globals['_CONFIG_SESSIONKEYCONFIG']._serialized_end=5553
+ _CONFIG._serialized_start=95
+ _CONFIG._serialized_end=5962
+ _CONFIG_DEVICECONFIG._serialized_start=724
+ _CONFIG_DEVICECONFIG._serialized_end=1637
+ _CONFIG_DEVICECONFIG_ROLE._serialized_start=1201
+ _CONFIG_DEVICECONFIG_ROLE._serialized_end=1413
+ _CONFIG_DEVICECONFIG_REBROADCASTMODE._serialized_start=1415
+ _CONFIG_DEVICECONFIG_REBROADCASTMODE._serialized_end=1530
+ _CONFIG_DEVICECONFIG_BUZZERMODE._serialized_start=1532
+ _CONFIG_DEVICECONFIG_BUZZERMODE._serialized_end=1637
+ _CONFIG_POSITIONCONFIG._serialized_start=1640
+ _CONFIG_POSITIONCONFIG._serialized_end=2306
+ _CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_start=2080
+ _CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_end=2251
+ _CONFIG_POSITIONCONFIG_GPSMODE._serialized_start=2253
+ _CONFIG_POSITIONCONFIG_GPSMODE._serialized_end=2306
+ _CONFIG_POWERCONFIG._serialized_start=2309
+ _CONFIG_POWERCONFIG._serialized_end=2569
+ _CONFIG_NETWORKCONFIG._serialized_start=2572
+ _CONFIG_NETWORKCONFIG._serialized_end=3075
+ _CONFIG_NETWORKCONFIG_IPV4CONFIG._serialized_start=2914
+ _CONFIG_NETWORKCONFIG_IPV4CONFIG._serialized_end=2984
+ _CONFIG_NETWORKCONFIG_ADDRESSMODE._serialized_start=2986
+ _CONFIG_NETWORKCONFIG_ADDRESSMODE._serialized_end=3021
+ _CONFIG_NETWORKCONFIG_PROTOCOLFLAGS._serialized_start=3023
+ _CONFIG_NETWORKCONFIG_PROTOCOLFLAGS._serialized_end=3075
+ _CONFIG_DISPLAYCONFIG._serialized_start=3078
+ _CONFIG_DISPLAYCONFIG._serialized_end=4213
+ _CONFIG_DISPLAYCONFIG_DEPRECATEDGPSCOORDINATEFORMAT._serialized_start=3743
+ _CONFIG_DISPLAYCONFIG_DEPRECATEDGPSCOORDINATEFORMAT._serialized_end=3786
+ _CONFIG_DISPLAYCONFIG_DISPLAYUNITS._serialized_start=3788
+ _CONFIG_DISPLAYCONFIG_DISPLAYUNITS._serialized_end=3828
+ _CONFIG_DISPLAYCONFIG_OLEDTYPE._serialized_start=3830
+ _CONFIG_DISPLAYCONFIG_OLEDTYPE._serialized_end=3957
+ _CONFIG_DISPLAYCONFIG_DISPLAYMODE._serialized_start=3959
+ _CONFIG_DISPLAYCONFIG_DISPLAYMODE._serialized_end=4024
+ _CONFIG_DISPLAYCONFIG_COMPASSORIENTATION._serialized_start=4027
+ _CONFIG_DISPLAYCONFIG_COMPASSORIENTATION._serialized_end=4213
+ _CONFIG_LORACONFIG._serialized_start=4216
+ _CONFIG_LORACONFIG._serialized_end=5553
+ _CONFIG_LORACONFIG_REGIONCODE._serialized_start=4846
+ _CONFIG_LORACONFIG_REGIONCODE._serialized_end=5237
+ _CONFIG_LORACONFIG_MODEMPRESET._serialized_start=5240
+ _CONFIG_LORACONFIG_MODEMPRESET._serialized_end=5493
+ _CONFIG_LORACONFIG_FEM_LNA_MODE._serialized_start=5495
+ _CONFIG_LORACONFIG_FEM_LNA_MODE._serialized_end=5553
+ _CONFIG_BLUETOOTHCONFIG._serialized_start=5556
+ _CONFIG_BLUETOOTHCONFIG._serialized_end=5738
+ _CONFIG_BLUETOOTHCONFIG_PAIRINGMODE._serialized_start=5682
+ _CONFIG_BLUETOOTHCONFIG_PAIRINGMODE._serialized_end=5738
+ _CONFIG_SECURITYCONFIG._serialized_start=5741
+ _CONFIG_SECURITYCONFIG._serialized_end=5923
+ _CONFIG_SESSIONKEYCONFIG._serialized_start=5925
+ _CONFIG_SESSIONKEYCONFIG._serialized_end=5943
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/config_pb2.pyi b/meshtastic/protobuf/config_pb2.pyi
index e504e2f..284589d 100644
--- a/meshtastic/protobuf/config_pb2.pyi
+++ b/meshtastic/protobuf/config_pb2.pyi
@@ -1,1895 +1,395 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
-
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.internal.containers
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import meshtastic.protobuf.device_ui_pb2
-import sys
-import typing
-
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class Config(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- @typing.final
- class DeviceConfig(google.protobuf.message.Message):
- """
- Configuration
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Role:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _RoleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DeviceConfig._Role.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- CLIENT: Config.DeviceConfig._Role.ValueType # 0
- """
- Description: App connected or stand alone messaging device.
- Technical Details: Default Role
- """
- CLIENT_MUTE: Config.DeviceConfig._Role.ValueType # 1
- """
- Description: Device that does not forward packets from other devices.
- """
- ROUTER: Config.DeviceConfig._Role.ValueType # 2
- """
- Description: Infrastructure node for extending network coverage by relaying messages. Visible in Nodes list.
- Technical Details: Mesh packets will prefer to be routed over this node. This node will not be used by client apps.
- The wifi radio and the oled screen will be put to sleep.
- This mode may still potentially have higher power usage due to it's preference in message rebroadcasting on the mesh.
- """
- ROUTER_CLIENT: Config.DeviceConfig._Role.ValueType # 3
- """
- Description: Combination of both ROUTER and CLIENT. Not for mobile devices.
- Deprecated in v2.3.15 because improper usage is impacting public meshes: Use ROUTER or CLIENT instead.
- """
- REPEATER: Config.DeviceConfig._Role.ValueType # 4
- """
- Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list.
- Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry
- or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate.
- Deprecated in v2.7.11 because it creates "holes" in the mesh rebroadcast chain.
- """
- TRACKER: Config.DeviceConfig._Role.ValueType # 5
- """
- Description: Broadcasts GPS position packets as priority.
- Technical Details: Position Mesh packets will be prioritized higher and sent more frequently by default.
- When used in conjunction with power.is_power_saving = true, nodes will wake up,
- send position, and then sleep for position.position_broadcast_secs seconds.
- """
- SENSOR: Config.DeviceConfig._Role.ValueType # 6
- """
- Description: Broadcasts telemetry packets as priority.
- Technical Details: Telemetry Mesh packets will be prioritized higher and sent more frequently by default.
- When used in conjunction with power.is_power_saving = true, nodes will wake up,
- send environment telemetry, and then sleep for telemetry.environment_update_interval seconds.
- """
- TAK: Config.DeviceConfig._Role.ValueType # 7
- """
- Description: Optimized for ATAK system communication and reduces routine broadcasts.
- Technical Details: Used for nodes dedicated for connection to an ATAK EUD.
- Turns off many of the routine broadcasts to favor CoT packet stream
- from the Meshtastic ATAK plugin -> IMeshService -> Node
- """
- CLIENT_HIDDEN: Config.DeviceConfig._Role.ValueType # 8
- """
- Description: Device that only broadcasts as needed for stealth or power savings.
- Technical Details: Used for nodes that "only speak when spoken to"
- Turns all of the routine broadcasts but allows for ad-hoc communication
- Still rebroadcasts, but with local only rebroadcast mode (known meshes only)
- Can be used for clandestine operation or to dramatically reduce airtime / power consumption
- """
- LOST_AND_FOUND: Config.DeviceConfig._Role.ValueType # 9
- """
- Description: Broadcasts location as message to default channel regularly for to assist with device recovery.
- Technical Details: Used to automatically send a text message to the mesh
- with the current position of the device on a frequent interval:
- "I'm lost! Position: lat / long"
- """
- TAK_TRACKER: Config.DeviceConfig._Role.ValueType # 10
- """
- Description: Enables automatic TAK PLI broadcasts and reduces routine broadcasts.
- Technical Details: Turns off many of the routine broadcasts to favor ATAK CoT packet stream
- and automatic TAK PLI (position location information) broadcasts.
- Uses position module configuration to determine TAK PLI broadcast interval.
- """
- ROUTER_LATE: Config.DeviceConfig._Role.ValueType # 11
- """
- Description: Will always rebroadcast packets, but will do so after all other modes.
- Technical Details: Used for router nodes that are intended to provide additional coverage
- in areas not already covered by other routers, or to bridge around problematic terrain,
- but should not be given priority over other routers in order to avoid unnecessaraily
- consuming hops.
- """
- CLIENT_BASE: Config.DeviceConfig._Role.ValueType # 12
- """
- Description: Treats packets from or to favorited nodes as ROUTER, and all other packets as CLIENT.
- Technical Details: Used for stronger attic/roof nodes to distribute messages more widely
- from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes
- where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node.
- """
-
- class Role(_Role, metaclass=_RoleEnumTypeWrapper):
- """
- Defines the device's role on the Mesh network
- """
-
- CLIENT: Config.DeviceConfig.Role.ValueType # 0
- """
- Description: App connected or stand alone messaging device.
- Technical Details: Default Role
- """
- CLIENT_MUTE: Config.DeviceConfig.Role.ValueType # 1
- """
- Description: Device that does not forward packets from other devices.
- """
- ROUTER: Config.DeviceConfig.Role.ValueType # 2
- """
- Description: Infrastructure node for extending network coverage by relaying messages. Visible in Nodes list.
- Technical Details: Mesh packets will prefer to be routed over this node. This node will not be used by client apps.
- The wifi radio and the oled screen will be put to sleep.
- This mode may still potentially have higher power usage due to it's preference in message rebroadcasting on the mesh.
- """
- ROUTER_CLIENT: Config.DeviceConfig.Role.ValueType # 3
- """
- Description: Combination of both ROUTER and CLIENT. Not for mobile devices.
- Deprecated in v2.3.15 because improper usage is impacting public meshes: Use ROUTER or CLIENT instead.
- """
- REPEATER: Config.DeviceConfig.Role.ValueType # 4
- """
- Description: Infrastructure node for extending network coverage by relaying messages with minimal overhead. Not visible in Nodes list.
- Technical Details: Mesh packets will simply be rebroadcasted over this node. Nodes configured with this role will not originate NodeInfo, Position, Telemetry
- or any other packet type. They will simply rebroadcast any mesh packets on the same frequency, channel num, spread factor, and coding rate.
- Deprecated in v2.7.11 because it creates "holes" in the mesh rebroadcast chain.
- """
- TRACKER: Config.DeviceConfig.Role.ValueType # 5
- """
- Description: Broadcasts GPS position packets as priority.
- Technical Details: Position Mesh packets will be prioritized higher and sent more frequently by default.
- When used in conjunction with power.is_power_saving = true, nodes will wake up,
- send position, and then sleep for position.position_broadcast_secs seconds.
- """
- SENSOR: Config.DeviceConfig.Role.ValueType # 6
- """
- Description: Broadcasts telemetry packets as priority.
- Technical Details: Telemetry Mesh packets will be prioritized higher and sent more frequently by default.
- When used in conjunction with power.is_power_saving = true, nodes will wake up,
- send environment telemetry, and then sleep for telemetry.environment_update_interval seconds.
- """
- TAK: Config.DeviceConfig.Role.ValueType # 7
- """
- Description: Optimized for ATAK system communication and reduces routine broadcasts.
- Technical Details: Used for nodes dedicated for connection to an ATAK EUD.
- Turns off many of the routine broadcasts to favor CoT packet stream
- from the Meshtastic ATAK plugin -> IMeshService -> Node
- """
- CLIENT_HIDDEN: Config.DeviceConfig.Role.ValueType # 8
- """
- Description: Device that only broadcasts as needed for stealth or power savings.
- Technical Details: Used for nodes that "only speak when spoken to"
- Turns all of the routine broadcasts but allows for ad-hoc communication
- Still rebroadcasts, but with local only rebroadcast mode (known meshes only)
- Can be used for clandestine operation or to dramatically reduce airtime / power consumption
- """
- LOST_AND_FOUND: Config.DeviceConfig.Role.ValueType # 9
- """
- Description: Broadcasts location as message to default channel regularly for to assist with device recovery.
- Technical Details: Used to automatically send a text message to the mesh
- with the current position of the device on a frequent interval:
- "I'm lost! Position: lat / long"
- """
- TAK_TRACKER: Config.DeviceConfig.Role.ValueType # 10
- """
- Description: Enables automatic TAK PLI broadcasts and reduces routine broadcasts.
- Technical Details: Turns off many of the routine broadcasts to favor ATAK CoT packet stream
- and automatic TAK PLI (position location information) broadcasts.
- Uses position module configuration to determine TAK PLI broadcast interval.
- """
- ROUTER_LATE: Config.DeviceConfig.Role.ValueType # 11
- """
- Description: Will always rebroadcast packets, but will do so after all other modes.
- Technical Details: Used for router nodes that are intended to provide additional coverage
- in areas not already covered by other routers, or to bridge around problematic terrain,
- but should not be given priority over other routers in order to avoid unnecessaraily
- consuming hops.
- """
- CLIENT_BASE: Config.DeviceConfig.Role.ValueType # 12
- """
- Description: Treats packets from or to favorited nodes as ROUTER, and all other packets as CLIENT.
- Technical Details: Used for stronger attic/roof nodes to distribute messages more widely
- from weaker, indoor, or less-well-positioned nodes. Recommended for users with multiple nodes
- where one CLIENT_BASE acts as a more powerful base station, such as an attic/roof node.
- """
-
- class _RebroadcastMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _RebroadcastModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DeviceConfig._RebroadcastMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- ALL: Config.DeviceConfig._RebroadcastMode.ValueType # 0
- """
- Default behavior.
- Rebroadcast any observed message, if it was on our private channel or from another mesh with the same lora params.
- """
- ALL_SKIP_DECODING: Config.DeviceConfig._RebroadcastMode.ValueType # 1
- """
- Same as behavior as ALL but skips packet decoding and simply rebroadcasts them.
- Only available in Repeater role. Setting this on any other roles will result in ALL behavior.
- """
- LOCAL_ONLY: Config.DeviceConfig._RebroadcastMode.ValueType # 2
- """
- Ignores observed messages from foreign meshes that are open or those which it cannot decrypt.
- Only rebroadcasts message on the nodes local primary / secondary channels.
- """
- KNOWN_ONLY: Config.DeviceConfig._RebroadcastMode.ValueType # 3
- """
- Ignores observed messages from foreign meshes like LOCAL_ONLY,
- but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB)
- """
- NONE: Config.DeviceConfig._RebroadcastMode.ValueType # 4
- """
- Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role.
- """
- CORE_PORTNUMS_ONLY: Config.DeviceConfig._RebroadcastMode.ValueType # 5
- """
- Ignores packets from non-standard portnums such as: TAK, RangeTest, PaxCounter, etc.
- Only rebroadcasts packets with standard portnums: NodeInfo, Text, Position, Telemetry, and Routing.
- """
-
- class RebroadcastMode(_RebroadcastMode, metaclass=_RebroadcastModeEnumTypeWrapper):
- """
- Defines the device's behavior for how messages are rebroadcast
- """
-
- ALL: Config.DeviceConfig.RebroadcastMode.ValueType # 0
- """
- Default behavior.
- Rebroadcast any observed message, if it was on our private channel or from another mesh with the same lora params.
- """
- ALL_SKIP_DECODING: Config.DeviceConfig.RebroadcastMode.ValueType # 1
- """
- Same as behavior as ALL but skips packet decoding and simply rebroadcasts them.
- Only available in Repeater role. Setting this on any other roles will result in ALL behavior.
- """
- LOCAL_ONLY: Config.DeviceConfig.RebroadcastMode.ValueType # 2
- """
- Ignores observed messages from foreign meshes that are open or those which it cannot decrypt.
- Only rebroadcasts message on the nodes local primary / secondary channels.
- """
- KNOWN_ONLY: Config.DeviceConfig.RebroadcastMode.ValueType # 3
- """
- Ignores observed messages from foreign meshes like LOCAL_ONLY,
- but takes it step further by also ignoring messages from nodenums not in the node's known list (NodeDB)
- """
- NONE: Config.DeviceConfig.RebroadcastMode.ValueType # 4
- """
- Only permitted for SENSOR, TRACKER and TAK_TRACKER roles, this will inhibit all rebroadcasts, not unlike CLIENT_MUTE role.
- """
- CORE_PORTNUMS_ONLY: Config.DeviceConfig.RebroadcastMode.ValueType # 5
- """
- Ignores packets from non-standard portnums such as: TAK, RangeTest, PaxCounter, etc.
- Only rebroadcasts packets with standard portnums: NodeInfo, Text, Position, Telemetry, and Routing.
- """
-
- class _BuzzerMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _BuzzerModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DeviceConfig._BuzzerMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- ALL_ENABLED: Config.DeviceConfig._BuzzerMode.ValueType # 0
- """
- Default behavior.
- Buzzer is enabled for all audio feedback including button presses and alerts.
- """
- DISABLED: Config.DeviceConfig._BuzzerMode.ValueType # 1
- """
- Disabled.
- All buzzer audio feedback is disabled.
- """
- NOTIFICATIONS_ONLY: Config.DeviceConfig._BuzzerMode.ValueType # 2
- """
- Notifications Only.
- Buzzer is enabled only for notifications and alerts, but not for button presses.
- External notification config determines the specifics of the notification behavior.
- """
- SYSTEM_ONLY: Config.DeviceConfig._BuzzerMode.ValueType # 3
- """
- Non-notification system buzzer tones only.
- Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts.
- """
- DIRECT_MSG_ONLY: Config.DeviceConfig._BuzzerMode.ValueType # 4
- """
- Direct Message notifications only.
- Buzzer is enabled only for direct messages and alerts, but not for button presses.
- External notification config determines the specifics of the notification behavior.
- """
-
- class BuzzerMode(_BuzzerMode, metaclass=_BuzzerModeEnumTypeWrapper):
- """
- Defines buzzer behavior for audio feedback
- """
-
- ALL_ENABLED: Config.DeviceConfig.BuzzerMode.ValueType # 0
- """
- Default behavior.
- Buzzer is enabled for all audio feedback including button presses and alerts.
- """
- DISABLED: Config.DeviceConfig.BuzzerMode.ValueType # 1
- """
- Disabled.
- All buzzer audio feedback is disabled.
- """
- NOTIFICATIONS_ONLY: Config.DeviceConfig.BuzzerMode.ValueType # 2
- """
- Notifications Only.
- Buzzer is enabled only for notifications and alerts, but not for button presses.
- External notification config determines the specifics of the notification behavior.
- """
- SYSTEM_ONLY: Config.DeviceConfig.BuzzerMode.ValueType # 3
- """
- Non-notification system buzzer tones only.
- Buzzer is enabled only for non-notification tones such as button presses, startup, shutdown, but not for alerts.
- """
- DIRECT_MSG_ONLY: Config.DeviceConfig.BuzzerMode.ValueType # 4
- """
- Direct Message notifications only.
- Buzzer is enabled only for direct messages and alerts, but not for button presses.
- External notification config determines the specifics of the notification behavior.
- """
-
- ROLE_FIELD_NUMBER: builtins.int
- SERIAL_ENABLED_FIELD_NUMBER: builtins.int
- BUTTON_GPIO_FIELD_NUMBER: builtins.int
- BUZZER_GPIO_FIELD_NUMBER: builtins.int
- REBROADCAST_MODE_FIELD_NUMBER: builtins.int
- NODE_INFO_BROADCAST_SECS_FIELD_NUMBER: builtins.int
- DOUBLE_TAP_AS_BUTTON_PRESS_FIELD_NUMBER: builtins.int
- IS_MANAGED_FIELD_NUMBER: builtins.int
- DISABLE_TRIPLE_CLICK_FIELD_NUMBER: builtins.int
- TZDEF_FIELD_NUMBER: builtins.int
- LED_HEARTBEAT_DISABLED_FIELD_NUMBER: builtins.int
- BUZZER_MODE_FIELD_NUMBER: builtins.int
- role: global___Config.DeviceConfig.Role.ValueType
- """
- Sets the role of node
- """
- serial_enabled: builtins.bool
- """
- Disabling this will disable the SerialConsole by not initilizing the StreamAPI
- Moved to SecurityConfig
- """
- button_gpio: builtins.int
- """
- For boards without a hard wired button, this is the pin number that will be used
- Boards that have more than one button can swap the function with this one. defaults to BUTTON_PIN if defined.
- """
- buzzer_gpio: builtins.int
- """
- For boards without a PWM buzzer, this is the pin number that will be used
- Defaults to PIN_BUZZER if defined.
- """
- rebroadcast_mode: global___Config.DeviceConfig.RebroadcastMode.ValueType
- """
- Sets the role of node
- """
- node_info_broadcast_secs: builtins.int
- """
- Send our nodeinfo this often
- Defaults to 900 Seconds (15 minutes)
- """
- double_tap_as_button_press: builtins.bool
- """
- Treat double tap interrupt on supported accelerometers as a button press if set to true
- """
- is_managed: builtins.bool
- """
- If true, device is considered to be "managed" by a mesh administrator
- Clients should then limit available configuration and administrative options inside the user interface
- Moved to SecurityConfig
- """
- disable_triple_click: builtins.bool
- """
- Disables the triple-press of user button to enable or disable GPS
- """
- tzdef: builtins.str
- """
- POSIX Timezone definition string from https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv.
- """
- led_heartbeat_disabled: builtins.bool
- """
- If true, disable the default blinking LED (LED_PIN) behavior on the device
- """
- buzzer_mode: global___Config.DeviceConfig.BuzzerMode.ValueType
- """
- Controls buzzer behavior for audio feedback
- Defaults to ENABLED
- """
- def __init__(
- self,
- *,
- role: global___Config.DeviceConfig.Role.ValueType = ...,
- serial_enabled: builtins.bool = ...,
- button_gpio: builtins.int = ...,
- buzzer_gpio: builtins.int = ...,
- rebroadcast_mode: global___Config.DeviceConfig.RebroadcastMode.ValueType = ...,
- node_info_broadcast_secs: builtins.int = ...,
- double_tap_as_button_press: builtins.bool = ...,
- is_managed: builtins.bool = ...,
- disable_triple_click: builtins.bool = ...,
- tzdef: builtins.str = ...,
- led_heartbeat_disabled: builtins.bool = ...,
- buzzer_mode: global___Config.DeviceConfig.BuzzerMode.ValueType = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["button_gpio", b"button_gpio", "buzzer_gpio", b"buzzer_gpio", "buzzer_mode", b"buzzer_mode", "disable_triple_click", b"disable_triple_click", "double_tap_as_button_press", b"double_tap_as_button_press", "is_managed", b"is_managed", "led_heartbeat_disabled", b"led_heartbeat_disabled", "node_info_broadcast_secs", b"node_info_broadcast_secs", "rebroadcast_mode", b"rebroadcast_mode", "role", b"role", "serial_enabled", b"serial_enabled", "tzdef", b"tzdef"]) -> None: ...
-
- @typing.final
- class PositionConfig(google.protobuf.message.Message):
- """
- Position Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _PositionFlags:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _PositionFlagsEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.PositionConfig._PositionFlags.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: Config.PositionConfig._PositionFlags.ValueType # 0
- """
- Required for compilation
- """
- ALTITUDE: Config.PositionConfig._PositionFlags.ValueType # 1
- """
- Include an altitude value (if available)
- """
- ALTITUDE_MSL: Config.PositionConfig._PositionFlags.ValueType # 2
- """
- Altitude value is MSL
- """
- GEOIDAL_SEPARATION: Config.PositionConfig._PositionFlags.ValueType # 4
- """
- Include geoidal separation
- """
- DOP: Config.PositionConfig._PositionFlags.ValueType # 8
- """
- Include the DOP value ; PDOP used by default, see below
- """
- HVDOP: Config.PositionConfig._PositionFlags.ValueType # 16
- """
- If POS_DOP set, send separate HDOP / VDOP values instead of PDOP
- """
- SATINVIEW: Config.PositionConfig._PositionFlags.ValueType # 32
- """
- Include number of "satellites in view"
- """
- SEQ_NO: Config.PositionConfig._PositionFlags.ValueType # 64
- """
- Include a sequence number incremented per packet
- """
- TIMESTAMP: Config.PositionConfig._PositionFlags.ValueType # 128
- """
- Include positional timestamp (from GPS solution)
- """
- HEADING: Config.PositionConfig._PositionFlags.ValueType # 256
- """
- Include positional heading
- Intended for use with vehicle not walking speeds
- walking speeds are likely to be error prone like the compass
- """
- SPEED: Config.PositionConfig._PositionFlags.ValueType # 512
- """
- Include positional speed
- Intended for use with vehicle not walking speeds
- walking speeds are likely to be error prone like the compass
- """
-
- class PositionFlags(_PositionFlags, metaclass=_PositionFlagsEnumTypeWrapper):
- """
- Bit field of boolean configuration options, indicating which optional
- fields to include when assembling POSITION messages.
- Longitude, latitude, altitude, speed, heading, and DOP
- are always included (also time if GPS-synced)
- NOTE: the more fields are included, the larger the message will be -
- leading to longer airtime and a higher risk of packet loss
- """
-
- UNSET: Config.PositionConfig.PositionFlags.ValueType # 0
- """
- Required for compilation
- """
- ALTITUDE: Config.PositionConfig.PositionFlags.ValueType # 1
- """
- Include an altitude value (if available)
- """
- ALTITUDE_MSL: Config.PositionConfig.PositionFlags.ValueType # 2
- """
- Altitude value is MSL
- """
- GEOIDAL_SEPARATION: Config.PositionConfig.PositionFlags.ValueType # 4
- """
- Include geoidal separation
- """
- DOP: Config.PositionConfig.PositionFlags.ValueType # 8
- """
- Include the DOP value ; PDOP used by default, see below
- """
- HVDOP: Config.PositionConfig.PositionFlags.ValueType # 16
- """
- If POS_DOP set, send separate HDOP / VDOP values instead of PDOP
- """
- SATINVIEW: Config.PositionConfig.PositionFlags.ValueType # 32
- """
- Include number of "satellites in view"
- """
- SEQ_NO: Config.PositionConfig.PositionFlags.ValueType # 64
- """
- Include a sequence number incremented per packet
- """
- TIMESTAMP: Config.PositionConfig.PositionFlags.ValueType # 128
- """
- Include positional timestamp (from GPS solution)
- """
- HEADING: Config.PositionConfig.PositionFlags.ValueType # 256
- """
- Include positional heading
- Intended for use with vehicle not walking speeds
- walking speeds are likely to be error prone like the compass
- """
- SPEED: Config.PositionConfig.PositionFlags.ValueType # 512
- """
- Include positional speed
- Intended for use with vehicle not walking speeds
- walking speeds are likely to be error prone like the compass
- """
-
- class _GpsMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _GpsModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.PositionConfig._GpsMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DISABLED: Config.PositionConfig._GpsMode.ValueType # 0
- """
- GPS is present but disabled
- """
- ENABLED: Config.PositionConfig._GpsMode.ValueType # 1
- """
- GPS is present and enabled
- """
- NOT_PRESENT: Config.PositionConfig._GpsMode.ValueType # 2
- """
- GPS is not present on the device
- """
-
- class GpsMode(_GpsMode, metaclass=_GpsModeEnumTypeWrapper): ...
- DISABLED: Config.PositionConfig.GpsMode.ValueType # 0
- """
- GPS is present but disabled
- """
- ENABLED: Config.PositionConfig.GpsMode.ValueType # 1
- """
- GPS is present and enabled
- """
- NOT_PRESENT: Config.PositionConfig.GpsMode.ValueType # 2
- """
- GPS is not present on the device
- """
-
- POSITION_BROADCAST_SECS_FIELD_NUMBER: builtins.int
- POSITION_BROADCAST_SMART_ENABLED_FIELD_NUMBER: builtins.int
- FIXED_POSITION_FIELD_NUMBER: builtins.int
- GPS_ENABLED_FIELD_NUMBER: builtins.int
- GPS_UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- GPS_ATTEMPT_TIME_FIELD_NUMBER: builtins.int
- POSITION_FLAGS_FIELD_NUMBER: builtins.int
- RX_GPIO_FIELD_NUMBER: builtins.int
- TX_GPIO_FIELD_NUMBER: builtins.int
- BROADCAST_SMART_MINIMUM_DISTANCE_FIELD_NUMBER: builtins.int
- BROADCAST_SMART_MINIMUM_INTERVAL_SECS_FIELD_NUMBER: builtins.int
- GPS_EN_GPIO_FIELD_NUMBER: builtins.int
- GPS_MODE_FIELD_NUMBER: builtins.int
- position_broadcast_secs: builtins.int
- """
- We should send our position this often (but only if it has changed significantly)
- Defaults to 15 minutes
- """
- position_broadcast_smart_enabled: builtins.bool
- """
- Adaptive position braoadcast, which is now the default.
- """
- fixed_position: builtins.bool
- """
- If set, this node is at a fixed position.
- We will generate GPS position updates at the regular interval, but use whatever the last lat/lon/alt we have for the node.
- The lat/lon/alt can be set by an internal GPS or with the help of the app.
- """
- gps_enabled: builtins.bool
- """
- Is GPS enabled for this node?
- """
- gps_update_interval: builtins.int
- """
- How often should we try to get GPS position (in seconds)
- or zero for the default of once every 30 seconds
- or a very large value (maxint) to update only once at boot.
- """
- gps_attempt_time: builtins.int
- """
- Deprecated in favor of using smart / regular broadcast intervals as implicit attempt time
- """
- position_flags: builtins.int
- """
- Bit field of boolean configuration options for POSITION messages
- (bitwise OR of PositionFlags)
- """
- rx_gpio: builtins.int
- """
- (Re)define GPS_RX_PIN for your board.
- """
- tx_gpio: builtins.int
- """
- (Re)define GPS_TX_PIN for your board.
- """
- broadcast_smart_minimum_distance: builtins.int
- """
- The minimum distance in meters traveled (since the last send) before we can send a position to the mesh if position_broadcast_smart_enabled
- """
- broadcast_smart_minimum_interval_secs: builtins.int
- """
- The minimum number of seconds (since the last send) before we can send a position to the mesh if position_broadcast_smart_enabled
- """
- gps_en_gpio: builtins.int
- """
- (Re)define PIN_GPS_EN for your board.
- """
- gps_mode: global___Config.PositionConfig.GpsMode.ValueType
- """
- Set where GPS is enabled, disabled, or not present
- """
- def __init__(
- self,
- *,
- position_broadcast_secs: builtins.int = ...,
- position_broadcast_smart_enabled: builtins.bool = ...,
- fixed_position: builtins.bool = ...,
- gps_enabled: builtins.bool = ...,
- gps_update_interval: builtins.int = ...,
- gps_attempt_time: builtins.int = ...,
- position_flags: builtins.int = ...,
- rx_gpio: builtins.int = ...,
- tx_gpio: builtins.int = ...,
- broadcast_smart_minimum_distance: builtins.int = ...,
- broadcast_smart_minimum_interval_secs: builtins.int = ...,
- gps_en_gpio: builtins.int = ...,
- gps_mode: global___Config.PositionConfig.GpsMode.ValueType = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["broadcast_smart_minimum_distance", b"broadcast_smart_minimum_distance", "broadcast_smart_minimum_interval_secs", b"broadcast_smart_minimum_interval_secs", "fixed_position", b"fixed_position", "gps_attempt_time", b"gps_attempt_time", "gps_en_gpio", b"gps_en_gpio", "gps_enabled", b"gps_enabled", "gps_mode", b"gps_mode", "gps_update_interval", b"gps_update_interval", "position_broadcast_secs", b"position_broadcast_secs", "position_broadcast_smart_enabled", b"position_broadcast_smart_enabled", "position_flags", b"position_flags", "rx_gpio", b"rx_gpio", "tx_gpio", b"tx_gpio"]) -> None: ...
-
- @typing.final
- class PowerConfig(google.protobuf.message.Message):
- """
- Power Config\\
- See [Power Config](/docs/settings/config/power) for additional power config details.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- IS_POWER_SAVING_FIELD_NUMBER: builtins.int
- ON_BATTERY_SHUTDOWN_AFTER_SECS_FIELD_NUMBER: builtins.int
- ADC_MULTIPLIER_OVERRIDE_FIELD_NUMBER: builtins.int
- WAIT_BLUETOOTH_SECS_FIELD_NUMBER: builtins.int
- SDS_SECS_FIELD_NUMBER: builtins.int
- LS_SECS_FIELD_NUMBER: builtins.int
- MIN_WAKE_SECS_FIELD_NUMBER: builtins.int
- DEVICE_BATTERY_INA_ADDRESS_FIELD_NUMBER: builtins.int
- POWERMON_ENABLES_FIELD_NUMBER: builtins.int
- is_power_saving: builtins.bool
- """
- Description: Will sleep everything as much as possible, for the tracker and sensor role this will also include the lora radio.
- Don't use this setting if you want to use your device with the phone apps or are using a device without a user button.
- Technical Details: Works for ESP32 devices and NRF52 devices in the Sensor or Tracker roles
- """
- on_battery_shutdown_after_secs: builtins.int
- """
- Description: If non-zero, the device will fully power off this many seconds after external power is removed.
- """
- adc_multiplier_override: builtins.float
- """
- Ratio of voltage divider for battery pin eg. 3.20 (R1=100k, R2=220k)
- Overrides the ADC_MULTIPLIER defined in variant for battery voltage calculation.
- https://meshtastic.org/docs/configuration/radio/power/#adc-multiplier-override
- Should be set to floating point value between 2 and 6
- """
- wait_bluetooth_secs: builtins.int
- """
- Description: The number of seconds for to wait before turning off BLE in No Bluetooth states
- Technical Details: ESP32 Only 0 for default of 1 minute
- """
- sds_secs: builtins.int
- """
- Super Deep Sleep Seconds
- While in Light Sleep if mesh_sds_timeout_secs is exceeded we will lower into super deep sleep
- for this value (default 1 year) or a button press
- 0 for default of one year
- """
- ls_secs: builtins.int
- """
- Description: In light sleep the CPU is suspended, LoRa radio is on, BLE is off an GPS is on
- Technical Details: ESP32 Only 0 for default of 300
- """
- min_wake_secs: builtins.int
- """
- Description: While in light sleep when we receive packets on the LoRa radio we will wake and handle them and stay awake in no BLE mode for this value
- Technical Details: ESP32 Only 0 for default of 10 seconds
- """
- device_battery_ina_address: builtins.int
- """
- I2C address of INA_2XX to use for reading device battery voltage
- """
- powermon_enables: builtins.int
- """
- If non-zero, we want powermon log outputs. With the particular (bitfield) sources enabled.
- Note: we picked an ID of 32 so that lower more efficient IDs can be used for more frequently used options.
- """
- def __init__(
- self,
- *,
- is_power_saving: builtins.bool = ...,
- on_battery_shutdown_after_secs: builtins.int = ...,
- adc_multiplier_override: builtins.float = ...,
- wait_bluetooth_secs: builtins.int = ...,
- sds_secs: builtins.int = ...,
- ls_secs: builtins.int = ...,
- min_wake_secs: builtins.int = ...,
- device_battery_ina_address: builtins.int = ...,
- powermon_enables: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["adc_multiplier_override", b"adc_multiplier_override", "device_battery_ina_address", b"device_battery_ina_address", "is_power_saving", b"is_power_saving", "ls_secs", b"ls_secs", "min_wake_secs", b"min_wake_secs", "on_battery_shutdown_after_secs", b"on_battery_shutdown_after_secs", "powermon_enables", b"powermon_enables", "sds_secs", b"sds_secs", "wait_bluetooth_secs", b"wait_bluetooth_secs"]) -> None: ...
-
- @typing.final
- class NetworkConfig(google.protobuf.message.Message):
- """
- Network Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _AddressMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _AddressModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.NetworkConfig._AddressMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DHCP: Config.NetworkConfig._AddressMode.ValueType # 0
- """
- obtain ip address via DHCP
- """
- STATIC: Config.NetworkConfig._AddressMode.ValueType # 1
- """
- use static ip address
- """
-
- class AddressMode(_AddressMode, metaclass=_AddressModeEnumTypeWrapper): ...
- DHCP: Config.NetworkConfig.AddressMode.ValueType # 0
- """
- obtain ip address via DHCP
- """
- STATIC: Config.NetworkConfig.AddressMode.ValueType # 1
- """
- use static ip address
- """
-
- class _ProtocolFlags:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _ProtocolFlagsEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.NetworkConfig._ProtocolFlags.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- NO_BROADCAST: Config.NetworkConfig._ProtocolFlags.ValueType # 0
- """
- Do not broadcast packets over any network protocol
- """
- UDP_BROADCAST: Config.NetworkConfig._ProtocolFlags.ValueType # 1
- """
- Enable broadcasting packets via UDP over the local network
- """
-
- class ProtocolFlags(_ProtocolFlags, metaclass=_ProtocolFlagsEnumTypeWrapper):
- """
- Available flags auxiliary network protocols
- """
-
- NO_BROADCAST: Config.NetworkConfig.ProtocolFlags.ValueType # 0
- """
- Do not broadcast packets over any network protocol
- """
- UDP_BROADCAST: Config.NetworkConfig.ProtocolFlags.ValueType # 1
- """
- Enable broadcasting packets via UDP over the local network
- """
-
- @typing.final
- class IpV4Config(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- IP_FIELD_NUMBER: builtins.int
- GATEWAY_FIELD_NUMBER: builtins.int
- SUBNET_FIELD_NUMBER: builtins.int
- DNS_FIELD_NUMBER: builtins.int
- ip: builtins.int
- """
- Static IP address
- """
- gateway: builtins.int
- """
- Static gateway address
- """
- subnet: builtins.int
- """
- Static subnet mask
- """
- dns: builtins.int
- """
- Static DNS server address
- """
- def __init__(
- self,
- *,
- ip: builtins.int = ...,
- gateway: builtins.int = ...,
- subnet: builtins.int = ...,
- dns: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["dns", b"dns", "gateway", b"gateway", "ip", b"ip", "subnet", b"subnet"]) -> None: ...
-
- WIFI_ENABLED_FIELD_NUMBER: builtins.int
- WIFI_SSID_FIELD_NUMBER: builtins.int
- WIFI_PSK_FIELD_NUMBER: builtins.int
- NTP_SERVER_FIELD_NUMBER: builtins.int
- ETH_ENABLED_FIELD_NUMBER: builtins.int
- ADDRESS_MODE_FIELD_NUMBER: builtins.int
- IPV4_CONFIG_FIELD_NUMBER: builtins.int
- RSYSLOG_SERVER_FIELD_NUMBER: builtins.int
- ENABLED_PROTOCOLS_FIELD_NUMBER: builtins.int
- IPV6_ENABLED_FIELD_NUMBER: builtins.int
- wifi_enabled: builtins.bool
- """
- Enable WiFi (disables Bluetooth)
- """
- wifi_ssid: builtins.str
- """
- If set, this node will try to join the specified wifi network and
- acquire an address via DHCP
- """
- wifi_psk: builtins.str
- """
- If set, will be use to authenticate to the named wifi
- """
- ntp_server: builtins.str
- """
- NTP server to use if WiFi is conneced, defaults to `meshtastic.pool.ntp.org`
- """
- eth_enabled: builtins.bool
- """
- Enable Ethernet
- """
- address_mode: global___Config.NetworkConfig.AddressMode.ValueType
- """
- acquire an address via DHCP or assign static
- """
- rsyslog_server: builtins.str
- """
- rsyslog Server and Port
- """
- enabled_protocols: builtins.int
- """
- Flags for enabling/disabling network protocols
- """
- ipv6_enabled: builtins.bool
- """
- Enable/Disable ipv6 support
- """
- @property
- def ipv4_config(self) -> global___Config.NetworkConfig.IpV4Config:
- """
- struct to keep static address
- """
-
- def __init__(
- self,
- *,
- wifi_enabled: builtins.bool = ...,
- wifi_ssid: builtins.str = ...,
- wifi_psk: builtins.str = ...,
- ntp_server: builtins.str = ...,
- eth_enabled: builtins.bool = ...,
- address_mode: global___Config.NetworkConfig.AddressMode.ValueType = ...,
- ipv4_config: global___Config.NetworkConfig.IpV4Config | None = ...,
- rsyslog_server: builtins.str = ...,
- enabled_protocols: builtins.int = ...,
- ipv6_enabled: builtins.bool = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["ipv4_config", b"ipv4_config"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["address_mode", b"address_mode", "enabled_protocols", b"enabled_protocols", "eth_enabled", b"eth_enabled", "ipv4_config", b"ipv4_config", "ipv6_enabled", b"ipv6_enabled", "ntp_server", b"ntp_server", "rsyslog_server", b"rsyslog_server", "wifi_enabled", b"wifi_enabled", "wifi_psk", b"wifi_psk", "wifi_ssid", b"wifi_ssid"]) -> None: ...
-
- @typing.final
- class DisplayConfig(google.protobuf.message.Message):
- """
- Display Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _DeprecatedGpsCoordinateFormat:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _DeprecatedGpsCoordinateFormatEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DisplayConfig._DeprecatedGpsCoordinateFormat.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNUSED: Config.DisplayConfig._DeprecatedGpsCoordinateFormat.ValueType # 0
-
- class DeprecatedGpsCoordinateFormat(_DeprecatedGpsCoordinateFormat, metaclass=_DeprecatedGpsCoordinateFormatEnumTypeWrapper):
- """
- Deprecated in 2.7.4: Unused
- """
-
- UNUSED: Config.DisplayConfig.DeprecatedGpsCoordinateFormat.ValueType # 0
-
- class _DisplayUnits:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _DisplayUnitsEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DisplayConfig._DisplayUnits.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- METRIC: Config.DisplayConfig._DisplayUnits.ValueType # 0
- """
- Metric (Default)
- """
- IMPERIAL: Config.DisplayConfig._DisplayUnits.ValueType # 1
- """
- Imperial
- """
-
- class DisplayUnits(_DisplayUnits, metaclass=_DisplayUnitsEnumTypeWrapper):
- """
- Unit display preference
- """
-
- METRIC: Config.DisplayConfig.DisplayUnits.ValueType # 0
- """
- Metric (Default)
- """
- IMPERIAL: Config.DisplayConfig.DisplayUnits.ValueType # 1
- """
- Imperial
- """
-
- class _OledType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _OledTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DisplayConfig._OledType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- OLED_AUTO: Config.DisplayConfig._OledType.ValueType # 0
- """
- Default / Autodetect
- """
- OLED_SSD1306: Config.DisplayConfig._OledType.ValueType # 1
- """
- Default / Autodetect
- """
- OLED_SH1106: Config.DisplayConfig._OledType.ValueType # 2
- """
- Default / Autodetect
- """
- OLED_SH1107: Config.DisplayConfig._OledType.ValueType # 3
- """
- Can not be auto detected but set by proto. Used for 128x64 screens
- """
- OLED_SH1107_128_128: Config.DisplayConfig._OledType.ValueType # 4
- """
- Can not be auto detected but set by proto. Used for 128x128 screens
- """
-
- class OledType(_OledType, metaclass=_OledTypeEnumTypeWrapper):
- """
- Override OLED outo detect with this if it fails.
- """
-
- OLED_AUTO: Config.DisplayConfig.OledType.ValueType # 0
- """
- Default / Autodetect
- """
- OLED_SSD1306: Config.DisplayConfig.OledType.ValueType # 1
- """
- Default / Autodetect
- """
- OLED_SH1106: Config.DisplayConfig.OledType.ValueType # 2
- """
- Default / Autodetect
- """
- OLED_SH1107: Config.DisplayConfig.OledType.ValueType # 3
- """
- Can not be auto detected but set by proto. Used for 128x64 screens
- """
- OLED_SH1107_128_128: Config.DisplayConfig.OledType.ValueType # 4
- """
- Can not be auto detected but set by proto. Used for 128x128 screens
- """
-
- class _DisplayMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _DisplayModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DisplayConfig._DisplayMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DEFAULT: Config.DisplayConfig._DisplayMode.ValueType # 0
- """
- Default. The old style for the 128x64 OLED screen
- """
- TWOCOLOR: Config.DisplayConfig._DisplayMode.ValueType # 1
- """
- Rearrange display elements to cater for bicolor OLED displays
- """
- INVERTED: Config.DisplayConfig._DisplayMode.ValueType # 2
- """
- Same as TwoColor, but with inverted top bar. Not so good for Epaper displays
- """
- COLOR: Config.DisplayConfig._DisplayMode.ValueType # 3
- """
- TFT Full Color Displays (not implemented yet)
- """
-
- class DisplayMode(_DisplayMode, metaclass=_DisplayModeEnumTypeWrapper): ...
- DEFAULT: Config.DisplayConfig.DisplayMode.ValueType # 0
- """
- Default. The old style for the 128x64 OLED screen
- """
- TWOCOLOR: Config.DisplayConfig.DisplayMode.ValueType # 1
- """
- Rearrange display elements to cater for bicolor OLED displays
- """
- INVERTED: Config.DisplayConfig.DisplayMode.ValueType # 2
- """
- Same as TwoColor, but with inverted top bar. Not so good for Epaper displays
- """
- COLOR: Config.DisplayConfig.DisplayMode.ValueType # 3
- """
- TFT Full Color Displays (not implemented yet)
- """
-
- class _CompassOrientation:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _CompassOrientationEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.DisplayConfig._CompassOrientation.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DEGREES_0: Config.DisplayConfig._CompassOrientation.ValueType # 0
- """
- The compass and the display are in the same orientation.
- """
- DEGREES_90: Config.DisplayConfig._CompassOrientation.ValueType # 1
- """
- Rotate the compass by 90 degrees.
- """
- DEGREES_180: Config.DisplayConfig._CompassOrientation.ValueType # 2
- """
- Rotate the compass by 180 degrees.
- """
- DEGREES_270: Config.DisplayConfig._CompassOrientation.ValueType # 3
- """
- Rotate the compass by 270 degrees.
- """
- DEGREES_0_INVERTED: Config.DisplayConfig._CompassOrientation.ValueType # 4
- """
- Don't rotate the compass, but invert the result.
- """
- DEGREES_90_INVERTED: Config.DisplayConfig._CompassOrientation.ValueType # 5
- """
- Rotate the compass by 90 degrees and invert.
- """
- DEGREES_180_INVERTED: Config.DisplayConfig._CompassOrientation.ValueType # 6
- """
- Rotate the compass by 180 degrees and invert.
- """
- DEGREES_270_INVERTED: Config.DisplayConfig._CompassOrientation.ValueType # 7
- """
- Rotate the compass by 270 degrees and invert.
- """
-
- class CompassOrientation(_CompassOrientation, metaclass=_CompassOrientationEnumTypeWrapper): ...
- DEGREES_0: Config.DisplayConfig.CompassOrientation.ValueType # 0
- """
- The compass and the display are in the same orientation.
- """
- DEGREES_90: Config.DisplayConfig.CompassOrientation.ValueType # 1
- """
- Rotate the compass by 90 degrees.
- """
- DEGREES_180: Config.DisplayConfig.CompassOrientation.ValueType # 2
- """
- Rotate the compass by 180 degrees.
- """
- DEGREES_270: Config.DisplayConfig.CompassOrientation.ValueType # 3
- """
- Rotate the compass by 270 degrees.
- """
- DEGREES_0_INVERTED: Config.DisplayConfig.CompassOrientation.ValueType # 4
- """
- Don't rotate the compass, but invert the result.
- """
- DEGREES_90_INVERTED: Config.DisplayConfig.CompassOrientation.ValueType # 5
- """
- Rotate the compass by 90 degrees and invert.
- """
- DEGREES_180_INVERTED: Config.DisplayConfig.CompassOrientation.ValueType # 6
- """
- Rotate the compass by 180 degrees and invert.
- """
- DEGREES_270_INVERTED: Config.DisplayConfig.CompassOrientation.ValueType # 7
- """
- Rotate the compass by 270 degrees and invert.
- """
-
- SCREEN_ON_SECS_FIELD_NUMBER: builtins.int
- GPS_FORMAT_FIELD_NUMBER: builtins.int
- AUTO_SCREEN_CAROUSEL_SECS_FIELD_NUMBER: builtins.int
- COMPASS_NORTH_TOP_FIELD_NUMBER: builtins.int
- FLIP_SCREEN_FIELD_NUMBER: builtins.int
- UNITS_FIELD_NUMBER: builtins.int
- OLED_FIELD_NUMBER: builtins.int
- DISPLAYMODE_FIELD_NUMBER: builtins.int
- HEADING_BOLD_FIELD_NUMBER: builtins.int
- WAKE_ON_TAP_OR_MOTION_FIELD_NUMBER: builtins.int
- COMPASS_ORIENTATION_FIELD_NUMBER: builtins.int
- USE_12H_CLOCK_FIELD_NUMBER: builtins.int
- USE_LONG_NODE_NAME_FIELD_NUMBER: builtins.int
- screen_on_secs: builtins.int
- """
- Number of seconds the screen stays on after pressing the user button or receiving a message
- 0 for default of one minute MAXUINT for always on
- """
- gps_format: global___Config.DisplayConfig.DeprecatedGpsCoordinateFormat.ValueType
- """
- Deprecated in 2.7.4: Unused
- How the GPS coordinates are formatted on the OLED screen.
- """
- auto_screen_carousel_secs: builtins.int
- """
- Automatically toggles to the next page on the screen like a carousel, based the specified interval in seconds.
- Potentially useful for devices without user buttons.
- """
- compass_north_top: builtins.bool
- """
- If this is set, the displayed compass will always point north. if unset, the old behaviour
- (top of display is heading direction) is used.
- """
- flip_screen: builtins.bool
- """
- Flip screen vertically, for cases that mount the screen upside down
- """
- units: global___Config.DisplayConfig.DisplayUnits.ValueType
- """
- Perferred display units
- """
- oled: global___Config.DisplayConfig.OledType.ValueType
- """
- Override auto-detect in screen
- """
- displaymode: global___Config.DisplayConfig.DisplayMode.ValueType
- """
- Display Mode
- """
- heading_bold: builtins.bool
- """
- Print first line in pseudo-bold? FALSE is original style, TRUE is bold
- """
- wake_on_tap_or_motion: builtins.bool
- """
- Should we wake the screen up on accelerometer detected motion or tap
- """
- compass_orientation: global___Config.DisplayConfig.CompassOrientation.ValueType
- """
- Indicates how to rotate or invert the compass output to accurate display on the display.
- """
- use_12h_clock: builtins.bool
- """
- If false (default), the device will display the time in 24-hour format on screen.
- If true, the device will display the time in 12-hour format on screen.
- """
- use_long_node_name: builtins.bool
- """
- If false (default), the device will use short names for various display screens.
- If true, node names will show in long format
- """
- def __init__(
- self,
- *,
- screen_on_secs: builtins.int = ...,
- gps_format: global___Config.DisplayConfig.DeprecatedGpsCoordinateFormat.ValueType = ...,
- auto_screen_carousel_secs: builtins.int = ...,
- compass_north_top: builtins.bool = ...,
- flip_screen: builtins.bool = ...,
- units: global___Config.DisplayConfig.DisplayUnits.ValueType = ...,
- oled: global___Config.DisplayConfig.OledType.ValueType = ...,
- displaymode: global___Config.DisplayConfig.DisplayMode.ValueType = ...,
- heading_bold: builtins.bool = ...,
- wake_on_tap_or_motion: builtins.bool = ...,
- compass_orientation: global___Config.DisplayConfig.CompassOrientation.ValueType = ...,
- use_12h_clock: builtins.bool = ...,
- use_long_node_name: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["auto_screen_carousel_secs", b"auto_screen_carousel_secs", "compass_north_top", b"compass_north_top", "compass_orientation", b"compass_orientation", "displaymode", b"displaymode", "flip_screen", b"flip_screen", "gps_format", b"gps_format", "heading_bold", b"heading_bold", "oled", b"oled", "screen_on_secs", b"screen_on_secs", "units", b"units", "use_12h_clock", b"use_12h_clock", "use_long_node_name", b"use_long_node_name", "wake_on_tap_or_motion", b"wake_on_tap_or_motion"]) -> None: ...
-
- @typing.final
- class LoRaConfig(google.protobuf.message.Message):
- """
- Lora Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _RegionCode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _RegionCodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.LoRaConfig._RegionCode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: Config.LoRaConfig._RegionCode.ValueType # 0
- """
- Region is not set
- """
- US: Config.LoRaConfig._RegionCode.ValueType # 1
- """
- United States
- """
- EU_433: Config.LoRaConfig._RegionCode.ValueType # 2
- """
- European Union 433mhz
- """
- EU_868: Config.LoRaConfig._RegionCode.ValueType # 3
- """
- European Union 868mhz
- """
- CN: Config.LoRaConfig._RegionCode.ValueType # 4
- """
- China
- """
- JP: Config.LoRaConfig._RegionCode.ValueType # 5
- """
- Japan
- """
- ANZ: Config.LoRaConfig._RegionCode.ValueType # 6
- """
- Australia / New Zealand
- """
- KR: Config.LoRaConfig._RegionCode.ValueType # 7
- """
- Korea
- """
- TW: Config.LoRaConfig._RegionCode.ValueType # 8
- """
- Taiwan
- """
- RU: Config.LoRaConfig._RegionCode.ValueType # 9
- """
- Russia
- """
- IN: Config.LoRaConfig._RegionCode.ValueType # 10
- """
- India
- """
- NZ_865: Config.LoRaConfig._RegionCode.ValueType # 11
- """
- New Zealand 865mhz
- """
- TH: Config.LoRaConfig._RegionCode.ValueType # 12
- """
- Thailand
- """
- LORA_24: Config.LoRaConfig._RegionCode.ValueType # 13
- """
- WLAN Band
- """
- UA_433: Config.LoRaConfig._RegionCode.ValueType # 14
- """
- Ukraine 433mhz
- """
- UA_868: Config.LoRaConfig._RegionCode.ValueType # 15
- """
- Ukraine 868mhz
- """
- MY_433: Config.LoRaConfig._RegionCode.ValueType # 16
- """
- Malaysia 433mhz
- """
- MY_919: Config.LoRaConfig._RegionCode.ValueType # 17
- """
- Malaysia 919mhz
- """
- SG_923: Config.LoRaConfig._RegionCode.ValueType # 18
- """
- Singapore 923mhz
- """
- PH_433: Config.LoRaConfig._RegionCode.ValueType # 19
- """
- Philippines 433mhz
- """
- PH_868: Config.LoRaConfig._RegionCode.ValueType # 20
- """
- Philippines 868mhz
- """
- PH_915: Config.LoRaConfig._RegionCode.ValueType # 21
- """
- Philippines 915mhz
- """
- ANZ_433: Config.LoRaConfig._RegionCode.ValueType # 22
- """
- Australia / New Zealand 433MHz
- """
- KZ_433: Config.LoRaConfig._RegionCode.ValueType # 23
- """
- Kazakhstan 433MHz
- """
- KZ_863: Config.LoRaConfig._RegionCode.ValueType # 24
- """
- Kazakhstan 863MHz
- """
- NP_865: Config.LoRaConfig._RegionCode.ValueType # 25
- """
- Nepal 865MHz
- """
- BR_902: Config.LoRaConfig._RegionCode.ValueType # 26
- """
- Brazil 902MHz
- """
-
- class RegionCode(_RegionCode, metaclass=_RegionCodeEnumTypeWrapper): ...
- UNSET: Config.LoRaConfig.RegionCode.ValueType # 0
- """
- Region is not set
- """
- US: Config.LoRaConfig.RegionCode.ValueType # 1
- """
- United States
- """
- EU_433: Config.LoRaConfig.RegionCode.ValueType # 2
- """
- European Union 433mhz
- """
- EU_868: Config.LoRaConfig.RegionCode.ValueType # 3
- """
- European Union 868mhz
- """
- CN: Config.LoRaConfig.RegionCode.ValueType # 4
- """
- China
- """
- JP: Config.LoRaConfig.RegionCode.ValueType # 5
- """
- Japan
- """
- ANZ: Config.LoRaConfig.RegionCode.ValueType # 6
- """
- Australia / New Zealand
- """
- KR: Config.LoRaConfig.RegionCode.ValueType # 7
- """
- Korea
- """
- TW: Config.LoRaConfig.RegionCode.ValueType # 8
- """
- Taiwan
- """
- RU: Config.LoRaConfig.RegionCode.ValueType # 9
- """
- Russia
- """
- IN: Config.LoRaConfig.RegionCode.ValueType # 10
- """
- India
- """
- NZ_865: Config.LoRaConfig.RegionCode.ValueType # 11
- """
- New Zealand 865mhz
- """
- TH: Config.LoRaConfig.RegionCode.ValueType # 12
- """
- Thailand
- """
- LORA_24: Config.LoRaConfig.RegionCode.ValueType # 13
- """
- WLAN Band
- """
- UA_433: Config.LoRaConfig.RegionCode.ValueType # 14
- """
- Ukraine 433mhz
- """
- UA_868: Config.LoRaConfig.RegionCode.ValueType # 15
- """
- Ukraine 868mhz
- """
- MY_433: Config.LoRaConfig.RegionCode.ValueType # 16
- """
- Malaysia 433mhz
- """
- MY_919: Config.LoRaConfig.RegionCode.ValueType # 17
- """
- Malaysia 919mhz
- """
- SG_923: Config.LoRaConfig.RegionCode.ValueType # 18
- """
- Singapore 923mhz
- """
- PH_433: Config.LoRaConfig.RegionCode.ValueType # 19
- """
- Philippines 433mhz
- """
- PH_868: Config.LoRaConfig.RegionCode.ValueType # 20
- """
- Philippines 868mhz
- """
- PH_915: Config.LoRaConfig.RegionCode.ValueType # 21
- """
- Philippines 915mhz
- """
- ANZ_433: Config.LoRaConfig.RegionCode.ValueType # 22
- """
- Australia / New Zealand 433MHz
- """
- KZ_433: Config.LoRaConfig.RegionCode.ValueType # 23
- """
- Kazakhstan 433MHz
- """
- KZ_863: Config.LoRaConfig.RegionCode.ValueType # 24
- """
- Kazakhstan 863MHz
- """
- NP_865: Config.LoRaConfig.RegionCode.ValueType # 25
- """
- Nepal 865MHz
- """
- BR_902: Config.LoRaConfig.RegionCode.ValueType # 26
- """
- Brazil 902MHz
- """
-
- class _ModemPreset:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _ModemPresetEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.LoRaConfig._ModemPreset.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- LONG_FAST: Config.LoRaConfig._ModemPreset.ValueType # 0
- """
- Long Range - Fast
- """
- LONG_SLOW: Config.LoRaConfig._ModemPreset.ValueType # 1
- """
- Long Range - Slow
- """
- VERY_LONG_SLOW: Config.LoRaConfig._ModemPreset.ValueType # 2
- """
- Very Long Range - Slow
- Deprecated in 2.5: Works only with txco and is unusably slow
- """
- MEDIUM_SLOW: Config.LoRaConfig._ModemPreset.ValueType # 3
- """
- Medium Range - Slow
- """
- MEDIUM_FAST: Config.LoRaConfig._ModemPreset.ValueType # 4
- """
- Medium Range - Fast
- """
- SHORT_SLOW: Config.LoRaConfig._ModemPreset.ValueType # 5
- """
- Short Range - Slow
- """
- SHORT_FAST: Config.LoRaConfig._ModemPreset.ValueType # 6
- """
- Short Range - Fast
- """
- LONG_MODERATE: Config.LoRaConfig._ModemPreset.ValueType # 7
- """
- Long Range - Moderately Fast
- """
- SHORT_TURBO: Config.LoRaConfig._ModemPreset.ValueType # 8
- """
- Short Range - Turbo
- This is the fastest preset and the only one with 500kHz bandwidth.
- It is not legal to use in all regions due to this wider bandwidth.
- """
-
- class ModemPreset(_ModemPreset, metaclass=_ModemPresetEnumTypeWrapper):
- """
- Standard predefined channel settings
- Note: these mappings must match ModemPreset Choice in the device code.
- """
-
- LONG_FAST: Config.LoRaConfig.ModemPreset.ValueType # 0
- """
- Long Range - Fast
- """
- LONG_SLOW: Config.LoRaConfig.ModemPreset.ValueType # 1
- """
- Long Range - Slow
- """
- VERY_LONG_SLOW: Config.LoRaConfig.ModemPreset.ValueType # 2
- """
- Very Long Range - Slow
- Deprecated in 2.5: Works only with txco and is unusably slow
- """
- MEDIUM_SLOW: Config.LoRaConfig.ModemPreset.ValueType # 3
- """
- Medium Range - Slow
- """
- MEDIUM_FAST: Config.LoRaConfig.ModemPreset.ValueType # 4
- """
- Medium Range - Fast
- """
- SHORT_SLOW: Config.LoRaConfig.ModemPreset.ValueType # 5
- """
- Short Range - Slow
- """
- SHORT_FAST: Config.LoRaConfig.ModemPreset.ValueType # 6
- """
- Short Range - Fast
- """
- LONG_MODERATE: Config.LoRaConfig.ModemPreset.ValueType # 7
- """
- Long Range - Moderately Fast
- """
- SHORT_TURBO: Config.LoRaConfig.ModemPreset.ValueType # 8
- """
- Short Range - Turbo
- This is the fastest preset and the only one with 500kHz bandwidth.
- It is not legal to use in all regions due to this wider bandwidth.
- """
-
- USE_PRESET_FIELD_NUMBER: builtins.int
- MODEM_PRESET_FIELD_NUMBER: builtins.int
- BANDWIDTH_FIELD_NUMBER: builtins.int
- SPREAD_FACTOR_FIELD_NUMBER: builtins.int
- CODING_RATE_FIELD_NUMBER: builtins.int
- FREQUENCY_OFFSET_FIELD_NUMBER: builtins.int
- REGION_FIELD_NUMBER: builtins.int
- HOP_LIMIT_FIELD_NUMBER: builtins.int
- TX_ENABLED_FIELD_NUMBER: builtins.int
- TX_POWER_FIELD_NUMBER: builtins.int
- CHANNEL_NUM_FIELD_NUMBER: builtins.int
- OVERRIDE_DUTY_CYCLE_FIELD_NUMBER: builtins.int
- SX126X_RX_BOOSTED_GAIN_FIELD_NUMBER: builtins.int
- OVERRIDE_FREQUENCY_FIELD_NUMBER: builtins.int
- PA_FAN_DISABLED_FIELD_NUMBER: builtins.int
- IGNORE_INCOMING_FIELD_NUMBER: builtins.int
- IGNORE_MQTT_FIELD_NUMBER: builtins.int
- CONFIG_OK_TO_MQTT_FIELD_NUMBER: builtins.int
- use_preset: builtins.bool
- """
- When enabled, the `modem_preset` fields will be adhered to, else the `bandwidth`/`spread_factor`/`coding_rate`
- will be taked from their respective manually defined fields
- """
- modem_preset: global___Config.LoRaConfig.ModemPreset.ValueType
- """
- Either modem_config or bandwidth/spreading/coding will be specified - NOT BOTH.
- As a heuristic: If bandwidth is specified, do not use modem_config.
- Because protobufs take ZERO space when the value is zero this works out nicely.
- This value is replaced by bandwidth/spread_factor/coding_rate.
- If you'd like to experiment with other options add them to MeshRadio.cpp in the device code.
- """
- bandwidth: builtins.int
- """
- Bandwidth in MHz
- Certain bandwidth numbers are 'special' and will be converted to the
- appropriate floating point value: 31 -> 31.25MHz
- """
- spread_factor: builtins.int
- """
- A number from 7 to 12.
- Indicates number of chirps per symbol as 1< 7 results in the default
- """
- tx_enabled: builtins.bool
- """
- Disable TX from the LoRa radio. Useful for hot-swapping antennas and other tests.
- Defaults to false
- """
- tx_power: builtins.int
- """
- If zero, then use default max legal continuous power (ie. something that won't
- burn out the radio hardware)
- In most cases you should use zero here.
- Units are in dBm.
- """
- channel_num: builtins.int
- """
- This controls the actual hardware frequency the radio transmits on.
- Most users should never need to be exposed to this field/concept.
- A channel number between 1 and NUM_CHANNELS (whatever the max is in the current region).
- If ZERO then the rule is "use the old channel name hash based
- algorithm to derive the channel number")
- If using the hash algorithm the channel number will be: hash(channel_name) %
- NUM_CHANNELS (Where num channels depends on the regulatory region).
- """
- override_duty_cycle: builtins.bool
- """
- If true, duty cycle limits will be exceeded and thus you're possibly not following
- the local regulations if you're not a HAM.
- Has no effect if the duty cycle of the used region is 100%.
- """
- sx126x_rx_boosted_gain: builtins.bool
- """
- If true, sets RX boosted gain mode on SX126X based radios
- """
- override_frequency: builtins.float
- """
- This parameter is for advanced users and licensed HAM radio operators.
- Ignore Channel Calculation and use this frequency instead. The frequency_offset
- will still be applied. This will allow you to use out-of-band frequencies.
- Please respect your local laws and regulations. If you are a HAM, make sure you
- enable HAM mode and turn off encryption.
- """
- pa_fan_disabled: builtins.bool
- """
- If true, disable the build-in PA FAN using pin define in RF95_FAN_EN.
- """
- ignore_mqtt: builtins.bool
- """
- If true, the device will not process any packets received via LoRa that passed via MQTT anywhere on the path towards it.
- """
- config_ok_to_mqtt: builtins.bool
- """
- Sets the ok_to_mqtt bit on outgoing packets
- """
- @property
- def ignore_incoming(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
- """
- For testing it is useful sometimes to force a node to never listen to
- particular other nodes (simulating radio out of range). All nodenums listed
- in ignore_incoming will have packets they send dropped on receive (by router.cpp)
- """
-
- def __init__(
- self,
- *,
- use_preset: builtins.bool = ...,
- modem_preset: global___Config.LoRaConfig.ModemPreset.ValueType = ...,
- bandwidth: builtins.int = ...,
- spread_factor: builtins.int = ...,
- coding_rate: builtins.int = ...,
- frequency_offset: builtins.float = ...,
- region: global___Config.LoRaConfig.RegionCode.ValueType = ...,
- hop_limit: builtins.int = ...,
- tx_enabled: builtins.bool = ...,
- tx_power: builtins.int = ...,
- channel_num: builtins.int = ...,
- override_duty_cycle: builtins.bool = ...,
- sx126x_rx_boosted_gain: builtins.bool = ...,
- override_frequency: builtins.float = ...,
- pa_fan_disabled: builtins.bool = ...,
- ignore_incoming: collections.abc.Iterable[builtins.int] | None = ...,
- ignore_mqtt: builtins.bool = ...,
- config_ok_to_mqtt: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["bandwidth", b"bandwidth", "channel_num", b"channel_num", "coding_rate", b"coding_rate", "config_ok_to_mqtt", b"config_ok_to_mqtt", "frequency_offset", b"frequency_offset", "hop_limit", b"hop_limit", "ignore_incoming", b"ignore_incoming", "ignore_mqtt", b"ignore_mqtt", "modem_preset", b"modem_preset", "override_duty_cycle", b"override_duty_cycle", "override_frequency", b"override_frequency", "pa_fan_disabled", b"pa_fan_disabled", "region", b"region", "spread_factor", b"spread_factor", "sx126x_rx_boosted_gain", b"sx126x_rx_boosted_gain", "tx_enabled", b"tx_enabled", "tx_power", b"tx_power", "use_preset", b"use_preset"]) -> None: ...
-
- @typing.final
- class BluetoothConfig(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _PairingMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _PairingModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Config.BluetoothConfig._PairingMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- RANDOM_PIN: Config.BluetoothConfig._PairingMode.ValueType # 0
- """
- Device generates a random PIN that will be shown on the screen of the device for pairing
- """
- FIXED_PIN: Config.BluetoothConfig._PairingMode.ValueType # 1
- """
- Device requires a specified fixed PIN for pairing
- """
- NO_PIN: Config.BluetoothConfig._PairingMode.ValueType # 2
- """
- Device requires no PIN for pairing
- """
-
- class PairingMode(_PairingMode, metaclass=_PairingModeEnumTypeWrapper): ...
- RANDOM_PIN: Config.BluetoothConfig.PairingMode.ValueType # 0
- """
- Device generates a random PIN that will be shown on the screen of the device for pairing
- """
- FIXED_PIN: Config.BluetoothConfig.PairingMode.ValueType # 1
- """
- Device requires a specified fixed PIN for pairing
- """
- NO_PIN: Config.BluetoothConfig.PairingMode.ValueType # 2
- """
- Device requires no PIN for pairing
- """
-
- ENABLED_FIELD_NUMBER: builtins.int
- MODE_FIELD_NUMBER: builtins.int
- FIXED_PIN_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Enable Bluetooth on the device
- """
- mode: global___Config.BluetoothConfig.PairingMode.ValueType
- """
- Determines the pairing strategy for the device
- """
- fixed_pin: builtins.int
- """
- Specified PIN for PairingMode.FixedPin
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- mode: global___Config.BluetoothConfig.PairingMode.ValueType = ...,
- fixed_pin: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["enabled", b"enabled", "fixed_pin", b"fixed_pin", "mode", b"mode"]) -> None: ...
-
- @typing.final
- class SecurityConfig(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PUBLIC_KEY_FIELD_NUMBER: builtins.int
- PRIVATE_KEY_FIELD_NUMBER: builtins.int
- ADMIN_KEY_FIELD_NUMBER: builtins.int
- IS_MANAGED_FIELD_NUMBER: builtins.int
- SERIAL_ENABLED_FIELD_NUMBER: builtins.int
- DEBUG_LOG_API_ENABLED_FIELD_NUMBER: builtins.int
- ADMIN_CHANNEL_ENABLED_FIELD_NUMBER: builtins.int
- public_key: builtins.bytes
- """
- The public key of the user's device.
- Sent out to other nodes on the mesh to allow them to compute a shared secret key.
- """
- private_key: builtins.bytes
- """
- The private key of the device.
- Used to create a shared key with a remote device.
- """
- is_managed: builtins.bool
- """
- If true, device is considered to be "managed" by a mesh administrator via admin messages
- Device is managed by a mesh administrator.
- """
- serial_enabled: builtins.bool
- """
- Serial Console over the Stream API."
- """
- debug_log_api_enabled: builtins.bool
- """
- By default we turn off logging as soon as an API client connects (to keep shared serial link quiet).
- Output live debug logging over serial or bluetooth is set to true.
- """
- admin_channel_enabled: builtins.bool
- """
- Allow incoming device control over the insecure legacy admin channel.
- """
- @property
- def admin_key(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.bytes]:
- """
- The public key authorized to send admin messages to this node.
- """
-
- def __init__(
- self,
- *,
- public_key: builtins.bytes = ...,
- private_key: builtins.bytes = ...,
- admin_key: collections.abc.Iterable[builtins.bytes] | None = ...,
- is_managed: builtins.bool = ...,
- serial_enabled: builtins.bool = ...,
- debug_log_api_enabled: builtins.bool = ...,
- admin_channel_enabled: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["admin_channel_enabled", b"admin_channel_enabled", "admin_key", b"admin_key", "debug_log_api_enabled", b"debug_log_api_enabled", "is_managed", b"is_managed", "private_key", b"private_key", "public_key", b"public_key", "serial_enabled", b"serial_enabled"]) -> None: ...
-
- @typing.final
- class SessionkeyConfig(google.protobuf.message.Message):
- """
- Blank config request, strictly for getting the session key
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- def __init__(
- self,
- ) -> None: ...
-
- DEVICE_FIELD_NUMBER: builtins.int
- POSITION_FIELD_NUMBER: builtins.int
- POWER_FIELD_NUMBER: builtins.int
- NETWORK_FIELD_NUMBER: builtins.int
- DISPLAY_FIELD_NUMBER: builtins.int
- LORA_FIELD_NUMBER: builtins.int
- BLUETOOTH_FIELD_NUMBER: builtins.int
- SECURITY_FIELD_NUMBER: builtins.int
- SESSIONKEY_FIELD_NUMBER: builtins.int
- DEVICE_UI_FIELD_NUMBER: builtins.int
- @property
- def device(self) -> global___Config.DeviceConfig: ...
- @property
- def position(self) -> global___Config.PositionConfig: ...
- @property
- def power(self) -> global___Config.PowerConfig: ...
- @property
- def network(self) -> global___Config.NetworkConfig: ...
- @property
- def display(self) -> global___Config.DisplayConfig: ...
- @property
- def lora(self) -> global___Config.LoRaConfig: ...
- @property
- def bluetooth(self) -> global___Config.BluetoothConfig: ...
- @property
- def security(self) -> global___Config.SecurityConfig: ...
- @property
- def sessionkey(self) -> global___Config.SessionkeyConfig: ...
- @property
- def device_ui(self) -> meshtastic.protobuf.device_ui_pb2.DeviceUIConfig: ...
- def __init__(
- self,
- *,
- device: global___Config.DeviceConfig | None = ...,
- position: global___Config.PositionConfig | None = ...,
- power: global___Config.PowerConfig | None = ...,
- network: global___Config.NetworkConfig | None = ...,
- display: global___Config.DisplayConfig | None = ...,
- lora: global___Config.LoRaConfig | None = ...,
- bluetooth: global___Config.BluetoothConfig | None = ...,
- security: global___Config.SecurityConfig | None = ...,
- sessionkey: global___Config.SessionkeyConfig | None = ...,
- device_ui: meshtastic.protobuf.device_ui_pb2.DeviceUIConfig | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["bluetooth", b"bluetooth", "device", b"device", "device_ui", b"device_ui", "display", b"display", "lora", b"lora", "network", b"network", "payload_variant", b"payload_variant", "position", b"position", "power", b"power", "security", b"security", "sessionkey", b"sessionkey"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["bluetooth", b"bluetooth", "device", b"device", "device_ui", b"device_ui", "display", b"display", "lora", b"lora", "network", b"network", "payload_variant", b"payload_variant", "position", b"position", "power", b"power", "security", b"security", "sessionkey", b"sessionkey"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["device", "position", "power", "network", "display", "lora", "bluetooth", "security", "sessionkey", "device_ui"] | None: ...
-
-global___Config = Config
+from meshtastic.protobuf import device_ui_pb2 as _device_ui_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class Config(_message.Message):
+ __slots__ = ["bluetooth", "device", "device_ui", "display", "lora", "network", "position", "power", "security", "sessionkey"]
+ class BluetoothConfig(_message.Message):
+ __slots__ = ["enabled", "fixed_pin", "mode"]
+ class PairingMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ FIXED_PIN: Config.BluetoothConfig.PairingMode
+ FIXED_PIN_FIELD_NUMBER: _ClassVar[int]
+ MODE_FIELD_NUMBER: _ClassVar[int]
+ NO_PIN: Config.BluetoothConfig.PairingMode
+ RANDOM_PIN: Config.BluetoothConfig.PairingMode
+ enabled: bool
+ fixed_pin: int
+ mode: Config.BluetoothConfig.PairingMode
+ def __init__(self, enabled: bool = ..., mode: _Optional[_Union[Config.BluetoothConfig.PairingMode, str]] = ..., fixed_pin: _Optional[int] = ...) -> None: ...
+ class DeviceConfig(_message.Message):
+ __slots__ = ["button_gpio", "buzzer_gpio", "buzzer_mode", "disable_triple_click", "double_tap_as_button_press", "is_managed", "led_heartbeat_disabled", "node_info_broadcast_secs", "rebroadcast_mode", "role", "serial_enabled", "tzdef"]
+ class BuzzerMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class RebroadcastMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Role(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ALL: Config.DeviceConfig.RebroadcastMode
+ ALL_ENABLED: Config.DeviceConfig.BuzzerMode
+ ALL_SKIP_DECODING: Config.DeviceConfig.RebroadcastMode
+ BUTTON_GPIO_FIELD_NUMBER: _ClassVar[int]
+ BUZZER_GPIO_FIELD_NUMBER: _ClassVar[int]
+ BUZZER_MODE_FIELD_NUMBER: _ClassVar[int]
+ CLIENT: Config.DeviceConfig.Role
+ CLIENT_BASE: Config.DeviceConfig.Role
+ CLIENT_HIDDEN: Config.DeviceConfig.Role
+ CLIENT_MUTE: Config.DeviceConfig.Role
+ CORE_PORTNUMS_ONLY: Config.DeviceConfig.RebroadcastMode
+ DIRECT_MSG_ONLY: Config.DeviceConfig.BuzzerMode
+ DISABLED: Config.DeviceConfig.BuzzerMode
+ DISABLE_TRIPLE_CLICK_FIELD_NUMBER: _ClassVar[int]
+ DOUBLE_TAP_AS_BUTTON_PRESS_FIELD_NUMBER: _ClassVar[int]
+ IS_MANAGED_FIELD_NUMBER: _ClassVar[int]
+ KNOWN_ONLY: Config.DeviceConfig.RebroadcastMode
+ LED_HEARTBEAT_DISABLED_FIELD_NUMBER: _ClassVar[int]
+ LOCAL_ONLY: Config.DeviceConfig.RebroadcastMode
+ LOST_AND_FOUND: Config.DeviceConfig.Role
+ NODE_INFO_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
+ NONE: Config.DeviceConfig.RebroadcastMode
+ NOTIFICATIONS_ONLY: Config.DeviceConfig.BuzzerMode
+ REBROADCAST_MODE_FIELD_NUMBER: _ClassVar[int]
+ REPEATER: Config.DeviceConfig.Role
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ ROUTER: Config.DeviceConfig.Role
+ ROUTER_CLIENT: Config.DeviceConfig.Role
+ ROUTER_LATE: Config.DeviceConfig.Role
+ SENSOR: Config.DeviceConfig.Role
+ SERIAL_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ SYSTEM_ONLY: Config.DeviceConfig.BuzzerMode
+ TAK: Config.DeviceConfig.Role
+ TAK_TRACKER: Config.DeviceConfig.Role
+ TRACKER: Config.DeviceConfig.Role
+ TZDEF_FIELD_NUMBER: _ClassVar[int]
+ button_gpio: int
+ buzzer_gpio: int
+ buzzer_mode: Config.DeviceConfig.BuzzerMode
+ disable_triple_click: bool
+ double_tap_as_button_press: bool
+ is_managed: bool
+ led_heartbeat_disabled: bool
+ node_info_broadcast_secs: int
+ rebroadcast_mode: Config.DeviceConfig.RebroadcastMode
+ role: Config.DeviceConfig.Role
+ serial_enabled: bool
+ tzdef: str
+ def __init__(self, role: _Optional[_Union[Config.DeviceConfig.Role, str]] = ..., serial_enabled: bool = ..., button_gpio: _Optional[int] = ..., buzzer_gpio: _Optional[int] = ..., rebroadcast_mode: _Optional[_Union[Config.DeviceConfig.RebroadcastMode, str]] = ..., node_info_broadcast_secs: _Optional[int] = ..., double_tap_as_button_press: bool = ..., is_managed: bool = ..., disable_triple_click: bool = ..., tzdef: _Optional[str] = ..., led_heartbeat_disabled: bool = ..., buzzer_mode: _Optional[_Union[Config.DeviceConfig.BuzzerMode, str]] = ...) -> None: ...
+ class DisplayConfig(_message.Message):
+ __slots__ = ["auto_screen_carousel_secs", "compass_north_top", "compass_orientation", "displaymode", "enable_message_bubbles", "flip_screen", "gps_format", "heading_bold", "oled", "screen_on_secs", "units", "use_12h_clock", "use_long_node_name", "wake_on_tap_or_motion"]
+ class CompassOrientation(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class DeprecatedGpsCoordinateFormat(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class DisplayMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class DisplayUnits(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class OledType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ AUTO_SCREEN_CAROUSEL_SECS_FIELD_NUMBER: _ClassVar[int]
+ COLOR: Config.DisplayConfig.DisplayMode
+ COMPASS_NORTH_TOP_FIELD_NUMBER: _ClassVar[int]
+ COMPASS_ORIENTATION_FIELD_NUMBER: _ClassVar[int]
+ DEFAULT: Config.DisplayConfig.DisplayMode
+ DEGREES_0: Config.DisplayConfig.CompassOrientation
+ DEGREES_0_INVERTED: Config.DisplayConfig.CompassOrientation
+ DEGREES_180: Config.DisplayConfig.CompassOrientation
+ DEGREES_180_INVERTED: Config.DisplayConfig.CompassOrientation
+ DEGREES_270: Config.DisplayConfig.CompassOrientation
+ DEGREES_270_INVERTED: Config.DisplayConfig.CompassOrientation
+ DEGREES_90: Config.DisplayConfig.CompassOrientation
+ DEGREES_90_INVERTED: Config.DisplayConfig.CompassOrientation
+ DISPLAYMODE_FIELD_NUMBER: _ClassVar[int]
+ ENABLE_MESSAGE_BUBBLES_FIELD_NUMBER: _ClassVar[int]
+ FLIP_SCREEN_FIELD_NUMBER: _ClassVar[int]
+ GPS_FORMAT_FIELD_NUMBER: _ClassVar[int]
+ HEADING_BOLD_FIELD_NUMBER: _ClassVar[int]
+ IMPERIAL: Config.DisplayConfig.DisplayUnits
+ INVERTED: Config.DisplayConfig.DisplayMode
+ METRIC: Config.DisplayConfig.DisplayUnits
+ OLED_AUTO: Config.DisplayConfig.OledType
+ OLED_FIELD_NUMBER: _ClassVar[int]
+ OLED_SH1106: Config.DisplayConfig.OledType
+ OLED_SH1107: Config.DisplayConfig.OledType
+ OLED_SH1107_128_128: Config.DisplayConfig.OledType
+ OLED_SH1107_ROTATED: Config.DisplayConfig.OledType
+ OLED_SSD1306: Config.DisplayConfig.OledType
+ SCREEN_ON_SECS_FIELD_NUMBER: _ClassVar[int]
+ TWOCOLOR: Config.DisplayConfig.DisplayMode
+ UNITS_FIELD_NUMBER: _ClassVar[int]
+ UNUSED: Config.DisplayConfig.DeprecatedGpsCoordinateFormat
+ USE_12H_CLOCK_FIELD_NUMBER: _ClassVar[int]
+ USE_LONG_NODE_NAME_FIELD_NUMBER: _ClassVar[int]
+ WAKE_ON_TAP_OR_MOTION_FIELD_NUMBER: _ClassVar[int]
+ auto_screen_carousel_secs: int
+ compass_north_top: bool
+ compass_orientation: Config.DisplayConfig.CompassOrientation
+ displaymode: Config.DisplayConfig.DisplayMode
+ enable_message_bubbles: bool
+ flip_screen: bool
+ gps_format: Config.DisplayConfig.DeprecatedGpsCoordinateFormat
+ heading_bold: bool
+ oled: Config.DisplayConfig.OledType
+ screen_on_secs: int
+ units: Config.DisplayConfig.DisplayUnits
+ use_12h_clock: bool
+ use_long_node_name: bool
+ wake_on_tap_or_motion: bool
+ def __init__(self, screen_on_secs: _Optional[int] = ..., gps_format: _Optional[_Union[Config.DisplayConfig.DeprecatedGpsCoordinateFormat, str]] = ..., auto_screen_carousel_secs: _Optional[int] = ..., compass_north_top: bool = ..., flip_screen: bool = ..., units: _Optional[_Union[Config.DisplayConfig.DisplayUnits, str]] = ..., oled: _Optional[_Union[Config.DisplayConfig.OledType, str]] = ..., displaymode: _Optional[_Union[Config.DisplayConfig.DisplayMode, str]] = ..., heading_bold: bool = ..., wake_on_tap_or_motion: bool = ..., compass_orientation: _Optional[_Union[Config.DisplayConfig.CompassOrientation, str]] = ..., use_12h_clock: bool = ..., use_long_node_name: bool = ..., enable_message_bubbles: bool = ...) -> None: ...
+ class LoRaConfig(_message.Message):
+ __slots__ = ["bandwidth", "channel_num", "coding_rate", "config_ok_to_mqtt", "fem_lna_mode", "frequency_offset", "hop_limit", "ignore_incoming", "ignore_mqtt", "modem_preset", "override_duty_cycle", "override_frequency", "pa_fan_disabled", "region", "serial_hal_only", "spread_factor", "sx126x_rx_boosted_gain", "tx_enabled", "tx_power", "use_preset"]
+ class FEM_LNA_Mode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class ModemPreset(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class RegionCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ANZ: Config.LoRaConfig.RegionCode
+ ANZ_433: Config.LoRaConfig.RegionCode
+ BANDWIDTH_FIELD_NUMBER: _ClassVar[int]
+ BR_902: Config.LoRaConfig.RegionCode
+ CHANNEL_NUM_FIELD_NUMBER: _ClassVar[int]
+ CN: Config.LoRaConfig.RegionCode
+ CODING_RATE_FIELD_NUMBER: _ClassVar[int]
+ CONFIG_OK_TO_MQTT_FIELD_NUMBER: _ClassVar[int]
+ DISABLED: Config.LoRaConfig.FEM_LNA_Mode
+ ENABLED: Config.LoRaConfig.FEM_LNA_Mode
+ EU_433: Config.LoRaConfig.RegionCode
+ EU_866: Config.LoRaConfig.RegionCode
+ EU_868: Config.LoRaConfig.RegionCode
+ EU_874: Config.LoRaConfig.RegionCode
+ EU_917: Config.LoRaConfig.RegionCode
+ EU_N_868: Config.LoRaConfig.RegionCode
+ FEM_LNA_MODE_FIELD_NUMBER: _ClassVar[int]
+ FREQUENCY_OFFSET_FIELD_NUMBER: _ClassVar[int]
+ HOP_LIMIT_FIELD_NUMBER: _ClassVar[int]
+ IGNORE_INCOMING_FIELD_NUMBER: _ClassVar[int]
+ IGNORE_MQTT_FIELD_NUMBER: _ClassVar[int]
+ IN: Config.LoRaConfig.RegionCode
+ ITU1_2M: Config.LoRaConfig.RegionCode
+ ITU2_2M: Config.LoRaConfig.RegionCode
+ ITU3_2M: Config.LoRaConfig.RegionCode
+ JP: Config.LoRaConfig.RegionCode
+ KR: Config.LoRaConfig.RegionCode
+ KZ_433: Config.LoRaConfig.RegionCode
+ KZ_863: Config.LoRaConfig.RegionCode
+ LITE_FAST: Config.LoRaConfig.ModemPreset
+ LITE_SLOW: Config.LoRaConfig.ModemPreset
+ LONG_FAST: Config.LoRaConfig.ModemPreset
+ LONG_MODERATE: Config.LoRaConfig.ModemPreset
+ LONG_SLOW: Config.LoRaConfig.ModemPreset
+ LONG_TURBO: Config.LoRaConfig.ModemPreset
+ LORA_24: Config.LoRaConfig.RegionCode
+ MEDIUM_FAST: Config.LoRaConfig.ModemPreset
+ MEDIUM_SLOW: Config.LoRaConfig.ModemPreset
+ MODEM_PRESET_FIELD_NUMBER: _ClassVar[int]
+ MY_433: Config.LoRaConfig.RegionCode
+ MY_919: Config.LoRaConfig.RegionCode
+ NARROW_FAST: Config.LoRaConfig.ModemPreset
+ NARROW_SLOW: Config.LoRaConfig.ModemPreset
+ NOT_PRESENT: Config.LoRaConfig.FEM_LNA_Mode
+ NP_865: Config.LoRaConfig.RegionCode
+ NZ_865: Config.LoRaConfig.RegionCode
+ OVERRIDE_DUTY_CYCLE_FIELD_NUMBER: _ClassVar[int]
+ OVERRIDE_FREQUENCY_FIELD_NUMBER: _ClassVar[int]
+ PA_FAN_DISABLED_FIELD_NUMBER: _ClassVar[int]
+ PH_433: Config.LoRaConfig.RegionCode
+ PH_868: Config.LoRaConfig.RegionCode
+ PH_915: Config.LoRaConfig.RegionCode
+ REGION_FIELD_NUMBER: _ClassVar[int]
+ RU: Config.LoRaConfig.RegionCode
+ SERIAL_HAL_ONLY_FIELD_NUMBER: _ClassVar[int]
+ SG_923: Config.LoRaConfig.RegionCode
+ SHORT_FAST: Config.LoRaConfig.ModemPreset
+ SHORT_SLOW: Config.LoRaConfig.ModemPreset
+ SHORT_TURBO: Config.LoRaConfig.ModemPreset
+ SPREAD_FACTOR_FIELD_NUMBER: _ClassVar[int]
+ SX126X_RX_BOOSTED_GAIN_FIELD_NUMBER: _ClassVar[int]
+ TH: Config.LoRaConfig.RegionCode
+ TW: Config.LoRaConfig.RegionCode
+ TX_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ TX_POWER_FIELD_NUMBER: _ClassVar[int]
+ UA_433: Config.LoRaConfig.RegionCode
+ UA_868: Config.LoRaConfig.RegionCode
+ UNSET: Config.LoRaConfig.RegionCode
+ US: Config.LoRaConfig.RegionCode
+ USE_PRESET_FIELD_NUMBER: _ClassVar[int]
+ VERY_LONG_SLOW: Config.LoRaConfig.ModemPreset
+ bandwidth: int
+ channel_num: int
+ coding_rate: int
+ config_ok_to_mqtt: bool
+ fem_lna_mode: Config.LoRaConfig.FEM_LNA_Mode
+ frequency_offset: float
+ hop_limit: int
+ ignore_incoming: _containers.RepeatedScalarFieldContainer[int]
+ ignore_mqtt: bool
+ modem_preset: Config.LoRaConfig.ModemPreset
+ override_duty_cycle: bool
+ override_frequency: float
+ pa_fan_disabled: bool
+ region: Config.LoRaConfig.RegionCode
+ serial_hal_only: bool
+ spread_factor: int
+ sx126x_rx_boosted_gain: bool
+ tx_enabled: bool
+ tx_power: int
+ use_preset: bool
+ def __init__(self, use_preset: bool = ..., modem_preset: _Optional[_Union[Config.LoRaConfig.ModemPreset, str]] = ..., bandwidth: _Optional[int] = ..., spread_factor: _Optional[int] = ..., coding_rate: _Optional[int] = ..., frequency_offset: _Optional[float] = ..., region: _Optional[_Union[Config.LoRaConfig.RegionCode, str]] = ..., hop_limit: _Optional[int] = ..., tx_enabled: bool = ..., tx_power: _Optional[int] = ..., channel_num: _Optional[int] = ..., override_duty_cycle: bool = ..., sx126x_rx_boosted_gain: bool = ..., override_frequency: _Optional[float] = ..., pa_fan_disabled: bool = ..., ignore_incoming: _Optional[_Iterable[int]] = ..., ignore_mqtt: bool = ..., config_ok_to_mqtt: bool = ..., fem_lna_mode: _Optional[_Union[Config.LoRaConfig.FEM_LNA_Mode, str]] = ..., serial_hal_only: bool = ...) -> None: ...
+ class NetworkConfig(_message.Message):
+ __slots__ = ["address_mode", "enabled_protocols", "eth_enabled", "ipv4_config", "ipv6_enabled", "ntp_server", "rsyslog_server", "wifi_enabled", "wifi_psk", "wifi_ssid"]
+ class AddressMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class ProtocolFlags(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class IpV4Config(_message.Message):
+ __slots__ = ["dns", "gateway", "ip", "subnet"]
+ DNS_FIELD_NUMBER: _ClassVar[int]
+ GATEWAY_FIELD_NUMBER: _ClassVar[int]
+ IP_FIELD_NUMBER: _ClassVar[int]
+ SUBNET_FIELD_NUMBER: _ClassVar[int]
+ dns: int
+ gateway: int
+ ip: int
+ subnet: int
+ def __init__(self, ip: _Optional[int] = ..., gateway: _Optional[int] = ..., subnet: _Optional[int] = ..., dns: _Optional[int] = ...) -> None: ...
+ ADDRESS_MODE_FIELD_NUMBER: _ClassVar[int]
+ DHCP: Config.NetworkConfig.AddressMode
+ ENABLED_PROTOCOLS_FIELD_NUMBER: _ClassVar[int]
+ ETH_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ IPV4_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ IPV6_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ NO_BROADCAST: Config.NetworkConfig.ProtocolFlags
+ NTP_SERVER_FIELD_NUMBER: _ClassVar[int]
+ RSYSLOG_SERVER_FIELD_NUMBER: _ClassVar[int]
+ STATIC: Config.NetworkConfig.AddressMode
+ UDP_BROADCAST: Config.NetworkConfig.ProtocolFlags
+ WIFI_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ WIFI_PSK_FIELD_NUMBER: _ClassVar[int]
+ WIFI_SSID_FIELD_NUMBER: _ClassVar[int]
+ address_mode: Config.NetworkConfig.AddressMode
+ enabled_protocols: int
+ eth_enabled: bool
+ ipv4_config: Config.NetworkConfig.IpV4Config
+ ipv6_enabled: bool
+ ntp_server: str
+ rsyslog_server: str
+ wifi_enabled: bool
+ wifi_psk: str
+ wifi_ssid: str
+ def __init__(self, wifi_enabled: bool = ..., wifi_ssid: _Optional[str] = ..., wifi_psk: _Optional[str] = ..., ntp_server: _Optional[str] = ..., eth_enabled: bool = ..., address_mode: _Optional[_Union[Config.NetworkConfig.AddressMode, str]] = ..., ipv4_config: _Optional[_Union[Config.NetworkConfig.IpV4Config, _Mapping]] = ..., rsyslog_server: _Optional[str] = ..., enabled_protocols: _Optional[int] = ..., ipv6_enabled: bool = ...) -> None: ...
+ class PositionConfig(_message.Message):
+ __slots__ = ["broadcast_smart_minimum_distance", "broadcast_smart_minimum_interval_secs", "fixed_position", "gps_attempt_time", "gps_en_gpio", "gps_enabled", "gps_mode", "gps_update_interval", "position_broadcast_secs", "position_broadcast_smart_enabled", "position_flags", "rx_gpio", "tx_gpio"]
+ class GpsMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class PositionFlags(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ALTITUDE: Config.PositionConfig.PositionFlags
+ ALTITUDE_MSL: Config.PositionConfig.PositionFlags
+ BROADCAST_SMART_MINIMUM_DISTANCE_FIELD_NUMBER: _ClassVar[int]
+ BROADCAST_SMART_MINIMUM_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
+ DISABLED: Config.PositionConfig.GpsMode
+ DOP: Config.PositionConfig.PositionFlags
+ ENABLED: Config.PositionConfig.GpsMode
+ FIXED_POSITION_FIELD_NUMBER: _ClassVar[int]
+ GEOIDAL_SEPARATION: Config.PositionConfig.PositionFlags
+ GPS_ATTEMPT_TIME_FIELD_NUMBER: _ClassVar[int]
+ GPS_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ GPS_EN_GPIO_FIELD_NUMBER: _ClassVar[int]
+ GPS_MODE_FIELD_NUMBER: _ClassVar[int]
+ GPS_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ HEADING: Config.PositionConfig.PositionFlags
+ HVDOP: Config.PositionConfig.PositionFlags
+ NOT_PRESENT: Config.PositionConfig.GpsMode
+ POSITION_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
+ POSITION_BROADCAST_SMART_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ POSITION_FLAGS_FIELD_NUMBER: _ClassVar[int]
+ RX_GPIO_FIELD_NUMBER: _ClassVar[int]
+ SATINVIEW: Config.PositionConfig.PositionFlags
+ SEQ_NO: Config.PositionConfig.PositionFlags
+ SPEED: Config.PositionConfig.PositionFlags
+ TIMESTAMP: Config.PositionConfig.PositionFlags
+ TX_GPIO_FIELD_NUMBER: _ClassVar[int]
+ UNSET: Config.PositionConfig.PositionFlags
+ broadcast_smart_minimum_distance: int
+ broadcast_smart_minimum_interval_secs: int
+ fixed_position: bool
+ gps_attempt_time: int
+ gps_en_gpio: int
+ gps_enabled: bool
+ gps_mode: Config.PositionConfig.GpsMode
+ gps_update_interval: int
+ position_broadcast_secs: int
+ position_broadcast_smart_enabled: bool
+ position_flags: int
+ rx_gpio: int
+ tx_gpio: int
+ def __init__(self, position_broadcast_secs: _Optional[int] = ..., position_broadcast_smart_enabled: bool = ..., fixed_position: bool = ..., gps_enabled: bool = ..., gps_update_interval: _Optional[int] = ..., gps_attempt_time: _Optional[int] = ..., position_flags: _Optional[int] = ..., rx_gpio: _Optional[int] = ..., tx_gpio: _Optional[int] = ..., broadcast_smart_minimum_distance: _Optional[int] = ..., broadcast_smart_minimum_interval_secs: _Optional[int] = ..., gps_en_gpio: _Optional[int] = ..., gps_mode: _Optional[_Union[Config.PositionConfig.GpsMode, str]] = ...) -> None: ...
+ class PowerConfig(_message.Message):
+ __slots__ = ["adc_multiplier_override", "device_battery_ina_address", "is_power_saving", "ls_secs", "min_wake_secs", "on_battery_shutdown_after_secs", "powermon_enables", "sds_secs", "wait_bluetooth_secs"]
+ ADC_MULTIPLIER_OVERRIDE_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_BATTERY_INA_ADDRESS_FIELD_NUMBER: _ClassVar[int]
+ IS_POWER_SAVING_FIELD_NUMBER: _ClassVar[int]
+ LS_SECS_FIELD_NUMBER: _ClassVar[int]
+ MIN_WAKE_SECS_FIELD_NUMBER: _ClassVar[int]
+ ON_BATTERY_SHUTDOWN_AFTER_SECS_FIELD_NUMBER: _ClassVar[int]
+ POWERMON_ENABLES_FIELD_NUMBER: _ClassVar[int]
+ SDS_SECS_FIELD_NUMBER: _ClassVar[int]
+ WAIT_BLUETOOTH_SECS_FIELD_NUMBER: _ClassVar[int]
+ adc_multiplier_override: float
+ device_battery_ina_address: int
+ is_power_saving: bool
+ ls_secs: int
+ min_wake_secs: int
+ on_battery_shutdown_after_secs: int
+ powermon_enables: int
+ sds_secs: int
+ wait_bluetooth_secs: int
+ def __init__(self, is_power_saving: bool = ..., on_battery_shutdown_after_secs: _Optional[int] = ..., adc_multiplier_override: _Optional[float] = ..., wait_bluetooth_secs: _Optional[int] = ..., sds_secs: _Optional[int] = ..., ls_secs: _Optional[int] = ..., min_wake_secs: _Optional[int] = ..., device_battery_ina_address: _Optional[int] = ..., powermon_enables: _Optional[int] = ...) -> None: ...
+ class SecurityConfig(_message.Message):
+ __slots__ = ["admin_channel_enabled", "admin_key", "debug_log_api_enabled", "is_managed", "private_key", "public_key", "serial_enabled"]
+ ADMIN_CHANNEL_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ADMIN_KEY_FIELD_NUMBER: _ClassVar[int]
+ DEBUG_LOG_API_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ IS_MANAGED_FIELD_NUMBER: _ClassVar[int]
+ PRIVATE_KEY_FIELD_NUMBER: _ClassVar[int]
+ PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
+ SERIAL_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ admin_channel_enabled: bool
+ admin_key: _containers.RepeatedScalarFieldContainer[bytes]
+ debug_log_api_enabled: bool
+ is_managed: bool
+ private_key: bytes
+ public_key: bytes
+ serial_enabled: bool
+ def __init__(self, public_key: _Optional[bytes] = ..., private_key: _Optional[bytes] = ..., admin_key: _Optional[_Iterable[bytes]] = ..., is_managed: bool = ..., serial_enabled: bool = ..., debug_log_api_enabled: bool = ..., admin_channel_enabled: bool = ...) -> None: ...
+ class SessionkeyConfig(_message.Message):
+ __slots__ = []
+ def __init__(self) -> None: ...
+ BLUETOOTH_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_UI_FIELD_NUMBER: _ClassVar[int]
+ DISPLAY_FIELD_NUMBER: _ClassVar[int]
+ LORA_FIELD_NUMBER: _ClassVar[int]
+ NETWORK_FIELD_NUMBER: _ClassVar[int]
+ POSITION_FIELD_NUMBER: _ClassVar[int]
+ POWER_FIELD_NUMBER: _ClassVar[int]
+ SECURITY_FIELD_NUMBER: _ClassVar[int]
+ SESSIONKEY_FIELD_NUMBER: _ClassVar[int]
+ bluetooth: Config.BluetoothConfig
+ device: Config.DeviceConfig
+ device_ui: _device_ui_pb2.DeviceUIConfig
+ display: Config.DisplayConfig
+ lora: Config.LoRaConfig
+ network: Config.NetworkConfig
+ position: Config.PositionConfig
+ power: Config.PowerConfig
+ security: Config.SecurityConfig
+ sessionkey: Config.SessionkeyConfig
+ def __init__(self, device: _Optional[_Union[Config.DeviceConfig, _Mapping]] = ..., position: _Optional[_Union[Config.PositionConfig, _Mapping]] = ..., power: _Optional[_Union[Config.PowerConfig, _Mapping]] = ..., network: _Optional[_Union[Config.NetworkConfig, _Mapping]] = ..., display: _Optional[_Union[Config.DisplayConfig, _Mapping]] = ..., lora: _Optional[_Union[Config.LoRaConfig, _Mapping]] = ..., bluetooth: _Optional[_Union[Config.BluetoothConfig, _Mapping]] = ..., security: _Optional[_Union[Config.SecurityConfig, _Mapping]] = ..., sessionkey: _Optional[_Union[Config.SessionkeyConfig, _Mapping]] = ..., device_ui: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ...) -> None: ...
diff --git a/meshtastic/protobuf/connection_status_pb2.py b/meshtastic/protobuf/connection_status_pb2.py
index 050e330..2ffc6fc 100644
--- a/meshtastic/protobuf/connection_status_pb2.py
+++ b/meshtastic/protobuf/connection_status_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/connection_status.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,22 +15,22 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+meshtastic/protobuf/connection_status.proto\x12\x13meshtastic.protobuf\"\xd5\x02\n\x16\x44\x65viceConnectionStatus\x12<\n\x04wifi\x18\x01 \x01(\x0b\x32).meshtastic.protobuf.WifiConnectionStatusH\x00\x88\x01\x01\x12\x44\n\x08\x65thernet\x18\x02 \x01(\x0b\x32-.meshtastic.protobuf.EthernetConnectionStatusH\x01\x88\x01\x01\x12\x46\n\tbluetooth\x18\x03 \x01(\x0b\x32..meshtastic.protobuf.BluetoothConnectionStatusH\x02\x88\x01\x01\x12@\n\x06serial\x18\x04 \x01(\x0b\x32+.meshtastic.protobuf.SerialConnectionStatusH\x03\x88\x01\x01\x42\x07\n\x05_wifiB\x0b\n\t_ethernetB\x0c\n\n_bluetoothB\t\n\x07_serial\"p\n\x14WifiConnectionStatus\x12<\n\x06status\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.NetworkConnectionStatus\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x0c\n\x04rssi\x18\x03 \x01(\x05\"X\n\x18\x45thernetConnectionStatus\x12<\n\x06status\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.NetworkConnectionStatus\"{\n\x17NetworkConnectionStatus\x12\x12\n\nip_address\x18\x01 \x01(\x07\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x12\x19\n\x11is_mqtt_connected\x18\x03 \x01(\x08\x12\x1b\n\x13is_syslog_connected\x18\x04 \x01(\x08\"L\n\x19\x42luetoothConnectionStatus\x12\x0b\n\x03pin\x18\x01 \x01(\r\x12\x0c\n\x04rssi\x18\x02 \x01(\x05\x12\x14\n\x0cis_connected\x18\x03 \x01(\x08\"<\n\x16SerialConnectionStatus\x12\x0c\n\x04\x62\x61ud\x18\x01 \x01(\r\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x42\x66\n\x14org.meshtastic.protoB\x10\x43onnStatusProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.connection_status_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.connection_status_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\020ConnStatusProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_DEVICECONNECTIONSTATUS']._serialized_start=69
- _globals['_DEVICECONNECTIONSTATUS']._serialized_end=410
- _globals['_WIFICONNECTIONSTATUS']._serialized_start=412
- _globals['_WIFICONNECTIONSTATUS']._serialized_end=524
- _globals['_ETHERNETCONNECTIONSTATUS']._serialized_start=526
- _globals['_ETHERNETCONNECTIONSTATUS']._serialized_end=614
- _globals['_NETWORKCONNECTIONSTATUS']._serialized_start=616
- _globals['_NETWORKCONNECTIONSTATUS']._serialized_end=739
- _globals['_BLUETOOTHCONNECTIONSTATUS']._serialized_start=741
- _globals['_BLUETOOTHCONNECTIONSTATUS']._serialized_end=817
- _globals['_SERIALCONNECTIONSTATUS']._serialized_start=819
- _globals['_SERIALCONNECTIONSTATUS']._serialized_end=879
+ _DEVICECONNECTIONSTATUS._serialized_start=69
+ _DEVICECONNECTIONSTATUS._serialized_end=410
+ _WIFICONNECTIONSTATUS._serialized_start=412
+ _WIFICONNECTIONSTATUS._serialized_end=524
+ _ETHERNETCONNECTIONSTATUS._serialized_start=526
+ _ETHERNETCONNECTIONSTATUS._serialized_end=614
+ _NETWORKCONNECTIONSTATUS._serialized_start=616
+ _NETWORKCONNECTIONSTATUS._serialized_end=739
+ _BLUETOOTHCONNECTIONSTATUS._serialized_start=741
+ _BLUETOOTHCONNECTIONSTATUS._serialized_end=817
+ _SERIALCONNECTIONSTATUS._serialized_start=819
+ _SERIALCONNECTIONSTATUS._serialized_end=879
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/connection_status_pb2.pyi b/meshtastic/protobuf/connection_status_pb2.pyi
index 7b69140..6f31c5b 100644
--- a/meshtastic/protobuf/connection_status_pb2.pyi
+++ b/meshtastic/protobuf/connection_status_pb2.pyi
@@ -1,228 +1,63 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class BluetoothConnectionStatus(_message.Message):
+ __slots__ = ["is_connected", "pin", "rssi"]
+ IS_CONNECTED_FIELD_NUMBER: _ClassVar[int]
+ PIN_FIELD_NUMBER: _ClassVar[int]
+ RSSI_FIELD_NUMBER: _ClassVar[int]
+ is_connected: bool
+ pin: int
+ rssi: int
+ def __init__(self, pin: _Optional[int] = ..., rssi: _Optional[int] = ..., is_connected: bool = ...) -> None: ...
-@typing.final
-class DeviceConnectionStatus(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class DeviceConnectionStatus(_message.Message):
+ __slots__ = ["bluetooth", "ethernet", "serial", "wifi"]
+ BLUETOOTH_FIELD_NUMBER: _ClassVar[int]
+ ETHERNET_FIELD_NUMBER: _ClassVar[int]
+ SERIAL_FIELD_NUMBER: _ClassVar[int]
+ WIFI_FIELD_NUMBER: _ClassVar[int]
+ bluetooth: BluetoothConnectionStatus
+ ethernet: EthernetConnectionStatus
+ serial: SerialConnectionStatus
+ wifi: WifiConnectionStatus
+ def __init__(self, wifi: _Optional[_Union[WifiConnectionStatus, _Mapping]] = ..., ethernet: _Optional[_Union[EthernetConnectionStatus, _Mapping]] = ..., bluetooth: _Optional[_Union[BluetoothConnectionStatus, _Mapping]] = ..., serial: _Optional[_Union[SerialConnectionStatus, _Mapping]] = ...) -> None: ...
- WIFI_FIELD_NUMBER: builtins.int
- ETHERNET_FIELD_NUMBER: builtins.int
- BLUETOOTH_FIELD_NUMBER: builtins.int
- SERIAL_FIELD_NUMBER: builtins.int
- @property
- def wifi(self) -> global___WifiConnectionStatus:
- """
- WiFi Status
- """
+class EthernetConnectionStatus(_message.Message):
+ __slots__ = ["status"]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ status: NetworkConnectionStatus
+ def __init__(self, status: _Optional[_Union[NetworkConnectionStatus, _Mapping]] = ...) -> None: ...
- @property
- def ethernet(self) -> global___EthernetConnectionStatus:
- """
- WiFi Status
- """
+class NetworkConnectionStatus(_message.Message):
+ __slots__ = ["ip_address", "is_connected", "is_mqtt_connected", "is_syslog_connected"]
+ IP_ADDRESS_FIELD_NUMBER: _ClassVar[int]
+ IS_CONNECTED_FIELD_NUMBER: _ClassVar[int]
+ IS_MQTT_CONNECTED_FIELD_NUMBER: _ClassVar[int]
+ IS_SYSLOG_CONNECTED_FIELD_NUMBER: _ClassVar[int]
+ ip_address: int
+ is_connected: bool
+ is_mqtt_connected: bool
+ is_syslog_connected: bool
+ def __init__(self, ip_address: _Optional[int] = ..., is_connected: bool = ..., is_mqtt_connected: bool = ..., is_syslog_connected: bool = ...) -> None: ...
- @property
- def bluetooth(self) -> global___BluetoothConnectionStatus:
- """
- Bluetooth Status
- """
+class SerialConnectionStatus(_message.Message):
+ __slots__ = ["baud", "is_connected"]
+ BAUD_FIELD_NUMBER: _ClassVar[int]
+ IS_CONNECTED_FIELD_NUMBER: _ClassVar[int]
+ baud: int
+ is_connected: bool
+ def __init__(self, baud: _Optional[int] = ..., is_connected: bool = ...) -> None: ...
- @property
- def serial(self) -> global___SerialConnectionStatus:
- """
- Serial Status
- """
-
- def __init__(
- self,
- *,
- wifi: global___WifiConnectionStatus | None = ...,
- ethernet: global___EthernetConnectionStatus | None = ...,
- bluetooth: global___BluetoothConnectionStatus | None = ...,
- serial: global___SerialConnectionStatus | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_bluetooth", b"_bluetooth", "_ethernet", b"_ethernet", "_serial", b"_serial", "_wifi", b"_wifi", "bluetooth", b"bluetooth", "ethernet", b"ethernet", "serial", b"serial", "wifi", b"wifi"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_bluetooth", b"_bluetooth", "_ethernet", b"_ethernet", "_serial", b"_serial", "_wifi", b"_wifi", "bluetooth", b"bluetooth", "ethernet", b"ethernet", "serial", b"serial", "wifi", b"wifi"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_bluetooth", b"_bluetooth"]) -> typing.Literal["bluetooth"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ethernet", b"_ethernet"]) -> typing.Literal["ethernet"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_serial", b"_serial"]) -> typing.Literal["serial"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_wifi", b"_wifi"]) -> typing.Literal["wifi"] | None: ...
-
-global___DeviceConnectionStatus = DeviceConnectionStatus
-
-@typing.final
-class WifiConnectionStatus(google.protobuf.message.Message):
- """
- WiFi connection status
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- STATUS_FIELD_NUMBER: builtins.int
- SSID_FIELD_NUMBER: builtins.int
- RSSI_FIELD_NUMBER: builtins.int
- ssid: builtins.str
- """
- WiFi access point SSID
- """
- rssi: builtins.int
- """
- RSSI of wireless connection
- """
- @property
- def status(self) -> global___NetworkConnectionStatus:
- """
- Connection status
- """
-
- def __init__(
- self,
- *,
- status: global___NetworkConnectionStatus | None = ...,
- ssid: builtins.str = ...,
- rssi: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["status", b"status"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["rssi", b"rssi", "ssid", b"ssid", "status", b"status"]) -> None: ...
-
-global___WifiConnectionStatus = WifiConnectionStatus
-
-@typing.final
-class EthernetConnectionStatus(google.protobuf.message.Message):
- """
- Ethernet connection status
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- STATUS_FIELD_NUMBER: builtins.int
- @property
- def status(self) -> global___NetworkConnectionStatus:
- """
- Connection status
- """
-
- def __init__(
- self,
- *,
- status: global___NetworkConnectionStatus | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["status", b"status"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["status", b"status"]) -> None: ...
-
-global___EthernetConnectionStatus = EthernetConnectionStatus
-
-@typing.final
-class NetworkConnectionStatus(google.protobuf.message.Message):
- """
- Ethernet or WiFi connection status
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- IP_ADDRESS_FIELD_NUMBER: builtins.int
- IS_CONNECTED_FIELD_NUMBER: builtins.int
- IS_MQTT_CONNECTED_FIELD_NUMBER: builtins.int
- IS_SYSLOG_CONNECTED_FIELD_NUMBER: builtins.int
- ip_address: builtins.int
- """
- IP address of device
- """
- is_connected: builtins.bool
- """
- Whether the device has an active connection or not
- """
- is_mqtt_connected: builtins.bool
- """
- Whether the device has an active connection to an MQTT broker or not
- """
- is_syslog_connected: builtins.bool
- """
- Whether the device is actively remote syslogging or not
- """
- def __init__(
- self,
- *,
- ip_address: builtins.int = ...,
- is_connected: builtins.bool = ...,
- is_mqtt_connected: builtins.bool = ...,
- is_syslog_connected: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["ip_address", b"ip_address", "is_connected", b"is_connected", "is_mqtt_connected", b"is_mqtt_connected", "is_syslog_connected", b"is_syslog_connected"]) -> None: ...
-
-global___NetworkConnectionStatus = NetworkConnectionStatus
-
-@typing.final
-class BluetoothConnectionStatus(google.protobuf.message.Message):
- """
- Bluetooth connection status
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PIN_FIELD_NUMBER: builtins.int
- RSSI_FIELD_NUMBER: builtins.int
- IS_CONNECTED_FIELD_NUMBER: builtins.int
- pin: builtins.int
- """
- The pairing PIN for bluetooth
- """
- rssi: builtins.int
- """
- RSSI of bluetooth connection
- """
- is_connected: builtins.bool
- """
- Whether the device has an active connection or not
- """
- def __init__(
- self,
- *,
- pin: builtins.int = ...,
- rssi: builtins.int = ...,
- is_connected: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["is_connected", b"is_connected", "pin", b"pin", "rssi", b"rssi"]) -> None: ...
-
-global___BluetoothConnectionStatus = BluetoothConnectionStatus
-
-@typing.final
-class SerialConnectionStatus(google.protobuf.message.Message):
- """
- Serial connection status
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- BAUD_FIELD_NUMBER: builtins.int
- IS_CONNECTED_FIELD_NUMBER: builtins.int
- baud: builtins.int
- """
- Serial baud rate
- """
- is_connected: builtins.bool
- """
- Whether the device has an active connection or not
- """
- def __init__(
- self,
- *,
- baud: builtins.int = ...,
- is_connected: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["baud", b"baud", "is_connected", b"is_connected"]) -> None: ...
-
-global___SerialConnectionStatus = SerialConnectionStatus
+class WifiConnectionStatus(_message.Message):
+ __slots__ = ["rssi", "ssid", "status"]
+ RSSI_FIELD_NUMBER: _ClassVar[int]
+ SSID_FIELD_NUMBER: _ClassVar[int]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ rssi: int
+ ssid: str
+ status: NetworkConnectionStatus
+ def __init__(self, status: _Optional[_Union[NetworkConnectionStatus, _Mapping]] = ..., ssid: _Optional[str] = ..., rssi: _Optional[int] = ...) -> None: ...
diff --git a/meshtastic/protobuf/device_ui_pb2.py b/meshtastic/protobuf/device_ui_pb2.py
index 28eb04e..d56d304 100644
--- a/meshtastic/protobuf/device_ui_pb2.py
+++ b/meshtastic/protobuf/device_ui_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/device_ui.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,28 +15,28 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/device_ui.proto\x12\x13meshtastic.protobuf\"\xff\x05\n\x0e\x44\x65viceUIConfig\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x19\n\x11screen_brightness\x18\x02 \x01(\r\x12\x16\n\x0escreen_timeout\x18\x03 \x01(\r\x12\x13\n\x0bscreen_lock\x18\x04 \x01(\x08\x12\x15\n\rsettings_lock\x18\x05 \x01(\x08\x12\x10\n\x08pin_code\x18\x06 \x01(\r\x12)\n\x05theme\x18\x07 \x01(\x0e\x32\x1a.meshtastic.protobuf.Theme\x12\x15\n\ralert_enabled\x18\x08 \x01(\x08\x12\x16\n\x0e\x62\x61nner_enabled\x18\t \x01(\x08\x12\x14\n\x0cring_tone_id\x18\n \x01(\r\x12/\n\x08language\x18\x0b \x01(\x0e\x32\x1d.meshtastic.protobuf.Language\x12\x34\n\x0bnode_filter\x18\x0c \x01(\x0b\x32\x1f.meshtastic.protobuf.NodeFilter\x12:\n\x0enode_highlight\x18\r \x01(\x0b\x32\".meshtastic.protobuf.NodeHighlight\x12\x18\n\x10\x63\x61libration_data\x18\x0e \x01(\x0c\x12*\n\x08map_data\x18\x0f \x01(\x0b\x32\x18.meshtastic.protobuf.Map\x12\x36\n\x0c\x63ompass_mode\x18\x10 \x01(\x0e\x32 .meshtastic.protobuf.CompassMode\x12\x18\n\x10screen_rgb_color\x18\x11 \x01(\r\x12\x1b\n\x13is_clockface_analog\x18\x12 \x01(\x08\x12K\n\ngps_format\x18\x13 \x01(\x0e\x32\x37.meshtastic.protobuf.DeviceUIConfig.GpsCoordinateFormat\"V\n\x13GpsCoordinateFormat\x12\x07\n\x03\x44\x45\x43\x10\x00\x12\x07\n\x03\x44MS\x10\x01\x12\x07\n\x03UTM\x10\x02\x12\x08\n\x04MGRS\x10\x03\x12\x07\n\x03OLC\x10\x04\x12\x08\n\x04OSGR\x10\x05\x12\x07\n\x03MLS\x10\x06\"\xa7\x01\n\nNodeFilter\x12\x16\n\x0eunknown_switch\x18\x01 \x01(\x08\x12\x16\n\x0eoffline_switch\x18\x02 \x01(\x08\x12\x19\n\x11public_key_switch\x18\x03 \x01(\x08\x12\x11\n\thops_away\x18\x04 \x01(\x05\x12\x17\n\x0fposition_switch\x18\x05 \x01(\x08\x12\x11\n\tnode_name\x18\x06 \x01(\t\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\x05\"~\n\rNodeHighlight\x12\x13\n\x0b\x63hat_switch\x18\x01 \x01(\x08\x12\x17\n\x0fposition_switch\x18\x02 \x01(\x08\x12\x18\n\x10telemetry_switch\x18\x03 \x01(\x08\x12\x12\n\niaq_switch\x18\x04 \x01(\x08\x12\x11\n\tnode_name\x18\x05 \x01(\t\"=\n\x08GeoPoint\x12\x0c\n\x04zoom\x18\x01 \x01(\x05\x12\x10\n\x08latitude\x18\x02 \x01(\x05\x12\x11\n\tlongitude\x18\x03 \x01(\x05\"U\n\x03Map\x12+\n\x04home\x18\x01 \x01(\x0b\x32\x1d.meshtastic.protobuf.GeoPoint\x12\r\n\x05style\x18\x02 \x01(\t\x12\x12\n\nfollow_gps\x18\x03 \x01(\x08*>\n\x0b\x43ompassMode\x12\x0b\n\x07\x44YNAMIC\x10\x00\x12\x0e\n\nFIXED_RING\x10\x01\x12\x12\n\x0e\x46REEZE_HEADING\x10\x02*%\n\x05Theme\x12\x08\n\x04\x44\x41RK\x10\x00\x12\t\n\x05LIGHT\x10\x01\x12\x07\n\x03RED\x10\x02*\xc0\x02\n\x08Language\x12\x0b\n\x07\x45NGLISH\x10\x00\x12\n\n\x06\x46RENCH\x10\x01\x12\n\n\x06GERMAN\x10\x02\x12\x0b\n\x07ITALIAN\x10\x03\x12\x0e\n\nPORTUGUESE\x10\x04\x12\x0b\n\x07SPANISH\x10\x05\x12\x0b\n\x07SWEDISH\x10\x06\x12\x0b\n\x07\x46INNISH\x10\x07\x12\n\n\x06POLISH\x10\x08\x12\x0b\n\x07TURKISH\x10\t\x12\x0b\n\x07SERBIAN\x10\n\x12\x0b\n\x07RUSSIAN\x10\x0b\x12\t\n\x05\x44UTCH\x10\x0c\x12\t\n\x05GREEK\x10\r\x12\r\n\tNORWEGIAN\x10\x0e\x12\r\n\tSLOVENIAN\x10\x0f\x12\r\n\tUKRAINIAN\x10\x10\x12\r\n\tBULGARIAN\x10\x11\x12\t\n\x05\x43ZECH\x10\x12\x12\n\n\x06\x44\x41NISH\x10\x13\x12\x16\n\x12SIMPLIFIED_CHINESE\x10\x1e\x12\x17\n\x13TRADITIONAL_CHINESE\x10\x1f\x42\x64\n\x14org.meshtastic.protoB\x0e\x44\x65viceUIProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.device_ui_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.device_ui_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\016DeviceUIProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_COMPASSMODE']._serialized_start=1278
- _globals['_COMPASSMODE']._serialized_end=1340
- _globals['_THEME']._serialized_start=1342
- _globals['_THEME']._serialized_end=1379
- _globals['_LANGUAGE']._serialized_start=1382
- _globals['_LANGUAGE']._serialized_end=1702
- _globals['_DEVICEUICONFIG']._serialized_start=61
- _globals['_DEVICEUICONFIG']._serialized_end=828
- _globals['_DEVICEUICONFIG_GPSCOORDINATEFORMAT']._serialized_start=742
- _globals['_DEVICEUICONFIG_GPSCOORDINATEFORMAT']._serialized_end=828
- _globals['_NODEFILTER']._serialized_start=831
- _globals['_NODEFILTER']._serialized_end=998
- _globals['_NODEHIGHLIGHT']._serialized_start=1000
- _globals['_NODEHIGHLIGHT']._serialized_end=1126
- _globals['_GEOPOINT']._serialized_start=1128
- _globals['_GEOPOINT']._serialized_end=1189
- _globals['_MAP']._serialized_start=1191
- _globals['_MAP']._serialized_end=1276
+ _COMPASSMODE._serialized_start=1278
+ _COMPASSMODE._serialized_end=1340
+ _THEME._serialized_start=1342
+ _THEME._serialized_end=1379
+ _LANGUAGE._serialized_start=1382
+ _LANGUAGE._serialized_end=1702
+ _DEVICEUICONFIG._serialized_start=61
+ _DEVICEUICONFIG._serialized_end=828
+ _DEVICEUICONFIG_GPSCOORDINATEFORMAT._serialized_start=742
+ _DEVICEUICONFIG_GPSCOORDINATEFORMAT._serialized_end=828
+ _NODEFILTER._serialized_start=831
+ _NODEFILTER._serialized_end=998
+ _NODEHIGHLIGHT._serialized_start=1000
+ _NODEHIGHLIGHT._serialized_end=1126
+ _GEOPOINT._serialized_start=1128
+ _GEOPOINT._serialized_end=1189
+ _MAP._serialized_start=1191
+ _MAP._serialized_end=1276
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/device_ui_pb2.pyi b/meshtastic/protobuf/device_ui_pb2.pyi
index 065215b..4b581e9 100644
--- a/meshtastic/protobuf/device_ui_pb2.pyi
+++ b/meshtastic/protobuf/device_ui_pb2.pyi
@@ -1,649 +1,146 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+BULGARIAN: Language
+CZECH: Language
+DANISH: Language
+DARK: Theme
+DESCRIPTOR: _descriptor.FileDescriptor
+DUTCH: Language
+DYNAMIC: CompassMode
+ENGLISH: Language
+FINNISH: Language
+FIXED_RING: CompassMode
+FREEZE_HEADING: CompassMode
+FRENCH: Language
+GERMAN: Language
+GREEK: Language
+ITALIAN: Language
+LIGHT: Theme
+NORWEGIAN: Language
+POLISH: Language
+PORTUGUESE: Language
+RED: Theme
+RUSSIAN: Language
+SERBIAN: Language
+SIMPLIFIED_CHINESE: Language
+SLOVENIAN: Language
+SPANISH: Language
+SWEDISH: Language
+TRADITIONAL_CHINESE: Language
+TURKISH: Language
+UKRAINIAN: Language
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class DeviceUIConfig(_message.Message):
+ __slots__ = ["alert_enabled", "banner_enabled", "calibration_data", "compass_mode", "gps_format", "is_clockface_analog", "language", "map_data", "node_filter", "node_highlight", "pin_code", "ring_tone_id", "screen_brightness", "screen_lock", "screen_rgb_color", "screen_timeout", "settings_lock", "theme", "version"]
+ class GpsCoordinateFormat(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ALERT_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ BANNER_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ CALIBRATION_DATA_FIELD_NUMBER: _ClassVar[int]
+ COMPASS_MODE_FIELD_NUMBER: _ClassVar[int]
+ DEC: DeviceUIConfig.GpsCoordinateFormat
+ DMS: DeviceUIConfig.GpsCoordinateFormat
+ GPS_FORMAT_FIELD_NUMBER: _ClassVar[int]
+ IS_CLOCKFACE_ANALOG_FIELD_NUMBER: _ClassVar[int]
+ LANGUAGE_FIELD_NUMBER: _ClassVar[int]
+ MAP_DATA_FIELD_NUMBER: _ClassVar[int]
+ MGRS: DeviceUIConfig.GpsCoordinateFormat
+ MLS: DeviceUIConfig.GpsCoordinateFormat
+ NODE_FILTER_FIELD_NUMBER: _ClassVar[int]
+ NODE_HIGHLIGHT_FIELD_NUMBER: _ClassVar[int]
+ OLC: DeviceUIConfig.GpsCoordinateFormat
+ OSGR: DeviceUIConfig.GpsCoordinateFormat
+ PIN_CODE_FIELD_NUMBER: _ClassVar[int]
+ RING_TONE_ID_FIELD_NUMBER: _ClassVar[int]
+ SCREEN_BRIGHTNESS_FIELD_NUMBER: _ClassVar[int]
+ SCREEN_LOCK_FIELD_NUMBER: _ClassVar[int]
+ SCREEN_RGB_COLOR_FIELD_NUMBER: _ClassVar[int]
+ SCREEN_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+ SETTINGS_LOCK_FIELD_NUMBER: _ClassVar[int]
+ THEME_FIELD_NUMBER: _ClassVar[int]
+ UTM: DeviceUIConfig.GpsCoordinateFormat
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ alert_enabled: bool
+ banner_enabled: bool
+ calibration_data: bytes
+ compass_mode: CompassMode
+ gps_format: DeviceUIConfig.GpsCoordinateFormat
+ is_clockface_analog: bool
+ language: Language
+ map_data: Map
+ node_filter: NodeFilter
+ node_highlight: NodeHighlight
+ pin_code: int
+ ring_tone_id: int
+ screen_brightness: int
+ screen_lock: bool
+ screen_rgb_color: int
+ screen_timeout: int
+ settings_lock: bool
+ theme: Theme
+ version: int
+ def __init__(self, version: _Optional[int] = ..., screen_brightness: _Optional[int] = ..., screen_timeout: _Optional[int] = ..., screen_lock: bool = ..., settings_lock: bool = ..., pin_code: _Optional[int] = ..., theme: _Optional[_Union[Theme, str]] = ..., alert_enabled: bool = ..., banner_enabled: bool = ..., ring_tone_id: _Optional[int] = ..., language: _Optional[_Union[Language, str]] = ..., node_filter: _Optional[_Union[NodeFilter, _Mapping]] = ..., node_highlight: _Optional[_Union[NodeHighlight, _Mapping]] = ..., calibration_data: _Optional[bytes] = ..., map_data: _Optional[_Union[Map, _Mapping]] = ..., compass_mode: _Optional[_Union[CompassMode, str]] = ..., screen_rgb_color: _Optional[int] = ..., is_clockface_analog: bool = ..., gps_format: _Optional[_Union[DeviceUIConfig.GpsCoordinateFormat, str]] = ...) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class GeoPoint(_message.Message):
+ __slots__ = ["latitude", "longitude", "zoom"]
+ LATITUDE_FIELD_NUMBER: _ClassVar[int]
+ LONGITUDE_FIELD_NUMBER: _ClassVar[int]
+ ZOOM_FIELD_NUMBER: _ClassVar[int]
+ latitude: int
+ longitude: int
+ zoom: int
+ def __init__(self, zoom: _Optional[int] = ..., latitude: _Optional[int] = ..., longitude: _Optional[int] = ...) -> None: ...
-class _CompassMode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class Map(_message.Message):
+ __slots__ = ["follow_gps", "home", "style"]
+ FOLLOW_GPS_FIELD_NUMBER: _ClassVar[int]
+ HOME_FIELD_NUMBER: _ClassVar[int]
+ STYLE_FIELD_NUMBER: _ClassVar[int]
+ follow_gps: bool
+ home: GeoPoint
+ style: str
+ def __init__(self, home: _Optional[_Union[GeoPoint, _Mapping]] = ..., style: _Optional[str] = ..., follow_gps: bool = ...) -> None: ...
-class _CompassModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_CompassMode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DYNAMIC: _CompassMode.ValueType # 0
- """
- Compass with dynamic ring and heading
- """
- FIXED_RING: _CompassMode.ValueType # 1
- """
- Compass with fixed ring and heading
- """
- FREEZE_HEADING: _CompassMode.ValueType # 2
- """
- Compass with heading and freeze option
- """
+class NodeFilter(_message.Message):
+ __slots__ = ["channel", "hops_away", "node_name", "offline_switch", "position_switch", "public_key_switch", "unknown_switch"]
+ CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
+ NODE_NAME_FIELD_NUMBER: _ClassVar[int]
+ OFFLINE_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ POSITION_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ PUBLIC_KEY_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ UNKNOWN_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ channel: int
+ hops_away: int
+ node_name: str
+ offline_switch: bool
+ position_switch: bool
+ public_key_switch: bool
+ unknown_switch: bool
+ def __init__(self, unknown_switch: bool = ..., offline_switch: bool = ..., public_key_switch: bool = ..., hops_away: _Optional[int] = ..., position_switch: bool = ..., node_name: _Optional[str] = ..., channel: _Optional[int] = ...) -> None: ...
-class CompassMode(_CompassMode, metaclass=_CompassModeEnumTypeWrapper): ...
+class NodeHighlight(_message.Message):
+ __slots__ = ["chat_switch", "iaq_switch", "node_name", "position_switch", "telemetry_switch"]
+ CHAT_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ IAQ_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ NODE_NAME_FIELD_NUMBER: _ClassVar[int]
+ POSITION_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ TELEMETRY_SWITCH_FIELD_NUMBER: _ClassVar[int]
+ chat_switch: bool
+ iaq_switch: bool
+ node_name: str
+ position_switch: bool
+ telemetry_switch: bool
+ def __init__(self, chat_switch: bool = ..., position_switch: bool = ..., telemetry_switch: bool = ..., iaq_switch: bool = ..., node_name: _Optional[str] = ...) -> None: ...
-DYNAMIC: CompassMode.ValueType # 0
-"""
-Compass with dynamic ring and heading
-"""
-FIXED_RING: CompassMode.ValueType # 1
-"""
-Compass with fixed ring and heading
-"""
-FREEZE_HEADING: CompassMode.ValueType # 2
-"""
-Compass with heading and freeze option
-"""
-global___CompassMode = CompassMode
+class CompassMode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-class _Theme:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class Theme(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-class _ThemeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Theme.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DARK: _Theme.ValueType # 0
- """
- Dark
- """
- LIGHT: _Theme.ValueType # 1
- """
- Light
- """
- RED: _Theme.ValueType # 2
- """
- Red
- """
-
-class Theme(_Theme, metaclass=_ThemeEnumTypeWrapper): ...
-
-DARK: Theme.ValueType # 0
-"""
-Dark
-"""
-LIGHT: Theme.ValueType # 1
-"""
-Light
-"""
-RED: Theme.ValueType # 2
-"""
-Red
-"""
-global___Theme = Theme
-
-class _Language:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _LanguageEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Language.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- ENGLISH: _Language.ValueType # 0
- """
- English
- """
- FRENCH: _Language.ValueType # 1
- """
- French
- """
- GERMAN: _Language.ValueType # 2
- """
- German
- """
- ITALIAN: _Language.ValueType # 3
- """
- Italian
- """
- PORTUGUESE: _Language.ValueType # 4
- """
- Portuguese
- """
- SPANISH: _Language.ValueType # 5
- """
- Spanish
- """
- SWEDISH: _Language.ValueType # 6
- """
- Swedish
- """
- FINNISH: _Language.ValueType # 7
- """
- Finnish
- """
- POLISH: _Language.ValueType # 8
- """
- Polish
- """
- TURKISH: _Language.ValueType # 9
- """
- Turkish
- """
- SERBIAN: _Language.ValueType # 10
- """
- Serbian
- """
- RUSSIAN: _Language.ValueType # 11
- """
- Russian
- """
- DUTCH: _Language.ValueType # 12
- """
- Dutch
- """
- GREEK: _Language.ValueType # 13
- """
- Greek
- """
- NORWEGIAN: _Language.ValueType # 14
- """
- Norwegian
- """
- SLOVENIAN: _Language.ValueType # 15
- """
- Slovenian
- """
- UKRAINIAN: _Language.ValueType # 16
- """
- Ukrainian
- """
- BULGARIAN: _Language.ValueType # 17
- """
- Bulgarian
- """
- CZECH: _Language.ValueType # 18
- """
- Czech
- """
- DANISH: _Language.ValueType # 19
- """
- Danish
- """
- SIMPLIFIED_CHINESE: _Language.ValueType # 30
- """
- Simplified Chinese (experimental)
- """
- TRADITIONAL_CHINESE: _Language.ValueType # 31
- """
- Traditional Chinese (experimental)
- """
-
-class Language(_Language, metaclass=_LanguageEnumTypeWrapper):
- """
- Localization
- """
-
-ENGLISH: Language.ValueType # 0
-"""
-English
-"""
-FRENCH: Language.ValueType # 1
-"""
-French
-"""
-GERMAN: Language.ValueType # 2
-"""
-German
-"""
-ITALIAN: Language.ValueType # 3
-"""
-Italian
-"""
-PORTUGUESE: Language.ValueType # 4
-"""
-Portuguese
-"""
-SPANISH: Language.ValueType # 5
-"""
-Spanish
-"""
-SWEDISH: Language.ValueType # 6
-"""
-Swedish
-"""
-FINNISH: Language.ValueType # 7
-"""
-Finnish
-"""
-POLISH: Language.ValueType # 8
-"""
-Polish
-"""
-TURKISH: Language.ValueType # 9
-"""
-Turkish
-"""
-SERBIAN: Language.ValueType # 10
-"""
-Serbian
-"""
-RUSSIAN: Language.ValueType # 11
-"""
-Russian
-"""
-DUTCH: Language.ValueType # 12
-"""
-Dutch
-"""
-GREEK: Language.ValueType # 13
-"""
-Greek
-"""
-NORWEGIAN: Language.ValueType # 14
-"""
-Norwegian
-"""
-SLOVENIAN: Language.ValueType # 15
-"""
-Slovenian
-"""
-UKRAINIAN: Language.ValueType # 16
-"""
-Ukrainian
-"""
-BULGARIAN: Language.ValueType # 17
-"""
-Bulgarian
-"""
-CZECH: Language.ValueType # 18
-"""
-Czech
-"""
-DANISH: Language.ValueType # 19
-"""
-Danish
-"""
-SIMPLIFIED_CHINESE: Language.ValueType # 30
-"""
-Simplified Chinese (experimental)
-"""
-TRADITIONAL_CHINESE: Language.ValueType # 31
-"""
-Traditional Chinese (experimental)
-"""
-global___Language = Language
-
-@typing.final
-class DeviceUIConfig(google.protobuf.message.Message):
- """
- Protobuf structures for device-ui persistency
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _GpsCoordinateFormat:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _GpsCoordinateFormatEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DeviceUIConfig._GpsCoordinateFormat.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DEC: DeviceUIConfig._GpsCoordinateFormat.ValueType # 0
- """
- GPS coordinates are displayed in the normal decimal degrees format:
- DD.DDDDDD DDD.DDDDDD
- """
- DMS: DeviceUIConfig._GpsCoordinateFormat.ValueType # 1
- """
- GPS coordinates are displayed in the degrees minutes seconds format:
- DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant
- """
- UTM: DeviceUIConfig._GpsCoordinateFormat.ValueType # 2
- """
- Universal Transverse Mercator format:
- ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing
- """
- MGRS: DeviceUIConfig._GpsCoordinateFormat.ValueType # 3
- """
- Military Grid Reference System format:
- ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square,
- E is easting, N is northing
- """
- OLC: DeviceUIConfig._GpsCoordinateFormat.ValueType # 4
- """
- Open Location Code (aka Plus Codes).
- """
- OSGR: DeviceUIConfig._GpsCoordinateFormat.ValueType # 5
- """
- Ordnance Survey Grid Reference (the National Grid System of the UK).
- Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square,
- E is the easting, N is the northing
- """
- MLS: DeviceUIConfig._GpsCoordinateFormat.ValueType # 6
- """
- Maidenhead Locator System
- Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
- """
-
- class GpsCoordinateFormat(_GpsCoordinateFormat, metaclass=_GpsCoordinateFormatEnumTypeWrapper):
- """
- How the GPS coordinates are displayed on the OLED screen.
- """
-
- DEC: DeviceUIConfig.GpsCoordinateFormat.ValueType # 0
- """
- GPS coordinates are displayed in the normal decimal degrees format:
- DD.DDDDDD DDD.DDDDDD
- """
- DMS: DeviceUIConfig.GpsCoordinateFormat.ValueType # 1
- """
- GPS coordinates are displayed in the degrees minutes seconds format:
- DD°MM'SS"C DDD°MM'SS"C, where C is the compass point representing the locations quadrant
- """
- UTM: DeviceUIConfig.GpsCoordinateFormat.ValueType # 2
- """
- Universal Transverse Mercator format:
- ZZB EEEEEE NNNNNNN, where Z is zone, B is band, E is easting, N is northing
- """
- MGRS: DeviceUIConfig.GpsCoordinateFormat.ValueType # 3
- """
- Military Grid Reference System format:
- ZZB CD EEEEE NNNNN, where Z is zone, B is band, C is the east 100k square, D is the north 100k square,
- E is easting, N is northing
- """
- OLC: DeviceUIConfig.GpsCoordinateFormat.ValueType # 4
- """
- Open Location Code (aka Plus Codes).
- """
- OSGR: DeviceUIConfig.GpsCoordinateFormat.ValueType # 5
- """
- Ordnance Survey Grid Reference (the National Grid System of the UK).
- Format: AB EEEEE NNNNN, where A is the east 100k square, B is the north 100k square,
- E is the easting, N is the northing
- """
- MLS: DeviceUIConfig.GpsCoordinateFormat.ValueType # 6
- """
- Maidenhead Locator System
- Described here: https://en.wikipedia.org/wiki/Maidenhead_Locator_System
- """
-
- VERSION_FIELD_NUMBER: builtins.int
- SCREEN_BRIGHTNESS_FIELD_NUMBER: builtins.int
- SCREEN_TIMEOUT_FIELD_NUMBER: builtins.int
- SCREEN_LOCK_FIELD_NUMBER: builtins.int
- SETTINGS_LOCK_FIELD_NUMBER: builtins.int
- PIN_CODE_FIELD_NUMBER: builtins.int
- THEME_FIELD_NUMBER: builtins.int
- ALERT_ENABLED_FIELD_NUMBER: builtins.int
- BANNER_ENABLED_FIELD_NUMBER: builtins.int
- RING_TONE_ID_FIELD_NUMBER: builtins.int
- LANGUAGE_FIELD_NUMBER: builtins.int
- NODE_FILTER_FIELD_NUMBER: builtins.int
- NODE_HIGHLIGHT_FIELD_NUMBER: builtins.int
- CALIBRATION_DATA_FIELD_NUMBER: builtins.int
- MAP_DATA_FIELD_NUMBER: builtins.int
- COMPASS_MODE_FIELD_NUMBER: builtins.int
- SCREEN_RGB_COLOR_FIELD_NUMBER: builtins.int
- IS_CLOCKFACE_ANALOG_FIELD_NUMBER: builtins.int
- GPS_FORMAT_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- A version integer used to invalidate saved files when we make incompatible changes.
- """
- screen_brightness: builtins.int
- """
- TFT display brightness 1..255
- """
- screen_timeout: builtins.int
- """
- Screen timeout 0..900
- """
- screen_lock: builtins.bool
- """
- Screen/Settings lock enabled
- """
- settings_lock: builtins.bool
- pin_code: builtins.int
- theme: global___Theme.ValueType
- """
- Color theme
- """
- alert_enabled: builtins.bool
- """
- Audible message, banner and ring tone
- """
- banner_enabled: builtins.bool
- ring_tone_id: builtins.int
- language: global___Language.ValueType
- """
- Localization
- """
- calibration_data: builtins.bytes
- """
- 8 integers for screen calibration data
- """
- compass_mode: global___CompassMode.ValueType
- """
- Compass mode
- """
- screen_rgb_color: builtins.int
- """
- RGB color for BaseUI
- 0xRRGGBB format, e.g. 0xFF0000 for red
- """
- is_clockface_analog: builtins.bool
- """
- Clockface analog style
- true for analog clockface, false for digital clockface
- """
- gps_format: global___DeviceUIConfig.GpsCoordinateFormat.ValueType
- """
- How the GPS coordinates are formatted on the OLED screen.
- """
- @property
- def node_filter(self) -> global___NodeFilter:
- """
- Node list filter
- """
-
- @property
- def node_highlight(self) -> global___NodeHighlight:
- """
- Node list highlightening
- """
-
- @property
- def map_data(self) -> global___Map:
- """
- Map related data
- """
-
- def __init__(
- self,
- *,
- version: builtins.int = ...,
- screen_brightness: builtins.int = ...,
- screen_timeout: builtins.int = ...,
- screen_lock: builtins.bool = ...,
- settings_lock: builtins.bool = ...,
- pin_code: builtins.int = ...,
- theme: global___Theme.ValueType = ...,
- alert_enabled: builtins.bool = ...,
- banner_enabled: builtins.bool = ...,
- ring_tone_id: builtins.int = ...,
- language: global___Language.ValueType = ...,
- node_filter: global___NodeFilter | None = ...,
- node_highlight: global___NodeHighlight | None = ...,
- calibration_data: builtins.bytes = ...,
- map_data: global___Map | None = ...,
- compass_mode: global___CompassMode.ValueType = ...,
- screen_rgb_color: builtins.int = ...,
- is_clockface_analog: builtins.bool = ...,
- gps_format: global___DeviceUIConfig.GpsCoordinateFormat.ValueType = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["map_data", b"map_data", "node_filter", b"node_filter", "node_highlight", b"node_highlight"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["alert_enabled", b"alert_enabled", "banner_enabled", b"banner_enabled", "calibration_data", b"calibration_data", "compass_mode", b"compass_mode", "gps_format", b"gps_format", "is_clockface_analog", b"is_clockface_analog", "language", b"language", "map_data", b"map_data", "node_filter", b"node_filter", "node_highlight", b"node_highlight", "pin_code", b"pin_code", "ring_tone_id", b"ring_tone_id", "screen_brightness", b"screen_brightness", "screen_lock", b"screen_lock", "screen_rgb_color", b"screen_rgb_color", "screen_timeout", b"screen_timeout", "settings_lock", b"settings_lock", "theme", b"theme", "version", b"version"]) -> None: ...
-
-global___DeviceUIConfig = DeviceUIConfig
-
-@typing.final
-class NodeFilter(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- UNKNOWN_SWITCH_FIELD_NUMBER: builtins.int
- OFFLINE_SWITCH_FIELD_NUMBER: builtins.int
- PUBLIC_KEY_SWITCH_FIELD_NUMBER: builtins.int
- HOPS_AWAY_FIELD_NUMBER: builtins.int
- POSITION_SWITCH_FIELD_NUMBER: builtins.int
- NODE_NAME_FIELD_NUMBER: builtins.int
- CHANNEL_FIELD_NUMBER: builtins.int
- unknown_switch: builtins.bool
- """
- Filter unknown nodes
- """
- offline_switch: builtins.bool
- """
- Filter offline nodes
- """
- public_key_switch: builtins.bool
- """
- Filter nodes w/o public key
- """
- hops_away: builtins.int
- """
- Filter based on hops away
- """
- position_switch: builtins.bool
- """
- Filter nodes w/o position
- """
- node_name: builtins.str
- """
- Filter nodes by matching name string
- """
- channel: builtins.int
- """
- Filter based on channel
- """
- def __init__(
- self,
- *,
- unknown_switch: builtins.bool = ...,
- offline_switch: builtins.bool = ...,
- public_key_switch: builtins.bool = ...,
- hops_away: builtins.int = ...,
- position_switch: builtins.bool = ...,
- node_name: builtins.str = ...,
- channel: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["channel", b"channel", "hops_away", b"hops_away", "node_name", b"node_name", "offline_switch", b"offline_switch", "position_switch", b"position_switch", "public_key_switch", b"public_key_switch", "unknown_switch", b"unknown_switch"]) -> None: ...
-
-global___NodeFilter = NodeFilter
-
-@typing.final
-class NodeHighlight(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CHAT_SWITCH_FIELD_NUMBER: builtins.int
- POSITION_SWITCH_FIELD_NUMBER: builtins.int
- TELEMETRY_SWITCH_FIELD_NUMBER: builtins.int
- IAQ_SWITCH_FIELD_NUMBER: builtins.int
- NODE_NAME_FIELD_NUMBER: builtins.int
- chat_switch: builtins.bool
- """
- Hightlight nodes w/ active chat
- """
- position_switch: builtins.bool
- """
- Highlight nodes w/ position
- """
- telemetry_switch: builtins.bool
- """
- Highlight nodes w/ telemetry data
- """
- iaq_switch: builtins.bool
- """
- Highlight nodes w/ iaq data
- """
- node_name: builtins.str
- """
- Highlight nodes by matching name string
- """
- def __init__(
- self,
- *,
- chat_switch: builtins.bool = ...,
- position_switch: builtins.bool = ...,
- telemetry_switch: builtins.bool = ...,
- iaq_switch: builtins.bool = ...,
- node_name: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["chat_switch", b"chat_switch", "iaq_switch", b"iaq_switch", "node_name", b"node_name", "position_switch", b"position_switch", "telemetry_switch", b"telemetry_switch"]) -> None: ...
-
-global___NodeHighlight = NodeHighlight
-
-@typing.final
-class GeoPoint(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ZOOM_FIELD_NUMBER: builtins.int
- LATITUDE_FIELD_NUMBER: builtins.int
- LONGITUDE_FIELD_NUMBER: builtins.int
- zoom: builtins.int
- """
- Zoom level
- """
- latitude: builtins.int
- """
- Coordinate: latitude
- """
- longitude: builtins.int
- """
- Coordinate: longitude
- """
- def __init__(
- self,
- *,
- zoom: builtins.int = ...,
- latitude: builtins.int = ...,
- longitude: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["latitude", b"latitude", "longitude", b"longitude", "zoom", b"zoom"]) -> None: ...
-
-global___GeoPoint = GeoPoint
-
-@typing.final
-class Map(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- HOME_FIELD_NUMBER: builtins.int
- STYLE_FIELD_NUMBER: builtins.int
- FOLLOW_GPS_FIELD_NUMBER: builtins.int
- style: builtins.str
- """
- Map tile style
- """
- follow_gps: builtins.bool
- """
- Map scroll follows GPS
- """
- @property
- def home(self) -> global___GeoPoint:
- """
- Home coordinates
- """
-
- def __init__(
- self,
- *,
- home: global___GeoPoint | None = ...,
- style: builtins.str = ...,
- follow_gps: builtins.bool = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["home", b"home"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["follow_gps", b"follow_gps", "home", b"home", "style", b"style"]) -> None: ...
-
-global___Map = Map
+class Language(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/deviceonly_pb2.py b/meshtastic/protobuf/deviceonly_pb2.py
index 06af5bc..a0fb970 100644
--- a/meshtastic/protobuf/deviceonly_pb2.py
+++ b/meshtastic/protobuf/deviceonly_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/deviceonly.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -21,10 +21,10 @@ from meshtastic.protobuf import nanopb_pb2 as meshtastic_dot_protobuf_dot_nanopb
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$meshtastic/protobuf/deviceonly.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a#meshtastic/protobuf/localonly.proto\x1a\x1emeshtastic/protobuf/mesh.proto\x1a#meshtastic/protobuf/telemetry.proto\x1a meshtastic/protobuf/nanopb.proto\"\x99\x01\n\x0cPositionLite\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\x0c\n\x04time\x18\x04 \x01(\x07\x12@\n\x0flocation_source\x18\x05 \x01(\x0e\x32\'.meshtastic.protobuf.Position.LocSource\"\x94\x02\n\x08UserLite\x12\x13\n\x07macaddr\x18\x01 \x01(\x0c\x42\x02\x18\x01\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x34\n\x08hw_model\x18\x04 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x13\n\x0bis_licensed\x18\x05 \x01(\x08\x12;\n\x04role\x18\x06 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x12\n\npublic_key\x18\x07 \x01(\x0c\x12\x1c\n\x0fis_unmessagable\x18\t \x01(\x08H\x00\x88\x01\x01\x42\x12\n\x10_is_unmessagable\"\xf0\x02\n\x0cNodeInfoLite\x12\x0b\n\x03num\x18\x01 \x01(\r\x12+\n\x04user\x18\x02 \x01(\x0b\x32\x1d.meshtastic.protobuf.UserLite\x12\x33\n\x08position\x18\x03 \x01(\x0b\x32!.meshtastic.protobuf.PositionLite\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12:\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\".meshtastic.protobuf.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\x10\n\x08next_hop\x18\x0c \x01(\r\x12\x10\n\x08\x62itfield\x18\r \x01(\rB\x0c\n\n_hops_away\"\xa1\x03\n\x0b\x44\x65viceState\x12\x30\n\x07my_node\x18\x02 \x01(\x0b\x32\x1f.meshtastic.protobuf.MyNodeInfo\x12(\n\x05owner\x18\x03 \x01(\x0b\x32\x19.meshtastic.protobuf.User\x12\x36\n\rreceive_queue\x18\x05 \x03(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12\x0f\n\x07version\x18\x08 \x01(\r\x12\x38\n\x0frx_text_message\x18\x07 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12\x13\n\x07no_save\x18\t \x01(\x08\x42\x02\x18\x01\x12\x19\n\rdid_gps_reset\x18\x0b \x01(\x08\x42\x02\x18\x01\x12\x34\n\x0brx_waypoint\x18\x0c \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12M\n\x19node_remote_hardware_pins\x18\r \x03(\x0b\x32*.meshtastic.protobuf.NodeRemoteHardwarePin\"}\n\x0cNodeDatabase\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\\\n\x05nodes\x18\x02 \x03(\x0b\x32!.meshtastic.protobuf.NodeInfoLiteB*\x92?\'\x92\x01$std::vector\"N\n\x0b\x43hannelFile\x12.\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x1c.meshtastic.protobuf.Channel\x12\x0f\n\x07version\x18\x02 \x01(\r\"\x86\x02\n\x11\x42\x61\x63kupPreferences\x12\x0f\n\x07version\x18\x01 \x01(\r\x12\x11\n\ttimestamp\x18\x02 \x01(\x07\x12\x30\n\x06\x63onfig\x18\x03 \x01(\x0b\x32 .meshtastic.protobuf.LocalConfig\x12=\n\rmodule_config\x18\x04 \x01(\x0b\x32&.meshtastic.protobuf.LocalModuleConfig\x12\x32\n\x08\x63hannels\x18\x05 \x01(\x0b\x32 .meshtastic.protobuf.ChannelFile\x12(\n\x05owner\x18\x06 \x01(\x0b\x32\x19.meshtastic.protobuf.UserBn\n\x14org.meshtastic.protoB\nDeviceOnlyZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x92?\x0b\xc2\x01\x08b\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.deviceonly_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.deviceonly_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nDeviceOnlyZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000\222?\013\302\001\010'
_USERLITE.fields_by_name['macaddr']._options = None
@@ -35,18 +35,18 @@ if _descriptor._USE_C_DESCRIPTORS == False:
_DEVICESTATE.fields_by_name['did_gps_reset']._serialized_options = b'\030\001'
_NODEDATABASE.fields_by_name['nodes']._options = None
_NODEDATABASE.fields_by_name['nodes']._serialized_options = b'\222?\'\222\001$std::vector'
- _globals['_POSITIONLITE']._serialized_start=271
- _globals['_POSITIONLITE']._serialized_end=424
- _globals['_USERLITE']._serialized_start=427
- _globals['_USERLITE']._serialized_end=703
- _globals['_NODEINFOLITE']._serialized_start=706
- _globals['_NODEINFOLITE']._serialized_end=1074
- _globals['_DEVICESTATE']._serialized_start=1077
- _globals['_DEVICESTATE']._serialized_end=1494
- _globals['_NODEDATABASE']._serialized_start=1496
- _globals['_NODEDATABASE']._serialized_end=1621
- _globals['_CHANNELFILE']._serialized_start=1623
- _globals['_CHANNELFILE']._serialized_end=1701
- _globals['_BACKUPPREFERENCES']._serialized_start=1704
- _globals['_BACKUPPREFERENCES']._serialized_end=1966
+ _POSITIONLITE._serialized_start=271
+ _POSITIONLITE._serialized_end=424
+ _USERLITE._serialized_start=427
+ _USERLITE._serialized_end=703
+ _NODEINFOLITE._serialized_start=706
+ _NODEINFOLITE._serialized_end=1074
+ _DEVICESTATE._serialized_start=1077
+ _DEVICESTATE._serialized_end=1494
+ _NODEDATABASE._serialized_start=1496
+ _NODEDATABASE._serialized_end=1621
+ _CHANNELFILE._serialized_start=1623
+ _CHANNELFILE._serialized_end=1701
+ _BACKUPPREFERENCES._serialized_start=1704
+ _BACKUPPREFERENCES._serialized_end=1966
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/deviceonly_pb2.pyi b/meshtastic/protobuf/deviceonly_pb2.pyi
index 684a7fa..e37bdcf 100644
--- a/meshtastic/protobuf/deviceonly_pb2.pyi
+++ b/meshtastic/protobuf/deviceonly_pb2.pyi
@@ -1,458 +1,130 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from meshtastic.protobuf import channel_pb2 as _channel_pb2
+from meshtastic.protobuf import config_pb2 as _config_pb2
+from meshtastic.protobuf import localonly_pb2 as _localonly_pb2
+from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
+from meshtastic.protobuf import telemetry_pb2 as _telemetry_pb2
+from meshtastic.protobuf import nanopb_pb2 as _nanopb_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.internal.containers
-import google.protobuf.message
-import meshtastic.protobuf.channel_pb2
-import meshtastic.protobuf.config_pb2
-import meshtastic.protobuf.localonly_pb2
-import meshtastic.protobuf.mesh_pb2
-import meshtastic.protobuf.telemetry_pb2
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class BackupPreferences(_message.Message):
+ __slots__ = ["channels", "config", "module_config", "owner", "timestamp", "version"]
+ CHANNELS_FIELD_NUMBER: _ClassVar[int]
+ CONFIG_FIELD_NUMBER: _ClassVar[int]
+ MODULE_CONFIG_FIELD_NUMBER: _ClassVar[int]
+ OWNER_FIELD_NUMBER: _ClassVar[int]
+ TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ channels: ChannelFile
+ config: _localonly_pb2.LocalConfig
+ module_config: _localonly_pb2.LocalModuleConfig
+ owner: _mesh_pb2.User
+ timestamp: int
+ version: int
+ def __init__(self, version: _Optional[int] = ..., timestamp: _Optional[int] = ..., config: _Optional[_Union[_localonly_pb2.LocalConfig, _Mapping]] = ..., module_config: _Optional[_Union[_localonly_pb2.LocalModuleConfig, _Mapping]] = ..., channels: _Optional[_Union[ChannelFile, _Mapping]] = ..., owner: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ...) -> None: ...
-@typing.final
-class PositionLite(google.protobuf.message.Message):
- """
- Position with static location information only for NodeDBLite
- """
+class ChannelFile(_message.Message):
+ __slots__ = ["channels", "version"]
+ CHANNELS_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ channels: _containers.RepeatedCompositeFieldContainer[_channel_pb2.Channel]
+ version: int
+ def __init__(self, channels: _Optional[_Iterable[_Union[_channel_pb2.Channel, _Mapping]]] = ..., version: _Optional[int] = ...) -> None: ...
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class DeviceState(_message.Message):
+ __slots__ = ["did_gps_reset", "my_node", "no_save", "node_remote_hardware_pins", "owner", "receive_queue", "rx_text_message", "rx_waypoint", "version"]
+ DID_GPS_RESET_FIELD_NUMBER: _ClassVar[int]
+ MY_NODE_FIELD_NUMBER: _ClassVar[int]
+ NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: _ClassVar[int]
+ NO_SAVE_FIELD_NUMBER: _ClassVar[int]
+ OWNER_FIELD_NUMBER: _ClassVar[int]
+ RECEIVE_QUEUE_FIELD_NUMBER: _ClassVar[int]
+ RX_TEXT_MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ RX_WAYPOINT_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ did_gps_reset: bool
+ my_node: _mesh_pb2.MyNodeInfo
+ no_save: bool
+ node_remote_hardware_pins: _containers.RepeatedCompositeFieldContainer[_mesh_pb2.NodeRemoteHardwarePin]
+ owner: _mesh_pb2.User
+ receive_queue: _containers.RepeatedCompositeFieldContainer[_mesh_pb2.MeshPacket]
+ rx_text_message: _mesh_pb2.MeshPacket
+ rx_waypoint: _mesh_pb2.MeshPacket
+ version: int
+ def __init__(self, my_node: _Optional[_Union[_mesh_pb2.MyNodeInfo, _Mapping]] = ..., owner: _Optional[_Union[_mesh_pb2.User, _Mapping]] = ..., receive_queue: _Optional[_Iterable[_Union[_mesh_pb2.MeshPacket, _Mapping]]] = ..., version: _Optional[int] = ..., rx_text_message: _Optional[_Union[_mesh_pb2.MeshPacket, _Mapping]] = ..., no_save: bool = ..., did_gps_reset: bool = ..., rx_waypoint: _Optional[_Union[_mesh_pb2.MeshPacket, _Mapping]] = ..., node_remote_hardware_pins: _Optional[_Iterable[_Union[_mesh_pb2.NodeRemoteHardwarePin, _Mapping]]] = ...) -> None: ...
- LATITUDE_I_FIELD_NUMBER: builtins.int
- LONGITUDE_I_FIELD_NUMBER: builtins.int
- ALTITUDE_FIELD_NUMBER: builtins.int
- TIME_FIELD_NUMBER: builtins.int
- LOCATION_SOURCE_FIELD_NUMBER: builtins.int
- latitude_i: builtins.int
- """
- The new preferred location encoding, multiply by 1e-7 to get degrees
- in floating point
- """
- longitude_i: builtins.int
- """
- TODO: REPLACE
- """
- altitude: builtins.int
- """
- In meters above MSL (but see issue #359)
- """
- time: builtins.int
- """
- This is usually not sent over the mesh (to save space), but it is sent
- from the phone so that the local device can set its RTC If it is sent over
- the mesh (because there are devices on the mesh without GPS), it will only
- be sent by devices which has a hardware GPS clock.
- seconds since 1970
- """
- location_source: meshtastic.protobuf.mesh_pb2.Position.LocSource.ValueType
- """
- TODO: REPLACE
- """
- def __init__(
- self,
- *,
- latitude_i: builtins.int = ...,
- longitude_i: builtins.int = ...,
- altitude: builtins.int = ...,
- time: builtins.int = ...,
- location_source: meshtastic.protobuf.mesh_pb2.Position.LocSource.ValueType = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["altitude", b"altitude", "latitude_i", b"latitude_i", "location_source", b"location_source", "longitude_i", b"longitude_i", "time", b"time"]) -> None: ...
+class NodeDatabase(_message.Message):
+ __slots__ = ["nodes", "version"]
+ NODES_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ nodes: _containers.RepeatedCompositeFieldContainer[NodeInfoLite]
+ version: int
+ def __init__(self, version: _Optional[int] = ..., nodes: _Optional[_Iterable[_Union[NodeInfoLite, _Mapping]]] = ...) -> None: ...
-global___PositionLite = PositionLite
+class NodeInfoLite(_message.Message):
+ __slots__ = ["bitfield", "channel", "device_metrics", "hops_away", "is_favorite", "is_ignored", "last_heard", "next_hop", "num", "position", "snr", "user", "via_mqtt"]
+ BITFIELD_FIELD_NUMBER: _ClassVar[int]
+ CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_METRICS_FIELD_NUMBER: _ClassVar[int]
+ HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
+ IS_FAVORITE_FIELD_NUMBER: _ClassVar[int]
+ IS_IGNORED_FIELD_NUMBER: _ClassVar[int]
+ LAST_HEARD_FIELD_NUMBER: _ClassVar[int]
+ NEXT_HOP_FIELD_NUMBER: _ClassVar[int]
+ NUM_FIELD_NUMBER: _ClassVar[int]
+ POSITION_FIELD_NUMBER: _ClassVar[int]
+ SNR_FIELD_NUMBER: _ClassVar[int]
+ USER_FIELD_NUMBER: _ClassVar[int]
+ VIA_MQTT_FIELD_NUMBER: _ClassVar[int]
+ bitfield: int
+ channel: int
+ device_metrics: _telemetry_pb2.DeviceMetrics
+ hops_away: int
+ is_favorite: bool
+ is_ignored: bool
+ last_heard: int
+ next_hop: int
+ num: int
+ position: PositionLite
+ snr: float
+ user: UserLite
+ via_mqtt: bool
+ def __init__(self, num: _Optional[int] = ..., user: _Optional[_Union[UserLite, _Mapping]] = ..., position: _Optional[_Union[PositionLite, _Mapping]] = ..., snr: _Optional[float] = ..., last_heard: _Optional[int] = ..., device_metrics: _Optional[_Union[_telemetry_pb2.DeviceMetrics, _Mapping]] = ..., channel: _Optional[int] = ..., via_mqtt: bool = ..., hops_away: _Optional[int] = ..., is_favorite: bool = ..., is_ignored: bool = ..., next_hop: _Optional[int] = ..., bitfield: _Optional[int] = ...) -> None: ...
-@typing.final
-class UserLite(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class PositionLite(_message.Message):
+ __slots__ = ["altitude", "latitude_i", "location_source", "longitude_i", "time"]
+ ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LOCATION_SOURCE_FIELD_NUMBER: _ClassVar[int]
+ LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ TIME_FIELD_NUMBER: _ClassVar[int]
+ altitude: int
+ latitude_i: int
+ location_source: _mesh_pb2.Position.LocSource
+ longitude_i: int
+ time: int
+ def __init__(self, latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., time: _Optional[int] = ..., location_source: _Optional[_Union[_mesh_pb2.Position.LocSource, str]] = ...) -> None: ...
- MACADDR_FIELD_NUMBER: builtins.int
- LONG_NAME_FIELD_NUMBER: builtins.int
- SHORT_NAME_FIELD_NUMBER: builtins.int
- HW_MODEL_FIELD_NUMBER: builtins.int
- IS_LICENSED_FIELD_NUMBER: builtins.int
- ROLE_FIELD_NUMBER: builtins.int
- PUBLIC_KEY_FIELD_NUMBER: builtins.int
- IS_UNMESSAGABLE_FIELD_NUMBER: builtins.int
- macaddr: builtins.bytes
- """
- This is the addr of the radio.
- """
- long_name: builtins.str
- """
- A full name for this user, i.e. "Kevin Hester"
- """
- short_name: builtins.str
- """
- A VERY short name, ideally two characters.
- Suitable for a tiny OLED screen
- """
- hw_model: meshtastic.protobuf.mesh_pb2.HardwareModel.ValueType
- """
- TBEAM, HELTEC, etc...
- Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
- Apps will still need the string here for older builds
- (so OTA update can find the right image), but if the enum is available it will be used instead.
- """
- is_licensed: builtins.bool
- """
- In some regions Ham radio operators have different bandwidth limitations than others.
- If this user is a licensed operator, set this flag.
- Also, "long_name" should be their licence number.
- """
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType
- """
- Indicates that the user's role in the mesh
- """
- public_key: builtins.bytes
- """
- The public key of the user's device.
- This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
- """
- is_unmessagable: builtins.bool
- """
- Whether or not the node can be messaged
- """
- def __init__(
- self,
- *,
- macaddr: builtins.bytes = ...,
- long_name: builtins.str = ...,
- short_name: builtins.str = ...,
- hw_model: meshtastic.protobuf.mesh_pb2.HardwareModel.ValueType = ...,
- is_licensed: builtins.bool = ...,
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType = ...,
- public_key: builtins.bytes = ...,
- is_unmessagable: builtins.bool | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_is_unmessagable", b"_is_unmessagable", "is_unmessagable", b"is_unmessagable"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_is_unmessagable", b"_is_unmessagable", "hw_model", b"hw_model", "is_licensed", b"is_licensed", "is_unmessagable", b"is_unmessagable", "long_name", b"long_name", "macaddr", b"macaddr", "public_key", b"public_key", "role", b"role", "short_name", b"short_name"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["_is_unmessagable", b"_is_unmessagable"]) -> typing.Literal["is_unmessagable"] | None: ...
-
-global___UserLite = UserLite
-
-@typing.final
-class NodeInfoLite(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NUM_FIELD_NUMBER: builtins.int
- USER_FIELD_NUMBER: builtins.int
- POSITION_FIELD_NUMBER: builtins.int
- SNR_FIELD_NUMBER: builtins.int
- LAST_HEARD_FIELD_NUMBER: builtins.int
- DEVICE_METRICS_FIELD_NUMBER: builtins.int
- CHANNEL_FIELD_NUMBER: builtins.int
- VIA_MQTT_FIELD_NUMBER: builtins.int
- HOPS_AWAY_FIELD_NUMBER: builtins.int
- IS_FAVORITE_FIELD_NUMBER: builtins.int
- IS_IGNORED_FIELD_NUMBER: builtins.int
- NEXT_HOP_FIELD_NUMBER: builtins.int
- BITFIELD_FIELD_NUMBER: builtins.int
- num: builtins.int
- """
- The node number
- """
- snr: builtins.float
- """
- Returns the Signal-to-noise ratio (SNR) of the last received message,
- as measured by the receiver. Return SNR of the last received message in dB
- """
- last_heard: builtins.int
- """
- Set to indicate the last time we received a packet from this node
- """
- channel: builtins.int
- """
- local channel index we heard that node on. Only populated if its not the default channel.
- """
- via_mqtt: builtins.bool
- """
- True if we witnessed the node over MQTT instead of LoRA transport
- """
- hops_away: builtins.int
- """
- Number of hops away from us this node is (0 if direct neighbor)
- """
- is_favorite: builtins.bool
- """
- True if node is in our favorites list
- Persists between NodeDB internal clean ups
- """
- is_ignored: builtins.bool
- """
- True if node is in our ignored list
- Persists between NodeDB internal clean ups
- """
- next_hop: builtins.int
- """
- Last byte of the node number of the node that should be used as the next hop to reach this node.
- """
- bitfield: builtins.int
- """
- Bitfield for storing booleans.
- LSB 0 is_key_manually_verified
- """
- @property
- def user(self) -> global___UserLite:
- """
- The user info for this node
- """
-
- @property
- def position(self) -> global___PositionLite:
- """
- This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
- Position.time now indicates the last time we received a POSITION from that node.
- """
-
- @property
- def device_metrics(self) -> meshtastic.protobuf.telemetry_pb2.DeviceMetrics:
- """
- The latest device metrics for the node.
- """
-
- def __init__(
- self,
- *,
- num: builtins.int = ...,
- user: global___UserLite | None = ...,
- position: global___PositionLite | None = ...,
- snr: builtins.float = ...,
- last_heard: builtins.int = ...,
- device_metrics: meshtastic.protobuf.telemetry_pb2.DeviceMetrics | None = ...,
- channel: builtins.int = ...,
- via_mqtt: builtins.bool = ...,
- hops_away: builtins.int | None = ...,
- is_favorite: builtins.bool = ...,
- is_ignored: builtins.bool = ...,
- next_hop: builtins.int = ...,
- bitfield: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_hops_away", b"_hops_away", "device_metrics", b"device_metrics", "hops_away", b"hops_away", "position", b"position", "user", b"user"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_hops_away", b"_hops_away", "bitfield", b"bitfield", "channel", b"channel", "device_metrics", b"device_metrics", "hops_away", b"hops_away", "is_favorite", b"is_favorite", "is_ignored", b"is_ignored", "last_heard", b"last_heard", "next_hop", b"next_hop", "num", b"num", "position", b"position", "snr", b"snr", "user", b"user", "via_mqtt", b"via_mqtt"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["_hops_away", b"_hops_away"]) -> typing.Literal["hops_away"] | None: ...
-
-global___NodeInfoLite = NodeInfoLite
-
-@typing.final
-class DeviceState(google.protobuf.message.Message):
- """
- This message is never sent over the wire, but it is used for serializing DB
- state to flash in the device code
- FIXME, since we write this each time we enter deep sleep (and have infinite
- flash) it would be better to use some sort of append only data structure for
- the receive queue and use the preferences store for the other stuff
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- MY_NODE_FIELD_NUMBER: builtins.int
- OWNER_FIELD_NUMBER: builtins.int
- RECEIVE_QUEUE_FIELD_NUMBER: builtins.int
- VERSION_FIELD_NUMBER: builtins.int
- RX_TEXT_MESSAGE_FIELD_NUMBER: builtins.int
- NO_SAVE_FIELD_NUMBER: builtins.int
- DID_GPS_RESET_FIELD_NUMBER: builtins.int
- RX_WAYPOINT_FIELD_NUMBER: builtins.int
- NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- A version integer used to invalidate old save files when we make
- incompatible changes This integer is set at build time and is private to
- NodeDB.cpp in the device code.
- """
- no_save: builtins.bool
- """
- Used only during development.
- Indicates developer is testing and changes should never be saved to flash.
- Deprecated in 2.3.1
- """
- did_gps_reset: builtins.bool
- """
- Previously used to manage GPS factory resets.
- Deprecated in 2.5.23
- """
- @property
- def my_node(self) -> meshtastic.protobuf.mesh_pb2.MyNodeInfo:
- """
- Read only settings/info about this node
- """
-
- @property
- def owner(self) -> meshtastic.protobuf.mesh_pb2.User:
- """
- My owner info
- """
-
- @property
- def receive_queue(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.protobuf.mesh_pb2.MeshPacket]:
- """
- Received packets saved for delivery to the phone
- """
-
- @property
- def rx_text_message(self) -> meshtastic.protobuf.mesh_pb2.MeshPacket:
- """
- We keep the last received text message (only) stored in the device flash,
- so we can show it on the screen.
- Might be null
- """
-
- @property
- def rx_waypoint(self) -> meshtastic.protobuf.mesh_pb2.MeshPacket:
- """
- We keep the last received waypoint stored in the device flash,
- so we can show it on the screen.
- Might be null
- """
-
- @property
- def node_remote_hardware_pins(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.protobuf.mesh_pb2.NodeRemoteHardwarePin]:
- """
- The mesh's nodes with their available gpio pins for RemoteHardware module
- """
-
- def __init__(
- self,
- *,
- my_node: meshtastic.protobuf.mesh_pb2.MyNodeInfo | None = ...,
- owner: meshtastic.protobuf.mesh_pb2.User | None = ...,
- receive_queue: collections.abc.Iterable[meshtastic.protobuf.mesh_pb2.MeshPacket] | None = ...,
- version: builtins.int = ...,
- rx_text_message: meshtastic.protobuf.mesh_pb2.MeshPacket | None = ...,
- no_save: builtins.bool = ...,
- did_gps_reset: builtins.bool = ...,
- rx_waypoint: meshtastic.protobuf.mesh_pb2.MeshPacket | None = ...,
- node_remote_hardware_pins: collections.abc.Iterable[meshtastic.protobuf.mesh_pb2.NodeRemoteHardwarePin] | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["my_node", b"my_node", "owner", b"owner", "rx_text_message", b"rx_text_message", "rx_waypoint", b"rx_waypoint"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["did_gps_reset", b"did_gps_reset", "my_node", b"my_node", "no_save", b"no_save", "node_remote_hardware_pins", b"node_remote_hardware_pins", "owner", b"owner", "receive_queue", b"receive_queue", "rx_text_message", b"rx_text_message", "rx_waypoint", b"rx_waypoint", "version", b"version"]) -> None: ...
-
-global___DeviceState = DeviceState
-
-@typing.final
-class NodeDatabase(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- VERSION_FIELD_NUMBER: builtins.int
- NODES_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- A version integer used to invalidate old save files when we make
- incompatible changes This integer is set at build time and is private to
- NodeDB.cpp in the device code.
- """
- @property
- def nodes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NodeInfoLite]:
- """
- New lite version of NodeDB to decrease memory footprint
- """
-
- def __init__(
- self,
- *,
- version: builtins.int = ...,
- nodes: collections.abc.Iterable[global___NodeInfoLite] | None = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["nodes", b"nodes", "version", b"version"]) -> None: ...
-
-global___NodeDatabase = NodeDatabase
-
-@typing.final
-class ChannelFile(google.protobuf.message.Message):
- """
- The on-disk saved channels
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CHANNELS_FIELD_NUMBER: builtins.int
- VERSION_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- A version integer used to invalidate old save files when we make
- incompatible changes This integer is set at build time and is private to
- NodeDB.cpp in the device code.
- """
- @property
- def channels(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.protobuf.channel_pb2.Channel]:
- """
- The channels our node knows about
- """
-
- def __init__(
- self,
- *,
- channels: collections.abc.Iterable[meshtastic.protobuf.channel_pb2.Channel] | None = ...,
- version: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["channels", b"channels", "version", b"version"]) -> None: ...
-
-global___ChannelFile = ChannelFile
-
-@typing.final
-class BackupPreferences(google.protobuf.message.Message):
- """
- The on-disk backup of the node's preferences
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- VERSION_FIELD_NUMBER: builtins.int
- TIMESTAMP_FIELD_NUMBER: builtins.int
- CONFIG_FIELD_NUMBER: builtins.int
- MODULE_CONFIG_FIELD_NUMBER: builtins.int
- CHANNELS_FIELD_NUMBER: builtins.int
- OWNER_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- The version of the backup
- """
- timestamp: builtins.int
- """
- The timestamp of the backup (if node has time)
- """
- @property
- def config(self) -> meshtastic.protobuf.localonly_pb2.LocalConfig:
- """
- The node's configuration
- """
-
- @property
- def module_config(self) -> meshtastic.protobuf.localonly_pb2.LocalModuleConfig:
- """
- The node's module configuration
- """
-
- @property
- def channels(self) -> global___ChannelFile:
- """
- The node's channels
- """
-
- @property
- def owner(self) -> meshtastic.protobuf.mesh_pb2.User:
- """
- The node's user (owner) information
- """
-
- def __init__(
- self,
- *,
- version: builtins.int = ...,
- timestamp: builtins.int = ...,
- config: meshtastic.protobuf.localonly_pb2.LocalConfig | None = ...,
- module_config: meshtastic.protobuf.localonly_pb2.LocalModuleConfig | None = ...,
- channels: global___ChannelFile | None = ...,
- owner: meshtastic.protobuf.mesh_pb2.User | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["channels", b"channels", "config", b"config", "module_config", b"module_config", "owner", b"owner"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["channels", b"channels", "config", b"config", "module_config", b"module_config", "owner", b"owner", "timestamp", b"timestamp", "version", b"version"]) -> None: ...
-
-global___BackupPreferences = BackupPreferences
+class UserLite(_message.Message):
+ __slots__ = ["hw_model", "is_licensed", "is_unmessagable", "long_name", "macaddr", "public_key", "role", "short_name"]
+ HW_MODEL_FIELD_NUMBER: _ClassVar[int]
+ IS_LICENSED_FIELD_NUMBER: _ClassVar[int]
+ IS_UNMESSAGABLE_FIELD_NUMBER: _ClassVar[int]
+ LONG_NAME_FIELD_NUMBER: _ClassVar[int]
+ MACADDR_FIELD_NUMBER: _ClassVar[int]
+ PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
+ hw_model: _mesh_pb2.HardwareModel
+ is_licensed: bool
+ is_unmessagable: bool
+ long_name: str
+ macaddr: bytes
+ public_key: bytes
+ role: _config_pb2.Config.DeviceConfig.Role
+ short_name: str
+ def __init__(self, macaddr: _Optional[bytes] = ..., long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., hw_model: _Optional[_Union[_mesh_pb2.HardwareModel, str]] = ..., is_licensed: bool = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., public_key: _Optional[bytes] = ..., is_unmessagable: bool = ...) -> None: ...
diff --git a/meshtastic/protobuf/interdevice_pb2.py b/meshtastic/protobuf/interdevice_pb2.py
index dda2ad6..e0a176f 100644
--- a/meshtastic/protobuf/interdevice_pb2.py
+++ b/meshtastic/protobuf/interdevice_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/interdevice.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,16 +15,16 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%meshtastic/protobuf/interdevice.proto\x12\x13meshtastic.protobuf\"s\n\nSensorData\x12.\n\x04type\x18\x01 \x01(\x0e\x32 .meshtastic.protobuf.MessageType\x12\x15\n\x0b\x66loat_value\x18\x02 \x01(\x02H\x00\x12\x16\n\x0cuint32_value\x18\x03 \x01(\rH\x00\x42\x06\n\x04\x64\x61ta\"_\n\x12InterdeviceMessage\x12\x0e\n\x04nmea\x18\x01 \x01(\tH\x00\x12\x31\n\x06sensor\x18\x02 \x01(\x0b\x32\x1f.meshtastic.protobuf.SensorDataH\x00\x42\x06\n\x04\x64\x61ta*\xd5\x01\n\x0bMessageType\x12\x07\n\x03\x41\x43K\x10\x00\x12\x15\n\x10\x43OLLECT_INTERVAL\x10\xa0\x01\x12\x0c\n\x07\x42\x45\x45P_ON\x10\xa1\x01\x12\r\n\x08\x42\x45\x45P_OFF\x10\xa2\x01\x12\r\n\x08SHUTDOWN\x10\xa3\x01\x12\r\n\x08POWER_ON\x10\xa4\x01\x12\x0f\n\nSCD41_TEMP\x10\xb0\x01\x12\x13\n\x0eSCD41_HUMIDITY\x10\xb1\x01\x12\x0e\n\tSCD41_CO2\x10\xb2\x01\x12\x0f\n\nAHT20_TEMP\x10\xb3\x01\x12\x13\n\x0e\x41HT20_HUMIDITY\x10\xb4\x01\x12\x0f\n\nTVOC_INDEX\x10\xb5\x01\x42g\n\x14org.meshtastic.protoB\x11InterdeviceProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.interdevice_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.interdevice_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\021InterdeviceProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_MESSAGETYPE']._serialized_start=277
- _globals['_MESSAGETYPE']._serialized_end=490
- _globals['_SENSORDATA']._serialized_start=62
- _globals['_SENSORDATA']._serialized_end=177
- _globals['_INTERDEVICEMESSAGE']._serialized_start=179
- _globals['_INTERDEVICEMESSAGE']._serialized_end=274
+ _MESSAGETYPE._serialized_start=277
+ _MESSAGETYPE._serialized_end=490
+ _SENSORDATA._serialized_start=62
+ _SENSORDATA._serialized_end=177
+ _INTERDEVICEMESSAGE._serialized_start=179
+ _INTERDEVICEMESSAGE._serialized_end=274
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/interdevice_pb2.pyi b/meshtastic/protobuf/interdevice_pb2.pyi
index 6e70f9e..8adf857 100644
--- a/meshtastic/protobuf/interdevice_pb2.pyi
+++ b/meshtastic/protobuf/interdevice_pb2.pyi
@@ -1,105 +1,39 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+ACK: MessageType
+AHT20_HUMIDITY: MessageType
+AHT20_TEMP: MessageType
+BEEP_OFF: MessageType
+BEEP_ON: MessageType
+COLLECT_INTERVAL: MessageType
+DESCRIPTOR: _descriptor.FileDescriptor
+POWER_ON: MessageType
+SCD41_CO2: MessageType
+SCD41_HUMIDITY: MessageType
+SCD41_TEMP: MessageType
+SHUTDOWN: MessageType
+TVOC_INDEX: MessageType
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class InterdeviceMessage(_message.Message):
+ __slots__ = ["nmea", "sensor"]
+ NMEA_FIELD_NUMBER: _ClassVar[int]
+ SENSOR_FIELD_NUMBER: _ClassVar[int]
+ nmea: str
+ sensor: SensorData
+ def __init__(self, nmea: _Optional[str] = ..., sensor: _Optional[_Union[SensorData, _Mapping]] = ...) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class SensorData(_message.Message):
+ __slots__ = ["float_value", "type", "uint32_value"]
+ FLOAT_VALUE_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ UINT32_VALUE_FIELD_NUMBER: _ClassVar[int]
+ float_value: float
+ type: MessageType
+ uint32_value: int
+ def __init__(self, type: _Optional[_Union[MessageType, str]] = ..., float_value: _Optional[float] = ..., uint32_value: _Optional[int] = ...) -> None: ...
-class _MessageType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _MessageTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_MessageType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- ACK: _MessageType.ValueType # 0
- COLLECT_INTERVAL: _MessageType.ValueType # 160
- """in ms"""
- BEEP_ON: _MessageType.ValueType # 161
- """duration ms"""
- BEEP_OFF: _MessageType.ValueType # 162
- """cancel prematurely"""
- SHUTDOWN: _MessageType.ValueType # 163
- POWER_ON: _MessageType.ValueType # 164
- SCD41_TEMP: _MessageType.ValueType # 176
- SCD41_HUMIDITY: _MessageType.ValueType # 177
- SCD41_CO2: _MessageType.ValueType # 178
- AHT20_TEMP: _MessageType.ValueType # 179
- AHT20_HUMIDITY: _MessageType.ValueType # 180
- TVOC_INDEX: _MessageType.ValueType # 181
-
-class MessageType(_MessageType, metaclass=_MessageTypeEnumTypeWrapper):
- """encapsulate up to 1k of NMEA string data"""
-
-ACK: MessageType.ValueType # 0
-COLLECT_INTERVAL: MessageType.ValueType # 160
-"""in ms"""
-BEEP_ON: MessageType.ValueType # 161
-"""duration ms"""
-BEEP_OFF: MessageType.ValueType # 162
-"""cancel prematurely"""
-SHUTDOWN: MessageType.ValueType # 163
-POWER_ON: MessageType.ValueType # 164
-SCD41_TEMP: MessageType.ValueType # 176
-SCD41_HUMIDITY: MessageType.ValueType # 177
-SCD41_CO2: MessageType.ValueType # 178
-AHT20_TEMP: MessageType.ValueType # 179
-AHT20_HUMIDITY: MessageType.ValueType # 180
-TVOC_INDEX: MessageType.ValueType # 181
-global___MessageType = MessageType
-
-@typing.final
-class SensorData(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- TYPE_FIELD_NUMBER: builtins.int
- FLOAT_VALUE_FIELD_NUMBER: builtins.int
- UINT32_VALUE_FIELD_NUMBER: builtins.int
- type: global___MessageType.ValueType
- """The message type"""
- float_value: builtins.float
- uint32_value: builtins.int
- def __init__(
- self,
- *,
- type: global___MessageType.ValueType = ...,
- float_value: builtins.float = ...,
- uint32_value: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["data", b"data", "float_value", b"float_value", "uint32_value", b"uint32_value"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["data", b"data", "float_value", b"float_value", "type", b"type", "uint32_value", b"uint32_value"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["data", b"data"]) -> typing.Literal["float_value", "uint32_value"] | None: ...
-
-global___SensorData = SensorData
-
-@typing.final
-class InterdeviceMessage(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NMEA_FIELD_NUMBER: builtins.int
- SENSOR_FIELD_NUMBER: builtins.int
- nmea: builtins.str
- @property
- def sensor(self) -> global___SensorData: ...
- def __init__(
- self,
- *,
- nmea: builtins.str = ...,
- sensor: global___SensorData | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["data", b"data", "nmea", b"nmea", "sensor", b"sensor"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["data", b"data", "nmea", b"nmea", "sensor", b"sensor"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["data", b"data"]) -> typing.Literal["nmea", "sensor"] | None: ...
-
-global___InterdeviceMessage = InterdeviceMessage
+class MessageType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/localonly_pb2.py b/meshtastic/protobuf/localonly_pb2.py
index 985aadd..36a0a48 100644
--- a/meshtastic/protobuf/localonly_pb2.py
+++ b/meshtastic/protobuf/localonly_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/localonly.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,16 +15,16 @@ from meshtastic.protobuf import config_pb2 as meshtastic_dot_protobuf_dot_config
from meshtastic.protobuf import module_config_pb2 as meshtastic_dot_protobuf_dot_module__config__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/localonly.proto\x12\x13meshtastic.protobuf\x1a meshtastic/protobuf/config.proto\x1a\'meshtastic/protobuf/module_config.proto\"\xfa\x03\n\x0bLocalConfig\x12\x38\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32(.meshtastic.protobuf.Config.DeviceConfig\x12<\n\x08position\x18\x02 \x01(\x0b\x32*.meshtastic.protobuf.Config.PositionConfig\x12\x36\n\x05power\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.Config.PowerConfig\x12:\n\x07network\x18\x04 \x01(\x0b\x32).meshtastic.protobuf.Config.NetworkConfig\x12:\n\x07\x64isplay\x18\x05 \x01(\x0b\x32).meshtastic.protobuf.Config.DisplayConfig\x12\x34\n\x04lora\x18\x06 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfig\x12>\n\tbluetooth\x18\x07 \x01(\x0b\x32+.meshtastic.protobuf.Config.BluetoothConfig\x12\x0f\n\x07version\x18\x08 \x01(\r\x12<\n\x08security\x18\t \x01(\x0b\x32*.meshtastic.protobuf.Config.SecurityConfig\"\xf0\x07\n\x11LocalModuleConfig\x12:\n\x04mqtt\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.ModuleConfig.MQTTConfig\x12>\n\x06serial\x18\x02 \x01(\x0b\x32..meshtastic.protobuf.ModuleConfig.SerialConfig\x12[\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32<.meshtastic.protobuf.ModuleConfig.ExternalNotificationConfig\x12K\n\rstore_forward\x18\x04 \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.StoreForwardConfig\x12\x45\n\nrange_test\x18\x05 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.RangeTestConfig\x12\x44\n\ttelemetry\x18\x06 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.TelemetryConfig\x12M\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.CannedMessageConfig\x12<\n\x05\x61udio\x18\t \x01(\x0b\x32-.meshtastic.protobuf.ModuleConfig.AudioConfig\x12O\n\x0fremote_hardware\x18\n \x01(\x0b\x32\x36.meshtastic.protobuf.ModuleConfig.RemoteHardwareConfig\x12K\n\rneighbor_info\x18\x0b \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.NeighborInfoConfig\x12Q\n\x10\x61mbient_lighting\x18\x0c \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.AmbientLightingConfig\x12Q\n\x10\x64\x65tection_sensor\x18\r \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.DetectionSensorConfig\x12\x46\n\npaxcounter\x18\x0e \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.PaxcounterConfig\x12\x0f\n\x07version\x18\x08 \x01(\rBe\n\x14org.meshtastic.protoB\x0fLocalOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/localonly.proto\x12\x13meshtastic.protobuf\x1a meshtastic/protobuf/config.proto\x1a\'meshtastic/protobuf/module_config.proto\"\xfa\x03\n\x0bLocalConfig\x12\x38\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32(.meshtastic.protobuf.Config.DeviceConfig\x12<\n\x08position\x18\x02 \x01(\x0b\x32*.meshtastic.protobuf.Config.PositionConfig\x12\x36\n\x05power\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.Config.PowerConfig\x12:\n\x07network\x18\x04 \x01(\x0b\x32).meshtastic.protobuf.Config.NetworkConfig\x12:\n\x07\x64isplay\x18\x05 \x01(\x0b\x32).meshtastic.protobuf.Config.DisplayConfig\x12\x34\n\x04lora\x18\x06 \x01(\x0b\x32&.meshtastic.protobuf.Config.LoRaConfig\x12>\n\tbluetooth\x18\x07 \x01(\x0b\x32+.meshtastic.protobuf.Config.BluetoothConfig\x12\x0f\n\x07version\x18\x08 \x01(\r\x12<\n\x08security\x18\t \x01(\x0b\x32*.meshtastic.protobuf.Config.SecurityConfig\"\xcf\t\n\x11LocalModuleConfig\x12:\n\x04mqtt\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.ModuleConfig.MQTTConfig\x12>\n\x06serial\x18\x02 \x01(\x0b\x32..meshtastic.protobuf.ModuleConfig.SerialConfig\x12[\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32<.meshtastic.protobuf.ModuleConfig.ExternalNotificationConfig\x12K\n\rstore_forward\x18\x04 \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.StoreForwardConfig\x12\x45\n\nrange_test\x18\x05 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.RangeTestConfig\x12\x44\n\ttelemetry\x18\x06 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.TelemetryConfig\x12M\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.CannedMessageConfig\x12<\n\x05\x61udio\x18\t \x01(\x0b\x32-.meshtastic.protobuf.ModuleConfig.AudioConfig\x12O\n\x0fremote_hardware\x18\n \x01(\x0b\x32\x36.meshtastic.protobuf.ModuleConfig.RemoteHardwareConfig\x12K\n\rneighbor_info\x18\x0b \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.NeighborInfoConfig\x12Q\n\x10\x61mbient_lighting\x18\x0c \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.AmbientLightingConfig\x12Q\n\x10\x64\x65tection_sensor\x18\r \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.DetectionSensorConfig\x12\x46\n\npaxcounter\x18\x0e \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.PaxcounterConfig\x12L\n\rstatusmessage\x18\x0f \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.StatusMessageConfig\x12U\n\x12traffic_management\x18\x10 \x01(\x0b\x32\x39.meshtastic.protobuf.ModuleConfig.TrafficManagementConfig\x12\x38\n\x03tak\x18\x11 \x01(\x0b\x32+.meshtastic.protobuf.ModuleConfig.TAKConfig\x12\x0f\n\x07version\x18\x08 \x01(\rBe\n\x14org.meshtastic.protoB\x0fLocalOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.localonly_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.localonly_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\017LocalOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_LOCALCONFIG']._serialized_start=136
- _globals['_LOCALCONFIG']._serialized_end=642
- _globals['_LOCALMODULECONFIG']._serialized_start=645
- _globals['_LOCALMODULECONFIG']._serialized_end=1653
+ _LOCALCONFIG._serialized_start=136
+ _LOCALCONFIG._serialized_end=642
+ _LOCALMODULECONFIG._serialized_start=645
+ _LOCALMODULECONFIG._serialized_end=1876
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/localonly_pb2.pyi b/meshtastic/protobuf/localonly_pb2.pyi
index 059ef1a..804bd76 100644
--- a/meshtastic/protobuf/localonly_pb2.pyi
+++ b/meshtastic/protobuf/localonly_pb2.pyi
@@ -1,228 +1,67 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from meshtastic.protobuf import config_pb2 as _config_pb2
+from meshtastic.protobuf import module_config_pb2 as _module_config_pb2
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import meshtastic.protobuf.config_pb2
-import meshtastic.protobuf.module_config_pb2
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class LocalConfig(_message.Message):
+ __slots__ = ["bluetooth", "device", "display", "lora", "network", "position", "power", "security", "version"]
+ BLUETOOTH_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_FIELD_NUMBER: _ClassVar[int]
+ DISPLAY_FIELD_NUMBER: _ClassVar[int]
+ LORA_FIELD_NUMBER: _ClassVar[int]
+ NETWORK_FIELD_NUMBER: _ClassVar[int]
+ POSITION_FIELD_NUMBER: _ClassVar[int]
+ POWER_FIELD_NUMBER: _ClassVar[int]
+ SECURITY_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ bluetooth: _config_pb2.Config.BluetoothConfig
+ device: _config_pb2.Config.DeviceConfig
+ display: _config_pb2.Config.DisplayConfig
+ lora: _config_pb2.Config.LoRaConfig
+ network: _config_pb2.Config.NetworkConfig
+ position: _config_pb2.Config.PositionConfig
+ power: _config_pb2.Config.PowerConfig
+ security: _config_pb2.Config.SecurityConfig
+ version: int
+ def __init__(self, device: _Optional[_Union[_config_pb2.Config.DeviceConfig, _Mapping]] = ..., position: _Optional[_Union[_config_pb2.Config.PositionConfig, _Mapping]] = ..., power: _Optional[_Union[_config_pb2.Config.PowerConfig, _Mapping]] = ..., network: _Optional[_Union[_config_pb2.Config.NetworkConfig, _Mapping]] = ..., display: _Optional[_Union[_config_pb2.Config.DisplayConfig, _Mapping]] = ..., lora: _Optional[_Union[_config_pb2.Config.LoRaConfig, _Mapping]] = ..., bluetooth: _Optional[_Union[_config_pb2.Config.BluetoothConfig, _Mapping]] = ..., version: _Optional[int] = ..., security: _Optional[_Union[_config_pb2.Config.SecurityConfig, _Mapping]] = ...) -> None: ...
-@typing.final
-class LocalConfig(google.protobuf.message.Message):
- """
- Protobuf structures common to apponly.proto and deviceonly.proto
- This is never sent over the wire, only for local use
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- DEVICE_FIELD_NUMBER: builtins.int
- POSITION_FIELD_NUMBER: builtins.int
- POWER_FIELD_NUMBER: builtins.int
- NETWORK_FIELD_NUMBER: builtins.int
- DISPLAY_FIELD_NUMBER: builtins.int
- LORA_FIELD_NUMBER: builtins.int
- BLUETOOTH_FIELD_NUMBER: builtins.int
- VERSION_FIELD_NUMBER: builtins.int
- SECURITY_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- A version integer used to invalidate old save files when we make
- incompatible changes This integer is set at build time and is private to
- NodeDB.cpp in the device code.
- """
- @property
- def device(self) -> meshtastic.protobuf.config_pb2.Config.DeviceConfig:
- """
- The part of the config that is specific to the Device
- """
-
- @property
- def position(self) -> meshtastic.protobuf.config_pb2.Config.PositionConfig:
- """
- The part of the config that is specific to the GPS Position
- """
-
- @property
- def power(self) -> meshtastic.protobuf.config_pb2.Config.PowerConfig:
- """
- The part of the config that is specific to the Power settings
- """
-
- @property
- def network(self) -> meshtastic.protobuf.config_pb2.Config.NetworkConfig:
- """
- The part of the config that is specific to the Wifi Settings
- """
-
- @property
- def display(self) -> meshtastic.protobuf.config_pb2.Config.DisplayConfig:
- """
- The part of the config that is specific to the Display
- """
-
- @property
- def lora(self) -> meshtastic.protobuf.config_pb2.Config.LoRaConfig:
- """
- The part of the config that is specific to the Lora Radio
- """
-
- @property
- def bluetooth(self) -> meshtastic.protobuf.config_pb2.Config.BluetoothConfig:
- """
- The part of the config that is specific to the Bluetooth settings
- """
-
- @property
- def security(self) -> meshtastic.protobuf.config_pb2.Config.SecurityConfig:
- """
- The part of the config that is specific to Security settings
- """
-
- def __init__(
- self,
- *,
- device: meshtastic.protobuf.config_pb2.Config.DeviceConfig | None = ...,
- position: meshtastic.protobuf.config_pb2.Config.PositionConfig | None = ...,
- power: meshtastic.protobuf.config_pb2.Config.PowerConfig | None = ...,
- network: meshtastic.protobuf.config_pb2.Config.NetworkConfig | None = ...,
- display: meshtastic.protobuf.config_pb2.Config.DisplayConfig | None = ...,
- lora: meshtastic.protobuf.config_pb2.Config.LoRaConfig | None = ...,
- bluetooth: meshtastic.protobuf.config_pb2.Config.BluetoothConfig | None = ...,
- version: builtins.int = ...,
- security: meshtastic.protobuf.config_pb2.Config.SecurityConfig | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["bluetooth", b"bluetooth", "device", b"device", "display", b"display", "lora", b"lora", "network", b"network", "position", b"position", "power", b"power", "security", b"security"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["bluetooth", b"bluetooth", "device", b"device", "display", b"display", "lora", b"lora", "network", b"network", "position", b"position", "power", b"power", "security", b"security", "version", b"version"]) -> None: ...
-
-global___LocalConfig = LocalConfig
-
-@typing.final
-class LocalModuleConfig(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- MQTT_FIELD_NUMBER: builtins.int
- SERIAL_FIELD_NUMBER: builtins.int
- EXTERNAL_NOTIFICATION_FIELD_NUMBER: builtins.int
- STORE_FORWARD_FIELD_NUMBER: builtins.int
- RANGE_TEST_FIELD_NUMBER: builtins.int
- TELEMETRY_FIELD_NUMBER: builtins.int
- CANNED_MESSAGE_FIELD_NUMBER: builtins.int
- AUDIO_FIELD_NUMBER: builtins.int
- REMOTE_HARDWARE_FIELD_NUMBER: builtins.int
- NEIGHBOR_INFO_FIELD_NUMBER: builtins.int
- AMBIENT_LIGHTING_FIELD_NUMBER: builtins.int
- DETECTION_SENSOR_FIELD_NUMBER: builtins.int
- PAXCOUNTER_FIELD_NUMBER: builtins.int
- VERSION_FIELD_NUMBER: builtins.int
- version: builtins.int
- """
- A version integer used to invalidate old save files when we make
- incompatible changes This integer is set at build time and is private to
- NodeDB.cpp in the device code.
- """
- @property
- def mqtt(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.MQTTConfig:
- """
- The part of the config that is specific to the MQTT module
- """
-
- @property
- def serial(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.SerialConfig:
- """
- The part of the config that is specific to the Serial module
- """
-
- @property
- def external_notification(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.ExternalNotificationConfig:
- """
- The part of the config that is specific to the ExternalNotification module
- """
-
- @property
- def store_forward(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.StoreForwardConfig:
- """
- The part of the config that is specific to the Store & Forward module
- """
-
- @property
- def range_test(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.RangeTestConfig:
- """
- The part of the config that is specific to the RangeTest module
- """
-
- @property
- def telemetry(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.TelemetryConfig:
- """
- The part of the config that is specific to the Telemetry module
- """
-
- @property
- def canned_message(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.CannedMessageConfig:
- """
- The part of the config that is specific to the Canned Message module
- """
-
- @property
- def audio(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.AudioConfig:
- """
- The part of the config that is specific to the Audio module
- """
-
- @property
- def remote_hardware(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.RemoteHardwareConfig:
- """
- The part of the config that is specific to the Remote Hardware module
- """
-
- @property
- def neighbor_info(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.NeighborInfoConfig:
- """
- The part of the config that is specific to the Neighbor Info module
- """
-
- @property
- def ambient_lighting(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.AmbientLightingConfig:
- """
- The part of the config that is specific to the Ambient Lighting module
- """
-
- @property
- def detection_sensor(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.DetectionSensorConfig:
- """
- The part of the config that is specific to the Detection Sensor module
- """
-
- @property
- def paxcounter(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig.PaxcounterConfig:
- """
- Paxcounter Config
- """
-
- def __init__(
- self,
- *,
- mqtt: meshtastic.protobuf.module_config_pb2.ModuleConfig.MQTTConfig | None = ...,
- serial: meshtastic.protobuf.module_config_pb2.ModuleConfig.SerialConfig | None = ...,
- external_notification: meshtastic.protobuf.module_config_pb2.ModuleConfig.ExternalNotificationConfig | None = ...,
- store_forward: meshtastic.protobuf.module_config_pb2.ModuleConfig.StoreForwardConfig | None = ...,
- range_test: meshtastic.protobuf.module_config_pb2.ModuleConfig.RangeTestConfig | None = ...,
- telemetry: meshtastic.protobuf.module_config_pb2.ModuleConfig.TelemetryConfig | None = ...,
- canned_message: meshtastic.protobuf.module_config_pb2.ModuleConfig.CannedMessageConfig | None = ...,
- audio: meshtastic.protobuf.module_config_pb2.ModuleConfig.AudioConfig | None = ...,
- remote_hardware: meshtastic.protobuf.module_config_pb2.ModuleConfig.RemoteHardwareConfig | None = ...,
- neighbor_info: meshtastic.protobuf.module_config_pb2.ModuleConfig.NeighborInfoConfig | None = ...,
- ambient_lighting: meshtastic.protobuf.module_config_pb2.ModuleConfig.AmbientLightingConfig | None = ...,
- detection_sensor: meshtastic.protobuf.module_config_pb2.ModuleConfig.DetectionSensorConfig | None = ...,
- paxcounter: meshtastic.protobuf.module_config_pb2.ModuleConfig.PaxcounterConfig | None = ...,
- version: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["ambient_lighting", b"ambient_lighting", "audio", b"audio", "canned_message", b"canned_message", "detection_sensor", b"detection_sensor", "external_notification", b"external_notification", "mqtt", b"mqtt", "neighbor_info", b"neighbor_info", "paxcounter", b"paxcounter", "range_test", b"range_test", "remote_hardware", b"remote_hardware", "serial", b"serial", "store_forward", b"store_forward", "telemetry", b"telemetry"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["ambient_lighting", b"ambient_lighting", "audio", b"audio", "canned_message", b"canned_message", "detection_sensor", b"detection_sensor", "external_notification", b"external_notification", "mqtt", b"mqtt", "neighbor_info", b"neighbor_info", "paxcounter", b"paxcounter", "range_test", b"range_test", "remote_hardware", b"remote_hardware", "serial", b"serial", "store_forward", b"store_forward", "telemetry", b"telemetry", "version", b"version"]) -> None: ...
-
-global___LocalModuleConfig = LocalModuleConfig
+class LocalModuleConfig(_message.Message):
+ __slots__ = ["ambient_lighting", "audio", "canned_message", "detection_sensor", "external_notification", "mqtt", "neighbor_info", "paxcounter", "range_test", "remote_hardware", "serial", "statusmessage", "store_forward", "tak", "telemetry", "traffic_management", "version"]
+ AMBIENT_LIGHTING_FIELD_NUMBER: _ClassVar[int]
+ AUDIO_FIELD_NUMBER: _ClassVar[int]
+ CANNED_MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ DETECTION_SENSOR_FIELD_NUMBER: _ClassVar[int]
+ EXTERNAL_NOTIFICATION_FIELD_NUMBER: _ClassVar[int]
+ MQTT_FIELD_NUMBER: _ClassVar[int]
+ NEIGHBOR_INFO_FIELD_NUMBER: _ClassVar[int]
+ PAXCOUNTER_FIELD_NUMBER: _ClassVar[int]
+ RANGE_TEST_FIELD_NUMBER: _ClassVar[int]
+ REMOTE_HARDWARE_FIELD_NUMBER: _ClassVar[int]
+ SERIAL_FIELD_NUMBER: _ClassVar[int]
+ STATUSMESSAGE_FIELD_NUMBER: _ClassVar[int]
+ STORE_FORWARD_FIELD_NUMBER: _ClassVar[int]
+ TAK_FIELD_NUMBER: _ClassVar[int]
+ TELEMETRY_FIELD_NUMBER: _ClassVar[int]
+ TRAFFIC_MANAGEMENT_FIELD_NUMBER: _ClassVar[int]
+ VERSION_FIELD_NUMBER: _ClassVar[int]
+ ambient_lighting: _module_config_pb2.ModuleConfig.AmbientLightingConfig
+ audio: _module_config_pb2.ModuleConfig.AudioConfig
+ canned_message: _module_config_pb2.ModuleConfig.CannedMessageConfig
+ detection_sensor: _module_config_pb2.ModuleConfig.DetectionSensorConfig
+ external_notification: _module_config_pb2.ModuleConfig.ExternalNotificationConfig
+ mqtt: _module_config_pb2.ModuleConfig.MQTTConfig
+ neighbor_info: _module_config_pb2.ModuleConfig.NeighborInfoConfig
+ paxcounter: _module_config_pb2.ModuleConfig.PaxcounterConfig
+ range_test: _module_config_pb2.ModuleConfig.RangeTestConfig
+ remote_hardware: _module_config_pb2.ModuleConfig.RemoteHardwareConfig
+ serial: _module_config_pb2.ModuleConfig.SerialConfig
+ statusmessage: _module_config_pb2.ModuleConfig.StatusMessageConfig
+ store_forward: _module_config_pb2.ModuleConfig.StoreForwardConfig
+ tak: _module_config_pb2.ModuleConfig.TAKConfig
+ telemetry: _module_config_pb2.ModuleConfig.TelemetryConfig
+ traffic_management: _module_config_pb2.ModuleConfig.TrafficManagementConfig
+ version: int
+ def __init__(self, mqtt: _Optional[_Union[_module_config_pb2.ModuleConfig.MQTTConfig, _Mapping]] = ..., serial: _Optional[_Union[_module_config_pb2.ModuleConfig.SerialConfig, _Mapping]] = ..., external_notification: _Optional[_Union[_module_config_pb2.ModuleConfig.ExternalNotificationConfig, _Mapping]] = ..., store_forward: _Optional[_Union[_module_config_pb2.ModuleConfig.StoreForwardConfig, _Mapping]] = ..., range_test: _Optional[_Union[_module_config_pb2.ModuleConfig.RangeTestConfig, _Mapping]] = ..., telemetry: _Optional[_Union[_module_config_pb2.ModuleConfig.TelemetryConfig, _Mapping]] = ..., canned_message: _Optional[_Union[_module_config_pb2.ModuleConfig.CannedMessageConfig, _Mapping]] = ..., audio: _Optional[_Union[_module_config_pb2.ModuleConfig.AudioConfig, _Mapping]] = ..., remote_hardware: _Optional[_Union[_module_config_pb2.ModuleConfig.RemoteHardwareConfig, _Mapping]] = ..., neighbor_info: _Optional[_Union[_module_config_pb2.ModuleConfig.NeighborInfoConfig, _Mapping]] = ..., ambient_lighting: _Optional[_Union[_module_config_pb2.ModuleConfig.AmbientLightingConfig, _Mapping]] = ..., detection_sensor: _Optional[_Union[_module_config_pb2.ModuleConfig.DetectionSensorConfig, _Mapping]] = ..., paxcounter: _Optional[_Union[_module_config_pb2.ModuleConfig.PaxcounterConfig, _Mapping]] = ..., statusmessage: _Optional[_Union[_module_config_pb2.ModuleConfig.StatusMessageConfig, _Mapping]] = ..., traffic_management: _Optional[_Union[_module_config_pb2.ModuleConfig.TrafficManagementConfig, _Mapping]] = ..., tak: _Optional[_Union[_module_config_pb2.ModuleConfig.TAKConfig, _Mapping]] = ..., version: _Optional[int] = ...) -> None: ...
diff --git a/meshtastic/protobuf/mesh_pb2.py b/meshtastic/protobuf/mesh_pb2.py
index 0e6142a..330d2f2 100644
--- a/meshtastic/protobuf/mesh_pb2.py
+++ b/meshtastic/protobuf/mesh_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/mesh.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -20,102 +20,116 @@ from meshtastic.protobuf import telemetry_pb2 as meshtastic_dot_protobuf_dot_tel
from meshtastic.protobuf import xmodem_pb2 as meshtastic_dot_protobuf_dot_xmodem__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/mesh.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a#meshtastic/protobuf/device_ui.proto\x1a\'meshtastic/protobuf/module_config.proto\x1a\"meshtastic/protobuf/portnums.proto\x1a#meshtastic/protobuf/telemetry.proto\x1a meshtastic/protobuf/xmodem.proto\"\x99\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@\n\x0flocation_source\x18\x05 \x01(\x0e\x32\'.meshtastic.protobuf.Position.LocSource\x12@\n\x0f\x61ltitude_source\x18\x06 \x01(\x0e\x32\'.meshtastic.protobuf.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\"\x9c\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\x34\n\x08hw_model\x18\x05 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x13\n\x0bis_licensed\x18\x06 \x01(\x08\x12;\n\x04role\x18\x07 \x01(\x0e\x32-.meshtastic.protobuf.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\"\x96\x04\n\x07Routing\x12<\n\rroute_request\x18\x01 \x01(\x0b\x32#.meshtastic.protobuf.RouteDiscoveryH\x00\x12:\n\x0broute_reply\x18\x02 \x01(\x0b\x32#.meshtastic.protobuf.RouteDiscoveryH\x00\x12:\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\".meshtastic.protobuf.Routing.ErrorH\x00\"\xc9\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&B\t\n\x07variant\"\xd4\x01\n\x04\x44\x61ta\x12-\n\x07portnum\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.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\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\"\xbc\x01\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\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_i\"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\"\xd9\x07\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\x19.meshtastic.protobuf.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x0f\n\x07rx_time\x18\x07 \x01(\x07\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\t \x01(\r\x12\x10\n\x08want_ack\x18\n \x01(\x08\x12:\n\x08priority\x18\x0b \x01(\x0e\x32(.meshtastic.protobuf.MeshPacket.Priority\x12\x0f\n\x07rx_rssi\x18\x0c \x01(\x05\x12<\n\x07\x64\x65layed\x18\r \x01(\x0e\x32\'.meshtastic.protobuf.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\x12O\n\x13transport_mechanism\x18\x15 \x01(\x0e\x32\x32.meshtastic.protobuf.MeshPacket.TransportMechanism\"~\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\"\xcf\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\x42\x11\n\x0fpayload_variant\"\xe2\x02\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x19.meshtastic.protobuf.User\x12/\n\x08position\x18\x03 \x01(\x0b\x32\x1d.meshtastic.protobuf.Position\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12:\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\".meshtastic.protobuf.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\x42\x0c\n\n_hops_away\"\xca\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>\n\x10\x66irmware_edition\x18\x0e \x01(\x0e\x32$.meshtastic.protobuf.FirmwareEdition\x12\x14\n\x0cnodedb_count\x18\x0f \x01(\r\"\xc9\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\x33\n\x05level\x18\x04 \x01(\x0e\x32$.meshtastic.protobuf.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\"\xf7\x06\n\tFromRadio\x12\n\n\x02id\x18\x01 \x01(\r\x12\x31\n\x06packet\x18\x02 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacketH\x00\x12\x32\n\x07my_info\x18\x03 \x01(\x0b\x32\x1f.meshtastic.protobuf.MyNodeInfoH\x00\x12\x32\n\tnode_info\x18\x04 \x01(\x0b\x32\x1d.meshtastic.protobuf.NodeInfoH\x00\x12-\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12\x34\n\nlog_record\x18\x06 \x01(\x0b\x32\x1e.meshtastic.protobuf.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x07 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\x08 \x01(\x08H\x00\x12\x39\n\x0cmoduleConfig\x18\t \x01(\x0b\x32!.meshtastic.protobuf.ModuleConfigH\x00\x12/\n\x07\x63hannel\x18\n \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x37\n\x0bqueueStatus\x18\x0b \x01(\x0b\x32 .meshtastic.protobuf.QueueStatusH\x00\x12\x33\n\x0cxmodemPacket\x18\x0c \x01(\x0b\x32\x1b.meshtastic.protobuf.XModemH\x00\x12\x37\n\x08metadata\x18\r \x01(\x0b\x32#.meshtastic.protobuf.DeviceMetadataH\x00\x12M\n\x16mqttClientProxyMessage\x18\x0e \x01(\x0b\x32+.meshtastic.protobuf.MqttClientProxyMessageH\x00\x12\x31\n\x08\x66ileInfo\x18\x0f \x01(\x0b\x32\x1d.meshtastic.protobuf.FileInfoH\x00\x12\x45\n\x12\x63lientNotification\x18\x10 \x01(\x0b\x32\'.meshtastic.protobuf.ClientNotificationH\x00\x12=\n\x0e\x64\x65viceuiConfig\x18\x11 \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x42\x11\n\x0fpayload_variant\"\xb0\x04\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\x33\n\x05level\x18\x03 \x01(\x0e\x32$.meshtastic.protobuf.LogRecord.Level\x12\x0f\n\x07message\x18\x04 \x01(\t\x12Z\n\x1ekey_verification_number_inform\x18\x0b \x01(\x0b\x32\x30.meshtastic.protobuf.KeyVerificationNumberInformH\x00\x12\\\n\x1fkey_verification_number_request\x18\x0c \x01(\x0b\x32\x31.meshtastic.protobuf.KeyVerificationNumberRequestH\x00\x12K\n\x16key_verification_final\x18\r \x01(\x0b\x32).meshtastic.protobuf.KeyVerificationFinalH\x00\x12I\n\x15\x64uplicated_public_key\x18\x0e \x01(\x0b\x32(.meshtastic.protobuf.DuplicatedPublicKeyH\x00\x12=\n\x0flow_entropy_key\x18\x0f \x01(\x0b\x32\".meshtastic.protobuf.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\"\xb8\x02\n\x07ToRadio\x12\x31\n\x06packet\x18\x01 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x03 \x01(\rH\x00\x12\x14\n\ndisconnect\x18\x04 \x01(\x08H\x00\x12\x33\n\x0cxmodemPacket\x18\x05 \x01(\x0b\x32\x1b.meshtastic.protobuf.XModemH\x00\x12M\n\x16mqttClientProxyMessage\x18\x06 \x01(\x0b\x32+.meshtastic.protobuf.MqttClientProxyMessageH\x00\x12\x33\n\theartbeat\x18\x07 \x01(\x0b\x32\x1e.meshtastic.protobuf.HeartbeatH\x00\x42\x11\n\x0fpayload_variant\"I\n\nCompressed\x12-\n\x07portnum\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.PortNum\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x90\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\x30\n\tneighbors\x18\x04 \x03(\x0b\x32\x1d.meshtastic.protobuf.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\"\xe9\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;\n\x04role\x18\x07 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x16\n\x0eposition_flags\x18\x08 \x01(\r\x12\x34\n\x08hw_model\x18\t \x01(\x0e\x32\".meshtastic.protobuf.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\"\x1a\n\tHeartbeat\x12\r\n\x05nonce\x18\x01 \x01(\r\"^\n\x15NodeRemoteHardwarePin\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12\x33\n\x03pin\x18\x02 \x01(\x0b\x32&.meshtastic.protobuf.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\"\xb3\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;\n\rresend_chunks\x18\x04 \x01(\x0b\x32\".meshtastic.protobuf.resend_chunksH\x00\x42\x11\n\x0fpayload_variant*\xe2\x11\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\x14\n\x10SENSELORA_RP2040\x10\x1b\x12\x10\n\x0cSENSELORA_S3\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\x0e\n\nNRF52840DK\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\x1a\n\x16RESERVED_FRIED_CHICKEN\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\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*\x7f\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\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')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/mesh.proto\x12\x13meshtastic.protobuf\x1a!meshtastic/protobuf/channel.proto\x1a meshtastic/protobuf/config.proto\x1a#meshtastic/protobuf/device_ui.proto\x1a\'meshtastic/protobuf/module_config.proto\x1a\"meshtastic/protobuf/portnums.proto\x1a#meshtastic/protobuf/telemetry.proto\x1a meshtastic/protobuf/xmodem.proto\"\x99\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@\n\x0flocation_source\x18\x05 \x01(\x0e\x32\'.meshtastic.protobuf.Position.LocSource\x12@\n\x0f\x61ltitude_source\x18\x06 \x01(\x0e\x32\'.meshtastic.protobuf.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\"\x9c\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\x34\n\x08hw_model\x18\x05 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x13\n\x0bis_licensed\x18\x06 \x01(\x08\x12;\n\x04role\x18\x07 \x01(\x0e\x32-.meshtastic.protobuf.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\"\xb4\x04\n\x07Routing\x12<\n\rroute_request\x18\x01 \x01(\x0b\x32#.meshtastic.protobuf.RouteDiscoveryH\x00\x12:\n\x0broute_reply\x18\x02 \x01(\x0b\x32#.meshtastic.protobuf.RouteDiscoveryH\x00\x12:\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\".meshtastic.protobuf.Routing.ErrorH\x00\"\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\"\xd4\x01\n\x04\x44\x61ta\x12-\n\x07portnum\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.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\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\"\xd4\x03\n\x14StoreForwardPlusPlus\x12V\n\x11sfpp_message_type\x18\x01 \x01(\x0e\x32;.meshtastic.protobuf.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\"\xec\x02\n\x0bRemoteShell\x12\x33\n\x02op\x18\x01 \x01(\x0e\x32\'.meshtastic.protobuf.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\"\xbc\x01\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\x42\r\n\x0b_latitude_iB\x0e\n\x0c_longitude_i\"\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\"\xd9\x07\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\x19.meshtastic.protobuf.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x0f\n\x07rx_time\x18\x07 \x01(\x07\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\t \x01(\r\x12\x10\n\x08want_ack\x18\n \x01(\x08\x12:\n\x08priority\x18\x0b \x01(\x0e\x32(.meshtastic.protobuf.MeshPacket.Priority\x12\x0f\n\x07rx_rssi\x18\x0c \x01(\x05\x12<\n\x07\x64\x65layed\x18\r \x01(\x0e\x32\'.meshtastic.protobuf.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\x12O\n\x13transport_mechanism\x18\x15 \x01(\x0e\x32\x32.meshtastic.protobuf.MeshPacket.TransportMechanism\"~\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\"\xcf\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\x42\x11\n\x0fpayload_variant\"\xf4\x02\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\'\n\x04user\x18\x02 \x01(\x0b\x32\x19.meshtastic.protobuf.User\x12/\n\x08position\x18\x03 \x01(\x0b\x32\x1d.meshtastic.protobuf.Position\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12:\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\".meshtastic.protobuf.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\x42\x0c\n\n_hops_away\"\xca\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>\n\x10\x66irmware_edition\x18\x0e \x01(\x0e\x32$.meshtastic.protobuf.FirmwareEdition\x12\x14\n\x0cnodedb_count\x18\x0f \x01(\r\"\xc9\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\x33\n\x05level\x18\x04 \x01(\x0e\x32$.meshtastic.protobuf.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\"\xb7\x07\n\tFromRadio\x12\n\n\x02id\x18\x01 \x01(\r\x12\x31\n\x06packet\x18\x02 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacketH\x00\x12\x32\n\x07my_info\x18\x03 \x01(\x0b\x32\x1f.meshtastic.protobuf.MyNodeInfoH\x00\x12\x32\n\tnode_info\x18\x04 \x01(\x0b\x32\x1d.meshtastic.protobuf.NodeInfoH\x00\x12-\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x1b.meshtastic.protobuf.ConfigH\x00\x12\x34\n\nlog_record\x18\x06 \x01(\x0b\x32\x1e.meshtastic.protobuf.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x07 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\x08 \x01(\x08H\x00\x12\x39\n\x0cmoduleConfig\x18\t \x01(\x0b\x32!.meshtastic.protobuf.ModuleConfigH\x00\x12/\n\x07\x63hannel\x18\n \x01(\x0b\x32\x1c.meshtastic.protobuf.ChannelH\x00\x12\x37\n\x0bqueueStatus\x18\x0b \x01(\x0b\x32 .meshtastic.protobuf.QueueStatusH\x00\x12\x33\n\x0cxmodemPacket\x18\x0c \x01(\x0b\x32\x1b.meshtastic.protobuf.XModemH\x00\x12\x37\n\x08metadata\x18\r \x01(\x0b\x32#.meshtastic.protobuf.DeviceMetadataH\x00\x12M\n\x16mqttClientProxyMessage\x18\x0e \x01(\x0b\x32+.meshtastic.protobuf.MqttClientProxyMessageH\x00\x12\x31\n\x08\x66ileInfo\x18\x0f \x01(\x0b\x32\x1d.meshtastic.protobuf.FileInfoH\x00\x12\x45\n\x12\x63lientNotification\x18\x10 \x01(\x0b\x32\'.meshtastic.protobuf.ClientNotificationH\x00\x12=\n\x0e\x64\x65viceuiConfig\x18\x11 \x01(\x0b\x32#.meshtastic.protobuf.DeviceUIConfigH\x00\x12>\n\x0flockdown_status\x18\x12 \x01(\x0b\x32#.meshtastic.protobuf.LockdownStatusH\x00\x42\x11\n\x0fpayload_variant\"\x8e\x02\n\x0eLockdownStatus\x12\x38\n\x05state\x18\x01 \x01(\x0e\x32).meshtastic.protobuf.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\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\"\xb0\x04\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\x33\n\x05level\x18\x03 \x01(\x0e\x32$.meshtastic.protobuf.LogRecord.Level\x12\x0f\n\x07message\x18\x04 \x01(\t\x12Z\n\x1ekey_verification_number_inform\x18\x0b \x01(\x0b\x32\x30.meshtastic.protobuf.KeyVerificationNumberInformH\x00\x12\\\n\x1fkey_verification_number_request\x18\x0c \x01(\x0b\x32\x31.meshtastic.protobuf.KeyVerificationNumberRequestH\x00\x12K\n\x16key_verification_final\x18\r \x01(\x0b\x32).meshtastic.protobuf.KeyVerificationFinalH\x00\x12I\n\x15\x64uplicated_public_key\x18\x0e \x01(\x0b\x32(.meshtastic.protobuf.DuplicatedPublicKeyH\x00\x12=\n\x0flow_entropy_key\x18\x0f \x01(\x0b\x32\".meshtastic.protobuf.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\"\xb8\x02\n\x07ToRadio\x12\x31\n\x06packet\x18\x01 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x03 \x01(\rH\x00\x12\x14\n\ndisconnect\x18\x04 \x01(\x08H\x00\x12\x33\n\x0cxmodemPacket\x18\x05 \x01(\x0b\x32\x1b.meshtastic.protobuf.XModemH\x00\x12M\n\x16mqttClientProxyMessage\x18\x06 \x01(\x0b\x32+.meshtastic.protobuf.MqttClientProxyMessageH\x00\x12\x33\n\theartbeat\x18\x07 \x01(\x0b\x32\x1e.meshtastic.protobuf.HeartbeatH\x00\x42\x11\n\x0fpayload_variant\"I\n\nCompressed\x12-\n\x07portnum\x18\x01 \x01(\x0e\x32\x1c.meshtastic.protobuf.PortNum\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x90\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\x30\n\tneighbors\x18\x04 \x03(\x0b\x32\x1d.meshtastic.protobuf.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\"\xe9\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;\n\x04role\x18\x07 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x16\n\x0eposition_flags\x18\x08 \x01(\r\x12\x34\n\x08hw_model\x18\t \x01(\x0e\x32\".meshtastic.protobuf.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\"\x1a\n\tHeartbeat\x12\r\n\x05nonce\x18\x01 \x01(\r\"^\n\x15NodeRemoteHardwarePin\x12\x10\n\x08node_num\x18\x01 \x01(\r\x12\x33\n\x03pin\x18\x02 \x01(\x0b\x32&.meshtastic.protobuf.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\"\xb3\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;\n\rresend_chunks\x18\x04 \x01(\x0b\x32\".meshtastic.protobuf.resend_chunksH\x00\x42\x11\n\x0fpayload_variant*\xce\x14\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\x14\n\x10SENSELORA_RP2040\x10\x1b\x12\x10\n\x0cSENSELORA_S3\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\x18\n\x13TRACKER_T1000_E_PRO\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\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*\x7f\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\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')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mesh_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mesh_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nMeshProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
_USER.fields_by_name['macaddr']._options = None
_USER.fields_by_name['macaddr']._serialized_options = b'\030\001'
_MESHPACKET.fields_by_name['delayed']._options = None
_MESHPACKET.fields_by_name['delayed']._serialized_options = b'\030\001'
- _globals['_HARDWAREMODEL']._serialized_start=7838
- _globals['_HARDWAREMODEL']._serialized_end=10112
- _globals['_CONSTANTS']._serialized_start=10114
- _globals['_CONSTANTS']._serialized_end=10158
- _globals['_CRITICALERRORCODE']._serialized_start=10161
- _globals['_CRITICALERRORCODE']._serialized_end=10469
- _globals['_FIRMWAREEDITION']._serialized_start=10471
- _globals['_FIRMWAREEDITION']._serialized_end=10598
- _globals['_EXCLUDEDMODULES']._serialized_start=10601
- _globals['_EXCLUDEDMODULES']._serialized_end=10985
- _globals['_POSITION']._serialized_start=310
- _globals['_POSITION']._serialized_end=1231
- _globals['_POSITION_LOCSOURCE']._serialized_start=926
- _globals['_POSITION_LOCSOURCE']._serialized_end=1004
- _globals['_POSITION_ALTSOURCE']._serialized_start=1006
- _globals['_POSITION_ALTSOURCE']._serialized_end=1104
- _globals['_USER']._serialized_start=1234
- _globals['_USER']._serialized_end=1518
- _globals['_ROUTEDISCOVERY']._serialized_start=1520
- _globals['_ROUTEDISCOVERY']._serialized_end=1610
- _globals['_ROUTING']._serialized_start=1613
- _globals['_ROUTING']._serialized_end=2147
- _globals['_ROUTING_ERROR']._serialized_start=1807
- _globals['_ROUTING_ERROR']._serialized_end=2136
- _globals['_DATA']._serialized_start=2150
- _globals['_DATA']._serialized_end=2362
- _globals['_KEYVERIFICATION']._serialized_start=2364
- _globals['_KEYVERIFICATION']._serialized_end=2426
- _globals['_WAYPOINT']._serialized_start=2429
- _globals['_WAYPOINT']._serialized_end=2617
- _globals['_MQTTCLIENTPROXYMESSAGE']._serialized_start=2619
- _globals['_MQTTCLIENTPROXYMESSAGE']._serialized_end=2727
- _globals['_MESHPACKET']._serialized_start=2730
- _globals['_MESHPACKET']._serialized_end=3715
- _globals['_MESHPACKET_PRIORITY']._serialized_start=3292
- _globals['_MESHPACKET_PRIORITY']._serialized_end=3418
- _globals['_MESHPACKET_DELAYED']._serialized_start=3420
- _globals['_MESHPACKET_DELAYED']._serialized_end=3486
- _globals['_MESHPACKET_TRANSPORTMECHANISM']._serialized_start=3489
- _globals['_MESHPACKET_TRANSPORTMECHANISM']._serialized_end=3696
- _globals['_NODEINFO']._serialized_start=3718
- _globals['_NODEINFO']._serialized_end=4072
- _globals['_MYNODEINFO']._serialized_start=4075
- _globals['_MYNODEINFO']._serialized_end=4277
- _globals['_LOGRECORD']._serialized_start=4280
- _globals['_LOGRECORD']._serialized_end=4481
- _globals['_LOGRECORD_LEVEL']._serialized_start=4393
- _globals['_LOGRECORD_LEVEL']._serialized_end=4481
- _globals['_QUEUESTATUS']._serialized_start=4483
- _globals['_QUEUESTATUS']._serialized_end=4563
- _globals['_FROMRADIO']._serialized_start=4566
- _globals['_FROMRADIO']._serialized_end=5453
- _globals['_CLIENTNOTIFICATION']._serialized_start=5456
- _globals['_CLIENTNOTIFICATION']._serialized_end=6016
- _globals['_KEYVERIFICATIONNUMBERINFORM']._serialized_start=6018
- _globals['_KEYVERIFICATIONNUMBERINFORM']._serialized_end=6112
- _globals['_KEYVERIFICATIONNUMBERREQUEST']._serialized_start=6114
- _globals['_KEYVERIFICATIONNUMBERREQUEST']._serialized_end=6184
- _globals['_KEYVERIFICATIONFINAL']._serialized_start=6186
- _globals['_KEYVERIFICATIONFINAL']._serialized_end=6299
- _globals['_DUPLICATEDPUBLICKEY']._serialized_start=6301
- _globals['_DUPLICATEDPUBLICKEY']._serialized_end=6322
- _globals['_LOWENTROPYKEY']._serialized_start=6324
- _globals['_LOWENTROPYKEY']._serialized_end=6339
- _globals['_FILEINFO']._serialized_start=6341
- _globals['_FILEINFO']._serialized_end=6390
- _globals['_TORADIO']._serialized_start=6393
- _globals['_TORADIO']._serialized_end=6705
- _globals['_COMPRESSED']._serialized_start=6707
- _globals['_COMPRESSED']._serialized_end=6780
- _globals['_NEIGHBORINFO']._serialized_start=6783
- _globals['_NEIGHBORINFO']._serialized_end=6927
- _globals['_NEIGHBOR']._serialized_start=6929
- _globals['_NEIGHBOR']._serialized_end=7029
- _globals['_DEVICEMETADATA']._serialized_start=7032
- _globals['_DEVICEMETADATA']._serialized_end=7393
- _globals['_HEARTBEAT']._serialized_start=7395
- _globals['_HEARTBEAT']._serialized_end=7421
- _globals['_NODEREMOTEHARDWAREPIN']._serialized_start=7423
- _globals['_NODEREMOTEHARDWAREPIN']._serialized_end=7517
- _globals['_CHUNKEDPAYLOAD']._serialized_start=7519
- _globals['_CHUNKEDPAYLOAD']._serialized_end=7620
- _globals['_RESEND_CHUNKS']._serialized_start=7622
- _globals['_RESEND_CHUNKS']._serialized_end=7653
- _globals['_CHUNKEDPAYLOADRESPONSE']._serialized_start=7656
- _globals['_CHUNKEDPAYLOADRESPONSE']._serialized_end=7835
+ _HARDWAREMODEL._serialized_start=9094
+ _HARDWAREMODEL._serialized_end=11732
+ _CONSTANTS._serialized_start=11734
+ _CONSTANTS._serialized_end=11778
+ _CRITICALERRORCODE._serialized_start=11781
+ _CRITICALERRORCODE._serialized_end=12089
+ _FIRMWAREEDITION._serialized_start=12091
+ _FIRMWAREEDITION._serialized_end=12218
+ _EXCLUDEDMODULES._serialized_start=12221
+ _EXCLUDEDMODULES._serialized_end=12605
+ _POSITION._serialized_start=310
+ _POSITION._serialized_end=1231
+ _POSITION_LOCSOURCE._serialized_start=926
+ _POSITION_LOCSOURCE._serialized_end=1004
+ _POSITION_ALTSOURCE._serialized_start=1006
+ _POSITION_ALTSOURCE._serialized_end=1104
+ _USER._serialized_start=1234
+ _USER._serialized_end=1518
+ _ROUTEDISCOVERY._serialized_start=1520
+ _ROUTEDISCOVERY._serialized_end=1610
+ _ROUTING._serialized_start=1613
+ _ROUTING._serialized_end=2177
+ _ROUTING_ERROR._serialized_start=1807
+ _ROUTING_ERROR._serialized_end=2166
+ _DATA._serialized_start=2180
+ _DATA._serialized_end=2392
+ _KEYVERIFICATION._serialized_start=2394
+ _KEYVERIFICATION._serialized_end=2456
+ _STOREFORWARDPLUSPLUS._serialized_start=2459
+ _STOREFORWARDPLUSPLUS._serialized_end=2927
+ _STOREFORWARDPLUSPLUS_SFPP_MESSAGE_TYPE._serialized_start=2778
+ _STOREFORWARDPLUSPLUS_SFPP_MESSAGE_TYPE._serialized_end=2927
+ _REMOTESHELL._serialized_start=2930
+ _REMOTESHELL._serialized_end=3294
+ _REMOTESHELL_OPCODE._serialized_start=3151
+ _REMOTESHELL_OPCODE._serialized_end=3294
+ _WAYPOINT._serialized_start=3297
+ _WAYPOINT._serialized_end=3485
+ _STATUSMESSAGE._serialized_start=3487
+ _STATUSMESSAGE._serialized_end=3518
+ _MQTTCLIENTPROXYMESSAGE._serialized_start=3520
+ _MQTTCLIENTPROXYMESSAGE._serialized_end=3628
+ _MESHPACKET._serialized_start=3631
+ _MESHPACKET._serialized_end=4616
+ _MESHPACKET_PRIORITY._serialized_start=4193
+ _MESHPACKET_PRIORITY._serialized_end=4319
+ _MESHPACKET_DELAYED._serialized_start=4321
+ _MESHPACKET_DELAYED._serialized_end=4387
+ _MESHPACKET_TRANSPORTMECHANISM._serialized_start=4390
+ _MESHPACKET_TRANSPORTMECHANISM._serialized_end=4597
+ _NODEINFO._serialized_start=4619
+ _NODEINFO._serialized_end=4991
+ _MYNODEINFO._serialized_start=4994
+ _MYNODEINFO._serialized_end=5196
+ _LOGRECORD._serialized_start=5199
+ _LOGRECORD._serialized_end=5400
+ _LOGRECORD_LEVEL._serialized_start=5312
+ _LOGRECORD_LEVEL._serialized_end=5400
+ _QUEUESTATUS._serialized_start=5402
+ _QUEUESTATUS._serialized_end=5482
+ _FROMRADIO._serialized_start=5485
+ _FROMRADIO._serialized_end=6436
+ _LOCKDOWNSTATUS._serialized_start=6439
+ _LOCKDOWNSTATUS._serialized_end=6709
+ _LOCKDOWNSTATUS_STATE._serialized_start=6613
+ _LOCKDOWNSTATUS_STATE._serialized_end=6709
+ _CLIENTNOTIFICATION._serialized_start=6712
+ _CLIENTNOTIFICATION._serialized_end=7272
+ _KEYVERIFICATIONNUMBERINFORM._serialized_start=7274
+ _KEYVERIFICATIONNUMBERINFORM._serialized_end=7368
+ _KEYVERIFICATIONNUMBERREQUEST._serialized_start=7370
+ _KEYVERIFICATIONNUMBERREQUEST._serialized_end=7440
+ _KEYVERIFICATIONFINAL._serialized_start=7442
+ _KEYVERIFICATIONFINAL._serialized_end=7555
+ _DUPLICATEDPUBLICKEY._serialized_start=7557
+ _DUPLICATEDPUBLICKEY._serialized_end=7578
+ _LOWENTROPYKEY._serialized_start=7580
+ _LOWENTROPYKEY._serialized_end=7595
+ _FILEINFO._serialized_start=7597
+ _FILEINFO._serialized_end=7646
+ _TORADIO._serialized_start=7649
+ _TORADIO._serialized_end=7961
+ _COMPRESSED._serialized_start=7963
+ _COMPRESSED._serialized_end=8036
+ _NEIGHBORINFO._serialized_start=8039
+ _NEIGHBORINFO._serialized_end=8183
+ _NEIGHBOR._serialized_start=8185
+ _NEIGHBOR._serialized_end=8285
+ _DEVICEMETADATA._serialized_start=8288
+ _DEVICEMETADATA._serialized_end=8649
+ _HEARTBEAT._serialized_start=8651
+ _HEARTBEAT._serialized_end=8677
+ _NODEREMOTEHARDWAREPIN._serialized_start=8679
+ _NODEREMOTEHARDWAREPIN._serialized_end=8773
+ _CHUNKEDPAYLOAD._serialized_start=8775
+ _CHUNKEDPAYLOAD._serialized_end=8876
+ _RESEND_CHUNKS._serialized_start=8878
+ _RESEND_CHUNKS._serialized_end=8909
+ _CHUNKEDPAYLOADRESPONSE._serialized_start=8912
+ _CHUNKEDPAYLOADRESPONSE._serialized_end=9091
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/mesh_pb2.pyi b/meshtastic/protobuf/mesh_pb2.pyi
index 6578763..84d09ad 100644
--- a/meshtastic/protobuf/mesh_pb2.pyi
+++ b/meshtastic/protobuf/mesh_pb2.pyi
@@ -1,3796 +1,875 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
-
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.internal.containers
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import meshtastic.protobuf.channel_pb2
-import meshtastic.protobuf.config_pb2
-import meshtastic.protobuf.device_ui_pb2
-import meshtastic.protobuf.module_config_pb2
-import meshtastic.protobuf.portnums_pb2
-import meshtastic.protobuf.telemetry_pb2
-import meshtastic.protobuf.xmodem_pb2
-import sys
-import typing
-
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-class _HardwareModel:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _HardwareModelEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_HardwareModel.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: _HardwareModel.ValueType # 0
- """
- TODO: REPLACE
- """
- TLORA_V2: _HardwareModel.ValueType # 1
- """
- TODO: REPLACE
- """
- TLORA_V1: _HardwareModel.ValueType # 2
- """
- TODO: REPLACE
- """
- TLORA_V2_1_1P6: _HardwareModel.ValueType # 3
- """
- TODO: REPLACE
- """
- TBEAM: _HardwareModel.ValueType # 4
- """
- TODO: REPLACE
- """
- HELTEC_V2_0: _HardwareModel.ValueType # 5
- """
- The original heltec WiFi_Lora_32_V2, which had battery voltage sensing hooked to GPIO 13
- (see HELTEC_V2 for the new version).
- """
- TBEAM_V0P7: _HardwareModel.ValueType # 6
- """
- TODO: REPLACE
- """
- T_ECHO: _HardwareModel.ValueType # 7
- """
- TODO: REPLACE
- """
- TLORA_V1_1P3: _HardwareModel.ValueType # 8
- """
- TODO: REPLACE
- """
- RAK4631: _HardwareModel.ValueType # 9
- """
- TODO: REPLACE
- """
- HELTEC_V2_1: _HardwareModel.ValueType # 10
- """
- The new version of the heltec WiFi_Lora_32_V2 board that has battery sensing hooked to GPIO 37.
- Sadly they did not update anything on the silkscreen to identify this board
- """
- HELTEC_V1: _HardwareModel.ValueType # 11
- """
- Ancient heltec WiFi_Lora_32 board
- """
- LILYGO_TBEAM_S3_CORE: _HardwareModel.ValueType # 12
- """
- New T-BEAM with ESP32-S3 CPU
- """
- RAK11200: _HardwareModel.ValueType # 13
- """
- RAK WisBlock ESP32 core: https://docs.rakwireless.com/Product-Categories/WisBlock/RAK11200/Overview/
- """
- NANO_G1: _HardwareModel.ValueType # 14
- """
- B&Q Consulting Nano Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:nano
- """
- TLORA_V2_1_1P8: _HardwareModel.ValueType # 15
- """
- TODO: REPLACE
- """
- TLORA_T3_S3: _HardwareModel.ValueType # 16
- """
- TODO: REPLACE
- """
- NANO_G1_EXPLORER: _HardwareModel.ValueType # 17
- """
- B&Q Consulting Nano G1 Explorer: https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer
- """
- NANO_G2_ULTRA: _HardwareModel.ValueType # 18
- """
- B&Q Consulting Nano G2 Ultra: https://wiki.uniteng.com/en/meshtastic/nano-g2-ultra
- """
- LORA_TYPE: _HardwareModel.ValueType # 19
- """
- LoRAType device: https://loratype.org/
- """
- WIPHONE: _HardwareModel.ValueType # 20
- """
- wiphone https://www.wiphone.io/
- """
- WIO_WM1110: _HardwareModel.ValueType # 21
- """
- WIO Tracker WM1110 family from Seeed Studio. Includes wio-1110-tracker and wio-1110-sdk
- """
- RAK2560: _HardwareModel.ValueType # 22
- """
- RAK2560 Solar base station based on RAK4630
- """
- HELTEC_HRU_3601: _HardwareModel.ValueType # 23
- """
- Heltec HRU-3601: https://heltec.org/project/hru-3601/
- """
- HELTEC_WIRELESS_BRIDGE: _HardwareModel.ValueType # 24
- """
- Heltec Wireless Bridge
- """
- STATION_G1: _HardwareModel.ValueType # 25
- """
- B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station
- """
- RAK11310: _HardwareModel.ValueType # 26
- """
- RAK11310 (RP2040 + SX1262)
- """
- SENSELORA_RP2040: _HardwareModel.ValueType # 27
- """
- Makerfabs SenseLoRA Receiver (RP2040 + RFM96)
- """
- SENSELORA_S3: _HardwareModel.ValueType # 28
- """
- Makerfabs SenseLoRA Industrial Monitor (ESP32-S3 + RFM96)
- """
- CANARYONE: _HardwareModel.ValueType # 29
- """
- Canary Radio Company - CanaryOne: https://canaryradio.io/products/canaryone
- """
- RP2040_LORA: _HardwareModel.ValueType # 30
- """
- Waveshare RP2040 LoRa - https://www.waveshare.com/rp2040-lora.htm
- """
- STATION_G2: _HardwareModel.ValueType # 31
- """
- B&Q Consulting Station G2: https://wiki.uniteng.com/en/meshtastic/station-g2
- """
- LORA_RELAY_V1: _HardwareModel.ValueType # 32
- """
- ---------------------------------------------------------------------------
- Less common/prototype boards listed here (needs one more byte over the air)
- ---------------------------------------------------------------------------
- """
- NRF52840DK: _HardwareModel.ValueType # 33
- """
- TODO: REPLACE
- """
- PPR: _HardwareModel.ValueType # 34
- """
- TODO: REPLACE
- """
- GENIEBLOCKS: _HardwareModel.ValueType # 35
- """
- TODO: REPLACE
- """
- NRF52_UNKNOWN: _HardwareModel.ValueType # 36
- """
- TODO: REPLACE
- """
- PORTDUINO: _HardwareModel.ValueType # 37
- """
- TODO: REPLACE
- """
- ANDROID_SIM: _HardwareModel.ValueType # 38
- """
- The simulator built into the android app
- """
- DIY_V1: _HardwareModel.ValueType # 39
- """
- Custom DIY device based on @NanoVHF schematics: https://github.com/NanoVHF/Meshtastic-DIY/tree/main/Schematics
- """
- NRF52840_PCA10059: _HardwareModel.ValueType # 40
- """
- nRF52840 Dongle : https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle/
- """
- DR_DEV: _HardwareModel.ValueType # 41
- """
- Custom Disaster Radio esp32 v3 device https://github.com/sudomesh/disaster-radio/tree/master/hardware/board_esp32_v3
- """
- M5STACK: _HardwareModel.ValueType # 42
- """
- M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
- """
- HELTEC_V3: _HardwareModel.ValueType # 43
- """
- New Heltec LoRA32 with ESP32-S3 CPU
- """
- HELTEC_WSL_V3: _HardwareModel.ValueType # 44
- """
- New Heltec Wireless Stick Lite with ESP32-S3 CPU
- """
- BETAFPV_2400_TX: _HardwareModel.ValueType # 45
- """
- New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU
- """
- BETAFPV_900_NANO_TX: _HardwareModel.ValueType # 46
- """
- BetaFPV ExpressLRS "Nano" TX Module 900MHz with ESP32 CPU
- """
- RPI_PICO: _HardwareModel.ValueType # 47
- """
- Raspberry Pi Pico (W) with Waveshare SX1262 LoRa Node Module
- """
- HELTEC_WIRELESS_TRACKER: _HardwareModel.ValueType # 48
- """
- Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
- Newer V1.1, version is written on the PCB near the display.
- """
- HELTEC_WIRELESS_PAPER: _HardwareModel.ValueType # 49
- """
- Heltec Wireless Paper with ESP32-S3 CPU and E-Ink display
- """
- T_DECK: _HardwareModel.ValueType # 50
- """
- LilyGo T-Deck with ESP32-S3 CPU, Keyboard and IPS display
- """
- T_WATCH_S3: _HardwareModel.ValueType # 51
- """
- LilyGo T-Watch S3 with ESP32-S3 CPU and IPS display
- """
- PICOMPUTER_S3: _HardwareModel.ValueType # 52
- """
- Bobricius Picomputer with ESP32-S3 CPU, Keyboard and IPS display
- """
- HELTEC_HT62: _HardwareModel.ValueType # 53
- """
- Heltec HT-CT62 with ESP32-C3 CPU and SX1262 LoRa
- """
- EBYTE_ESP32_S3: _HardwareModel.ValueType # 54
- """
- EBYTE SPI LoRa module and ESP32-S3
- """
- ESP32_S3_PICO: _HardwareModel.ValueType # 55
- """
- Waveshare ESP32-S3-PICO with PICO LoRa HAT and 2.9inch e-Ink
- """
- CHATTER_2: _HardwareModel.ValueType # 56
- """
- CircuitMess Chatter 2 LLCC68 Lora Module and ESP32 Wroom
- Lora module can be swapped out for a Heltec RA-62 which is "almost" pin compatible
- with one cut and one jumper Meshtastic works
- """
- HELTEC_WIRELESS_PAPER_V1_0: _HardwareModel.ValueType # 57
- """
- Heltec Wireless Paper, With ESP32-S3 CPU and E-Ink display
- Older "V1.0" Variant, has no "version sticker"
- E-Ink model is DEPG0213BNS800
- Tab on the screen protector is RED
- Flex connector marking is FPC-7528B
- """
- HELTEC_WIRELESS_TRACKER_V1_0: _HardwareModel.ValueType # 58
- """
- Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
- Older "V1.0" Variant
- """
- UNPHONE: _HardwareModel.ValueType # 59
- """
- unPhone with ESP32-S3, TFT touchscreen, LSM6DS3TR-C accelerometer and gyroscope
- """
- TD_LORAC: _HardwareModel.ValueType # 60
- """
- Teledatics TD-LORAC NRF52840 based M.2 LoRA module
- Compatible with the TD-WRLS development board
- """
- CDEBYTE_EORA_S3: _HardwareModel.ValueType # 61
- """
- CDEBYTE EoRa-S3 board using their own MM modules, clone of LILYGO T3S3
- """
- TWC_MESH_V4: _HardwareModel.ValueType # 62
- """
- TWC_MESH_V4
- Adafruit NRF52840 feather express with SX1262, SSD1306 OLED and NEO6M GPS
- """
- NRF52_PROMICRO_DIY: _HardwareModel.ValueType # 63
- """
- NRF52_PROMICRO_DIY
- Promicro NRF52840 with SX1262/LLCC68, SSD1306 OLED and NEO6M GPS
- """
- RADIOMASTER_900_BANDIT_NANO: _HardwareModel.ValueType # 64
- """
- RadioMaster 900 Bandit Nano, https://www.radiomasterrc.com/products/bandit-nano-expresslrs-rf-module
- ESP32-D0WDQ6 With SX1276/SKY66122, SSD1306 OLED and No GPS
- """
- HELTEC_CAPSULE_SENSOR_V3: _HardwareModel.ValueType # 65
- """
- Heltec Capsule Sensor V3 with ESP32-S3 CPU, Portable LoRa device that can replace GNSS modules or sensors
- """
- HELTEC_VISION_MASTER_T190: _HardwareModel.ValueType # 66
- """
- Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display
- """
- HELTEC_VISION_MASTER_E213: _HardwareModel.ValueType # 67
- """
- Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display
- """
- HELTEC_VISION_MASTER_E290: _HardwareModel.ValueType # 68
- """
- Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display
- """
- HELTEC_MESH_NODE_T114: _HardwareModel.ValueType # 69
- """
- Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design,
- specifically adapted for the Meshtatic project
- """
- SENSECAP_INDICATOR: _HardwareModel.ValueType # 70
- """
- Sensecap Indicator from Seeed Studio. ESP32-S3 device with TFT and RP2040 coprocessor
- """
- TRACKER_T1000_E: _HardwareModel.ValueType # 71
- """
- Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors.
- """
- RAK3172: _HardwareModel.ValueType # 72
- """
- RAK3172 STM32WLE5 Module (https://store.rakwireless.com/products/wisduo-lpwan-module-rak3172)
- """
- WIO_E5: _HardwareModel.ValueType # 73
- """
- Seeed Studio Wio-E5 (either mini or Dev kit) using STM32WL chip.
- """
- RADIOMASTER_900_BANDIT: _HardwareModel.ValueType # 74
- """
- RadioMaster 900 Bandit, https://www.radiomasterrc.com/products/bandit-expresslrs-rf-module
- SSD1306 OLED and No GPS
- """
- ME25LS01_4Y10TD: _HardwareModel.ValueType # 75
- """
- Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins.
- """
- RP2040_FEATHER_RFM95: _HardwareModel.ValueType # 76
- """
- RP2040_FEATHER_RFM95
- Adafruit Feather RP2040 with RFM95 LoRa Radio RFM95 with SX1272, SSD1306 OLED
- https://www.adafruit.com/product/5714
- https://www.adafruit.com/product/326
- https://www.adafruit.com/product/938
- ^^^ short A0 to switch to I2C address 0x3C
- """
- M5STACK_COREBASIC: _HardwareModel.ValueType # 77
- """M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/"""
- M5STACK_CORE2: _HardwareModel.ValueType # 78
- RPI_PICO2: _HardwareModel.ValueType # 79
- """Pico2 with Waveshare Hat, same as Pico"""
- M5STACK_CORES3: _HardwareModel.ValueType # 80
- """M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/"""
- SEEED_XIAO_S3: _HardwareModel.ValueType # 81
- """Seeed XIAO S3 DK"""
- MS24SF1: _HardwareModel.ValueType # 82
- """
- Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1
- """
- TLORA_C6: _HardwareModel.ValueType # 83
- """
- Lilygo TLora-C6 with the new ESP32-C6 MCU
- """
- WISMESH_TAP: _HardwareModel.ValueType # 84
- """
- WisMesh Tap
- RAK-4631 w/ TFT in injection modled case
- """
- ROUTASTIC: _HardwareModel.ValueType # 85
- """
- Similar to PORTDUINO but used by Routastic devices, this is not any
- particular device and does not run Meshtastic's code but supports
- the same frame format.
- Runs on linux, see https://github.com/Jorropo/routastic
- """
- MESH_TAB: _HardwareModel.ValueType # 86
- """
- Mesh-Tab, esp32 based
- https://github.com/valzzu/Mesh-Tab
- """
- MESHLINK: _HardwareModel.ValueType # 87
- """
- MeshLink board developed by LoraItalia. NRF52840, eByte E22900M22S (Will also come with other frequencies), 25w MPPT solar charger (5v,12v,18v selectable), support for gps, buzzer, oled or e-ink display, 10 gpios, hardware watchdog
- https://www.loraitalia.it
- """
- XIAO_NRF52_KIT: _HardwareModel.ValueType # 88
- """
- Seeed XIAO nRF52840 + Wio SX1262 kit
- """
- THINKNODE_M1: _HardwareModel.ValueType # 89
- """
- Elecrow ThinkNode M1 & M2
- https://www.elecrow.com/wiki/ThinkNode-M1_Transceiver_Device(Meshtastic)_Power_By_nRF52840.html
- https://www.elecrow.com/wiki/ThinkNode-M2_Transceiver_Device(Meshtastic)_Power_By_NRF52840.html (this actually uses ESP32-S3)
- """
- THINKNODE_M2: _HardwareModel.ValueType # 90
- T_ETH_ELITE: _HardwareModel.ValueType # 91
- """
- Lilygo T-ETH-Elite
- """
- HELTEC_SENSOR_HUB: _HardwareModel.ValueType # 92
- """
- Heltec HRI-3621 industrial probe
- """
- RESERVED_FRIED_CHICKEN: _HardwareModel.ValueType # 93
- """
- Reserved Fried Chicken ID for future use
- """
- HELTEC_MESH_POCKET: _HardwareModel.ValueType # 94
- """
- Heltec Magnetic Power Bank with Meshtastic compatible
- """
- SEEED_SOLAR_NODE: _HardwareModel.ValueType # 95
- """
- Seeed Solar Node
- """
- NOMADSTAR_METEOR_PRO: _HardwareModel.ValueType # 96
- """
- NomadStar Meteor Pro https://nomadstar.ch/
- """
- CROWPANEL: _HardwareModel.ValueType # 97
- """
- Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin
- """
- LINK_32: _HardwareModel.ValueType # 98
- """
- Lilygo LINK32 board with sensors
- """
- SEEED_WIO_TRACKER_L1: _HardwareModel.ValueType # 99
- """
- Seeed Tracker L1
- """
- SEEED_WIO_TRACKER_L1_EINK: _HardwareModel.ValueType # 100
- """
- Seeed Tracker L1 EINK driver
- """
- MUZI_R1_NEO: _HardwareModel.ValueType # 101
- """
- Muzi Works R1 Neo
- """
- T_DECK_PRO: _HardwareModel.ValueType # 102
- """
- Lilygo T-Deck Pro
- """
- T_LORA_PAGER: _HardwareModel.ValueType # 103
- """
- Lilygo TLora Pager
- """
- M5STACK_RESERVED: _HardwareModel.ValueType # 104
- """
- M5Stack Reserved
- 0x68
- """
- WISMESH_TAG: _HardwareModel.ValueType # 105
- """
- RAKwireless WisMesh Tag
- """
- RAK3312: _HardwareModel.ValueType # 106
- """
- RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/
- """
- THINKNODE_M5: _HardwareModel.ValueType # 107
- """
- Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html
- """
- HELTEC_MESH_SOLAR: _HardwareModel.ValueType # 108
- """
- MeshSolar is an integrated power management and communication solution designed for outdoor low-power devices.
- https://heltec.org/project/meshsolar/
- """
- T_ECHO_LITE: _HardwareModel.ValueType # 109
- """
- Lilygo T-Echo Lite
- """
- HELTEC_V4: _HardwareModel.ValueType # 110
- """
- New Heltec LoRA32 with ESP32-S3 CPU
- """
- M5STACK_C6L: _HardwareModel.ValueType # 111
- """
- M5Stack C6L
- """
- M5STACK_CARDPUTER_ADV: _HardwareModel.ValueType # 112
- """
- M5Stack Cardputer Adv
- """
- HELTEC_WIRELESS_TRACKER_V2: _HardwareModel.ValueType # 113
- """
- ESP32S3 main controller with GPS and TFT screen.
- """
- T_WATCH_ULTRA: _HardwareModel.ValueType # 114
- """
- LilyGo T-Watch Ultra
- """
- THINKNODE_M3: _HardwareModel.ValueType # 115
- """
- Elecrow ThinkNode M3
- """
- WISMESH_TAP_V2: _HardwareModel.ValueType # 116
- """
- RAK WISMESH_TAP_V2 with ESP32-S3 CPU
- """
- RAK3401: _HardwareModel.ValueType # 117
- """
- RAK3401
- """
- PRIVATE_HW: _HardwareModel.ValueType # 255
- """
- ------------------------------------------------------------------------------------------------------------------------------------------
- Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
- ------------------------------------------------------------------------------------------------------------------------------------------
- """
-
-class HardwareModel(_HardwareModel, metaclass=_HardwareModelEnumTypeWrapper):
- """
- Note: these enum names must EXACTLY match the string used in the device
- bin/build-all.sh script.
- Because they will be used to find firmware filenames in the android app for OTA updates.
- To match the old style filenames, _ is converted to -, p is converted to .
- """
-
-UNSET: HardwareModel.ValueType # 0
-"""
-TODO: REPLACE
-"""
-TLORA_V2: HardwareModel.ValueType # 1
-"""
-TODO: REPLACE
-"""
-TLORA_V1: HardwareModel.ValueType # 2
-"""
-TODO: REPLACE
-"""
-TLORA_V2_1_1P6: HardwareModel.ValueType # 3
-"""
-TODO: REPLACE
-"""
-TBEAM: HardwareModel.ValueType # 4
-"""
-TODO: REPLACE
-"""
-HELTEC_V2_0: HardwareModel.ValueType # 5
-"""
-The original heltec WiFi_Lora_32_V2, which had battery voltage sensing hooked to GPIO 13
-(see HELTEC_V2 for the new version).
-"""
-TBEAM_V0P7: HardwareModel.ValueType # 6
-"""
-TODO: REPLACE
-"""
-T_ECHO: HardwareModel.ValueType # 7
-"""
-TODO: REPLACE
-"""
-TLORA_V1_1P3: HardwareModel.ValueType # 8
-"""
-TODO: REPLACE
-"""
-RAK4631: HardwareModel.ValueType # 9
-"""
-TODO: REPLACE
-"""
-HELTEC_V2_1: HardwareModel.ValueType # 10
-"""
-The new version of the heltec WiFi_Lora_32_V2 board that has battery sensing hooked to GPIO 37.
-Sadly they did not update anything on the silkscreen to identify this board
-"""
-HELTEC_V1: HardwareModel.ValueType # 11
-"""
-Ancient heltec WiFi_Lora_32 board
-"""
-LILYGO_TBEAM_S3_CORE: HardwareModel.ValueType # 12
-"""
-New T-BEAM with ESP32-S3 CPU
-"""
-RAK11200: HardwareModel.ValueType # 13
-"""
-RAK WisBlock ESP32 core: https://docs.rakwireless.com/Product-Categories/WisBlock/RAK11200/Overview/
-"""
-NANO_G1: HardwareModel.ValueType # 14
-"""
-B&Q Consulting Nano Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:nano
-"""
-TLORA_V2_1_1P8: HardwareModel.ValueType # 15
-"""
-TODO: REPLACE
-"""
-TLORA_T3_S3: HardwareModel.ValueType # 16
-"""
-TODO: REPLACE
-"""
-NANO_G1_EXPLORER: HardwareModel.ValueType # 17
-"""
-B&Q Consulting Nano G1 Explorer: https://wiki.uniteng.com/en/meshtastic/nano-g1-explorer
-"""
-NANO_G2_ULTRA: HardwareModel.ValueType # 18
-"""
-B&Q Consulting Nano G2 Ultra: https://wiki.uniteng.com/en/meshtastic/nano-g2-ultra
-"""
-LORA_TYPE: HardwareModel.ValueType # 19
-"""
-LoRAType device: https://loratype.org/
-"""
-WIPHONE: HardwareModel.ValueType # 20
-"""
-wiphone https://www.wiphone.io/
-"""
-WIO_WM1110: HardwareModel.ValueType # 21
-"""
-WIO Tracker WM1110 family from Seeed Studio. Includes wio-1110-tracker and wio-1110-sdk
-"""
-RAK2560: HardwareModel.ValueType # 22
-"""
-RAK2560 Solar base station based on RAK4630
-"""
-HELTEC_HRU_3601: HardwareModel.ValueType # 23
-"""
-Heltec HRU-3601: https://heltec.org/project/hru-3601/
-"""
-HELTEC_WIRELESS_BRIDGE: HardwareModel.ValueType # 24
-"""
-Heltec Wireless Bridge
-"""
-STATION_G1: HardwareModel.ValueType # 25
-"""
-B&Q Consulting Station Edition G1: https://uniteng.com/wiki/doku.php?id=meshtastic:station
-"""
-RAK11310: HardwareModel.ValueType # 26
-"""
-RAK11310 (RP2040 + SX1262)
-"""
-SENSELORA_RP2040: HardwareModel.ValueType # 27
-"""
-Makerfabs SenseLoRA Receiver (RP2040 + RFM96)
-"""
-SENSELORA_S3: HardwareModel.ValueType # 28
-"""
-Makerfabs SenseLoRA Industrial Monitor (ESP32-S3 + RFM96)
-"""
-CANARYONE: HardwareModel.ValueType # 29
-"""
-Canary Radio Company - CanaryOne: https://canaryradio.io/products/canaryone
-"""
-RP2040_LORA: HardwareModel.ValueType # 30
-"""
-Waveshare RP2040 LoRa - https://www.waveshare.com/rp2040-lora.htm
-"""
-STATION_G2: HardwareModel.ValueType # 31
-"""
-B&Q Consulting Station G2: https://wiki.uniteng.com/en/meshtastic/station-g2
-"""
-LORA_RELAY_V1: HardwareModel.ValueType # 32
-"""
----------------------------------------------------------------------------
-Less common/prototype boards listed here (needs one more byte over the air)
----------------------------------------------------------------------------
-"""
-NRF52840DK: HardwareModel.ValueType # 33
-"""
-TODO: REPLACE
-"""
-PPR: HardwareModel.ValueType # 34
-"""
-TODO: REPLACE
-"""
-GENIEBLOCKS: HardwareModel.ValueType # 35
-"""
-TODO: REPLACE
-"""
-NRF52_UNKNOWN: HardwareModel.ValueType # 36
-"""
-TODO: REPLACE
-"""
-PORTDUINO: HardwareModel.ValueType # 37
-"""
-TODO: REPLACE
-"""
-ANDROID_SIM: HardwareModel.ValueType # 38
-"""
-The simulator built into the android app
-"""
-DIY_V1: HardwareModel.ValueType # 39
-"""
-Custom DIY device based on @NanoVHF schematics: https://github.com/NanoVHF/Meshtastic-DIY/tree/main/Schematics
-"""
-NRF52840_PCA10059: HardwareModel.ValueType # 40
-"""
-nRF52840 Dongle : https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle/
-"""
-DR_DEV: HardwareModel.ValueType # 41
-"""
-Custom Disaster Radio esp32 v3 device https://github.com/sudomesh/disaster-radio/tree/master/hardware/board_esp32_v3
-"""
-M5STACK: HardwareModel.ValueType # 42
-"""
-M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/
-"""
-HELTEC_V3: HardwareModel.ValueType # 43
-"""
-New Heltec LoRA32 with ESP32-S3 CPU
-"""
-HELTEC_WSL_V3: HardwareModel.ValueType # 44
-"""
-New Heltec Wireless Stick Lite with ESP32-S3 CPU
-"""
-BETAFPV_2400_TX: HardwareModel.ValueType # 45
-"""
-New BETAFPV ELRS Micro TX Module 2.4G with ESP32 CPU
-"""
-BETAFPV_900_NANO_TX: HardwareModel.ValueType # 46
-"""
-BetaFPV ExpressLRS "Nano" TX Module 900MHz with ESP32 CPU
-"""
-RPI_PICO: HardwareModel.ValueType # 47
-"""
-Raspberry Pi Pico (W) with Waveshare SX1262 LoRa Node Module
-"""
-HELTEC_WIRELESS_TRACKER: HardwareModel.ValueType # 48
-"""
-Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
-Newer V1.1, version is written on the PCB near the display.
-"""
-HELTEC_WIRELESS_PAPER: HardwareModel.ValueType # 49
-"""
-Heltec Wireless Paper with ESP32-S3 CPU and E-Ink display
-"""
-T_DECK: HardwareModel.ValueType # 50
-"""
-LilyGo T-Deck with ESP32-S3 CPU, Keyboard and IPS display
-"""
-T_WATCH_S3: HardwareModel.ValueType # 51
-"""
-LilyGo T-Watch S3 with ESP32-S3 CPU and IPS display
-"""
-PICOMPUTER_S3: HardwareModel.ValueType # 52
-"""
-Bobricius Picomputer with ESP32-S3 CPU, Keyboard and IPS display
-"""
-HELTEC_HT62: HardwareModel.ValueType # 53
-"""
-Heltec HT-CT62 with ESP32-C3 CPU and SX1262 LoRa
-"""
-EBYTE_ESP32_S3: HardwareModel.ValueType # 54
-"""
-EBYTE SPI LoRa module and ESP32-S3
-"""
-ESP32_S3_PICO: HardwareModel.ValueType # 55
-"""
-Waveshare ESP32-S3-PICO with PICO LoRa HAT and 2.9inch e-Ink
-"""
-CHATTER_2: HardwareModel.ValueType # 56
-"""
-CircuitMess Chatter 2 LLCC68 Lora Module and ESP32 Wroom
-Lora module can be swapped out for a Heltec RA-62 which is "almost" pin compatible
-with one cut and one jumper Meshtastic works
-"""
-HELTEC_WIRELESS_PAPER_V1_0: HardwareModel.ValueType # 57
-"""
-Heltec Wireless Paper, With ESP32-S3 CPU and E-Ink display
-Older "V1.0" Variant, has no "version sticker"
-E-Ink model is DEPG0213BNS800
-Tab on the screen protector is RED
-Flex connector marking is FPC-7528B
-"""
-HELTEC_WIRELESS_TRACKER_V1_0: HardwareModel.ValueType # 58
-"""
-Heltec Wireless Tracker with ESP32-S3 CPU, built-in GPS, and TFT
-Older "V1.0" Variant
-"""
-UNPHONE: HardwareModel.ValueType # 59
-"""
-unPhone with ESP32-S3, TFT touchscreen, LSM6DS3TR-C accelerometer and gyroscope
-"""
-TD_LORAC: HardwareModel.ValueType # 60
-"""
-Teledatics TD-LORAC NRF52840 based M.2 LoRA module
-Compatible with the TD-WRLS development board
-"""
-CDEBYTE_EORA_S3: HardwareModel.ValueType # 61
-"""
-CDEBYTE EoRa-S3 board using their own MM modules, clone of LILYGO T3S3
-"""
-TWC_MESH_V4: HardwareModel.ValueType # 62
-"""
-TWC_MESH_V4
-Adafruit NRF52840 feather express with SX1262, SSD1306 OLED and NEO6M GPS
-"""
-NRF52_PROMICRO_DIY: HardwareModel.ValueType # 63
-"""
-NRF52_PROMICRO_DIY
-Promicro NRF52840 with SX1262/LLCC68, SSD1306 OLED and NEO6M GPS
-"""
-RADIOMASTER_900_BANDIT_NANO: HardwareModel.ValueType # 64
-"""
-RadioMaster 900 Bandit Nano, https://www.radiomasterrc.com/products/bandit-nano-expresslrs-rf-module
-ESP32-D0WDQ6 With SX1276/SKY66122, SSD1306 OLED and No GPS
-"""
-HELTEC_CAPSULE_SENSOR_V3: HardwareModel.ValueType # 65
-"""
-Heltec Capsule Sensor V3 with ESP32-S3 CPU, Portable LoRa device that can replace GNSS modules or sensors
-"""
-HELTEC_VISION_MASTER_T190: HardwareModel.ValueType # 66
-"""
-Heltec Vision Master T190 with ESP32-S3 CPU, and a 1.90 inch TFT display
-"""
-HELTEC_VISION_MASTER_E213: HardwareModel.ValueType # 67
-"""
-Heltec Vision Master E213 with ESP32-S3 CPU, and a 2.13 inch E-Ink display
-"""
-HELTEC_VISION_MASTER_E290: HardwareModel.ValueType # 68
-"""
-Heltec Vision Master E290 with ESP32-S3 CPU, and a 2.9 inch E-Ink display
-"""
-HELTEC_MESH_NODE_T114: HardwareModel.ValueType # 69
-"""
-Heltec Mesh Node T114 board with nRF52840 CPU, and a 1.14 inch TFT display, Ultimate low-power design,
-specifically adapted for the Meshtatic project
-"""
-SENSECAP_INDICATOR: HardwareModel.ValueType # 70
-"""
-Sensecap Indicator from Seeed Studio. ESP32-S3 device with TFT and RP2040 coprocessor
-"""
-TRACKER_T1000_E: HardwareModel.ValueType # 71
-"""
-Seeed studio T1000-E tracker card. NRF52840 w/ LR1110 radio, GPS, button, buzzer, and sensors.
-"""
-RAK3172: HardwareModel.ValueType # 72
-"""
-RAK3172 STM32WLE5 Module (https://store.rakwireless.com/products/wisduo-lpwan-module-rak3172)
-"""
-WIO_E5: HardwareModel.ValueType # 73
-"""
-Seeed Studio Wio-E5 (either mini or Dev kit) using STM32WL chip.
-"""
-RADIOMASTER_900_BANDIT: HardwareModel.ValueType # 74
-"""
-RadioMaster 900 Bandit, https://www.radiomasterrc.com/products/bandit-expresslrs-rf-module
-SSD1306 OLED and No GPS
-"""
-ME25LS01_4Y10TD: HardwareModel.ValueType # 75
-"""
-Minewsemi ME25LS01 (ME25LE01_V1.0). NRF52840 w/ LR1110 radio, buttons and leds and pins.
-"""
-RP2040_FEATHER_RFM95: HardwareModel.ValueType # 76
-"""
-RP2040_FEATHER_RFM95
-Adafruit Feather RP2040 with RFM95 LoRa Radio RFM95 with SX1272, SSD1306 OLED
-https://www.adafruit.com/product/5714
-https://www.adafruit.com/product/326
-https://www.adafruit.com/product/938
- ^^^ short A0 to switch to I2C address 0x3C
-"""
-M5STACK_COREBASIC: HardwareModel.ValueType # 77
-"""M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/"""
-M5STACK_CORE2: HardwareModel.ValueType # 78
-RPI_PICO2: HardwareModel.ValueType # 79
-"""Pico2 with Waveshare Hat, same as Pico"""
-M5STACK_CORES3: HardwareModel.ValueType # 80
-"""M5 esp32 based MCU modules with enclosure, TFT and LORA Shields. All Variants (Basic, Core, Fire, Core2, CoreS3, Paper) https://m5stack.com/"""
-SEEED_XIAO_S3: HardwareModel.ValueType # 81
-"""Seeed XIAO S3 DK"""
-MS24SF1: HardwareModel.ValueType # 82
-"""
-Nordic nRF52840+Semtech SX1262 LoRa BLE Combo Module. nRF52840+SX1262 MS24SF1
-"""
-TLORA_C6: HardwareModel.ValueType # 83
-"""
-Lilygo TLora-C6 with the new ESP32-C6 MCU
-"""
-WISMESH_TAP: HardwareModel.ValueType # 84
-"""
-WisMesh Tap
-RAK-4631 w/ TFT in injection modled case
-"""
-ROUTASTIC: HardwareModel.ValueType # 85
-"""
-Similar to PORTDUINO but used by Routastic devices, this is not any
-particular device and does not run Meshtastic's code but supports
-the same frame format.
-Runs on linux, see https://github.com/Jorropo/routastic
-"""
-MESH_TAB: HardwareModel.ValueType # 86
-"""
-Mesh-Tab, esp32 based
-https://github.com/valzzu/Mesh-Tab
-"""
-MESHLINK: HardwareModel.ValueType # 87
-"""
-MeshLink board developed by LoraItalia. NRF52840, eByte E22900M22S (Will also come with other frequencies), 25w MPPT solar charger (5v,12v,18v selectable), support for gps, buzzer, oled or e-ink display, 10 gpios, hardware watchdog
-https://www.loraitalia.it
-"""
-XIAO_NRF52_KIT: HardwareModel.ValueType # 88
-"""
-Seeed XIAO nRF52840 + Wio SX1262 kit
-"""
-THINKNODE_M1: HardwareModel.ValueType # 89
-"""
-Elecrow ThinkNode M1 & M2
-https://www.elecrow.com/wiki/ThinkNode-M1_Transceiver_Device(Meshtastic)_Power_By_nRF52840.html
-https://www.elecrow.com/wiki/ThinkNode-M2_Transceiver_Device(Meshtastic)_Power_By_NRF52840.html (this actually uses ESP32-S3)
-"""
-THINKNODE_M2: HardwareModel.ValueType # 90
-T_ETH_ELITE: HardwareModel.ValueType # 91
-"""
-Lilygo T-ETH-Elite
-"""
-HELTEC_SENSOR_HUB: HardwareModel.ValueType # 92
-"""
-Heltec HRI-3621 industrial probe
-"""
-RESERVED_FRIED_CHICKEN: HardwareModel.ValueType # 93
-"""
-Reserved Fried Chicken ID for future use
-"""
-HELTEC_MESH_POCKET: HardwareModel.ValueType # 94
-"""
-Heltec Magnetic Power Bank with Meshtastic compatible
-"""
-SEEED_SOLAR_NODE: HardwareModel.ValueType # 95
-"""
-Seeed Solar Node
-"""
-NOMADSTAR_METEOR_PRO: HardwareModel.ValueType # 96
-"""
-NomadStar Meteor Pro https://nomadstar.ch/
-"""
-CROWPANEL: HardwareModel.ValueType # 97
-"""
-Elecrow CrowPanel Advance models, ESP32-S3 and TFT with SX1262 radio plugin
-"""
-LINK_32: HardwareModel.ValueType # 98
-"""
-Lilygo LINK32 board with sensors
-"""
-SEEED_WIO_TRACKER_L1: HardwareModel.ValueType # 99
-"""
-Seeed Tracker L1
-"""
-SEEED_WIO_TRACKER_L1_EINK: HardwareModel.ValueType # 100
-"""
-Seeed Tracker L1 EINK driver
-"""
-MUZI_R1_NEO: HardwareModel.ValueType # 101
-"""
-Muzi Works R1 Neo
-"""
-T_DECK_PRO: HardwareModel.ValueType # 102
-"""
-Lilygo T-Deck Pro
-"""
-T_LORA_PAGER: HardwareModel.ValueType # 103
-"""
-Lilygo TLora Pager
-"""
-M5STACK_RESERVED: HardwareModel.ValueType # 104
-"""
-M5Stack Reserved
-0x68
-"""
-WISMESH_TAG: HardwareModel.ValueType # 105
-"""
-RAKwireless WisMesh Tag
-"""
-RAK3312: HardwareModel.ValueType # 106
-"""
-RAKwireless WisBlock Core RAK3312 https://docs.rakwireless.com/product-categories/wisduo/rak3112-module/overview/
-"""
-THINKNODE_M5: HardwareModel.ValueType # 107
-"""
-Elecrow ThinkNode M5 https://www.elecrow.com/wiki/ThinkNode_M5_Meshtastic_LoRa_Signal_Transceiver_ESP32-S3.html
-"""
-HELTEC_MESH_SOLAR: HardwareModel.ValueType # 108
-"""
-MeshSolar is an integrated power management and communication solution designed for outdoor low-power devices.
-https://heltec.org/project/meshsolar/
-"""
-T_ECHO_LITE: HardwareModel.ValueType # 109
-"""
-Lilygo T-Echo Lite
-"""
-HELTEC_V4: HardwareModel.ValueType # 110
-"""
-New Heltec LoRA32 with ESP32-S3 CPU
-"""
-M5STACK_C6L: HardwareModel.ValueType # 111
-"""
-M5Stack C6L
-"""
-M5STACK_CARDPUTER_ADV: HardwareModel.ValueType # 112
-"""
-M5Stack Cardputer Adv
-"""
-HELTEC_WIRELESS_TRACKER_V2: HardwareModel.ValueType # 113
-"""
-ESP32S3 main controller with GPS and TFT screen.
-"""
-T_WATCH_ULTRA: HardwareModel.ValueType # 114
-"""
-LilyGo T-Watch Ultra
-"""
-THINKNODE_M3: HardwareModel.ValueType # 115
-"""
-Elecrow ThinkNode M3
-"""
-WISMESH_TAP_V2: HardwareModel.ValueType # 116
-"""
-RAK WISMESH_TAP_V2 with ESP32-S3 CPU
-"""
-RAK3401: HardwareModel.ValueType # 117
-"""
-RAK3401
-"""
-PRIVATE_HW: HardwareModel.ValueType # 255
-"""
-------------------------------------------------------------------------------------------------------------------------------------------
-Reserved ID For developing private Ports. These will show up in live traffic sparsely, so we can use a high number. Keep it within 8 bits.
-------------------------------------------------------------------------------------------------------------------------------------------
-"""
-global___HardwareModel = HardwareModel
-
-class _Constants:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _ConstantsEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Constants.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- ZERO: _Constants.ValueType # 0
- """
- First enum must be zero, and we are just using this enum to
- pass int constants between two very different environments
- """
- DATA_PAYLOAD_LEN: _Constants.ValueType # 233
- """
- From mesh.options
- note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte header is
- outside of this envelope
- """
-
-class Constants(_Constants, metaclass=_ConstantsEnumTypeWrapper):
- """
- Shared constants between device and phone
- """
-
-ZERO: Constants.ValueType # 0
-"""
-First enum must be zero, and we are just using this enum to
-pass int constants between two very different environments
-"""
-DATA_PAYLOAD_LEN: Constants.ValueType # 233
-"""
-From mesh.options
-note: this payload length is ONLY the bytes that are sent inside of the Data protobuf (excluding protobuf overhead). The 16 byte header is
-outside of this envelope
-"""
-global___Constants = Constants
-
-class _CriticalErrorCode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _CriticalErrorCodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_CriticalErrorCode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- NONE: _CriticalErrorCode.ValueType # 0
- """
- TODO: REPLACE
- """
- TX_WATCHDOG: _CriticalErrorCode.ValueType # 1
- """
- A software bug was detected while trying to send lora
- """
- SLEEP_ENTER_WAIT: _CriticalErrorCode.ValueType # 2
- """
- A software bug was detected on entry to sleep
- """
- NO_RADIO: _CriticalErrorCode.ValueType # 3
- """
- No Lora radio hardware could be found
- """
- UNSPECIFIED: _CriticalErrorCode.ValueType # 4
- """
- Not normally used
- """
- UBLOX_UNIT_FAILED: _CriticalErrorCode.ValueType # 5
- """
- We failed while configuring a UBlox GPS
- """
- NO_AXP192: _CriticalErrorCode.ValueType # 6
- """
- This board was expected to have a power management chip and it is missing or broken
- """
- INVALID_RADIO_SETTING: _CriticalErrorCode.ValueType # 7
- """
- The channel tried to set a radio setting which is not supported by this chipset,
- radio comms settings are now undefined.
- """
- TRANSMIT_FAILED: _CriticalErrorCode.ValueType # 8
- """
- Radio transmit hardware failure. We sent data to the radio chip, but it didn't
- reply with an interrupt.
- """
- BROWNOUT: _CriticalErrorCode.ValueType # 9
- """
- We detected that the main CPU voltage dropped below the minimum acceptable value
- """
- SX1262_FAILURE: _CriticalErrorCode.ValueType # 10
- """Selftest of SX1262 radio chip failed"""
- RADIO_SPI_BUG: _CriticalErrorCode.ValueType # 11
- """
- A (likely software but possibly hardware) failure was detected while trying to send packets.
- If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this bug
- """
- FLASH_CORRUPTION_RECOVERABLE: _CriticalErrorCode.ValueType # 12
- """
- Corruption was detected on the flash filesystem but we were able to repair things.
- If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
- """
- FLASH_CORRUPTION_UNRECOVERABLE: _CriticalErrorCode.ValueType # 13
- """
- Corruption was detected on the flash filesystem but we were unable to repair things.
- NOTE: Your node will probably need to be reconfigured the next time it reboots (it will lose the region code etc...)
- If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
- """
-
-class CriticalErrorCode(_CriticalErrorCode, metaclass=_CriticalErrorCodeEnumTypeWrapper):
- """
- Error codes for critical errors
- The device might report these fault codes on the screen.
- If you encounter a fault code, please post on the meshtastic.discourse.group
- and we'll try to help.
- """
-
-NONE: CriticalErrorCode.ValueType # 0
-"""
-TODO: REPLACE
-"""
-TX_WATCHDOG: CriticalErrorCode.ValueType # 1
-"""
-A software bug was detected while trying to send lora
-"""
-SLEEP_ENTER_WAIT: CriticalErrorCode.ValueType # 2
-"""
-A software bug was detected on entry to sleep
-"""
-NO_RADIO: CriticalErrorCode.ValueType # 3
-"""
-No Lora radio hardware could be found
-"""
-UNSPECIFIED: CriticalErrorCode.ValueType # 4
-"""
-Not normally used
-"""
-UBLOX_UNIT_FAILED: CriticalErrorCode.ValueType # 5
-"""
-We failed while configuring a UBlox GPS
-"""
-NO_AXP192: CriticalErrorCode.ValueType # 6
-"""
-This board was expected to have a power management chip and it is missing or broken
-"""
-INVALID_RADIO_SETTING: CriticalErrorCode.ValueType # 7
-"""
-The channel tried to set a radio setting which is not supported by this chipset,
-radio comms settings are now undefined.
-"""
-TRANSMIT_FAILED: CriticalErrorCode.ValueType # 8
-"""
-Radio transmit hardware failure. We sent data to the radio chip, but it didn't
-reply with an interrupt.
-"""
-BROWNOUT: CriticalErrorCode.ValueType # 9
-"""
-We detected that the main CPU voltage dropped below the minimum acceptable value
-"""
-SX1262_FAILURE: CriticalErrorCode.ValueType # 10
-"""Selftest of SX1262 radio chip failed"""
-RADIO_SPI_BUG: CriticalErrorCode.ValueType # 11
-"""
-A (likely software but possibly hardware) failure was detected while trying to send packets.
-If this occurs on your board, please post in the forum so that we can ask you to collect some information to allow fixing this bug
-"""
-FLASH_CORRUPTION_RECOVERABLE: CriticalErrorCode.ValueType # 12
-"""
-Corruption was detected on the flash filesystem but we were able to repair things.
-If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
-"""
-FLASH_CORRUPTION_UNRECOVERABLE: CriticalErrorCode.ValueType # 13
-"""
-Corruption was detected on the flash filesystem but we were unable to repair things.
-NOTE: Your node will probably need to be reconfigured the next time it reboots (it will lose the region code etc...)
-If you see this failure in the field please post in the forum because we are interested in seeing if this is occurring in the field.
-"""
-global___CriticalErrorCode = CriticalErrorCode
-
-class _FirmwareEdition:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _FirmwareEditionEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_FirmwareEdition.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- VANILLA: _FirmwareEdition.ValueType # 0
- """
- Vanilla firmware
- """
- SMART_CITIZEN: _FirmwareEdition.ValueType # 1
- """
- Firmware for use in the Smart Citizen environmental monitoring network
- """
- OPEN_SAUCE: _FirmwareEdition.ValueType # 16
- """
- Open Sauce, the maker conference held yearly in CA
- """
- DEFCON: _FirmwareEdition.ValueType # 17
- """
- DEFCON, the yearly hacker conference
- """
- BURNING_MAN: _FirmwareEdition.ValueType # 18
- """
- Burning Man, the yearly hippie gathering in the desert
- """
- HAMVENTION: _FirmwareEdition.ValueType # 19
- """
- Hamvention, the Dayton amateur radio convention
- """
- DIY_EDITION: _FirmwareEdition.ValueType # 127
- """
- Placeholder for DIY and unofficial events
- """
-
-class FirmwareEdition(_FirmwareEdition, metaclass=_FirmwareEditionEnumTypeWrapper):
- """
- Enum to indicate to clients whether this firmware is a special firmware build, like an event.
- The first 16 values are reserved for non-event special firmwares, like the Smart Citizen use case.
- """
-
-VANILLA: FirmwareEdition.ValueType # 0
-"""
-Vanilla firmware
-"""
-SMART_CITIZEN: FirmwareEdition.ValueType # 1
-"""
-Firmware for use in the Smart Citizen environmental monitoring network
-"""
-OPEN_SAUCE: FirmwareEdition.ValueType # 16
-"""
-Open Sauce, the maker conference held yearly in CA
-"""
-DEFCON: FirmwareEdition.ValueType # 17
-"""
-DEFCON, the yearly hacker conference
-"""
-BURNING_MAN: FirmwareEdition.ValueType # 18
-"""
-Burning Man, the yearly hippie gathering in the desert
-"""
-HAMVENTION: FirmwareEdition.ValueType # 19
-"""
-Hamvention, the Dayton amateur radio convention
-"""
-DIY_EDITION: FirmwareEdition.ValueType # 127
-"""
-Placeholder for DIY and unofficial events
-"""
-global___FirmwareEdition = FirmwareEdition
-
-class _ExcludedModules:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _ExcludedModulesEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ExcludedModules.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- EXCLUDED_NONE: _ExcludedModules.ValueType # 0
- """
- Default value of 0 indicates no modules are excluded.
- """
- MQTT_CONFIG: _ExcludedModules.ValueType # 1
- """
- MQTT module
- """
- SERIAL_CONFIG: _ExcludedModules.ValueType # 2
- """
- Serial module
- """
- EXTNOTIF_CONFIG: _ExcludedModules.ValueType # 4
- """
- External Notification module
- """
- STOREFORWARD_CONFIG: _ExcludedModules.ValueType # 8
- """
- Store and Forward module
- """
- RANGETEST_CONFIG: _ExcludedModules.ValueType # 16
- """
- Range Test module
- """
- TELEMETRY_CONFIG: _ExcludedModules.ValueType # 32
- """
- Telemetry module
- """
- CANNEDMSG_CONFIG: _ExcludedModules.ValueType # 64
- """
- Canned Message module
- """
- AUDIO_CONFIG: _ExcludedModules.ValueType # 128
- """
- Audio module
- """
- REMOTEHARDWARE_CONFIG: _ExcludedModules.ValueType # 256
- """
- Remote Hardware module
- """
- NEIGHBORINFO_CONFIG: _ExcludedModules.ValueType # 512
- """
- Neighbor Info module
- """
- AMBIENTLIGHTING_CONFIG: _ExcludedModules.ValueType # 1024
- """
- Ambient Lighting module
- """
- DETECTIONSENSOR_CONFIG: _ExcludedModules.ValueType # 2048
- """
- Detection Sensor module
- """
- PAXCOUNTER_CONFIG: _ExcludedModules.ValueType # 4096
- """
- Paxcounter module
- """
- BLUETOOTH_CONFIG: _ExcludedModules.ValueType # 8192
- """
- Bluetooth config (not technically a module, but used to indicate bluetooth capabilities)
- """
- NETWORK_CONFIG: _ExcludedModules.ValueType # 16384
- """
- Network config (not technically a module, but used to indicate network capabilities)
- """
-
-class ExcludedModules(_ExcludedModules, metaclass=_ExcludedModulesEnumTypeWrapper):
- """
- Enum for modules excluded from a device's configuration.
- Each value represents a ModuleConfigType that can be toggled as excluded
- by setting its corresponding bit in the `excluded_modules` bitmask field.
- """
-
-EXCLUDED_NONE: ExcludedModules.ValueType # 0
-"""
-Default value of 0 indicates no modules are excluded.
-"""
-MQTT_CONFIG: ExcludedModules.ValueType # 1
-"""
-MQTT module
-"""
-SERIAL_CONFIG: ExcludedModules.ValueType # 2
-"""
-Serial module
-"""
-EXTNOTIF_CONFIG: ExcludedModules.ValueType # 4
-"""
-External Notification module
-"""
-STOREFORWARD_CONFIG: ExcludedModules.ValueType # 8
-"""
-Store and Forward module
-"""
-RANGETEST_CONFIG: ExcludedModules.ValueType # 16
-"""
-Range Test module
-"""
-TELEMETRY_CONFIG: ExcludedModules.ValueType # 32
-"""
-Telemetry module
-"""
-CANNEDMSG_CONFIG: ExcludedModules.ValueType # 64
-"""
-Canned Message module
-"""
-AUDIO_CONFIG: ExcludedModules.ValueType # 128
-"""
-Audio module
-"""
-REMOTEHARDWARE_CONFIG: ExcludedModules.ValueType # 256
-"""
-Remote Hardware module
-"""
-NEIGHBORINFO_CONFIG: ExcludedModules.ValueType # 512
-"""
-Neighbor Info module
-"""
-AMBIENTLIGHTING_CONFIG: ExcludedModules.ValueType # 1024
-"""
-Ambient Lighting module
-"""
-DETECTIONSENSOR_CONFIG: ExcludedModules.ValueType # 2048
-"""
-Detection Sensor module
-"""
-PAXCOUNTER_CONFIG: ExcludedModules.ValueType # 4096
-"""
-Paxcounter module
-"""
-BLUETOOTH_CONFIG: ExcludedModules.ValueType # 8192
-"""
-Bluetooth config (not technically a module, but used to indicate bluetooth capabilities)
-"""
-NETWORK_CONFIG: ExcludedModules.ValueType # 16384
-"""
-Network config (not technically a module, but used to indicate network capabilities)
-"""
-global___ExcludedModules = ExcludedModules
-
-@typing.final
-class Position(google.protobuf.message.Message):
- """
- A GPS Position
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _LocSource:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _LocSourceEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Position._LocSource.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- LOC_UNSET: Position._LocSource.ValueType # 0
- """
- TODO: REPLACE
- """
- LOC_MANUAL: Position._LocSource.ValueType # 1
- """
- TODO: REPLACE
- """
- LOC_INTERNAL: Position._LocSource.ValueType # 2
- """
- TODO: REPLACE
- """
- LOC_EXTERNAL: Position._LocSource.ValueType # 3
- """
- TODO: REPLACE
- """
-
- class LocSource(_LocSource, metaclass=_LocSourceEnumTypeWrapper):
- """
- How the location was acquired: manual, onboard GPS, external (EUD) GPS
- """
-
- LOC_UNSET: Position.LocSource.ValueType # 0
- """
- TODO: REPLACE
- """
- LOC_MANUAL: Position.LocSource.ValueType # 1
- """
- TODO: REPLACE
- """
- LOC_INTERNAL: Position.LocSource.ValueType # 2
- """
- TODO: REPLACE
- """
- LOC_EXTERNAL: Position.LocSource.ValueType # 3
- """
- TODO: REPLACE
- """
-
- class _AltSource:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _AltSourceEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Position._AltSource.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- ALT_UNSET: Position._AltSource.ValueType # 0
- """
- TODO: REPLACE
- """
- ALT_MANUAL: Position._AltSource.ValueType # 1
- """
- TODO: REPLACE
- """
- ALT_INTERNAL: Position._AltSource.ValueType # 2
- """
- TODO: REPLACE
- """
- ALT_EXTERNAL: Position._AltSource.ValueType # 3
- """
- TODO: REPLACE
- """
- ALT_BAROMETRIC: Position._AltSource.ValueType # 4
- """
- TODO: REPLACE
- """
-
- class AltSource(_AltSource, metaclass=_AltSourceEnumTypeWrapper):
- """
- How the altitude was acquired: manual, GPS int/ext, etc
- Default: same as location_source if present
- """
-
- ALT_UNSET: Position.AltSource.ValueType # 0
- """
- TODO: REPLACE
- """
- ALT_MANUAL: Position.AltSource.ValueType # 1
- """
- TODO: REPLACE
- """
- ALT_INTERNAL: Position.AltSource.ValueType # 2
- """
- TODO: REPLACE
- """
- ALT_EXTERNAL: Position.AltSource.ValueType # 3
- """
- TODO: REPLACE
- """
- ALT_BAROMETRIC: Position.AltSource.ValueType # 4
- """
- TODO: REPLACE
- """
-
- LATITUDE_I_FIELD_NUMBER: builtins.int
- LONGITUDE_I_FIELD_NUMBER: builtins.int
- ALTITUDE_FIELD_NUMBER: builtins.int
- TIME_FIELD_NUMBER: builtins.int
- LOCATION_SOURCE_FIELD_NUMBER: builtins.int
- ALTITUDE_SOURCE_FIELD_NUMBER: builtins.int
- TIMESTAMP_FIELD_NUMBER: builtins.int
- TIMESTAMP_MILLIS_ADJUST_FIELD_NUMBER: builtins.int
- ALTITUDE_HAE_FIELD_NUMBER: builtins.int
- ALTITUDE_GEOIDAL_SEPARATION_FIELD_NUMBER: builtins.int
- PDOP_FIELD_NUMBER: builtins.int
- HDOP_FIELD_NUMBER: builtins.int
- VDOP_FIELD_NUMBER: builtins.int
- GPS_ACCURACY_FIELD_NUMBER: builtins.int
- GROUND_SPEED_FIELD_NUMBER: builtins.int
- GROUND_TRACK_FIELD_NUMBER: builtins.int
- FIX_QUALITY_FIELD_NUMBER: builtins.int
- FIX_TYPE_FIELD_NUMBER: builtins.int
- SATS_IN_VIEW_FIELD_NUMBER: builtins.int
- SENSOR_ID_FIELD_NUMBER: builtins.int
- NEXT_UPDATE_FIELD_NUMBER: builtins.int
- SEQ_NUMBER_FIELD_NUMBER: builtins.int
- PRECISION_BITS_FIELD_NUMBER: builtins.int
- latitude_i: builtins.int
- """
- The new preferred location encoding, multiply by 1e-7 to get degrees
- in floating point
- """
- longitude_i: builtins.int
- """
- TODO: REPLACE
- """
- altitude: builtins.int
- """
- In meters above MSL (but see issue #359)
- """
- time: builtins.int
- """
- This is usually not sent over the mesh (to save space), but it is sent
- from the phone so that the local device can set its time if it is sent over
- the mesh (because there are devices on the mesh without GPS or RTC).
- seconds since 1970
- """
- location_source: global___Position.LocSource.ValueType
- """
- TODO: REPLACE
- """
- altitude_source: global___Position.AltSource.ValueType
- """
- TODO: REPLACE
- """
- timestamp: builtins.int
- """
- Positional timestamp (actual timestamp of GPS solution) in integer epoch seconds
- """
- timestamp_millis_adjust: builtins.int
- """
- Pos. timestamp milliseconds adjustment (rarely available or required)
- """
- altitude_hae: builtins.int
- """
- HAE altitude in meters - can be used instead of MSL altitude
- """
- altitude_geoidal_separation: builtins.int
- """
- Geoidal separation in meters
- """
- PDOP: builtins.int
- """
- Horizontal, Vertical and Position Dilution of Precision, in 1/100 units
- - PDOP is sufficient for most cases
- - for higher precision scenarios, HDOP and VDOP can be used instead,
- in which case PDOP becomes redundant (PDOP=sqrt(HDOP^2 + VDOP^2))
- TODO: REMOVE/INTEGRATE
- """
- HDOP: builtins.int
- """
- TODO: REPLACE
- """
- VDOP: builtins.int
- """
- TODO: REPLACE
- """
- gps_accuracy: builtins.int
- """
- GPS accuracy (a hardware specific constant) in mm
- multiplied with DOP to calculate positional accuracy
- Default: "'bout three meters-ish" :)
- """
- ground_speed: builtins.int
- """
- Ground speed in m/s and True North TRACK in 1/100 degrees
- Clarification of terms:
- - "track" is the direction of motion (measured in horizontal plane)
- - "heading" is where the fuselage points (measured in horizontal plane)
- - "yaw" indicates a relative rotation about the vertical axis
- TODO: REMOVE/INTEGRATE
- """
- ground_track: builtins.int
- """
- TODO: REPLACE
- """
- fix_quality: builtins.int
- """
- GPS fix quality (from NMEA GxGGA statement or similar)
- """
- fix_type: builtins.int
- """
- GPS fix type 2D/3D (from NMEA GxGSA statement)
- """
- sats_in_view: builtins.int
- """
- GPS "Satellites in View" number
- """
- sensor_id: builtins.int
- """
- Sensor ID - in case multiple positioning sensors are being used
- """
- next_update: builtins.int
- """
- Estimated/expected time (in seconds) until next update:
- - if we update at fixed intervals of X seconds, use X
- - if we update at dynamic intervals (based on relative movement etc),
- but "AT LEAST every Y seconds", use Y
- """
- seq_number: builtins.int
- """
- A sequence number, incremented with each Position message to help
- detect lost updates if needed
- """
- precision_bits: builtins.int
- """
- Indicates the bits of precision set by the sending node
- """
- def __init__(
- self,
- *,
- latitude_i: builtins.int | None = ...,
- longitude_i: builtins.int | None = ...,
- altitude: builtins.int | None = ...,
- time: builtins.int = ...,
- location_source: global___Position.LocSource.ValueType = ...,
- altitude_source: global___Position.AltSource.ValueType = ...,
- timestamp: builtins.int = ...,
- timestamp_millis_adjust: builtins.int = ...,
- altitude_hae: builtins.int | None = ...,
- altitude_geoidal_separation: builtins.int | None = ...,
- PDOP: builtins.int = ...,
- HDOP: builtins.int = ...,
- VDOP: builtins.int = ...,
- gps_accuracy: builtins.int = ...,
- ground_speed: builtins.int | None = ...,
- ground_track: builtins.int | None = ...,
- fix_quality: builtins.int = ...,
- fix_type: builtins.int = ...,
- sats_in_view: builtins.int = ...,
- sensor_id: builtins.int = ...,
- next_update: builtins.int = ...,
- seq_number: builtins.int = ...,
- precision_bits: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_altitude", b"_altitude", "_altitude_geoidal_separation", b"_altitude_geoidal_separation", "_altitude_hae", b"_altitude_hae", "_ground_speed", b"_ground_speed", "_ground_track", b"_ground_track", "_latitude_i", b"_latitude_i", "_longitude_i", b"_longitude_i", "altitude", b"altitude", "altitude_geoidal_separation", b"altitude_geoidal_separation", "altitude_hae", b"altitude_hae", "ground_speed", b"ground_speed", "ground_track", b"ground_track", "latitude_i", b"latitude_i", "longitude_i", b"longitude_i"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["HDOP", b"HDOP", "PDOP", b"PDOP", "VDOP", b"VDOP", "_altitude", b"_altitude", "_altitude_geoidal_separation", b"_altitude_geoidal_separation", "_altitude_hae", b"_altitude_hae", "_ground_speed", b"_ground_speed", "_ground_track", b"_ground_track", "_latitude_i", b"_latitude_i", "_longitude_i", b"_longitude_i", "altitude", b"altitude", "altitude_geoidal_separation", b"altitude_geoidal_separation", "altitude_hae", b"altitude_hae", "altitude_source", b"altitude_source", "fix_quality", b"fix_quality", "fix_type", b"fix_type", "gps_accuracy", b"gps_accuracy", "ground_speed", b"ground_speed", "ground_track", b"ground_track", "latitude_i", b"latitude_i", "location_source", b"location_source", "longitude_i", b"longitude_i", "next_update", b"next_update", "precision_bits", b"precision_bits", "sats_in_view", b"sats_in_view", "sensor_id", b"sensor_id", "seq_number", b"seq_number", "time", b"time", "timestamp", b"timestamp", "timestamp_millis_adjust", b"timestamp_millis_adjust"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_altitude", b"_altitude"]) -> typing.Literal["altitude"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_altitude_geoidal_separation", b"_altitude_geoidal_separation"]) -> typing.Literal["altitude_geoidal_separation"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_altitude_hae", b"_altitude_hae"]) -> typing.Literal["altitude_hae"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ground_speed", b"_ground_speed"]) -> typing.Literal["ground_speed"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ground_track", b"_ground_track"]) -> typing.Literal["ground_track"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_latitude_i", b"_latitude_i"]) -> typing.Literal["latitude_i"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_longitude_i", b"_longitude_i"]) -> typing.Literal["longitude_i"] | None: ...
-
-global___Position = Position
-
-@typing.final
-class User(google.protobuf.message.Message):
- """
- Broadcast when a newly powered mesh node wants to find a node num it can use
- Sent from the phone over bluetooth to set the user id for the owner of this node.
- Also sent from nodes to each other when a new node signs on (so all clients can have this info)
- The algorithm is as follows:
- when a node starts up, it broadcasts their user and the normal flow is for all
- other nodes to reply with their User as well (so the new node can build its nodedb)
- If a node ever receives a User (not just the first broadcast) message where
- the sender node number equals our node number, that indicates a collision has
- occurred and the following steps should happen:
- If the receiving node (that was already in the mesh)'s macaddr is LOWER than the
- new User who just tried to sign in: it gets to keep its nodenum.
- We send a broadcast message of OUR User (we use a broadcast so that the other node can
- receive our message, considering we have the same id - it also serves to let
- observers correct their nodedb) - this case is rare so it should be okay.
- If any node receives a User where the macaddr is GTE than their local macaddr,
- they have been vetoed and should pick a new random nodenum (filtering against
- whatever it knows about the nodedb) and rebroadcast their User.
- A few nodenums are reserved and will never be requested:
- 0xff - broadcast
- 0 through 3 - for future use
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ID_FIELD_NUMBER: builtins.int
- LONG_NAME_FIELD_NUMBER: builtins.int
- SHORT_NAME_FIELD_NUMBER: builtins.int
- MACADDR_FIELD_NUMBER: builtins.int
- HW_MODEL_FIELD_NUMBER: builtins.int
- IS_LICENSED_FIELD_NUMBER: builtins.int
- ROLE_FIELD_NUMBER: builtins.int
- PUBLIC_KEY_FIELD_NUMBER: builtins.int
- IS_UNMESSAGABLE_FIELD_NUMBER: builtins.int
- id: builtins.str
- """
- A globally unique ID string for this user.
- In the case of Signal that would mean +16504442323, for the default macaddr derived id it would be !<8 hexidecimal bytes>.
- Note: app developers are encouraged to also use the following standard
- node IDs "^all" (for broadcast), "^local" (for the locally connected node)
- """
- long_name: builtins.str
- """
- A full name for this user, i.e. "Kevin Hester"
- """
- short_name: builtins.str
- """
- A VERY short name, ideally two characters.
- Suitable for a tiny OLED screen
- """
- macaddr: builtins.bytes
- """
- Deprecated in Meshtastic 2.1.x
- This is the addr of the radio.
- Not populated by the phone, but added by the esp32 when broadcasting
- """
- hw_model: global___HardwareModel.ValueType
- """
- TBEAM, HELTEC, etc...
- Starting in 1.2.11 moved to hw_model enum in the NodeInfo object.
- Apps will still need the string here for older builds
- (so OTA update can find the right image), but if the enum is available it will be used instead.
- """
- is_licensed: builtins.bool
- """
- In some regions Ham radio operators have different bandwidth limitations than others.
- If this user is a licensed operator, set this flag.
- Also, "long_name" should be their licence number.
- """
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType
- """
- Indicates that the user's role in the mesh
- """
- public_key: builtins.bytes
- """
- The public key of the user's device.
- This is sent out to other nodes on the mesh to allow them to compute a shared secret key.
- """
- is_unmessagable: builtins.bool
- """
- Whether or not the node can be messaged
- """
- def __init__(
- self,
- *,
- id: builtins.str = ...,
- long_name: builtins.str = ...,
- short_name: builtins.str = ...,
- macaddr: builtins.bytes = ...,
- hw_model: global___HardwareModel.ValueType = ...,
- is_licensed: builtins.bool = ...,
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType = ...,
- public_key: builtins.bytes = ...,
- is_unmessagable: builtins.bool | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_is_unmessagable", b"_is_unmessagable", "is_unmessagable", b"is_unmessagable"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_is_unmessagable", b"_is_unmessagable", "hw_model", b"hw_model", "id", b"id", "is_licensed", b"is_licensed", "is_unmessagable", b"is_unmessagable", "long_name", b"long_name", "macaddr", b"macaddr", "public_key", b"public_key", "role", b"role", "short_name", b"short_name"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["_is_unmessagable", b"_is_unmessagable"]) -> typing.Literal["is_unmessagable"] | None: ...
-
-global___User = User
-
-@typing.final
-class RouteDiscovery(google.protobuf.message.Message):
- """
- A message used in a traceroute
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ROUTE_FIELD_NUMBER: builtins.int
- SNR_TOWARDS_FIELD_NUMBER: builtins.int
- ROUTE_BACK_FIELD_NUMBER: builtins.int
- SNR_BACK_FIELD_NUMBER: builtins.int
- @property
- def route(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
- """
- The list of nodenums this packet has visited so far to the destination.
- """
-
- @property
- def snr_towards(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
- """
- The list of SNRs (in dB, scaled by 4) in the route towards the destination.
- """
-
- @property
- def route_back(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
- """
- The list of nodenums the packet has visited on the way back from the destination.
- """
-
- @property
- def snr_back(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
- """
- The list of SNRs (in dB, scaled by 4) in the route back from the destination.
- """
-
- def __init__(
- self,
- *,
- route: collections.abc.Iterable[builtins.int] | None = ...,
- snr_towards: collections.abc.Iterable[builtins.int] | None = ...,
- route_back: collections.abc.Iterable[builtins.int] | None = ...,
- snr_back: collections.abc.Iterable[builtins.int] | None = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["route", b"route", "route_back", b"route_back", "snr_back", b"snr_back", "snr_towards", b"snr_towards"]) -> None: ...
-
-global___RouteDiscovery = RouteDiscovery
-
-@typing.final
-class Routing(google.protobuf.message.Message):
- """
- A Routing control Data packet handled by the routing module
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Error:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _ErrorEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Routing._Error.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- NONE: Routing._Error.ValueType # 0
- """
- This message is not a failure
- """
- NO_ROUTE: Routing._Error.ValueType # 1
- """
- Our node doesn't have a route to the requested destination anymore.
- """
- GOT_NAK: Routing._Error.ValueType # 2
- """
- We received a nak while trying to forward on your behalf
- """
- TIMEOUT: Routing._Error.ValueType # 3
- """
- TODO: REPLACE
- """
- NO_INTERFACE: Routing._Error.ValueType # 4
- """
- No suitable interface could be found for delivering this packet
- """
- MAX_RETRANSMIT: Routing._Error.ValueType # 5
- """
- We reached the max retransmission count (typically for naive flood routing)
- """
- NO_CHANNEL: Routing._Error.ValueType # 6
- """
- No suitable channel was found for sending this packet (i.e. was requested channel index disabled?)
- """
- TOO_LARGE: Routing._Error.ValueType # 7
- """
- The packet was too big for sending (exceeds interface MTU after encoding)
- """
- NO_RESPONSE: Routing._Error.ValueType # 8
- """
- The request had want_response set, the request reached the destination node, but no service on that node wants to send a response
- (possibly due to bad channel permissions)
- """
- DUTY_CYCLE_LIMIT: Routing._Error.ValueType # 9
- """
- Cannot send currently because duty cycle regulations will be violated.
- """
- BAD_REQUEST: Routing._Error.ValueType # 32
- """
- The application layer service on the remote node received your request, but considered your request somehow invalid
- """
- NOT_AUTHORIZED: Routing._Error.ValueType # 33
- """
- The application layer service on the remote node received your request, but considered your request not authorized
- (i.e you did not send the request on the required bound channel)
- """
- PKI_FAILED: Routing._Error.ValueType # 34
- """
- The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at all)
- """
- PKI_UNKNOWN_PUBKEY: Routing._Error.ValueType # 35
- """
- The receiving node does not have a Public Key to decode with
- """
- ADMIN_BAD_SESSION_KEY: Routing._Error.ValueType # 36
- """
- Admin packet otherwise checks out, but uses a bogus or expired session key
- """
- ADMIN_PUBLIC_KEY_UNAUTHORIZED: Routing._Error.ValueType # 37
- """
- Admin packet sent using PKC, but not from a public key on the admin key list
- """
- RATE_LIMIT_EXCEEDED: Routing._Error.ValueType # 38
- """
- Airtime fairness rate limit exceeded for a packet
- This typically enforced per portnum and is used to prevent a single node from monopolizing airtime
- """
-
- class Error(_Error, metaclass=_ErrorEnumTypeWrapper):
- """
- A failure in delivering a message (usually used for routing control messages, but might be provided in addition to ack.fail_id to provide
- details on the type of failure).
- """
-
- NONE: Routing.Error.ValueType # 0
- """
- This message is not a failure
- """
- NO_ROUTE: Routing.Error.ValueType # 1
- """
- Our node doesn't have a route to the requested destination anymore.
- """
- GOT_NAK: Routing.Error.ValueType # 2
- """
- We received a nak while trying to forward on your behalf
- """
- TIMEOUT: Routing.Error.ValueType # 3
- """
- TODO: REPLACE
- """
- NO_INTERFACE: Routing.Error.ValueType # 4
- """
- No suitable interface could be found for delivering this packet
- """
- MAX_RETRANSMIT: Routing.Error.ValueType # 5
- """
- We reached the max retransmission count (typically for naive flood routing)
- """
- NO_CHANNEL: Routing.Error.ValueType # 6
- """
- No suitable channel was found for sending this packet (i.e. was requested channel index disabled?)
- """
- TOO_LARGE: Routing.Error.ValueType # 7
- """
- The packet was too big for sending (exceeds interface MTU after encoding)
- """
- NO_RESPONSE: Routing.Error.ValueType # 8
- """
- The request had want_response set, the request reached the destination node, but no service on that node wants to send a response
- (possibly due to bad channel permissions)
- """
- DUTY_CYCLE_LIMIT: Routing.Error.ValueType # 9
- """
- Cannot send currently because duty cycle regulations will be violated.
- """
- BAD_REQUEST: Routing.Error.ValueType # 32
- """
- The application layer service on the remote node received your request, but considered your request somehow invalid
- """
- NOT_AUTHORIZED: Routing.Error.ValueType # 33
- """
- The application layer service on the remote node received your request, but considered your request not authorized
- (i.e you did not send the request on the required bound channel)
- """
- PKI_FAILED: Routing.Error.ValueType # 34
- """
- The client specified a PKI transport, but the node was unable to send the packet using PKI (and did not send the message at all)
- """
- PKI_UNKNOWN_PUBKEY: Routing.Error.ValueType # 35
- """
- The receiving node does not have a Public Key to decode with
- """
- ADMIN_BAD_SESSION_KEY: Routing.Error.ValueType # 36
- """
- Admin packet otherwise checks out, but uses a bogus or expired session key
- """
- ADMIN_PUBLIC_KEY_UNAUTHORIZED: Routing.Error.ValueType # 37
- """
- Admin packet sent using PKC, but not from a public key on the admin key list
- """
- RATE_LIMIT_EXCEEDED: Routing.Error.ValueType # 38
- """
- Airtime fairness rate limit exceeded for a packet
- This typically enforced per portnum and is used to prevent a single node from monopolizing airtime
- """
-
- ROUTE_REQUEST_FIELD_NUMBER: builtins.int
- ROUTE_REPLY_FIELD_NUMBER: builtins.int
- ERROR_REASON_FIELD_NUMBER: builtins.int
- error_reason: global___Routing.Error.ValueType
- """
- A failure in delivering a message (usually used for routing control messages, but might be provided
- in addition to ack.fail_id to provide details on the type of failure).
- """
- @property
- def route_request(self) -> global___RouteDiscovery:
- """
- A route request going from the requester
- """
-
- @property
- def route_reply(self) -> global___RouteDiscovery:
- """
- A route reply
- """
-
- def __init__(
- self,
- *,
- route_request: global___RouteDiscovery | None = ...,
- route_reply: global___RouteDiscovery | None = ...,
- error_reason: global___Routing.Error.ValueType = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["error_reason", b"error_reason", "route_reply", b"route_reply", "route_request", b"route_request", "variant", b"variant"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["error_reason", b"error_reason", "route_reply", b"route_reply", "route_request", b"route_request", "variant", b"variant"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["variant", b"variant"]) -> typing.Literal["route_request", "route_reply", "error_reason"] | None: ...
-
-global___Routing = Routing
-
-@typing.final
-class Data(google.protobuf.message.Message):
- """
- (Formerly called SubPacket)
- The payload portion fo a packet, this is the actual bytes that are sent
- inside a radio packet (because from/to are broken out by the comms library)
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PORTNUM_FIELD_NUMBER: builtins.int
- PAYLOAD_FIELD_NUMBER: builtins.int
- WANT_RESPONSE_FIELD_NUMBER: builtins.int
- DEST_FIELD_NUMBER: builtins.int
- SOURCE_FIELD_NUMBER: builtins.int
- REQUEST_ID_FIELD_NUMBER: builtins.int
- REPLY_ID_FIELD_NUMBER: builtins.int
- EMOJI_FIELD_NUMBER: builtins.int
- BITFIELD_FIELD_NUMBER: builtins.int
- portnum: meshtastic.protobuf.portnums_pb2.PortNum.ValueType
- """
- Formerly named typ and of type Type
- """
- payload: builtins.bytes
- """
- TODO: REPLACE
- """
- want_response: builtins.bool
- """
- Not normally used, but for testing a sender can request that recipient
- responds in kind (i.e. if it received a position, it should unicast back it's position).
- Note: that if you set this on a broadcast you will receive many replies.
- """
- dest: builtins.int
- """
- The address of the destination node.
- This field is is filled in by the mesh radio device software, application
- layer software should never need it.
- RouteDiscovery messages _must_ populate this.
- Other message types might need to if they are doing multihop routing.
- """
- source: builtins.int
- """
- The address of the original sender for this message.
- This field should _only_ be populated for reliable multihop packets (to keep
- packets small).
- """
- request_id: builtins.int
- """
- Only used in routing or response messages.
- Indicates the original message ID that this message is reporting failure on. (formerly called original_id)
- """
- reply_id: builtins.int
- """
- If set, this message is intened to be a reply to a previously sent message with the defined id.
- """
- emoji: builtins.int
- """
- Defaults to false. If true, then what is in the payload should be treated as an emoji like giving
- a message a heart or poop emoji.
- """
- bitfield: builtins.int
- """
- Bitfield for extra flags. First use is to indicate that user approves the packet being uploaded to MQTT.
- """
- def __init__(
- self,
- *,
- portnum: meshtastic.protobuf.portnums_pb2.PortNum.ValueType = ...,
- payload: builtins.bytes = ...,
- want_response: builtins.bool = ...,
- dest: builtins.int = ...,
- source: builtins.int = ...,
- request_id: builtins.int = ...,
- reply_id: builtins.int = ...,
- emoji: builtins.int = ...,
- bitfield: builtins.int | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_bitfield", b"_bitfield", "bitfield", b"bitfield"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_bitfield", b"_bitfield", "bitfield", b"bitfield", "dest", b"dest", "emoji", b"emoji", "payload", b"payload", "portnum", b"portnum", "reply_id", b"reply_id", "request_id", b"request_id", "source", b"source", "want_response", b"want_response"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["_bitfield", b"_bitfield"]) -> typing.Literal["bitfield"] | None: ...
-
-global___Data = Data
-
-@typing.final
-class KeyVerification(google.protobuf.message.Message):
- """
- The actual over-the-mesh message doing KeyVerification
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NONCE_FIELD_NUMBER: builtins.int
- HASH1_FIELD_NUMBER: builtins.int
- HASH2_FIELD_NUMBER: builtins.int
- nonce: builtins.int
- """
- random value Selected by the requesting node
- """
- hash1: builtins.bytes
- """
- The final authoritative hash, only to be sent by NodeA at the end of the handshake
- """
- hash2: builtins.bytes
- """
- The intermediary hash (actually derived from hash1),
- sent from NodeB to NodeA in response to the initial message.
- """
- def __init__(
- self,
- *,
- nonce: builtins.int = ...,
- hash1: builtins.bytes = ...,
- hash2: builtins.bytes = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["hash1", b"hash1", "hash2", b"hash2", "nonce", b"nonce"]) -> None: ...
-
-global___KeyVerification = KeyVerification
-
-@typing.final
-class Waypoint(google.protobuf.message.Message):
- """
- Waypoint message, used to share arbitrary locations across the mesh
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ID_FIELD_NUMBER: builtins.int
- LATITUDE_I_FIELD_NUMBER: builtins.int
- LONGITUDE_I_FIELD_NUMBER: builtins.int
- EXPIRE_FIELD_NUMBER: builtins.int
- LOCKED_TO_FIELD_NUMBER: builtins.int
- NAME_FIELD_NUMBER: builtins.int
- DESCRIPTION_FIELD_NUMBER: builtins.int
- ICON_FIELD_NUMBER: builtins.int
- id: builtins.int
- """
- Id of the waypoint
- """
- latitude_i: builtins.int
- """
- latitude_i
- """
- longitude_i: builtins.int
- """
- longitude_i
- """
- expire: builtins.int
- """
- Time the waypoint is to expire (epoch)
- """
- locked_to: builtins.int
- """
- If greater than zero, treat the value as a nodenum only allowing them to update the waypoint.
- If zero, the waypoint is open to be edited by any member of the mesh.
- """
- name: builtins.str
- """
- Name of the waypoint - max 30 chars
- """
- description: builtins.str
- """
- Description of the waypoint - max 100 chars
- """
- icon: builtins.int
- """
- Designator icon for the waypoint in the form of a unicode emoji
- """
- def __init__(
- self,
- *,
- id: builtins.int = ...,
- latitude_i: builtins.int | None = ...,
- longitude_i: builtins.int | None = ...,
- expire: builtins.int = ...,
- locked_to: builtins.int = ...,
- name: builtins.str = ...,
- description: builtins.str = ...,
- icon: builtins.int = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_latitude_i", b"_latitude_i", "_longitude_i", b"_longitude_i", "latitude_i", b"latitude_i", "longitude_i", b"longitude_i"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_latitude_i", b"_latitude_i", "_longitude_i", b"_longitude_i", "description", b"description", "expire", b"expire", "icon", b"icon", "id", b"id", "latitude_i", b"latitude_i", "locked_to", b"locked_to", "longitude_i", b"longitude_i", "name", b"name"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_latitude_i", b"_latitude_i"]) -> typing.Literal["latitude_i"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_longitude_i", b"_longitude_i"]) -> typing.Literal["longitude_i"] | None: ...
-
-global___Waypoint = Waypoint
-
-@typing.final
-class MqttClientProxyMessage(google.protobuf.message.Message):
- """
- This message will be proxied over the PhoneAPI for the client to deliver to the MQTT server
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- TOPIC_FIELD_NUMBER: builtins.int
- DATA_FIELD_NUMBER: builtins.int
- TEXT_FIELD_NUMBER: builtins.int
- RETAINED_FIELD_NUMBER: builtins.int
- topic: builtins.str
- """
- The MQTT topic this message will be sent /received on
- """
- data: builtins.bytes
- """
- Bytes
- """
- text: builtins.str
- """
- Text
- """
- retained: builtins.bool
- """
- Whether the message should be retained (or not)
- """
- def __init__(
- self,
- *,
- topic: builtins.str = ...,
- data: builtins.bytes = ...,
- text: builtins.str = ...,
- retained: builtins.bool = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["data", b"data", "payload_variant", b"payload_variant", "text", b"text"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["data", b"data", "payload_variant", b"payload_variant", "retained", b"retained", "text", b"text", "topic", b"topic"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["data", "text"] | None: ...
-
-global___MqttClientProxyMessage = MqttClientProxyMessage
-
-@typing.final
-class MeshPacket(google.protobuf.message.Message):
- """
- A packet envelope sent/received over the mesh
- only payload_variant is sent in the payload portion of the LORA packet.
- The other fields are either not sent at all, or sent in the special 16 byte LORA header.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Priority:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _PriorityEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[MeshPacket._Priority.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: MeshPacket._Priority.ValueType # 0
- """
- Treated as Priority.DEFAULT
- """
- MIN: MeshPacket._Priority.ValueType # 1
- """
- TODO: REPLACE
- """
- BACKGROUND: MeshPacket._Priority.ValueType # 10
- """
- Background position updates are sent with very low priority -
- if the link is super congested they might not go out at all
- """
- DEFAULT: MeshPacket._Priority.ValueType # 64
- """
- This priority is used for most messages that don't have a priority set
- """
- RELIABLE: MeshPacket._Priority.ValueType # 70
- """
- If priority is unset but the message is marked as want_ack,
- assume it is important and use a slightly higher priority
- """
- RESPONSE: MeshPacket._Priority.ValueType # 80
- """
- If priority is unset but the packet is a response to a request, we want it to get there relatively quickly.
- Furthermore, responses stop relaying packets directed to a node early.
- """
- HIGH: MeshPacket._Priority.ValueType # 100
- """
- Higher priority for specific message types (portnums) to distinguish between other reliable packets.
- """
- ALERT: MeshPacket._Priority.ValueType # 110
- """
- Higher priority alert message used for critical alerts which take priority over other reliable packets.
- """
- ACK: MeshPacket._Priority.ValueType # 120
- """
- Ack/naks are sent with very high priority to ensure that retransmission
- stops as soon as possible
- """
- MAX: MeshPacket._Priority.ValueType # 127
- """
- TODO: REPLACE
- """
-
- class Priority(_Priority, metaclass=_PriorityEnumTypeWrapper):
- """
- The priority of this message for sending.
- Higher priorities are sent first (when managing the transmit queue).
- This field is never sent over the air, it is only used internally inside of a local device node.
- API clients (either on the local node or connected directly to the node)
- can set this parameter if necessary.
- (values must be <= 127 to keep protobuf field to one byte in size.
- Detailed background on this field:
- I noticed a funny side effect of lora being so slow: Usually when making
- a protocol there isn’t much need to use message priority to change the order
- of transmission (because interfaces are fairly fast).
- But for lora where packets can take a few seconds each, it is very important
- to make sure that critical packets are sent ASAP.
- In the case of meshtastic that means we want to send protocol acks as soon as possible
- (to prevent unneeded retransmissions), we want routing messages to be sent next,
- then messages marked as reliable and finally 'background' packets like periodic position updates.
- So I bit the bullet and implemented a new (internal - not sent over the air)
- field in MeshPacket called 'priority'.
- And the transmission queue in the router object is now a priority queue.
- """
-
- UNSET: MeshPacket.Priority.ValueType # 0
- """
- Treated as Priority.DEFAULT
- """
- MIN: MeshPacket.Priority.ValueType # 1
- """
- TODO: REPLACE
- """
- BACKGROUND: MeshPacket.Priority.ValueType # 10
- """
- Background position updates are sent with very low priority -
- if the link is super congested they might not go out at all
- """
- DEFAULT: MeshPacket.Priority.ValueType # 64
- """
- This priority is used for most messages that don't have a priority set
- """
- RELIABLE: MeshPacket.Priority.ValueType # 70
- """
- If priority is unset but the message is marked as want_ack,
- assume it is important and use a slightly higher priority
- """
- RESPONSE: MeshPacket.Priority.ValueType # 80
- """
- If priority is unset but the packet is a response to a request, we want it to get there relatively quickly.
- Furthermore, responses stop relaying packets directed to a node early.
- """
- HIGH: MeshPacket.Priority.ValueType # 100
- """
- Higher priority for specific message types (portnums) to distinguish between other reliable packets.
- """
- ALERT: MeshPacket.Priority.ValueType # 110
- """
- Higher priority alert message used for critical alerts which take priority over other reliable packets.
- """
- ACK: MeshPacket.Priority.ValueType # 120
- """
- Ack/naks are sent with very high priority to ensure that retransmission
- stops as soon as possible
- """
- MAX: MeshPacket.Priority.ValueType # 127
- """
- TODO: REPLACE
- """
-
- class _Delayed:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _DelayedEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[MeshPacket._Delayed.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- NO_DELAY: MeshPacket._Delayed.ValueType # 0
- """
- If unset, the message is being sent in real time.
- """
- DELAYED_BROADCAST: MeshPacket._Delayed.ValueType # 1
- """
- The message is delayed and was originally a broadcast
- """
- DELAYED_DIRECT: MeshPacket._Delayed.ValueType # 2
- """
- The message is delayed and was originally a direct message
- """
-
- class Delayed(_Delayed, metaclass=_DelayedEnumTypeWrapper):
- """
- Identify if this is a delayed packet
- """
-
- NO_DELAY: MeshPacket.Delayed.ValueType # 0
- """
- If unset, the message is being sent in real time.
- """
- DELAYED_BROADCAST: MeshPacket.Delayed.ValueType # 1
- """
- The message is delayed and was originally a broadcast
- """
- DELAYED_DIRECT: MeshPacket.Delayed.ValueType # 2
- """
- The message is delayed and was originally a direct message
- """
-
- class _TransportMechanism:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _TransportMechanismEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[MeshPacket._TransportMechanism.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- TRANSPORT_INTERNAL: MeshPacket._TransportMechanism.ValueType # 0
- """
- The default case is that the node generated a packet itself
- """
- TRANSPORT_LORA: MeshPacket._TransportMechanism.ValueType # 1
- """
- Arrived via the primary LoRa radio
- """
- TRANSPORT_LORA_ALT1: MeshPacket._TransportMechanism.ValueType # 2
- """
- Arrived via a secondary LoRa radio
- """
- TRANSPORT_LORA_ALT2: MeshPacket._TransportMechanism.ValueType # 3
- """
- Arrived via a tertiary LoRa radio
- """
- TRANSPORT_LORA_ALT3: MeshPacket._TransportMechanism.ValueType # 4
- """
- Arrived via a quaternary LoRa radio
- """
- TRANSPORT_MQTT: MeshPacket._TransportMechanism.ValueType # 5
- """
- Arrived via an MQTT connection
- """
- TRANSPORT_MULTICAST_UDP: MeshPacket._TransportMechanism.ValueType # 6
- """
- Arrived via Multicast UDP
- """
- TRANSPORT_API: MeshPacket._TransportMechanism.ValueType # 7
- """
- Arrived via API connection
- """
-
- class TransportMechanism(_TransportMechanism, metaclass=_TransportMechanismEnumTypeWrapper):
- """
- Enum to identify which transport mechanism this packet arrived over
- """
-
- TRANSPORT_INTERNAL: MeshPacket.TransportMechanism.ValueType # 0
- """
- The default case is that the node generated a packet itself
- """
- TRANSPORT_LORA: MeshPacket.TransportMechanism.ValueType # 1
- """
- Arrived via the primary LoRa radio
- """
- TRANSPORT_LORA_ALT1: MeshPacket.TransportMechanism.ValueType # 2
- """
- Arrived via a secondary LoRa radio
- """
- TRANSPORT_LORA_ALT2: MeshPacket.TransportMechanism.ValueType # 3
- """
- Arrived via a tertiary LoRa radio
- """
- TRANSPORT_LORA_ALT3: MeshPacket.TransportMechanism.ValueType # 4
- """
- Arrived via a quaternary LoRa radio
- """
- TRANSPORT_MQTT: MeshPacket.TransportMechanism.ValueType # 5
- """
- Arrived via an MQTT connection
- """
- TRANSPORT_MULTICAST_UDP: MeshPacket.TransportMechanism.ValueType # 6
- """
- Arrived via Multicast UDP
- """
- TRANSPORT_API: MeshPacket.TransportMechanism.ValueType # 7
- """
- Arrived via API connection
- """
-
- FROM_FIELD_NUMBER: builtins.int
- TO_FIELD_NUMBER: builtins.int
- CHANNEL_FIELD_NUMBER: builtins.int
- DECODED_FIELD_NUMBER: builtins.int
- ENCRYPTED_FIELD_NUMBER: builtins.int
- ID_FIELD_NUMBER: builtins.int
- RX_TIME_FIELD_NUMBER: builtins.int
- RX_SNR_FIELD_NUMBER: builtins.int
- HOP_LIMIT_FIELD_NUMBER: builtins.int
- WANT_ACK_FIELD_NUMBER: builtins.int
- PRIORITY_FIELD_NUMBER: builtins.int
- RX_RSSI_FIELD_NUMBER: builtins.int
- DELAYED_FIELD_NUMBER: builtins.int
- VIA_MQTT_FIELD_NUMBER: builtins.int
- HOP_START_FIELD_NUMBER: builtins.int
- PUBLIC_KEY_FIELD_NUMBER: builtins.int
- PKI_ENCRYPTED_FIELD_NUMBER: builtins.int
- NEXT_HOP_FIELD_NUMBER: builtins.int
- RELAY_NODE_FIELD_NUMBER: builtins.int
- TX_AFTER_FIELD_NUMBER: builtins.int
- TRANSPORT_MECHANISM_FIELD_NUMBER: builtins.int
- to: builtins.int
- """
- The (immediate) destination for this packet
- """
- channel: builtins.int
- """
- (Usually) If set, this indicates the index in the secondary_channels table that this packet was sent/received on.
- If unset, packet was on the primary channel.
- A particular node might know only a subset of channels in use on the mesh.
- Therefore channel_index is inherently a local concept and meaningless to send between nodes.
- Very briefly, while sending and receiving deep inside the device Router code, this field instead
- contains the 'channel hash' instead of the index.
- This 'trick' is only used while the payload_variant is an 'encrypted'.
- """
- encrypted: builtins.bytes
- """
- TODO: REPLACE
- """
- id: builtins.int
- """
- A unique ID for this packet.
- Always 0 for no-ack packets or non broadcast packets (and therefore take zero bytes of space).
- Otherwise a unique ID for this packet, useful for flooding algorithms.
- ID only needs to be unique on a _per sender_ basis, and it only
- needs to be unique for a few minutes (long enough to last for the length of
- any ACK or the completion of a mesh broadcast flood).
- Note: Our crypto implementation uses this id as well.
- See [crypto](/docs/overview/encryption) for details.
- """
- rx_time: builtins.int
- """
- The time this message was received by the esp32 (secs since 1970).
- Note: this field is _never_ sent on the radio link itself (to save space) Times
- are typically not sent over the mesh, but they will be added to any Packet
- (chain of SubPacket) sent to the phone (so the phone can know exact time of reception)
- """
- rx_snr: builtins.float
- """
- *Never* sent over the radio links.
- Set during reception to indicate the SNR of this packet.
- Used to collect statistics on current link quality.
- """
- hop_limit: builtins.int
- """
- If unset treated as zero (no forwarding, send to direct neighbor nodes only)
- if 1, allow hopping through one node, etc...
- For our usecase real world topologies probably have a max of about 3.
- This field is normally placed into a few of bits in the header.
- """
- want_ack: builtins.bool
- """
- This packet is being sent as a reliable message, we would prefer it to arrive at the destination.
- We would like to receive a ack packet in response.
- Broadcasts messages treat this flag specially: Since acks for broadcasts would
- rapidly flood the channel, the normal ack behavior is suppressed.
- Instead, the original sender listens to see if at least one node is rebroadcasting this packet (because naive flooding algorithm).
- If it hears that the odds (given typical LoRa topologies) the odds are very high that every node should eventually receive the message.
- So FloodingRouter.cpp generates an implicit ack which is delivered to the original sender.
- If after some time we don't hear anyone rebroadcast our packet, we will timeout and retransmit, using the regular resend logic.
- Note: This flag is normally sent in a flag bit in the header when sent over the wire
- """
- priority: global___MeshPacket.Priority.ValueType
- """
- The priority of this message for sending.
- See MeshPacket.Priority description for more details.
- """
- rx_rssi: builtins.int
- """
- rssi of received packet. Only sent to phone for dispay purposes.
- """
- delayed: global___MeshPacket.Delayed.ValueType
- """
- Describe if this message is delayed
- """
- via_mqtt: builtins.bool
- """
- Describes whether this packet passed via MQTT somewhere along the path it currently took.
- """
- hop_start: builtins.int
- """
- Hop limit with which the original packet started. Sent via LoRa using three bits in the unencrypted header.
- When receiving a packet, the difference between hop_start and hop_limit gives how many hops it traveled.
- """
- public_key: builtins.bytes
- """
- Records the public key the packet was encrypted with, if applicable.
- """
- pki_encrypted: builtins.bool
- """
- Indicates whether the packet was en/decrypted using PKI
- """
- next_hop: builtins.int
- """
- Last byte of the node number of the node that should be used as the next hop in routing.
- Set by the firmware internally, clients are not supposed to set this.
- """
- relay_node: builtins.int
- """
- Last byte of the node number of the node that will relay/relayed this packet.
- Set by the firmware internally, clients are not supposed to set this.
- """
- tx_after: builtins.int
- """
- *Never* sent over the radio links.
- Timestamp after which this packet may be sent.
- Set by the firmware internally, clients are not supposed to set this.
- """
- transport_mechanism: global___MeshPacket.TransportMechanism.ValueType
- """
- Indicates which transport mechanism this packet arrived over
- """
- @property
- def decoded(self) -> global___Data:
- """
- TODO: REPLACE
- """
-
- def __init__(
- self,
- *,
- to: builtins.int = ...,
- channel: builtins.int = ...,
- decoded: global___Data | None = ...,
- encrypted: builtins.bytes = ...,
- id: builtins.int = ...,
- rx_time: builtins.int = ...,
- rx_snr: builtins.float = ...,
- hop_limit: builtins.int = ...,
- want_ack: builtins.bool = ...,
- priority: global___MeshPacket.Priority.ValueType = ...,
- rx_rssi: builtins.int = ...,
- delayed: global___MeshPacket.Delayed.ValueType = ...,
- via_mqtt: builtins.bool = ...,
- hop_start: builtins.int = ...,
- public_key: builtins.bytes = ...,
- pki_encrypted: builtins.bool = ...,
- next_hop: builtins.int = ...,
- relay_node: builtins.int = ...,
- tx_after: builtins.int = ...,
- transport_mechanism: global___MeshPacket.TransportMechanism.ValueType = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["decoded", b"decoded", "encrypted", b"encrypted", "payload_variant", b"payload_variant"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["channel", b"channel", "decoded", b"decoded", "delayed", b"delayed", "encrypted", b"encrypted", "from", b"from", "hop_limit", b"hop_limit", "hop_start", b"hop_start", "id", b"id", "next_hop", b"next_hop", "payload_variant", b"payload_variant", "pki_encrypted", b"pki_encrypted", "priority", b"priority", "public_key", b"public_key", "relay_node", b"relay_node", "rx_rssi", b"rx_rssi", "rx_snr", b"rx_snr", "rx_time", b"rx_time", "to", b"to", "transport_mechanism", b"transport_mechanism", "tx_after", b"tx_after", "via_mqtt", b"via_mqtt", "want_ack", b"want_ack"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["decoded", "encrypted"] | None: ...
-
-global___MeshPacket = MeshPacket
-
-@typing.final
-class NodeInfo(google.protobuf.message.Message):
- """
- The bluetooth to device link:
- Old BTLE protocol docs from TODO, merge in above and make real docs...
- use protocol buffers, and NanoPB
- messages from device to phone:
- POSITION_UPDATE (..., time)
- TEXT_RECEIVED(from, text, time)
- OPAQUE_RECEIVED(from, payload, time) (for signal messages or other applications)
- messages from phone to device:
- SET_MYID(id, human readable long, human readable short) (send down the unique ID
- string used for this node, a human readable string shown for that id, and a very
- short human readable string suitable for oled screen) SEND_OPAQUE(dest, payload)
- (for signal messages or other applications) SEND_TEXT(dest, text) Get all
- nodes() (returns list of nodes, with full info, last time seen, loc, battery
- level etc) SET_CONFIG (switches device to a new set of radio params and
- preshared key, drops all existing nodes, force our node to rejoin this new group)
- Full information about a node on the mesh
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NUM_FIELD_NUMBER: builtins.int
- USER_FIELD_NUMBER: builtins.int
- POSITION_FIELD_NUMBER: builtins.int
- SNR_FIELD_NUMBER: builtins.int
- LAST_HEARD_FIELD_NUMBER: builtins.int
- DEVICE_METRICS_FIELD_NUMBER: builtins.int
- CHANNEL_FIELD_NUMBER: builtins.int
- VIA_MQTT_FIELD_NUMBER: builtins.int
- HOPS_AWAY_FIELD_NUMBER: builtins.int
- IS_FAVORITE_FIELD_NUMBER: builtins.int
- IS_IGNORED_FIELD_NUMBER: builtins.int
- IS_KEY_MANUALLY_VERIFIED_FIELD_NUMBER: builtins.int
- num: builtins.int
- """
- The node number
- """
- snr: builtins.float
- """
- Returns the Signal-to-noise ratio (SNR) of the last received message,
- as measured by the receiver. Return SNR of the last received message in dB
- """
- last_heard: builtins.int
- """
- TODO: REMOVE/INTEGRATE
- Not currently used (till full DSR deployment?) Our current preferred node node for routing - might be the same as num if
- we are direct neighbor or zero if we don't yet know a route to this node.
- fixed32 next_hop = 5;
-
-
- Set to indicate the last time we received a packet from this node
- """
- channel: builtins.int
- """
- local channel index we heard that node on. Only populated if its not the default channel.
- """
- via_mqtt: builtins.bool
- """
- True if we witnessed the node over MQTT instead of LoRA transport
- """
- hops_away: builtins.int
- """
- Number of hops away from us this node is (0 if direct neighbor)
- """
- is_favorite: builtins.bool
- """
- True if node is in our favorites list
- Persists between NodeDB internal clean ups
- """
- is_ignored: builtins.bool
- """
- True if node is in our ignored list
- Persists between NodeDB internal clean ups
- """
- is_key_manually_verified: builtins.bool
- """
- True if node public key has been verified.
- Persists between NodeDB internal clean ups
- LSB 0 of the bitfield
- """
- @property
- def user(self) -> global___User:
- """
- The user info for this node
- """
-
- @property
- def position(self) -> global___Position:
- """
- This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
- Position.time now indicates the last time we received a POSITION from that node.
- """
-
- @property
- def device_metrics(self) -> meshtastic.protobuf.telemetry_pb2.DeviceMetrics:
- """
- The latest device metrics for the node.
- """
-
- def __init__(
- self,
- *,
- num: builtins.int = ...,
- user: global___User | None = ...,
- position: global___Position | None = ...,
- snr: builtins.float = ...,
- last_heard: builtins.int = ...,
- device_metrics: meshtastic.protobuf.telemetry_pb2.DeviceMetrics | None = ...,
- channel: builtins.int = ...,
- via_mqtt: builtins.bool = ...,
- hops_away: builtins.int | None = ...,
- is_favorite: builtins.bool = ...,
- is_ignored: builtins.bool = ...,
- is_key_manually_verified: builtins.bool = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_hops_away", b"_hops_away", "device_metrics", b"device_metrics", "hops_away", b"hops_away", "position", b"position", "user", b"user"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_hops_away", b"_hops_away", "channel", b"channel", "device_metrics", b"device_metrics", "hops_away", b"hops_away", "is_favorite", b"is_favorite", "is_ignored", b"is_ignored", "is_key_manually_verified", b"is_key_manually_verified", "last_heard", b"last_heard", "num", b"num", "position", b"position", "snr", b"snr", "user", b"user", "via_mqtt", b"via_mqtt"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["_hops_away", b"_hops_away"]) -> typing.Literal["hops_away"] | None: ...
-
-global___NodeInfo = NodeInfo
-
-@typing.final
-class MyNodeInfo(google.protobuf.message.Message):
- """
- Unique local debugging info for this node
- Note: we don't include position or the user info, because that will come in the
- Sent to the phone in response to WantNodes.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- MY_NODE_NUM_FIELD_NUMBER: builtins.int
- REBOOT_COUNT_FIELD_NUMBER: builtins.int
- MIN_APP_VERSION_FIELD_NUMBER: builtins.int
- DEVICE_ID_FIELD_NUMBER: builtins.int
- PIO_ENV_FIELD_NUMBER: builtins.int
- FIRMWARE_EDITION_FIELD_NUMBER: builtins.int
- NODEDB_COUNT_FIELD_NUMBER: builtins.int
- my_node_num: builtins.int
- """
- Tells the phone what our node number is, default starting value is
- lowbyte of macaddr, but it will be fixed if that is already in use
- """
- reboot_count: builtins.int
- """
- The total number of reboots this node has ever encountered
- (well - since the last time we discarded preferences)
- """
- min_app_version: builtins.int
- """
- The minimum app version that can talk to this device.
- Phone/PC apps should compare this to their build number and if too low tell the user they must update their app
- """
- device_id: builtins.bytes
- """
- Unique hardware identifier for this device
- """
- pio_env: builtins.str
- """
- The PlatformIO environment used to build this firmware
- """
- firmware_edition: global___FirmwareEdition.ValueType
- """
- The indicator for whether this device is running event firmware and which
- """
- nodedb_count: builtins.int
- """
- The number of nodes in the nodedb.
- This is used by the phone to know how many NodeInfo packets to expect on want_config
- """
- def __init__(
- self,
- *,
- my_node_num: builtins.int = ...,
- reboot_count: builtins.int = ...,
- min_app_version: builtins.int = ...,
- device_id: builtins.bytes = ...,
- pio_env: builtins.str = ...,
- firmware_edition: global___FirmwareEdition.ValueType = ...,
- nodedb_count: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["device_id", b"device_id", "firmware_edition", b"firmware_edition", "min_app_version", b"min_app_version", "my_node_num", b"my_node_num", "nodedb_count", b"nodedb_count", "pio_env", b"pio_env", "reboot_count", b"reboot_count"]) -> None: ...
-
-global___MyNodeInfo = MyNodeInfo
-
-@typing.final
-class LogRecord(google.protobuf.message.Message):
- """
- Debug output from the device.
- To minimize the size of records inside the device code, if a time/source/level is not set
- on the message it is assumed to be a continuation of the previously sent message.
- This allows the device code to use fixed maxlen 64 byte strings for messages,
- and then extend as needed by emitting multiple records.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Level:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _LevelEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[LogRecord._Level.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: LogRecord._Level.ValueType # 0
- """
- Log levels, chosen to match python logging conventions.
- """
- CRITICAL: LogRecord._Level.ValueType # 50
- """
- Log levels, chosen to match python logging conventions.
- """
- ERROR: LogRecord._Level.ValueType # 40
- """
- Log levels, chosen to match python logging conventions.
- """
- WARNING: LogRecord._Level.ValueType # 30
- """
- Log levels, chosen to match python logging conventions.
- """
- INFO: LogRecord._Level.ValueType # 20
- """
- Log levels, chosen to match python logging conventions.
- """
- DEBUG: LogRecord._Level.ValueType # 10
- """
- Log levels, chosen to match python logging conventions.
- """
- TRACE: LogRecord._Level.ValueType # 5
- """
- Log levels, chosen to match python logging conventions.
- """
-
- class Level(_Level, metaclass=_LevelEnumTypeWrapper):
- """
- Log levels, chosen to match python logging conventions.
- """
-
- UNSET: LogRecord.Level.ValueType # 0
- """
- Log levels, chosen to match python logging conventions.
- """
- CRITICAL: LogRecord.Level.ValueType # 50
- """
- Log levels, chosen to match python logging conventions.
- """
- ERROR: LogRecord.Level.ValueType # 40
- """
- Log levels, chosen to match python logging conventions.
- """
- WARNING: LogRecord.Level.ValueType # 30
- """
- Log levels, chosen to match python logging conventions.
- """
- INFO: LogRecord.Level.ValueType # 20
- """
- Log levels, chosen to match python logging conventions.
- """
- DEBUG: LogRecord.Level.ValueType # 10
- """
- Log levels, chosen to match python logging conventions.
- """
- TRACE: LogRecord.Level.ValueType # 5
- """
- Log levels, chosen to match python logging conventions.
- """
-
- MESSAGE_FIELD_NUMBER: builtins.int
- TIME_FIELD_NUMBER: builtins.int
- SOURCE_FIELD_NUMBER: builtins.int
- LEVEL_FIELD_NUMBER: builtins.int
- message: builtins.str
- """
- Log levels, chosen to match python logging conventions.
- """
- time: builtins.int
- """
- Seconds since 1970 - or 0 for unknown/unset
- """
- source: builtins.str
- """
- Usually based on thread name - if known
- """
- level: global___LogRecord.Level.ValueType
- """
- Not yet set
- """
- def __init__(
- self,
- *,
- message: builtins.str = ...,
- time: builtins.int = ...,
- source: builtins.str = ...,
- level: global___LogRecord.Level.ValueType = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["level", b"level", "message", b"message", "source", b"source", "time", b"time"]) -> None: ...
-
-global___LogRecord = LogRecord
-
-@typing.final
-class QueueStatus(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- RES_FIELD_NUMBER: builtins.int
- FREE_FIELD_NUMBER: builtins.int
- MAXLEN_FIELD_NUMBER: builtins.int
- MESH_PACKET_ID_FIELD_NUMBER: builtins.int
- res: builtins.int
- """Last attempt to queue status, ErrorCode"""
- free: builtins.int
- """Free entries in the outgoing queue"""
- maxlen: builtins.int
- """Maximum entries in the outgoing queue"""
- mesh_packet_id: builtins.int
- """What was mesh packet id that generated this response?"""
- def __init__(
- self,
- *,
- res: builtins.int = ...,
- free: builtins.int = ...,
- maxlen: builtins.int = ...,
- mesh_packet_id: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["free", b"free", "maxlen", b"maxlen", "mesh_packet_id", b"mesh_packet_id", "res", b"res"]) -> None: ...
-
-global___QueueStatus = QueueStatus
-
-@typing.final
-class FromRadio(google.protobuf.message.Message):
- """
- Packets from the radio to the phone will appear on the fromRadio characteristic.
- It will support READ and NOTIFY. When a new packet arrives the device will BLE notify?
- It will sit in that descriptor until consumed by the phone,
- at which point the next item in the FIFO will be populated.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ID_FIELD_NUMBER: builtins.int
- PACKET_FIELD_NUMBER: builtins.int
- MY_INFO_FIELD_NUMBER: builtins.int
- NODE_INFO_FIELD_NUMBER: builtins.int
- CONFIG_FIELD_NUMBER: builtins.int
- LOG_RECORD_FIELD_NUMBER: builtins.int
- CONFIG_COMPLETE_ID_FIELD_NUMBER: builtins.int
- REBOOTED_FIELD_NUMBER: builtins.int
- MODULECONFIG_FIELD_NUMBER: builtins.int
- CHANNEL_FIELD_NUMBER: builtins.int
- QUEUESTATUS_FIELD_NUMBER: builtins.int
- XMODEMPACKET_FIELD_NUMBER: builtins.int
- METADATA_FIELD_NUMBER: builtins.int
- MQTTCLIENTPROXYMESSAGE_FIELD_NUMBER: builtins.int
- FILEINFO_FIELD_NUMBER: builtins.int
- CLIENTNOTIFICATION_FIELD_NUMBER: builtins.int
- DEVICEUICONFIG_FIELD_NUMBER: builtins.int
- id: builtins.int
- """
- The packet id, used to allow the phone to request missing read packets from the FIFO,
- see our bluetooth docs
- """
- config_complete_id: builtins.int
- """
- Sent as true once the device has finished sending all of the responses to want_config
- recipient should check if this ID matches our original request nonce, if
- not, it means your config responses haven't started yet.
- NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
- """
- rebooted: builtins.bool
- """
- Sent to tell clients the radio has just rebooted.
- Set to true if present.
- Not used on all transports, currently just used for the serial console.
- NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
- """
- @property
- def packet(self) -> global___MeshPacket:
- """
- Log levels, chosen to match python logging conventions.
- """
-
- @property
- def my_info(self) -> global___MyNodeInfo:
- """
- Tells the phone what our node number is, can be -1 if we've not yet joined a mesh.
- NOTE: This ID must not change - to keep (minimal) compatibility with <1.2 version of android apps.
- """
-
- @property
- def node_info(self) -> global___NodeInfo:
- """
- One packet is sent for each node in the on radio DB
- starts over with the first node in our DB
- """
-
- @property
- def config(self) -> meshtastic.protobuf.config_pb2.Config:
- """
- Include a part of the config (was: RadioConfig radio)
- """
-
- @property
- def log_record(self) -> global___LogRecord:
- """
- Set to send debug console output over our protobuf stream
- """
-
- @property
- def moduleConfig(self) -> meshtastic.protobuf.module_config_pb2.ModuleConfig:
- """
- Include module config
- """
-
- @property
- def channel(self) -> meshtastic.protobuf.channel_pb2.Channel:
- """
- One packet is sent for each channel
- """
-
- @property
- def queueStatus(self) -> global___QueueStatus:
- """
- Queue status info
- """
-
- @property
- def xmodemPacket(self) -> meshtastic.protobuf.xmodem_pb2.XModem:
- """
- File Transfer Chunk
- """
-
- @property
- def metadata(self) -> global___DeviceMetadata:
- """
- Device metadata message
- """
-
- @property
- def mqttClientProxyMessage(self) -> global___MqttClientProxyMessage:
- """
- MQTT Client Proxy Message (device sending to client / phone for publishing to MQTT)
- """
-
- @property
- def fileInfo(self) -> global___FileInfo:
- """
- File system manifest messages
- """
-
- @property
- def clientNotification(self) -> global___ClientNotification:
- """
- Notification message to the client
- """
-
- @property
- def deviceuiConfig(self) -> meshtastic.protobuf.device_ui_pb2.DeviceUIConfig:
- """
- Persistent data for device-ui
- """
-
- def __init__(
- self,
- *,
- id: builtins.int = ...,
- packet: global___MeshPacket | None = ...,
- my_info: global___MyNodeInfo | None = ...,
- node_info: global___NodeInfo | None = ...,
- config: meshtastic.protobuf.config_pb2.Config | None = ...,
- log_record: global___LogRecord | None = ...,
- config_complete_id: builtins.int = ...,
- rebooted: builtins.bool = ...,
- moduleConfig: meshtastic.protobuf.module_config_pb2.ModuleConfig | None = ...,
- channel: meshtastic.protobuf.channel_pb2.Channel | None = ...,
- queueStatus: global___QueueStatus | None = ...,
- xmodemPacket: meshtastic.protobuf.xmodem_pb2.XModem | None = ...,
- metadata: global___DeviceMetadata | None = ...,
- mqttClientProxyMessage: global___MqttClientProxyMessage | None = ...,
- fileInfo: global___FileInfo | None = ...,
- clientNotification: global___ClientNotification | None = ...,
- deviceuiConfig: meshtastic.protobuf.device_ui_pb2.DeviceUIConfig | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["channel", b"channel", "clientNotification", b"clientNotification", "config", b"config", "config_complete_id", b"config_complete_id", "deviceuiConfig", b"deviceuiConfig", "fileInfo", b"fileInfo", "log_record", b"log_record", "metadata", b"metadata", "moduleConfig", b"moduleConfig", "mqttClientProxyMessage", b"mqttClientProxyMessage", "my_info", b"my_info", "node_info", b"node_info", "packet", b"packet", "payload_variant", b"payload_variant", "queueStatus", b"queueStatus", "rebooted", b"rebooted", "xmodemPacket", b"xmodemPacket"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["channel", b"channel", "clientNotification", b"clientNotification", "config", b"config", "config_complete_id", b"config_complete_id", "deviceuiConfig", b"deviceuiConfig", "fileInfo", b"fileInfo", "id", b"id", "log_record", b"log_record", "metadata", b"metadata", "moduleConfig", b"moduleConfig", "mqttClientProxyMessage", b"mqttClientProxyMessage", "my_info", b"my_info", "node_info", b"node_info", "packet", b"packet", "payload_variant", b"payload_variant", "queueStatus", b"queueStatus", "rebooted", b"rebooted", "xmodemPacket", b"xmodemPacket"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["packet", "my_info", "node_info", "config", "log_record", "config_complete_id", "rebooted", "moduleConfig", "channel", "queueStatus", "xmodemPacket", "metadata", "mqttClientProxyMessage", "fileInfo", "clientNotification", "deviceuiConfig"] | None: ...
-
-global___FromRadio = FromRadio
-
-@typing.final
-class ClientNotification(google.protobuf.message.Message):
- """
- A notification message from the device to the client
- To be used for important messages that should to be displayed to the user
- in the form of push notifications or validation messages when saving
- invalid configuration.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- REPLY_ID_FIELD_NUMBER: builtins.int
- TIME_FIELD_NUMBER: builtins.int
- LEVEL_FIELD_NUMBER: builtins.int
- MESSAGE_FIELD_NUMBER: builtins.int
- KEY_VERIFICATION_NUMBER_INFORM_FIELD_NUMBER: builtins.int
- KEY_VERIFICATION_NUMBER_REQUEST_FIELD_NUMBER: builtins.int
- KEY_VERIFICATION_FINAL_FIELD_NUMBER: builtins.int
- DUPLICATED_PUBLIC_KEY_FIELD_NUMBER: builtins.int
- LOW_ENTROPY_KEY_FIELD_NUMBER: builtins.int
- reply_id: builtins.int
- """
- The id of the packet we're notifying in response to
- """
- time: builtins.int
- """
- Seconds since 1970 - or 0 for unknown/unset
- """
- level: global___LogRecord.Level.ValueType
- """
- The level type of notification
- """
- message: builtins.str
- """
- The message body of the notification
- """
- @property
- def key_verification_number_inform(self) -> global___KeyVerificationNumberInform: ...
- @property
- def key_verification_number_request(self) -> global___KeyVerificationNumberRequest: ...
- @property
- def key_verification_final(self) -> global___KeyVerificationFinal: ...
- @property
- def duplicated_public_key(self) -> global___DuplicatedPublicKey: ...
- @property
- def low_entropy_key(self) -> global___LowEntropyKey: ...
- def __init__(
- self,
- *,
- reply_id: builtins.int | None = ...,
- time: builtins.int = ...,
- level: global___LogRecord.Level.ValueType = ...,
- message: builtins.str = ...,
- key_verification_number_inform: global___KeyVerificationNumberInform | None = ...,
- key_verification_number_request: global___KeyVerificationNumberRequest | None = ...,
- key_verification_final: global___KeyVerificationFinal | None = ...,
- duplicated_public_key: global___DuplicatedPublicKey | None = ...,
- low_entropy_key: global___LowEntropyKey | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_reply_id", b"_reply_id", "duplicated_public_key", b"duplicated_public_key", "key_verification_final", b"key_verification_final", "key_verification_number_inform", b"key_verification_number_inform", "key_verification_number_request", b"key_verification_number_request", "low_entropy_key", b"low_entropy_key", "payload_variant", b"payload_variant", "reply_id", b"reply_id"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_reply_id", b"_reply_id", "duplicated_public_key", b"duplicated_public_key", "key_verification_final", b"key_verification_final", "key_verification_number_inform", b"key_verification_number_inform", "key_verification_number_request", b"key_verification_number_request", "level", b"level", "low_entropy_key", b"low_entropy_key", "message", b"message", "payload_variant", b"payload_variant", "reply_id", b"reply_id", "time", b"time"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_reply_id", b"_reply_id"]) -> typing.Literal["reply_id"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["key_verification_number_inform", "key_verification_number_request", "key_verification_final", "duplicated_public_key", "low_entropy_key"] | None: ...
-
-global___ClientNotification = ClientNotification
-
-@typing.final
-class KeyVerificationNumberInform(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NONCE_FIELD_NUMBER: builtins.int
- REMOTE_LONGNAME_FIELD_NUMBER: builtins.int
- SECURITY_NUMBER_FIELD_NUMBER: builtins.int
- nonce: builtins.int
- remote_longname: builtins.str
- security_number: builtins.int
- def __init__(
- self,
- *,
- nonce: builtins.int = ...,
- remote_longname: builtins.str = ...,
- security_number: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["nonce", b"nonce", "remote_longname", b"remote_longname", "security_number", b"security_number"]) -> None: ...
-
-global___KeyVerificationNumberInform = KeyVerificationNumberInform
-
-@typing.final
-class KeyVerificationNumberRequest(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NONCE_FIELD_NUMBER: builtins.int
- REMOTE_LONGNAME_FIELD_NUMBER: builtins.int
- nonce: builtins.int
- remote_longname: builtins.str
- def __init__(
- self,
- *,
- nonce: builtins.int = ...,
- remote_longname: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["nonce", b"nonce", "remote_longname", b"remote_longname"]) -> None: ...
-
-global___KeyVerificationNumberRequest = KeyVerificationNumberRequest
-
-@typing.final
-class KeyVerificationFinal(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NONCE_FIELD_NUMBER: builtins.int
- REMOTE_LONGNAME_FIELD_NUMBER: builtins.int
- ISSENDER_FIELD_NUMBER: builtins.int
- VERIFICATION_CHARACTERS_FIELD_NUMBER: builtins.int
- nonce: builtins.int
- remote_longname: builtins.str
- isSender: builtins.bool
- verification_characters: builtins.str
- def __init__(
- self,
- *,
- nonce: builtins.int = ...,
- remote_longname: builtins.str = ...,
- isSender: builtins.bool = ...,
- verification_characters: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["isSender", b"isSender", "nonce", b"nonce", "remote_longname", b"remote_longname", "verification_characters", b"verification_characters"]) -> None: ...
-
-global___KeyVerificationFinal = KeyVerificationFinal
-
-@typing.final
-class DuplicatedPublicKey(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- def __init__(
- self,
- ) -> None: ...
-
-global___DuplicatedPublicKey = DuplicatedPublicKey
-
-@typing.final
-class LowEntropyKey(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- def __init__(
- self,
- ) -> None: ...
-
-global___LowEntropyKey = LowEntropyKey
-
-@typing.final
-class FileInfo(google.protobuf.message.Message):
- """
- Individual File info for the device
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- FILE_NAME_FIELD_NUMBER: builtins.int
- SIZE_BYTES_FIELD_NUMBER: builtins.int
- file_name: builtins.str
- """
- The fully qualified path of the file
- """
- size_bytes: builtins.int
- """
- The size of the file in bytes
- """
- def __init__(
- self,
- *,
- file_name: builtins.str = ...,
- size_bytes: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["file_name", b"file_name", "size_bytes", b"size_bytes"]) -> None: ...
-
-global___FileInfo = FileInfo
-
-@typing.final
-class ToRadio(google.protobuf.message.Message):
- """
- Packets/commands to the radio will be written (reliably) to the toRadio characteristic.
- Once the write completes the phone can assume it is handled.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PACKET_FIELD_NUMBER: builtins.int
- WANT_CONFIG_ID_FIELD_NUMBER: builtins.int
- DISCONNECT_FIELD_NUMBER: builtins.int
- XMODEMPACKET_FIELD_NUMBER: builtins.int
- MQTTCLIENTPROXYMESSAGE_FIELD_NUMBER: builtins.int
- HEARTBEAT_FIELD_NUMBER: builtins.int
- want_config_id: builtins.int
- """
- Phone wants radio to send full node db to the phone, This is
- typically the first packet sent to the radio when the phone gets a
- bluetooth connection. The radio will respond by sending back a
- MyNodeInfo, a owner, a radio config and a series of
- FromRadio.node_infos, and config_complete
- the integer you write into this field will be reported back in the
- config_complete_id response this allows clients to never be confused by
- a stale old partially sent config.
- """
- disconnect: builtins.bool
- """
- Tell API server we are disconnecting now.
- This is useful for serial links where there is no hardware/protocol based notification that the client has dropped the link.
- (Sending this message is optional for clients)
- """
- @property
- def packet(self) -> global___MeshPacket:
- """
- Send this packet on the mesh
- """
-
- @property
- def xmodemPacket(self) -> meshtastic.protobuf.xmodem_pb2.XModem:
- """
- File Transfer Chunk
- """
-
- @property
- def mqttClientProxyMessage(self) -> global___MqttClientProxyMessage:
- """
- MQTT Client Proxy Message (for client / phone subscribed to MQTT sending to device)
- """
-
- @property
- def heartbeat(self) -> global___Heartbeat:
- """
- Heartbeat message (used to keep the device connection awake on serial)
- """
-
- def __init__(
- self,
- *,
- packet: global___MeshPacket | None = ...,
- want_config_id: builtins.int = ...,
- disconnect: builtins.bool = ...,
- xmodemPacket: meshtastic.protobuf.xmodem_pb2.XModem | None = ...,
- mqttClientProxyMessage: global___MqttClientProxyMessage | None = ...,
- heartbeat: global___Heartbeat | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["disconnect", b"disconnect", "heartbeat", b"heartbeat", "mqttClientProxyMessage", b"mqttClientProxyMessage", "packet", b"packet", "payload_variant", b"payload_variant", "want_config_id", b"want_config_id", "xmodemPacket", b"xmodemPacket"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["disconnect", b"disconnect", "heartbeat", b"heartbeat", "mqttClientProxyMessage", b"mqttClientProxyMessage", "packet", b"packet", "payload_variant", b"payload_variant", "want_config_id", b"want_config_id", "xmodemPacket", b"xmodemPacket"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["packet", "want_config_id", "disconnect", "xmodemPacket", "mqttClientProxyMessage", "heartbeat"] | None: ...
-
-global___ToRadio = ToRadio
-
-@typing.final
-class Compressed(google.protobuf.message.Message):
- """
- Compressed message payload
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PORTNUM_FIELD_NUMBER: builtins.int
- DATA_FIELD_NUMBER: builtins.int
- portnum: meshtastic.protobuf.portnums_pb2.PortNum.ValueType
- """
- PortNum to determine the how to handle the compressed payload.
- """
- data: builtins.bytes
- """
- Compressed data.
- """
- def __init__(
- self,
- *,
- portnum: meshtastic.protobuf.portnums_pb2.PortNum.ValueType = ...,
- data: builtins.bytes = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["data", b"data", "portnum", b"portnum"]) -> None: ...
-
-global___Compressed = Compressed
-
-@typing.final
-class NeighborInfo(google.protobuf.message.Message):
- """
- Full info on edges for a single node
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NODE_ID_FIELD_NUMBER: builtins.int
- LAST_SENT_BY_ID_FIELD_NUMBER: builtins.int
- NODE_BROADCAST_INTERVAL_SECS_FIELD_NUMBER: builtins.int
- NEIGHBORS_FIELD_NUMBER: builtins.int
- node_id: builtins.int
- """
- The node ID of the node sending info on its neighbors
- """
- last_sent_by_id: builtins.int
- """
- Field to pass neighbor info for the next sending cycle
- """
- node_broadcast_interval_secs: builtins.int
- """
- Broadcast interval of the represented node (in seconds)
- """
- @property
- def neighbors(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Neighbor]:
- """
- The list of out edges from this node
- """
-
- def __init__(
- self,
- *,
- node_id: builtins.int = ...,
- last_sent_by_id: builtins.int = ...,
- node_broadcast_interval_secs: builtins.int = ...,
- neighbors: collections.abc.Iterable[global___Neighbor] | None = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["last_sent_by_id", b"last_sent_by_id", "neighbors", b"neighbors", "node_broadcast_interval_secs", b"node_broadcast_interval_secs", "node_id", b"node_id"]) -> None: ...
-
-global___NeighborInfo = NeighborInfo
-
-@typing.final
-class Neighbor(google.protobuf.message.Message):
- """
- A single edge in the mesh
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NODE_ID_FIELD_NUMBER: builtins.int
- SNR_FIELD_NUMBER: builtins.int
- LAST_RX_TIME_FIELD_NUMBER: builtins.int
- NODE_BROADCAST_INTERVAL_SECS_FIELD_NUMBER: builtins.int
- node_id: builtins.int
- """
- Node ID of neighbor
- """
- snr: builtins.float
- """
- SNR of last heard message
- """
- last_rx_time: builtins.int
- """
- Reception time (in secs since 1970) of last message that was last sent by this ID.
- Note: this is for local storage only and will not be sent out over the mesh.
- """
- node_broadcast_interval_secs: builtins.int
- """
- Broadcast interval of this neighbor (in seconds).
- Note: this is for local storage only and will not be sent out over the mesh.
- """
- def __init__(
- self,
- *,
- node_id: builtins.int = ...,
- snr: builtins.float = ...,
- last_rx_time: builtins.int = ...,
- node_broadcast_interval_secs: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["last_rx_time", b"last_rx_time", "node_broadcast_interval_secs", b"node_broadcast_interval_secs", "node_id", b"node_id", "snr", b"snr"]) -> None: ...
-
-global___Neighbor = Neighbor
-
-@typing.final
-class DeviceMetadata(google.protobuf.message.Message):
- """
- Device metadata response
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- FIRMWARE_VERSION_FIELD_NUMBER: builtins.int
- DEVICE_STATE_VERSION_FIELD_NUMBER: builtins.int
- CANSHUTDOWN_FIELD_NUMBER: builtins.int
- HASWIFI_FIELD_NUMBER: builtins.int
- HASBLUETOOTH_FIELD_NUMBER: builtins.int
- HASETHERNET_FIELD_NUMBER: builtins.int
- ROLE_FIELD_NUMBER: builtins.int
- POSITION_FLAGS_FIELD_NUMBER: builtins.int
- HW_MODEL_FIELD_NUMBER: builtins.int
- HASREMOTEHARDWARE_FIELD_NUMBER: builtins.int
- HASPKC_FIELD_NUMBER: builtins.int
- EXCLUDED_MODULES_FIELD_NUMBER: builtins.int
- firmware_version: builtins.str
- """
- Device firmware version string
- """
- device_state_version: builtins.int
- """
- Device state version
- """
- canShutdown: builtins.bool
- """
- Indicates whether the device can shutdown CPU natively or via power management chip
- """
- hasWifi: builtins.bool
- """
- Indicates that the device has native wifi capability
- """
- hasBluetooth: builtins.bool
- """
- Indicates that the device has native bluetooth capability
- """
- hasEthernet: builtins.bool
- """
- Indicates that the device has an ethernet peripheral
- """
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType
- """
- Indicates that the device's role in the mesh
- """
- position_flags: builtins.int
- """
- Indicates the device's current enabled position flags
- """
- hw_model: global___HardwareModel.ValueType
- """
- Device hardware model
- """
- hasRemoteHardware: builtins.bool
- """
- Has Remote Hardware enabled
- """
- hasPKC: builtins.bool
- """
- Has PKC capabilities
- """
- excluded_modules: builtins.int
- """
- Bit field of boolean for excluded modules
- (bitwise OR of ExcludedModules)
- """
- def __init__(
- self,
- *,
- firmware_version: builtins.str = ...,
- device_state_version: builtins.int = ...,
- canShutdown: builtins.bool = ...,
- hasWifi: builtins.bool = ...,
- hasBluetooth: builtins.bool = ...,
- hasEthernet: builtins.bool = ...,
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType = ...,
- position_flags: builtins.int = ...,
- hw_model: global___HardwareModel.ValueType = ...,
- hasRemoteHardware: builtins.bool = ...,
- hasPKC: builtins.bool = ...,
- excluded_modules: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["canShutdown", b"canShutdown", "device_state_version", b"device_state_version", "excluded_modules", b"excluded_modules", "firmware_version", b"firmware_version", "hasBluetooth", b"hasBluetooth", "hasEthernet", b"hasEthernet", "hasPKC", b"hasPKC", "hasRemoteHardware", b"hasRemoteHardware", "hasWifi", b"hasWifi", "hw_model", b"hw_model", "position_flags", b"position_flags", "role", b"role"]) -> None: ...
-
-global___DeviceMetadata = DeviceMetadata
-
-@typing.final
-class Heartbeat(google.protobuf.message.Message):
- """
- A heartbeat message is sent to the node from the client to keep the connection alive.
- This is currently only needed to keep serial connections alive, but can be used by any PhoneAPI.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NONCE_FIELD_NUMBER: builtins.int
- nonce: builtins.int
- """
- The nonce of the heartbeat message
- """
- def __init__(
- self,
- *,
- nonce: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["nonce", b"nonce"]) -> None: ...
-
-global___Heartbeat = Heartbeat
-
-@typing.final
-class NodeRemoteHardwarePin(google.protobuf.message.Message):
- """
- RemoteHardwarePins associated with a node
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- NODE_NUM_FIELD_NUMBER: builtins.int
- PIN_FIELD_NUMBER: builtins.int
- node_num: builtins.int
- """
- The node_num exposing the available gpio pin
- """
- @property
- def pin(self) -> meshtastic.protobuf.module_config_pb2.RemoteHardwarePin:
- """
- The the available gpio pin for usage with RemoteHardware module
- """
-
- def __init__(
- self,
- *,
- node_num: builtins.int = ...,
- pin: meshtastic.protobuf.module_config_pb2.RemoteHardwarePin | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["pin", b"pin"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["node_num", b"node_num", "pin", b"pin"]) -> None: ...
-
-global___NodeRemoteHardwarePin = NodeRemoteHardwarePin
-
-@typing.final
-class ChunkedPayload(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PAYLOAD_ID_FIELD_NUMBER: builtins.int
- CHUNK_COUNT_FIELD_NUMBER: builtins.int
- CHUNK_INDEX_FIELD_NUMBER: builtins.int
- PAYLOAD_CHUNK_FIELD_NUMBER: builtins.int
- payload_id: builtins.int
- """
- The ID of the entire payload
- """
- chunk_count: builtins.int
- """
- The total number of chunks in the payload
- """
- chunk_index: builtins.int
- """
- The current chunk index in the total
- """
- payload_chunk: builtins.bytes
- """
- The binary data of the current chunk
- """
- def __init__(
- self,
- *,
- payload_id: builtins.int = ...,
- chunk_count: builtins.int = ...,
- chunk_index: builtins.int = ...,
- payload_chunk: builtins.bytes = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["chunk_count", b"chunk_count", "chunk_index", b"chunk_index", "payload_chunk", b"payload_chunk", "payload_id", b"payload_id"]) -> None: ...
-
-global___ChunkedPayload = ChunkedPayload
-
-@typing.final
-class resend_chunks(google.protobuf.message.Message):
- """
- Wrapper message for broken repeated oneof support
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CHUNKS_FIELD_NUMBER: builtins.int
- @property
- def chunks(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
- def __init__(
- self,
- *,
- chunks: collections.abc.Iterable[builtins.int] | None = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["chunks", b"chunks"]) -> None: ...
-
-global___resend_chunks = resend_chunks
-
-@typing.final
-class ChunkedPayloadResponse(google.protobuf.message.Message):
- """
- Responses to a ChunkedPayload request
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PAYLOAD_ID_FIELD_NUMBER: builtins.int
- REQUEST_TRANSFER_FIELD_NUMBER: builtins.int
- ACCEPT_TRANSFER_FIELD_NUMBER: builtins.int
- RESEND_CHUNKS_FIELD_NUMBER: builtins.int
- payload_id: builtins.int
- """
- The ID of the entire payload
- """
- request_transfer: builtins.bool
- """
- Request to transfer chunked payload
- """
- accept_transfer: builtins.bool
- """
- Accept the transfer chunked payload
- """
- @property
- def resend_chunks(self) -> global___resend_chunks:
- """
- Request missing indexes in the chunked payload
- """
-
- def __init__(
- self,
- *,
- payload_id: builtins.int = ...,
- request_transfer: builtins.bool = ...,
- accept_transfer: builtins.bool = ...,
- resend_chunks: global___resend_chunks | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["accept_transfer", b"accept_transfer", "payload_variant", b"payload_variant", "request_transfer", b"request_transfer", "resend_chunks", b"resend_chunks"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["accept_transfer", b"accept_transfer", "payload_id", b"payload_id", "payload_variant", b"payload_variant", "request_transfer", b"request_transfer", "resend_chunks", b"resend_chunks"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["request_transfer", "accept_transfer", "resend_chunks"] | None: ...
-
-global___ChunkedPayloadResponse = ChunkedPayloadResponse
+from meshtastic.protobuf import channel_pb2 as _channel_pb2
+from meshtastic.protobuf import config_pb2 as _config_pb2
+from meshtastic.protobuf import device_ui_pb2 as _device_ui_pb2
+from meshtastic.protobuf import module_config_pb2 as _module_config_pb2
+from meshtastic.protobuf import portnums_pb2 as _portnums_pb2
+from meshtastic.protobuf import telemetry_pb2 as _telemetry_pb2
+from meshtastic.protobuf import xmodem_pb2 as _xmodem_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+AMBIENTLIGHTING_CONFIG: ExcludedModules
+ANDROID_SIM: HardwareModel
+AUDIO_CONFIG: ExcludedModules
+BETAFPV_2400_TX: HardwareModel
+BETAFPV_900_NANO_TX: HardwareModel
+BLUETOOTH_CONFIG: ExcludedModules
+BROWNOUT: CriticalErrorCode
+BURNING_MAN: FirmwareEdition
+CANARYONE: HardwareModel
+CANNEDMSG_CONFIG: ExcludedModules
+CDEBYTE_EORA_S3: HardwareModel
+CHATTER_2: HardwareModel
+CROWPANEL: HardwareModel
+DATA_PAYLOAD_LEN: Constants
+DEFCON: FirmwareEdition
+DESCRIPTOR: _descriptor.FileDescriptor
+DETECTIONSENSOR_CONFIG: ExcludedModules
+DIY_EDITION: FirmwareEdition
+DIY_V1: HardwareModel
+DR_DEV: HardwareModel
+EBYTE_ESP32_S3: HardwareModel
+ESP32_S3_PICO: HardwareModel
+EXCLUDED_NONE: ExcludedModules
+EXTNOTIF_CONFIG: ExcludedModules
+FLASH_CORRUPTION_RECOVERABLE: CriticalErrorCode
+FLASH_CORRUPTION_UNRECOVERABLE: CriticalErrorCode
+GENIEBLOCKS: HardwareModel
+HAMVENTION: FirmwareEdition
+HELTEC_CAPSULE_SENSOR_V3: HardwareModel
+HELTEC_HRU_3601: HardwareModel
+HELTEC_HT62: HardwareModel
+HELTEC_MESH_NODE_T096: HardwareModel
+HELTEC_MESH_NODE_T1: HardwareModel
+HELTEC_MESH_NODE_T114: HardwareModel
+HELTEC_MESH_POCKET: HardwareModel
+HELTEC_MESH_SOLAR: HardwareModel
+HELTEC_SENSOR_HUB: HardwareModel
+HELTEC_V1: HardwareModel
+HELTEC_V2_0: HardwareModel
+HELTEC_V2_1: HardwareModel
+HELTEC_V3: HardwareModel
+HELTEC_V4: HardwareModel
+HELTEC_V4_R8: HardwareModel
+HELTEC_VISION_MASTER_E213: HardwareModel
+HELTEC_VISION_MASTER_E290: HardwareModel
+HELTEC_VISION_MASTER_T190: HardwareModel
+HELTEC_WIRELESS_BRIDGE: HardwareModel
+HELTEC_WIRELESS_PAPER: HardwareModel
+HELTEC_WIRELESS_PAPER_V1_0: HardwareModel
+HELTEC_WIRELESS_TRACKER: HardwareModel
+HELTEC_WIRELESS_TRACKER_V1_0: HardwareModel
+HELTEC_WIRELESS_TRACKER_V2: HardwareModel
+HELTEC_WSL_V3: HardwareModel
+INVALID_RADIO_SETTING: CriticalErrorCode
+LILYGO_TBEAM_S3_CORE: HardwareModel
+LINK_32: HardwareModel
+LORA_RELAY_V1: HardwareModel
+LORA_TYPE: HardwareModel
+M5STACK: HardwareModel
+M5STACK_C6L: HardwareModel
+M5STACK_CARDPUTER_ADV: HardwareModel
+M5STACK_CORE2: HardwareModel
+M5STACK_COREBASIC: HardwareModel
+M5STACK_CORES3: HardwareModel
+M5STACK_RESERVED: HardwareModel
+ME25LS01_4Y10TD: HardwareModel
+MESHLINK: HardwareModel
+MESHSTICK_1262: HardwareModel
+MESH_TAB: HardwareModel
+MINI_EPAPER_S3: HardwareModel
+MQTT_CONFIG: ExcludedModules
+MS24SF1: HardwareModel
+MUZI_BASE: HardwareModel
+MUZI_R1_NEO: HardwareModel
+NANO_G1: HardwareModel
+NANO_G1_EXPLORER: HardwareModel
+NANO_G2_ULTRA: HardwareModel
+NEIGHBORINFO_CONFIG: ExcludedModules
+NETWORK_CONFIG: ExcludedModules
+NOMADSTAR_METEOR_PRO: HardwareModel
+NONE: CriticalErrorCode
+NO_AXP192: CriticalErrorCode
+NO_RADIO: CriticalErrorCode
+NRF52840_PCA10059: HardwareModel
+NRF52_PROMICRO_DIY: HardwareModel
+NRF52_UNKNOWN: HardwareModel
+OPEN_SAUCE: FirmwareEdition
+PAXCOUNTER_CONFIG: ExcludedModules
+PICOMPUTER_S3: HardwareModel
+PORTDUINO: HardwareModel
+PPR: HardwareModel
+PRIVATE_HW: HardwareModel
+RADIOMASTER_900_BANDIT: HardwareModel
+RADIOMASTER_900_BANDIT_NANO: HardwareModel
+RADIO_SPI_BUG: CriticalErrorCode
+RAK11200: HardwareModel
+RAK11310: HardwareModel
+RAK2560: HardwareModel
+RAK3172: HardwareModel
+RAK3312: HardwareModel
+RAK3401: HardwareModel
+RAK4631: HardwareModel
+RAK6421: HardwareModel
+RANGETEST_CONFIG: ExcludedModules
+REMOTEHARDWARE_CONFIG: ExcludedModules
+ROUTASTIC: HardwareModel
+RP2040_FEATHER_RFM95: HardwareModel
+RP2040_LORA: HardwareModel
+RPI_PICO: HardwareModel
+RPI_PICO2: HardwareModel
+SEEED_SOLAR_NODE: HardwareModel
+SEEED_WIO_TRACKER_L1: HardwareModel
+SEEED_WIO_TRACKER_L1_EINK: HardwareModel
+SEEED_XIAO_S3: HardwareModel
+SENSECAP_INDICATOR: HardwareModel
+SENSELORA_RP2040: HardwareModel
+SENSELORA_S3: HardwareModel
+SERIAL_CONFIG: ExcludedModules
+SLEEP_ENTER_WAIT: CriticalErrorCode
+SMART_CITIZEN: FirmwareEdition
+STATION_G1: HardwareModel
+STATION_G2: HardwareModel
+STATION_G3: HardwareModel
+STOREFORWARD_CONFIG: ExcludedModules
+SX1262_FAILURE: CriticalErrorCode
+T5_S3_EPAPER_PRO: HardwareModel
+TBEAM: HardwareModel
+TBEAM_1_WATT: HardwareModel
+TBEAM_BPF: HardwareModel
+TBEAM_V0P7: HardwareModel
+TDISPLAY_S3_PRO: HardwareModel
+TD_LORAC: HardwareModel
+TELEMETRY_CONFIG: ExcludedModules
+THINKNODE_M1: HardwareModel
+THINKNODE_M2: HardwareModel
+THINKNODE_M3: HardwareModel
+THINKNODE_M4: HardwareModel
+THINKNODE_M5: HardwareModel
+THINKNODE_M6: HardwareModel
+THINKNODE_M7: HardwareModel
+THINKNODE_M8: HardwareModel
+THINKNODE_M9: HardwareModel
+TLORA_C6: HardwareModel
+TLORA_T3_S3: HardwareModel
+TLORA_V1: HardwareModel
+TLORA_V1_1P3: HardwareModel
+TLORA_V2: HardwareModel
+TLORA_V2_1_1P6: HardwareModel
+TLORA_V2_1_1P8: HardwareModel
+TRACKER_T1000_E: HardwareModel
+TRACKER_T1000_E_PRO: HardwareModel
+TRANSMIT_FAILED: CriticalErrorCode
+TWC_MESH_V4: HardwareModel
+TX_WATCHDOG: CriticalErrorCode
+T_DECK: HardwareModel
+T_DECK_PRO: HardwareModel
+T_ECHO: HardwareModel
+T_ECHO_CARD: HardwareModel
+T_ECHO_LITE: HardwareModel
+T_ECHO_PLUS: HardwareModel
+T_ETH_ELITE: HardwareModel
+T_IMPULSE_PLUS: HardwareModel
+T_LORA_PAGER: HardwareModel
+T_WATCH_S3: HardwareModel
+T_WATCH_ULTRA: HardwareModel
+UBLOX_UNIT_FAILED: CriticalErrorCode
+UNPHONE: HardwareModel
+UNSET: HardwareModel
+UNSPECIFIED: CriticalErrorCode
+VANILLA: FirmwareEdition
+WIO_E5: HardwareModel
+WIO_WM1110: HardwareModel
+WIPHONE: HardwareModel
+WISMESH_TAG: HardwareModel
+WISMESH_TAP: HardwareModel
+WISMESH_TAP_V2: HardwareModel
+XIAO_NRF52_KIT: HardwareModel
+ZERO: Constants
+
+class ChunkedPayload(_message.Message):
+ __slots__ = ["chunk_count", "chunk_index", "payload_chunk", "payload_id"]
+ CHUNK_COUNT_FIELD_NUMBER: _ClassVar[int]
+ CHUNK_INDEX_FIELD_NUMBER: _ClassVar[int]
+ PAYLOAD_CHUNK_FIELD_NUMBER: _ClassVar[int]
+ PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
+ chunk_count: int
+ chunk_index: int
+ payload_chunk: bytes
+ payload_id: int
+ def __init__(self, payload_id: _Optional[int] = ..., chunk_count: _Optional[int] = ..., chunk_index: _Optional[int] = ..., payload_chunk: _Optional[bytes] = ...) -> None: ...
+
+class ChunkedPayloadResponse(_message.Message):
+ __slots__ = ["accept_transfer", "payload_id", "request_transfer", "resend_chunks"]
+ ACCEPT_TRANSFER_FIELD_NUMBER: _ClassVar[int]
+ PAYLOAD_ID_FIELD_NUMBER: _ClassVar[int]
+ REQUEST_TRANSFER_FIELD_NUMBER: _ClassVar[int]
+ RESEND_CHUNKS_FIELD_NUMBER: _ClassVar[int]
+ accept_transfer: bool
+ payload_id: int
+ request_transfer: bool
+ resend_chunks: resend_chunks
+ def __init__(self, payload_id: _Optional[int] = ..., request_transfer: bool = ..., accept_transfer: bool = ..., resend_chunks: _Optional[_Union[resend_chunks, _Mapping]] = ...) -> None: ...
+
+class ClientNotification(_message.Message):
+ __slots__ = ["duplicated_public_key", "key_verification_final", "key_verification_number_inform", "key_verification_number_request", "level", "low_entropy_key", "message", "reply_id", "time"]
+ DUPLICATED_PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
+ KEY_VERIFICATION_FINAL_FIELD_NUMBER: _ClassVar[int]
+ KEY_VERIFICATION_NUMBER_INFORM_FIELD_NUMBER: _ClassVar[int]
+ KEY_VERIFICATION_NUMBER_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ LEVEL_FIELD_NUMBER: _ClassVar[int]
+ LOW_ENTROPY_KEY_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ REPLY_ID_FIELD_NUMBER: _ClassVar[int]
+ TIME_FIELD_NUMBER: _ClassVar[int]
+ duplicated_public_key: DuplicatedPublicKey
+ key_verification_final: KeyVerificationFinal
+ key_verification_number_inform: KeyVerificationNumberInform
+ key_verification_number_request: KeyVerificationNumberRequest
+ level: LogRecord.Level
+ low_entropy_key: LowEntropyKey
+ message: str
+ reply_id: int
+ time: int
+ def __init__(self, reply_id: _Optional[int] = ..., time: _Optional[int] = ..., level: _Optional[_Union[LogRecord.Level, str]] = ..., message: _Optional[str] = ..., key_verification_number_inform: _Optional[_Union[KeyVerificationNumberInform, _Mapping]] = ..., key_verification_number_request: _Optional[_Union[KeyVerificationNumberRequest, _Mapping]] = ..., key_verification_final: _Optional[_Union[KeyVerificationFinal, _Mapping]] = ..., duplicated_public_key: _Optional[_Union[DuplicatedPublicKey, _Mapping]] = ..., low_entropy_key: _Optional[_Union[LowEntropyKey, _Mapping]] = ...) -> None: ...
+
+class Compressed(_message.Message):
+ __slots__ = ["data", "portnum"]
+ DATA_FIELD_NUMBER: _ClassVar[int]
+ PORTNUM_FIELD_NUMBER: _ClassVar[int]
+ data: bytes
+ portnum: _portnums_pb2.PortNum
+ def __init__(self, portnum: _Optional[_Union[_portnums_pb2.PortNum, str]] = ..., data: _Optional[bytes] = ...) -> None: ...
+
+class Data(_message.Message):
+ __slots__ = ["bitfield", "dest", "emoji", "payload", "portnum", "reply_id", "request_id", "source", "want_response"]
+ BITFIELD_FIELD_NUMBER: _ClassVar[int]
+ DEST_FIELD_NUMBER: _ClassVar[int]
+ EMOJI_FIELD_NUMBER: _ClassVar[int]
+ PAYLOAD_FIELD_NUMBER: _ClassVar[int]
+ PORTNUM_FIELD_NUMBER: _ClassVar[int]
+ REPLY_ID_FIELD_NUMBER: _ClassVar[int]
+ REQUEST_ID_FIELD_NUMBER: _ClassVar[int]
+ SOURCE_FIELD_NUMBER: _ClassVar[int]
+ WANT_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ bitfield: int
+ dest: int
+ emoji: int
+ payload: bytes
+ portnum: _portnums_pb2.PortNum
+ reply_id: int
+ request_id: int
+ source: int
+ want_response: bool
+ def __init__(self, portnum: _Optional[_Union[_portnums_pb2.PortNum, str]] = ..., payload: _Optional[bytes] = ..., want_response: bool = ..., dest: _Optional[int] = ..., source: _Optional[int] = ..., request_id: _Optional[int] = ..., reply_id: _Optional[int] = ..., emoji: _Optional[int] = ..., bitfield: _Optional[int] = ...) -> None: ...
+
+class DeviceMetadata(_message.Message):
+ __slots__ = ["canShutdown", "device_state_version", "excluded_modules", "firmware_version", "hasBluetooth", "hasEthernet", "hasPKC", "hasRemoteHardware", "hasWifi", "hw_model", "position_flags", "role"]
+ CANSHUTDOWN_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_STATE_VERSION_FIELD_NUMBER: _ClassVar[int]
+ EXCLUDED_MODULES_FIELD_NUMBER: _ClassVar[int]
+ FIRMWARE_VERSION_FIELD_NUMBER: _ClassVar[int]
+ HASBLUETOOTH_FIELD_NUMBER: _ClassVar[int]
+ HASETHERNET_FIELD_NUMBER: _ClassVar[int]
+ HASPKC_FIELD_NUMBER: _ClassVar[int]
+ HASREMOTEHARDWARE_FIELD_NUMBER: _ClassVar[int]
+ HASWIFI_FIELD_NUMBER: _ClassVar[int]
+ HW_MODEL_FIELD_NUMBER: _ClassVar[int]
+ POSITION_FLAGS_FIELD_NUMBER: _ClassVar[int]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ canShutdown: bool
+ device_state_version: int
+ excluded_modules: int
+ firmware_version: str
+ hasBluetooth: bool
+ hasEthernet: bool
+ hasPKC: bool
+ hasRemoteHardware: bool
+ hasWifi: bool
+ hw_model: HardwareModel
+ position_flags: int
+ role: _config_pb2.Config.DeviceConfig.Role
+ def __init__(self, firmware_version: _Optional[str] = ..., device_state_version: _Optional[int] = ..., canShutdown: bool = ..., hasWifi: bool = ..., hasBluetooth: bool = ..., hasEthernet: bool = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., position_flags: _Optional[int] = ..., hw_model: _Optional[_Union[HardwareModel, str]] = ..., hasRemoteHardware: bool = ..., hasPKC: bool = ..., excluded_modules: _Optional[int] = ...) -> None: ...
+
+class DuplicatedPublicKey(_message.Message):
+ __slots__ = []
+ def __init__(self) -> None: ...
+
+class FileInfo(_message.Message):
+ __slots__ = ["file_name", "size_bytes"]
+ FILE_NAME_FIELD_NUMBER: _ClassVar[int]
+ SIZE_BYTES_FIELD_NUMBER: _ClassVar[int]
+ file_name: str
+ size_bytes: int
+ def __init__(self, file_name: _Optional[str] = ..., size_bytes: _Optional[int] = ...) -> None: ...
+
+class FromRadio(_message.Message):
+ __slots__ = ["channel", "clientNotification", "config", "config_complete_id", "deviceuiConfig", "fileInfo", "id", "lockdown_status", "log_record", "metadata", "moduleConfig", "mqttClientProxyMessage", "my_info", "node_info", "packet", "queueStatus", "rebooted", "xmodemPacket"]
+ CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ CLIENTNOTIFICATION_FIELD_NUMBER: _ClassVar[int]
+ CONFIG_COMPLETE_ID_FIELD_NUMBER: _ClassVar[int]
+ CONFIG_FIELD_NUMBER: _ClassVar[int]
+ DEVICEUICONFIG_FIELD_NUMBER: _ClassVar[int]
+ FILEINFO_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ LOCKDOWN_STATUS_FIELD_NUMBER: _ClassVar[int]
+ LOG_RECORD_FIELD_NUMBER: _ClassVar[int]
+ METADATA_FIELD_NUMBER: _ClassVar[int]
+ MODULECONFIG_FIELD_NUMBER: _ClassVar[int]
+ MQTTCLIENTPROXYMESSAGE_FIELD_NUMBER: _ClassVar[int]
+ MY_INFO_FIELD_NUMBER: _ClassVar[int]
+ NODE_INFO_FIELD_NUMBER: _ClassVar[int]
+ PACKET_FIELD_NUMBER: _ClassVar[int]
+ QUEUESTATUS_FIELD_NUMBER: _ClassVar[int]
+ REBOOTED_FIELD_NUMBER: _ClassVar[int]
+ XMODEMPACKET_FIELD_NUMBER: _ClassVar[int]
+ channel: _channel_pb2.Channel
+ clientNotification: ClientNotification
+ config: _config_pb2.Config
+ config_complete_id: int
+ deviceuiConfig: _device_ui_pb2.DeviceUIConfig
+ fileInfo: FileInfo
+ id: int
+ lockdown_status: LockdownStatus
+ log_record: LogRecord
+ metadata: DeviceMetadata
+ moduleConfig: _module_config_pb2.ModuleConfig
+ mqttClientProxyMessage: MqttClientProxyMessage
+ my_info: MyNodeInfo
+ node_info: NodeInfo
+ packet: MeshPacket
+ queueStatus: QueueStatus
+ rebooted: bool
+ xmodemPacket: _xmodem_pb2.XModem
+ def __init__(self, id: _Optional[int] = ..., packet: _Optional[_Union[MeshPacket, _Mapping]] = ..., my_info: _Optional[_Union[MyNodeInfo, _Mapping]] = ..., node_info: _Optional[_Union[NodeInfo, _Mapping]] = ..., config: _Optional[_Union[_config_pb2.Config, _Mapping]] = ..., log_record: _Optional[_Union[LogRecord, _Mapping]] = ..., config_complete_id: _Optional[int] = ..., rebooted: bool = ..., moduleConfig: _Optional[_Union[_module_config_pb2.ModuleConfig, _Mapping]] = ..., channel: _Optional[_Union[_channel_pb2.Channel, _Mapping]] = ..., queueStatus: _Optional[_Union[QueueStatus, _Mapping]] = ..., xmodemPacket: _Optional[_Union[_xmodem_pb2.XModem, _Mapping]] = ..., metadata: _Optional[_Union[DeviceMetadata, _Mapping]] = ..., mqttClientProxyMessage: _Optional[_Union[MqttClientProxyMessage, _Mapping]] = ..., fileInfo: _Optional[_Union[FileInfo, _Mapping]] = ..., clientNotification: _Optional[_Union[ClientNotification, _Mapping]] = ..., deviceuiConfig: _Optional[_Union[_device_ui_pb2.DeviceUIConfig, _Mapping]] = ..., lockdown_status: _Optional[_Union[LockdownStatus, _Mapping]] = ...) -> None: ...
+
+class Heartbeat(_message.Message):
+ __slots__ = ["nonce"]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ nonce: int
+ def __init__(self, nonce: _Optional[int] = ...) -> None: ...
+
+class KeyVerification(_message.Message):
+ __slots__ = ["hash1", "hash2", "nonce"]
+ HASH1_FIELD_NUMBER: _ClassVar[int]
+ HASH2_FIELD_NUMBER: _ClassVar[int]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ hash1: bytes
+ hash2: bytes
+ nonce: int
+ def __init__(self, nonce: _Optional[int] = ..., hash1: _Optional[bytes] = ..., hash2: _Optional[bytes] = ...) -> None: ...
+
+class KeyVerificationFinal(_message.Message):
+ __slots__ = ["isSender", "nonce", "remote_longname", "verification_characters"]
+ ISSENDER_FIELD_NUMBER: _ClassVar[int]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ REMOTE_LONGNAME_FIELD_NUMBER: _ClassVar[int]
+ VERIFICATION_CHARACTERS_FIELD_NUMBER: _ClassVar[int]
+ isSender: bool
+ nonce: int
+ remote_longname: str
+ verification_characters: str
+ def __init__(self, nonce: _Optional[int] = ..., remote_longname: _Optional[str] = ..., isSender: bool = ..., verification_characters: _Optional[str] = ...) -> None: ...
+
+class KeyVerificationNumberInform(_message.Message):
+ __slots__ = ["nonce", "remote_longname", "security_number"]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ REMOTE_LONGNAME_FIELD_NUMBER: _ClassVar[int]
+ SECURITY_NUMBER_FIELD_NUMBER: _ClassVar[int]
+ nonce: int
+ remote_longname: str
+ security_number: int
+ def __init__(self, nonce: _Optional[int] = ..., remote_longname: _Optional[str] = ..., security_number: _Optional[int] = ...) -> None: ...
+
+class KeyVerificationNumberRequest(_message.Message):
+ __slots__ = ["nonce", "remote_longname"]
+ NONCE_FIELD_NUMBER: _ClassVar[int]
+ REMOTE_LONGNAME_FIELD_NUMBER: _ClassVar[int]
+ nonce: int
+ remote_longname: str
+ def __init__(self, nonce: _Optional[int] = ..., remote_longname: _Optional[str] = ...) -> None: ...
+
+class LockdownStatus(_message.Message):
+ __slots__ = ["backoff_seconds", "boots_remaining", "lock_reason", "state", "valid_until_epoch"]
+ class State(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ BACKOFF_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ BOOTS_REMAINING_FIELD_NUMBER: _ClassVar[int]
+ LOCKED: LockdownStatus.State
+ LOCK_REASON_FIELD_NUMBER: _ClassVar[int]
+ NEEDS_PROVISION: LockdownStatus.State
+ STATE_FIELD_NUMBER: _ClassVar[int]
+ STATE_UNSPECIFIED: LockdownStatus.State
+ UNLOCKED: LockdownStatus.State
+ UNLOCK_FAILED: LockdownStatus.State
+ VALID_UNTIL_EPOCH_FIELD_NUMBER: _ClassVar[int]
+ backoff_seconds: int
+ boots_remaining: int
+ lock_reason: str
+ state: LockdownStatus.State
+ valid_until_epoch: int
+ def __init__(self, state: _Optional[_Union[LockdownStatus.State, str]] = ..., lock_reason: _Optional[str] = ..., boots_remaining: _Optional[int] = ..., valid_until_epoch: _Optional[int] = ..., backoff_seconds: _Optional[int] = ...) -> None: ...
+
+class LogRecord(_message.Message):
+ __slots__ = ["level", "message", "source", "time"]
+ class Level(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ CRITICAL: LogRecord.Level
+ DEBUG: LogRecord.Level
+ ERROR: LogRecord.Level
+ INFO: LogRecord.Level
+ LEVEL_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ SOURCE_FIELD_NUMBER: _ClassVar[int]
+ TIME_FIELD_NUMBER: _ClassVar[int]
+ TRACE: LogRecord.Level
+ UNSET: LogRecord.Level
+ WARNING: LogRecord.Level
+ level: LogRecord.Level
+ message: str
+ source: str
+ time: int
+ def __init__(self, message: _Optional[str] = ..., time: _Optional[int] = ..., source: _Optional[str] = ..., level: _Optional[_Union[LogRecord.Level, str]] = ...) -> None: ...
+
+class LowEntropyKey(_message.Message):
+ __slots__ = []
+ def __init__(self) -> None: ...
+
+class MeshPacket(_message.Message):
+ __slots__ = ["channel", "decoded", "delayed", "encrypted", "hop_limit", "hop_start", "id", "next_hop", "pki_encrypted", "priority", "public_key", "relay_node", "rx_rssi", "rx_snr", "rx_time", "to", "transport_mechanism", "tx_after", "via_mqtt", "want_ack"]
+ class Delayed(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Priority(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class TransportMechanism(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ACK: MeshPacket.Priority
+ ALERT: MeshPacket.Priority
+ BACKGROUND: MeshPacket.Priority
+ CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ DECODED_FIELD_NUMBER: _ClassVar[int]
+ DEFAULT: MeshPacket.Priority
+ DELAYED_BROADCAST: MeshPacket.Delayed
+ DELAYED_DIRECT: MeshPacket.Delayed
+ DELAYED_FIELD_NUMBER: _ClassVar[int]
+ ENCRYPTED_FIELD_NUMBER: _ClassVar[int]
+ FROM_FIELD_NUMBER: _ClassVar[int]
+ HIGH: MeshPacket.Priority
+ HOP_LIMIT_FIELD_NUMBER: _ClassVar[int]
+ HOP_START_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ MAX: MeshPacket.Priority
+ MIN: MeshPacket.Priority
+ NEXT_HOP_FIELD_NUMBER: _ClassVar[int]
+ NO_DELAY: MeshPacket.Delayed
+ PKI_ENCRYPTED_FIELD_NUMBER: _ClassVar[int]
+ PRIORITY_FIELD_NUMBER: _ClassVar[int]
+ PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
+ RELAY_NODE_FIELD_NUMBER: _ClassVar[int]
+ RELIABLE: MeshPacket.Priority
+ RESPONSE: MeshPacket.Priority
+ RX_RSSI_FIELD_NUMBER: _ClassVar[int]
+ RX_SNR_FIELD_NUMBER: _ClassVar[int]
+ RX_TIME_FIELD_NUMBER: _ClassVar[int]
+ TO_FIELD_NUMBER: _ClassVar[int]
+ TRANSPORT_API: MeshPacket.TransportMechanism
+ TRANSPORT_INTERNAL: MeshPacket.TransportMechanism
+ TRANSPORT_LORA: MeshPacket.TransportMechanism
+ TRANSPORT_LORA_ALT1: MeshPacket.TransportMechanism
+ TRANSPORT_LORA_ALT2: MeshPacket.TransportMechanism
+ TRANSPORT_LORA_ALT3: MeshPacket.TransportMechanism
+ TRANSPORT_MECHANISM_FIELD_NUMBER: _ClassVar[int]
+ TRANSPORT_MQTT: MeshPacket.TransportMechanism
+ TRANSPORT_MULTICAST_UDP: MeshPacket.TransportMechanism
+ TX_AFTER_FIELD_NUMBER: _ClassVar[int]
+ UNSET: MeshPacket.Priority
+ VIA_MQTT_FIELD_NUMBER: _ClassVar[int]
+ WANT_ACK_FIELD_NUMBER: _ClassVar[int]
+ channel: int
+ decoded: Data
+ delayed: MeshPacket.Delayed
+ encrypted: bytes
+ hop_limit: int
+ hop_start: int
+ id: int
+ next_hop: int
+ pki_encrypted: bool
+ priority: MeshPacket.Priority
+ public_key: bytes
+ relay_node: int
+ rx_rssi: int
+ rx_snr: float
+ rx_time: int
+ to: int
+ transport_mechanism: MeshPacket.TransportMechanism
+ tx_after: int
+ via_mqtt: bool
+ want_ack: bool
+ def __init__(self, to: _Optional[int] = ..., channel: _Optional[int] = ..., decoded: _Optional[_Union[Data, _Mapping]] = ..., encrypted: _Optional[bytes] = ..., id: _Optional[int] = ..., rx_time: _Optional[int] = ..., rx_snr: _Optional[float] = ..., hop_limit: _Optional[int] = ..., want_ack: bool = ..., priority: _Optional[_Union[MeshPacket.Priority, str]] = ..., rx_rssi: _Optional[int] = ..., delayed: _Optional[_Union[MeshPacket.Delayed, str]] = ..., via_mqtt: bool = ..., hop_start: _Optional[int] = ..., public_key: _Optional[bytes] = ..., pki_encrypted: bool = ..., next_hop: _Optional[int] = ..., relay_node: _Optional[int] = ..., tx_after: _Optional[int] = ..., transport_mechanism: _Optional[_Union[MeshPacket.TransportMechanism, str]] = ..., **kwargs) -> None: ...
+
+class MqttClientProxyMessage(_message.Message):
+ __slots__ = ["data", "retained", "text", "topic"]
+ DATA_FIELD_NUMBER: _ClassVar[int]
+ RETAINED_FIELD_NUMBER: _ClassVar[int]
+ TEXT_FIELD_NUMBER: _ClassVar[int]
+ TOPIC_FIELD_NUMBER: _ClassVar[int]
+ data: bytes
+ retained: bool
+ text: str
+ topic: str
+ def __init__(self, topic: _Optional[str] = ..., data: _Optional[bytes] = ..., text: _Optional[str] = ..., retained: bool = ...) -> None: ...
+
+class MyNodeInfo(_message.Message):
+ __slots__ = ["device_id", "firmware_edition", "min_app_version", "my_node_num", "nodedb_count", "pio_env", "reboot_count"]
+ DEVICE_ID_FIELD_NUMBER: _ClassVar[int]
+ FIRMWARE_EDITION_FIELD_NUMBER: _ClassVar[int]
+ MIN_APP_VERSION_FIELD_NUMBER: _ClassVar[int]
+ MY_NODE_NUM_FIELD_NUMBER: _ClassVar[int]
+ NODEDB_COUNT_FIELD_NUMBER: _ClassVar[int]
+ PIO_ENV_FIELD_NUMBER: _ClassVar[int]
+ REBOOT_COUNT_FIELD_NUMBER: _ClassVar[int]
+ device_id: bytes
+ firmware_edition: FirmwareEdition
+ min_app_version: int
+ my_node_num: int
+ nodedb_count: int
+ pio_env: str
+ reboot_count: int
+ def __init__(self, my_node_num: _Optional[int] = ..., reboot_count: _Optional[int] = ..., min_app_version: _Optional[int] = ..., device_id: _Optional[bytes] = ..., pio_env: _Optional[str] = ..., firmware_edition: _Optional[_Union[FirmwareEdition, str]] = ..., nodedb_count: _Optional[int] = ...) -> None: ...
+
+class Neighbor(_message.Message):
+ __slots__ = ["last_rx_time", "node_broadcast_interval_secs", "node_id", "snr"]
+ LAST_RX_TIME_FIELD_NUMBER: _ClassVar[int]
+ NODE_BROADCAST_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
+ NODE_ID_FIELD_NUMBER: _ClassVar[int]
+ SNR_FIELD_NUMBER: _ClassVar[int]
+ last_rx_time: int
+ node_broadcast_interval_secs: int
+ node_id: int
+ snr: float
+ def __init__(self, node_id: _Optional[int] = ..., snr: _Optional[float] = ..., last_rx_time: _Optional[int] = ..., node_broadcast_interval_secs: _Optional[int] = ...) -> None: ...
+
+class NeighborInfo(_message.Message):
+ __slots__ = ["last_sent_by_id", "neighbors", "node_broadcast_interval_secs", "node_id"]
+ LAST_SENT_BY_ID_FIELD_NUMBER: _ClassVar[int]
+ NEIGHBORS_FIELD_NUMBER: _ClassVar[int]
+ NODE_BROADCAST_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
+ NODE_ID_FIELD_NUMBER: _ClassVar[int]
+ last_sent_by_id: int
+ neighbors: _containers.RepeatedCompositeFieldContainer[Neighbor]
+ node_broadcast_interval_secs: int
+ node_id: int
+ def __init__(self, node_id: _Optional[int] = ..., last_sent_by_id: _Optional[int] = ..., node_broadcast_interval_secs: _Optional[int] = ..., neighbors: _Optional[_Iterable[_Union[Neighbor, _Mapping]]] = ...) -> None: ...
+
+class NodeInfo(_message.Message):
+ __slots__ = ["channel", "device_metrics", "hops_away", "is_favorite", "is_ignored", "is_key_manually_verified", "is_muted", "last_heard", "num", "position", "snr", "user", "via_mqtt"]
+ CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_METRICS_FIELD_NUMBER: _ClassVar[int]
+ HOPS_AWAY_FIELD_NUMBER: _ClassVar[int]
+ IS_FAVORITE_FIELD_NUMBER: _ClassVar[int]
+ IS_IGNORED_FIELD_NUMBER: _ClassVar[int]
+ IS_KEY_MANUALLY_VERIFIED_FIELD_NUMBER: _ClassVar[int]
+ IS_MUTED_FIELD_NUMBER: _ClassVar[int]
+ LAST_HEARD_FIELD_NUMBER: _ClassVar[int]
+ NUM_FIELD_NUMBER: _ClassVar[int]
+ POSITION_FIELD_NUMBER: _ClassVar[int]
+ SNR_FIELD_NUMBER: _ClassVar[int]
+ USER_FIELD_NUMBER: _ClassVar[int]
+ VIA_MQTT_FIELD_NUMBER: _ClassVar[int]
+ channel: int
+ device_metrics: _telemetry_pb2.DeviceMetrics
+ hops_away: int
+ is_favorite: bool
+ is_ignored: bool
+ is_key_manually_verified: bool
+ is_muted: bool
+ last_heard: int
+ num: int
+ position: Position
+ snr: float
+ user: User
+ via_mqtt: bool
+ def __init__(self, num: _Optional[int] = ..., user: _Optional[_Union[User, _Mapping]] = ..., position: _Optional[_Union[Position, _Mapping]] = ..., snr: _Optional[float] = ..., last_heard: _Optional[int] = ..., device_metrics: _Optional[_Union[_telemetry_pb2.DeviceMetrics, _Mapping]] = ..., channel: _Optional[int] = ..., via_mqtt: bool = ..., hops_away: _Optional[int] = ..., is_favorite: bool = ..., is_ignored: bool = ..., is_key_manually_verified: bool = ..., is_muted: bool = ...) -> None: ...
+
+class NodeRemoteHardwarePin(_message.Message):
+ __slots__ = ["node_num", "pin"]
+ NODE_NUM_FIELD_NUMBER: _ClassVar[int]
+ PIN_FIELD_NUMBER: _ClassVar[int]
+ node_num: int
+ pin: _module_config_pb2.RemoteHardwarePin
+ def __init__(self, node_num: _Optional[int] = ..., pin: _Optional[_Union[_module_config_pb2.RemoteHardwarePin, _Mapping]] = ...) -> None: ...
+
+class Position(_message.Message):
+ __slots__ = ["HDOP", "PDOP", "VDOP", "altitude", "altitude_geoidal_separation", "altitude_hae", "altitude_source", "fix_quality", "fix_type", "gps_accuracy", "ground_speed", "ground_track", "latitude_i", "location_source", "longitude_i", "next_update", "precision_bits", "sats_in_view", "sensor_id", "seq_number", "time", "timestamp", "timestamp_millis_adjust"]
+ class AltSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class LocSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ ALTITUDE_GEOIDAL_SEPARATION_FIELD_NUMBER: _ClassVar[int]
+ ALTITUDE_HAE_FIELD_NUMBER: _ClassVar[int]
+ ALTITUDE_SOURCE_FIELD_NUMBER: _ClassVar[int]
+ ALT_BAROMETRIC: Position.AltSource
+ ALT_EXTERNAL: Position.AltSource
+ ALT_INTERNAL: Position.AltSource
+ ALT_MANUAL: Position.AltSource
+ ALT_UNSET: Position.AltSource
+ FIX_QUALITY_FIELD_NUMBER: _ClassVar[int]
+ FIX_TYPE_FIELD_NUMBER: _ClassVar[int]
+ GPS_ACCURACY_FIELD_NUMBER: _ClassVar[int]
+ GROUND_SPEED_FIELD_NUMBER: _ClassVar[int]
+ GROUND_TRACK_FIELD_NUMBER: _ClassVar[int]
+ HDOP: int
+ HDOP_FIELD_NUMBER: _ClassVar[int]
+ LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LOCATION_SOURCE_FIELD_NUMBER: _ClassVar[int]
+ LOC_EXTERNAL: Position.LocSource
+ LOC_INTERNAL: Position.LocSource
+ LOC_MANUAL: Position.LocSource
+ LOC_UNSET: Position.LocSource
+ LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ NEXT_UPDATE_FIELD_NUMBER: _ClassVar[int]
+ PDOP: int
+ PDOP_FIELD_NUMBER: _ClassVar[int]
+ PRECISION_BITS_FIELD_NUMBER: _ClassVar[int]
+ SATS_IN_VIEW_FIELD_NUMBER: _ClassVar[int]
+ SENSOR_ID_FIELD_NUMBER: _ClassVar[int]
+ SEQ_NUMBER_FIELD_NUMBER: _ClassVar[int]
+ TIMESTAMP_FIELD_NUMBER: _ClassVar[int]
+ TIMESTAMP_MILLIS_ADJUST_FIELD_NUMBER: _ClassVar[int]
+ TIME_FIELD_NUMBER: _ClassVar[int]
+ VDOP: int
+ VDOP_FIELD_NUMBER: _ClassVar[int]
+ altitude: int
+ altitude_geoidal_separation: int
+ altitude_hae: int
+ altitude_source: Position.AltSource
+ fix_quality: int
+ fix_type: int
+ gps_accuracy: int
+ ground_speed: int
+ ground_track: int
+ latitude_i: int
+ location_source: Position.LocSource
+ longitude_i: int
+ next_update: int
+ precision_bits: int
+ sats_in_view: int
+ sensor_id: int
+ seq_number: int
+ time: int
+ timestamp: int
+ timestamp_millis_adjust: int
+ def __init__(self, latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., time: _Optional[int] = ..., location_source: _Optional[_Union[Position.LocSource, str]] = ..., altitude_source: _Optional[_Union[Position.AltSource, str]] = ..., timestamp: _Optional[int] = ..., timestamp_millis_adjust: _Optional[int] = ..., altitude_hae: _Optional[int] = ..., altitude_geoidal_separation: _Optional[int] = ..., PDOP: _Optional[int] = ..., HDOP: _Optional[int] = ..., VDOP: _Optional[int] = ..., gps_accuracy: _Optional[int] = ..., ground_speed: _Optional[int] = ..., ground_track: _Optional[int] = ..., fix_quality: _Optional[int] = ..., fix_type: _Optional[int] = ..., sats_in_view: _Optional[int] = ..., sensor_id: _Optional[int] = ..., next_update: _Optional[int] = ..., seq_number: _Optional[int] = ..., precision_bits: _Optional[int] = ...) -> None: ...
+
+class QueueStatus(_message.Message):
+ __slots__ = ["free", "maxlen", "mesh_packet_id", "res"]
+ FREE_FIELD_NUMBER: _ClassVar[int]
+ MAXLEN_FIELD_NUMBER: _ClassVar[int]
+ MESH_PACKET_ID_FIELD_NUMBER: _ClassVar[int]
+ RES_FIELD_NUMBER: _ClassVar[int]
+ free: int
+ maxlen: int
+ mesh_packet_id: int
+ res: int
+ def __init__(self, res: _Optional[int] = ..., free: _Optional[int] = ..., maxlen: _Optional[int] = ..., mesh_packet_id: _Optional[int] = ...) -> None: ...
+
+class RemoteShell(_message.Message):
+ __slots__ = ["ack_seq", "cols", "flags", "last_rx_seq", "last_tx_seq", "op", "payload", "rows", "seq", "session_id"]
+ class OpCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ACK: RemoteShell.OpCode
+ ACK_SEQ_FIELD_NUMBER: _ClassVar[int]
+ CLOSE: RemoteShell.OpCode
+ CLOSED: RemoteShell.OpCode
+ COLS_FIELD_NUMBER: _ClassVar[int]
+ ERROR: RemoteShell.OpCode
+ FLAGS_FIELD_NUMBER: _ClassVar[int]
+ INPUT: RemoteShell.OpCode
+ LAST_RX_SEQ_FIELD_NUMBER: _ClassVar[int]
+ LAST_TX_SEQ_FIELD_NUMBER: _ClassVar[int]
+ OPEN: RemoteShell.OpCode
+ OPEN_OK: RemoteShell.OpCode
+ OP_FIELD_NUMBER: _ClassVar[int]
+ OP_UNSET: RemoteShell.OpCode
+ OUTPUT: RemoteShell.OpCode
+ PAYLOAD_FIELD_NUMBER: _ClassVar[int]
+ PING: RemoteShell.OpCode
+ PONG: RemoteShell.OpCode
+ RESIZE: RemoteShell.OpCode
+ ROWS_FIELD_NUMBER: _ClassVar[int]
+ SEQ_FIELD_NUMBER: _ClassVar[int]
+ SESSION_ID_FIELD_NUMBER: _ClassVar[int]
+ ack_seq: int
+ cols: int
+ flags: int
+ last_rx_seq: int
+ last_tx_seq: int
+ op: RemoteShell.OpCode
+ payload: bytes
+ rows: int
+ seq: int
+ session_id: int
+ def __init__(self, op: _Optional[_Union[RemoteShell.OpCode, str]] = ..., session_id: _Optional[int] = ..., seq: _Optional[int] = ..., ack_seq: _Optional[int] = ..., payload: _Optional[bytes] = ..., cols: _Optional[int] = ..., rows: _Optional[int] = ..., flags: _Optional[int] = ..., last_tx_seq: _Optional[int] = ..., last_rx_seq: _Optional[int] = ...) -> None: ...
+
+class RouteDiscovery(_message.Message):
+ __slots__ = ["route", "route_back", "snr_back", "snr_towards"]
+ ROUTE_BACK_FIELD_NUMBER: _ClassVar[int]
+ ROUTE_FIELD_NUMBER: _ClassVar[int]
+ SNR_BACK_FIELD_NUMBER: _ClassVar[int]
+ SNR_TOWARDS_FIELD_NUMBER: _ClassVar[int]
+ route: _containers.RepeatedScalarFieldContainer[int]
+ route_back: _containers.RepeatedScalarFieldContainer[int]
+ snr_back: _containers.RepeatedScalarFieldContainer[int]
+ snr_towards: _containers.RepeatedScalarFieldContainer[int]
+ def __init__(self, route: _Optional[_Iterable[int]] = ..., snr_towards: _Optional[_Iterable[int]] = ..., route_back: _Optional[_Iterable[int]] = ..., snr_back: _Optional[_Iterable[int]] = ...) -> None: ...
+
+class Routing(_message.Message):
+ __slots__ = ["error_reason", "route_reply", "route_request"]
+ class Error(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ADMIN_BAD_SESSION_KEY: Routing.Error
+ ADMIN_PUBLIC_KEY_UNAUTHORIZED: Routing.Error
+ BAD_REQUEST: Routing.Error
+ DUTY_CYCLE_LIMIT: Routing.Error
+ ERROR_REASON_FIELD_NUMBER: _ClassVar[int]
+ GOT_NAK: Routing.Error
+ MAX_RETRANSMIT: Routing.Error
+ NONE: Routing.Error
+ NOT_AUTHORIZED: Routing.Error
+ NO_CHANNEL: Routing.Error
+ NO_INTERFACE: Routing.Error
+ NO_RESPONSE: Routing.Error
+ NO_ROUTE: Routing.Error
+ PKI_FAILED: Routing.Error
+ PKI_SEND_FAIL_PUBLIC_KEY: Routing.Error
+ PKI_UNKNOWN_PUBKEY: Routing.Error
+ RATE_LIMIT_EXCEEDED: Routing.Error
+ ROUTE_REPLY_FIELD_NUMBER: _ClassVar[int]
+ ROUTE_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ TIMEOUT: Routing.Error
+ TOO_LARGE: Routing.Error
+ error_reason: Routing.Error
+ route_reply: RouteDiscovery
+ route_request: RouteDiscovery
+ def __init__(self, route_request: _Optional[_Union[RouteDiscovery, _Mapping]] = ..., route_reply: _Optional[_Union[RouteDiscovery, _Mapping]] = ..., error_reason: _Optional[_Union[Routing.Error, str]] = ...) -> None: ...
+
+class StatusMessage(_message.Message):
+ __slots__ = ["status"]
+ STATUS_FIELD_NUMBER: _ClassVar[int]
+ status: str
+ def __init__(self, status: _Optional[str] = ...) -> None: ...
+
+class StoreForwardPlusPlus(_message.Message):
+ __slots__ = ["chain_count", "commit_hash", "encapsulated_from", "encapsulated_id", "encapsulated_rxtime", "encapsulated_to", "message", "message_hash", "root_hash", "sfpp_message_type"]
+ class SFPP_message_type(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ CANON_ANNOUNCE: StoreForwardPlusPlus.SFPP_message_type
+ CHAIN_COUNT_FIELD_NUMBER: _ClassVar[int]
+ CHAIN_QUERY: StoreForwardPlusPlus.SFPP_message_type
+ COMMIT_HASH_FIELD_NUMBER: _ClassVar[int]
+ ENCAPSULATED_FROM_FIELD_NUMBER: _ClassVar[int]
+ ENCAPSULATED_ID_FIELD_NUMBER: _ClassVar[int]
+ ENCAPSULATED_RXTIME_FIELD_NUMBER: _ClassVar[int]
+ ENCAPSULATED_TO_FIELD_NUMBER: _ClassVar[int]
+ LINK_PROVIDE: StoreForwardPlusPlus.SFPP_message_type
+ LINK_PROVIDE_FIRSTHALF: StoreForwardPlusPlus.SFPP_message_type
+ LINK_PROVIDE_SECONDHALF: StoreForwardPlusPlus.SFPP_message_type
+ LINK_REQUEST: StoreForwardPlusPlus.SFPP_message_type
+ MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ MESSAGE_HASH_FIELD_NUMBER: _ClassVar[int]
+ ROOT_HASH_FIELD_NUMBER: _ClassVar[int]
+ SFPP_MESSAGE_TYPE_FIELD_NUMBER: _ClassVar[int]
+ chain_count: int
+ commit_hash: bytes
+ encapsulated_from: int
+ encapsulated_id: int
+ encapsulated_rxtime: int
+ encapsulated_to: int
+ message: bytes
+ message_hash: bytes
+ root_hash: bytes
+ sfpp_message_type: StoreForwardPlusPlus.SFPP_message_type
+ def __init__(self, sfpp_message_type: _Optional[_Union[StoreForwardPlusPlus.SFPP_message_type, str]] = ..., message_hash: _Optional[bytes] = ..., commit_hash: _Optional[bytes] = ..., root_hash: _Optional[bytes] = ..., message: _Optional[bytes] = ..., encapsulated_id: _Optional[int] = ..., encapsulated_to: _Optional[int] = ..., encapsulated_from: _Optional[int] = ..., encapsulated_rxtime: _Optional[int] = ..., chain_count: _Optional[int] = ...) -> None: ...
+
+class ToRadio(_message.Message):
+ __slots__ = ["disconnect", "heartbeat", "mqttClientProxyMessage", "packet", "want_config_id", "xmodemPacket"]
+ DISCONNECT_FIELD_NUMBER: _ClassVar[int]
+ HEARTBEAT_FIELD_NUMBER: _ClassVar[int]
+ MQTTCLIENTPROXYMESSAGE_FIELD_NUMBER: _ClassVar[int]
+ PACKET_FIELD_NUMBER: _ClassVar[int]
+ WANT_CONFIG_ID_FIELD_NUMBER: _ClassVar[int]
+ XMODEMPACKET_FIELD_NUMBER: _ClassVar[int]
+ disconnect: bool
+ heartbeat: Heartbeat
+ mqttClientProxyMessage: MqttClientProxyMessage
+ packet: MeshPacket
+ want_config_id: int
+ xmodemPacket: _xmodem_pb2.XModem
+ def __init__(self, packet: _Optional[_Union[MeshPacket, _Mapping]] = ..., want_config_id: _Optional[int] = ..., disconnect: bool = ..., xmodemPacket: _Optional[_Union[_xmodem_pb2.XModem, _Mapping]] = ..., mqttClientProxyMessage: _Optional[_Union[MqttClientProxyMessage, _Mapping]] = ..., heartbeat: _Optional[_Union[Heartbeat, _Mapping]] = ...) -> None: ...
+
+class User(_message.Message):
+ __slots__ = ["hw_model", "id", "is_licensed", "is_unmessagable", "long_name", "macaddr", "public_key", "role", "short_name"]
+ HW_MODEL_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ IS_LICENSED_FIELD_NUMBER: _ClassVar[int]
+ IS_UNMESSAGABLE_FIELD_NUMBER: _ClassVar[int]
+ LONG_NAME_FIELD_NUMBER: _ClassVar[int]
+ MACADDR_FIELD_NUMBER: _ClassVar[int]
+ PUBLIC_KEY_FIELD_NUMBER: _ClassVar[int]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
+ hw_model: HardwareModel
+ id: str
+ is_licensed: bool
+ is_unmessagable: bool
+ long_name: str
+ macaddr: bytes
+ public_key: bytes
+ role: _config_pb2.Config.DeviceConfig.Role
+ short_name: str
+ def __init__(self, id: _Optional[str] = ..., long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., macaddr: _Optional[bytes] = ..., hw_model: _Optional[_Union[HardwareModel, str]] = ..., is_licensed: bool = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., public_key: _Optional[bytes] = ..., is_unmessagable: bool = ...) -> None: ...
+
+class Waypoint(_message.Message):
+ __slots__ = ["description", "expire", "icon", "id", "latitude_i", "locked_to", "longitude_i", "name"]
+ DESCRIPTION_FIELD_NUMBER: _ClassVar[int]
+ EXPIRE_FIELD_NUMBER: _ClassVar[int]
+ ICON_FIELD_NUMBER: _ClassVar[int]
+ ID_FIELD_NUMBER: _ClassVar[int]
+ LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LOCKED_TO_FIELD_NUMBER: _ClassVar[int]
+ LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ description: str
+ expire: int
+ icon: int
+ id: int
+ latitude_i: int
+ locked_to: int
+ longitude_i: int
+ name: str
+ def __init__(self, id: _Optional[int] = ..., latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., expire: _Optional[int] = ..., locked_to: _Optional[int] = ..., name: _Optional[str] = ..., description: _Optional[str] = ..., icon: _Optional[int] = ...) -> None: ...
+
+class resend_chunks(_message.Message):
+ __slots__ = ["chunks"]
+ CHUNKS_FIELD_NUMBER: _ClassVar[int]
+ chunks: _containers.RepeatedScalarFieldContainer[int]
+ def __init__(self, chunks: _Optional[_Iterable[int]] = ...) -> None: ...
+
+class HardwareModel(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class Constants(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class CriticalErrorCode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class FirmwareEdition(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+
+class ExcludedModules(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/module_config_pb2.py b/meshtastic/protobuf/module_config_pb2.py
index 44d0bc5..3d16365 100644
--- a/meshtastic/protobuf/module_config_pb2.py
+++ b/meshtastic/protobuf/module_config_pb2.py
@@ -2,71 +2,80 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/module_config.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
+from meshtastic.protobuf import atak_pb2 as meshtastic_dot_protobuf_dot_atak__pb2
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'meshtastic/protobuf/module_config.proto\x12\x13meshtastic.protobuf\"\xfb\'\n\x0cModuleConfig\x12<\n\x04mqtt\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.ModuleConfig.MQTTConfigH\x00\x12@\n\x06serial\x18\x02 \x01(\x0b\x32..meshtastic.protobuf.ModuleConfig.SerialConfigH\x00\x12]\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32<.meshtastic.protobuf.ModuleConfig.ExternalNotificationConfigH\x00\x12M\n\rstore_forward\x18\x04 \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.StoreForwardConfigH\x00\x12G\n\nrange_test\x18\x05 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.RangeTestConfigH\x00\x12\x46\n\ttelemetry\x18\x06 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.TelemetryConfigH\x00\x12O\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.CannedMessageConfigH\x00\x12>\n\x05\x61udio\x18\x08 \x01(\x0b\x32-.meshtastic.protobuf.ModuleConfig.AudioConfigH\x00\x12Q\n\x0fremote_hardware\x18\t \x01(\x0b\x32\x36.meshtastic.protobuf.ModuleConfig.RemoteHardwareConfigH\x00\x12M\n\rneighbor_info\x18\n \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.NeighborInfoConfigH\x00\x12S\n\x10\x61mbient_lighting\x18\x0b \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.AmbientLightingConfigH\x00\x12S\n\x10\x64\x65tection_sensor\x18\x0c \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.DetectionSensorConfigH\x00\x12H\n\npaxcounter\x18\r \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.PaxcounterConfigH\x00\x1a\xb9\x02\n\nMQTTConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x10\n\x08password\x18\x04 \x01(\t\x12\x1a\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x12\x14\n\x0cjson_enabled\x18\x06 \x01(\x08\x12\x13\n\x0btls_enabled\x18\x07 \x01(\x08\x12\x0c\n\x04root\x18\x08 \x01(\t\x12\x1f\n\x17proxy_to_client_enabled\x18\t \x01(\x08\x12\x1d\n\x15map_reporting_enabled\x18\n \x01(\x08\x12P\n\x13map_report_settings\x18\x0b \x01(\x0b\x32\x33.meshtastic.protobuf.ModuleConfig.MapReportSettings\x1an\n\x11MapReportSettings\x12\x1d\n\x15publish_interval_secs\x18\x01 \x01(\r\x12\x1a\n\x12position_precision\x18\x02 \x01(\r\x12\x1e\n\x16should_report_location\x18\x03 \x01(\x08\x1a\x8b\x01\n\x14RemoteHardwareConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1a\x61llow_undefined_pin_access\x18\x02 \x01(\x08\x12>\n\x0e\x61vailable_pins\x18\x03 \x03(\x0b\x32&.meshtastic.protobuf.RemoteHardwarePin\x1aZ\n\x12NeighborInfoConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x17\n\x0fupdate_interval\x18\x02 \x01(\r\x12\x1a\n\x12transmit_over_lora\x18\x03 \x01(\x08\x1a\xa0\x03\n\x15\x44\x65tectionSensorConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1e\n\x16minimum_broadcast_secs\x18\x02 \x01(\r\x12\x1c\n\x14state_broadcast_secs\x18\x03 \x01(\r\x12\x11\n\tsend_bell\x18\x04 \x01(\x08\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x13\n\x0bmonitor_pin\x18\x06 \x01(\r\x12\x63\n\x16\x64\x65tection_trigger_type\x18\x07 \x01(\x0e\x32\x43.meshtastic.protobuf.ModuleConfig.DetectionSensorConfig.TriggerType\x12\x12\n\nuse_pullup\x18\x08 \x01(\x08\"\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\xed\x02\n\x0b\x41udioConfig\x12\x16\n\x0e\x63odec2_enabled\x18\x01 \x01(\x08\x12\x0f\n\x07ptt_pin\x18\x02 \x01(\r\x12I\n\x07\x62itrate\x18\x03 \x01(\x0e\x32\x38.meshtastic.protobuf.ModuleConfig.AudioConfig.Audio_Baud\x12\x0e\n\x06i2s_ws\x18\x04 \x01(\r\x12\x0e\n\x06i2s_sd\x18\x05 \x01(\r\x12\x0f\n\x07i2s_din\x18\x06 \x01(\r\x12\x0f\n\x07i2s_sck\x18\x07 \x01(\r\"\xa7\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\x0e\n\nCODEC2_700\x10\x07\x12\x0f\n\x0b\x43ODEC2_700B\x10\x08\x1av\n\x10PaxcounterConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1apaxcounter_update_interval\x18\x02 \x01(\r\x12\x16\n\x0ewifi_threshold\x18\x03 \x01(\x05\x12\x15\n\rble_threshold\x18\x04 \x01(\x05\x1a\x9e\x05\n\x0cSerialConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0c\n\x04\x65\x63ho\x18\x02 \x01(\x08\x12\x0b\n\x03rxd\x18\x03 \x01(\r\x12\x0b\n\x03txd\x18\x04 \x01(\r\x12H\n\x04\x62\x61ud\x18\x05 \x01(\x0e\x32:.meshtastic.protobuf.ModuleConfig.SerialConfig.Serial_Baud\x12\x0f\n\x07timeout\x18\x06 \x01(\r\x12H\n\x04mode\x18\x07 \x01(\x0e\x32:.meshtastic.protobuf.ModuleConfig.SerialConfig.Serial_Mode\x12$\n\x1coverride_console_serial_port\x18\x08 \x01(\x08\"\x8a\x02\n\x0bSerial_Baud\x12\x10\n\x0c\x42\x41UD_DEFAULT\x10\x00\x12\x0c\n\x08\x42\x41UD_110\x10\x01\x12\x0c\n\x08\x42\x41UD_300\x10\x02\x12\x0c\n\x08\x42\x41UD_600\x10\x03\x12\r\n\tBAUD_1200\x10\x04\x12\r\n\tBAUD_2400\x10\x05\x12\r\n\tBAUD_4800\x10\x06\x12\r\n\tBAUD_9600\x10\x07\x12\x0e\n\nBAUD_19200\x10\x08\x12\x0e\n\nBAUD_38400\x10\t\x12\x0e\n\nBAUD_57600\x10\n\x12\x0f\n\x0b\x42\x41UD_115200\x10\x0b\x12\x0f\n\x0b\x42\x41UD_230400\x10\x0c\x12\x0f\n\x0b\x42\x41UD_460800\x10\r\x12\x0f\n\x0b\x42\x41UD_576000\x10\x0e\x12\x0f\n\x0b\x42\x41UD_921600\x10\x0f\"}\n\x0bSerial_Mode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\n\n\x06SIMPLE\x10\x01\x12\t\n\x05PROTO\x10\x02\x12\x0b\n\x07TEXTMSG\x10\x03\x12\x08\n\x04NMEA\x10\x04\x12\x0b\n\x07\x43\x41LTOPO\x10\x05\x12\x08\n\x04WS85\x10\x06\x12\r\n\tVE_DIRECT\x10\x07\x12\r\n\tMS_CONFIG\x10\x08\x1a\xe9\x02\n\x1a\x45xternalNotificationConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x11\n\toutput_ms\x18\x02 \x01(\r\x12\x0e\n\x06output\x18\x03 \x01(\r\x12\x14\n\x0coutput_vibra\x18\x08 \x01(\r\x12\x15\n\routput_buzzer\x18\t \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x04 \x01(\x08\x12\x15\n\ralert_message\x18\x05 \x01(\x08\x12\x1b\n\x13\x61lert_message_vibra\x18\n \x01(\x08\x12\x1c\n\x14\x61lert_message_buzzer\x18\x0b \x01(\x08\x12\x12\n\nalert_bell\x18\x06 \x01(\x08\x12\x18\n\x10\x61lert_bell_vibra\x18\x0c \x01(\x08\x12\x19\n\x11\x61lert_bell_buzzer\x18\r \x01(\x08\x12\x0f\n\x07use_pwm\x18\x07 \x01(\x08\x12\x13\n\x0bnag_timeout\x18\x0e \x01(\r\x12\x19\n\x11use_i2s_as_buzzer\x18\x0f \x01(\x08\x1a\x97\x01\n\x12StoreForwardConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x11\n\theartbeat\x18\x02 \x01(\x08\x12\x0f\n\x07records\x18\x03 \x01(\r\x12\x1a\n\x12history_return_max\x18\x04 \x01(\r\x12\x1d\n\x15history_return_window\x18\x05 \x01(\r\x12\x11\n\tis_server\x18\x06 \x01(\x08\x1aY\n\x0fRangeTestConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0e\n\x06sender\x18\x02 \x01(\r\x12\x0c\n\x04save\x18\x03 \x01(\x08\x12\x17\n\x0f\x63lear_on_reboot\x18\x04 \x01(\x08\x1a\xeb\x03\n\x0fTelemetryConfig\x12\x1e\n\x16\x64\x65vice_update_interval\x18\x01 \x01(\r\x12#\n\x1b\x65nvironment_update_interval\x18\x02 \x01(\r\x12\'\n\x1f\x65nvironment_measurement_enabled\x18\x03 \x01(\x08\x12\"\n\x1a\x65nvironment_screen_enabled\x18\x04 \x01(\x08\x12&\n\x1e\x65nvironment_display_fahrenheit\x18\x05 \x01(\x08\x12\x1b\n\x13\x61ir_quality_enabled\x18\x06 \x01(\x08\x12\x1c\n\x14\x61ir_quality_interval\x18\x07 \x01(\r\x12!\n\x19power_measurement_enabled\x18\x08 \x01(\x08\x12\x1d\n\x15power_update_interval\x18\t \x01(\r\x12\x1c\n\x14power_screen_enabled\x18\n \x01(\x08\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 \n\x18\x64\x65vice_telemetry_enabled\x18\x0e \x01(\x08\x1a\xf9\x04\n\x13\x43\x61nnedMessageConfig\x12\x17\n\x0frotary1_enabled\x18\x01 \x01(\x08\x12\x19\n\x11inputbroker_pin_a\x18\x02 \x01(\r\x12\x19\n\x11inputbroker_pin_b\x18\x03 \x01(\r\x12\x1d\n\x15inputbroker_pin_press\x18\x04 \x01(\r\x12\x62\n\x14inputbroker_event_cw\x18\x05 \x01(\x0e\x32\x44.meshtastic.protobuf.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x63\n\x15inputbroker_event_ccw\x18\x06 \x01(\x0e\x32\x44.meshtastic.protobuf.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x65\n\x17inputbroker_event_press\x18\x07 \x01(\x0e\x32\x44.meshtastic.protobuf.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x17\n\x0fupdown1_enabled\x18\x08 \x01(\x08\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\x11\n\tsend_bell\x18\x0b \x01(\x08\"c\n\x0eInputEventChar\x12\x08\n\x04NONE\x10\x00\x12\x06\n\x02UP\x10\x11\x12\x08\n\x04\x44OWN\x10\x12\x12\x08\n\x04LEFT\x10\x13\x12\t\n\x05RIGHT\x10\x14\x12\n\n\x06SELECT\x10\n\x12\x08\n\x04\x42\x41\x43K\x10\x1b\x12\n\n\x06\x43\x41NCEL\x10\x18\x1a\x65\n\x15\x41mbientLightingConfig\x12\x11\n\tled_state\x18\x01 \x01(\x08\x12\x0f\n\x07\x63urrent\x18\x02 \x01(\r\x12\x0b\n\x03red\x18\x03 \x01(\r\x12\r\n\x05green\x18\x04 \x01(\r\x12\x0c\n\x04\x62lue\x18\x05 \x01(\rB\x11\n\x0fpayload_variant\"m\n\x11RemoteHardwarePin\x12\x10\n\x08gpio_pin\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x38\n\x04type\x18\x03 \x01(\x0e\x32*.meshtastic.protobuf.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')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'meshtastic/protobuf/module_config.proto\x12\x13meshtastic.protobuf\x1a\x1emeshtastic/protobuf/atak.proto\"\x86/\n\x0cModuleConfig\x12<\n\x04mqtt\x18\x01 \x01(\x0b\x32,.meshtastic.protobuf.ModuleConfig.MQTTConfigH\x00\x12@\n\x06serial\x18\x02 \x01(\x0b\x32..meshtastic.protobuf.ModuleConfig.SerialConfigH\x00\x12]\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32<.meshtastic.protobuf.ModuleConfig.ExternalNotificationConfigH\x00\x12M\n\rstore_forward\x18\x04 \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.StoreForwardConfigH\x00\x12G\n\nrange_test\x18\x05 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.RangeTestConfigH\x00\x12\x46\n\ttelemetry\x18\x06 \x01(\x0b\x32\x31.meshtastic.protobuf.ModuleConfig.TelemetryConfigH\x00\x12O\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.CannedMessageConfigH\x00\x12>\n\x05\x61udio\x18\x08 \x01(\x0b\x32-.meshtastic.protobuf.ModuleConfig.AudioConfigH\x00\x12Q\n\x0fremote_hardware\x18\t \x01(\x0b\x32\x36.meshtastic.protobuf.ModuleConfig.RemoteHardwareConfigH\x00\x12M\n\rneighbor_info\x18\n \x01(\x0b\x32\x34.meshtastic.protobuf.ModuleConfig.NeighborInfoConfigH\x00\x12S\n\x10\x61mbient_lighting\x18\x0b \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.AmbientLightingConfigH\x00\x12S\n\x10\x64\x65tection_sensor\x18\x0c \x01(\x0b\x32\x37.meshtastic.protobuf.ModuleConfig.DetectionSensorConfigH\x00\x12H\n\npaxcounter\x18\r \x01(\x0b\x32\x32.meshtastic.protobuf.ModuleConfig.PaxcounterConfigH\x00\x12N\n\rstatusmessage\x18\x0e \x01(\x0b\x32\x35.meshtastic.protobuf.ModuleConfig.StatusMessageConfigH\x00\x12W\n\x12traffic_management\x18\x0f \x01(\x0b\x32\x39.meshtastic.protobuf.ModuleConfig.TrafficManagementConfigH\x00\x12:\n\x03tak\x18\x10 \x01(\x0b\x32+.meshtastic.protobuf.ModuleConfig.TAKConfigH\x00\x1a\xbd\x02\n\nMQTTConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x10\n\x08password\x18\x04 \x01(\t\x12\x1a\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x12\x18\n\x0cjson_enabled\x18\x06 \x01(\x08\x42\x02\x18\x01\x12\x13\n\x0btls_enabled\x18\x07 \x01(\x08\x12\x0c\n\x04root\x18\x08 \x01(\t\x12\x1f\n\x17proxy_to_client_enabled\x18\t \x01(\x08\x12\x1d\n\x15map_reporting_enabled\x18\n \x01(\x08\x12P\n\x13map_report_settings\x18\x0b \x01(\x0b\x32\x33.meshtastic.protobuf.ModuleConfig.MapReportSettings\x1an\n\x11MapReportSettings\x12\x1d\n\x15publish_interval_secs\x18\x01 \x01(\r\x12\x1a\n\x12position_precision\x18\x02 \x01(\r\x12\x1e\n\x16should_report_location\x18\x03 \x01(\x08\x1a\x8b\x01\n\x14RemoteHardwareConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1a\x61llow_undefined_pin_access\x18\x02 \x01(\x08\x12>\n\x0e\x61vailable_pins\x18\x03 \x03(\x0b\x32&.meshtastic.protobuf.RemoteHardwarePin\x1aZ\n\x12NeighborInfoConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x17\n\x0fupdate_interval\x18\x02 \x01(\r\x12\x1a\n\x12transmit_over_lora\x18\x03 \x01(\x08\x1a\xa0\x03\n\x15\x44\x65tectionSensorConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1e\n\x16minimum_broadcast_secs\x18\x02 \x01(\r\x12\x1c\n\x14state_broadcast_secs\x18\x03 \x01(\r\x12\x11\n\tsend_bell\x18\x04 \x01(\x08\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\x13\n\x0bmonitor_pin\x18\x06 \x01(\r\x12\x63\n\x16\x64\x65tection_trigger_type\x18\x07 \x01(\x0e\x32\x43.meshtastic.protobuf.ModuleConfig.DetectionSensorConfig.TriggerType\x12\x12\n\nuse_pullup\x18\x08 \x01(\x08\"\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\xed\x02\n\x0b\x41udioConfig\x12\x16\n\x0e\x63odec2_enabled\x18\x01 \x01(\x08\x12\x0f\n\x07ptt_pin\x18\x02 \x01(\r\x12I\n\x07\x62itrate\x18\x03 \x01(\x0e\x32\x38.meshtastic.protobuf.ModuleConfig.AudioConfig.Audio_Baud\x12\x0e\n\x06i2s_ws\x18\x04 \x01(\r\x12\x0e\n\x06i2s_sd\x18\x05 \x01(\r\x12\x0f\n\x07i2s_din\x18\x06 \x01(\r\x12\x0f\n\x07i2s_sck\x18\x07 \x01(\r\"\xa7\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\x0e\n\nCODEC2_700\x10\x07\x12\x0f\n\x0b\x43ODEC2_700B\x10\x08\x1av\n\x10PaxcounterConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\"\n\x1apaxcounter_update_interval\x18\x02 \x01(\r\x12\x16\n\x0ewifi_threshold\x18\x03 \x01(\x05\x12\x15\n\rble_threshold\x18\x04 \x01(\x05\x1a\xd3\x03\n\x17TrafficManagementConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x1e\n\x16position_dedup_enabled\x18\x02 \x01(\x08\x12\x1f\n\x17position_precision_bits\x18\x03 \x01(\r\x12\"\n\x1aposition_min_interval_secs\x18\x04 \x01(\r\x12 \n\x18nodeinfo_direct_response\x18\x05 \x01(\x08\x12)\n!nodeinfo_direct_response_max_hops\x18\x06 \x01(\r\x12\x1a\n\x12rate_limit_enabled\x18\x07 \x01(\x08\x12\x1e\n\x16rate_limit_window_secs\x18\x08 \x01(\r\x12\x1e\n\x16rate_limit_max_packets\x18\t \x01(\r\x12\x1c\n\x14\x64rop_unknown_enabled\x18\n \x01(\x08\x12 \n\x18unknown_packet_threshold\x18\x0b \x01(\r\x12\x1d\n\x15\x65xhaust_hop_telemetry\x18\x0c \x01(\x08\x12\x1c\n\x14\x65xhaust_hop_position\x18\r \x01(\x08\x12\x1c\n\x14router_preserve_hops\x18\x0e \x01(\x08\x1a\xb5\x05\n\x0cSerialConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0c\n\x04\x65\x63ho\x18\x02 \x01(\x08\x12\x0b\n\x03rxd\x18\x03 \x01(\r\x12\x0b\n\x03txd\x18\x04 \x01(\r\x12H\n\x04\x62\x61ud\x18\x05 \x01(\x0e\x32:.meshtastic.protobuf.ModuleConfig.SerialConfig.Serial_Baud\x12\x0f\n\x07timeout\x18\x06 \x01(\r\x12H\n\x04mode\x18\x07 \x01(\x0e\x32:.meshtastic.protobuf.ModuleConfig.SerialConfig.Serial_Mode\x12$\n\x1coverride_console_serial_port\x18\x08 \x01(\x08\"\x8a\x02\n\x0bSerial_Baud\x12\x10\n\x0c\x42\x41UD_DEFAULT\x10\x00\x12\x0c\n\x08\x42\x41UD_110\x10\x01\x12\x0c\n\x08\x42\x41UD_300\x10\x02\x12\x0c\n\x08\x42\x41UD_600\x10\x03\x12\r\n\tBAUD_1200\x10\x04\x12\r\n\tBAUD_2400\x10\x05\x12\r\n\tBAUD_4800\x10\x06\x12\r\n\tBAUD_9600\x10\x07\x12\x0e\n\nBAUD_19200\x10\x08\x12\x0e\n\nBAUD_38400\x10\t\x12\x0e\n\nBAUD_57600\x10\n\x12\x0f\n\x0b\x42\x41UD_115200\x10\x0b\x12\x0f\n\x0b\x42\x41UD_230400\x10\x0c\x12\x0f\n\x0b\x42\x41UD_460800\x10\r\x12\x0f\n\x0b\x42\x41UD_576000\x10\x0e\x12\x0f\n\x0b\x42\x41UD_921600\x10\x0f\"\x93\x01\n\x0bSerial_Mode\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\n\n\x06SIMPLE\x10\x01\x12\t\n\x05PROTO\x10\x02\x12\x0b\n\x07TEXTMSG\x10\x03\x12\x08\n\x04NMEA\x10\x04\x12\x0b\n\x07\x43\x41LTOPO\x10\x05\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\xe9\x02\n\x1a\x45xternalNotificationConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x11\n\toutput_ms\x18\x02 \x01(\r\x12\x0e\n\x06output\x18\x03 \x01(\r\x12\x14\n\x0coutput_vibra\x18\x08 \x01(\r\x12\x15\n\routput_buzzer\x18\t \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x04 \x01(\x08\x12\x15\n\ralert_message\x18\x05 \x01(\x08\x12\x1b\n\x13\x61lert_message_vibra\x18\n \x01(\x08\x12\x1c\n\x14\x61lert_message_buzzer\x18\x0b \x01(\x08\x12\x12\n\nalert_bell\x18\x06 \x01(\x08\x12\x18\n\x10\x61lert_bell_vibra\x18\x0c \x01(\x08\x12\x19\n\x11\x61lert_bell_buzzer\x18\r \x01(\x08\x12\x0f\n\x07use_pwm\x18\x07 \x01(\x08\x12\x13\n\x0bnag_timeout\x18\x0e \x01(\r\x12\x19\n\x11use_i2s_as_buzzer\x18\x0f \x01(\x08\x1a\x97\x01\n\x12StoreForwardConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x11\n\theartbeat\x18\x02 \x01(\x08\x12\x0f\n\x07records\x18\x03 \x01(\r\x12\x1a\n\x12history_return_max\x18\x04 \x01(\r\x12\x1d\n\x15history_return_window\x18\x05 \x01(\r\x12\x11\n\tis_server\x18\x06 \x01(\x08\x1aY\n\x0fRangeTestConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0e\n\x06sender\x18\x02 \x01(\r\x12\x0c\n\x04save\x18\x03 \x01(\x08\x12\x17\n\x0f\x63lear_on_reboot\x18\x04 \x01(\x08\x1a\x8f\x04\n\x0fTelemetryConfig\x12\x1e\n\x16\x64\x65vice_update_interval\x18\x01 \x01(\r\x12#\n\x1b\x65nvironment_update_interval\x18\x02 \x01(\r\x12\'\n\x1f\x65nvironment_measurement_enabled\x18\x03 \x01(\x08\x12\"\n\x1a\x65nvironment_screen_enabled\x18\x04 \x01(\x08\x12&\n\x1e\x65nvironment_display_fahrenheit\x18\x05 \x01(\x08\x12\x1b\n\x13\x61ir_quality_enabled\x18\x06 \x01(\x08\x12\x1c\n\x14\x61ir_quality_interval\x18\x07 \x01(\r\x12!\n\x19power_measurement_enabled\x18\x08 \x01(\x08\x12\x1d\n\x15power_update_interval\x18\t \x01(\r\x12\x1c\n\x14power_screen_enabled\x18\n \x01(\x08\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 \n\x18\x64\x65vice_telemetry_enabled\x18\x0e \x01(\x08\x12\"\n\x1a\x61ir_quality_screen_enabled\x18\x0f \x01(\x08\x1a\xf9\x04\n\x13\x43\x61nnedMessageConfig\x12\x17\n\x0frotary1_enabled\x18\x01 \x01(\x08\x12\x19\n\x11inputbroker_pin_a\x18\x02 \x01(\r\x12\x19\n\x11inputbroker_pin_b\x18\x03 \x01(\r\x12\x1d\n\x15inputbroker_pin_press\x18\x04 \x01(\r\x12\x62\n\x14inputbroker_event_cw\x18\x05 \x01(\x0e\x32\x44.meshtastic.protobuf.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x63\n\x15inputbroker_event_ccw\x18\x06 \x01(\x0e\x32\x44.meshtastic.protobuf.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x65\n\x17inputbroker_event_press\x18\x07 \x01(\x0e\x32\x44.meshtastic.protobuf.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x17\n\x0fupdown1_enabled\x18\x08 \x01(\x08\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\x11\n\tsend_bell\x18\x0b \x01(\x08\"c\n\x0eInputEventChar\x12\x08\n\x04NONE\x10\x00\x12\x06\n\x02UP\x10\x11\x12\x08\n\x04\x44OWN\x10\x12\x12\x08\n\x04LEFT\x10\x13\x12\t\n\x05RIGHT\x10\x14\x12\n\n\x06SELECT\x10\n\x12\x08\n\x04\x42\x41\x43K\x10\x1b\x12\n\n\x06\x43\x41NCEL\x10\x18\x1a\x65\n\x15\x41mbientLightingConfig\x12\x11\n\tled_state\x18\x01 \x01(\x08\x12\x0f\n\x07\x63urrent\x18\x02 \x01(\r\x12\x0b\n\x03red\x18\x03 \x01(\r\x12\r\n\x05green\x18\x04 \x01(\r\x12\x0c\n\x04\x62lue\x18\x05 \x01(\r\x1a*\n\x13StatusMessageConfig\x12\x13\n\x0bnode_status\x18\x01 \x01(\t\x1a\x63\n\tTAKConfig\x12\'\n\x04team\x18\x01 \x01(\x0e\x32\x19.meshtastic.protobuf.Team\x12-\n\x04role\x18\x02 \x01(\x0e\x32\x1f.meshtastic.protobuf.MemberRoleB\x11\n\x0fpayload_variant\"m\n\x11RemoteHardwarePin\x12\x10\n\x08gpio_pin\x18\x01 \x01(\r\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x38\n\x04type\x18\x03 \x01(\x0e\x32*.meshtastic.protobuf.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')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.module_config_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.module_config_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\022ModuleConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
+ _MODULECONFIG_MQTTCONFIG.fields_by_name['json_enabled']._options = None
+ _MODULECONFIG_MQTTCONFIG.fields_by_name['json_enabled']._serialized_options = b'\030\001'
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['enabled']._options = None
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['enabled']._serialized_options = b'\030\001'
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['allow_input_source']._options = None
_MODULECONFIG_CANNEDMESSAGECONFIG.fields_by_name['allow_input_source']._serialized_options = b'\030\001'
- _globals['_REMOTEHARDWAREPINTYPE']._serialized_start=5293
- _globals['_REMOTEHARDWAREPINTYPE']._serialized_end=5366
- _globals['_MODULECONFIG']._serialized_start=65
- _globals['_MODULECONFIG']._serialized_end=5180
- _globals['_MODULECONFIG_MQTTCONFIG']._serialized_start=1080
- _globals['_MODULECONFIG_MQTTCONFIG']._serialized_end=1393
- _globals['_MODULECONFIG_MAPREPORTSETTINGS']._serialized_start=1395
- _globals['_MODULECONFIG_MAPREPORTSETTINGS']._serialized_end=1505
- _globals['_MODULECONFIG_REMOTEHARDWARECONFIG']._serialized_start=1508
- _globals['_MODULECONFIG_REMOTEHARDWARECONFIG']._serialized_end=1647
- _globals['_MODULECONFIG_NEIGHBORINFOCONFIG']._serialized_start=1649
- _globals['_MODULECONFIG_NEIGHBORINFOCONFIG']._serialized_end=1739
- _globals['_MODULECONFIG_DETECTIONSENSORCONFIG']._serialized_start=1742
- _globals['_MODULECONFIG_DETECTIONSENSORCONFIG']._serialized_end=2158
- _globals['_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE']._serialized_start=2022
- _globals['_MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE']._serialized_end=2158
- _globals['_MODULECONFIG_AUDIOCONFIG']._serialized_start=2161
- _globals['_MODULECONFIG_AUDIOCONFIG']._serialized_end=2526
- _globals['_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD']._serialized_start=2359
- _globals['_MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD']._serialized_end=2526
- _globals['_MODULECONFIG_PAXCOUNTERCONFIG']._serialized_start=2528
- _globals['_MODULECONFIG_PAXCOUNTERCONFIG']._serialized_end=2646
- _globals['_MODULECONFIG_SERIALCONFIG']._serialized_start=2649
- _globals['_MODULECONFIG_SERIALCONFIG']._serialized_end=3319
- _globals['_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD']._serialized_start=2926
- _globals['_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD']._serialized_end=3192
- _globals['_MODULECONFIG_SERIALCONFIG_SERIAL_MODE']._serialized_start=3194
- _globals['_MODULECONFIG_SERIALCONFIG_SERIAL_MODE']._serialized_end=3319
- _globals['_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG']._serialized_start=3322
- _globals['_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG']._serialized_end=3683
- _globals['_MODULECONFIG_STOREFORWARDCONFIG']._serialized_start=3686
- _globals['_MODULECONFIG_STOREFORWARDCONFIG']._serialized_end=3837
- _globals['_MODULECONFIG_RANGETESTCONFIG']._serialized_start=3839
- _globals['_MODULECONFIG_RANGETESTCONFIG']._serialized_end=3928
- _globals['_MODULECONFIG_TELEMETRYCONFIG']._serialized_start=3931
- _globals['_MODULECONFIG_TELEMETRYCONFIG']._serialized_end=4422
- _globals['_MODULECONFIG_CANNEDMESSAGECONFIG']._serialized_start=4425
- _globals['_MODULECONFIG_CANNEDMESSAGECONFIG']._serialized_end=5058
- _globals['_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR']._serialized_start=4959
- _globals['_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR']._serialized_end=5058
- _globals['_MODULECONFIG_AMBIENTLIGHTINGCONFIG']._serialized_start=5060
- _globals['_MODULECONFIG_AMBIENTLIGHTINGCONFIG']._serialized_end=5161
- _globals['_REMOTEHARDWAREPIN']._serialized_start=5182
- _globals['_REMOTEHARDWAREPIN']._serialized_end=5291
+ _REMOTEHARDWAREPINTYPE._serialized_start=6232
+ _REMOTEHARDWAREPINTYPE._serialized_end=6305
+ _MODULECONFIG._serialized_start=97
+ _MODULECONFIG._serialized_end=6119
+ _MODULECONFIG_MQTTCONFIG._serialized_start=1341
+ _MODULECONFIG_MQTTCONFIG._serialized_end=1658
+ _MODULECONFIG_MAPREPORTSETTINGS._serialized_start=1660
+ _MODULECONFIG_MAPREPORTSETTINGS._serialized_end=1770
+ _MODULECONFIG_REMOTEHARDWARECONFIG._serialized_start=1773
+ _MODULECONFIG_REMOTEHARDWARECONFIG._serialized_end=1912
+ _MODULECONFIG_NEIGHBORINFOCONFIG._serialized_start=1914
+ _MODULECONFIG_NEIGHBORINFOCONFIG._serialized_end=2004
+ _MODULECONFIG_DETECTIONSENSORCONFIG._serialized_start=2007
+ _MODULECONFIG_DETECTIONSENSORCONFIG._serialized_end=2423
+ _MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE._serialized_start=2287
+ _MODULECONFIG_DETECTIONSENSORCONFIG_TRIGGERTYPE._serialized_end=2423
+ _MODULECONFIG_AUDIOCONFIG._serialized_start=2426
+ _MODULECONFIG_AUDIOCONFIG._serialized_end=2791
+ _MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD._serialized_start=2624
+ _MODULECONFIG_AUDIOCONFIG_AUDIO_BAUD._serialized_end=2791
+ _MODULECONFIG_PAXCOUNTERCONFIG._serialized_start=2793
+ _MODULECONFIG_PAXCOUNTERCONFIG._serialized_end=2911
+ _MODULECONFIG_TRAFFICMANAGEMENTCONFIG._serialized_start=2914
+ _MODULECONFIG_TRAFFICMANAGEMENTCONFIG._serialized_end=3381
+ _MODULECONFIG_SERIALCONFIG._serialized_start=3384
+ _MODULECONFIG_SERIALCONFIG._serialized_end=4077
+ _MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_start=3661
+ _MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_end=3927
+ _MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_start=3930
+ _MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_end=4077
+ _MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_start=4080
+ _MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_end=4441
+ _MODULECONFIG_STOREFORWARDCONFIG._serialized_start=4444
+ _MODULECONFIG_STOREFORWARDCONFIG._serialized_end=4595
+ _MODULECONFIG_RANGETESTCONFIG._serialized_start=4597
+ _MODULECONFIG_RANGETESTCONFIG._serialized_end=4686
+ _MODULECONFIG_TELEMETRYCONFIG._serialized_start=4689
+ _MODULECONFIG_TELEMETRYCONFIG._serialized_end=5216
+ _MODULECONFIG_CANNEDMESSAGECONFIG._serialized_start=5219
+ _MODULECONFIG_CANNEDMESSAGECONFIG._serialized_end=5852
+ _MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_start=5753
+ _MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_end=5852
+ _MODULECONFIG_AMBIENTLIGHTINGCONFIG._serialized_start=5854
+ _MODULECONFIG_AMBIENTLIGHTINGCONFIG._serialized_end=5955
+ _MODULECONFIG_STATUSMESSAGECONFIG._serialized_start=5957
+ _MODULECONFIG_STATUSMESSAGECONFIG._serialized_end=5999
+ _MODULECONFIG_TAKCONFIG._serialized_start=6001
+ _MODULECONFIG_TAKCONFIG._serialized_end=6100
+ _REMOTEHARDWAREPIN._serialized_start=6121
+ _REMOTEHARDWAREPIN._serialized_end=6230
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/module_config_pb2.pyi b/meshtastic/protobuf/module_config_pb2.pyi
index 500528e..b6442fc 100644
--- a/meshtastic/protobuf/module_config_pb2.pyi
+++ b/meshtastic/protobuf/module_config_pb2.pyi
@@ -1,1313 +1,411 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
-
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.internal.containers
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
-
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-class _RemoteHardwarePinType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _RemoteHardwarePinTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_RemoteHardwarePinType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNKNOWN: _RemoteHardwarePinType.ValueType # 0
- """
- Unset/unused
- """
- DIGITAL_READ: _RemoteHardwarePinType.ValueType # 1
- """
- GPIO pin can be read (if it is high / low)
- """
- DIGITAL_WRITE: _RemoteHardwarePinType.ValueType # 2
- """
- GPIO pin can be written to (high / low)
- """
-
-class RemoteHardwarePinType(_RemoteHardwarePinType, metaclass=_RemoteHardwarePinTypeEnumTypeWrapper): ...
-
-UNKNOWN: RemoteHardwarePinType.ValueType # 0
-"""
-Unset/unused
-"""
-DIGITAL_READ: RemoteHardwarePinType.ValueType # 1
-"""
-GPIO pin can be read (if it is high / low)
-"""
-DIGITAL_WRITE: RemoteHardwarePinType.ValueType # 2
-"""
-GPIO pin can be written to (high / low)
-"""
-global___RemoteHardwarePinType = RemoteHardwarePinType
-
-@typing.final
-class ModuleConfig(google.protobuf.message.Message):
- """
- Module Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- @typing.final
- class MQTTConfig(google.protobuf.message.Message):
- """
- MQTT Client Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- ADDRESS_FIELD_NUMBER: builtins.int
- USERNAME_FIELD_NUMBER: builtins.int
- PASSWORD_FIELD_NUMBER: builtins.int
- ENCRYPTION_ENABLED_FIELD_NUMBER: builtins.int
- JSON_ENABLED_FIELD_NUMBER: builtins.int
- TLS_ENABLED_FIELD_NUMBER: builtins.int
- ROOT_FIELD_NUMBER: builtins.int
- PROXY_TO_CLIENT_ENABLED_FIELD_NUMBER: builtins.int
- MAP_REPORTING_ENABLED_FIELD_NUMBER: builtins.int
- MAP_REPORT_SETTINGS_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- If a meshtastic node is able to reach the internet it will normally attempt to gateway any channels that are marked as
- is_uplink_enabled or is_downlink_enabled.
- """
- address: builtins.str
- """
- The server to use for our MQTT global message gateway feature.
- If not set, the default server will be used
- """
- username: builtins.str
- """
- MQTT username to use (most useful for a custom MQTT server).
- If using a custom server, this will be honoured even if empty.
- If using the default server, this will only be honoured if set, otherwise the device will use the default username
- """
- password: builtins.str
- """
- MQTT password to use (most useful for a custom MQTT server).
- If using a custom server, this will be honoured even if empty.
- If using the default server, this will only be honoured if set, otherwise the device will use the default password
- """
- encryption_enabled: builtins.bool
- """
- Whether to send encrypted or decrypted packets to MQTT.
- This parameter is only honoured if you also set server
- (the default official mqtt.meshtastic.org server can handle encrypted packets)
- Decrypted packets may be useful for external systems that want to consume meshtastic packets
- """
- json_enabled: builtins.bool
- """
- Whether to send / consume json packets on MQTT
- """
- tls_enabled: builtins.bool
- """
- If true, we attempt to establish a secure connection using TLS
- """
- root: builtins.str
- """
- The root topic to use for MQTT messages. Default is "msh".
- This is useful if you want to use a single MQTT server for multiple meshtastic networks and separate them via ACLs
- """
- proxy_to_client_enabled: builtins.bool
- """
- If true, we can use the connected phone / client to proxy messages to MQTT instead of a direct connection
- """
- map_reporting_enabled: builtins.bool
- """
- If true, we will periodically report unencrypted information about our node to a map via MQTT
- """
- @property
- def map_report_settings(self) -> global___ModuleConfig.MapReportSettings:
- """
- Settings for reporting information about our node to a map via MQTT
- """
-
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- address: builtins.str = ...,
- username: builtins.str = ...,
- password: builtins.str = ...,
- encryption_enabled: builtins.bool = ...,
- json_enabled: builtins.bool = ...,
- tls_enabled: builtins.bool = ...,
- root: builtins.str = ...,
- proxy_to_client_enabled: builtins.bool = ...,
- map_reporting_enabled: builtins.bool = ...,
- map_report_settings: global___ModuleConfig.MapReportSettings | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["map_report_settings", b"map_report_settings"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["address", b"address", "enabled", b"enabled", "encryption_enabled", b"encryption_enabled", "json_enabled", b"json_enabled", "map_report_settings", b"map_report_settings", "map_reporting_enabled", b"map_reporting_enabled", "password", b"password", "proxy_to_client_enabled", b"proxy_to_client_enabled", "root", b"root", "tls_enabled", b"tls_enabled", "username", b"username"]) -> None: ...
-
- @typing.final
- class MapReportSettings(google.protobuf.message.Message):
- """
- Settings for reporting unencrypted information about our node to a map via MQTT
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PUBLISH_INTERVAL_SECS_FIELD_NUMBER: builtins.int
- POSITION_PRECISION_FIELD_NUMBER: builtins.int
- SHOULD_REPORT_LOCATION_FIELD_NUMBER: builtins.int
- publish_interval_secs: builtins.int
- """
- How often we should report our info to the map (in seconds)
- """
- position_precision: builtins.int
- """
- Bits of precision for the location sent (default of 32 is full precision).
- """
- should_report_location: builtins.bool
- """
- Whether we have opted-in to report our location to the map
- """
- def __init__(
- self,
- *,
- publish_interval_secs: builtins.int = ...,
- position_precision: builtins.int = ...,
- should_report_location: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["position_precision", b"position_precision", "publish_interval_secs", b"publish_interval_secs", "should_report_location", b"should_report_location"]) -> None: ...
-
- @typing.final
- class RemoteHardwareConfig(google.protobuf.message.Message):
- """
- RemoteHardwareModule Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- ALLOW_UNDEFINED_PIN_ACCESS_FIELD_NUMBER: builtins.int
- AVAILABLE_PINS_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Whether the Module is enabled
- """
- allow_undefined_pin_access: builtins.bool
- """
- Whether the Module allows consumers to read / write to pins not defined in available_pins
- """
- @property
- def available_pins(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___RemoteHardwarePin]:
- """
- Exposes the available pins to the mesh for reading and writing
- """
-
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- allow_undefined_pin_access: builtins.bool = ...,
- available_pins: collections.abc.Iterable[global___RemoteHardwarePin] | None = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["allow_undefined_pin_access", b"allow_undefined_pin_access", "available_pins", b"available_pins", "enabled", b"enabled"]) -> None: ...
-
- @typing.final
- class NeighborInfoConfig(google.protobuf.message.Message):
- """
- NeighborInfoModule Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- TRANSMIT_OVER_LORA_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Whether the Module is enabled
- """
- update_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- Neighbor Info (minimum is 14400, i.e., 4 hours)
- """
- transmit_over_lora: builtins.bool
- """
- Whether in addition to sending it to MQTT and the PhoneAPI, our NeighborInfo should be transmitted over LoRa.
- Note that this is not available on a channel with default key and name.
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- update_interval: builtins.int = ...,
- transmit_over_lora: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["enabled", b"enabled", "transmit_over_lora", b"transmit_over_lora", "update_interval", b"update_interval"]) -> None: ...
-
- @typing.final
- class DetectionSensorConfig(google.protobuf.message.Message):
- """
- Detection Sensor Module Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _TriggerType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _TriggerTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ModuleConfig.DetectionSensorConfig._TriggerType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- LOGIC_LOW: ModuleConfig.DetectionSensorConfig._TriggerType.ValueType # 0
- """Event is triggered if pin is low"""
- LOGIC_HIGH: ModuleConfig.DetectionSensorConfig._TriggerType.ValueType # 1
- """Event is triggered if pin is high"""
- FALLING_EDGE: ModuleConfig.DetectionSensorConfig._TriggerType.ValueType # 2
- """Event is triggered when pin goes high to low"""
- RISING_EDGE: ModuleConfig.DetectionSensorConfig._TriggerType.ValueType # 3
- """Event is triggered when pin goes low to high"""
- EITHER_EDGE_ACTIVE_LOW: ModuleConfig.DetectionSensorConfig._TriggerType.ValueType # 4
- """Event is triggered on every pin state change, low is considered to be
- "active"
- """
- EITHER_EDGE_ACTIVE_HIGH: ModuleConfig.DetectionSensorConfig._TriggerType.ValueType # 5
- """Event is triggered on every pin state change, high is considered to be
- "active"
- """
-
- class TriggerType(_TriggerType, metaclass=_TriggerTypeEnumTypeWrapper): ...
- LOGIC_LOW: ModuleConfig.DetectionSensorConfig.TriggerType.ValueType # 0
- """Event is triggered if pin is low"""
- LOGIC_HIGH: ModuleConfig.DetectionSensorConfig.TriggerType.ValueType # 1
- """Event is triggered if pin is high"""
- FALLING_EDGE: ModuleConfig.DetectionSensorConfig.TriggerType.ValueType # 2
- """Event is triggered when pin goes high to low"""
- RISING_EDGE: ModuleConfig.DetectionSensorConfig.TriggerType.ValueType # 3
- """Event is triggered when pin goes low to high"""
- EITHER_EDGE_ACTIVE_LOW: ModuleConfig.DetectionSensorConfig.TriggerType.ValueType # 4
- """Event is triggered on every pin state change, low is considered to be
- "active"
- """
- EITHER_EDGE_ACTIVE_HIGH: ModuleConfig.DetectionSensorConfig.TriggerType.ValueType # 5
- """Event is triggered on every pin state change, high is considered to be
- "active"
- """
-
- ENABLED_FIELD_NUMBER: builtins.int
- MINIMUM_BROADCAST_SECS_FIELD_NUMBER: builtins.int
- STATE_BROADCAST_SECS_FIELD_NUMBER: builtins.int
- SEND_BELL_FIELD_NUMBER: builtins.int
- NAME_FIELD_NUMBER: builtins.int
- MONITOR_PIN_FIELD_NUMBER: builtins.int
- DETECTION_TRIGGER_TYPE_FIELD_NUMBER: builtins.int
- USE_PULLUP_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Whether the Module is enabled
- """
- minimum_broadcast_secs: builtins.int
- """
- Interval in seconds of how often we can send a message to the mesh when a
- trigger event is detected
- """
- state_broadcast_secs: builtins.int
- """
- Interval in seconds of how often we should send a message to the mesh
- with the current state regardless of trigger events When set to 0, only
- trigger events will be broadcasted Works as a sort of status heartbeat
- for peace of mind
- """
- send_bell: builtins.bool
- """
- Send ASCII bell with alert message
- Useful for triggering ext. notification on bell
- """
- name: builtins.str
- """
- Friendly name used to format message sent to mesh
- Example: A name "Motion" would result in a message "Motion detected"
- Maximum length of 20 characters
- """
- monitor_pin: builtins.int
- """
- GPIO pin to monitor for state changes
- """
- detection_trigger_type: global___ModuleConfig.DetectionSensorConfig.TriggerType.ValueType
- """
- The type of trigger event to be used
- """
- use_pullup: builtins.bool
- """
- Whether or not use INPUT_PULLUP mode for GPIO pin
- Only applicable if the board uses pull-up resistors on the pin
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- minimum_broadcast_secs: builtins.int = ...,
- state_broadcast_secs: builtins.int = ...,
- send_bell: builtins.bool = ...,
- name: builtins.str = ...,
- monitor_pin: builtins.int = ...,
- detection_trigger_type: global___ModuleConfig.DetectionSensorConfig.TriggerType.ValueType = ...,
- use_pullup: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["detection_trigger_type", b"detection_trigger_type", "enabled", b"enabled", "minimum_broadcast_secs", b"minimum_broadcast_secs", "monitor_pin", b"monitor_pin", "name", b"name", "send_bell", b"send_bell", "state_broadcast_secs", b"state_broadcast_secs", "use_pullup", b"use_pullup"]) -> None: ...
-
- @typing.final
- class AudioConfig(google.protobuf.message.Message):
- """
- Audio Config for codec2 voice
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Audio_Baud:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _Audio_BaudEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ModuleConfig.AudioConfig._Audio_Baud.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- CODEC2_DEFAULT: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 0
- CODEC2_3200: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 1
- CODEC2_2400: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 2
- CODEC2_1600: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 3
- CODEC2_1400: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 4
- CODEC2_1300: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 5
- CODEC2_1200: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 6
- CODEC2_700: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 7
- CODEC2_700B: ModuleConfig.AudioConfig._Audio_Baud.ValueType # 8
-
- class Audio_Baud(_Audio_Baud, metaclass=_Audio_BaudEnumTypeWrapper):
- """
- Baudrate for codec2 voice
- """
-
- CODEC2_DEFAULT: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 0
- CODEC2_3200: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 1
- CODEC2_2400: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 2
- CODEC2_1600: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 3
- CODEC2_1400: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 4
- CODEC2_1300: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 5
- CODEC2_1200: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 6
- CODEC2_700: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 7
- CODEC2_700B: ModuleConfig.AudioConfig.Audio_Baud.ValueType # 8
-
- CODEC2_ENABLED_FIELD_NUMBER: builtins.int
- PTT_PIN_FIELD_NUMBER: builtins.int
- BITRATE_FIELD_NUMBER: builtins.int
- I2S_WS_FIELD_NUMBER: builtins.int
- I2S_SD_FIELD_NUMBER: builtins.int
- I2S_DIN_FIELD_NUMBER: builtins.int
- I2S_SCK_FIELD_NUMBER: builtins.int
- codec2_enabled: builtins.bool
- """
- Whether Audio is enabled
- """
- ptt_pin: builtins.int
- """
- PTT Pin
- """
- bitrate: global___ModuleConfig.AudioConfig.Audio_Baud.ValueType
- """
- The audio sample rate to use for codec2
- """
- i2s_ws: builtins.int
- """
- I2S Word Select
- """
- i2s_sd: builtins.int
- """
- I2S Data IN
- """
- i2s_din: builtins.int
- """
- I2S Data OUT
- """
- i2s_sck: builtins.int
- """
- I2S Clock
- """
- def __init__(
- self,
- *,
- codec2_enabled: builtins.bool = ...,
- ptt_pin: builtins.int = ...,
- bitrate: global___ModuleConfig.AudioConfig.Audio_Baud.ValueType = ...,
- i2s_ws: builtins.int = ...,
- i2s_sd: builtins.int = ...,
- i2s_din: builtins.int = ...,
- i2s_sck: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["bitrate", b"bitrate", "codec2_enabled", b"codec2_enabled", "i2s_din", b"i2s_din", "i2s_sck", b"i2s_sck", "i2s_sd", b"i2s_sd", "i2s_ws", b"i2s_ws", "ptt_pin", b"ptt_pin"]) -> None: ...
-
- @typing.final
- class PaxcounterConfig(google.protobuf.message.Message):
- """
- Config for the Paxcounter Module
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- PAXCOUNTER_UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- WIFI_THRESHOLD_FIELD_NUMBER: builtins.int
- BLE_THRESHOLD_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Enable the Paxcounter Module
- """
- paxcounter_update_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- metrics to the mesh
- """
- wifi_threshold: builtins.int
- """
- WiFi RSSI threshold. Defaults to -80
- """
- ble_threshold: builtins.int
- """
- BLE RSSI threshold. Defaults to -80
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- paxcounter_update_interval: builtins.int = ...,
- wifi_threshold: builtins.int = ...,
- ble_threshold: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["ble_threshold", b"ble_threshold", "enabled", b"enabled", "paxcounter_update_interval", b"paxcounter_update_interval", "wifi_threshold", b"wifi_threshold"]) -> None: ...
-
- @typing.final
- class SerialConfig(google.protobuf.message.Message):
- """
- Serial Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Serial_Baud:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _Serial_BaudEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ModuleConfig.SerialConfig._Serial_Baud.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- BAUD_DEFAULT: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 0
- BAUD_110: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 1
- BAUD_300: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 2
- BAUD_600: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 3
- BAUD_1200: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 4
- BAUD_2400: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 5
- BAUD_4800: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 6
- BAUD_9600: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 7
- BAUD_19200: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 8
- BAUD_38400: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 9
- BAUD_57600: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 10
- BAUD_115200: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 11
- BAUD_230400: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 12
- BAUD_460800: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 13
- BAUD_576000: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 14
- BAUD_921600: ModuleConfig.SerialConfig._Serial_Baud.ValueType # 15
-
- class Serial_Baud(_Serial_Baud, metaclass=_Serial_BaudEnumTypeWrapper):
- """
- TODO: REPLACE
- """
-
- BAUD_DEFAULT: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 0
- BAUD_110: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 1
- BAUD_300: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 2
- BAUD_600: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 3
- BAUD_1200: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 4
- BAUD_2400: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 5
- BAUD_4800: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 6
- BAUD_9600: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 7
- BAUD_19200: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 8
- BAUD_38400: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 9
- BAUD_57600: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 10
- BAUD_115200: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 11
- BAUD_230400: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 12
- BAUD_460800: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 13
- BAUD_576000: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 14
- BAUD_921600: ModuleConfig.SerialConfig.Serial_Baud.ValueType # 15
-
- class _Serial_Mode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _Serial_ModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ModuleConfig.SerialConfig._Serial_Mode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DEFAULT: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 0
- SIMPLE: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 1
- PROTO: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 2
- TEXTMSG: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 3
- NMEA: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 4
- CALTOPO: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 5
- """NMEA messages specifically tailored for CalTopo"""
- WS85: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 6
- """Ecowitt WS85 weather station"""
- VE_DIRECT: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 7
- """VE.Direct is a serial protocol used by Victron Energy products
- https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
- """
- MS_CONFIG: ModuleConfig.SerialConfig._Serial_Mode.ValueType # 8
- """Used to configure and view some parameters of MeshSolar.
- https://heltec.org/project/meshsolar/
- """
-
- class Serial_Mode(_Serial_Mode, metaclass=_Serial_ModeEnumTypeWrapper):
- """
- TODO: REPLACE
- """
-
- DEFAULT: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 0
- SIMPLE: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 1
- PROTO: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 2
- TEXTMSG: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 3
- NMEA: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 4
- CALTOPO: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 5
- """NMEA messages specifically tailored for CalTopo"""
- WS85: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 6
- """Ecowitt WS85 weather station"""
- VE_DIRECT: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 7
- """VE.Direct is a serial protocol used by Victron Energy products
- https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
- """
- MS_CONFIG: ModuleConfig.SerialConfig.Serial_Mode.ValueType # 8
- """Used to configure and view some parameters of MeshSolar.
- https://heltec.org/project/meshsolar/
- """
-
- ENABLED_FIELD_NUMBER: builtins.int
- ECHO_FIELD_NUMBER: builtins.int
- RXD_FIELD_NUMBER: builtins.int
- TXD_FIELD_NUMBER: builtins.int
- BAUD_FIELD_NUMBER: builtins.int
- TIMEOUT_FIELD_NUMBER: builtins.int
- MODE_FIELD_NUMBER: builtins.int
- OVERRIDE_CONSOLE_SERIAL_PORT_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Preferences for the SerialModule
- """
- echo: builtins.bool
- """
- TODO: REPLACE
- """
- rxd: builtins.int
- """
- RX pin (should match Arduino gpio pin number)
- """
- txd: builtins.int
- """
- TX pin (should match Arduino gpio pin number)
- """
- baud: global___ModuleConfig.SerialConfig.Serial_Baud.ValueType
- """
- Serial baud rate
- """
- timeout: builtins.int
- """
- TODO: REPLACE
- """
- mode: global___ModuleConfig.SerialConfig.Serial_Mode.ValueType
- """
- Mode for serial module operation
- """
- override_console_serial_port: builtins.bool
- """
- Overrides the platform's defacto Serial port instance to use with Serial module config settings
- This is currently only usable in output modes like NMEA / CalTopo and may behave strangely or not work at all in other modes
- Existing logging over the Serial Console will still be present
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- echo: builtins.bool = ...,
- rxd: builtins.int = ...,
- txd: builtins.int = ...,
- baud: global___ModuleConfig.SerialConfig.Serial_Baud.ValueType = ...,
- timeout: builtins.int = ...,
- mode: global___ModuleConfig.SerialConfig.Serial_Mode.ValueType = ...,
- override_console_serial_port: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["baud", b"baud", "echo", b"echo", "enabled", b"enabled", "mode", b"mode", "override_console_serial_port", b"override_console_serial_port", "rxd", b"rxd", "timeout", b"timeout", "txd", b"txd"]) -> None: ...
-
- @typing.final
- class ExternalNotificationConfig(google.protobuf.message.Message):
- """
- External Notifications Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- OUTPUT_MS_FIELD_NUMBER: builtins.int
- OUTPUT_FIELD_NUMBER: builtins.int
- OUTPUT_VIBRA_FIELD_NUMBER: builtins.int
- OUTPUT_BUZZER_FIELD_NUMBER: builtins.int
- ACTIVE_FIELD_NUMBER: builtins.int
- ALERT_MESSAGE_FIELD_NUMBER: builtins.int
- ALERT_MESSAGE_VIBRA_FIELD_NUMBER: builtins.int
- ALERT_MESSAGE_BUZZER_FIELD_NUMBER: builtins.int
- ALERT_BELL_FIELD_NUMBER: builtins.int
- ALERT_BELL_VIBRA_FIELD_NUMBER: builtins.int
- ALERT_BELL_BUZZER_FIELD_NUMBER: builtins.int
- USE_PWM_FIELD_NUMBER: builtins.int
- NAG_TIMEOUT_FIELD_NUMBER: builtins.int
- USE_I2S_AS_BUZZER_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Enable the ExternalNotificationModule
- """
- output_ms: builtins.int
- """
- When using in On/Off mode, keep the output on for this many
- milliseconds. Default 1000ms (1 second).
- """
- output: builtins.int
- """
- Define the output pin GPIO setting Defaults to
- EXT_NOTIFY_OUT if set for the board.
- In standalone devices this pin should drive the LED to match the UI.
- """
- output_vibra: builtins.int
- """
- Optional: Define a secondary output pin for a vibra motor
- This is used in standalone devices to match the UI.
- """
- output_buzzer: builtins.int
- """
- Optional: Define a tertiary output pin for an active buzzer
- This is used in standalone devices to to match the UI.
- """
- active: builtins.bool
- """
- IF this is true, the 'output' Pin will be pulled active high, false
- means active low.
- """
- alert_message: builtins.bool
- """
- True: Alert when a text message arrives (output)
- """
- alert_message_vibra: builtins.bool
- """
- True: Alert when a text message arrives (output_vibra)
- """
- alert_message_buzzer: builtins.bool
- """
- True: Alert when a text message arrives (output_buzzer)
- """
- alert_bell: builtins.bool
- """
- True: Alert when the bell character is received (output)
- """
- alert_bell_vibra: builtins.bool
- """
- True: Alert when the bell character is received (output_vibra)
- """
- alert_bell_buzzer: builtins.bool
- """
- True: Alert when the bell character is received (output_buzzer)
- """
- use_pwm: builtins.bool
- """
- use a PWM output instead of a simple on/off output. This will ignore
- the 'output', 'output_ms' and 'active' settings and use the
- device.buzzer_gpio instead.
- """
- nag_timeout: builtins.int
- """
- The notification will toggle with 'output_ms' for this time of seconds.
- Default is 0 which means don't repeat at all. 60 would mean blink
- and/or beep for 60 seconds
- """
- use_i2s_as_buzzer: builtins.bool
- """
- When true, enables 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
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- output_ms: builtins.int = ...,
- output: builtins.int = ...,
- output_vibra: builtins.int = ...,
- output_buzzer: builtins.int = ...,
- active: builtins.bool = ...,
- alert_message: builtins.bool = ...,
- alert_message_vibra: builtins.bool = ...,
- alert_message_buzzer: builtins.bool = ...,
- alert_bell: builtins.bool = ...,
- alert_bell_vibra: builtins.bool = ...,
- alert_bell_buzzer: builtins.bool = ...,
- use_pwm: builtins.bool = ...,
- nag_timeout: builtins.int = ...,
- use_i2s_as_buzzer: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["active", b"active", "alert_bell", b"alert_bell", "alert_bell_buzzer", b"alert_bell_buzzer", "alert_bell_vibra", b"alert_bell_vibra", "alert_message", b"alert_message", "alert_message_buzzer", b"alert_message_buzzer", "alert_message_vibra", b"alert_message_vibra", "enabled", b"enabled", "nag_timeout", b"nag_timeout", "output", b"output", "output_buzzer", b"output_buzzer", "output_ms", b"output_ms", "output_vibra", b"output_vibra", "use_i2s_as_buzzer", b"use_i2s_as_buzzer", "use_pwm", b"use_pwm"]) -> None: ...
-
- @typing.final
- class StoreForwardConfig(google.protobuf.message.Message):
- """
- Store and Forward Module Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- HEARTBEAT_FIELD_NUMBER: builtins.int
- RECORDS_FIELD_NUMBER: builtins.int
- HISTORY_RETURN_MAX_FIELD_NUMBER: builtins.int
- HISTORY_RETURN_WINDOW_FIELD_NUMBER: builtins.int
- IS_SERVER_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Enable the Store and Forward Module
- """
- heartbeat: builtins.bool
- """
- TODO: REPLACE
- """
- records: builtins.int
- """
- TODO: REPLACE
- """
- history_return_max: builtins.int
- """
- TODO: REPLACE
- """
- history_return_window: builtins.int
- """
- TODO: REPLACE
- """
- is_server: builtins.bool
- """
- Set to true to let this node act as a server that stores received messages and resends them upon request.
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- heartbeat: builtins.bool = ...,
- records: builtins.int = ...,
- history_return_max: builtins.int = ...,
- history_return_window: builtins.int = ...,
- is_server: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["enabled", b"enabled", "heartbeat", b"heartbeat", "history_return_max", b"history_return_max", "history_return_window", b"history_return_window", "is_server", b"is_server", "records", b"records"]) -> None: ...
-
- @typing.final
- class RangeTestConfig(google.protobuf.message.Message):
- """
- Preferences for the RangeTestModule
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ENABLED_FIELD_NUMBER: builtins.int
- SENDER_FIELD_NUMBER: builtins.int
- SAVE_FIELD_NUMBER: builtins.int
- CLEAR_ON_REBOOT_FIELD_NUMBER: builtins.int
- enabled: builtins.bool
- """
- Enable the Range Test Module
- """
- sender: builtins.int
- """
- Send out range test messages from this node
- """
- save: builtins.bool
- """
- Bool value indicating that this node should save a RangeTest.csv file.
- ESP32 Only
- """
- clear_on_reboot: builtins.bool
- """
- Bool indicating that the node should cleanup / destroy it's RangeTest.csv file.
- ESP32 Only
- """
- def __init__(
- self,
- *,
- enabled: builtins.bool = ...,
- sender: builtins.int = ...,
- save: builtins.bool = ...,
- clear_on_reboot: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["clear_on_reboot", b"clear_on_reboot", "enabled", b"enabled", "save", b"save", "sender", b"sender"]) -> None: ...
-
- @typing.final
- class TelemetryConfig(google.protobuf.message.Message):
- """
- Configuration for both device and environment metrics
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- DEVICE_UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- ENVIRONMENT_UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- ENVIRONMENT_MEASUREMENT_ENABLED_FIELD_NUMBER: builtins.int
- ENVIRONMENT_SCREEN_ENABLED_FIELD_NUMBER: builtins.int
- ENVIRONMENT_DISPLAY_FAHRENHEIT_FIELD_NUMBER: builtins.int
- AIR_QUALITY_ENABLED_FIELD_NUMBER: builtins.int
- AIR_QUALITY_INTERVAL_FIELD_NUMBER: builtins.int
- POWER_MEASUREMENT_ENABLED_FIELD_NUMBER: builtins.int
- POWER_UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- POWER_SCREEN_ENABLED_FIELD_NUMBER: builtins.int
- HEALTH_MEASUREMENT_ENABLED_FIELD_NUMBER: builtins.int
- HEALTH_UPDATE_INTERVAL_FIELD_NUMBER: builtins.int
- HEALTH_SCREEN_ENABLED_FIELD_NUMBER: builtins.int
- DEVICE_TELEMETRY_ENABLED_FIELD_NUMBER: builtins.int
- device_update_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- device metrics to the mesh
- """
- environment_update_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- environment measurements to the mesh
- """
- environment_measurement_enabled: builtins.bool
- """
- Preferences for the Telemetry Module (Environment)
- Enable/Disable the telemetry measurement module measurement collection
- """
- environment_screen_enabled: builtins.bool
- """
- Enable/Disable the telemetry measurement module on-device display
- """
- environment_display_fahrenheit: builtins.bool
- """
- We'll always read the sensor in Celsius, but sometimes we might want to
- display the results in Fahrenheit as a "user preference".
- """
- air_quality_enabled: builtins.bool
- """
- Enable/Disable the air quality metrics
- """
- air_quality_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- air quality metrics to the mesh
- """
- power_measurement_enabled: builtins.bool
- """
- Enable/disable Power metrics
- """
- power_update_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- power metrics to the mesh
- """
- power_screen_enabled: builtins.bool
- """
- Enable/Disable the power measurement module on-device display
- """
- health_measurement_enabled: builtins.bool
- """
- Preferences for the (Health) Telemetry Module
- Enable/Disable the telemetry measurement module measurement collection
- """
- health_update_interval: builtins.int
- """
- Interval in seconds of how often we should try to send our
- health metrics to the mesh
- """
- health_screen_enabled: builtins.bool
- """
- Enable/Disable the health telemetry module on-device display
- """
- device_telemetry_enabled: builtins.bool
- """
- Enable/Disable the device telemetry module to send metrics to the mesh
- Note: We will still send telemtry to the connected phone / client every minute over the API
- """
- def __init__(
- self,
- *,
- device_update_interval: builtins.int = ...,
- environment_update_interval: builtins.int = ...,
- environment_measurement_enabled: builtins.bool = ...,
- environment_screen_enabled: builtins.bool = ...,
- environment_display_fahrenheit: builtins.bool = ...,
- air_quality_enabled: builtins.bool = ...,
- air_quality_interval: builtins.int = ...,
- power_measurement_enabled: builtins.bool = ...,
- power_update_interval: builtins.int = ...,
- power_screen_enabled: builtins.bool = ...,
- health_measurement_enabled: builtins.bool = ...,
- health_update_interval: builtins.int = ...,
- health_screen_enabled: builtins.bool = ...,
- device_telemetry_enabled: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["air_quality_enabled", b"air_quality_enabled", "air_quality_interval", b"air_quality_interval", "device_telemetry_enabled", b"device_telemetry_enabled", "device_update_interval", b"device_update_interval", "environment_display_fahrenheit", b"environment_display_fahrenheit", "environment_measurement_enabled", b"environment_measurement_enabled", "environment_screen_enabled", b"environment_screen_enabled", "environment_update_interval", b"environment_update_interval", "health_measurement_enabled", b"health_measurement_enabled", "health_screen_enabled", b"health_screen_enabled", "health_update_interval", b"health_update_interval", "power_measurement_enabled", b"power_measurement_enabled", "power_screen_enabled", b"power_screen_enabled", "power_update_interval", b"power_update_interval"]) -> None: ...
-
- @typing.final
- class CannedMessageConfig(google.protobuf.message.Message):
- """
- Canned Messages Module Config
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _InputEventChar:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _InputEventCharEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[ModuleConfig.CannedMessageConfig._InputEventChar.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- NONE: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 0
- """
- TODO: REPLACE
- """
- UP: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 17
- """
- TODO: REPLACE
- """
- DOWN: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 18
- """
- TODO: REPLACE
- """
- LEFT: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 19
- """
- TODO: REPLACE
- """
- RIGHT: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 20
- """
- TODO: REPLACE
- """
- SELECT: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 10
- """
- '\\n'
- """
- BACK: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 27
- """
- TODO: REPLACE
- """
- CANCEL: ModuleConfig.CannedMessageConfig._InputEventChar.ValueType # 24
- """
- TODO: REPLACE
- """
-
- class InputEventChar(_InputEventChar, metaclass=_InputEventCharEnumTypeWrapper):
- """
- TODO: REPLACE
- """
-
- NONE: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 0
- """
- TODO: REPLACE
- """
- UP: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 17
- """
- TODO: REPLACE
- """
- DOWN: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 18
- """
- TODO: REPLACE
- """
- LEFT: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 19
- """
- TODO: REPLACE
- """
- RIGHT: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 20
- """
- TODO: REPLACE
- """
- SELECT: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 10
- """
- '\\n'
- """
- BACK: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 27
- """
- TODO: REPLACE
- """
- CANCEL: ModuleConfig.CannedMessageConfig.InputEventChar.ValueType # 24
- """
- TODO: REPLACE
- """
-
- ROTARY1_ENABLED_FIELD_NUMBER: builtins.int
- INPUTBROKER_PIN_A_FIELD_NUMBER: builtins.int
- INPUTBROKER_PIN_B_FIELD_NUMBER: builtins.int
- INPUTBROKER_PIN_PRESS_FIELD_NUMBER: builtins.int
- INPUTBROKER_EVENT_CW_FIELD_NUMBER: builtins.int
- INPUTBROKER_EVENT_CCW_FIELD_NUMBER: builtins.int
- INPUTBROKER_EVENT_PRESS_FIELD_NUMBER: builtins.int
- UPDOWN1_ENABLED_FIELD_NUMBER: builtins.int
- ENABLED_FIELD_NUMBER: builtins.int
- ALLOW_INPUT_SOURCE_FIELD_NUMBER: builtins.int
- SEND_BELL_FIELD_NUMBER: builtins.int
- rotary1_enabled: builtins.bool
- """
- Enable the rotary encoder #1. This is a 'dumb' encoder sending pulses on both A and B pins while rotating.
- """
- inputbroker_pin_a: builtins.int
- """
- GPIO pin for rotary encoder A port.
- """
- inputbroker_pin_b: builtins.int
- """
- GPIO pin for rotary encoder B port.
- """
- inputbroker_pin_press: builtins.int
- """
- GPIO pin for rotary encoder Press port.
- """
- inputbroker_event_cw: global___ModuleConfig.CannedMessageConfig.InputEventChar.ValueType
- """
- Generate input event on CW of this kind.
- """
- inputbroker_event_ccw: global___ModuleConfig.CannedMessageConfig.InputEventChar.ValueType
- """
- Generate input event on CCW of this kind.
- """
- inputbroker_event_press: global___ModuleConfig.CannedMessageConfig.InputEventChar.ValueType
- """
- Generate input event on Press of this kind.
- """
- updown1_enabled: builtins.bool
- """
- Enable the Up/Down/Select input device. Can be RAK rotary encoder or 3 buttons. Uses the a/b/press definitions from inputbroker.
- """
- enabled: builtins.bool
- """
- Enable/disable CannedMessageModule.
- """
- allow_input_source: builtins.str
- """
- Input event origin accepted by the canned message module.
- Can be e.g. "rotEnc1", "upDownEnc1", "scanAndSelect", "cardkb", "serialkb", or keyword "_any"
- """
- send_bell: builtins.bool
- """
- CannedMessageModule also sends a bell character with the messages.
- ExternalNotificationModule can benefit from this feature.
- """
- def __init__(
- self,
- *,
- rotary1_enabled: builtins.bool = ...,
- inputbroker_pin_a: builtins.int = ...,
- inputbroker_pin_b: builtins.int = ...,
- inputbroker_pin_press: builtins.int = ...,
- inputbroker_event_cw: global___ModuleConfig.CannedMessageConfig.InputEventChar.ValueType = ...,
- inputbroker_event_ccw: global___ModuleConfig.CannedMessageConfig.InputEventChar.ValueType = ...,
- inputbroker_event_press: global___ModuleConfig.CannedMessageConfig.InputEventChar.ValueType = ...,
- updown1_enabled: builtins.bool = ...,
- enabled: builtins.bool = ...,
- allow_input_source: builtins.str = ...,
- send_bell: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["allow_input_source", b"allow_input_source", "enabled", b"enabled", "inputbroker_event_ccw", b"inputbroker_event_ccw", "inputbroker_event_cw", b"inputbroker_event_cw", "inputbroker_event_press", b"inputbroker_event_press", "inputbroker_pin_a", b"inputbroker_pin_a", "inputbroker_pin_b", b"inputbroker_pin_b", "inputbroker_pin_press", b"inputbroker_pin_press", "rotary1_enabled", b"rotary1_enabled", "send_bell", b"send_bell", "updown1_enabled", b"updown1_enabled"]) -> None: ...
-
- @typing.final
- class AmbientLightingConfig(google.protobuf.message.Message):
- """
- Ambient Lighting Module - Settings for control of onboard LEDs to allow users to adjust the brightness levels and respective color levels.
- Initially created for the RAK14001 RGB LED module.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- LED_STATE_FIELD_NUMBER: builtins.int
- CURRENT_FIELD_NUMBER: builtins.int
- RED_FIELD_NUMBER: builtins.int
- GREEN_FIELD_NUMBER: builtins.int
- BLUE_FIELD_NUMBER: builtins.int
- led_state: builtins.bool
- """
- Sets LED to on or off.
- """
- current: builtins.int
- """
- Sets the current for the LED output. Default is 10.
- """
- red: builtins.int
- """
- Sets the red LED level. Values are 0-255.
- """
- green: builtins.int
- """
- Sets the green LED level. Values are 0-255.
- """
- blue: builtins.int
- """
- Sets the blue LED level. Values are 0-255.
- """
- def __init__(
- self,
- *,
- led_state: builtins.bool = ...,
- current: builtins.int = ...,
- red: builtins.int = ...,
- green: builtins.int = ...,
- blue: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["blue", b"blue", "current", b"current", "green", b"green", "led_state", b"led_state", "red", b"red"]) -> None: ...
-
- MQTT_FIELD_NUMBER: builtins.int
- SERIAL_FIELD_NUMBER: builtins.int
- EXTERNAL_NOTIFICATION_FIELD_NUMBER: builtins.int
- STORE_FORWARD_FIELD_NUMBER: builtins.int
- RANGE_TEST_FIELD_NUMBER: builtins.int
- TELEMETRY_FIELD_NUMBER: builtins.int
- CANNED_MESSAGE_FIELD_NUMBER: builtins.int
- AUDIO_FIELD_NUMBER: builtins.int
- REMOTE_HARDWARE_FIELD_NUMBER: builtins.int
- NEIGHBOR_INFO_FIELD_NUMBER: builtins.int
- AMBIENT_LIGHTING_FIELD_NUMBER: builtins.int
- DETECTION_SENSOR_FIELD_NUMBER: builtins.int
- PAXCOUNTER_FIELD_NUMBER: builtins.int
- @property
- def mqtt(self) -> global___ModuleConfig.MQTTConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def serial(self) -> global___ModuleConfig.SerialConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def external_notification(self) -> global___ModuleConfig.ExternalNotificationConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def store_forward(self) -> global___ModuleConfig.StoreForwardConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def range_test(self) -> global___ModuleConfig.RangeTestConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def telemetry(self) -> global___ModuleConfig.TelemetryConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def canned_message(self) -> global___ModuleConfig.CannedMessageConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def audio(self) -> global___ModuleConfig.AudioConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def remote_hardware(self) -> global___ModuleConfig.RemoteHardwareConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def neighbor_info(self) -> global___ModuleConfig.NeighborInfoConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def ambient_lighting(self) -> global___ModuleConfig.AmbientLightingConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def detection_sensor(self) -> global___ModuleConfig.DetectionSensorConfig:
- """
- TODO: REPLACE
- """
-
- @property
- def paxcounter(self) -> global___ModuleConfig.PaxcounterConfig:
- """
- TODO: REPLACE
- """
-
- def __init__(
- self,
- *,
- mqtt: global___ModuleConfig.MQTTConfig | None = ...,
- serial: global___ModuleConfig.SerialConfig | None = ...,
- external_notification: global___ModuleConfig.ExternalNotificationConfig | None = ...,
- store_forward: global___ModuleConfig.StoreForwardConfig | None = ...,
- range_test: global___ModuleConfig.RangeTestConfig | None = ...,
- telemetry: global___ModuleConfig.TelemetryConfig | None = ...,
- canned_message: global___ModuleConfig.CannedMessageConfig | None = ...,
- audio: global___ModuleConfig.AudioConfig | None = ...,
- remote_hardware: global___ModuleConfig.RemoteHardwareConfig | None = ...,
- neighbor_info: global___ModuleConfig.NeighborInfoConfig | None = ...,
- ambient_lighting: global___ModuleConfig.AmbientLightingConfig | None = ...,
- detection_sensor: global___ModuleConfig.DetectionSensorConfig | None = ...,
- paxcounter: global___ModuleConfig.PaxcounterConfig | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["ambient_lighting", b"ambient_lighting", "audio", b"audio", "canned_message", b"canned_message", "detection_sensor", b"detection_sensor", "external_notification", b"external_notification", "mqtt", b"mqtt", "neighbor_info", b"neighbor_info", "paxcounter", b"paxcounter", "payload_variant", b"payload_variant", "range_test", b"range_test", "remote_hardware", b"remote_hardware", "serial", b"serial", "store_forward", b"store_forward", "telemetry", b"telemetry"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["ambient_lighting", b"ambient_lighting", "audio", b"audio", "canned_message", b"canned_message", "detection_sensor", b"detection_sensor", "external_notification", b"external_notification", "mqtt", b"mqtt", "neighbor_info", b"neighbor_info", "paxcounter", b"paxcounter", "payload_variant", b"payload_variant", "range_test", b"range_test", "remote_hardware", b"remote_hardware", "serial", b"serial", "store_forward", b"store_forward", "telemetry", b"telemetry"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["payload_variant", b"payload_variant"]) -> typing.Literal["mqtt", "serial", "external_notification", "store_forward", "range_test", "telemetry", "canned_message", "audio", "remote_hardware", "neighbor_info", "ambient_lighting", "detection_sensor", "paxcounter"] | None: ...
-
-global___ModuleConfig = ModuleConfig
-
-@typing.final
-class RemoteHardwarePin(google.protobuf.message.Message):
- """
- A GPIO pin definition for remote hardware module
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- GPIO_PIN_FIELD_NUMBER: builtins.int
- NAME_FIELD_NUMBER: builtins.int
- TYPE_FIELD_NUMBER: builtins.int
- gpio_pin: builtins.int
- """
- GPIO Pin number (must match Arduino)
- """
- name: builtins.str
- """
- Name for the GPIO pin (i.e. Front gate, mailbox, etc)
- """
- type: global___RemoteHardwarePinType.ValueType
- """
- Type of GPIO access available to consumers on the mesh
- """
- def __init__(
- self,
- *,
- gpio_pin: builtins.int = ...,
- name: builtins.str = ...,
- type: global___RemoteHardwarePinType.ValueType = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["gpio_pin", b"gpio_pin", "name", b"name", "type", b"type"]) -> None: ...
-
-global___RemoteHardwarePin = RemoteHardwarePin
+from meshtastic.protobuf import atak_pb2 as _atak_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+DIGITAL_READ: RemoteHardwarePinType
+DIGITAL_WRITE: RemoteHardwarePinType
+UNKNOWN: RemoteHardwarePinType
+
+class ModuleConfig(_message.Message):
+ __slots__ = ["ambient_lighting", "audio", "canned_message", "detection_sensor", "external_notification", "mqtt", "neighbor_info", "paxcounter", "range_test", "remote_hardware", "serial", "statusmessage", "store_forward", "tak", "telemetry", "traffic_management"]
+ class AmbientLightingConfig(_message.Message):
+ __slots__ = ["blue", "current", "green", "led_state", "red"]
+ BLUE_FIELD_NUMBER: _ClassVar[int]
+ CURRENT_FIELD_NUMBER: _ClassVar[int]
+ GREEN_FIELD_NUMBER: _ClassVar[int]
+ LED_STATE_FIELD_NUMBER: _ClassVar[int]
+ RED_FIELD_NUMBER: _ClassVar[int]
+ blue: int
+ current: int
+ green: int
+ led_state: bool
+ red: int
+ def __init__(self, led_state: bool = ..., current: _Optional[int] = ..., red: _Optional[int] = ..., green: _Optional[int] = ..., blue: _Optional[int] = ...) -> None: ...
+ class AudioConfig(_message.Message):
+ __slots__ = ["bitrate", "codec2_enabled", "i2s_din", "i2s_sck", "i2s_sd", "i2s_ws", "ptt_pin"]
+ class Audio_Baud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ BITRATE_FIELD_NUMBER: _ClassVar[int]
+ CODEC2_1200: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_1300: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_1400: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_1600: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_2400: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_3200: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_700: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_700B: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_DEFAULT: ModuleConfig.AudioConfig.Audio_Baud
+ CODEC2_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ I2S_DIN_FIELD_NUMBER: _ClassVar[int]
+ I2S_SCK_FIELD_NUMBER: _ClassVar[int]
+ I2S_SD_FIELD_NUMBER: _ClassVar[int]
+ I2S_WS_FIELD_NUMBER: _ClassVar[int]
+ PTT_PIN_FIELD_NUMBER: _ClassVar[int]
+ bitrate: ModuleConfig.AudioConfig.Audio_Baud
+ codec2_enabled: bool
+ i2s_din: int
+ i2s_sck: int
+ i2s_sd: int
+ i2s_ws: int
+ ptt_pin: int
+ def __init__(self, codec2_enabled: bool = ..., ptt_pin: _Optional[int] = ..., bitrate: _Optional[_Union[ModuleConfig.AudioConfig.Audio_Baud, str]] = ..., i2s_ws: _Optional[int] = ..., i2s_sd: _Optional[int] = ..., i2s_din: _Optional[int] = ..., i2s_sck: _Optional[int] = ...) -> None: ...
+ class CannedMessageConfig(_message.Message):
+ __slots__ = ["allow_input_source", "enabled", "inputbroker_event_ccw", "inputbroker_event_cw", "inputbroker_event_press", "inputbroker_pin_a", "inputbroker_pin_b", "inputbroker_pin_press", "rotary1_enabled", "send_bell", "updown1_enabled"]
+ class InputEventChar(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ALLOW_INPUT_SOURCE_FIELD_NUMBER: _ClassVar[int]
+ BACK: ModuleConfig.CannedMessageConfig.InputEventChar
+ CANCEL: ModuleConfig.CannedMessageConfig.InputEventChar
+ DOWN: ModuleConfig.CannedMessageConfig.InputEventChar
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ INPUTBROKER_EVENT_CCW_FIELD_NUMBER: _ClassVar[int]
+ INPUTBROKER_EVENT_CW_FIELD_NUMBER: _ClassVar[int]
+ INPUTBROKER_EVENT_PRESS_FIELD_NUMBER: _ClassVar[int]
+ INPUTBROKER_PIN_A_FIELD_NUMBER: _ClassVar[int]
+ INPUTBROKER_PIN_B_FIELD_NUMBER: _ClassVar[int]
+ INPUTBROKER_PIN_PRESS_FIELD_NUMBER: _ClassVar[int]
+ LEFT: ModuleConfig.CannedMessageConfig.InputEventChar
+ NONE: ModuleConfig.CannedMessageConfig.InputEventChar
+ RIGHT: ModuleConfig.CannedMessageConfig.InputEventChar
+ ROTARY1_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ SELECT: ModuleConfig.CannedMessageConfig.InputEventChar
+ SEND_BELL_FIELD_NUMBER: _ClassVar[int]
+ UP: ModuleConfig.CannedMessageConfig.InputEventChar
+ UPDOWN1_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ allow_input_source: str
+ enabled: bool
+ inputbroker_event_ccw: ModuleConfig.CannedMessageConfig.InputEventChar
+ inputbroker_event_cw: ModuleConfig.CannedMessageConfig.InputEventChar
+ inputbroker_event_press: ModuleConfig.CannedMessageConfig.InputEventChar
+ inputbroker_pin_a: int
+ inputbroker_pin_b: int
+ inputbroker_pin_press: int
+ rotary1_enabled: bool
+ send_bell: bool
+ updown1_enabled: bool
+ def __init__(self, rotary1_enabled: bool = ..., inputbroker_pin_a: _Optional[int] = ..., inputbroker_pin_b: _Optional[int] = ..., inputbroker_pin_press: _Optional[int] = ..., inputbroker_event_cw: _Optional[_Union[ModuleConfig.CannedMessageConfig.InputEventChar, str]] = ..., inputbroker_event_ccw: _Optional[_Union[ModuleConfig.CannedMessageConfig.InputEventChar, str]] = ..., inputbroker_event_press: _Optional[_Union[ModuleConfig.CannedMessageConfig.InputEventChar, str]] = ..., updown1_enabled: bool = ..., enabled: bool = ..., allow_input_source: _Optional[str] = ..., send_bell: bool = ...) -> None: ...
+ class DetectionSensorConfig(_message.Message):
+ __slots__ = ["detection_trigger_type", "enabled", "minimum_broadcast_secs", "monitor_pin", "name", "send_bell", "state_broadcast_secs", "use_pullup"]
+ class TriggerType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ DETECTION_TRIGGER_TYPE_FIELD_NUMBER: _ClassVar[int]
+ EITHER_EDGE_ACTIVE_HIGH: ModuleConfig.DetectionSensorConfig.TriggerType
+ EITHER_EDGE_ACTIVE_LOW: ModuleConfig.DetectionSensorConfig.TriggerType
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ FALLING_EDGE: ModuleConfig.DetectionSensorConfig.TriggerType
+ LOGIC_HIGH: ModuleConfig.DetectionSensorConfig.TriggerType
+ LOGIC_LOW: ModuleConfig.DetectionSensorConfig.TriggerType
+ MINIMUM_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
+ MONITOR_PIN_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ RISING_EDGE: ModuleConfig.DetectionSensorConfig.TriggerType
+ SEND_BELL_FIELD_NUMBER: _ClassVar[int]
+ STATE_BROADCAST_SECS_FIELD_NUMBER: _ClassVar[int]
+ USE_PULLUP_FIELD_NUMBER: _ClassVar[int]
+ detection_trigger_type: ModuleConfig.DetectionSensorConfig.TriggerType
+ enabled: bool
+ minimum_broadcast_secs: int
+ monitor_pin: int
+ name: str
+ send_bell: bool
+ state_broadcast_secs: int
+ use_pullup: bool
+ def __init__(self, enabled: bool = ..., minimum_broadcast_secs: _Optional[int] = ..., state_broadcast_secs: _Optional[int] = ..., send_bell: bool = ..., name: _Optional[str] = ..., monitor_pin: _Optional[int] = ..., detection_trigger_type: _Optional[_Union[ModuleConfig.DetectionSensorConfig.TriggerType, str]] = ..., use_pullup: bool = ...) -> None: ...
+ class ExternalNotificationConfig(_message.Message):
+ __slots__ = ["active", "alert_bell", "alert_bell_buzzer", "alert_bell_vibra", "alert_message", "alert_message_buzzer", "alert_message_vibra", "enabled", "nag_timeout", "output", "output_buzzer", "output_ms", "output_vibra", "use_i2s_as_buzzer", "use_pwm"]
+ ACTIVE_FIELD_NUMBER: _ClassVar[int]
+ ALERT_BELL_BUZZER_FIELD_NUMBER: _ClassVar[int]
+ ALERT_BELL_FIELD_NUMBER: _ClassVar[int]
+ ALERT_BELL_VIBRA_FIELD_NUMBER: _ClassVar[int]
+ ALERT_MESSAGE_BUZZER_FIELD_NUMBER: _ClassVar[int]
+ ALERT_MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ ALERT_MESSAGE_VIBRA_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ NAG_TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+ OUTPUT_BUZZER_FIELD_NUMBER: _ClassVar[int]
+ OUTPUT_FIELD_NUMBER: _ClassVar[int]
+ OUTPUT_MS_FIELD_NUMBER: _ClassVar[int]
+ OUTPUT_VIBRA_FIELD_NUMBER: _ClassVar[int]
+ USE_I2S_AS_BUZZER_FIELD_NUMBER: _ClassVar[int]
+ USE_PWM_FIELD_NUMBER: _ClassVar[int]
+ active: bool
+ alert_bell: bool
+ alert_bell_buzzer: bool
+ alert_bell_vibra: bool
+ alert_message: bool
+ alert_message_buzzer: bool
+ alert_message_vibra: bool
+ enabled: bool
+ nag_timeout: int
+ output: int
+ output_buzzer: int
+ output_ms: int
+ output_vibra: int
+ use_i2s_as_buzzer: bool
+ use_pwm: bool
+ def __init__(self, enabled: bool = ..., output_ms: _Optional[int] = ..., output: _Optional[int] = ..., output_vibra: _Optional[int] = ..., output_buzzer: _Optional[int] = ..., active: bool = ..., alert_message: bool = ..., alert_message_vibra: bool = ..., alert_message_buzzer: bool = ..., alert_bell: bool = ..., alert_bell_vibra: bool = ..., alert_bell_buzzer: bool = ..., use_pwm: bool = ..., nag_timeout: _Optional[int] = ..., use_i2s_as_buzzer: bool = ...) -> None: ...
+ class MQTTConfig(_message.Message):
+ __slots__ = ["address", "enabled", "encryption_enabled", "json_enabled", "map_report_settings", "map_reporting_enabled", "password", "proxy_to_client_enabled", "root", "tls_enabled", "username"]
+ ADDRESS_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ENCRYPTION_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ JSON_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ MAP_REPORTING_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ MAP_REPORT_SETTINGS_FIELD_NUMBER: _ClassVar[int]
+ PASSWORD_FIELD_NUMBER: _ClassVar[int]
+ PROXY_TO_CLIENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ROOT_FIELD_NUMBER: _ClassVar[int]
+ TLS_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ USERNAME_FIELD_NUMBER: _ClassVar[int]
+ address: str
+ enabled: bool
+ encryption_enabled: bool
+ json_enabled: bool
+ map_report_settings: ModuleConfig.MapReportSettings
+ map_reporting_enabled: bool
+ password: str
+ proxy_to_client_enabled: bool
+ root: str
+ tls_enabled: bool
+ username: str
+ def __init__(self, enabled: bool = ..., address: _Optional[str] = ..., username: _Optional[str] = ..., password: _Optional[str] = ..., encryption_enabled: bool = ..., json_enabled: bool = ..., tls_enabled: bool = ..., root: _Optional[str] = ..., proxy_to_client_enabled: bool = ..., map_reporting_enabled: bool = ..., map_report_settings: _Optional[_Union[ModuleConfig.MapReportSettings, _Mapping]] = ...) -> None: ...
+ class MapReportSettings(_message.Message):
+ __slots__ = ["position_precision", "publish_interval_secs", "should_report_location"]
+ POSITION_PRECISION_FIELD_NUMBER: _ClassVar[int]
+ PUBLISH_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
+ SHOULD_REPORT_LOCATION_FIELD_NUMBER: _ClassVar[int]
+ position_precision: int
+ publish_interval_secs: int
+ should_report_location: bool
+ def __init__(self, publish_interval_secs: _Optional[int] = ..., position_precision: _Optional[int] = ..., should_report_location: bool = ...) -> None: ...
+ class NeighborInfoConfig(_message.Message):
+ __slots__ = ["enabled", "transmit_over_lora", "update_interval"]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ TRANSMIT_OVER_LORA_FIELD_NUMBER: _ClassVar[int]
+ UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ enabled: bool
+ transmit_over_lora: bool
+ update_interval: int
+ def __init__(self, enabled: bool = ..., update_interval: _Optional[int] = ..., transmit_over_lora: bool = ...) -> None: ...
+ class PaxcounterConfig(_message.Message):
+ __slots__ = ["ble_threshold", "enabled", "paxcounter_update_interval", "wifi_threshold"]
+ BLE_THRESHOLD_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ PAXCOUNTER_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ WIFI_THRESHOLD_FIELD_NUMBER: _ClassVar[int]
+ ble_threshold: int
+ enabled: bool
+ paxcounter_update_interval: int
+ wifi_threshold: int
+ def __init__(self, enabled: bool = ..., paxcounter_update_interval: _Optional[int] = ..., wifi_threshold: _Optional[int] = ..., ble_threshold: _Optional[int] = ...) -> None: ...
+ class RangeTestConfig(_message.Message):
+ __slots__ = ["clear_on_reboot", "enabled", "save", "sender"]
+ CLEAR_ON_REBOOT_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ SAVE_FIELD_NUMBER: _ClassVar[int]
+ SENDER_FIELD_NUMBER: _ClassVar[int]
+ clear_on_reboot: bool
+ enabled: bool
+ save: bool
+ sender: int
+ def __init__(self, enabled: bool = ..., sender: _Optional[int] = ..., save: bool = ..., clear_on_reboot: bool = ...) -> None: ...
+ class RemoteHardwareConfig(_message.Message):
+ __slots__ = ["allow_undefined_pin_access", "available_pins", "enabled"]
+ ALLOW_UNDEFINED_PIN_ACCESS_FIELD_NUMBER: _ClassVar[int]
+ AVAILABLE_PINS_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ allow_undefined_pin_access: bool
+ available_pins: _containers.RepeatedCompositeFieldContainer[RemoteHardwarePin]
+ enabled: bool
+ def __init__(self, enabled: bool = ..., allow_undefined_pin_access: bool = ..., available_pins: _Optional[_Iterable[_Union[RemoteHardwarePin, _Mapping]]] = ...) -> None: ...
+ class SerialConfig(_message.Message):
+ __slots__ = ["baud", "echo", "enabled", "mode", "override_console_serial_port", "rxd", "timeout", "txd"]
+ class Serial_Baud(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Serial_Mode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ BAUD_110: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_115200: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_1200: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_19200: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_230400: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_2400: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_300: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_38400: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_460800: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_4800: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_57600: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_576000: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_600: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_921600: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_9600: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_DEFAULT: ModuleConfig.SerialConfig.Serial_Baud
+ BAUD_FIELD_NUMBER: _ClassVar[int]
+ CALTOPO: ModuleConfig.SerialConfig.Serial_Mode
+ DEFAULT: ModuleConfig.SerialConfig.Serial_Mode
+ ECHO_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ LOG: ModuleConfig.SerialConfig.Serial_Mode
+ LOGTEXT: ModuleConfig.SerialConfig.Serial_Mode
+ MODE_FIELD_NUMBER: _ClassVar[int]
+ MS_CONFIG: ModuleConfig.SerialConfig.Serial_Mode
+ NMEA: ModuleConfig.SerialConfig.Serial_Mode
+ OVERRIDE_CONSOLE_SERIAL_PORT_FIELD_NUMBER: _ClassVar[int]
+ PROTO: ModuleConfig.SerialConfig.Serial_Mode
+ RXD_FIELD_NUMBER: _ClassVar[int]
+ SIMPLE: ModuleConfig.SerialConfig.Serial_Mode
+ TEXTMSG: ModuleConfig.SerialConfig.Serial_Mode
+ TIMEOUT_FIELD_NUMBER: _ClassVar[int]
+ TXD_FIELD_NUMBER: _ClassVar[int]
+ VE_DIRECT: ModuleConfig.SerialConfig.Serial_Mode
+ WS85: ModuleConfig.SerialConfig.Serial_Mode
+ baud: ModuleConfig.SerialConfig.Serial_Baud
+ echo: bool
+ enabled: bool
+ mode: ModuleConfig.SerialConfig.Serial_Mode
+ override_console_serial_port: bool
+ rxd: int
+ timeout: int
+ txd: int
+ def __init__(self, enabled: bool = ..., echo: bool = ..., rxd: _Optional[int] = ..., txd: _Optional[int] = ..., baud: _Optional[_Union[ModuleConfig.SerialConfig.Serial_Baud, str]] = ..., timeout: _Optional[int] = ..., mode: _Optional[_Union[ModuleConfig.SerialConfig.Serial_Mode, str]] = ..., override_console_serial_port: bool = ...) -> None: ...
+ class StatusMessageConfig(_message.Message):
+ __slots__ = ["node_status"]
+ NODE_STATUS_FIELD_NUMBER: _ClassVar[int]
+ node_status: str
+ def __init__(self, node_status: _Optional[str] = ...) -> None: ...
+ class StoreForwardConfig(_message.Message):
+ __slots__ = ["enabled", "heartbeat", "history_return_max", "history_return_window", "is_server", "records"]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ HEARTBEAT_FIELD_NUMBER: _ClassVar[int]
+ HISTORY_RETURN_MAX_FIELD_NUMBER: _ClassVar[int]
+ HISTORY_RETURN_WINDOW_FIELD_NUMBER: _ClassVar[int]
+ IS_SERVER_FIELD_NUMBER: _ClassVar[int]
+ RECORDS_FIELD_NUMBER: _ClassVar[int]
+ enabled: bool
+ heartbeat: bool
+ history_return_max: int
+ history_return_window: int
+ is_server: bool
+ records: int
+ def __init__(self, enabled: bool = ..., heartbeat: bool = ..., records: _Optional[int] = ..., history_return_max: _Optional[int] = ..., history_return_window: _Optional[int] = ..., is_server: bool = ...) -> None: ...
+ class TAKConfig(_message.Message):
+ __slots__ = ["role", "team"]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ TEAM_FIELD_NUMBER: _ClassVar[int]
+ role: _atak_pb2.MemberRole
+ team: _atak_pb2.Team
+ def __init__(self, team: _Optional[_Union[_atak_pb2.Team, str]] = ..., role: _Optional[_Union[_atak_pb2.MemberRole, str]] = ...) -> None: ...
+ class TelemetryConfig(_message.Message):
+ __slots__ = ["air_quality_enabled", "air_quality_interval", "air_quality_screen_enabled", "device_telemetry_enabled", "device_update_interval", "environment_display_fahrenheit", "environment_measurement_enabled", "environment_screen_enabled", "environment_update_interval", "health_measurement_enabled", "health_screen_enabled", "health_update_interval", "power_measurement_enabled", "power_screen_enabled", "power_update_interval"]
+ AIR_QUALITY_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ AIR_QUALITY_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ AIR_QUALITY_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_TELEMETRY_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ ENVIRONMENT_DISPLAY_FAHRENHEIT_FIELD_NUMBER: _ClassVar[int]
+ ENVIRONMENT_MEASUREMENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ENVIRONMENT_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ENVIRONMENT_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ HEALTH_MEASUREMENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ HEALTH_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ HEALTH_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ POWER_MEASUREMENT_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ POWER_SCREEN_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ POWER_UPDATE_INTERVAL_FIELD_NUMBER: _ClassVar[int]
+ air_quality_enabled: bool
+ air_quality_interval: int
+ air_quality_screen_enabled: bool
+ device_telemetry_enabled: bool
+ device_update_interval: int
+ environment_display_fahrenheit: bool
+ environment_measurement_enabled: bool
+ environment_screen_enabled: bool
+ environment_update_interval: int
+ health_measurement_enabled: bool
+ health_screen_enabled: bool
+ health_update_interval: int
+ power_measurement_enabled: bool
+ power_screen_enabled: bool
+ power_update_interval: int
+ def __init__(self, device_update_interval: _Optional[int] = ..., environment_update_interval: _Optional[int] = ..., environment_measurement_enabled: bool = ..., environment_screen_enabled: bool = ..., environment_display_fahrenheit: bool = ..., air_quality_enabled: bool = ..., air_quality_interval: _Optional[int] = ..., power_measurement_enabled: bool = ..., power_update_interval: _Optional[int] = ..., power_screen_enabled: bool = ..., health_measurement_enabled: bool = ..., health_update_interval: _Optional[int] = ..., health_screen_enabled: bool = ..., device_telemetry_enabled: bool = ..., air_quality_screen_enabled: bool = ...) -> None: ...
+ class TrafficManagementConfig(_message.Message):
+ __slots__ = ["drop_unknown_enabled", "enabled", "exhaust_hop_position", "exhaust_hop_telemetry", "nodeinfo_direct_response", "nodeinfo_direct_response_max_hops", "position_dedup_enabled", "position_min_interval_secs", "position_precision_bits", "rate_limit_enabled", "rate_limit_max_packets", "rate_limit_window_secs", "router_preserve_hops", "unknown_packet_threshold"]
+ DROP_UNKNOWN_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ ENABLED_FIELD_NUMBER: _ClassVar[int]
+ EXHAUST_HOP_POSITION_FIELD_NUMBER: _ClassVar[int]
+ EXHAUST_HOP_TELEMETRY_FIELD_NUMBER: _ClassVar[int]
+ NODEINFO_DIRECT_RESPONSE_FIELD_NUMBER: _ClassVar[int]
+ NODEINFO_DIRECT_RESPONSE_MAX_HOPS_FIELD_NUMBER: _ClassVar[int]
+ POSITION_DEDUP_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ POSITION_MIN_INTERVAL_SECS_FIELD_NUMBER: _ClassVar[int]
+ POSITION_PRECISION_BITS_FIELD_NUMBER: _ClassVar[int]
+ RATE_LIMIT_ENABLED_FIELD_NUMBER: _ClassVar[int]
+ RATE_LIMIT_MAX_PACKETS_FIELD_NUMBER: _ClassVar[int]
+ RATE_LIMIT_WINDOW_SECS_FIELD_NUMBER: _ClassVar[int]
+ ROUTER_PRESERVE_HOPS_FIELD_NUMBER: _ClassVar[int]
+ UNKNOWN_PACKET_THRESHOLD_FIELD_NUMBER: _ClassVar[int]
+ drop_unknown_enabled: bool
+ enabled: bool
+ exhaust_hop_position: bool
+ exhaust_hop_telemetry: bool
+ nodeinfo_direct_response: bool
+ nodeinfo_direct_response_max_hops: int
+ position_dedup_enabled: bool
+ position_min_interval_secs: int
+ position_precision_bits: int
+ rate_limit_enabled: bool
+ rate_limit_max_packets: int
+ rate_limit_window_secs: int
+ router_preserve_hops: bool
+ unknown_packet_threshold: int
+ def __init__(self, enabled: bool = ..., position_dedup_enabled: bool = ..., position_precision_bits: _Optional[int] = ..., position_min_interval_secs: _Optional[int] = ..., nodeinfo_direct_response: bool = ..., nodeinfo_direct_response_max_hops: _Optional[int] = ..., rate_limit_enabled: bool = ..., rate_limit_window_secs: _Optional[int] = ..., rate_limit_max_packets: _Optional[int] = ..., drop_unknown_enabled: bool = ..., unknown_packet_threshold: _Optional[int] = ..., exhaust_hop_telemetry: bool = ..., exhaust_hop_position: bool = ..., router_preserve_hops: bool = ...) -> None: ...
+ AMBIENT_LIGHTING_FIELD_NUMBER: _ClassVar[int]
+ AUDIO_FIELD_NUMBER: _ClassVar[int]
+ CANNED_MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ DETECTION_SENSOR_FIELD_NUMBER: _ClassVar[int]
+ EXTERNAL_NOTIFICATION_FIELD_NUMBER: _ClassVar[int]
+ MQTT_FIELD_NUMBER: _ClassVar[int]
+ NEIGHBOR_INFO_FIELD_NUMBER: _ClassVar[int]
+ PAXCOUNTER_FIELD_NUMBER: _ClassVar[int]
+ RANGE_TEST_FIELD_NUMBER: _ClassVar[int]
+ REMOTE_HARDWARE_FIELD_NUMBER: _ClassVar[int]
+ SERIAL_FIELD_NUMBER: _ClassVar[int]
+ STATUSMESSAGE_FIELD_NUMBER: _ClassVar[int]
+ STORE_FORWARD_FIELD_NUMBER: _ClassVar[int]
+ TAK_FIELD_NUMBER: _ClassVar[int]
+ TELEMETRY_FIELD_NUMBER: _ClassVar[int]
+ TRAFFIC_MANAGEMENT_FIELD_NUMBER: _ClassVar[int]
+ ambient_lighting: ModuleConfig.AmbientLightingConfig
+ audio: ModuleConfig.AudioConfig
+ canned_message: ModuleConfig.CannedMessageConfig
+ detection_sensor: ModuleConfig.DetectionSensorConfig
+ external_notification: ModuleConfig.ExternalNotificationConfig
+ mqtt: ModuleConfig.MQTTConfig
+ neighbor_info: ModuleConfig.NeighborInfoConfig
+ paxcounter: ModuleConfig.PaxcounterConfig
+ range_test: ModuleConfig.RangeTestConfig
+ remote_hardware: ModuleConfig.RemoteHardwareConfig
+ serial: ModuleConfig.SerialConfig
+ statusmessage: ModuleConfig.StatusMessageConfig
+ store_forward: ModuleConfig.StoreForwardConfig
+ tak: ModuleConfig.TAKConfig
+ telemetry: ModuleConfig.TelemetryConfig
+ traffic_management: ModuleConfig.TrafficManagementConfig
+ def __init__(self, mqtt: _Optional[_Union[ModuleConfig.MQTTConfig, _Mapping]] = ..., serial: _Optional[_Union[ModuleConfig.SerialConfig, _Mapping]] = ..., external_notification: _Optional[_Union[ModuleConfig.ExternalNotificationConfig, _Mapping]] = ..., store_forward: _Optional[_Union[ModuleConfig.StoreForwardConfig, _Mapping]] = ..., range_test: _Optional[_Union[ModuleConfig.RangeTestConfig, _Mapping]] = ..., telemetry: _Optional[_Union[ModuleConfig.TelemetryConfig, _Mapping]] = ..., canned_message: _Optional[_Union[ModuleConfig.CannedMessageConfig, _Mapping]] = ..., audio: _Optional[_Union[ModuleConfig.AudioConfig, _Mapping]] = ..., remote_hardware: _Optional[_Union[ModuleConfig.RemoteHardwareConfig, _Mapping]] = ..., neighbor_info: _Optional[_Union[ModuleConfig.NeighborInfoConfig, _Mapping]] = ..., ambient_lighting: _Optional[_Union[ModuleConfig.AmbientLightingConfig, _Mapping]] = ..., detection_sensor: _Optional[_Union[ModuleConfig.DetectionSensorConfig, _Mapping]] = ..., paxcounter: _Optional[_Union[ModuleConfig.PaxcounterConfig, _Mapping]] = ..., statusmessage: _Optional[_Union[ModuleConfig.StatusMessageConfig, _Mapping]] = ..., traffic_management: _Optional[_Union[ModuleConfig.TrafficManagementConfig, _Mapping]] = ..., tak: _Optional[_Union[ModuleConfig.TAKConfig, _Mapping]] = ...) -> None: ...
+
+class RemoteHardwarePin(_message.Message):
+ __slots__ = ["gpio_pin", "name", "type"]
+ GPIO_PIN_FIELD_NUMBER: _ClassVar[int]
+ NAME_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ gpio_pin: int
+ name: str
+ type: RemoteHardwarePinType
+ def __init__(self, gpio_pin: _Optional[int] = ..., name: _Optional[str] = ..., type: _Optional[_Union[RemoteHardwarePinType, str]] = ...) -> None: ...
+
+class RemoteHardwarePinType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/mqtt_pb2.py b/meshtastic/protobuf/mqtt_pb2.py
index 7b4e4c0..58d15e5 100644
--- a/meshtastic/protobuf/mqtt_pb2.py
+++ b/meshtastic/protobuf/mqtt_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/mqtt.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -17,14 +17,14 @@ from meshtastic.protobuf import mesh_pb2 as meshtastic_dot_protobuf_dot_mesh__pb
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1emeshtastic/protobuf/mqtt.proto\x12\x13meshtastic.protobuf\x1a meshtastic/protobuf/config.proto\x1a\x1emeshtastic/protobuf/mesh.proto\"j\n\x0fServiceEnvelope\x12/\n\x06packet\x18\x01 \x01(\x0b\x32\x1f.meshtastic.protobuf.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\t\"\x83\x04\n\tMapReport\x12\x11\n\tlong_name\x18\x01 \x01(\t\x12\x12\n\nshort_name\x18\x02 \x01(\t\x12;\n\x04role\x18\x03 \x01(\x0e\x32-.meshtastic.protobuf.Config.DeviceConfig.Role\x12\x34\n\x08hw_model\x18\x04 \x01(\x0e\x32\".meshtastic.protobuf.HardwareModel\x12\x18\n\x10\x66irmware_version\x18\x05 \x01(\t\x12\x41\n\x06region\x18\x06 \x01(\x0e\x32\x31.meshtastic.protobuf.Config.LoRaConfig.RegionCode\x12H\n\x0cmodem_preset\x18\x07 \x01(\x0e\x32\x32.meshtastic.protobuf.Config.LoRaConfig.ModemPreset\x12\x1b\n\x13has_default_channel\x18\x08 \x01(\x08\x12\x12\n\nlatitude_i\x18\t \x01(\x0f\x12\x13\n\x0blongitude_i\x18\n \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x0b \x01(\x05\x12\x1a\n\x12position_precision\x18\x0c \x01(\r\x12\x1e\n\x16num_online_local_nodes\x18\r \x01(\r\x12!\n\x19has_opted_report_location\x18\x0e \x01(\x08\x42`\n\x14org.meshtastic.protoB\nMQTTProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mqtt_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.mqtt_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\nMQTTProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_SERVICEENVELOPE']._serialized_start=121
- _globals['_SERVICEENVELOPE']._serialized_end=227
- _globals['_MAPREPORT']._serialized_start=230
- _globals['_MAPREPORT']._serialized_end=745
+ _SERVICEENVELOPE._serialized_start=121
+ _SERVICEENVELOPE._serialized_end=227
+ _MAPREPORT._serialized_start=230
+ _MAPREPORT._serialized_end=745
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/mqtt_pb2.pyi b/meshtastic/protobuf/mqtt_pb2.pyi
index 597fa07..21c7053 100644
--- a/meshtastic/protobuf/mqtt_pb2.pyi
+++ b/meshtastic/protobuf/mqtt_pb2.pyi
@@ -1,155 +1,49 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from meshtastic.protobuf import config_pb2 as _config_pb2
+from meshtastic.protobuf import mesh_pb2 as _mesh_pb2
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import meshtastic.protobuf.config_pb2
-import meshtastic.protobuf.mesh_pb2
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class MapReport(_message.Message):
+ __slots__ = ["altitude", "firmware_version", "has_default_channel", "has_opted_report_location", "hw_model", "latitude_i", "long_name", "longitude_i", "modem_preset", "num_online_local_nodes", "position_precision", "region", "role", "short_name"]
+ ALTITUDE_FIELD_NUMBER: _ClassVar[int]
+ FIRMWARE_VERSION_FIELD_NUMBER: _ClassVar[int]
+ HAS_DEFAULT_CHANNEL_FIELD_NUMBER: _ClassVar[int]
+ HAS_OPTED_REPORT_LOCATION_FIELD_NUMBER: _ClassVar[int]
+ HW_MODEL_FIELD_NUMBER: _ClassVar[int]
+ LATITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LONGITUDE_I_FIELD_NUMBER: _ClassVar[int]
+ LONG_NAME_FIELD_NUMBER: _ClassVar[int]
+ MODEM_PRESET_FIELD_NUMBER: _ClassVar[int]
+ NUM_ONLINE_LOCAL_NODES_FIELD_NUMBER: _ClassVar[int]
+ POSITION_PRECISION_FIELD_NUMBER: _ClassVar[int]
+ REGION_FIELD_NUMBER: _ClassVar[int]
+ ROLE_FIELD_NUMBER: _ClassVar[int]
+ SHORT_NAME_FIELD_NUMBER: _ClassVar[int]
+ altitude: int
+ firmware_version: str
+ has_default_channel: bool
+ has_opted_report_location: bool
+ hw_model: _mesh_pb2.HardwareModel
+ latitude_i: int
+ long_name: str
+ longitude_i: int
+ modem_preset: _config_pb2.Config.LoRaConfig.ModemPreset
+ num_online_local_nodes: int
+ position_precision: int
+ region: _config_pb2.Config.LoRaConfig.RegionCode
+ role: _config_pb2.Config.DeviceConfig.Role
+ short_name: str
+ def __init__(self, long_name: _Optional[str] = ..., short_name: _Optional[str] = ..., role: _Optional[_Union[_config_pb2.Config.DeviceConfig.Role, str]] = ..., hw_model: _Optional[_Union[_mesh_pb2.HardwareModel, str]] = ..., firmware_version: _Optional[str] = ..., region: _Optional[_Union[_config_pb2.Config.LoRaConfig.RegionCode, str]] = ..., modem_preset: _Optional[_Union[_config_pb2.Config.LoRaConfig.ModemPreset, str]] = ..., has_default_channel: bool = ..., latitude_i: _Optional[int] = ..., longitude_i: _Optional[int] = ..., altitude: _Optional[int] = ..., position_precision: _Optional[int] = ..., num_online_local_nodes: _Optional[int] = ..., has_opted_report_location: bool = ...) -> None: ...
-@typing.final
-class ServiceEnvelope(google.protobuf.message.Message):
- """
- This message wraps a MeshPacket with extra metadata about the sender and how it arrived.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PACKET_FIELD_NUMBER: builtins.int
- CHANNEL_ID_FIELD_NUMBER: builtins.int
- GATEWAY_ID_FIELD_NUMBER: builtins.int
- channel_id: builtins.str
- """
- The global channel ID it was sent on
- """
- gateway_id: builtins.str
- """
- The sending gateway node ID. Can we use this to authenticate/prevent fake
- nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
- the globally trusted nodenum
- """
- @property
- def packet(self) -> meshtastic.protobuf.mesh_pb2.MeshPacket:
- """
- The (probably encrypted) packet
- """
-
- def __init__(
- self,
- *,
- packet: meshtastic.protobuf.mesh_pb2.MeshPacket | None = ...,
- channel_id: builtins.str = ...,
- gateway_id: builtins.str = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["packet", b"packet"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["channel_id", b"channel_id", "gateway_id", b"gateway_id", "packet", b"packet"]) -> None: ...
-
-global___ServiceEnvelope = ServiceEnvelope
-
-@typing.final
-class MapReport(google.protobuf.message.Message):
- """
- Information about a node intended to be reported unencrypted to a map using MQTT.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- LONG_NAME_FIELD_NUMBER: builtins.int
- SHORT_NAME_FIELD_NUMBER: builtins.int
- ROLE_FIELD_NUMBER: builtins.int
- HW_MODEL_FIELD_NUMBER: builtins.int
- FIRMWARE_VERSION_FIELD_NUMBER: builtins.int
- REGION_FIELD_NUMBER: builtins.int
- MODEM_PRESET_FIELD_NUMBER: builtins.int
- HAS_DEFAULT_CHANNEL_FIELD_NUMBER: builtins.int
- LATITUDE_I_FIELD_NUMBER: builtins.int
- LONGITUDE_I_FIELD_NUMBER: builtins.int
- ALTITUDE_FIELD_NUMBER: builtins.int
- POSITION_PRECISION_FIELD_NUMBER: builtins.int
- NUM_ONLINE_LOCAL_NODES_FIELD_NUMBER: builtins.int
- HAS_OPTED_REPORT_LOCATION_FIELD_NUMBER: builtins.int
- long_name: builtins.str
- """
- A full name for this user, i.e. "Kevin Hester"
- """
- short_name: builtins.str
- """
- A VERY short name, ideally two characters.
- Suitable for a tiny OLED screen
- """
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType
- """
- Role of the node that applies specific settings for a particular use-case
- """
- hw_model: meshtastic.protobuf.mesh_pb2.HardwareModel.ValueType
- """
- Hardware model of the node, i.e. T-Beam, Heltec V3, etc...
- """
- firmware_version: builtins.str
- """
- Device firmware version string
- """
- region: meshtastic.protobuf.config_pb2.Config.LoRaConfig.RegionCode.ValueType
- """
- The region code for the radio (US, CN, EU433, etc...)
- """
- modem_preset: meshtastic.protobuf.config_pb2.Config.LoRaConfig.ModemPreset.ValueType
- """
- Modem preset used by the radio (LongFast, MediumSlow, etc...)
- """
- has_default_channel: builtins.bool
- """
- Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
- and it uses the default frequency slot given the region and modem preset.
- """
- latitude_i: builtins.int
- """
- Latitude: multiply by 1e-7 to get degrees in floating point
- """
- longitude_i: builtins.int
- """
- Longitude: multiply by 1e-7 to get degrees in floating point
- """
- altitude: builtins.int
- """
- Altitude in meters above MSL
- """
- position_precision: builtins.int
- """
- Indicates the bits of precision for latitude and longitude set by the sending node
- """
- num_online_local_nodes: builtins.int
- """
- Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT)
- """
- has_opted_report_location: builtins.bool
- """
- User has opted in to share their location (map report) with the mqtt server
- Controlled by map_report.should_report_location
- """
- def __init__(
- self,
- *,
- long_name: builtins.str = ...,
- short_name: builtins.str = ...,
- role: meshtastic.protobuf.config_pb2.Config.DeviceConfig.Role.ValueType = ...,
- hw_model: meshtastic.protobuf.mesh_pb2.HardwareModel.ValueType = ...,
- firmware_version: builtins.str = ...,
- region: meshtastic.protobuf.config_pb2.Config.LoRaConfig.RegionCode.ValueType = ...,
- modem_preset: meshtastic.protobuf.config_pb2.Config.LoRaConfig.ModemPreset.ValueType = ...,
- has_default_channel: builtins.bool = ...,
- latitude_i: builtins.int = ...,
- longitude_i: builtins.int = ...,
- altitude: builtins.int = ...,
- position_precision: builtins.int = ...,
- num_online_local_nodes: builtins.int = ...,
- has_opted_report_location: builtins.bool = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["altitude", b"altitude", "firmware_version", b"firmware_version", "has_default_channel", b"has_default_channel", "has_opted_report_location", b"has_opted_report_location", "hw_model", b"hw_model", "latitude_i", b"latitude_i", "long_name", b"long_name", "longitude_i", b"longitude_i", "modem_preset", b"modem_preset", "num_online_local_nodes", b"num_online_local_nodes", "position_precision", b"position_precision", "region", b"region", "role", b"role", "short_name", b"short_name"]) -> None: ...
-
-global___MapReport = MapReport
+class ServiceEnvelope(_message.Message):
+ __slots__ = ["channel_id", "gateway_id", "packet"]
+ CHANNEL_ID_FIELD_NUMBER: _ClassVar[int]
+ GATEWAY_ID_FIELD_NUMBER: _ClassVar[int]
+ PACKET_FIELD_NUMBER: _ClassVar[int]
+ channel_id: str
+ gateway_id: str
+ packet: _mesh_pb2.MeshPacket
+ def __init__(self, packet: _Optional[_Union[_mesh_pb2.MeshPacket, _Mapping]] = ..., channel_id: _Optional[str] = ..., gateway_id: _Optional[str] = ...) -> None: ...
diff --git a/meshtastic/protobuf/nanopb_pb2.py b/meshtastic/protobuf/nanopb_pb2.py
index 797b8a0..73cb4ba 100644
--- a/meshtastic/protobuf/nanopb_pb2.py
+++ b/meshtastic/protobuf/nanopb_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/nanopb.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -16,20 +16,24 @@ from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtastic/protobuf/nanopb.proto\x1a google/protobuf/descriptor.proto\"\xa4\x07\n\rNanoPBOptions\x12\x10\n\x08max_size\x18\x01 \x01(\x05\x12\x12\n\nmax_length\x18\x0e \x01(\x05\x12\x11\n\tmax_count\x18\x02 \x01(\x05\x12&\n\x08int_size\x18\x07 \x01(\x0e\x32\x08.IntSize:\nIS_DEFAULT\x12$\n\x04type\x18\x03 \x01(\x0e\x32\n.FieldType:\nFT_DEFAULT\x12\x18\n\nlong_names\x18\x04 \x01(\x08:\x04true\x12\x1c\n\rpacked_struct\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0bpacked_enum\x18\n \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0cskip_message\x18\x06 \x01(\x08:\x05\x66\x61lse\x12\x18\n\tno_unions\x18\x08 \x01(\x08:\x05\x66\x61lse\x12\r\n\x05msgid\x18\t \x01(\r\x12\x1e\n\x0f\x61nonymous_oneof\x18\x0b \x01(\x08:\x05\x66\x61lse\x12\x15\n\x06proto3\x18\x0c \x01(\x08:\x05\x66\x61lse\x12#\n\x14proto3_singular_msgs\x18\x15 \x01(\x08:\x05\x66\x61lse\x12\x1d\n\x0e\x65num_to_string\x18\r \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0c\x66ixed_length\x18\x0f \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0b\x66ixed_count\x18\x10 \x01(\x08:\x05\x66\x61lse\x12\x1e\n\x0fsubmsg_callback\x18\x16 \x01(\x08:\x05\x66\x61lse\x12/\n\x0cmangle_names\x18\x11 \x01(\x0e\x32\x11.TypenameMangling:\x06M_NONE\x12(\n\x11\x63\x61llback_datatype\x18\x12 \x01(\t:\rpb_callback_t\x12\x34\n\x11\x63\x61llback_function\x18\x13 \x01(\t:\x19pb_default_field_callback\x12\x30\n\x0e\x64\x65scriptorsize\x18\x14 \x01(\x0e\x32\x0f.DescriptorSize:\x07\x44S_AUTO\x12\x1a\n\x0b\x64\x65\x66\x61ult_has\x18\x17 \x01(\x08:\x05\x66\x61lse\x12\x0f\n\x07include\x18\x18 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x1a \x03(\t\x12\x0f\n\x07package\x18\x19 \x01(\t\x12\x41\n\rtype_override\x18\x1b \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x19\n\x0bsort_by_tag\x18\x1c \x01(\x08:\x04true\x12.\n\rfallback_type\x18\x1d \x01(\x0e\x32\n.FieldType:\x0b\x46T_CALLBACK*i\n\tFieldType\x12\x0e\n\nFT_DEFAULT\x10\x00\x12\x0f\n\x0b\x46T_CALLBACK\x10\x01\x12\x0e\n\nFT_POINTER\x10\x04\x12\r\n\tFT_STATIC\x10\x02\x12\r\n\tFT_IGNORE\x10\x03\x12\r\n\tFT_INLINE\x10\x05*D\n\x07IntSize\x12\x0e\n\nIS_DEFAULT\x10\x00\x12\x08\n\x04IS_8\x10\x08\x12\t\n\x05IS_16\x10\x10\x12\t\n\x05IS_32\x10 \x12\t\n\x05IS_64\x10@*Z\n\x10TypenameMangling\x12\n\n\x06M_NONE\x10\x00\x12\x13\n\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n\tM_FLATTEN\x10\x02\x12\x16\n\x12M_PACKAGE_INITIALS\x10\x03*E\n\x0e\x44\x65scriptorSize\x12\x0b\n\x07\x44S_AUTO\x10\x00\x12\x08\n\x04\x44S_1\x10\x01\x12\x08\n\x04\x44S_2\x10\x02\x12\x08\n\x04\x44S_4\x10\x04\x12\x08\n\x04\x44S_8\x10\x08:E\n\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:G\n\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:E\n\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:>\n\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptionsB>\n\x18\x66i.kapsi.koti.jpa.nanopbZ\"github.com/meshtastic/go/generated')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.nanopb_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.nanopb_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+ google_dot_protobuf_dot_descriptor__pb2.FileOptions.RegisterExtension(nanopb_fileopt)
+ google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(nanopb_msgopt)
+ google_dot_protobuf_dot_descriptor__pb2.EnumOptions.RegisterExtension(nanopb_enumopt)
+ google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(nanopb)
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\030fi.kapsi.koti.jpa.nanopbZ\"github.com/meshtastic/go/generated'
- _globals['_FIELDTYPE']._serialized_start=1005
- _globals['_FIELDTYPE']._serialized_end=1110
- _globals['_INTSIZE']._serialized_start=1112
- _globals['_INTSIZE']._serialized_end=1180
- _globals['_TYPENAMEMANGLING']._serialized_start=1182
- _globals['_TYPENAMEMANGLING']._serialized_end=1272
- _globals['_DESCRIPTORSIZE']._serialized_start=1274
- _globals['_DESCRIPTORSIZE']._serialized_end=1343
- _globals['_NANOPBOPTIONS']._serialized_start=71
- _globals['_NANOPBOPTIONS']._serialized_end=1003
+ _FIELDTYPE._serialized_start=1005
+ _FIELDTYPE._serialized_end=1110
+ _INTSIZE._serialized_start=1112
+ _INTSIZE._serialized_end=1180
+ _TYPENAMEMANGLING._serialized_start=1182
+ _TYPENAMEMANGLING._serialized_end=1272
+ _DESCRIPTORSIZE._serialized_start=1274
+ _DESCRIPTORSIZE._serialized_end=1343
+ _NANOPBOPTIONS._serialized_start=71
+ _NANOPBOPTIONS._serialized_end=1003
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/nanopb_pb2.pyi b/meshtastic/protobuf/nanopb_pb2.pyi
index c5d7d87..404b5d0 100644
--- a/meshtastic/protobuf/nanopb_pb2.pyi
+++ b/meshtastic/protobuf/nanopb_pb2.pyi
@@ -1,324 +1,110 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-Custom options for defining:
-- Maximum size of string/bytes
-- Maximum number of elements in array
+from google.protobuf import descriptor_pb2 as _descriptor_pb2
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Optional as _Optional, Union as _Union
-These are used by nanopb to generate statically allocable structures
-for memory-limited environments.
-"""
+DESCRIPTOR: _descriptor.FileDescriptor
+DS_1: DescriptorSize
+DS_2: DescriptorSize
+DS_4: DescriptorSize
+DS_8: DescriptorSize
+DS_AUTO: DescriptorSize
+FT_CALLBACK: FieldType
+FT_DEFAULT: FieldType
+FT_IGNORE: FieldType
+FT_INLINE: FieldType
+FT_POINTER: FieldType
+FT_STATIC: FieldType
+IS_16: IntSize
+IS_32: IntSize
+IS_64: IntSize
+IS_8: IntSize
+IS_DEFAULT: IntSize
+M_FLATTEN: TypenameMangling
+M_NONE: TypenameMangling
+M_PACKAGE_INITIALS: TypenameMangling
+M_STRIP_PACKAGE: TypenameMangling
+NANOPB_ENUMOPT_FIELD_NUMBER: _ClassVar[int]
+NANOPB_FIELD_NUMBER: _ClassVar[int]
+NANOPB_FILEOPT_FIELD_NUMBER: _ClassVar[int]
+NANOPB_MSGOPT_FIELD_NUMBER: _ClassVar[int]
+nanopb: _descriptor.FieldDescriptor
+nanopb_enumopt: _descriptor.FieldDescriptor
+nanopb_fileopt: _descriptor.FieldDescriptor
+nanopb_msgopt: _descriptor.FieldDescriptor
-import builtins
-import collections.abc
-import google.protobuf.descriptor
-import google.protobuf.descriptor_pb2
-import google.protobuf.internal.containers
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.internal.extension_dict
-import google.protobuf.message
-import sys
-import typing
+class NanoPBOptions(_message.Message):
+ __slots__ = ["anonymous_oneof", "callback_datatype", "callback_function", "default_has", "descriptorsize", "enum_to_string", "exclude", "fallback_type", "fixed_count", "fixed_length", "include", "int_size", "long_names", "mangle_names", "max_count", "max_length", "max_size", "msgid", "no_unions", "package", "packed_enum", "packed_struct", "proto3", "proto3_singular_msgs", "skip_message", "sort_by_tag", "submsg_callback", "type", "type_override"]
+ ANONYMOUS_ONEOF_FIELD_NUMBER: _ClassVar[int]
+ CALLBACK_DATATYPE_FIELD_NUMBER: _ClassVar[int]
+ CALLBACK_FUNCTION_FIELD_NUMBER: _ClassVar[int]
+ DEFAULT_HAS_FIELD_NUMBER: _ClassVar[int]
+ DESCRIPTORSIZE_FIELD_NUMBER: _ClassVar[int]
+ ENUM_TO_STRING_FIELD_NUMBER: _ClassVar[int]
+ EXCLUDE_FIELD_NUMBER: _ClassVar[int]
+ FALLBACK_TYPE_FIELD_NUMBER: _ClassVar[int]
+ FIXED_COUNT_FIELD_NUMBER: _ClassVar[int]
+ FIXED_LENGTH_FIELD_NUMBER: _ClassVar[int]
+ INCLUDE_FIELD_NUMBER: _ClassVar[int]
+ INT_SIZE_FIELD_NUMBER: _ClassVar[int]
+ LONG_NAMES_FIELD_NUMBER: _ClassVar[int]
+ MANGLE_NAMES_FIELD_NUMBER: _ClassVar[int]
+ MAX_COUNT_FIELD_NUMBER: _ClassVar[int]
+ MAX_LENGTH_FIELD_NUMBER: _ClassVar[int]
+ MAX_SIZE_FIELD_NUMBER: _ClassVar[int]
+ MSGID_FIELD_NUMBER: _ClassVar[int]
+ NO_UNIONS_FIELD_NUMBER: _ClassVar[int]
+ PACKAGE_FIELD_NUMBER: _ClassVar[int]
+ PACKED_ENUM_FIELD_NUMBER: _ClassVar[int]
+ PACKED_STRUCT_FIELD_NUMBER: _ClassVar[int]
+ PROTO3_FIELD_NUMBER: _ClassVar[int]
+ PROTO3_SINGULAR_MSGS_FIELD_NUMBER: _ClassVar[int]
+ SKIP_MESSAGE_FIELD_NUMBER: _ClassVar[int]
+ SORT_BY_TAG_FIELD_NUMBER: _ClassVar[int]
+ SUBMSG_CALLBACK_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ TYPE_OVERRIDE_FIELD_NUMBER: _ClassVar[int]
+ anonymous_oneof: bool
+ callback_datatype: str
+ callback_function: str
+ default_has: bool
+ descriptorsize: DescriptorSize
+ enum_to_string: bool
+ exclude: _containers.RepeatedScalarFieldContainer[str]
+ fallback_type: FieldType
+ fixed_count: bool
+ fixed_length: bool
+ include: _containers.RepeatedScalarFieldContainer[str]
+ int_size: IntSize
+ long_names: bool
+ mangle_names: TypenameMangling
+ max_count: int
+ max_length: int
+ max_size: int
+ msgid: int
+ no_unions: bool
+ package: str
+ packed_enum: bool
+ packed_struct: bool
+ proto3: bool
+ proto3_singular_msgs: bool
+ skip_message: bool
+ sort_by_tag: bool
+ submsg_callback: bool
+ type: FieldType
+ type_override: _descriptor_pb2.FieldDescriptorProto.Type
+ def __init__(self, max_size: _Optional[int] = ..., max_length: _Optional[int] = ..., max_count: _Optional[int] = ..., int_size: _Optional[_Union[IntSize, str]] = ..., type: _Optional[_Union[FieldType, str]] = ..., long_names: bool = ..., packed_struct: bool = ..., packed_enum: bool = ..., skip_message: bool = ..., no_unions: bool = ..., msgid: _Optional[int] = ..., anonymous_oneof: bool = ..., proto3: bool = ..., proto3_singular_msgs: bool = ..., enum_to_string: bool = ..., fixed_length: bool = ..., fixed_count: bool = ..., submsg_callback: bool = ..., mangle_names: _Optional[_Union[TypenameMangling, str]] = ..., callback_datatype: _Optional[str] = ..., callback_function: _Optional[str] = ..., descriptorsize: _Optional[_Union[DescriptorSize, str]] = ..., default_has: bool = ..., include: _Optional[_Iterable[str]] = ..., exclude: _Optional[_Iterable[str]] = ..., package: _Optional[str] = ..., type_override: _Optional[_Union[_descriptor_pb2.FieldDescriptorProto.Type, str]] = ..., sort_by_tag: bool = ..., fallback_type: _Optional[_Union[FieldType, str]] = ...) -> None: ...
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class FieldType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class IntSize(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-class _FieldType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class TypenameMangling(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
-class _FieldTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_FieldType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- FT_DEFAULT: _FieldType.ValueType # 0
- """Automatically decide field type, generate static field if possible."""
- FT_CALLBACK: _FieldType.ValueType # 1
- """Always generate a callback field."""
- FT_POINTER: _FieldType.ValueType # 4
- """Always generate a dynamically allocated field."""
- FT_STATIC: _FieldType.ValueType # 2
- """Generate a static field or raise an exception if not possible."""
- FT_IGNORE: _FieldType.ValueType # 3
- """Ignore the field completely."""
- FT_INLINE: _FieldType.ValueType # 5
- """Legacy option, use the separate 'fixed_length' option instead"""
-
-class FieldType(_FieldType, metaclass=_FieldTypeEnumTypeWrapper): ...
-
-FT_DEFAULT: FieldType.ValueType # 0
-"""Automatically decide field type, generate static field if possible."""
-FT_CALLBACK: FieldType.ValueType # 1
-"""Always generate a callback field."""
-FT_POINTER: FieldType.ValueType # 4
-"""Always generate a dynamically allocated field."""
-FT_STATIC: FieldType.ValueType # 2
-"""Generate a static field or raise an exception if not possible."""
-FT_IGNORE: FieldType.ValueType # 3
-"""Ignore the field completely."""
-FT_INLINE: FieldType.ValueType # 5
-"""Legacy option, use the separate 'fixed_length' option instead"""
-global___FieldType = FieldType
-
-class _IntSize:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _IntSizeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_IntSize.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- IS_DEFAULT: _IntSize.ValueType # 0
- """Default, 32/64bit based on type in .proto"""
- IS_8: _IntSize.ValueType # 8
- IS_16: _IntSize.ValueType # 16
- IS_32: _IntSize.ValueType # 32
- IS_64: _IntSize.ValueType # 64
-
-class IntSize(_IntSize, metaclass=_IntSizeEnumTypeWrapper): ...
-
-IS_DEFAULT: IntSize.ValueType # 0
-"""Default, 32/64bit based on type in .proto"""
-IS_8: IntSize.ValueType # 8
-IS_16: IntSize.ValueType # 16
-IS_32: IntSize.ValueType # 32
-IS_64: IntSize.ValueType # 64
-global___IntSize = IntSize
-
-class _TypenameMangling:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _TypenameManglingEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TypenameMangling.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- M_NONE: _TypenameMangling.ValueType # 0
- """Default, no typename mangling"""
- M_STRIP_PACKAGE: _TypenameMangling.ValueType # 1
- """Strip current package name"""
- M_FLATTEN: _TypenameMangling.ValueType # 2
- """Only use last path component"""
- M_PACKAGE_INITIALS: _TypenameMangling.ValueType # 3
- """Replace the package name by the initials"""
-
-class TypenameMangling(_TypenameMangling, metaclass=_TypenameManglingEnumTypeWrapper): ...
-
-M_NONE: TypenameMangling.ValueType # 0
-"""Default, no typename mangling"""
-M_STRIP_PACKAGE: TypenameMangling.ValueType # 1
-"""Strip current package name"""
-M_FLATTEN: TypenameMangling.ValueType # 2
-"""Only use last path component"""
-M_PACKAGE_INITIALS: TypenameMangling.ValueType # 3
-"""Replace the package name by the initials"""
-global___TypenameMangling = TypenameMangling
-
-class _DescriptorSize:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _DescriptorSizeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_DescriptorSize.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- DS_AUTO: _DescriptorSize.ValueType # 0
- """Select minimal size based on field type"""
- DS_1: _DescriptorSize.ValueType # 1
- """1 word; up to 15 byte fields, no arrays"""
- DS_2: _DescriptorSize.ValueType # 2
- """2 words; up to 4095 byte fields, 4095 entry arrays"""
- DS_4: _DescriptorSize.ValueType # 4
- """4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays"""
- DS_8: _DescriptorSize.ValueType # 8
- """8 words; up to 2^32-1 entry arrays"""
-
-class DescriptorSize(_DescriptorSize, metaclass=_DescriptorSizeEnumTypeWrapper): ...
-
-DS_AUTO: DescriptorSize.ValueType # 0
-"""Select minimal size based on field type"""
-DS_1: DescriptorSize.ValueType # 1
-"""1 word; up to 15 byte fields, no arrays"""
-DS_2: DescriptorSize.ValueType # 2
-"""2 words; up to 4095 byte fields, 4095 entry arrays"""
-DS_4: DescriptorSize.ValueType # 4
-"""4 words; up to 2^32-1 byte fields, 2^16-1 entry arrays"""
-DS_8: DescriptorSize.ValueType # 8
-"""8 words; up to 2^32-1 entry arrays"""
-global___DescriptorSize = DescriptorSize
-
-@typing.final
-class NanoPBOptions(google.protobuf.message.Message):
- """This is the inner options message, which basically defines options for
- a field. When it is used in message or file scope, it applies to all
- fields.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- MAX_SIZE_FIELD_NUMBER: builtins.int
- MAX_LENGTH_FIELD_NUMBER: builtins.int
- MAX_COUNT_FIELD_NUMBER: builtins.int
- INT_SIZE_FIELD_NUMBER: builtins.int
- TYPE_FIELD_NUMBER: builtins.int
- LONG_NAMES_FIELD_NUMBER: builtins.int
- PACKED_STRUCT_FIELD_NUMBER: builtins.int
- PACKED_ENUM_FIELD_NUMBER: builtins.int
- SKIP_MESSAGE_FIELD_NUMBER: builtins.int
- NO_UNIONS_FIELD_NUMBER: builtins.int
- MSGID_FIELD_NUMBER: builtins.int
- ANONYMOUS_ONEOF_FIELD_NUMBER: builtins.int
- PROTO3_FIELD_NUMBER: builtins.int
- PROTO3_SINGULAR_MSGS_FIELD_NUMBER: builtins.int
- ENUM_TO_STRING_FIELD_NUMBER: builtins.int
- FIXED_LENGTH_FIELD_NUMBER: builtins.int
- FIXED_COUNT_FIELD_NUMBER: builtins.int
- SUBMSG_CALLBACK_FIELD_NUMBER: builtins.int
- MANGLE_NAMES_FIELD_NUMBER: builtins.int
- CALLBACK_DATATYPE_FIELD_NUMBER: builtins.int
- CALLBACK_FUNCTION_FIELD_NUMBER: builtins.int
- DESCRIPTORSIZE_FIELD_NUMBER: builtins.int
- DEFAULT_HAS_FIELD_NUMBER: builtins.int
- INCLUDE_FIELD_NUMBER: builtins.int
- EXCLUDE_FIELD_NUMBER: builtins.int
- PACKAGE_FIELD_NUMBER: builtins.int
- TYPE_OVERRIDE_FIELD_NUMBER: builtins.int
- SORT_BY_TAG_FIELD_NUMBER: builtins.int
- FALLBACK_TYPE_FIELD_NUMBER: builtins.int
- max_size: builtins.int
- """Allocated size for 'bytes' and 'string' fields.
- For string fields, this should include the space for null terminator.
- """
- max_length: builtins.int
- """Maximum length for 'string' fields. Setting this is equivalent
- to setting max_size to a value of length+1.
- """
- max_count: builtins.int
- """Allocated number of entries in arrays ('repeated' fields)"""
- int_size: global___IntSize.ValueType
- """Size of integer fields. Can save some memory if you don't need
- full 32 bits for the value.
- """
- type: global___FieldType.ValueType
- """Force type of field (callback or static allocation)"""
- long_names: builtins.bool
- """Use long names for enums, i.e. EnumName_EnumValue."""
- packed_struct: builtins.bool
- """Add 'packed' attribute to generated structs.
- Note: this cannot be used on CPUs that break on unaligned
- accesses to variables.
- """
- packed_enum: builtins.bool
- """Add 'packed' attribute to generated enums."""
- skip_message: builtins.bool
- """Skip this message"""
- no_unions: builtins.bool
- """Generate oneof fields as normal optional fields instead of union."""
- msgid: builtins.int
- """integer type tag for a message"""
- anonymous_oneof: builtins.bool
- """decode oneof as anonymous union"""
- proto3: builtins.bool
- """Proto3 singular field does not generate a "has_" flag"""
- proto3_singular_msgs: builtins.bool
- """Force proto3 messages to have no "has_" flag.
- This was default behavior until nanopb-0.4.0.
- """
- enum_to_string: builtins.bool
- """Generate an enum->string mapping function (can take up lots of space)."""
- fixed_length: builtins.bool
- """Generate bytes arrays with fixed length"""
- fixed_count: builtins.bool
- """Generate repeated field with fixed count"""
- submsg_callback: builtins.bool
- """Generate message-level callback that is called before decoding submessages.
- This can be used to set callback fields for submsgs inside oneofs.
- """
- mangle_names: global___TypenameMangling.ValueType
- """Shorten or remove package names from type names.
- This option applies only on the file level.
- """
- callback_datatype: builtins.str
- """Data type for storage associated with callback fields."""
- callback_function: builtins.str
- """Callback function used for encoding and decoding.
- Prior to nanopb-0.4.0, the callback was specified in per-field pb_callback_t
- structure. This is still supported, but does not work inside e.g. oneof or pointer
- fields. Instead, a new method allows specifying a per-message callback that
- will be called for all callback fields in a message type.
- """
- descriptorsize: global___DescriptorSize.ValueType
- """Select the size of field descriptors. This option has to be defined
- for the whole message, not per-field. Usually automatic selection is
- ok, but if it results in compilation errors you can increase the field
- size here.
- """
- default_has: builtins.bool
- """Set default value for has_ fields."""
- package: builtins.str
- """Package name that applies only for nanopb."""
- type_override: google.protobuf.descriptor_pb2.FieldDescriptorProto.Type.ValueType
- """Override type of the field in generated C code. Only to be used with related field types"""
- sort_by_tag: builtins.bool
- """Due to historical reasons, nanopb orders fields in structs by their tag number
- instead of the order in .proto. Set this to false to keep the .proto order.
- The default value will probably change to false in nanopb-0.5.0.
- """
- fallback_type: global___FieldType.ValueType
- """Set the FT_DEFAULT field conversion strategy.
- A field that can become a static member of a c struct (e.g. int, bool, etc)
- will be a a static field.
- Fields with dynamic length are converted to either a pointer or a callback.
- """
- @property
- def include(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
- """Extra files to include in generated `.pb.h`"""
-
- @property
- def exclude(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
- """Automatic includes to exclude from generated `.pb.h`
- Same as nanopb_generator.py command line flag -x.
- """
-
- def __init__(
- self,
- *,
- max_size: builtins.int | None = ...,
- max_length: builtins.int | None = ...,
- max_count: builtins.int | None = ...,
- int_size: global___IntSize.ValueType | None = ...,
- type: global___FieldType.ValueType | None = ...,
- long_names: builtins.bool | None = ...,
- packed_struct: builtins.bool | None = ...,
- packed_enum: builtins.bool | None = ...,
- skip_message: builtins.bool | None = ...,
- no_unions: builtins.bool | None = ...,
- msgid: builtins.int | None = ...,
- anonymous_oneof: builtins.bool | None = ...,
- proto3: builtins.bool | None = ...,
- proto3_singular_msgs: builtins.bool | None = ...,
- enum_to_string: builtins.bool | None = ...,
- fixed_length: builtins.bool | None = ...,
- fixed_count: builtins.bool | None = ...,
- submsg_callback: builtins.bool | None = ...,
- mangle_names: global___TypenameMangling.ValueType | None = ...,
- callback_datatype: builtins.str | None = ...,
- callback_function: builtins.str | None = ...,
- descriptorsize: global___DescriptorSize.ValueType | None = ...,
- default_has: builtins.bool | None = ...,
- include: collections.abc.Iterable[builtins.str] | None = ...,
- exclude: collections.abc.Iterable[builtins.str] | None = ...,
- package: builtins.str | None = ...,
- type_override: google.protobuf.descriptor_pb2.FieldDescriptorProto.Type.ValueType | None = ...,
- sort_by_tag: builtins.bool | None = ...,
- fallback_type: global___FieldType.ValueType | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["anonymous_oneof", b"anonymous_oneof", "callback_datatype", b"callback_datatype", "callback_function", b"callback_function", "default_has", b"default_has", "descriptorsize", b"descriptorsize", "enum_to_string", b"enum_to_string", "fallback_type", b"fallback_type", "fixed_count", b"fixed_count", "fixed_length", b"fixed_length", "int_size", b"int_size", "long_names", b"long_names", "mangle_names", b"mangle_names", "max_count", b"max_count", "max_length", b"max_length", "max_size", b"max_size", "msgid", b"msgid", "no_unions", b"no_unions", "package", b"package", "packed_enum", b"packed_enum", "packed_struct", b"packed_struct", "proto3", b"proto3", "proto3_singular_msgs", b"proto3_singular_msgs", "skip_message", b"skip_message", "sort_by_tag", b"sort_by_tag", "submsg_callback", b"submsg_callback", "type", b"type", "type_override", b"type_override"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["anonymous_oneof", b"anonymous_oneof", "callback_datatype", b"callback_datatype", "callback_function", b"callback_function", "default_has", b"default_has", "descriptorsize", b"descriptorsize", "enum_to_string", b"enum_to_string", "exclude", b"exclude", "fallback_type", b"fallback_type", "fixed_count", b"fixed_count", "fixed_length", b"fixed_length", "include", b"include", "int_size", b"int_size", "long_names", b"long_names", "mangle_names", b"mangle_names", "max_count", b"max_count", "max_length", b"max_length", "max_size", b"max_size", "msgid", b"msgid", "no_unions", b"no_unions", "package", b"package", "packed_enum", b"packed_enum", "packed_struct", b"packed_struct", "proto3", b"proto3", "proto3_singular_msgs", b"proto3_singular_msgs", "skip_message", b"skip_message", "sort_by_tag", b"sort_by_tag", "submsg_callback", b"submsg_callback", "type", b"type", "type_override", b"type_override"]) -> None: ...
-
-global___NanoPBOptions = NanoPBOptions
-
-NANOPB_FILEOPT_FIELD_NUMBER: builtins.int
-NANOPB_MSGOPT_FIELD_NUMBER: builtins.int
-NANOPB_ENUMOPT_FIELD_NUMBER: builtins.int
-NANOPB_FIELD_NUMBER: builtins.int
-nanopb_fileopt: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FileOptions, global___NanoPBOptions]
-nanopb_msgopt: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.MessageOptions, global___NanoPBOptions]
-nanopb_enumopt: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.EnumOptions, global___NanoPBOptions]
-nanopb: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[google.protobuf.descriptor_pb2.FieldOptions, global___NanoPBOptions]
+class DescriptorSize(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/paxcount_pb2.py b/meshtastic/protobuf/paxcount_pb2.py
index f2be49e..846641a 100644
--- a/meshtastic/protobuf/paxcount_pb2.py
+++ b/meshtastic/protobuf/paxcount_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/paxcount.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,12 +15,12 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"meshtastic/protobuf/paxcount.proto\x12\x13meshtastic.protobuf\"5\n\x08Paxcount\x12\x0c\n\x04wifi\x18\x01 \x01(\r\x12\x0b\n\x03\x62le\x18\x02 \x01(\r\x12\x0e\n\x06uptime\x18\x03 \x01(\rBd\n\x14org.meshtastic.protoB\x0ePaxcountProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.paxcount_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.paxcount_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\016PaxcountProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_PAXCOUNT']._serialized_start=59
- _globals['_PAXCOUNT']._serialized_end=112
+ _PAXCOUNT._serialized_start=59
+ _PAXCOUNT._serialized_end=112
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/paxcount_pb2.pyi b/meshtastic/protobuf/paxcount_pb2.pyi
index cc7ed0d..38b5d39 100644
--- a/meshtastic/protobuf/paxcount_pb2.pyi
+++ b/meshtastic/protobuf/paxcount_pb2.pyi
@@ -1,45 +1,15 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class Paxcount(google.protobuf.message.Message):
- """
- TODO: REPLACE
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- WIFI_FIELD_NUMBER: builtins.int
- BLE_FIELD_NUMBER: builtins.int
- UPTIME_FIELD_NUMBER: builtins.int
- wifi: builtins.int
- """
- seen Wifi devices
- """
- ble: builtins.int
- """
- Seen BLE devices
- """
- uptime: builtins.int
- """
- Uptime in seconds
- """
- def __init__(
- self,
- *,
- wifi: builtins.int = ...,
- ble: builtins.int = ...,
- uptime: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["ble", b"ble", "uptime", b"uptime", "wifi", b"wifi"]) -> None: ...
-
-global___Paxcount = Paxcount
+class Paxcount(_message.Message):
+ __slots__ = ["ble", "uptime", "wifi"]
+ BLE_FIELD_NUMBER: _ClassVar[int]
+ UPTIME_FIELD_NUMBER: _ClassVar[int]
+ WIFI_FIELD_NUMBER: _ClassVar[int]
+ ble: int
+ uptime: int
+ wifi: int
+ def __init__(self, wifi: _Optional[int] = ..., ble: _Optional[int] = ..., uptime: _Optional[int] = ...) -> None: ...
diff --git a/meshtastic/protobuf/portnums_pb2.py b/meshtastic/protobuf/portnums_pb2.py
index 5364c58..f55d7e5 100644
--- a/meshtastic/protobuf/portnums_pb2.py
+++ b/meshtastic/protobuf/portnums_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/portnums.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -13,14 +13,14 @@ _sym_db = _symbol_database.Default()
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"meshtastic/protobuf/portnums.proto\x12\x13meshtastic.protobuf*\xf6\x04\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\x0f\n\x0bROUTING_APP\x10\x05\x12\r\n\tADMIN_APP\x10\x06\x12\x1f\n\x1bTEXT_MESSAGE_COMPRESSED_APP\x10\x07\x12\x10\n\x0cWAYPOINT_APP\x10\x08\x12\r\n\tAUDIO_APP\x10\t\x12\x18\n\x14\x44\x45TECTION_SENSOR_APP\x10\n\x12\r\n\tALERT_APP\x10\x0b\x12\x18\n\x14KEY_VERIFICATION_APP\x10\x0c\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x12\n\x0ePAXCOUNTER_APP\x10\"\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x11\n\rTELEMETRY_APP\x10\x43\x12\x0b\n\x07ZPS_APP\x10\x44\x12\x11\n\rSIMULATOR_APP\x10\x45\x12\x12\n\x0eTRACEROUTE_APP\x10\x46\x12\x14\n\x10NEIGHBORINFO_APP\x10G\x12\x0f\n\x0b\x41TAK_PLUGIN\x10H\x12\x12\n\x0eMAP_REPORT_APP\x10I\x12\x13\n\x0fPOWERSTRESS_APP\x10J\x12\x18\n\x14RETICULUM_TUNNEL_APP\x10L\x12\x0f\n\x0b\x43\x41YENNE_APP\x10M\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x12\x08\n\x03MAX\x10\xff\x03\x42^\n\x14org.meshtastic.protoB\x08PortnumsZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"meshtastic/protobuf/portnums.proto\x12\x13meshtastic.protobuf*\xfd\x05\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\x0f\n\x0bROUTING_APP\x10\x05\x12\r\n\tADMIN_APP\x10\x06\x12\x1f\n\x1bTEXT_MESSAGE_COMPRESSED_APP\x10\x07\x12\x10\n\x0cWAYPOINT_APP\x10\x08\x12\r\n\tAUDIO_APP\x10\t\x12\x18\n\x14\x44\x45TECTION_SENSOR_APP\x10\n\x12\r\n\tALERT_APP\x10\x0b\x12\x18\n\x14KEY_VERIFICATION_APP\x10\x0c\x12\x14\n\x10REMOTE_SHELL_APP\x10\r\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x12\n\x0ePAXCOUNTER_APP\x10\"\x12\x1e\n\x1aSTORE_FORWARD_PLUSPLUS_APP\x10#\x12\x13\n\x0fNODE_STATUS_APP\x10$\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x11\n\rTELEMETRY_APP\x10\x43\x12\x0b\n\x07ZPS_APP\x10\x44\x12\x11\n\rSIMULATOR_APP\x10\x45\x12\x12\n\x0eTRACEROUTE_APP\x10\x46\x12\x14\n\x10NEIGHBORINFO_APP\x10G\x12\x0f\n\x0b\x41TAK_PLUGIN\x10H\x12\x12\n\x0eMAP_REPORT_APP\x10I\x12\x13\n\x0fPOWERSTRESS_APP\x10J\x12\x12\n\x0eLORAWAN_BRIDGE\x10K\x12\x18\n\x14RETICULUM_TUNNEL_APP\x10L\x12\x0f\n\x0b\x43\x41YENNE_APP\x10M\x12\x12\n\x0e\x41TAK_PLUGIN_V2\x10N\x12\x12\n\x0eGROUPALARM_APP\x10p\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x12\x08\n\x03MAX\x10\xff\x03\x42^\n\x14org.meshtastic.protoB\x08PortnumsZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.portnums_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.portnums_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\010PortnumsZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_PORTNUM']._serialized_start=60
- _globals['_PORTNUM']._serialized_end=690
+ _PORTNUM._serialized_start=60
+ _PORTNUM._serialized_end=825
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/portnums_pb2.pyi b/meshtastic/protobuf/portnums_pb2.pyi
index c5b626f..04ea3a2 100644
--- a/meshtastic/protobuf/portnums_pb2.pyi
+++ b/meshtastic/protobuf/portnums_pb2.pyi
@@ -1,416 +1,46 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from typing import ClassVar as _ClassVar
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import sys
-import typing
+ADMIN_APP: PortNum
+ALERT_APP: PortNum
+ATAK_FORWARDER: PortNum
+ATAK_PLUGIN: PortNum
+ATAK_PLUGIN_V2: PortNum
+AUDIO_APP: PortNum
+CAYENNE_APP: PortNum
+DESCRIPTOR: _descriptor.FileDescriptor
+DETECTION_SENSOR_APP: PortNum
+GROUPALARM_APP: PortNum
+IP_TUNNEL_APP: PortNum
+KEY_VERIFICATION_APP: PortNum
+LORAWAN_BRIDGE: PortNum
+MAP_REPORT_APP: PortNum
+MAX: PortNum
+NEIGHBORINFO_APP: PortNum
+NODEINFO_APP: PortNum
+NODE_STATUS_APP: PortNum
+PAXCOUNTER_APP: PortNum
+POSITION_APP: PortNum
+POWERSTRESS_APP: PortNum
+PRIVATE_APP: PortNum
+RANGE_TEST_APP: PortNum
+REMOTE_HARDWARE_APP: PortNum
+REMOTE_SHELL_APP: PortNum
+REPLY_APP: PortNum
+RETICULUM_TUNNEL_APP: PortNum
+ROUTING_APP: PortNum
+SERIAL_APP: PortNum
+SIMULATOR_APP: PortNum
+STORE_FORWARD_APP: PortNum
+STORE_FORWARD_PLUSPLUS_APP: PortNum
+TELEMETRY_APP: PortNum
+TEXT_MESSAGE_APP: PortNum
+TEXT_MESSAGE_COMPRESSED_APP: PortNum
+TRACEROUTE_APP: PortNum
+UNKNOWN_APP: PortNum
+WAYPOINT_APP: PortNum
+ZPS_APP: PortNum
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-class _PortNum:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
-class _PortNumEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_PortNum.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNKNOWN_APP: _PortNum.ValueType # 0
- """
- Deprecated: do not use in new code (formerly called OPAQUE)
- A message sent from a device outside of the mesh, in a form the mesh does not understand
- NOTE: This must be 0, because it is documented in IMeshService.aidl to be so
- ENCODING: binary undefined
- """
- TEXT_MESSAGE_APP: _PortNum.ValueType # 1
- """
- A simple UTF-8 text message, which even the little micros in the mesh
- can understand and show on their screen eventually in some circumstances
- even signal might send messages in this form (see below)
- ENCODING: UTF-8 Plaintext (?)
- """
- REMOTE_HARDWARE_APP: _PortNum.ValueType # 2
- """
- Reserved for built-in GPIO/example app.
- See remote_hardware.proto/HardwareMessage for details on the message sent/received to this port number
- ENCODING: Protobuf
- """
- POSITION_APP: _PortNum.ValueType # 3
- """
- The built-in position messaging app.
- Payload is a Position message.
- ENCODING: Protobuf
- """
- NODEINFO_APP: _PortNum.ValueType # 4
- """
- The built-in user info app.
- Payload is a User message.
- ENCODING: Protobuf
- """
- ROUTING_APP: _PortNum.ValueType # 5
- """
- Protocol control packets for mesh protocol use.
- Payload is a Routing message.
- ENCODING: Protobuf
- """
- ADMIN_APP: _PortNum.ValueType # 6
- """
- Admin control packets.
- Payload is a AdminMessage message.
- ENCODING: Protobuf
- """
- TEXT_MESSAGE_COMPRESSED_APP: _PortNum.ValueType # 7
- """
- Compressed TEXT_MESSAGE payloads.
- ENCODING: UTF-8 Plaintext (?) with Unishox2 Compression
- NOTE: The Device Firmware converts a TEXT_MESSAGE_APP to TEXT_MESSAGE_COMPRESSED_APP if the compressed
- payload is shorter. There's no need for app developers to do this themselves. Also the firmware will decompress
- any incoming TEXT_MESSAGE_COMPRESSED_APP payload and convert to TEXT_MESSAGE_APP.
- """
- WAYPOINT_APP: _PortNum.ValueType # 8
- """
- Waypoint payloads.
- Payload is a Waypoint message.
- ENCODING: Protobuf
- """
- AUDIO_APP: _PortNum.ValueType # 9
- """
- Audio Payloads.
- Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now
- ENCODING: codec2 audio frames
- NOTE: audio frames contain a 3 byte header (0xc0 0xde 0xc2) and a one byte marker for the decompressed bitrate.
- This marker comes from the 'moduleConfig.audio.bitrate' enum minus one.
- """
- DETECTION_SENSOR_APP: _PortNum.ValueType # 10
- """
- Same as Text Message but originating from Detection Sensor Module.
- NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
- """
- ALERT_APP: _PortNum.ValueType # 11
- """
- Same as Text Message but used for critical alerts.
- """
- KEY_VERIFICATION_APP: _PortNum.ValueType # 12
- """
- Module/port for handling key verification requests.
- """
- REPLY_APP: _PortNum.ValueType # 32
- """
- Provides a 'ping' service that replies to any packet it receives.
- Also serves as a small example module.
- ENCODING: ASCII Plaintext
- """
- IP_TUNNEL_APP: _PortNum.ValueType # 33
- """
- Used for the python IP tunnel feature
- ENCODING: IP Packet. Handled by the python API, firmware ignores this one and pases on.
- """
- PAXCOUNTER_APP: _PortNum.ValueType # 34
- """
- Paxcounter lib included in the firmware
- ENCODING: protobuf
- """
- SERIAL_APP: _PortNum.ValueType # 64
- """
- Provides a hardware serial interface to send and receive from the Meshtastic network.
- Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
- network is forwarded to the RX pin while sending a packet to TX will go out to the Mesh network.
- Maximum packet size of 240 bytes.
- Module is disabled by default can be turned on by setting SERIAL_MODULE_ENABLED = 1 in SerialPlugh.cpp.
- ENCODING: binary undefined
- """
- STORE_FORWARD_APP: _PortNum.ValueType # 65
- """
- STORE_FORWARD_APP (Work in Progress)
- Maintained by Jm Casler (MC Hamster) : jm@casler.org
- ENCODING: Protobuf
- """
- RANGE_TEST_APP: _PortNum.ValueType # 66
- """
- Optional port for messages for the range test module.
- ENCODING: ASCII Plaintext
- NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
- """
- TELEMETRY_APP: _PortNum.ValueType # 67
- """
- Provides a format to send and receive telemetry data from the Meshtastic network.
- Maintained by Charles Crossan (crossan007) : crossan007@gmail.com
- ENCODING: Protobuf
- """
- ZPS_APP: _PortNum.ValueType # 68
- """
- Experimental tools for estimating node position without a GPS
- Maintained by Github user a-f-G-U-C (a Meshtastic contributor)
- Project files at https://github.com/a-f-G-U-C/Meshtastic-ZPS
- ENCODING: arrays of int64 fields
- """
- SIMULATOR_APP: _PortNum.ValueType # 69
- """
- Used to let multiple instances of Linux native applications communicate
- as if they did using their LoRa chip.
- Maintained by GitHub user GUVWAF.
- Project files at https://github.com/GUVWAF/Meshtasticator
- ENCODING: Protobuf (?)
- """
- TRACEROUTE_APP: _PortNum.ValueType # 70
- """
- Provides a traceroute functionality to show the route a packet towards
- a certain destination would take on the mesh. Contains a RouteDiscovery message as payload.
- ENCODING: Protobuf
- """
- NEIGHBORINFO_APP: _PortNum.ValueType # 71
- """
- Aggregates edge info for the network by sending out a list of each node's neighbors
- ENCODING: Protobuf
- """
- ATAK_PLUGIN: _PortNum.ValueType # 72
- """
- ATAK Plugin
- Portnum for payloads from the official Meshtastic ATAK plugin
- """
- MAP_REPORT_APP: _PortNum.ValueType # 73
- """
- Provides unencrypted information about a node for consumption by a map via MQTT
- """
- POWERSTRESS_APP: _PortNum.ValueType # 74
- """
- PowerStress based monitoring support (for automated power consumption testing)
- """
- RETICULUM_TUNNEL_APP: _PortNum.ValueType # 76
- """
- Reticulum Network Stack Tunnel App
- ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
- """
- CAYENNE_APP: _PortNum.ValueType # 77
- """
- App for transporting Cayenne Low Power Payload, popular for LoRaWAN sensor nodes. Offers ability to send
- arbitrary telemetry over meshtastic that is not covered by telemetry.proto
- ENCODING: CayenneLLP
- """
- PRIVATE_APP: _PortNum.ValueType # 256
- """
- Private applications should use portnums >= 256.
- To simplify initial development and testing you can use "PRIVATE_APP"
- in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh))
- """
- ATAK_FORWARDER: _PortNum.ValueType # 257
- """
- ATAK Forwarder Module https://github.com/paulmandal/atak-forwarder
- ENCODING: libcotshrink
- """
- MAX: _PortNum.ValueType # 511
- """
- Currently we limit port nums to no higher than this value
- """
-
-class PortNum(_PortNum, metaclass=_PortNumEnumTypeWrapper):
- """
- For any new 'apps' that run on the device or via sister apps on phones/PCs they should pick and use a
- unique 'portnum' for their application.
- If you are making a new app using meshtastic, please send in a pull request to add your 'portnum' to this
- master table.
- PortNums should be assigned in the following range:
- 0-63 Core Meshtastic use, do not use for third party apps
- 64-127 Registered 3rd party apps, send in a pull request that adds a new entry to portnums.proto to register your application
- 256-511 Use one of these portnums for your private applications that you don't want to register publically
- All other values are reserved.
- Note: This was formerly a Type enum named 'typ' with the same id #
- We have change to this 'portnum' based scheme for specifying app handlers for particular payloads.
- This change is backwards compatible by treating the legacy OPAQUE/CLEAR_TEXT values identically.
- """
-
-UNKNOWN_APP: PortNum.ValueType # 0
-"""
-Deprecated: do not use in new code (formerly called OPAQUE)
-A message sent from a device outside of the mesh, in a form the mesh does not understand
-NOTE: This must be 0, because it is documented in IMeshService.aidl to be so
-ENCODING: binary undefined
-"""
-TEXT_MESSAGE_APP: PortNum.ValueType # 1
-"""
-A simple UTF-8 text message, which even the little micros in the mesh
-can understand and show on their screen eventually in some circumstances
-even signal might send messages in this form (see below)
-ENCODING: UTF-8 Plaintext (?)
-"""
-REMOTE_HARDWARE_APP: PortNum.ValueType # 2
-"""
-Reserved for built-in GPIO/example app.
-See remote_hardware.proto/HardwareMessage for details on the message sent/received to this port number
-ENCODING: Protobuf
-"""
-POSITION_APP: PortNum.ValueType # 3
-"""
-The built-in position messaging app.
-Payload is a Position message.
-ENCODING: Protobuf
-"""
-NODEINFO_APP: PortNum.ValueType # 4
-"""
-The built-in user info app.
-Payload is a User message.
-ENCODING: Protobuf
-"""
-ROUTING_APP: PortNum.ValueType # 5
-"""
-Protocol control packets for mesh protocol use.
-Payload is a Routing message.
-ENCODING: Protobuf
-"""
-ADMIN_APP: PortNum.ValueType # 6
-"""
-Admin control packets.
-Payload is a AdminMessage message.
-ENCODING: Protobuf
-"""
-TEXT_MESSAGE_COMPRESSED_APP: PortNum.ValueType # 7
-"""
-Compressed TEXT_MESSAGE payloads.
-ENCODING: UTF-8 Plaintext (?) with Unishox2 Compression
-NOTE: The Device Firmware converts a TEXT_MESSAGE_APP to TEXT_MESSAGE_COMPRESSED_APP if the compressed
-payload is shorter. There's no need for app developers to do this themselves. Also the firmware will decompress
-any incoming TEXT_MESSAGE_COMPRESSED_APP payload and convert to TEXT_MESSAGE_APP.
-"""
-WAYPOINT_APP: PortNum.ValueType # 8
-"""
-Waypoint payloads.
-Payload is a Waypoint message.
-ENCODING: Protobuf
-"""
-AUDIO_APP: PortNum.ValueType # 9
-"""
-Audio Payloads.
-Encapsulated codec2 packets. On 2.4 GHZ Bandwidths only for now
-ENCODING: codec2 audio frames
-NOTE: audio frames contain a 3 byte header (0xc0 0xde 0xc2) and a one byte marker for the decompressed bitrate.
-This marker comes from the 'moduleConfig.audio.bitrate' enum minus one.
-"""
-DETECTION_SENSOR_APP: PortNum.ValueType # 10
-"""
-Same as Text Message but originating from Detection Sensor Module.
-NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
-"""
-ALERT_APP: PortNum.ValueType # 11
-"""
-Same as Text Message but used for critical alerts.
-"""
-KEY_VERIFICATION_APP: PortNum.ValueType # 12
-"""
-Module/port for handling key verification requests.
-"""
-REPLY_APP: PortNum.ValueType # 32
-"""
-Provides a 'ping' service that replies to any packet it receives.
-Also serves as a small example module.
-ENCODING: ASCII Plaintext
-"""
-IP_TUNNEL_APP: PortNum.ValueType # 33
-"""
-Used for the python IP tunnel feature
-ENCODING: IP Packet. Handled by the python API, firmware ignores this one and pases on.
-"""
-PAXCOUNTER_APP: PortNum.ValueType # 34
-"""
-Paxcounter lib included in the firmware
-ENCODING: protobuf
-"""
-SERIAL_APP: PortNum.ValueType # 64
-"""
-Provides a hardware serial interface to send and receive from the Meshtastic network.
-Connect to the RX/TX pins of a device with 38400 8N1. Packets received from the Meshtastic
-network is forwarded to the RX pin while sending a packet to TX will go out to the Mesh network.
-Maximum packet size of 240 bytes.
-Module is disabled by default can be turned on by setting SERIAL_MODULE_ENABLED = 1 in SerialPlugh.cpp.
-ENCODING: binary undefined
-"""
-STORE_FORWARD_APP: PortNum.ValueType # 65
-"""
-STORE_FORWARD_APP (Work in Progress)
-Maintained by Jm Casler (MC Hamster) : jm@casler.org
-ENCODING: Protobuf
-"""
-RANGE_TEST_APP: PortNum.ValueType # 66
-"""
-Optional port for messages for the range test module.
-ENCODING: ASCII Plaintext
-NOTE: This portnum traffic is not sent to the public MQTT starting at firmware version 2.2.9
-"""
-TELEMETRY_APP: PortNum.ValueType # 67
-"""
-Provides a format to send and receive telemetry data from the Meshtastic network.
-Maintained by Charles Crossan (crossan007) : crossan007@gmail.com
-ENCODING: Protobuf
-"""
-ZPS_APP: PortNum.ValueType # 68
-"""
-Experimental tools for estimating node position without a GPS
-Maintained by Github user a-f-G-U-C (a Meshtastic contributor)
-Project files at https://github.com/a-f-G-U-C/Meshtastic-ZPS
-ENCODING: arrays of int64 fields
-"""
-SIMULATOR_APP: PortNum.ValueType # 69
-"""
-Used to let multiple instances of Linux native applications communicate
-as if they did using their LoRa chip.
-Maintained by GitHub user GUVWAF.
-Project files at https://github.com/GUVWAF/Meshtasticator
-ENCODING: Protobuf (?)
-"""
-TRACEROUTE_APP: PortNum.ValueType # 70
-"""
-Provides a traceroute functionality to show the route a packet towards
-a certain destination would take on the mesh. Contains a RouteDiscovery message as payload.
-ENCODING: Protobuf
-"""
-NEIGHBORINFO_APP: PortNum.ValueType # 71
-"""
-Aggregates edge info for the network by sending out a list of each node's neighbors
-ENCODING: Protobuf
-"""
-ATAK_PLUGIN: PortNum.ValueType # 72
-"""
-ATAK Plugin
-Portnum for payloads from the official Meshtastic ATAK plugin
-"""
-MAP_REPORT_APP: PortNum.ValueType # 73
-"""
-Provides unencrypted information about a node for consumption by a map via MQTT
-"""
-POWERSTRESS_APP: PortNum.ValueType # 74
-"""
-PowerStress based monitoring support (for automated power consumption testing)
-"""
-RETICULUM_TUNNEL_APP: PortNum.ValueType # 76
-"""
-Reticulum Network Stack Tunnel App
-ENCODING: Fragmented RNS Packet. Handled by Meshtastic RNS interface
-"""
-CAYENNE_APP: PortNum.ValueType # 77
-"""
-App for transporting Cayenne Low Power Payload, popular for LoRaWAN sensor nodes. Offers ability to send
-arbitrary telemetry over meshtastic that is not covered by telemetry.proto
-ENCODING: CayenneLLP
-"""
-PRIVATE_APP: PortNum.ValueType # 256
-"""
-Private applications should use portnums >= 256.
-To simplify initial development and testing you can use "PRIVATE_APP"
-in your code without needing to rebuild protobuf files (via [regen-protos.sh](https://github.com/meshtastic/firmware/blob/master/bin/regen-protos.sh))
-"""
-ATAK_FORWARDER: PortNum.ValueType # 257
-"""
-ATAK Forwarder Module https://github.com/paulmandal/atak-forwarder
-ENCODING: libcotshrink
-"""
-MAX: PortNum.ValueType # 511
-"""
-Currently we limit port nums to no higher than this value
-"""
-global___PortNum = PortNum
+class PortNum(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/powermon_pb2.py b/meshtastic/protobuf/powermon_pb2.py
index 1895a95..1654348 100644
--- a/meshtastic/protobuf/powermon_pb2.py
+++ b/meshtastic/protobuf/powermon_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/powermon.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,18 +15,18 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"meshtastic/protobuf/powermon.proto\x12\x13meshtastic.protobuf\"\xe0\x01\n\x08PowerMon\"\xd3\x01\n\x05State\x12\x08\n\x04None\x10\x00\x12\x11\n\rCPU_DeepSleep\x10\x01\x12\x12\n\x0e\x43PU_LightSleep\x10\x02\x12\x0c\n\x08Vext1_On\x10\x04\x12\r\n\tLora_RXOn\x10\x08\x12\r\n\tLora_TXOn\x10\x10\x12\x11\n\rLora_RXActive\x10 \x12\t\n\x05\x42T_On\x10@\x12\x0b\n\x06LED_On\x10\x80\x01\x12\x0e\n\tScreen_On\x10\x80\x02\x12\x13\n\x0eScreen_Drawing\x10\x80\x04\x12\x0c\n\x07Wifi_On\x10\x80\x08\x12\x0f\n\nGPS_Active\x10\x80\x10\"\x88\x03\n\x12PowerStressMessage\x12;\n\x03\x63md\x18\x01 \x01(\x0e\x32..meshtastic.protobuf.PowerStressMessage.Opcode\x12\x13\n\x0bnum_seconds\x18\x02 \x01(\x02\"\x9f\x02\n\x06Opcode\x12\t\n\x05UNSET\x10\x00\x12\x0e\n\nPRINT_INFO\x10\x01\x12\x0f\n\x0b\x46ORCE_QUIET\x10\x02\x12\r\n\tEND_QUIET\x10\x03\x12\r\n\tSCREEN_ON\x10\x10\x12\x0e\n\nSCREEN_OFF\x10\x11\x12\x0c\n\x08\x43PU_IDLE\x10 \x12\x11\n\rCPU_DEEPSLEEP\x10!\x12\x0e\n\nCPU_FULLON\x10\"\x12\n\n\x06LED_ON\x10\x30\x12\x0b\n\x07LED_OFF\x10\x31\x12\x0c\n\x08LORA_OFF\x10@\x12\x0b\n\x07LORA_TX\x10\x41\x12\x0b\n\x07LORA_RX\x10\x42\x12\n\n\x06\x42T_OFF\x10P\x12\t\n\x05\x42T_ON\x10Q\x12\x0c\n\x08WIFI_OFF\x10`\x12\x0b\n\x07WIFI_ON\x10\x61\x12\x0b\n\x07GPS_OFF\x10p\x12\n\n\x06GPS_ON\x10qBd\n\x14org.meshtastic.protoB\x0ePowerMonProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.powermon_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.powermon_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\016PowerMonProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_POWERMON']._serialized_start=60
- _globals['_POWERMON']._serialized_end=284
- _globals['_POWERMON_STATE']._serialized_start=73
- _globals['_POWERMON_STATE']._serialized_end=284
- _globals['_POWERSTRESSMESSAGE']._serialized_start=287
- _globals['_POWERSTRESSMESSAGE']._serialized_end=679
- _globals['_POWERSTRESSMESSAGE_OPCODE']._serialized_start=392
- _globals['_POWERSTRESSMESSAGE_OPCODE']._serialized_end=679
+ _POWERMON._serialized_start=60
+ _POWERMON._serialized_end=284
+ _POWERMON_STATE._serialized_start=73
+ _POWERMON_STATE._serialized_end=284
+ _POWERSTRESSMESSAGE._serialized_start=287
+ _POWERSTRESSMESSAGE._serialized_end=679
+ _POWERSTRESSMESSAGE_OPCODE._serialized_start=392
+ _POWERSTRESSMESSAGE_OPCODE._serialized_end=679
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/powermon_pb2.pyi b/meshtastic/protobuf/powermon_pb2.pyi
index 6c51a28..cf22263 100644
--- a/meshtastic/protobuf/powermon_pb2.pyi
+++ b/meshtastic/protobuf/powermon_pb2.pyi
@@ -1,221 +1,55 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class PowerMon(_message.Message):
+ __slots__ = []
+ class State(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ BT_On: PowerMon.State
+ CPU_DeepSleep: PowerMon.State
+ CPU_LightSleep: PowerMon.State
+ GPS_Active: PowerMon.State
+ LED_On: PowerMon.State
+ Lora_RXActive: PowerMon.State
+ Lora_RXOn: PowerMon.State
+ Lora_TXOn: PowerMon.State
+ None: PowerMon.State
+ Screen_Drawing: PowerMon.State
+ Screen_On: PowerMon.State
+ Vext1_On: PowerMon.State
+ Wifi_On: PowerMon.State
+ def __init__(self) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class PowerMon(google.protobuf.message.Message):
- """Note: There are no 'PowerMon' messages normally in use (PowerMons are sent only as structured logs - slogs).
- But we wrap our State enum in this message to effectively nest a namespace (without our linter yelling at us)
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _State:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _StateEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[PowerMon._State.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- CPU_DeepSleep: PowerMon._State.ValueType # 1
- CPU_LightSleep: PowerMon._State.ValueType # 2
- Vext1_On: PowerMon._State.ValueType # 4
- """
- The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only
- occasionally. In cases where that rail has multiple devices on it we usually want to have logging on
- the state of that rail as an independent record.
- For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen.
-
- The log messages will be short and complete (see PowerMon.Event in the protobufs for details).
- something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states.
- (We use a bitmask for states so that if a log message gets lost it won't be fatal)
- """
- Lora_RXOn: PowerMon._State.ValueType # 8
- Lora_TXOn: PowerMon._State.ValueType # 16
- Lora_RXActive: PowerMon._State.ValueType # 32
- BT_On: PowerMon._State.ValueType # 64
- LED_On: PowerMon._State.ValueType # 128
- Screen_On: PowerMon._State.ValueType # 256
- Screen_Drawing: PowerMon._State.ValueType # 512
- Wifi_On: PowerMon._State.ValueType # 1024
- GPS_Active: PowerMon._State.ValueType # 2048
- """
- GPS is actively trying to find our location
- See GPSPowerState for more details
- """
-
- class State(_State, metaclass=_StateEnumTypeWrapper):
- """Any significant power changing event in meshtastic should be tagged with a powermon state transition.
- If you are making new meshtastic features feel free to add new entries at the end of this definition.
- """
-
- CPU_DeepSleep: PowerMon.State.ValueType # 1
- CPU_LightSleep: PowerMon.State.ValueType # 2
- Vext1_On: PowerMon.State.ValueType # 4
- """
- The external Vext1 power is on. Many boards have auxillary power rails that the CPU turns on only
- occasionally. In cases where that rail has multiple devices on it we usually want to have logging on
- the state of that rail as an independent record.
- For instance on the Heltec Tracker 1.1 board, this rail is the power source for the GPS and screen.
-
- The log messages will be short and complete (see PowerMon.Event in the protobufs for details).
- something like "S:PM:C,0x00001234,REASON" where the hex number is the bitmask of all current states.
- (We use a bitmask for states so that if a log message gets lost it won't be fatal)
- """
- Lora_RXOn: PowerMon.State.ValueType # 8
- Lora_TXOn: PowerMon.State.ValueType # 16
- Lora_RXActive: PowerMon.State.ValueType # 32
- BT_On: PowerMon.State.ValueType # 64
- LED_On: PowerMon.State.ValueType # 128
- Screen_On: PowerMon.State.ValueType # 256
- Screen_Drawing: PowerMon.State.ValueType # 512
- Wifi_On: PowerMon.State.ValueType # 1024
- GPS_Active: PowerMon.State.ValueType # 2048
- """
- GPS is actively trying to find our location
- See GPSPowerState for more details
- """
-
- def __init__(
- self,
- ) -> None: ...
-
-global___PowerMon = PowerMon
-
-@typing.final
-class PowerStressMessage(google.protobuf.message.Message):
- """
- PowerStress testing support via the C++ PowerStress module
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Opcode:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _OpcodeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[PowerStressMessage._Opcode.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: PowerStressMessage._Opcode.ValueType # 0
- """
- Unset/unused
- """
- PRINT_INFO: PowerStressMessage._Opcode.ValueType # 1
- """Print board version slog and send an ack that we are alive and ready to process commands"""
- FORCE_QUIET: PowerStressMessage._Opcode.ValueType # 2
- """Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation)"""
- END_QUIET: PowerStressMessage._Opcode.ValueType # 3
- """Stop powerstress processing - probably by just rebooting the board"""
- SCREEN_ON: PowerStressMessage._Opcode.ValueType # 16
- """Turn the screen on"""
- SCREEN_OFF: PowerStressMessage._Opcode.ValueType # 17
- """Turn the screen off"""
- CPU_IDLE: PowerStressMessage._Opcode.ValueType # 32
- """Let the CPU run but we assume mostly idling for num_seconds"""
- CPU_DEEPSLEEP: PowerStressMessage._Opcode.ValueType # 33
- """Force deep sleep for FIXME seconds"""
- CPU_FULLON: PowerStressMessage._Opcode.ValueType # 34
- """Spin the CPU as fast as possible for num_seconds"""
- LED_ON: PowerStressMessage._Opcode.ValueType # 48
- """Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes)"""
- LED_OFF: PowerStressMessage._Opcode.ValueType # 49
- """Force the LED off for num_seconds"""
- LORA_OFF: PowerStressMessage._Opcode.ValueType # 64
- """Completely turn off the LORA radio for num_seconds"""
- LORA_TX: PowerStressMessage._Opcode.ValueType # 65
- """Send Lora packets for num_seconds"""
- LORA_RX: PowerStressMessage._Opcode.ValueType # 66
- """Receive Lora packets for num_seconds (node will be mostly just listening, unless an external agent is helping stress this by sending packets on the current channel)"""
- BT_OFF: PowerStressMessage._Opcode.ValueType # 80
- """Turn off the BT radio for num_seconds"""
- BT_ON: PowerStressMessage._Opcode.ValueType # 81
- """Turn on the BT radio for num_seconds"""
- WIFI_OFF: PowerStressMessage._Opcode.ValueType # 96
- """Turn off the WIFI radio for num_seconds"""
- WIFI_ON: PowerStressMessage._Opcode.ValueType # 97
- """Turn on the WIFI radio for num_seconds"""
- GPS_OFF: PowerStressMessage._Opcode.ValueType # 112
- """Turn off the GPS radio for num_seconds"""
- GPS_ON: PowerStressMessage._Opcode.ValueType # 113
- """Turn on the GPS radio for num_seconds"""
-
- class Opcode(_Opcode, metaclass=_OpcodeEnumTypeWrapper):
- """
- What operation would we like the UUT to perform.
- note: senders should probably set want_response in their request packets, so that they can know when the state
- machine has started processing their request
- """
-
- UNSET: PowerStressMessage.Opcode.ValueType # 0
- """
- Unset/unused
- """
- PRINT_INFO: PowerStressMessage.Opcode.ValueType # 1
- """Print board version slog and send an ack that we are alive and ready to process commands"""
- FORCE_QUIET: PowerStressMessage.Opcode.ValueType # 2
- """Try to turn off all automatic processing of packets, screen, sleeping, etc (to make it easier to measure in isolation)"""
- END_QUIET: PowerStressMessage.Opcode.ValueType # 3
- """Stop powerstress processing - probably by just rebooting the board"""
- SCREEN_ON: PowerStressMessage.Opcode.ValueType # 16
- """Turn the screen on"""
- SCREEN_OFF: PowerStressMessage.Opcode.ValueType # 17
- """Turn the screen off"""
- CPU_IDLE: PowerStressMessage.Opcode.ValueType # 32
- """Let the CPU run but we assume mostly idling for num_seconds"""
- CPU_DEEPSLEEP: PowerStressMessage.Opcode.ValueType # 33
- """Force deep sleep for FIXME seconds"""
- CPU_FULLON: PowerStressMessage.Opcode.ValueType # 34
- """Spin the CPU as fast as possible for num_seconds"""
- LED_ON: PowerStressMessage.Opcode.ValueType # 48
- """Turn the LED on for num_seconds (and leave it on - for baseline power measurement purposes)"""
- LED_OFF: PowerStressMessage.Opcode.ValueType # 49
- """Force the LED off for num_seconds"""
- LORA_OFF: PowerStressMessage.Opcode.ValueType # 64
- """Completely turn off the LORA radio for num_seconds"""
- LORA_TX: PowerStressMessage.Opcode.ValueType # 65
- """Send Lora packets for num_seconds"""
- LORA_RX: PowerStressMessage.Opcode.ValueType # 66
- """Receive Lora packets for num_seconds (node will be mostly just listening, unless an external agent is helping stress this by sending packets on the current channel)"""
- BT_OFF: PowerStressMessage.Opcode.ValueType # 80
- """Turn off the BT radio for num_seconds"""
- BT_ON: PowerStressMessage.Opcode.ValueType # 81
- """Turn on the BT radio for num_seconds"""
- WIFI_OFF: PowerStressMessage.Opcode.ValueType # 96
- """Turn off the WIFI radio for num_seconds"""
- WIFI_ON: PowerStressMessage.Opcode.ValueType # 97
- """Turn on the WIFI radio for num_seconds"""
- GPS_OFF: PowerStressMessage.Opcode.ValueType # 112
- """Turn off the GPS radio for num_seconds"""
- GPS_ON: PowerStressMessage.Opcode.ValueType # 113
- """Turn on the GPS radio for num_seconds"""
-
- CMD_FIELD_NUMBER: builtins.int
- NUM_SECONDS_FIELD_NUMBER: builtins.int
- cmd: global___PowerStressMessage.Opcode.ValueType
- """
- What type of HardwareMessage is this?
- """
- num_seconds: builtins.float
- def __init__(
- self,
- *,
- cmd: global___PowerStressMessage.Opcode.ValueType = ...,
- num_seconds: builtins.float = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["cmd", b"cmd", "num_seconds", b"num_seconds"]) -> None: ...
-
-global___PowerStressMessage = PowerStressMessage
+class PowerStressMessage(_message.Message):
+ __slots__ = ["cmd", "num_seconds"]
+ class Opcode(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ BT_OFF: PowerStressMessage.Opcode
+ BT_ON: PowerStressMessage.Opcode
+ CMD_FIELD_NUMBER: _ClassVar[int]
+ CPU_DEEPSLEEP: PowerStressMessage.Opcode
+ CPU_FULLON: PowerStressMessage.Opcode
+ CPU_IDLE: PowerStressMessage.Opcode
+ END_QUIET: PowerStressMessage.Opcode
+ FORCE_QUIET: PowerStressMessage.Opcode
+ GPS_OFF: PowerStressMessage.Opcode
+ GPS_ON: PowerStressMessage.Opcode
+ LED_OFF: PowerStressMessage.Opcode
+ LED_ON: PowerStressMessage.Opcode
+ LORA_OFF: PowerStressMessage.Opcode
+ LORA_RX: PowerStressMessage.Opcode
+ LORA_TX: PowerStressMessage.Opcode
+ NUM_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ PRINT_INFO: PowerStressMessage.Opcode
+ SCREEN_OFF: PowerStressMessage.Opcode
+ SCREEN_ON: PowerStressMessage.Opcode
+ UNSET: PowerStressMessage.Opcode
+ WIFI_OFF: PowerStressMessage.Opcode
+ WIFI_ON: PowerStressMessage.Opcode
+ cmd: PowerStressMessage.Opcode
+ num_seconds: float
+ def __init__(self, cmd: _Optional[_Union[PowerStressMessage.Opcode, str]] = ..., num_seconds: _Optional[float] = ...) -> None: ...
diff --git a/meshtastic/protobuf/remote_hardware_pb2.py b/meshtastic/protobuf/remote_hardware_pb2.py
index dab1f09..c48c901 100644
--- a/meshtastic/protobuf/remote_hardware_pb2.py
+++ b/meshtastic/protobuf/remote_hardware_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/remote_hardware.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,14 +15,14 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)meshtastic/protobuf/remote_hardware.proto\x12\x13meshtastic.protobuf\"\xdf\x01\n\x0fHardwareMessage\x12\x37\n\x04type\x18\x01 \x01(\x0e\x32).meshtastic.protobuf.HardwareMessage.Type\x12\x11\n\tgpio_mask\x18\x02 \x01(\x04\x12\x12\n\ngpio_value\x18\x03 \x01(\x04\"l\n\x04Type\x12\t\n\x05UNSET\x10\x00\x12\x0f\n\x0bWRITE_GPIOS\x10\x01\x12\x0f\n\x0bWATCH_GPIOS\x10\x02\x12\x11\n\rGPIOS_CHANGED\x10\x03\x12\x0e\n\nREAD_GPIOS\x10\x04\x12\x14\n\x10READ_GPIOS_REPLY\x10\x05\x42\x64\n\x14org.meshtastic.protoB\x0eRemoteHardwareZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.remote_hardware_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.remote_hardware_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\016RemoteHardwareZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_HARDWAREMESSAGE']._serialized_start=67
- _globals['_HARDWAREMESSAGE']._serialized_end=290
- _globals['_HARDWAREMESSAGE_TYPE']._serialized_start=182
- _globals['_HARDWAREMESSAGE_TYPE']._serialized_end=290
+ _HARDWAREMESSAGE._serialized_start=67
+ _HARDWAREMESSAGE._serialized_end=290
+ _HARDWAREMESSAGE_TYPE._serialized_start=182
+ _HARDWAREMESSAGE_TYPE._serialized_end=290
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/remote_hardware_pb2.pyi b/meshtastic/protobuf/remote_hardware_pb2.pyi
index c2f7afa..e45739e 100644
--- a/meshtastic/protobuf/remote_hardware_pb2.pyi
+++ b/meshtastic/protobuf/remote_hardware_pb2.pyi
@@ -1,126 +1,24 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class HardwareMessage(google.protobuf.message.Message):
- """
- An example app to show off the module system. This message is used for
- REMOTE_HARDWARE_APP PortNums.
- Also provides easy remote access to any GPIO.
- In the future other remote hardware operations can be added based on user interest
- (i.e. serial output, spi/i2c input/output).
- FIXME - currently this feature is turned on by default which is dangerous
- because no security yet (beyond the channel mechanism).
- It should be off by default and then protected based on some TBD mechanism
- (a special channel once multichannel support is included?)
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Type:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _TypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[HardwareMessage._Type.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: HardwareMessage._Type.ValueType # 0
- """
- Unset/unused
- """
- WRITE_GPIOS: HardwareMessage._Type.ValueType # 1
- """
- Set gpio gpios based on gpio_mask/gpio_value
- """
- WATCH_GPIOS: HardwareMessage._Type.ValueType # 2
- """
- We are now interested in watching the gpio_mask gpios.
- If the selected gpios change, please broadcast GPIOS_CHANGED.
- Will implicitly change the gpios requested to be INPUT gpios.
- """
- GPIOS_CHANGED: HardwareMessage._Type.ValueType # 3
- """
- The gpios listed in gpio_mask have changed, the new values are listed in gpio_value
- """
- READ_GPIOS: HardwareMessage._Type.ValueType # 4
- """
- Read the gpios specified in gpio_mask, send back a READ_GPIOS_REPLY reply with gpio_value populated
- """
- READ_GPIOS_REPLY: HardwareMessage._Type.ValueType # 5
- """
- A reply to READ_GPIOS. gpio_mask and gpio_value will be populated
- """
-
- class Type(_Type, metaclass=_TypeEnumTypeWrapper):
- """
- TODO: REPLACE
- """
-
- UNSET: HardwareMessage.Type.ValueType # 0
- """
- Unset/unused
- """
- WRITE_GPIOS: HardwareMessage.Type.ValueType # 1
- """
- Set gpio gpios based on gpio_mask/gpio_value
- """
- WATCH_GPIOS: HardwareMessage.Type.ValueType # 2
- """
- We are now interested in watching the gpio_mask gpios.
- If the selected gpios change, please broadcast GPIOS_CHANGED.
- Will implicitly change the gpios requested to be INPUT gpios.
- """
- GPIOS_CHANGED: HardwareMessage.Type.ValueType # 3
- """
- The gpios listed in gpio_mask have changed, the new values are listed in gpio_value
- """
- READ_GPIOS: HardwareMessage.Type.ValueType # 4
- """
- Read the gpios specified in gpio_mask, send back a READ_GPIOS_REPLY reply with gpio_value populated
- """
- READ_GPIOS_REPLY: HardwareMessage.Type.ValueType # 5
- """
- A reply to READ_GPIOS. gpio_mask and gpio_value will be populated
- """
-
- TYPE_FIELD_NUMBER: builtins.int
- GPIO_MASK_FIELD_NUMBER: builtins.int
- GPIO_VALUE_FIELD_NUMBER: builtins.int
- type: global___HardwareMessage.Type.ValueType
- """
- What type of HardwareMessage is this?
- """
- gpio_mask: builtins.int
- """
- What gpios are we changing. Not used for all MessageTypes, see MessageType for details
- """
- gpio_value: builtins.int
- """
- For gpios that were listed in gpio_mask as valid, what are the signal levels for those gpios.
- Not used for all MessageTypes, see MessageType for details
- """
- def __init__(
- self,
- *,
- type: global___HardwareMessage.Type.ValueType = ...,
- gpio_mask: builtins.int = ...,
- gpio_value: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["gpio_mask", b"gpio_mask", "gpio_value", b"gpio_value", "type", b"type"]) -> None: ...
-
-global___HardwareMessage = HardwareMessage
+class HardwareMessage(_message.Message):
+ __slots__ = ["gpio_mask", "gpio_value", "type"]
+ class Type(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ GPIOS_CHANGED: HardwareMessage.Type
+ GPIO_MASK_FIELD_NUMBER: _ClassVar[int]
+ GPIO_VALUE_FIELD_NUMBER: _ClassVar[int]
+ READ_GPIOS: HardwareMessage.Type
+ READ_GPIOS_REPLY: HardwareMessage.Type
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ UNSET: HardwareMessage.Type
+ WATCH_GPIOS: HardwareMessage.Type
+ WRITE_GPIOS: HardwareMessage.Type
+ gpio_mask: int
+ gpio_value: int
+ type: HardwareMessage.Type
+ def __init__(self, type: _Optional[_Union[HardwareMessage.Type, str]] = ..., gpio_mask: _Optional[int] = ..., gpio_value: _Optional[int] = ...) -> None: ...
diff --git a/meshtastic/protobuf/rtttl_pb2.py b/meshtastic/protobuf/rtttl_pb2.py
index 12842c2..78ef80a 100644
--- a/meshtastic/protobuf/rtttl_pb2.py
+++ b/meshtastic/protobuf/rtttl_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/rtttl.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,12 +15,12 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmeshtastic/protobuf/rtttl.proto\x12\x13meshtastic.protobuf\"\x1f\n\x0bRTTTLConfig\x12\x10\n\x08ringtone\x18\x01 \x01(\tBg\n\x14org.meshtastic.protoB\x11RTTTLConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.rtttl_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.rtttl_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\021RTTTLConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_RTTTLCONFIG']._serialized_start=56
- _globals['_RTTTLCONFIG']._serialized_end=87
+ _RTTTLCONFIG._serialized_start=56
+ _RTTTLCONFIG._serialized_end=87
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/rtttl_pb2.pyi b/meshtastic/protobuf/rtttl_pb2.pyi
index fe91f94..2fbe7a9 100644
--- a/meshtastic/protobuf/rtttl_pb2.pyi
+++ b/meshtastic/protobuf/rtttl_pb2.pyi
@@ -1,33 +1,11 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.message
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class RTTTLConfig(google.protobuf.message.Message):
- """
- Canned message module configuration.
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- RINGTONE_FIELD_NUMBER: builtins.int
- ringtone: builtins.str
- """
- Ringtone for PWM Buzzer in RTTTL Format.
- """
- def __init__(
- self,
- *,
- ringtone: builtins.str = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["ringtone", b"ringtone"]) -> None: ...
-
-global___RTTTLConfig = RTTTLConfig
+class RTTTLConfig(_message.Message):
+ __slots__ = ["ringtone"]
+ RINGTONE_FIELD_NUMBER: _ClassVar[int]
+ ringtone: str
+ def __init__(self, ringtone: _Optional[str] = ...) -> None: ...
diff --git a/meshtastic/protobuf/serial_hal_pb2.py b/meshtastic/protobuf/serial_hal_pb2.py
new file mode 100644
index 0000000..0118051
--- /dev/null
+++ b/meshtastic/protobuf/serial_hal_pb2.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: meshtastic/protobuf/serial_hal.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$meshtastic/protobuf/serial_hal.proto\x12\x13meshtastic.protobuf\"\xab\x02\n\x10SerialHalCommand\x12\x16\n\x0etransaction_id\x18\x01 \x01(\r\x12\x38\n\x04type\x18\x02 \x01(\x0e\x32*.meshtastic.protobuf.SerialHalCommand.Type\x12\x0b\n\x03pin\x18\x03 \x01(\r\x12\r\n\x05value\x18\x04 \x01(\r\x12\x0c\n\x04mode\x18\x05 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x06 \x01(\x0c\"\x8c\x01\n\x04Type\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08PIN_MODE\x10\x01\x12\x11\n\rDIGITAL_WRITE\x10\x02\x12\x10\n\x0c\x44IGITAL_READ\x10\x03\x12\x14\n\x10\x41TTACH_INTERRUPT\x10\x04\x12\x14\n\x10\x44\x45TACH_INTERRUPT\x10\x05\x12\x10\n\x0cSPI_TRANSFER\x10\x06\x12\x08\n\x04NOOP\x10\x07\"\xd5\x01\n\x11SerialHalResponse\x12\x16\n\x0etransaction_id\x18\x01 \x01(\r\x12=\n\x06result\x18\x02 \x01(\x0e\x32-.meshtastic.protobuf.SerialHalResponse.Result\x12\r\n\x05value\x18\x03 \x01(\r\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\x12\r\n\x05\x65rror\x18\x05 \x01(\t\"=\n\x06Result\x12\x06\n\x02OK\x10\x00\x12\t\n\x05\x45RROR\x10\x01\x12\x0f\n\x0b\x42\x41\x44_REQUEST\x10\x02\x12\x0f\n\x0bUNSUPPORTED\x10\x03\x42_\n\x14org.meshtastic.protoB\tSerialHalZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.serial_hal_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+ DESCRIPTOR._options = None
+ DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\tSerialHalZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
+ _SERIALHALCOMMAND._serialized_start=62
+ _SERIALHALCOMMAND._serialized_end=361
+ _SERIALHALCOMMAND_TYPE._serialized_start=221
+ _SERIALHALCOMMAND_TYPE._serialized_end=361
+ _SERIALHALRESPONSE._serialized_start=364
+ _SERIALHALRESPONSE._serialized_end=577
+ _SERIALHALRESPONSE_RESULT._serialized_start=516
+ _SERIALHALRESPONSE_RESULT._serialized_end=577
+# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/serial_hal_pb2.pyi b/meshtastic/protobuf/serial_hal_pb2.pyi
new file mode 100644
index 0000000..7275610
--- /dev/null
+++ b/meshtastic/protobuf/serial_hal_pb2.pyi
@@ -0,0 +1,52 @@
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class SerialHalCommand(_message.Message):
+ __slots__ = ["data", "mode", "pin", "transaction_id", "type", "value"]
+ class Type(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ATTACH_INTERRUPT: SerialHalCommand.Type
+ DATA_FIELD_NUMBER: _ClassVar[int]
+ DETACH_INTERRUPT: SerialHalCommand.Type
+ DIGITAL_READ: SerialHalCommand.Type
+ DIGITAL_WRITE: SerialHalCommand.Type
+ MODE_FIELD_NUMBER: _ClassVar[int]
+ NOOP: SerialHalCommand.Type
+ PIN_FIELD_NUMBER: _ClassVar[int]
+ PIN_MODE: SerialHalCommand.Type
+ SPI_TRANSFER: SerialHalCommand.Type
+ TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int]
+ TYPE_FIELD_NUMBER: _ClassVar[int]
+ UNSET: SerialHalCommand.Type
+ VALUE_FIELD_NUMBER: _ClassVar[int]
+ data: bytes
+ mode: int
+ pin: int
+ transaction_id: int
+ type: SerialHalCommand.Type
+ value: int
+ def __init__(self, transaction_id: _Optional[int] = ..., type: _Optional[_Union[SerialHalCommand.Type, str]] = ..., pin: _Optional[int] = ..., value: _Optional[int] = ..., mode: _Optional[int] = ..., data: _Optional[bytes] = ...) -> None: ...
+
+class SerialHalResponse(_message.Message):
+ __slots__ = ["data", "error", "result", "transaction_id", "value"]
+ class Result(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ BAD_REQUEST: SerialHalResponse.Result
+ DATA_FIELD_NUMBER: _ClassVar[int]
+ ERROR: SerialHalResponse.Result
+ ERROR_FIELD_NUMBER: _ClassVar[int]
+ OK: SerialHalResponse.Result
+ RESULT_FIELD_NUMBER: _ClassVar[int]
+ TRANSACTION_ID_FIELD_NUMBER: _ClassVar[int]
+ UNSUPPORTED: SerialHalResponse.Result
+ VALUE_FIELD_NUMBER: _ClassVar[int]
+ data: bytes
+ error: str
+ result: SerialHalResponse.Result
+ transaction_id: int
+ value: int
+ def __init__(self, transaction_id: _Optional[int] = ..., result: _Optional[_Union[SerialHalResponse.Result, str]] = ..., value: _Optional[int] = ..., data: _Optional[bytes] = ..., error: _Optional[str] = ...) -> None: ...
diff --git a/meshtastic/protobuf/storeforward_pb2.py b/meshtastic/protobuf/storeforward_pb2.py
index cd57ff6..1985463 100644
--- a/meshtastic/protobuf/storeforward_pb2.py
+++ b/meshtastic/protobuf/storeforward_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/storeforward.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,20 +15,20 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&meshtastic/protobuf/storeforward.proto\x12\x13meshtastic.protobuf\"\xc0\x07\n\x0fStoreAndForward\x12@\n\x02rr\x18\x01 \x01(\x0e\x32\x34.meshtastic.protobuf.StoreAndForward.RequestResponse\x12@\n\x05stats\x18\x02 \x01(\x0b\x32/.meshtastic.protobuf.StoreAndForward.StatisticsH\x00\x12?\n\x07history\x18\x03 \x01(\x0b\x32,.meshtastic.protobuf.StoreAndForward.HistoryH\x00\x12\x43\n\theartbeat\x18\x04 \x01(\x0b\x32..meshtastic.protobuf.StoreAndForward.HeartbeatH\x00\x12\x0e\n\x04text\x18\x05 \x01(\x0cH\x00\x1a\xcd\x01\n\nStatistics\x12\x16\n\x0emessages_total\x18\x01 \x01(\r\x12\x16\n\x0emessages_saved\x18\x02 \x01(\r\x12\x14\n\x0cmessages_max\x18\x03 \x01(\r\x12\x0f\n\x07up_time\x18\x04 \x01(\r\x12\x10\n\x08requests\x18\x05 \x01(\r\x12\x18\n\x10requests_history\x18\x06 \x01(\r\x12\x11\n\theartbeat\x18\x07 \x01(\x08\x12\x12\n\nreturn_max\x18\x08 \x01(\r\x12\x15\n\rreturn_window\x18\t \x01(\r\x1aI\n\x07History\x12\x18\n\x10history_messages\x18\x01 \x01(\r\x12\x0e\n\x06window\x18\x02 \x01(\r\x12\x14\n\x0clast_request\x18\x03 \x01(\r\x1a.\n\tHeartbeat\x12\x0e\n\x06period\x18\x01 \x01(\r\x12\x11\n\tsecondary\x18\x02 \x01(\r\"\xbc\x02\n\x0fRequestResponse\x12\t\n\x05UNSET\x10\x00\x12\x10\n\x0cROUTER_ERROR\x10\x01\x12\x14\n\x10ROUTER_HEARTBEAT\x10\x02\x12\x0f\n\x0bROUTER_PING\x10\x03\x12\x0f\n\x0bROUTER_PONG\x10\x04\x12\x0f\n\x0bROUTER_BUSY\x10\x05\x12\x12\n\x0eROUTER_HISTORY\x10\x06\x12\x10\n\x0cROUTER_STATS\x10\x07\x12\x16\n\x12ROUTER_TEXT_DIRECT\x10\x08\x12\x19\n\x15ROUTER_TEXT_BROADCAST\x10\t\x12\x10\n\x0c\x43LIENT_ERROR\x10@\x12\x12\n\x0e\x43LIENT_HISTORY\x10\x41\x12\x10\n\x0c\x43LIENT_STATS\x10\x42\x12\x0f\n\x0b\x43LIENT_PING\x10\x43\x12\x0f\n\x0b\x43LIENT_PONG\x10\x44\x12\x10\n\x0c\x43LIENT_ABORT\x10jB\t\n\x07variantBk\n\x14org.meshtastic.protoB\x15StoreAndForwardProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.storeforward_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.storeforward_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\025StoreAndForwardProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_STOREANDFORWARD']._serialized_start=64
- _globals['_STOREANDFORWARD']._serialized_end=1024
- _globals['_STOREANDFORWARD_STATISTICS']._serialized_start=366
- _globals['_STOREANDFORWARD_STATISTICS']._serialized_end=571
- _globals['_STOREANDFORWARD_HISTORY']._serialized_start=573
- _globals['_STOREANDFORWARD_HISTORY']._serialized_end=646
- _globals['_STOREANDFORWARD_HEARTBEAT']._serialized_start=648
- _globals['_STOREANDFORWARD_HEARTBEAT']._serialized_end=694
- _globals['_STOREANDFORWARD_REQUESTRESPONSE']._serialized_start=697
- _globals['_STOREANDFORWARD_REQUESTRESPONSE']._serialized_end=1013
+ _STOREANDFORWARD._serialized_start=64
+ _STOREANDFORWARD._serialized_end=1024
+ _STOREANDFORWARD_STATISTICS._serialized_start=366
+ _STOREANDFORWARD_STATISTICS._serialized_end=571
+ _STOREANDFORWARD_HISTORY._serialized_start=573
+ _STOREANDFORWARD_HISTORY._serialized_end=646
+ _STOREANDFORWARD_HEARTBEAT._serialized_start=648
+ _STOREANDFORWARD_HEARTBEAT._serialized_end=694
+ _STOREANDFORWARD_REQUESTRESPONSE._serialized_start=697
+ _STOREANDFORWARD_REQUESTRESPONSE._serialized_end=1013
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/storeforward_pb2.pyi b/meshtastic/protobuf/storeforward_pb2.pyi
index aff4f74..6064118 100644
--- a/meshtastic/protobuf/storeforward_pb2.pyi
+++ b/meshtastic/protobuf/storeforward_pb2.pyi
@@ -1,345 +1,75 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class StoreAndForward(google.protobuf.message.Message):
- """
- TODO: REPLACE
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _RequestResponse:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _RequestResponseEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[StoreAndForward._RequestResponse.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- UNSET: StoreAndForward._RequestResponse.ValueType # 0
- """
- Unset/unused
- """
- ROUTER_ERROR: StoreAndForward._RequestResponse.ValueType # 1
- """
- Router is an in error state.
- """
- ROUTER_HEARTBEAT: StoreAndForward._RequestResponse.ValueType # 2
- """
- Router heartbeat
- """
- ROUTER_PING: StoreAndForward._RequestResponse.ValueType # 3
- """
- Router has requested the client respond. This can work as a
- "are you there" message.
- """
- ROUTER_PONG: StoreAndForward._RequestResponse.ValueType # 4
- """
- The response to a "Ping"
- """
- ROUTER_BUSY: StoreAndForward._RequestResponse.ValueType # 5
- """
- Router is currently busy. Please try again later.
- """
- ROUTER_HISTORY: StoreAndForward._RequestResponse.ValueType # 6
- """
- Router is responding to a request for history.
- """
- ROUTER_STATS: StoreAndForward._RequestResponse.ValueType # 7
- """
- Router is responding to a request for stats.
- """
- ROUTER_TEXT_DIRECT: StoreAndForward._RequestResponse.ValueType # 8
- """
- Router sends a text message from its history that was a direct message.
- """
- ROUTER_TEXT_BROADCAST: StoreAndForward._RequestResponse.ValueType # 9
- """
- Router sends a text message from its history that was a broadcast.
- """
- CLIENT_ERROR: StoreAndForward._RequestResponse.ValueType # 64
- """
- Client is an in error state.
- """
- CLIENT_HISTORY: StoreAndForward._RequestResponse.ValueType # 65
- """
- Client has requested a replay from the router.
- """
- CLIENT_STATS: StoreAndForward._RequestResponse.ValueType # 66
- """
- Client has requested stats from the router.
- """
- CLIENT_PING: StoreAndForward._RequestResponse.ValueType # 67
- """
- Client has requested the router respond. This can work as a
- "are you there" message.
- """
- CLIENT_PONG: StoreAndForward._RequestResponse.ValueType # 68
- """
- The response to a "Ping"
- """
- CLIENT_ABORT: StoreAndForward._RequestResponse.ValueType # 106
- """
- Client has requested that the router abort processing the client's request
- """
-
- class RequestResponse(_RequestResponse, metaclass=_RequestResponseEnumTypeWrapper):
- """
- 001 - 063 = From Router
- 064 - 127 = From Client
- """
-
- UNSET: StoreAndForward.RequestResponse.ValueType # 0
- """
- Unset/unused
- """
- ROUTER_ERROR: StoreAndForward.RequestResponse.ValueType # 1
- """
- Router is an in error state.
- """
- ROUTER_HEARTBEAT: StoreAndForward.RequestResponse.ValueType # 2
- """
- Router heartbeat
- """
- ROUTER_PING: StoreAndForward.RequestResponse.ValueType # 3
- """
- Router has requested the client respond. This can work as a
- "are you there" message.
- """
- ROUTER_PONG: StoreAndForward.RequestResponse.ValueType # 4
- """
- The response to a "Ping"
- """
- ROUTER_BUSY: StoreAndForward.RequestResponse.ValueType # 5
- """
- Router is currently busy. Please try again later.
- """
- ROUTER_HISTORY: StoreAndForward.RequestResponse.ValueType # 6
- """
- Router is responding to a request for history.
- """
- ROUTER_STATS: StoreAndForward.RequestResponse.ValueType # 7
- """
- Router is responding to a request for stats.
- """
- ROUTER_TEXT_DIRECT: StoreAndForward.RequestResponse.ValueType # 8
- """
- Router sends a text message from its history that was a direct message.
- """
- ROUTER_TEXT_BROADCAST: StoreAndForward.RequestResponse.ValueType # 9
- """
- Router sends a text message from its history that was a broadcast.
- """
- CLIENT_ERROR: StoreAndForward.RequestResponse.ValueType # 64
- """
- Client is an in error state.
- """
- CLIENT_HISTORY: StoreAndForward.RequestResponse.ValueType # 65
- """
- Client has requested a replay from the router.
- """
- CLIENT_STATS: StoreAndForward.RequestResponse.ValueType # 66
- """
- Client has requested stats from the router.
- """
- CLIENT_PING: StoreAndForward.RequestResponse.ValueType # 67
- """
- Client has requested the router respond. This can work as a
- "are you there" message.
- """
- CLIENT_PONG: StoreAndForward.RequestResponse.ValueType # 68
- """
- The response to a "Ping"
- """
- CLIENT_ABORT: StoreAndForward.RequestResponse.ValueType # 106
- """
- Client has requested that the router abort processing the client's request
- """
-
- @typing.final
- class Statistics(google.protobuf.message.Message):
- """
- TODO: REPLACE
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- MESSAGES_TOTAL_FIELD_NUMBER: builtins.int
- MESSAGES_SAVED_FIELD_NUMBER: builtins.int
- MESSAGES_MAX_FIELD_NUMBER: builtins.int
- UP_TIME_FIELD_NUMBER: builtins.int
- REQUESTS_FIELD_NUMBER: builtins.int
- REQUESTS_HISTORY_FIELD_NUMBER: builtins.int
- HEARTBEAT_FIELD_NUMBER: builtins.int
- RETURN_MAX_FIELD_NUMBER: builtins.int
- RETURN_WINDOW_FIELD_NUMBER: builtins.int
- messages_total: builtins.int
- """
- Number of messages we have ever seen
- """
- messages_saved: builtins.int
- """
- Number of messages we have currently saved our history.
- """
- messages_max: builtins.int
- """
- Maximum number of messages we will save
- """
- up_time: builtins.int
- """
- Router uptime in seconds
- """
- requests: builtins.int
- """
- Number of times any client sent a request to the S&F.
- """
- requests_history: builtins.int
- """
- Number of times the history was requested.
- """
- heartbeat: builtins.bool
- """
- Is the heartbeat enabled on the server?
- """
- return_max: builtins.int
- """
- Maximum number of messages the server will return.
- """
- return_window: builtins.int
- """
- Maximum history window in minutes the server will return messages from.
- """
- def __init__(
- self,
- *,
- messages_total: builtins.int = ...,
- messages_saved: builtins.int = ...,
- messages_max: builtins.int = ...,
- up_time: builtins.int = ...,
- requests: builtins.int = ...,
- requests_history: builtins.int = ...,
- heartbeat: builtins.bool = ...,
- return_max: builtins.int = ...,
- return_window: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["heartbeat", b"heartbeat", "messages_max", b"messages_max", "messages_saved", b"messages_saved", "messages_total", b"messages_total", "requests", b"requests", "requests_history", b"requests_history", "return_max", b"return_max", "return_window", b"return_window", "up_time", b"up_time"]) -> None: ...
-
- @typing.final
- class History(google.protobuf.message.Message):
- """
- TODO: REPLACE
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- HISTORY_MESSAGES_FIELD_NUMBER: builtins.int
- WINDOW_FIELD_NUMBER: builtins.int
- LAST_REQUEST_FIELD_NUMBER: builtins.int
- history_messages: builtins.int
- """
- Number of that will be sent to the client
- """
- window: builtins.int
- """
- The window of messages that was used to filter the history client requested
- """
- last_request: builtins.int
- """
- Index in the packet history of the last message sent in a previous request to the server.
- Will be sent to the client before sending the history and can be set in a subsequent request to avoid getting packets the server already sent to the client.
- """
- def __init__(
- self,
- *,
- history_messages: builtins.int = ...,
- window: builtins.int = ...,
- last_request: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["history_messages", b"history_messages", "last_request", b"last_request", "window", b"window"]) -> None: ...
-
- @typing.final
- class Heartbeat(google.protobuf.message.Message):
- """
- TODO: REPLACE
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PERIOD_FIELD_NUMBER: builtins.int
- SECONDARY_FIELD_NUMBER: builtins.int
- period: builtins.int
- """
- Period in seconds that the heartbeat is sent out that will be sent to the client
- """
- secondary: builtins.int
- """
- If set, this is not the primary Store & Forward router on the mesh
- """
- def __init__(
- self,
- *,
- period: builtins.int = ...,
- secondary: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["period", b"period", "secondary", b"secondary"]) -> None: ...
-
- RR_FIELD_NUMBER: builtins.int
- STATS_FIELD_NUMBER: builtins.int
- HISTORY_FIELD_NUMBER: builtins.int
- HEARTBEAT_FIELD_NUMBER: builtins.int
- TEXT_FIELD_NUMBER: builtins.int
- rr: global___StoreAndForward.RequestResponse.ValueType
- """
- TODO: REPLACE
- """
- text: builtins.bytes
- """
- Text from history message.
- """
- @property
- def stats(self) -> global___StoreAndForward.Statistics:
- """
- TODO: REPLACE
- """
-
- @property
- def history(self) -> global___StoreAndForward.History:
- """
- TODO: REPLACE
- """
-
- @property
- def heartbeat(self) -> global___StoreAndForward.Heartbeat:
- """
- TODO: REPLACE
- """
-
- def __init__(
- self,
- *,
- rr: global___StoreAndForward.RequestResponse.ValueType = ...,
- stats: global___StoreAndForward.Statistics | None = ...,
- history: global___StoreAndForward.History | None = ...,
- heartbeat: global___StoreAndForward.Heartbeat | None = ...,
- text: builtins.bytes = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["heartbeat", b"heartbeat", "history", b"history", "stats", b"stats", "text", b"text", "variant", b"variant"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["heartbeat", b"heartbeat", "history", b"history", "rr", b"rr", "stats", b"stats", "text", b"text", "variant", b"variant"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["variant", b"variant"]) -> typing.Literal["stats", "history", "heartbeat", "text"] | None: ...
-
-global___StoreAndForward = StoreAndForward
+class StoreAndForward(_message.Message):
+ __slots__ = ["heartbeat", "history", "rr", "stats", "text"]
+ class RequestResponse(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ class Heartbeat(_message.Message):
+ __slots__ = ["period", "secondary"]
+ PERIOD_FIELD_NUMBER: _ClassVar[int]
+ SECONDARY_FIELD_NUMBER: _ClassVar[int]
+ period: int
+ secondary: int
+ def __init__(self, period: _Optional[int] = ..., secondary: _Optional[int] = ...) -> None: ...
+ class History(_message.Message):
+ __slots__ = ["history_messages", "last_request", "window"]
+ HISTORY_MESSAGES_FIELD_NUMBER: _ClassVar[int]
+ LAST_REQUEST_FIELD_NUMBER: _ClassVar[int]
+ WINDOW_FIELD_NUMBER: _ClassVar[int]
+ history_messages: int
+ last_request: int
+ window: int
+ def __init__(self, history_messages: _Optional[int] = ..., window: _Optional[int] = ..., last_request: _Optional[int] = ...) -> None: ...
+ class Statistics(_message.Message):
+ __slots__ = ["heartbeat", "messages_max", "messages_saved", "messages_total", "requests", "requests_history", "return_max", "return_window", "up_time"]
+ HEARTBEAT_FIELD_NUMBER: _ClassVar[int]
+ MESSAGES_MAX_FIELD_NUMBER: _ClassVar[int]
+ MESSAGES_SAVED_FIELD_NUMBER: _ClassVar[int]
+ MESSAGES_TOTAL_FIELD_NUMBER: _ClassVar[int]
+ REQUESTS_FIELD_NUMBER: _ClassVar[int]
+ REQUESTS_HISTORY_FIELD_NUMBER: _ClassVar[int]
+ RETURN_MAX_FIELD_NUMBER: _ClassVar[int]
+ RETURN_WINDOW_FIELD_NUMBER: _ClassVar[int]
+ UP_TIME_FIELD_NUMBER: _ClassVar[int]
+ heartbeat: bool
+ messages_max: int
+ messages_saved: int
+ messages_total: int
+ requests: int
+ requests_history: int
+ return_max: int
+ return_window: int
+ up_time: int
+ def __init__(self, messages_total: _Optional[int] = ..., messages_saved: _Optional[int] = ..., messages_max: _Optional[int] = ..., up_time: _Optional[int] = ..., requests: _Optional[int] = ..., requests_history: _Optional[int] = ..., heartbeat: bool = ..., return_max: _Optional[int] = ..., return_window: _Optional[int] = ...) -> None: ...
+ CLIENT_ABORT: StoreAndForward.RequestResponse
+ CLIENT_ERROR: StoreAndForward.RequestResponse
+ CLIENT_HISTORY: StoreAndForward.RequestResponse
+ CLIENT_PING: StoreAndForward.RequestResponse
+ CLIENT_PONG: StoreAndForward.RequestResponse
+ CLIENT_STATS: StoreAndForward.RequestResponse
+ HEARTBEAT_FIELD_NUMBER: _ClassVar[int]
+ HISTORY_FIELD_NUMBER: _ClassVar[int]
+ ROUTER_BUSY: StoreAndForward.RequestResponse
+ ROUTER_ERROR: StoreAndForward.RequestResponse
+ ROUTER_HEARTBEAT: StoreAndForward.RequestResponse
+ ROUTER_HISTORY: StoreAndForward.RequestResponse
+ ROUTER_PING: StoreAndForward.RequestResponse
+ ROUTER_PONG: StoreAndForward.RequestResponse
+ ROUTER_STATS: StoreAndForward.RequestResponse
+ ROUTER_TEXT_BROADCAST: StoreAndForward.RequestResponse
+ ROUTER_TEXT_DIRECT: StoreAndForward.RequestResponse
+ RR_FIELD_NUMBER: _ClassVar[int]
+ STATS_FIELD_NUMBER: _ClassVar[int]
+ TEXT_FIELD_NUMBER: _ClassVar[int]
+ UNSET: StoreAndForward.RequestResponse
+ heartbeat: StoreAndForward.Heartbeat
+ history: StoreAndForward.History
+ rr: StoreAndForward.RequestResponse
+ stats: StoreAndForward.Statistics
+ text: bytes
+ def __init__(self, rr: _Optional[_Union[StoreAndForward.RequestResponse, str]] = ..., stats: _Optional[_Union[StoreAndForward.Statistics, _Mapping]] = ..., history: _Optional[_Union[StoreAndForward.History, _Mapping]] = ..., heartbeat: _Optional[_Union[StoreAndForward.Heartbeat, _Mapping]] = ..., text: _Optional[bytes] = ...) -> None: ...
diff --git a/meshtastic/protobuf/telemetry_pb2.py b/meshtastic/protobuf/telemetry_pb2.py
index 20f5c47..064bc5a 100644
--- a/meshtastic/protobuf/telemetry_pb2.py
+++ b/meshtastic/protobuf/telemetry_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/telemetry.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -13,32 +13,36 @@ _sym_db = _symbol_database.Default()
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/telemetry.proto\x12\x13meshtastic.protobuf\"\xf3\x01\n\rDeviceMetrics\x12\x1a\n\rbattery_level\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07voltage\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12 \n\x13\x63hannel_utilization\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x18\n\x0b\x61ir_util_tx\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x1b\n\x0euptime_seconds\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x10\n\x0e_battery_levelB\n\n\x08_voltageB\x16\n\x14_channel_utilizationB\x0e\n\x0c_air_util_txB\x11\n\x0f_uptime_seconds\"\x82\x07\n\x12\x45nvironmentMetrics\x12\x18\n\x0btemperature\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x1e\n\x11relative_humidity\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12 \n\x13\x62\x61rometric_pressure\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x1b\n\x0egas_resistance\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x14\n\x07voltage\x18\x05 \x01(\x02H\x04\x88\x01\x01\x12\x14\n\x07\x63urrent\x18\x06 \x01(\x02H\x05\x88\x01\x01\x12\x10\n\x03iaq\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x08 \x01(\x02H\x07\x88\x01\x01\x12\x10\n\x03lux\x18\t \x01(\x02H\x08\x88\x01\x01\x12\x16\n\twhite_lux\x18\n \x01(\x02H\t\x88\x01\x01\x12\x13\n\x06ir_lux\x18\x0b \x01(\x02H\n\x88\x01\x01\x12\x13\n\x06uv_lux\x18\x0c \x01(\x02H\x0b\x88\x01\x01\x12\x1b\n\x0ewind_direction\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x17\n\nwind_speed\x18\x0e \x01(\x02H\r\x88\x01\x01\x12\x13\n\x06weight\x18\x0f \x01(\x02H\x0e\x88\x01\x01\x12\x16\n\twind_gust\x18\x10 \x01(\x02H\x0f\x88\x01\x01\x12\x16\n\twind_lull\x18\x11 \x01(\x02H\x10\x88\x01\x01\x12\x16\n\tradiation\x18\x12 \x01(\x02H\x11\x88\x01\x01\x12\x18\n\x0brainfall_1h\x18\x13 \x01(\x02H\x12\x88\x01\x01\x12\x19\n\x0crainfall_24h\x18\x14 \x01(\x02H\x13\x88\x01\x01\x12\x1a\n\rsoil_moisture\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x1d\n\x10soil_temperature\x18\x16 \x01(\x02H\x15\x88\x01\x01\x42\x0e\n\x0c_temperatureB\x14\n\x12_relative_humidityB\x16\n\x14_barometric_pressureB\x11\n\x0f_gas_resistanceB\n\n\x08_voltageB\n\n\x08_currentB\x06\n\x04_iaqB\x0b\n\t_distanceB\x06\n\x04_luxB\x0c\n\n_white_luxB\t\n\x07_ir_luxB\t\n\x07_uv_luxB\x11\n\x0f_wind_directionB\r\n\x0b_wind_speedB\t\n\x07_weightB\x0c\n\n_wind_gustB\x0c\n\n_wind_lullB\x0c\n\n_radiationB\x0e\n\x0c_rainfall_1hB\x0f\n\r_rainfall_24hB\x10\n\x0e_soil_moistureB\x13\n\x11_soil_temperature\"\xae\x05\n\x0cPowerMetrics\x12\x18\n\x0b\x63h1_voltage\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x18\n\x0b\x63h1_current\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12\x18\n\x0b\x63h2_voltage\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x18\n\x0b\x63h2_current\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x18\n\x0b\x63h3_voltage\x18\x05 \x01(\x02H\x04\x88\x01\x01\x12\x18\n\x0b\x63h3_current\x18\x06 \x01(\x02H\x05\x88\x01\x01\x12\x18\n\x0b\x63h4_voltage\x18\x07 \x01(\x02H\x06\x88\x01\x01\x12\x18\n\x0b\x63h4_current\x18\x08 \x01(\x02H\x07\x88\x01\x01\x12\x18\n\x0b\x63h5_voltage\x18\t \x01(\x02H\x08\x88\x01\x01\x12\x18\n\x0b\x63h5_current\x18\n \x01(\x02H\t\x88\x01\x01\x12\x18\n\x0b\x63h6_voltage\x18\x0b \x01(\x02H\n\x88\x01\x01\x12\x18\n\x0b\x63h6_current\x18\x0c \x01(\x02H\x0b\x88\x01\x01\x12\x18\n\x0b\x63h7_voltage\x18\r \x01(\x02H\x0c\x88\x01\x01\x12\x18\n\x0b\x63h7_current\x18\x0e \x01(\x02H\r\x88\x01\x01\x12\x18\n\x0b\x63h8_voltage\x18\x0f \x01(\x02H\x0e\x88\x01\x01\x12\x18\n\x0b\x63h8_current\x18\x10 \x01(\x02H\x0f\x88\x01\x01\x42\x0e\n\x0c_ch1_voltageB\x0e\n\x0c_ch1_currentB\x0e\n\x0c_ch2_voltageB\x0e\n\x0c_ch2_currentB\x0e\n\x0c_ch3_voltageB\x0e\n\x0c_ch3_currentB\x0e\n\x0c_ch4_voltageB\x0e\n\x0c_ch4_currentB\x0e\n\x0c_ch5_voltageB\x0e\n\x0c_ch5_currentB\x0e\n\x0c_ch6_voltageB\x0e\n\x0c_ch6_currentB\x0e\n\x0c_ch7_voltageB\x0e\n\x0c_ch7_currentB\x0e\n\x0c_ch8_voltageB\x0e\n\x0c_ch8_current\"\xb1\t\n\x11\x41irQualityMetrics\x12\x1a\n\rpm10_standard\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rpm25_standard\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0epm100_standard\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12pm10_environmental\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x1f\n\x12pm25_environmental\x18\x05 \x01(\rH\x04\x88\x01\x01\x12 \n\x13pm100_environmental\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1b\n\x0eparticles_03um\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x1b\n\x0eparticles_05um\x18\x08 \x01(\rH\x07\x88\x01\x01\x12\x1b\n\x0eparticles_10um\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1b\n\x0eparticles_25um\x18\n \x01(\rH\t\x88\x01\x01\x12\x1b\n\x0eparticles_50um\x18\x0b \x01(\rH\n\x88\x01\x01\x12\x1c\n\x0fparticles_100um\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x10\n\x03\x63o2\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x1c\n\x0f\x63o2_temperature\x18\x0e \x01(\x02H\r\x88\x01\x01\x12\x19\n\x0c\x63o2_humidity\x18\x0f \x01(\x02H\x0e\x88\x01\x01\x12\x1e\n\x11\x66orm_formaldehyde\x18\x10 \x01(\x02H\x0f\x88\x01\x01\x12\x1a\n\rform_humidity\x18\x11 \x01(\x02H\x10\x88\x01\x01\x12\x1d\n\x10\x66orm_temperature\x18\x12 \x01(\x02H\x11\x88\x01\x01\x12\x1a\n\rpm40_standard\x18\x13 \x01(\rH\x12\x88\x01\x01\x12\x1b\n\x0eparticles_40um\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x1b\n\x0epm_temperature\x18\x15 \x01(\x02H\x14\x88\x01\x01\x12\x18\n\x0bpm_humidity\x18\x16 \x01(\x02H\x15\x88\x01\x01\x12\x17\n\npm_voc_idx\x18\x17 \x01(\x02H\x16\x88\x01\x01\x12\x17\n\npm_nox_idx\x18\x18 \x01(\x02H\x17\x88\x01\x01\x12\x1a\n\rparticles_tps\x18\x19 \x01(\x02H\x18\x88\x01\x01\x42\x10\n\x0e_pm10_standardB\x10\n\x0e_pm25_standardB\x11\n\x0f_pm100_standardB\x15\n\x13_pm10_environmentalB\x15\n\x13_pm25_environmentalB\x16\n\x14_pm100_environmentalB\x11\n\x0f_particles_03umB\x11\n\x0f_particles_05umB\x11\n\x0f_particles_10umB\x11\n\x0f_particles_25umB\x11\n\x0f_particles_50umB\x12\n\x10_particles_100umB\x06\n\x04_co2B\x12\n\x10_co2_temperatureB\x0f\n\r_co2_humidityB\x14\n\x12_form_formaldehydeB\x10\n\x0e_form_humidityB\x13\n\x11_form_temperatureB\x10\n\x0e_pm40_standardB\x11\n\x0f_particles_40umB\x11\n\x0f_pm_temperatureB\x0e\n\x0c_pm_humidityB\r\n\x0b_pm_voc_idxB\r\n\x0b_pm_nox_idxB\x10\n\x0e_particles_tps\"\xea\x02\n\nLocalStats\x12\x16\n\x0euptime_seconds\x18\x01 \x01(\r\x12\x1b\n\x13\x63hannel_utilization\x18\x02 \x01(\x02\x12\x13\n\x0b\x61ir_util_tx\x18\x03 \x01(\x02\x12\x16\n\x0enum_packets_tx\x18\x04 \x01(\r\x12\x16\n\x0enum_packets_rx\x18\x05 \x01(\r\x12\x1a\n\x12num_packets_rx_bad\x18\x06 \x01(\r\x12\x18\n\x10num_online_nodes\x18\x07 \x01(\r\x12\x17\n\x0fnum_total_nodes\x18\x08 \x01(\r\x12\x13\n\x0bnum_rx_dupe\x18\t \x01(\r\x12\x14\n\x0cnum_tx_relay\x18\n \x01(\r\x12\x1d\n\x15num_tx_relay_canceled\x18\x0b \x01(\r\x12\x18\n\x10heap_total_bytes\x18\x0c \x01(\r\x12\x17\n\x0fheap_free_bytes\x18\r \x01(\r\x12\x16\n\x0enum_tx_dropped\x18\x0e \x01(\r\"{\n\rHealthMetrics\x12\x16\n\theart_bpm\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04spO2\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x03 \x01(\x02H\x02\x88\x01\x01\x42\x0c\n\n_heart_bpmB\x07\n\x05_spO2B\x0e\n\x0c_temperature\"\x91\x02\n\x0bHostMetrics\x12\x16\n\x0euptime_seconds\x18\x01 \x01(\r\x12\x15\n\rfreemem_bytes\x18\x02 \x01(\x04\x12\x17\n\x0f\x64iskfree1_bytes\x18\x03 \x01(\x04\x12\x1c\n\x0f\x64iskfree2_bytes\x18\x04 \x01(\x04H\x00\x88\x01\x01\x12\x1c\n\x0f\x64iskfree3_bytes\x18\x05 \x01(\x04H\x01\x88\x01\x01\x12\r\n\x05load1\x18\x06 \x01(\r\x12\r\n\x05load5\x18\x07 \x01(\r\x12\x0e\n\x06load15\x18\x08 \x01(\r\x12\x18\n\x0buser_string\x18\t \x01(\tH\x02\x88\x01\x01\x42\x12\n\x10_diskfree2_bytesB\x12\n\x10_diskfree3_bytesB\x0e\n\x0c_user_string\"\xdd\x03\n\tTelemetry\x12\x0c\n\x04time\x18\x01 \x01(\x07\x12<\n\x0e\x64\x65vice_metrics\x18\x02 \x01(\x0b\x32\".meshtastic.protobuf.DeviceMetricsH\x00\x12\x46\n\x13\x65nvironment_metrics\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.EnvironmentMetricsH\x00\x12\x45\n\x13\x61ir_quality_metrics\x18\x04 \x01(\x0b\x32&.meshtastic.protobuf.AirQualityMetricsH\x00\x12:\n\rpower_metrics\x18\x05 \x01(\x0b\x32!.meshtastic.protobuf.PowerMetricsH\x00\x12\x36\n\x0blocal_stats\x18\x06 \x01(\x0b\x32\x1f.meshtastic.protobuf.LocalStatsH\x00\x12<\n\x0ehealth_metrics\x18\x07 \x01(\x0b\x32\".meshtastic.protobuf.HealthMetricsH\x00\x12\x38\n\x0chost_metrics\x18\x08 \x01(\x0b\x32 .meshtastic.protobuf.HostMetricsH\x00\x42\t\n\x07variant\">\n\rNau7802Config\x12\x12\n\nzeroOffset\x18\x01 \x01(\x05\x12\x19\n\x11\x63\x61librationFactor\x18\x02 \x01(\x02*\xf9\x04\n\x13TelemetrySensorType\x12\x10\n\x0cSENSOR_UNSET\x10\x00\x12\n\n\x06\x42ME280\x10\x01\x12\n\n\x06\x42ME680\x10\x02\x12\x0b\n\x07MCP9808\x10\x03\x12\n\n\x06INA260\x10\x04\x12\n\n\x06INA219\x10\x05\x12\n\n\x06\x42MP280\x10\x06\x12\t\n\x05SHTC3\x10\x07\x12\t\n\x05LPS22\x10\x08\x12\x0b\n\x07QMC6310\x10\t\x12\x0b\n\x07QMI8658\x10\n\x12\x0c\n\x08QMC5883L\x10\x0b\x12\t\n\x05SHT31\x10\x0c\x12\x0c\n\x08PMSA003I\x10\r\x12\x0b\n\x07INA3221\x10\x0e\x12\n\n\x06\x42MP085\x10\x0f\x12\x0c\n\x08RCWL9620\x10\x10\x12\t\n\x05SHT4X\x10\x11\x12\x0c\n\x08VEML7700\x10\x12\x12\x0c\n\x08MLX90632\x10\x13\x12\x0b\n\x07OPT3001\x10\x14\x12\x0c\n\x08LTR390UV\x10\x15\x12\x0e\n\nTSL25911FN\x10\x16\x12\t\n\x05\x41HT10\x10\x17\x12\x10\n\x0c\x44\x46ROBOT_LARK\x10\x18\x12\x0b\n\x07NAU7802\x10\x19\x12\n\n\x06\x42MP3XX\x10\x1a\x12\x0c\n\x08ICM20948\x10\x1b\x12\x0c\n\x08MAX17048\x10\x1c\x12\x11\n\rCUSTOM_SENSOR\x10\x1d\x12\x0c\n\x08MAX30102\x10\x1e\x12\x0c\n\x08MLX90614\x10\x1f\x12\t\n\x05SCD4X\x10 \x12\x0b\n\x07RADSENS\x10!\x12\n\n\x06INA226\x10\"\x12\x10\n\x0c\x44\x46ROBOT_RAIN\x10#\x12\n\n\x06\x44PS310\x10$\x12\x0c\n\x08RAK12035\x10%\x12\x0c\n\x08MAX17261\x10&\x12\x0b\n\x07PCT2075\x10\'\x12\x0b\n\x07\x41\x44S1X15\x10(\x12\x0f\n\x0b\x41\x44S1X15_ALT\x10)\x12\t\n\x05SFA30\x10*\x12\t\n\x05SEN5X\x10+\x12\x0b\n\x07TSL2561\x10,\x12\n\n\x06\x42H1750\x10-Be\n\x14org.meshtastic.protoB\x0fTelemetryProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#meshtastic/protobuf/telemetry.proto\x12\x13meshtastic.protobuf\"\xf3\x01\n\rDeviceMetrics\x12\x1a\n\rbattery_level\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x14\n\x07voltage\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12 \n\x13\x63hannel_utilization\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x18\n\x0b\x61ir_util_tx\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x1b\n\x0euptime_seconds\x18\x05 \x01(\rH\x04\x88\x01\x01\x42\x10\n\x0e_battery_levelB\n\n\x08_voltageB\x16\n\x14_channel_utilizationB\x0e\n\x0c_air_util_txB\x11\n\x0f_uptime_seconds\"\xa0\x07\n\x12\x45nvironmentMetrics\x12\x18\n\x0btemperature\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x1e\n\x11relative_humidity\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12 \n\x13\x62\x61rometric_pressure\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x1b\n\x0egas_resistance\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x14\n\x07voltage\x18\x05 \x01(\x02H\x04\x88\x01\x01\x12\x14\n\x07\x63urrent\x18\x06 \x01(\x02H\x05\x88\x01\x01\x12\x10\n\x03iaq\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x15\n\x08\x64istance\x18\x08 \x01(\x02H\x07\x88\x01\x01\x12\x10\n\x03lux\x18\t \x01(\x02H\x08\x88\x01\x01\x12\x16\n\twhite_lux\x18\n \x01(\x02H\t\x88\x01\x01\x12\x13\n\x06ir_lux\x18\x0b \x01(\x02H\n\x88\x01\x01\x12\x13\n\x06uv_lux\x18\x0c \x01(\x02H\x0b\x88\x01\x01\x12\x1b\n\x0ewind_direction\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x17\n\nwind_speed\x18\x0e \x01(\x02H\r\x88\x01\x01\x12\x13\n\x06weight\x18\x0f \x01(\x02H\x0e\x88\x01\x01\x12\x16\n\twind_gust\x18\x10 \x01(\x02H\x0f\x88\x01\x01\x12\x16\n\twind_lull\x18\x11 \x01(\x02H\x10\x88\x01\x01\x12\x16\n\tradiation\x18\x12 \x01(\x02H\x11\x88\x01\x01\x12\x18\n\x0brainfall_1h\x18\x13 \x01(\x02H\x12\x88\x01\x01\x12\x19\n\x0crainfall_24h\x18\x14 \x01(\x02H\x13\x88\x01\x01\x12\x1a\n\rsoil_moisture\x18\x15 \x01(\rH\x14\x88\x01\x01\x12\x1d\n\x10soil_temperature\x18\x16 \x01(\x02H\x15\x88\x01\x01\x12\x1c\n\x14one_wire_temperature\x18\x17 \x03(\x02\x42\x0e\n\x0c_temperatureB\x14\n\x12_relative_humidityB\x16\n\x14_barometric_pressureB\x11\n\x0f_gas_resistanceB\n\n\x08_voltageB\n\n\x08_currentB\x06\n\x04_iaqB\x0b\n\t_distanceB\x06\n\x04_luxB\x0c\n\n_white_luxB\t\n\x07_ir_luxB\t\n\x07_uv_luxB\x11\n\x0f_wind_directionB\r\n\x0b_wind_speedB\t\n\x07_weightB\x0c\n\n_wind_gustB\x0c\n\n_wind_lullB\x0c\n\n_radiationB\x0e\n\x0c_rainfall_1hB\x0f\n\r_rainfall_24hB\x10\n\x0e_soil_moistureB\x13\n\x11_soil_temperature\"\xae\x05\n\x0cPowerMetrics\x12\x18\n\x0b\x63h1_voltage\x18\x01 \x01(\x02H\x00\x88\x01\x01\x12\x18\n\x0b\x63h1_current\x18\x02 \x01(\x02H\x01\x88\x01\x01\x12\x18\n\x0b\x63h2_voltage\x18\x03 \x01(\x02H\x02\x88\x01\x01\x12\x18\n\x0b\x63h2_current\x18\x04 \x01(\x02H\x03\x88\x01\x01\x12\x18\n\x0b\x63h3_voltage\x18\x05 \x01(\x02H\x04\x88\x01\x01\x12\x18\n\x0b\x63h3_current\x18\x06 \x01(\x02H\x05\x88\x01\x01\x12\x18\n\x0b\x63h4_voltage\x18\x07 \x01(\x02H\x06\x88\x01\x01\x12\x18\n\x0b\x63h4_current\x18\x08 \x01(\x02H\x07\x88\x01\x01\x12\x18\n\x0b\x63h5_voltage\x18\t \x01(\x02H\x08\x88\x01\x01\x12\x18\n\x0b\x63h5_current\x18\n \x01(\x02H\t\x88\x01\x01\x12\x18\n\x0b\x63h6_voltage\x18\x0b \x01(\x02H\n\x88\x01\x01\x12\x18\n\x0b\x63h6_current\x18\x0c \x01(\x02H\x0b\x88\x01\x01\x12\x18\n\x0b\x63h7_voltage\x18\r \x01(\x02H\x0c\x88\x01\x01\x12\x18\n\x0b\x63h7_current\x18\x0e \x01(\x02H\r\x88\x01\x01\x12\x18\n\x0b\x63h8_voltage\x18\x0f \x01(\x02H\x0e\x88\x01\x01\x12\x18\n\x0b\x63h8_current\x18\x10 \x01(\x02H\x0f\x88\x01\x01\x42\x0e\n\x0c_ch1_voltageB\x0e\n\x0c_ch1_currentB\x0e\n\x0c_ch2_voltageB\x0e\n\x0c_ch2_currentB\x0e\n\x0c_ch3_voltageB\x0e\n\x0c_ch3_currentB\x0e\n\x0c_ch4_voltageB\x0e\n\x0c_ch4_currentB\x0e\n\x0c_ch5_voltageB\x0e\n\x0c_ch5_currentB\x0e\n\x0c_ch6_voltageB\x0e\n\x0c_ch6_currentB\x0e\n\x0c_ch7_voltageB\x0e\n\x0c_ch7_currentB\x0e\n\x0c_ch8_voltageB\x0e\n\x0c_ch8_current\"\xb1\t\n\x11\x41irQualityMetrics\x12\x1a\n\rpm10_standard\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rpm25_standard\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x1b\n\x0epm100_standard\x18\x03 \x01(\rH\x02\x88\x01\x01\x12\x1f\n\x12pm10_environmental\x18\x04 \x01(\rH\x03\x88\x01\x01\x12\x1f\n\x12pm25_environmental\x18\x05 \x01(\rH\x04\x88\x01\x01\x12 \n\x13pm100_environmental\x18\x06 \x01(\rH\x05\x88\x01\x01\x12\x1b\n\x0eparticles_03um\x18\x07 \x01(\rH\x06\x88\x01\x01\x12\x1b\n\x0eparticles_05um\x18\x08 \x01(\rH\x07\x88\x01\x01\x12\x1b\n\x0eparticles_10um\x18\t \x01(\rH\x08\x88\x01\x01\x12\x1b\n\x0eparticles_25um\x18\n \x01(\rH\t\x88\x01\x01\x12\x1b\n\x0eparticles_50um\x18\x0b \x01(\rH\n\x88\x01\x01\x12\x1c\n\x0fparticles_100um\x18\x0c \x01(\rH\x0b\x88\x01\x01\x12\x10\n\x03\x63o2\x18\r \x01(\rH\x0c\x88\x01\x01\x12\x1c\n\x0f\x63o2_temperature\x18\x0e \x01(\x02H\r\x88\x01\x01\x12\x19\n\x0c\x63o2_humidity\x18\x0f \x01(\x02H\x0e\x88\x01\x01\x12\x1e\n\x11\x66orm_formaldehyde\x18\x10 \x01(\x02H\x0f\x88\x01\x01\x12\x1a\n\rform_humidity\x18\x11 \x01(\x02H\x10\x88\x01\x01\x12\x1d\n\x10\x66orm_temperature\x18\x12 \x01(\x02H\x11\x88\x01\x01\x12\x1a\n\rpm40_standard\x18\x13 \x01(\rH\x12\x88\x01\x01\x12\x1b\n\x0eparticles_40um\x18\x14 \x01(\rH\x13\x88\x01\x01\x12\x1b\n\x0epm_temperature\x18\x15 \x01(\x02H\x14\x88\x01\x01\x12\x18\n\x0bpm_humidity\x18\x16 \x01(\x02H\x15\x88\x01\x01\x12\x17\n\npm_voc_idx\x18\x17 \x01(\x02H\x16\x88\x01\x01\x12\x17\n\npm_nox_idx\x18\x18 \x01(\x02H\x17\x88\x01\x01\x12\x1a\n\rparticles_tps\x18\x19 \x01(\x02H\x18\x88\x01\x01\x42\x10\n\x0e_pm10_standardB\x10\n\x0e_pm25_standardB\x11\n\x0f_pm100_standardB\x15\n\x13_pm10_environmentalB\x15\n\x13_pm25_environmentalB\x16\n\x14_pm100_environmentalB\x11\n\x0f_particles_03umB\x11\n\x0f_particles_05umB\x11\n\x0f_particles_10umB\x11\n\x0f_particles_25umB\x11\n\x0f_particles_50umB\x12\n\x10_particles_100umB\x06\n\x04_co2B\x12\n\x10_co2_temperatureB\x0f\n\r_co2_humidityB\x14\n\x12_form_formaldehydeB\x10\n\x0e_form_humidityB\x13\n\x11_form_temperatureB\x10\n\x0e_pm40_standardB\x11\n\x0f_particles_40umB\x11\n\x0f_pm_temperatureB\x0e\n\x0c_pm_humidityB\r\n\x0b_pm_voc_idxB\r\n\x0b_pm_nox_idxB\x10\n\x0e_particles_tps\"\xff\x02\n\nLocalStats\x12\x16\n\x0euptime_seconds\x18\x01 \x01(\r\x12\x1b\n\x13\x63hannel_utilization\x18\x02 \x01(\x02\x12\x13\n\x0b\x61ir_util_tx\x18\x03 \x01(\x02\x12\x16\n\x0enum_packets_tx\x18\x04 \x01(\r\x12\x16\n\x0enum_packets_rx\x18\x05 \x01(\r\x12\x1a\n\x12num_packets_rx_bad\x18\x06 \x01(\r\x12\x18\n\x10num_online_nodes\x18\x07 \x01(\r\x12\x17\n\x0fnum_total_nodes\x18\x08 \x01(\r\x12\x13\n\x0bnum_rx_dupe\x18\t \x01(\r\x12\x14\n\x0cnum_tx_relay\x18\n \x01(\r\x12\x1d\n\x15num_tx_relay_canceled\x18\x0b \x01(\r\x12\x18\n\x10heap_total_bytes\x18\x0c \x01(\r\x12\x17\n\x0fheap_free_bytes\x18\r \x01(\r\x12\x16\n\x0enum_tx_dropped\x18\x0e \x01(\r\x12\x13\n\x0bnoise_floor\x18\x0f \x01(\x05\"\xe4\x01\n\x16TrafficManagementStats\x12\x19\n\x11packets_inspected\x18\x01 \x01(\r\x12\x1c\n\x14position_dedup_drops\x18\x02 \x01(\r\x12\x1b\n\x13nodeinfo_cache_hits\x18\x03 \x01(\r\x12\x18\n\x10rate_limit_drops\x18\x04 \x01(\r\x12\x1c\n\x14unknown_packet_drops\x18\x05 \x01(\r\x12\x1d\n\x15hop_exhausted_packets\x18\x06 \x01(\r\x12\x1d\n\x15router_hops_preserved\x18\x07 \x01(\r\"{\n\rHealthMetrics\x12\x16\n\theart_bpm\x18\x01 \x01(\rH\x00\x88\x01\x01\x12\x11\n\x04spO2\x18\x02 \x01(\rH\x01\x88\x01\x01\x12\x18\n\x0btemperature\x18\x03 \x01(\x02H\x02\x88\x01\x01\x42\x0c\n\n_heart_bpmB\x07\n\x05_spO2B\x0e\n\x0c_temperature\"\x91\x02\n\x0bHostMetrics\x12\x16\n\x0euptime_seconds\x18\x01 \x01(\r\x12\x15\n\rfreemem_bytes\x18\x02 \x01(\x04\x12\x17\n\x0f\x64iskfree1_bytes\x18\x03 \x01(\x04\x12\x1c\n\x0f\x64iskfree2_bytes\x18\x04 \x01(\x04H\x00\x88\x01\x01\x12\x1c\n\x0f\x64iskfree3_bytes\x18\x05 \x01(\x04H\x01\x88\x01\x01\x12\r\n\x05load1\x18\x06 \x01(\r\x12\r\n\x05load5\x18\x07 \x01(\r\x12\x0e\n\x06load15\x18\x08 \x01(\r\x12\x18\n\x0buser_string\x18\t \x01(\tH\x02\x88\x01\x01\x42\x12\n\x10_diskfree2_bytesB\x12\n\x10_diskfree3_bytesB\x0e\n\x0c_user_string\"\xae\x04\n\tTelemetry\x12\x0c\n\x04time\x18\x01 \x01(\x07\x12<\n\x0e\x64\x65vice_metrics\x18\x02 \x01(\x0b\x32\".meshtastic.protobuf.DeviceMetricsH\x00\x12\x46\n\x13\x65nvironment_metrics\x18\x03 \x01(\x0b\x32\'.meshtastic.protobuf.EnvironmentMetricsH\x00\x12\x45\n\x13\x61ir_quality_metrics\x18\x04 \x01(\x0b\x32&.meshtastic.protobuf.AirQualityMetricsH\x00\x12:\n\rpower_metrics\x18\x05 \x01(\x0b\x32!.meshtastic.protobuf.PowerMetricsH\x00\x12\x36\n\x0blocal_stats\x18\x06 \x01(\x0b\x32\x1f.meshtastic.protobuf.LocalStatsH\x00\x12<\n\x0ehealth_metrics\x18\x07 \x01(\x0b\x32\".meshtastic.protobuf.HealthMetricsH\x00\x12\x38\n\x0chost_metrics\x18\x08 \x01(\x0b\x32 .meshtastic.protobuf.HostMetricsH\x00\x12O\n\x18traffic_management_stats\x18\t \x01(\x0b\x32+.meshtastic.protobuf.TrafficManagementStatsH\x00\x42\t\n\x07variant\">\n\rNau7802Config\x12\x12\n\nzeroOffset\x18\x01 \x01(\x05\x12\x19\n\x11\x63\x61librationFactor\x18\x02 \x01(\x02\"\xf0\x01\n\nSEN5XState\x12\x1a\n\x12last_cleaning_time\x18\x01 \x01(\r\x12\x1b\n\x13last_cleaning_valid\x18\x02 \x01(\x08\x12\x15\n\rone_shot_mode\x18\x03 \x01(\x08\x12\x1b\n\x0evoc_state_time\x18\x04 \x01(\rH\x00\x88\x01\x01\x12\x1c\n\x0fvoc_state_valid\x18\x05 \x01(\x08H\x01\x88\x01\x01\x12\x1c\n\x0fvoc_state_array\x18\x06 \x01(\x06H\x02\x88\x01\x01\x42\x11\n\x0f_voc_state_timeB\x12\n\x10_voc_state_validB\x12\n\x10_voc_state_array*\xdc\x05\n\x13TelemetrySensorType\x12\x10\n\x0cSENSOR_UNSET\x10\x00\x12\n\n\x06\x42ME280\x10\x01\x12\n\n\x06\x42ME680\x10\x02\x12\x0b\n\x07MCP9808\x10\x03\x12\n\n\x06INA260\x10\x04\x12\n\n\x06INA219\x10\x05\x12\n\n\x06\x42MP280\x10\x06\x12\t\n\x05SHTC3\x10\x07\x12\t\n\x05LPS22\x10\x08\x12\x0b\n\x07QMC6310\x10\t\x12\x0b\n\x07QMI8658\x10\n\x12\x0c\n\x08QMC5883L\x10\x0b\x12\t\n\x05SHT31\x10\x0c\x12\x0c\n\x08PMSA003I\x10\r\x12\x0b\n\x07INA3221\x10\x0e\x12\n\n\x06\x42MP085\x10\x0f\x12\x0c\n\x08RCWL9620\x10\x10\x12\t\n\x05SHT4X\x10\x11\x12\x0c\n\x08VEML7700\x10\x12\x12\x0c\n\x08MLX90632\x10\x13\x12\x0b\n\x07OPT3001\x10\x14\x12\x0c\n\x08LTR390UV\x10\x15\x12\x0e\n\nTSL25911FN\x10\x16\x12\t\n\x05\x41HT10\x10\x17\x12\x10\n\x0c\x44\x46ROBOT_LARK\x10\x18\x12\x0b\n\x07NAU7802\x10\x19\x12\n\n\x06\x42MP3XX\x10\x1a\x12\x0c\n\x08ICM20948\x10\x1b\x12\x0c\n\x08MAX17048\x10\x1c\x12\x11\n\rCUSTOM_SENSOR\x10\x1d\x12\x0c\n\x08MAX30102\x10\x1e\x12\x0c\n\x08MLX90614\x10\x1f\x12\t\n\x05SCD4X\x10 \x12\x0b\n\x07RADSENS\x10!\x12\n\n\x06INA226\x10\"\x12\x10\n\x0c\x44\x46ROBOT_RAIN\x10#\x12\n\n\x06\x44PS310\x10$\x12\x0c\n\x08RAK12035\x10%\x12\x0c\n\x08MAX17261\x10&\x12\x0b\n\x07PCT2075\x10\'\x12\x0b\n\x07\x41\x44S1X15\x10(\x12\x0f\n\x0b\x41\x44S1X15_ALT\x10)\x12\t\n\x05SFA30\x10*\x12\t\n\x05SEN5X\x10+\x12\x0b\n\x07TSL2561\x10,\x12\n\n\x06\x42H1750\x10-\x12\x0b\n\x07HDC1080\x10.\x12\t\n\x05SHT21\x10/\x12\t\n\x05STC31\x10\x30\x12\t\n\x05SCD30\x10\x31\x12\t\n\x05SHTXX\x10\x32\x12\n\n\x06\x44S248X\x10\x33\x12\r\n\tMMC5983MA\x10\x34\x12\r\n\tICM42607P\x10\x35\x42\x65\n\x14org.meshtastic.protoB\x0fTelemetryProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.telemetry_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.telemetry_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\017TelemetryProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_TELEMETRYSENSORTYPE']._serialized_start=4411
- _globals['_TELEMETRYSENSORTYPE']._serialized_end=5044
- _globals['_DEVICEMETRICS']._serialized_start=61
- _globals['_DEVICEMETRICS']._serialized_end=304
- _globals['_ENVIRONMENTMETRICS']._serialized_start=307
- _globals['_ENVIRONMENTMETRICS']._serialized_end=1205
- _globals['_POWERMETRICS']._serialized_start=1208
- _globals['_POWERMETRICS']._serialized_end=1894
- _globals['_AIRQUALITYMETRICS']._serialized_start=1897
- _globals['_AIRQUALITYMETRICS']._serialized_end=3098
- _globals['_LOCALSTATS']._serialized_start=3101
- _globals['_LOCALSTATS']._serialized_end=3463
- _globals['_HEALTHMETRICS']._serialized_start=3465
- _globals['_HEALTHMETRICS']._serialized_end=3588
- _globals['_HOSTMETRICS']._serialized_start=3591
- _globals['_HOSTMETRICS']._serialized_end=3864
- _globals['_TELEMETRY']._serialized_start=3867
- _globals['_TELEMETRY']._serialized_end=4344
- _globals['_NAU7802CONFIG']._serialized_start=4346
- _globals['_NAU7802CONFIG']._serialized_end=4408
+ _TELEMETRYSENSORTYPE._serialized_start=5017
+ _TELEMETRYSENSORTYPE._serialized_end=5749
+ _DEVICEMETRICS._serialized_start=61
+ _DEVICEMETRICS._serialized_end=304
+ _ENVIRONMENTMETRICS._serialized_start=307
+ _ENVIRONMENTMETRICS._serialized_end=1235
+ _POWERMETRICS._serialized_start=1238
+ _POWERMETRICS._serialized_end=1924
+ _AIRQUALITYMETRICS._serialized_start=1927
+ _AIRQUALITYMETRICS._serialized_end=3128
+ _LOCALSTATS._serialized_start=3131
+ _LOCALSTATS._serialized_end=3514
+ _TRAFFICMANAGEMENTSTATS._serialized_start=3517
+ _TRAFFICMANAGEMENTSTATS._serialized_end=3745
+ _HEALTHMETRICS._serialized_start=3747
+ _HEALTHMETRICS._serialized_end=3870
+ _HOSTMETRICS._serialized_start=3873
+ _HOSTMETRICS._serialized_end=4146
+ _TELEMETRY._serialized_start=4149
+ _TELEMETRY._serialized_end=4707
+ _NAU7802CONFIG._serialized_start=4709
+ _NAU7802CONFIG._serialized_end=4771
+ _SEN5XSTATE._serialized_start=4774
+ _SEN5XSTATE._serialized_end=5014
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/telemetry_pb2.pyi b/meshtastic/protobuf/telemetry_pb2.pyi
index 3e3c406..f8d88d9 100644
--- a/meshtastic/protobuf/telemetry_pb2.pyi
+++ b/meshtastic/protobuf/telemetry_pb2.pyi
@@ -1,1343 +1,348 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+ADS1X15: TelemetrySensorType
+ADS1X15_ALT: TelemetrySensorType
+AHT10: TelemetrySensorType
+BH1750: TelemetrySensorType
+BME280: TelemetrySensorType
+BME680: TelemetrySensorType
+BMP085: TelemetrySensorType
+BMP280: TelemetrySensorType
+BMP3XX: TelemetrySensorType
+CUSTOM_SENSOR: TelemetrySensorType
+DESCRIPTOR: _descriptor.FileDescriptor
+DFROBOT_LARK: TelemetrySensorType
+DFROBOT_RAIN: TelemetrySensorType
+DPS310: TelemetrySensorType
+DS248X: TelemetrySensorType
+HDC1080: TelemetrySensorType
+ICM20948: TelemetrySensorType
+ICM42607P: TelemetrySensorType
+INA219: TelemetrySensorType
+INA226: TelemetrySensorType
+INA260: TelemetrySensorType
+INA3221: TelemetrySensorType
+LPS22: TelemetrySensorType
+LTR390UV: TelemetrySensorType
+MAX17048: TelemetrySensorType
+MAX17261: TelemetrySensorType
+MAX30102: TelemetrySensorType
+MCP9808: TelemetrySensorType
+MLX90614: TelemetrySensorType
+MLX90632: TelemetrySensorType
+MMC5983MA: TelemetrySensorType
+NAU7802: TelemetrySensorType
+OPT3001: TelemetrySensorType
+PCT2075: TelemetrySensorType
+PMSA003I: TelemetrySensorType
+QMC5883L: TelemetrySensorType
+QMC6310: TelemetrySensorType
+QMI8658: TelemetrySensorType
+RADSENS: TelemetrySensorType
+RAK12035: TelemetrySensorType
+RCWL9620: TelemetrySensorType
+SCD30: TelemetrySensorType
+SCD4X: TelemetrySensorType
+SEN5X: TelemetrySensorType
+SENSOR_UNSET: TelemetrySensorType
+SFA30: TelemetrySensorType
+SHT21: TelemetrySensorType
+SHT31: TelemetrySensorType
+SHT4X: TelemetrySensorType
+SHTC3: TelemetrySensorType
+SHTXX: TelemetrySensorType
+STC31: TelemetrySensorType
+TSL2561: TelemetrySensorType
+TSL25911FN: TelemetrySensorType
+VEML7700: TelemetrySensorType
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
+class AirQualityMetrics(_message.Message):
+ __slots__ = ["co2", "co2_humidity", "co2_temperature", "form_formaldehyde", "form_humidity", "form_temperature", "particles_03um", "particles_05um", "particles_100um", "particles_10um", "particles_25um", "particles_40um", "particles_50um", "particles_tps", "pm100_environmental", "pm100_standard", "pm10_environmental", "pm10_standard", "pm25_environmental", "pm25_standard", "pm40_standard", "pm_humidity", "pm_nox_idx", "pm_temperature", "pm_voc_idx"]
+ CO2_FIELD_NUMBER: _ClassVar[int]
+ CO2_HUMIDITY_FIELD_NUMBER: _ClassVar[int]
+ CO2_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ FORM_FORMALDEHYDE_FIELD_NUMBER: _ClassVar[int]
+ FORM_HUMIDITY_FIELD_NUMBER: _ClassVar[int]
+ FORM_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_03UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_05UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_100UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_10UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_25UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_40UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_50UM_FIELD_NUMBER: _ClassVar[int]
+ PARTICLES_TPS_FIELD_NUMBER: _ClassVar[int]
+ PM100_ENVIRONMENTAL_FIELD_NUMBER: _ClassVar[int]
+ PM100_STANDARD_FIELD_NUMBER: _ClassVar[int]
+ PM10_ENVIRONMENTAL_FIELD_NUMBER: _ClassVar[int]
+ PM10_STANDARD_FIELD_NUMBER: _ClassVar[int]
+ PM25_ENVIRONMENTAL_FIELD_NUMBER: _ClassVar[int]
+ PM25_STANDARD_FIELD_NUMBER: _ClassVar[int]
+ PM40_STANDARD_FIELD_NUMBER: _ClassVar[int]
+ PM_HUMIDITY_FIELD_NUMBER: _ClassVar[int]
+ PM_NOX_IDX_FIELD_NUMBER: _ClassVar[int]
+ PM_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ PM_VOC_IDX_FIELD_NUMBER: _ClassVar[int]
+ co2: int
+ co2_humidity: float
+ co2_temperature: float
+ form_formaldehyde: float
+ form_humidity: float
+ form_temperature: float
+ particles_03um: int
+ particles_05um: int
+ particles_100um: int
+ particles_10um: int
+ particles_25um: int
+ particles_40um: int
+ particles_50um: int
+ particles_tps: float
+ pm100_environmental: int
+ pm100_standard: int
+ pm10_environmental: int
+ pm10_standard: int
+ pm25_environmental: int
+ pm25_standard: int
+ pm40_standard: int
+ pm_humidity: float
+ pm_nox_idx: float
+ pm_temperature: float
+ pm_voc_idx: float
+ def __init__(self, pm10_standard: _Optional[int] = ..., pm25_standard: _Optional[int] = ..., pm100_standard: _Optional[int] = ..., pm10_environmental: _Optional[int] = ..., pm25_environmental: _Optional[int] = ..., pm100_environmental: _Optional[int] = ..., particles_03um: _Optional[int] = ..., particles_05um: _Optional[int] = ..., particles_10um: _Optional[int] = ..., particles_25um: _Optional[int] = ..., particles_50um: _Optional[int] = ..., particles_100um: _Optional[int] = ..., co2: _Optional[int] = ..., co2_temperature: _Optional[float] = ..., co2_humidity: _Optional[float] = ..., form_formaldehyde: _Optional[float] = ..., form_humidity: _Optional[float] = ..., form_temperature: _Optional[float] = ..., pm40_standard: _Optional[int] = ..., particles_40um: _Optional[int] = ..., pm_temperature: _Optional[float] = ..., pm_humidity: _Optional[float] = ..., pm_voc_idx: _Optional[float] = ..., pm_nox_idx: _Optional[float] = ..., particles_tps: _Optional[float] = ...) -> None: ...
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
+class DeviceMetrics(_message.Message):
+ __slots__ = ["air_util_tx", "battery_level", "channel_utilization", "uptime_seconds", "voltage"]
+ AIR_UTIL_TX_FIELD_NUMBER: _ClassVar[int]
+ BATTERY_LEVEL_FIELD_NUMBER: _ClassVar[int]
+ CHANNEL_UTILIZATION_FIELD_NUMBER: _ClassVar[int]
+ UPTIME_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ air_util_tx: float
+ battery_level: int
+ channel_utilization: float
+ uptime_seconds: int
+ voltage: float
+ def __init__(self, battery_level: _Optional[int] = ..., voltage: _Optional[float] = ..., channel_utilization: _Optional[float] = ..., air_util_tx: _Optional[float] = ..., uptime_seconds: _Optional[int] = ...) -> None: ...
-class _TelemetrySensorType:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
+class EnvironmentMetrics(_message.Message):
+ __slots__ = ["barometric_pressure", "current", "distance", "gas_resistance", "iaq", "ir_lux", "lux", "one_wire_temperature", "radiation", "rainfall_1h", "rainfall_24h", "relative_humidity", "soil_moisture", "soil_temperature", "temperature", "uv_lux", "voltage", "weight", "white_lux", "wind_direction", "wind_gust", "wind_lull", "wind_speed"]
+ BAROMETRIC_PRESSURE_FIELD_NUMBER: _ClassVar[int]
+ CURRENT_FIELD_NUMBER: _ClassVar[int]
+ DISTANCE_FIELD_NUMBER: _ClassVar[int]
+ GAS_RESISTANCE_FIELD_NUMBER: _ClassVar[int]
+ IAQ_FIELD_NUMBER: _ClassVar[int]
+ IR_LUX_FIELD_NUMBER: _ClassVar[int]
+ LUX_FIELD_NUMBER: _ClassVar[int]
+ ONE_WIRE_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ RADIATION_FIELD_NUMBER: _ClassVar[int]
+ RAINFALL_1H_FIELD_NUMBER: _ClassVar[int]
+ RAINFALL_24H_FIELD_NUMBER: _ClassVar[int]
+ RELATIVE_HUMIDITY_FIELD_NUMBER: _ClassVar[int]
+ SOIL_MOISTURE_FIELD_NUMBER: _ClassVar[int]
+ SOIL_TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ UV_LUX_FIELD_NUMBER: _ClassVar[int]
+ VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ WEIGHT_FIELD_NUMBER: _ClassVar[int]
+ WHITE_LUX_FIELD_NUMBER: _ClassVar[int]
+ WIND_DIRECTION_FIELD_NUMBER: _ClassVar[int]
+ WIND_GUST_FIELD_NUMBER: _ClassVar[int]
+ WIND_LULL_FIELD_NUMBER: _ClassVar[int]
+ WIND_SPEED_FIELD_NUMBER: _ClassVar[int]
+ barometric_pressure: float
+ current: float
+ distance: float
+ gas_resistance: float
+ iaq: int
+ ir_lux: float
+ lux: float
+ one_wire_temperature: _containers.RepeatedScalarFieldContainer[float]
+ radiation: float
+ rainfall_1h: float
+ rainfall_24h: float
+ relative_humidity: float
+ soil_moisture: int
+ soil_temperature: float
+ temperature: float
+ uv_lux: float
+ voltage: float
+ weight: float
+ white_lux: float
+ wind_direction: int
+ wind_gust: float
+ wind_lull: float
+ wind_speed: float
+ def __init__(self, temperature: _Optional[float] = ..., relative_humidity: _Optional[float] = ..., barometric_pressure: _Optional[float] = ..., gas_resistance: _Optional[float] = ..., voltage: _Optional[float] = ..., current: _Optional[float] = ..., iaq: _Optional[int] = ..., distance: _Optional[float] = ..., lux: _Optional[float] = ..., white_lux: _Optional[float] = ..., ir_lux: _Optional[float] = ..., uv_lux: _Optional[float] = ..., wind_direction: _Optional[int] = ..., wind_speed: _Optional[float] = ..., weight: _Optional[float] = ..., wind_gust: _Optional[float] = ..., wind_lull: _Optional[float] = ..., radiation: _Optional[float] = ..., rainfall_1h: _Optional[float] = ..., rainfall_24h: _Optional[float] = ..., soil_moisture: _Optional[int] = ..., soil_temperature: _Optional[float] = ..., one_wire_temperature: _Optional[_Iterable[float]] = ...) -> None: ...
-class _TelemetrySensorTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_TelemetrySensorType.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- SENSOR_UNSET: _TelemetrySensorType.ValueType # 0
- """
- No external telemetry sensor explicitly set
- """
- BME280: _TelemetrySensorType.ValueType # 1
- """
- High accuracy temperature, pressure, humidity
- """
- BME680: _TelemetrySensorType.ValueType # 2
- """
- High accuracy temperature, pressure, humidity, and air resistance
- """
- MCP9808: _TelemetrySensorType.ValueType # 3
- """
- Very high accuracy temperature
- """
- INA260: _TelemetrySensorType.ValueType # 4
- """
- Moderate accuracy current and voltage
- """
- INA219: _TelemetrySensorType.ValueType # 5
- """
- Moderate accuracy current and voltage
- """
- BMP280: _TelemetrySensorType.ValueType # 6
- """
- High accuracy temperature and pressure
- """
- SHTC3: _TelemetrySensorType.ValueType # 7
- """
- High accuracy temperature and humidity
- """
- LPS22: _TelemetrySensorType.ValueType # 8
- """
- High accuracy pressure
- """
- QMC6310: _TelemetrySensorType.ValueType # 9
- """
- 3-Axis magnetic sensor
- """
- QMI8658: _TelemetrySensorType.ValueType # 10
- """
- 6-Axis inertial measurement sensor
- """
- QMC5883L: _TelemetrySensorType.ValueType # 11
- """
- 3-Axis magnetic sensor
- """
- SHT31: _TelemetrySensorType.ValueType # 12
- """
- High accuracy temperature and humidity
- """
- PMSA003I: _TelemetrySensorType.ValueType # 13
- """
- PM2.5 air quality sensor
- """
- INA3221: _TelemetrySensorType.ValueType # 14
- """
- INA3221 3 Channel Voltage / Current Sensor
- """
- BMP085: _TelemetrySensorType.ValueType # 15
- """
- BMP085/BMP180 High accuracy temperature and pressure (older Version of BMP280)
- """
- RCWL9620: _TelemetrySensorType.ValueType # 16
- """
- RCWL-9620 Doppler Radar Distance Sensor, used for water level detection
- """
- SHT4X: _TelemetrySensorType.ValueType # 17
- """
- Sensirion High accuracy temperature and humidity
- """
- VEML7700: _TelemetrySensorType.ValueType # 18
- """
- VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
- """
- MLX90632: _TelemetrySensorType.ValueType # 19
- """
- MLX90632 non-contact IR temperature sensor.
- """
- OPT3001: _TelemetrySensorType.ValueType # 20
- """
- TI OPT3001 Ambient Light Sensor
- """
- LTR390UV: _TelemetrySensorType.ValueType # 21
- """
- Lite On LTR-390UV-01 UV Light Sensor
- """
- TSL25911FN: _TelemetrySensorType.ValueType # 22
- """
- AMS TSL25911FN RGB Light Sensor
- """
- AHT10: _TelemetrySensorType.ValueType # 23
- """
- AHT10 Integrated temperature and humidity sensor
- """
- DFROBOT_LARK: _TelemetrySensorType.ValueType # 24
- """
- DFRobot Lark Weather station (temperature, humidity, pressure, wind speed and direction)
- """
- NAU7802: _TelemetrySensorType.ValueType # 25
- """
- NAU7802 Scale Chip or compatible
- """
- BMP3XX: _TelemetrySensorType.ValueType # 26
- """
- BMP3XX High accuracy temperature and pressure
- """
- ICM20948: _TelemetrySensorType.ValueType # 27
- """
- ICM-20948 9-Axis digital motion processor
- """
- MAX17048: _TelemetrySensorType.ValueType # 28
- """
- MAX17048 1S lipo battery sensor (voltage, state of charge, time to go)
- """
- CUSTOM_SENSOR: _TelemetrySensorType.ValueType # 29
- """
- Custom I2C sensor implementation based on https://github.com/meshtastic/i2c-sensor
- """
- MAX30102: _TelemetrySensorType.ValueType # 30
- """
- MAX30102 Pulse Oximeter and Heart-Rate Sensor
- """
- MLX90614: _TelemetrySensorType.ValueType # 31
- """
- MLX90614 non-contact IR temperature sensor
- """
- SCD4X: _TelemetrySensorType.ValueType # 32
- """
- SCD40/SCD41 CO2, humidity, temperature sensor
- """
- RADSENS: _TelemetrySensorType.ValueType # 33
- """
- ClimateGuard RadSens, radiation, Geiger-Muller Tube
- """
- INA226: _TelemetrySensorType.ValueType # 34
- """
- High accuracy current and voltage
- """
- DFROBOT_RAIN: _TelemetrySensorType.ValueType # 35
- """
- DFRobot Gravity tipping bucket rain gauge
- """
- DPS310: _TelemetrySensorType.ValueType # 36
- """
- Infineon DPS310 High accuracy pressure and temperature
- """
- RAK12035: _TelemetrySensorType.ValueType # 37
- """
- RAKWireless RAK12035 Soil Moisture Sensor Module
- """
- MAX17261: _TelemetrySensorType.ValueType # 38
- """
- MAX17261 lipo battery gauge
- """
- PCT2075: _TelemetrySensorType.ValueType # 39
- """
- PCT2075 Temperature Sensor
- """
- ADS1X15: _TelemetrySensorType.ValueType # 40
- """
- ADS1X15 ADC
- """
- ADS1X15_ALT: _TelemetrySensorType.ValueType # 41
- """
- ADS1X15 ADC_ALT
- """
- SFA30: _TelemetrySensorType.ValueType # 42
- """
- Sensirion SFA30 Formaldehyde sensor
- """
- SEN5X: _TelemetrySensorType.ValueType # 43
- """
- SEN5X PM SENSORS
- """
- TSL2561: _TelemetrySensorType.ValueType # 44
- """
- TSL2561 light sensor
- """
- BH1750: _TelemetrySensorType.ValueType # 45
- """
- BH1750 light sensor
- """
+class HealthMetrics(_message.Message):
+ __slots__ = ["heart_bpm", "spO2", "temperature"]
+ HEART_BPM_FIELD_NUMBER: _ClassVar[int]
+ SPO2_FIELD_NUMBER: _ClassVar[int]
+ TEMPERATURE_FIELD_NUMBER: _ClassVar[int]
+ heart_bpm: int
+ spO2: int
+ temperature: float
+ def __init__(self, heart_bpm: _Optional[int] = ..., spO2: _Optional[int] = ..., temperature: _Optional[float] = ...) -> None: ...
-class TelemetrySensorType(_TelemetrySensorType, metaclass=_TelemetrySensorTypeEnumTypeWrapper):
- """
- Supported I2C Sensors for telemetry in Meshtastic
- """
+class HostMetrics(_message.Message):
+ __slots__ = ["diskfree1_bytes", "diskfree2_bytes", "diskfree3_bytes", "freemem_bytes", "load1", "load15", "load5", "uptime_seconds", "user_string"]
+ DISKFREE1_BYTES_FIELD_NUMBER: _ClassVar[int]
+ DISKFREE2_BYTES_FIELD_NUMBER: _ClassVar[int]
+ DISKFREE3_BYTES_FIELD_NUMBER: _ClassVar[int]
+ FREEMEM_BYTES_FIELD_NUMBER: _ClassVar[int]
+ LOAD15_FIELD_NUMBER: _ClassVar[int]
+ LOAD1_FIELD_NUMBER: _ClassVar[int]
+ LOAD5_FIELD_NUMBER: _ClassVar[int]
+ UPTIME_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ USER_STRING_FIELD_NUMBER: _ClassVar[int]
+ diskfree1_bytes: int
+ diskfree2_bytes: int
+ diskfree3_bytes: int
+ freemem_bytes: int
+ load1: int
+ load15: int
+ load5: int
+ uptime_seconds: int
+ user_string: str
+ def __init__(self, uptime_seconds: _Optional[int] = ..., freemem_bytes: _Optional[int] = ..., diskfree1_bytes: _Optional[int] = ..., diskfree2_bytes: _Optional[int] = ..., diskfree3_bytes: _Optional[int] = ..., load1: _Optional[int] = ..., load5: _Optional[int] = ..., load15: _Optional[int] = ..., user_string: _Optional[str] = ...) -> None: ...
-SENSOR_UNSET: TelemetrySensorType.ValueType # 0
-"""
-No external telemetry sensor explicitly set
-"""
-BME280: TelemetrySensorType.ValueType # 1
-"""
-High accuracy temperature, pressure, humidity
-"""
-BME680: TelemetrySensorType.ValueType # 2
-"""
-High accuracy temperature, pressure, humidity, and air resistance
-"""
-MCP9808: TelemetrySensorType.ValueType # 3
-"""
-Very high accuracy temperature
-"""
-INA260: TelemetrySensorType.ValueType # 4
-"""
-Moderate accuracy current and voltage
-"""
-INA219: TelemetrySensorType.ValueType # 5
-"""
-Moderate accuracy current and voltage
-"""
-BMP280: TelemetrySensorType.ValueType # 6
-"""
-High accuracy temperature and pressure
-"""
-SHTC3: TelemetrySensorType.ValueType # 7
-"""
-High accuracy temperature and humidity
-"""
-LPS22: TelemetrySensorType.ValueType # 8
-"""
-High accuracy pressure
-"""
-QMC6310: TelemetrySensorType.ValueType # 9
-"""
-3-Axis magnetic sensor
-"""
-QMI8658: TelemetrySensorType.ValueType # 10
-"""
-6-Axis inertial measurement sensor
-"""
-QMC5883L: TelemetrySensorType.ValueType # 11
-"""
-3-Axis magnetic sensor
-"""
-SHT31: TelemetrySensorType.ValueType # 12
-"""
-High accuracy temperature and humidity
-"""
-PMSA003I: TelemetrySensorType.ValueType # 13
-"""
-PM2.5 air quality sensor
-"""
-INA3221: TelemetrySensorType.ValueType # 14
-"""
-INA3221 3 Channel Voltage / Current Sensor
-"""
-BMP085: TelemetrySensorType.ValueType # 15
-"""
-BMP085/BMP180 High accuracy temperature and pressure (older Version of BMP280)
-"""
-RCWL9620: TelemetrySensorType.ValueType # 16
-"""
-RCWL-9620 Doppler Radar Distance Sensor, used for water level detection
-"""
-SHT4X: TelemetrySensorType.ValueType # 17
-"""
-Sensirion High accuracy temperature and humidity
-"""
-VEML7700: TelemetrySensorType.ValueType # 18
-"""
-VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
-"""
-MLX90632: TelemetrySensorType.ValueType # 19
-"""
-MLX90632 non-contact IR temperature sensor.
-"""
-OPT3001: TelemetrySensorType.ValueType # 20
-"""
-TI OPT3001 Ambient Light Sensor
-"""
-LTR390UV: TelemetrySensorType.ValueType # 21
-"""
-Lite On LTR-390UV-01 UV Light Sensor
-"""
-TSL25911FN: TelemetrySensorType.ValueType # 22
-"""
-AMS TSL25911FN RGB Light Sensor
-"""
-AHT10: TelemetrySensorType.ValueType # 23
-"""
-AHT10 Integrated temperature and humidity sensor
-"""
-DFROBOT_LARK: TelemetrySensorType.ValueType # 24
-"""
-DFRobot Lark Weather station (temperature, humidity, pressure, wind speed and direction)
-"""
-NAU7802: TelemetrySensorType.ValueType # 25
-"""
-NAU7802 Scale Chip or compatible
-"""
-BMP3XX: TelemetrySensorType.ValueType # 26
-"""
-BMP3XX High accuracy temperature and pressure
-"""
-ICM20948: TelemetrySensorType.ValueType # 27
-"""
-ICM-20948 9-Axis digital motion processor
-"""
-MAX17048: TelemetrySensorType.ValueType # 28
-"""
-MAX17048 1S lipo battery sensor (voltage, state of charge, time to go)
-"""
-CUSTOM_SENSOR: TelemetrySensorType.ValueType # 29
-"""
-Custom I2C sensor implementation based on https://github.com/meshtastic/i2c-sensor
-"""
-MAX30102: TelemetrySensorType.ValueType # 30
-"""
-MAX30102 Pulse Oximeter and Heart-Rate Sensor
-"""
-MLX90614: TelemetrySensorType.ValueType # 31
-"""
-MLX90614 non-contact IR temperature sensor
-"""
-SCD4X: TelemetrySensorType.ValueType # 32
-"""
-SCD40/SCD41 CO2, humidity, temperature sensor
-"""
-RADSENS: TelemetrySensorType.ValueType # 33
-"""
-ClimateGuard RadSens, radiation, Geiger-Muller Tube
-"""
-INA226: TelemetrySensorType.ValueType # 34
-"""
-High accuracy current and voltage
-"""
-DFROBOT_RAIN: TelemetrySensorType.ValueType # 35
-"""
-DFRobot Gravity tipping bucket rain gauge
-"""
-DPS310: TelemetrySensorType.ValueType # 36
-"""
-Infineon DPS310 High accuracy pressure and temperature
-"""
-RAK12035: TelemetrySensorType.ValueType # 37
-"""
-RAKWireless RAK12035 Soil Moisture Sensor Module
-"""
-MAX17261: TelemetrySensorType.ValueType # 38
-"""
-MAX17261 lipo battery gauge
-"""
-PCT2075: TelemetrySensorType.ValueType # 39
-"""
-PCT2075 Temperature Sensor
-"""
-ADS1X15: TelemetrySensorType.ValueType # 40
-"""
-ADS1X15 ADC
-"""
-ADS1X15_ALT: TelemetrySensorType.ValueType # 41
-"""
-ADS1X15 ADC_ALT
-"""
-SFA30: TelemetrySensorType.ValueType # 42
-"""
-Sensirion SFA30 Formaldehyde sensor
-"""
-SEN5X: TelemetrySensorType.ValueType # 43
-"""
-SEN5X PM SENSORS
-"""
-TSL2561: TelemetrySensorType.ValueType # 44
-"""
-TSL2561 light sensor
-"""
-BH1750: TelemetrySensorType.ValueType # 45
-"""
-BH1750 light sensor
-"""
-global___TelemetrySensorType = TelemetrySensorType
+class LocalStats(_message.Message):
+ __slots__ = ["air_util_tx", "channel_utilization", "heap_free_bytes", "heap_total_bytes", "noise_floor", "num_online_nodes", "num_packets_rx", "num_packets_rx_bad", "num_packets_tx", "num_rx_dupe", "num_total_nodes", "num_tx_dropped", "num_tx_relay", "num_tx_relay_canceled", "uptime_seconds"]
+ AIR_UTIL_TX_FIELD_NUMBER: _ClassVar[int]
+ CHANNEL_UTILIZATION_FIELD_NUMBER: _ClassVar[int]
+ HEAP_FREE_BYTES_FIELD_NUMBER: _ClassVar[int]
+ HEAP_TOTAL_BYTES_FIELD_NUMBER: _ClassVar[int]
+ NOISE_FLOOR_FIELD_NUMBER: _ClassVar[int]
+ NUM_ONLINE_NODES_FIELD_NUMBER: _ClassVar[int]
+ NUM_PACKETS_RX_BAD_FIELD_NUMBER: _ClassVar[int]
+ NUM_PACKETS_RX_FIELD_NUMBER: _ClassVar[int]
+ NUM_PACKETS_TX_FIELD_NUMBER: _ClassVar[int]
+ NUM_RX_DUPE_FIELD_NUMBER: _ClassVar[int]
+ NUM_TOTAL_NODES_FIELD_NUMBER: _ClassVar[int]
+ NUM_TX_DROPPED_FIELD_NUMBER: _ClassVar[int]
+ NUM_TX_RELAY_CANCELED_FIELD_NUMBER: _ClassVar[int]
+ NUM_TX_RELAY_FIELD_NUMBER: _ClassVar[int]
+ UPTIME_SECONDS_FIELD_NUMBER: _ClassVar[int]
+ air_util_tx: float
+ channel_utilization: float
+ heap_free_bytes: int
+ heap_total_bytes: int
+ noise_floor: int
+ num_online_nodes: int
+ num_packets_rx: int
+ num_packets_rx_bad: int
+ num_packets_tx: int
+ num_rx_dupe: int
+ num_total_nodes: int
+ num_tx_dropped: int
+ num_tx_relay: int
+ num_tx_relay_canceled: int
+ uptime_seconds: int
+ def __init__(self, uptime_seconds: _Optional[int] = ..., channel_utilization: _Optional[float] = ..., air_util_tx: _Optional[float] = ..., num_packets_tx: _Optional[int] = ..., num_packets_rx: _Optional[int] = ..., num_packets_rx_bad: _Optional[int] = ..., num_online_nodes: _Optional[int] = ..., num_total_nodes: _Optional[int] = ..., num_rx_dupe: _Optional[int] = ..., num_tx_relay: _Optional[int] = ..., num_tx_relay_canceled: _Optional[int] = ..., heap_total_bytes: _Optional[int] = ..., heap_free_bytes: _Optional[int] = ..., num_tx_dropped: _Optional[int] = ..., noise_floor: _Optional[int] = ...) -> None: ...
-@typing.final
-class DeviceMetrics(google.protobuf.message.Message):
- """
- Key native device metrics such as battery level
- """
+class Nau7802Config(_message.Message):
+ __slots__ = ["calibrationFactor", "zeroOffset"]
+ CALIBRATIONFACTOR_FIELD_NUMBER: _ClassVar[int]
+ ZEROOFFSET_FIELD_NUMBER: _ClassVar[int]
+ calibrationFactor: float
+ zeroOffset: int
+ def __init__(self, zeroOffset: _Optional[int] = ..., calibrationFactor: _Optional[float] = ...) -> None: ...
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
+class PowerMetrics(_message.Message):
+ __slots__ = ["ch1_current", "ch1_voltage", "ch2_current", "ch2_voltage", "ch3_current", "ch3_voltage", "ch4_current", "ch4_voltage", "ch5_current", "ch5_voltage", "ch6_current", "ch6_voltage", "ch7_current", "ch7_voltage", "ch8_current", "ch8_voltage"]
+ CH1_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH1_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH2_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH2_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH3_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH3_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH4_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH4_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH5_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH5_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH6_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH6_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH7_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH7_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ CH8_CURRENT_FIELD_NUMBER: _ClassVar[int]
+ CH8_VOLTAGE_FIELD_NUMBER: _ClassVar[int]
+ ch1_current: float
+ ch1_voltage: float
+ ch2_current: float
+ ch2_voltage: float
+ ch3_current: float
+ ch3_voltage: float
+ ch4_current: float
+ ch4_voltage: float
+ ch5_current: float
+ ch5_voltage: float
+ ch6_current: float
+ ch6_voltage: float
+ ch7_current: float
+ ch7_voltage: float
+ ch8_current: float
+ ch8_voltage: float
+ def __init__(self, ch1_voltage: _Optional[float] = ..., ch1_current: _Optional[float] = ..., ch2_voltage: _Optional[float] = ..., ch2_current: _Optional[float] = ..., ch3_voltage: _Optional[float] = ..., ch3_current: _Optional[float] = ..., ch4_voltage: _Optional[float] = ..., ch4_current: _Optional[float] = ..., ch5_voltage: _Optional[float] = ..., ch5_current: _Optional[float] = ..., ch6_voltage: _Optional[float] = ..., ch6_current: _Optional[float] = ..., ch7_voltage: _Optional[float] = ..., ch7_current: _Optional[float] = ..., ch8_voltage: _Optional[float] = ..., ch8_current: _Optional[float] = ...) -> None: ...
- BATTERY_LEVEL_FIELD_NUMBER: builtins.int
- VOLTAGE_FIELD_NUMBER: builtins.int
- CHANNEL_UTILIZATION_FIELD_NUMBER: builtins.int
- AIR_UTIL_TX_FIELD_NUMBER: builtins.int
- UPTIME_SECONDS_FIELD_NUMBER: builtins.int
- battery_level: builtins.int
- """
- 0-100 (>100 means powered)
- """
- voltage: builtins.float
- """
- Voltage measured
- """
- channel_utilization: builtins.float
- """
- Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
- """
- air_util_tx: builtins.float
- """
- Percent of airtime for transmission used within the last hour.
- """
- uptime_seconds: builtins.int
- """
- How long the device has been running since the last reboot (in seconds)
- """
- def __init__(
- self,
- *,
- battery_level: builtins.int | None = ...,
- voltage: builtins.float | None = ...,
- channel_utilization: builtins.float | None = ...,
- air_util_tx: builtins.float | None = ...,
- uptime_seconds: builtins.int | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_air_util_tx", b"_air_util_tx", "_battery_level", b"_battery_level", "_channel_utilization", b"_channel_utilization", "_uptime_seconds", b"_uptime_seconds", "_voltage", b"_voltage", "air_util_tx", b"air_util_tx", "battery_level", b"battery_level", "channel_utilization", b"channel_utilization", "uptime_seconds", b"uptime_seconds", "voltage", b"voltage"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_air_util_tx", b"_air_util_tx", "_battery_level", b"_battery_level", "_channel_utilization", b"_channel_utilization", "_uptime_seconds", b"_uptime_seconds", "_voltage", b"_voltage", "air_util_tx", b"air_util_tx", "battery_level", b"battery_level", "channel_utilization", b"channel_utilization", "uptime_seconds", b"uptime_seconds", "voltage", b"voltage"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_air_util_tx", b"_air_util_tx"]) -> typing.Literal["air_util_tx"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_battery_level", b"_battery_level"]) -> typing.Literal["battery_level"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_channel_utilization", b"_channel_utilization"]) -> typing.Literal["channel_utilization"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_uptime_seconds", b"_uptime_seconds"]) -> typing.Literal["uptime_seconds"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_voltage", b"_voltage"]) -> typing.Literal["voltage"] | None: ...
+class SEN5XState(_message.Message):
+ __slots__ = ["last_cleaning_time", "last_cleaning_valid", "one_shot_mode", "voc_state_array", "voc_state_time", "voc_state_valid"]
+ LAST_CLEANING_TIME_FIELD_NUMBER: _ClassVar[int]
+ LAST_CLEANING_VALID_FIELD_NUMBER: _ClassVar[int]
+ ONE_SHOT_MODE_FIELD_NUMBER: _ClassVar[int]
+ VOC_STATE_ARRAY_FIELD_NUMBER: _ClassVar[int]
+ VOC_STATE_TIME_FIELD_NUMBER: _ClassVar[int]
+ VOC_STATE_VALID_FIELD_NUMBER: _ClassVar[int]
+ last_cleaning_time: int
+ last_cleaning_valid: bool
+ one_shot_mode: bool
+ voc_state_array: int
+ voc_state_time: int
+ voc_state_valid: bool
+ def __init__(self, last_cleaning_time: _Optional[int] = ..., last_cleaning_valid: bool = ..., one_shot_mode: bool = ..., voc_state_time: _Optional[int] = ..., voc_state_valid: bool = ..., voc_state_array: _Optional[int] = ...) -> None: ...
-global___DeviceMetrics = DeviceMetrics
+class Telemetry(_message.Message):
+ __slots__ = ["air_quality_metrics", "device_metrics", "environment_metrics", "health_metrics", "host_metrics", "local_stats", "power_metrics", "time", "traffic_management_stats"]
+ AIR_QUALITY_METRICS_FIELD_NUMBER: _ClassVar[int]
+ DEVICE_METRICS_FIELD_NUMBER: _ClassVar[int]
+ ENVIRONMENT_METRICS_FIELD_NUMBER: _ClassVar[int]
+ HEALTH_METRICS_FIELD_NUMBER: _ClassVar[int]
+ HOST_METRICS_FIELD_NUMBER: _ClassVar[int]
+ LOCAL_STATS_FIELD_NUMBER: _ClassVar[int]
+ POWER_METRICS_FIELD_NUMBER: _ClassVar[int]
+ TIME_FIELD_NUMBER: _ClassVar[int]
+ TRAFFIC_MANAGEMENT_STATS_FIELD_NUMBER: _ClassVar[int]
+ air_quality_metrics: AirQualityMetrics
+ device_metrics: DeviceMetrics
+ environment_metrics: EnvironmentMetrics
+ health_metrics: HealthMetrics
+ host_metrics: HostMetrics
+ local_stats: LocalStats
+ power_metrics: PowerMetrics
+ time: int
+ traffic_management_stats: TrafficManagementStats
+ def __init__(self, time: _Optional[int] = ..., device_metrics: _Optional[_Union[DeviceMetrics, _Mapping]] = ..., environment_metrics: _Optional[_Union[EnvironmentMetrics, _Mapping]] = ..., air_quality_metrics: _Optional[_Union[AirQualityMetrics, _Mapping]] = ..., power_metrics: _Optional[_Union[PowerMetrics, _Mapping]] = ..., local_stats: _Optional[_Union[LocalStats, _Mapping]] = ..., health_metrics: _Optional[_Union[HealthMetrics, _Mapping]] = ..., host_metrics: _Optional[_Union[HostMetrics, _Mapping]] = ..., traffic_management_stats: _Optional[_Union[TrafficManagementStats, _Mapping]] = ...) -> None: ...
-@typing.final
-class EnvironmentMetrics(google.protobuf.message.Message):
- """
- Weather station or other environmental metrics
- """
+class TrafficManagementStats(_message.Message):
+ __slots__ = ["hop_exhausted_packets", "nodeinfo_cache_hits", "packets_inspected", "position_dedup_drops", "rate_limit_drops", "router_hops_preserved", "unknown_packet_drops"]
+ HOP_EXHAUSTED_PACKETS_FIELD_NUMBER: _ClassVar[int]
+ NODEINFO_CACHE_HITS_FIELD_NUMBER: _ClassVar[int]
+ PACKETS_INSPECTED_FIELD_NUMBER: _ClassVar[int]
+ POSITION_DEDUP_DROPS_FIELD_NUMBER: _ClassVar[int]
+ RATE_LIMIT_DROPS_FIELD_NUMBER: _ClassVar[int]
+ ROUTER_HOPS_PRESERVED_FIELD_NUMBER: _ClassVar[int]
+ UNKNOWN_PACKET_DROPS_FIELD_NUMBER: _ClassVar[int]
+ hop_exhausted_packets: int
+ nodeinfo_cache_hits: int
+ packets_inspected: int
+ position_dedup_drops: int
+ rate_limit_drops: int
+ router_hops_preserved: int
+ unknown_packet_drops: int
+ def __init__(self, packets_inspected: _Optional[int] = ..., position_dedup_drops: _Optional[int] = ..., nodeinfo_cache_hits: _Optional[int] = ..., rate_limit_drops: _Optional[int] = ..., unknown_packet_drops: _Optional[int] = ..., hop_exhausted_packets: _Optional[int] = ..., router_hops_preserved: _Optional[int] = ...) -> None: ...
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- TEMPERATURE_FIELD_NUMBER: builtins.int
- RELATIVE_HUMIDITY_FIELD_NUMBER: builtins.int
- BAROMETRIC_PRESSURE_FIELD_NUMBER: builtins.int
- GAS_RESISTANCE_FIELD_NUMBER: builtins.int
- VOLTAGE_FIELD_NUMBER: builtins.int
- CURRENT_FIELD_NUMBER: builtins.int
- IAQ_FIELD_NUMBER: builtins.int
- DISTANCE_FIELD_NUMBER: builtins.int
- LUX_FIELD_NUMBER: builtins.int
- WHITE_LUX_FIELD_NUMBER: builtins.int
- IR_LUX_FIELD_NUMBER: builtins.int
- UV_LUX_FIELD_NUMBER: builtins.int
- WIND_DIRECTION_FIELD_NUMBER: builtins.int
- WIND_SPEED_FIELD_NUMBER: builtins.int
- WEIGHT_FIELD_NUMBER: builtins.int
- WIND_GUST_FIELD_NUMBER: builtins.int
- WIND_LULL_FIELD_NUMBER: builtins.int
- RADIATION_FIELD_NUMBER: builtins.int
- RAINFALL_1H_FIELD_NUMBER: builtins.int
- RAINFALL_24H_FIELD_NUMBER: builtins.int
- SOIL_MOISTURE_FIELD_NUMBER: builtins.int
- SOIL_TEMPERATURE_FIELD_NUMBER: builtins.int
- temperature: builtins.float
- """
- Temperature measured
- """
- relative_humidity: builtins.float
- """
- Relative humidity percent measured
- """
- barometric_pressure: builtins.float
- """
- Barometric pressure in hPA measured
- """
- gas_resistance: builtins.float
- """
- Gas resistance in MOhm measured
- """
- voltage: builtins.float
- """
- Voltage measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
- """
- current: builtins.float
- """
- Current measured (To be depreciated in favor of PowerMetrics in Meshtastic 3.x)
- """
- iaq: builtins.int
- """
- relative scale IAQ value as measured by Bosch BME680 . value 0-500.
- Belongs to Air Quality but is not particle but VOC measurement. Other VOC values can also be put in here.
- """
- distance: builtins.float
- """
- RCWL9620 Doppler Radar Distance Sensor, used for water level detection. Float value in mm.
- """
- lux: builtins.float
- """
- VEML7700 high accuracy ambient light(Lux) digital 16-bit resolution sensor.
- """
- white_lux: builtins.float
- """
- VEML7700 high accuracy white light(irradiance) not calibrated digital 16-bit resolution sensor.
- """
- ir_lux: builtins.float
- """
- Infrared lux
- """
- uv_lux: builtins.float
- """
- Ultraviolet lux
- """
- wind_direction: builtins.int
- """
- Wind direction in degrees
- 0 degrees = North, 90 = East, etc...
- """
- wind_speed: builtins.float
- """
- Wind speed in m/s
- """
- weight: builtins.float
- """
- Weight in KG
- """
- wind_gust: builtins.float
- """
- Wind gust in m/s
- """
- wind_lull: builtins.float
- """
- Wind lull in m/s
- """
- radiation: builtins.float
- """
- Radiation in µR/h
- """
- rainfall_1h: builtins.float
- """
- Rainfall in the last hour in mm
- """
- rainfall_24h: builtins.float
- """
- Rainfall in the last 24 hours in mm
- """
- soil_moisture: builtins.int
- """
- Soil moisture measured (% 1-100)
- """
- soil_temperature: builtins.float
- """
- Soil temperature measured (*C)
- """
- def __init__(
- self,
- *,
- temperature: builtins.float | None = ...,
- relative_humidity: builtins.float | None = ...,
- barometric_pressure: builtins.float | None = ...,
- gas_resistance: builtins.float | None = ...,
- voltage: builtins.float | None = ...,
- current: builtins.float | None = ...,
- iaq: builtins.int | None = ...,
- distance: builtins.float | None = ...,
- lux: builtins.float | None = ...,
- white_lux: builtins.float | None = ...,
- ir_lux: builtins.float | None = ...,
- uv_lux: builtins.float | None = ...,
- wind_direction: builtins.int | None = ...,
- wind_speed: builtins.float | None = ...,
- weight: builtins.float | None = ...,
- wind_gust: builtins.float | None = ...,
- wind_lull: builtins.float | None = ...,
- radiation: builtins.float | None = ...,
- rainfall_1h: builtins.float | None = ...,
- rainfall_24h: builtins.float | None = ...,
- soil_moisture: builtins.int | None = ...,
- soil_temperature: builtins.float | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_barometric_pressure", b"_barometric_pressure", "_current", b"_current", "_distance", b"_distance", "_gas_resistance", b"_gas_resistance", "_iaq", b"_iaq", "_ir_lux", b"_ir_lux", "_lux", b"_lux", "_radiation", b"_radiation", "_rainfall_1h", b"_rainfall_1h", "_rainfall_24h", b"_rainfall_24h", "_relative_humidity", b"_relative_humidity", "_soil_moisture", b"_soil_moisture", "_soil_temperature", b"_soil_temperature", "_temperature", b"_temperature", "_uv_lux", b"_uv_lux", "_voltage", b"_voltage", "_weight", b"_weight", "_white_lux", b"_white_lux", "_wind_direction", b"_wind_direction", "_wind_gust", b"_wind_gust", "_wind_lull", b"_wind_lull", "_wind_speed", b"_wind_speed", "barometric_pressure", b"barometric_pressure", "current", b"current", "distance", b"distance", "gas_resistance", b"gas_resistance", "iaq", b"iaq", "ir_lux", b"ir_lux", "lux", b"lux", "radiation", b"radiation", "rainfall_1h", b"rainfall_1h", "rainfall_24h", b"rainfall_24h", "relative_humidity", b"relative_humidity", "soil_moisture", b"soil_moisture", "soil_temperature", b"soil_temperature", "temperature", b"temperature", "uv_lux", b"uv_lux", "voltage", b"voltage", "weight", b"weight", "white_lux", b"white_lux", "wind_direction", b"wind_direction", "wind_gust", b"wind_gust", "wind_lull", b"wind_lull", "wind_speed", b"wind_speed"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_barometric_pressure", b"_barometric_pressure", "_current", b"_current", "_distance", b"_distance", "_gas_resistance", b"_gas_resistance", "_iaq", b"_iaq", "_ir_lux", b"_ir_lux", "_lux", b"_lux", "_radiation", b"_radiation", "_rainfall_1h", b"_rainfall_1h", "_rainfall_24h", b"_rainfall_24h", "_relative_humidity", b"_relative_humidity", "_soil_moisture", b"_soil_moisture", "_soil_temperature", b"_soil_temperature", "_temperature", b"_temperature", "_uv_lux", b"_uv_lux", "_voltage", b"_voltage", "_weight", b"_weight", "_white_lux", b"_white_lux", "_wind_direction", b"_wind_direction", "_wind_gust", b"_wind_gust", "_wind_lull", b"_wind_lull", "_wind_speed", b"_wind_speed", "barometric_pressure", b"barometric_pressure", "current", b"current", "distance", b"distance", "gas_resistance", b"gas_resistance", "iaq", b"iaq", "ir_lux", b"ir_lux", "lux", b"lux", "radiation", b"radiation", "rainfall_1h", b"rainfall_1h", "rainfall_24h", b"rainfall_24h", "relative_humidity", b"relative_humidity", "soil_moisture", b"soil_moisture", "soil_temperature", b"soil_temperature", "temperature", b"temperature", "uv_lux", b"uv_lux", "voltage", b"voltage", "weight", b"weight", "white_lux", b"white_lux", "wind_direction", b"wind_direction", "wind_gust", b"wind_gust", "wind_lull", b"wind_lull", "wind_speed", b"wind_speed"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_barometric_pressure", b"_barometric_pressure"]) -> typing.Literal["barometric_pressure"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_current", b"_current"]) -> typing.Literal["current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_distance", b"_distance"]) -> typing.Literal["distance"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_gas_resistance", b"_gas_resistance"]) -> typing.Literal["gas_resistance"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_iaq", b"_iaq"]) -> typing.Literal["iaq"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ir_lux", b"_ir_lux"]) -> typing.Literal["ir_lux"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_lux", b"_lux"]) -> typing.Literal["lux"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_radiation", b"_radiation"]) -> typing.Literal["radiation"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_rainfall_1h", b"_rainfall_1h"]) -> typing.Literal["rainfall_1h"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_rainfall_24h", b"_rainfall_24h"]) -> typing.Literal["rainfall_24h"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_relative_humidity", b"_relative_humidity"]) -> typing.Literal["relative_humidity"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_soil_moisture", b"_soil_moisture"]) -> typing.Literal["soil_moisture"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_soil_temperature", b"_soil_temperature"]) -> typing.Literal["soil_temperature"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_temperature", b"_temperature"]) -> typing.Literal["temperature"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_uv_lux", b"_uv_lux"]) -> typing.Literal["uv_lux"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_voltage", b"_voltage"]) -> typing.Literal["voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_weight", b"_weight"]) -> typing.Literal["weight"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_white_lux", b"_white_lux"]) -> typing.Literal["white_lux"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_wind_direction", b"_wind_direction"]) -> typing.Literal["wind_direction"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_wind_gust", b"_wind_gust"]) -> typing.Literal["wind_gust"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_wind_lull", b"_wind_lull"]) -> typing.Literal["wind_lull"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_wind_speed", b"_wind_speed"]) -> typing.Literal["wind_speed"] | None: ...
-
-global___EnvironmentMetrics = EnvironmentMetrics
-
-@typing.final
-class PowerMetrics(google.protobuf.message.Message):
- """
- Power Metrics (voltage / current / etc)
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- CH1_VOLTAGE_FIELD_NUMBER: builtins.int
- CH1_CURRENT_FIELD_NUMBER: builtins.int
- CH2_VOLTAGE_FIELD_NUMBER: builtins.int
- CH2_CURRENT_FIELD_NUMBER: builtins.int
- CH3_VOLTAGE_FIELD_NUMBER: builtins.int
- CH3_CURRENT_FIELD_NUMBER: builtins.int
- CH4_VOLTAGE_FIELD_NUMBER: builtins.int
- CH4_CURRENT_FIELD_NUMBER: builtins.int
- CH5_VOLTAGE_FIELD_NUMBER: builtins.int
- CH5_CURRENT_FIELD_NUMBER: builtins.int
- CH6_VOLTAGE_FIELD_NUMBER: builtins.int
- CH6_CURRENT_FIELD_NUMBER: builtins.int
- CH7_VOLTAGE_FIELD_NUMBER: builtins.int
- CH7_CURRENT_FIELD_NUMBER: builtins.int
- CH8_VOLTAGE_FIELD_NUMBER: builtins.int
- CH8_CURRENT_FIELD_NUMBER: builtins.int
- ch1_voltage: builtins.float
- """
- Voltage (Ch1)
- """
- ch1_current: builtins.float
- """
- Current (Ch1)
- """
- ch2_voltage: builtins.float
- """
- Voltage (Ch2)
- """
- ch2_current: builtins.float
- """
- Current (Ch2)
- """
- ch3_voltage: builtins.float
- """
- Voltage (Ch3)
- """
- ch3_current: builtins.float
- """
- Current (Ch3)
- """
- ch4_voltage: builtins.float
- """
- Voltage (Ch4)
- """
- ch4_current: builtins.float
- """
- Current (Ch4)
- """
- ch5_voltage: builtins.float
- """
- Voltage (Ch5)
- """
- ch5_current: builtins.float
- """
- Current (Ch5)
- """
- ch6_voltage: builtins.float
- """
- Voltage (Ch6)
- """
- ch6_current: builtins.float
- """
- Current (Ch6)
- """
- ch7_voltage: builtins.float
- """
- Voltage (Ch7)
- """
- ch7_current: builtins.float
- """
- Current (Ch7)
- """
- ch8_voltage: builtins.float
- """
- Voltage (Ch8)
- """
- ch8_current: builtins.float
- """
- Current (Ch8)
- """
- def __init__(
- self,
- *,
- ch1_voltage: builtins.float | None = ...,
- ch1_current: builtins.float | None = ...,
- ch2_voltage: builtins.float | None = ...,
- ch2_current: builtins.float | None = ...,
- ch3_voltage: builtins.float | None = ...,
- ch3_current: builtins.float | None = ...,
- ch4_voltage: builtins.float | None = ...,
- ch4_current: builtins.float | None = ...,
- ch5_voltage: builtins.float | None = ...,
- ch5_current: builtins.float | None = ...,
- ch6_voltage: builtins.float | None = ...,
- ch6_current: builtins.float | None = ...,
- ch7_voltage: builtins.float | None = ...,
- ch7_current: builtins.float | None = ...,
- ch8_voltage: builtins.float | None = ...,
- ch8_current: builtins.float | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_ch1_current", b"_ch1_current", "_ch1_voltage", b"_ch1_voltage", "_ch2_current", b"_ch2_current", "_ch2_voltage", b"_ch2_voltage", "_ch3_current", b"_ch3_current", "_ch3_voltage", b"_ch3_voltage", "_ch4_current", b"_ch4_current", "_ch4_voltage", b"_ch4_voltage", "_ch5_current", b"_ch5_current", "_ch5_voltage", b"_ch5_voltage", "_ch6_current", b"_ch6_current", "_ch6_voltage", b"_ch6_voltage", "_ch7_current", b"_ch7_current", "_ch7_voltage", b"_ch7_voltage", "_ch8_current", b"_ch8_current", "_ch8_voltage", b"_ch8_voltage", "ch1_current", b"ch1_current", "ch1_voltage", b"ch1_voltage", "ch2_current", b"ch2_current", "ch2_voltage", b"ch2_voltage", "ch3_current", b"ch3_current", "ch3_voltage", b"ch3_voltage", "ch4_current", b"ch4_current", "ch4_voltage", b"ch4_voltage", "ch5_current", b"ch5_current", "ch5_voltage", b"ch5_voltage", "ch6_current", b"ch6_current", "ch6_voltage", b"ch6_voltage", "ch7_current", b"ch7_current", "ch7_voltage", b"ch7_voltage", "ch8_current", b"ch8_current", "ch8_voltage", b"ch8_voltage"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_ch1_current", b"_ch1_current", "_ch1_voltage", b"_ch1_voltage", "_ch2_current", b"_ch2_current", "_ch2_voltage", b"_ch2_voltage", "_ch3_current", b"_ch3_current", "_ch3_voltage", b"_ch3_voltage", "_ch4_current", b"_ch4_current", "_ch4_voltage", b"_ch4_voltage", "_ch5_current", b"_ch5_current", "_ch5_voltage", b"_ch5_voltage", "_ch6_current", b"_ch6_current", "_ch6_voltage", b"_ch6_voltage", "_ch7_current", b"_ch7_current", "_ch7_voltage", b"_ch7_voltage", "_ch8_current", b"_ch8_current", "_ch8_voltage", b"_ch8_voltage", "ch1_current", b"ch1_current", "ch1_voltage", b"ch1_voltage", "ch2_current", b"ch2_current", "ch2_voltage", b"ch2_voltage", "ch3_current", b"ch3_current", "ch3_voltage", b"ch3_voltage", "ch4_current", b"ch4_current", "ch4_voltage", b"ch4_voltage", "ch5_current", b"ch5_current", "ch5_voltage", b"ch5_voltage", "ch6_current", b"ch6_current", "ch6_voltage", b"ch6_voltage", "ch7_current", b"ch7_current", "ch7_voltage", b"ch7_voltage", "ch8_current", b"ch8_current", "ch8_voltage", b"ch8_voltage"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch1_current", b"_ch1_current"]) -> typing.Literal["ch1_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch1_voltage", b"_ch1_voltage"]) -> typing.Literal["ch1_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch2_current", b"_ch2_current"]) -> typing.Literal["ch2_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch2_voltage", b"_ch2_voltage"]) -> typing.Literal["ch2_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch3_current", b"_ch3_current"]) -> typing.Literal["ch3_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch3_voltage", b"_ch3_voltage"]) -> typing.Literal["ch3_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch4_current", b"_ch4_current"]) -> typing.Literal["ch4_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch4_voltage", b"_ch4_voltage"]) -> typing.Literal["ch4_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch5_current", b"_ch5_current"]) -> typing.Literal["ch5_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch5_voltage", b"_ch5_voltage"]) -> typing.Literal["ch5_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch6_current", b"_ch6_current"]) -> typing.Literal["ch6_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch6_voltage", b"_ch6_voltage"]) -> typing.Literal["ch6_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch7_current", b"_ch7_current"]) -> typing.Literal["ch7_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch7_voltage", b"_ch7_voltage"]) -> typing.Literal["ch7_voltage"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch8_current", b"_ch8_current"]) -> typing.Literal["ch8_current"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_ch8_voltage", b"_ch8_voltage"]) -> typing.Literal["ch8_voltage"] | None: ...
-
-global___PowerMetrics = PowerMetrics
-
-@typing.final
-class AirQualityMetrics(google.protobuf.message.Message):
- """
- Air quality metrics
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- PM10_STANDARD_FIELD_NUMBER: builtins.int
- PM25_STANDARD_FIELD_NUMBER: builtins.int
- PM100_STANDARD_FIELD_NUMBER: builtins.int
- PM10_ENVIRONMENTAL_FIELD_NUMBER: builtins.int
- PM25_ENVIRONMENTAL_FIELD_NUMBER: builtins.int
- PM100_ENVIRONMENTAL_FIELD_NUMBER: builtins.int
- PARTICLES_03UM_FIELD_NUMBER: builtins.int
- PARTICLES_05UM_FIELD_NUMBER: builtins.int
- PARTICLES_10UM_FIELD_NUMBER: builtins.int
- PARTICLES_25UM_FIELD_NUMBER: builtins.int
- PARTICLES_50UM_FIELD_NUMBER: builtins.int
- PARTICLES_100UM_FIELD_NUMBER: builtins.int
- CO2_FIELD_NUMBER: builtins.int
- CO2_TEMPERATURE_FIELD_NUMBER: builtins.int
- CO2_HUMIDITY_FIELD_NUMBER: builtins.int
- FORM_FORMALDEHYDE_FIELD_NUMBER: builtins.int
- FORM_HUMIDITY_FIELD_NUMBER: builtins.int
- FORM_TEMPERATURE_FIELD_NUMBER: builtins.int
- PM40_STANDARD_FIELD_NUMBER: builtins.int
- PARTICLES_40UM_FIELD_NUMBER: builtins.int
- PM_TEMPERATURE_FIELD_NUMBER: builtins.int
- PM_HUMIDITY_FIELD_NUMBER: builtins.int
- PM_VOC_IDX_FIELD_NUMBER: builtins.int
- PM_NOX_IDX_FIELD_NUMBER: builtins.int
- PARTICLES_TPS_FIELD_NUMBER: builtins.int
- pm10_standard: builtins.int
- """
- Concentration Units Standard PM1.0 in ug/m3
- """
- pm25_standard: builtins.int
- """
- Concentration Units Standard PM2.5 in ug/m3
- """
- pm100_standard: builtins.int
- """
- Concentration Units Standard PM10.0 in ug/m3
- """
- pm10_environmental: builtins.int
- """
- Concentration Units Environmental PM1.0 in ug/m3
- """
- pm25_environmental: builtins.int
- """
- Concentration Units Environmental PM2.5 in ug/m3
- """
- pm100_environmental: builtins.int
- """
- Concentration Units Environmental PM10.0 in ug/m3
- """
- particles_03um: builtins.int
- """
- 0.3um Particle Count in #/0.1l
- """
- particles_05um: builtins.int
- """
- 0.5um Particle Count in #/0.1l
- """
- particles_10um: builtins.int
- """
- 1.0um Particle Count in #/0.1l
- """
- particles_25um: builtins.int
- """
- 2.5um Particle Count in #/0.1l
- """
- particles_50um: builtins.int
- """
- 5.0um Particle Count in #/0.1l
- """
- particles_100um: builtins.int
- """
- 10.0um Particle Count in #/0.1l
- """
- co2: builtins.int
- """
- CO2 concentration in ppm
- """
- co2_temperature: builtins.float
- """
- CO2 sensor temperature in degC
- """
- co2_humidity: builtins.float
- """
- CO2 sensor relative humidity in %
- """
- form_formaldehyde: builtins.float
- """
- Formaldehyde sensor formaldehyde concentration in ppb
- """
- form_humidity: builtins.float
- """
- Formaldehyde sensor relative humidity in %RH
- """
- form_temperature: builtins.float
- """
- Formaldehyde sensor temperature in degrees Celsius
- """
- pm40_standard: builtins.int
- """
- Concentration Units Standard PM4.0 in ug/m3
- """
- particles_40um: builtins.int
- """
- 4.0um Particle Count in #/0.1l
- """
- pm_temperature: builtins.float
- """
- PM Sensor Temperature
- """
- pm_humidity: builtins.float
- """
- PM Sensor humidity
- """
- pm_voc_idx: builtins.float
- """
- PM Sensor VOC Index
- """
- pm_nox_idx: builtins.float
- """
- PM Sensor NOx Index
- """
- particles_tps: builtins.float
- """
- Typical Particle Size in um
- """
- def __init__(
- self,
- *,
- pm10_standard: builtins.int | None = ...,
- pm25_standard: builtins.int | None = ...,
- pm100_standard: builtins.int | None = ...,
- pm10_environmental: builtins.int | None = ...,
- pm25_environmental: builtins.int | None = ...,
- pm100_environmental: builtins.int | None = ...,
- particles_03um: builtins.int | None = ...,
- particles_05um: builtins.int | None = ...,
- particles_10um: builtins.int | None = ...,
- particles_25um: builtins.int | None = ...,
- particles_50um: builtins.int | None = ...,
- particles_100um: builtins.int | None = ...,
- co2: builtins.int | None = ...,
- co2_temperature: builtins.float | None = ...,
- co2_humidity: builtins.float | None = ...,
- form_formaldehyde: builtins.float | None = ...,
- form_humidity: builtins.float | None = ...,
- form_temperature: builtins.float | None = ...,
- pm40_standard: builtins.int | None = ...,
- particles_40um: builtins.int | None = ...,
- pm_temperature: builtins.float | None = ...,
- pm_humidity: builtins.float | None = ...,
- pm_voc_idx: builtins.float | None = ...,
- pm_nox_idx: builtins.float | None = ...,
- particles_tps: builtins.float | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_co2", b"_co2", "_co2_humidity", b"_co2_humidity", "_co2_temperature", b"_co2_temperature", "_form_formaldehyde", b"_form_formaldehyde", "_form_humidity", b"_form_humidity", "_form_temperature", b"_form_temperature", "_particles_03um", b"_particles_03um", "_particles_05um", b"_particles_05um", "_particles_100um", b"_particles_100um", "_particles_10um", b"_particles_10um", "_particles_25um", b"_particles_25um", "_particles_40um", b"_particles_40um", "_particles_50um", b"_particles_50um", "_particles_tps", b"_particles_tps", "_pm100_environmental", b"_pm100_environmental", "_pm100_standard", b"_pm100_standard", "_pm10_environmental", b"_pm10_environmental", "_pm10_standard", b"_pm10_standard", "_pm25_environmental", b"_pm25_environmental", "_pm25_standard", b"_pm25_standard", "_pm40_standard", b"_pm40_standard", "_pm_humidity", b"_pm_humidity", "_pm_nox_idx", b"_pm_nox_idx", "_pm_temperature", b"_pm_temperature", "_pm_voc_idx", b"_pm_voc_idx", "co2", b"co2", "co2_humidity", b"co2_humidity", "co2_temperature", b"co2_temperature", "form_formaldehyde", b"form_formaldehyde", "form_humidity", b"form_humidity", "form_temperature", b"form_temperature", "particles_03um", b"particles_03um", "particles_05um", b"particles_05um", "particles_100um", b"particles_100um", "particles_10um", b"particles_10um", "particles_25um", b"particles_25um", "particles_40um", b"particles_40um", "particles_50um", b"particles_50um", "particles_tps", b"particles_tps", "pm100_environmental", b"pm100_environmental", "pm100_standard", b"pm100_standard", "pm10_environmental", b"pm10_environmental", "pm10_standard", b"pm10_standard", "pm25_environmental", b"pm25_environmental", "pm25_standard", b"pm25_standard", "pm40_standard", b"pm40_standard", "pm_humidity", b"pm_humidity", "pm_nox_idx", b"pm_nox_idx", "pm_temperature", b"pm_temperature", "pm_voc_idx", b"pm_voc_idx"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_co2", b"_co2", "_co2_humidity", b"_co2_humidity", "_co2_temperature", b"_co2_temperature", "_form_formaldehyde", b"_form_formaldehyde", "_form_humidity", b"_form_humidity", "_form_temperature", b"_form_temperature", "_particles_03um", b"_particles_03um", "_particles_05um", b"_particles_05um", "_particles_100um", b"_particles_100um", "_particles_10um", b"_particles_10um", "_particles_25um", b"_particles_25um", "_particles_40um", b"_particles_40um", "_particles_50um", b"_particles_50um", "_particles_tps", b"_particles_tps", "_pm100_environmental", b"_pm100_environmental", "_pm100_standard", b"_pm100_standard", "_pm10_environmental", b"_pm10_environmental", "_pm10_standard", b"_pm10_standard", "_pm25_environmental", b"_pm25_environmental", "_pm25_standard", b"_pm25_standard", "_pm40_standard", b"_pm40_standard", "_pm_humidity", b"_pm_humidity", "_pm_nox_idx", b"_pm_nox_idx", "_pm_temperature", b"_pm_temperature", "_pm_voc_idx", b"_pm_voc_idx", "co2", b"co2", "co2_humidity", b"co2_humidity", "co2_temperature", b"co2_temperature", "form_formaldehyde", b"form_formaldehyde", "form_humidity", b"form_humidity", "form_temperature", b"form_temperature", "particles_03um", b"particles_03um", "particles_05um", b"particles_05um", "particles_100um", b"particles_100um", "particles_10um", b"particles_10um", "particles_25um", b"particles_25um", "particles_40um", b"particles_40um", "particles_50um", b"particles_50um", "particles_tps", b"particles_tps", "pm100_environmental", b"pm100_environmental", "pm100_standard", b"pm100_standard", "pm10_environmental", b"pm10_environmental", "pm10_standard", b"pm10_standard", "pm25_environmental", b"pm25_environmental", "pm25_standard", b"pm25_standard", "pm40_standard", b"pm40_standard", "pm_humidity", b"pm_humidity", "pm_nox_idx", b"pm_nox_idx", "pm_temperature", b"pm_temperature", "pm_voc_idx", b"pm_voc_idx"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_co2", b"_co2"]) -> typing.Literal["co2"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_co2_humidity", b"_co2_humidity"]) -> typing.Literal["co2_humidity"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_co2_temperature", b"_co2_temperature"]) -> typing.Literal["co2_temperature"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_form_formaldehyde", b"_form_formaldehyde"]) -> typing.Literal["form_formaldehyde"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_form_humidity", b"_form_humidity"]) -> typing.Literal["form_humidity"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_form_temperature", b"_form_temperature"]) -> typing.Literal["form_temperature"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_03um", b"_particles_03um"]) -> typing.Literal["particles_03um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_05um", b"_particles_05um"]) -> typing.Literal["particles_05um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_100um", b"_particles_100um"]) -> typing.Literal["particles_100um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_10um", b"_particles_10um"]) -> typing.Literal["particles_10um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_25um", b"_particles_25um"]) -> typing.Literal["particles_25um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_40um", b"_particles_40um"]) -> typing.Literal["particles_40um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_50um", b"_particles_50um"]) -> typing.Literal["particles_50um"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_particles_tps", b"_particles_tps"]) -> typing.Literal["particles_tps"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm100_environmental", b"_pm100_environmental"]) -> typing.Literal["pm100_environmental"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm100_standard", b"_pm100_standard"]) -> typing.Literal["pm100_standard"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm10_environmental", b"_pm10_environmental"]) -> typing.Literal["pm10_environmental"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm10_standard", b"_pm10_standard"]) -> typing.Literal["pm10_standard"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm25_environmental", b"_pm25_environmental"]) -> typing.Literal["pm25_environmental"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm25_standard", b"_pm25_standard"]) -> typing.Literal["pm25_standard"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm40_standard", b"_pm40_standard"]) -> typing.Literal["pm40_standard"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm_humidity", b"_pm_humidity"]) -> typing.Literal["pm_humidity"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm_nox_idx", b"_pm_nox_idx"]) -> typing.Literal["pm_nox_idx"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm_temperature", b"_pm_temperature"]) -> typing.Literal["pm_temperature"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_pm_voc_idx", b"_pm_voc_idx"]) -> typing.Literal["pm_voc_idx"] | None: ...
-
-global___AirQualityMetrics = AirQualityMetrics
-
-@typing.final
-class LocalStats(google.protobuf.message.Message):
- """
- Local device mesh statistics
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- UPTIME_SECONDS_FIELD_NUMBER: builtins.int
- CHANNEL_UTILIZATION_FIELD_NUMBER: builtins.int
- AIR_UTIL_TX_FIELD_NUMBER: builtins.int
- NUM_PACKETS_TX_FIELD_NUMBER: builtins.int
- NUM_PACKETS_RX_FIELD_NUMBER: builtins.int
- NUM_PACKETS_RX_BAD_FIELD_NUMBER: builtins.int
- NUM_ONLINE_NODES_FIELD_NUMBER: builtins.int
- NUM_TOTAL_NODES_FIELD_NUMBER: builtins.int
- NUM_RX_DUPE_FIELD_NUMBER: builtins.int
- NUM_TX_RELAY_FIELD_NUMBER: builtins.int
- NUM_TX_RELAY_CANCELED_FIELD_NUMBER: builtins.int
- HEAP_TOTAL_BYTES_FIELD_NUMBER: builtins.int
- HEAP_FREE_BYTES_FIELD_NUMBER: builtins.int
- NUM_TX_DROPPED_FIELD_NUMBER: builtins.int
- uptime_seconds: builtins.int
- """
- How long the device has been running since the last reboot (in seconds)
- """
- channel_utilization: builtins.float
- """
- Utilization for the current channel, including well formed TX, RX and malformed RX (aka noise).
- """
- air_util_tx: builtins.float
- """
- Percent of airtime for transmission used within the last hour.
- """
- num_packets_tx: builtins.int
- """
- Number of packets sent
- """
- num_packets_rx: builtins.int
- """
- Number of packets received (both good and bad)
- """
- num_packets_rx_bad: builtins.int
- """
- Number of packets received that are malformed or violate the protocol
- """
- num_online_nodes: builtins.int
- """
- Number of nodes online (in the past 2 hours)
- """
- num_total_nodes: builtins.int
- """
- Number of nodes total
- """
- num_rx_dupe: builtins.int
- """
- Number of received packets that were duplicates (due to multiple nodes relaying).
- If this number is high, there are nodes in the mesh relaying packets when it's unnecessary, for example due to the ROUTER/REPEATER role.
- """
- num_tx_relay: builtins.int
- """
- Number of packets we transmitted that were a relay for others (not originating from ourselves).
- """
- num_tx_relay_canceled: builtins.int
- """
- Number of times we canceled a packet to be relayed, because someone else did it before us.
- This will always be zero for ROUTERs/REPEATERs. If this number is high, some other node(s) is/are relaying faster than you.
- """
- heap_total_bytes: builtins.int
- """
- Number of bytes used in the heap
- """
- heap_free_bytes: builtins.int
- """
- Number of bytes free in the heap
- """
- num_tx_dropped: builtins.int
- """
- Number of packets that were dropped because the transmit queue was full.
- """
- def __init__(
- self,
- *,
- uptime_seconds: builtins.int = ...,
- channel_utilization: builtins.float = ...,
- air_util_tx: builtins.float = ...,
- num_packets_tx: builtins.int = ...,
- num_packets_rx: builtins.int = ...,
- num_packets_rx_bad: builtins.int = ...,
- num_online_nodes: builtins.int = ...,
- num_total_nodes: builtins.int = ...,
- num_rx_dupe: builtins.int = ...,
- num_tx_relay: builtins.int = ...,
- num_tx_relay_canceled: builtins.int = ...,
- heap_total_bytes: builtins.int = ...,
- heap_free_bytes: builtins.int = ...,
- num_tx_dropped: builtins.int = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["air_util_tx", b"air_util_tx", "channel_utilization", b"channel_utilization", "heap_free_bytes", b"heap_free_bytes", "heap_total_bytes", b"heap_total_bytes", "num_online_nodes", b"num_online_nodes", "num_packets_rx", b"num_packets_rx", "num_packets_rx_bad", b"num_packets_rx_bad", "num_packets_tx", b"num_packets_tx", "num_rx_dupe", b"num_rx_dupe", "num_total_nodes", b"num_total_nodes", "num_tx_dropped", b"num_tx_dropped", "num_tx_relay", b"num_tx_relay", "num_tx_relay_canceled", b"num_tx_relay_canceled", "uptime_seconds", b"uptime_seconds"]) -> None: ...
-
-global___LocalStats = LocalStats
-
-@typing.final
-class HealthMetrics(google.protobuf.message.Message):
- """
- Health telemetry metrics
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- HEART_BPM_FIELD_NUMBER: builtins.int
- SPO2_FIELD_NUMBER: builtins.int
- TEMPERATURE_FIELD_NUMBER: builtins.int
- heart_bpm: builtins.int
- """
- Heart rate (beats per minute)
- """
- spO2: builtins.int
- """
- SpO2 (blood oxygen saturation) level
- """
- temperature: builtins.float
- """
- Body temperature in degrees Celsius
- """
- def __init__(
- self,
- *,
- heart_bpm: builtins.int | None = ...,
- spO2: builtins.int | None = ...,
- temperature: builtins.float | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_heart_bpm", b"_heart_bpm", "_spO2", b"_spO2", "_temperature", b"_temperature", "heart_bpm", b"heart_bpm", "spO2", b"spO2", "temperature", b"temperature"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_heart_bpm", b"_heart_bpm", "_spO2", b"_spO2", "_temperature", b"_temperature", "heart_bpm", b"heart_bpm", "spO2", b"spO2", "temperature", b"temperature"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_heart_bpm", b"_heart_bpm"]) -> typing.Literal["heart_bpm"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_spO2", b"_spO2"]) -> typing.Literal["spO2"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_temperature", b"_temperature"]) -> typing.Literal["temperature"] | None: ...
-
-global___HealthMetrics = HealthMetrics
-
-@typing.final
-class HostMetrics(google.protobuf.message.Message):
- """
- Linux host metrics
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- UPTIME_SECONDS_FIELD_NUMBER: builtins.int
- FREEMEM_BYTES_FIELD_NUMBER: builtins.int
- DISKFREE1_BYTES_FIELD_NUMBER: builtins.int
- DISKFREE2_BYTES_FIELD_NUMBER: builtins.int
- DISKFREE3_BYTES_FIELD_NUMBER: builtins.int
- LOAD1_FIELD_NUMBER: builtins.int
- LOAD5_FIELD_NUMBER: builtins.int
- LOAD15_FIELD_NUMBER: builtins.int
- USER_STRING_FIELD_NUMBER: builtins.int
- uptime_seconds: builtins.int
- """
- Host system uptime
- """
- freemem_bytes: builtins.int
- """
- Host system free memory
- """
- diskfree1_bytes: builtins.int
- """
- Host system disk space free for /
- """
- diskfree2_bytes: builtins.int
- """
- Secondary system disk space free
- """
- diskfree3_bytes: builtins.int
- """
- Tertiary disk space free
- """
- load1: builtins.int
- """
- Host system one minute load in 1/100ths
- """
- load5: builtins.int
- """
- Host system five minute load in 1/100ths
- """
- load15: builtins.int
- """
- Host system fifteen minute load in 1/100ths
- """
- user_string: builtins.str
- """
- Optional User-provided string for arbitrary host system information
- that doesn't make sense as a dedicated entry.
- """
- def __init__(
- self,
- *,
- uptime_seconds: builtins.int = ...,
- freemem_bytes: builtins.int = ...,
- diskfree1_bytes: builtins.int = ...,
- diskfree2_bytes: builtins.int | None = ...,
- diskfree3_bytes: builtins.int | None = ...,
- load1: builtins.int = ...,
- load5: builtins.int = ...,
- load15: builtins.int = ...,
- user_string: builtins.str | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["_diskfree2_bytes", b"_diskfree2_bytes", "_diskfree3_bytes", b"_diskfree3_bytes", "_user_string", b"_user_string", "diskfree2_bytes", b"diskfree2_bytes", "diskfree3_bytes", b"diskfree3_bytes", "user_string", b"user_string"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["_diskfree2_bytes", b"_diskfree2_bytes", "_diskfree3_bytes", b"_diskfree3_bytes", "_user_string", b"_user_string", "diskfree1_bytes", b"diskfree1_bytes", "diskfree2_bytes", b"diskfree2_bytes", "diskfree3_bytes", b"diskfree3_bytes", "freemem_bytes", b"freemem_bytes", "load1", b"load1", "load15", b"load15", "load5", b"load5", "uptime_seconds", b"uptime_seconds", "user_string", b"user_string"]) -> None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_diskfree2_bytes", b"_diskfree2_bytes"]) -> typing.Literal["diskfree2_bytes"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_diskfree3_bytes", b"_diskfree3_bytes"]) -> typing.Literal["diskfree3_bytes"] | None: ...
- @typing.overload
- def WhichOneof(self, oneof_group: typing.Literal["_user_string", b"_user_string"]) -> typing.Literal["user_string"] | None: ...
-
-global___HostMetrics = HostMetrics
-
-@typing.final
-class Telemetry(google.protobuf.message.Message):
- """
- Types of Measurements the telemetry module is equipped to handle
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- TIME_FIELD_NUMBER: builtins.int
- DEVICE_METRICS_FIELD_NUMBER: builtins.int
- ENVIRONMENT_METRICS_FIELD_NUMBER: builtins.int
- AIR_QUALITY_METRICS_FIELD_NUMBER: builtins.int
- POWER_METRICS_FIELD_NUMBER: builtins.int
- LOCAL_STATS_FIELD_NUMBER: builtins.int
- HEALTH_METRICS_FIELD_NUMBER: builtins.int
- HOST_METRICS_FIELD_NUMBER: builtins.int
- time: builtins.int
- """
- Seconds since 1970 - or 0 for unknown/unset
- """
- @property
- def device_metrics(self) -> global___DeviceMetrics:
- """
- Key native device metrics such as battery level
- """
-
- @property
- def environment_metrics(self) -> global___EnvironmentMetrics:
- """
- Weather station or other environmental metrics
- """
-
- @property
- def air_quality_metrics(self) -> global___AirQualityMetrics:
- """
- Air quality metrics
- """
-
- @property
- def power_metrics(self) -> global___PowerMetrics:
- """
- Power Metrics
- """
-
- @property
- def local_stats(self) -> global___LocalStats:
- """
- Local device mesh statistics
- """
-
- @property
- def health_metrics(self) -> global___HealthMetrics:
- """
- Health telemetry metrics
- """
-
- @property
- def host_metrics(self) -> global___HostMetrics:
- """
- Linux host metrics
- """
-
- def __init__(
- self,
- *,
- time: builtins.int = ...,
- device_metrics: global___DeviceMetrics | None = ...,
- environment_metrics: global___EnvironmentMetrics | None = ...,
- air_quality_metrics: global___AirQualityMetrics | None = ...,
- power_metrics: global___PowerMetrics | None = ...,
- local_stats: global___LocalStats | None = ...,
- health_metrics: global___HealthMetrics | None = ...,
- host_metrics: global___HostMetrics | None = ...,
- ) -> None: ...
- def HasField(self, field_name: typing.Literal["air_quality_metrics", b"air_quality_metrics", "device_metrics", b"device_metrics", "environment_metrics", b"environment_metrics", "health_metrics", b"health_metrics", "host_metrics", b"host_metrics", "local_stats", b"local_stats", "power_metrics", b"power_metrics", "variant", b"variant"]) -> builtins.bool: ...
- def ClearField(self, field_name: typing.Literal["air_quality_metrics", b"air_quality_metrics", "device_metrics", b"device_metrics", "environment_metrics", b"environment_metrics", "health_metrics", b"health_metrics", "host_metrics", b"host_metrics", "local_stats", b"local_stats", "power_metrics", b"power_metrics", "time", b"time", "variant", b"variant"]) -> None: ...
- def WhichOneof(self, oneof_group: typing.Literal["variant", b"variant"]) -> typing.Literal["device_metrics", "environment_metrics", "air_quality_metrics", "power_metrics", "local_stats", "health_metrics", "host_metrics"] | None: ...
-
-global___Telemetry = Telemetry
-
-@typing.final
-class Nau7802Config(google.protobuf.message.Message):
- """
- NAU7802 Telemetry configuration, for saving to flash
- """
-
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- ZEROOFFSET_FIELD_NUMBER: builtins.int
- CALIBRATIONFACTOR_FIELD_NUMBER: builtins.int
- zeroOffset: builtins.int
- """
- The offset setting for the NAU7802
- """
- calibrationFactor: builtins.float
- """
- The calibration factor for the NAU7802
- """
- def __init__(
- self,
- *,
- zeroOffset: builtins.int = ...,
- calibrationFactor: builtins.float = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["calibrationFactor", b"calibrationFactor", "zeroOffset", b"zeroOffset"]) -> None: ...
-
-global___Nau7802Config = Nau7802Config
+class TelemetrySensorType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
diff --git a/meshtastic/protobuf/xmodem_pb2.py b/meshtastic/protobuf/xmodem_pb2.py
index 3c3dec2..e99048f 100644
--- a/meshtastic/protobuf/xmodem_pb2.py
+++ b/meshtastic/protobuf/xmodem_pb2.py
@@ -2,10 +2,10 @@
# Generated by the protocol buffer compiler. DO NOT EDIT!
# source: meshtastic/protobuf/xmodem.proto
"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
-from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
@@ -15,14 +15,14 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n meshtastic/protobuf/xmodem.proto\x12\x13meshtastic.protobuf\"\xbf\x01\n\x06XModem\x12\x34\n\x07\x63ontrol\x18\x01 \x01(\x0e\x32#.meshtastic.protobuf.XModem.Control\x12\x0b\n\x03seq\x18\x02 \x01(\r\x12\r\n\x05\x63rc16\x18\x03 \x01(\r\x12\x0e\n\x06\x62uffer\x18\x04 \x01(\x0c\"S\n\x07\x43ontrol\x12\x07\n\x03NUL\x10\x00\x12\x07\n\x03SOH\x10\x01\x12\x07\n\x03STX\x10\x02\x12\x07\n\x03\x45OT\x10\x04\x12\x07\n\x03\x41\x43K\x10\x06\x12\x07\n\x03NAK\x10\x15\x12\x07\n\x03\x43\x41N\x10\x18\x12\t\n\x05\x43TRLZ\x10\x1a\x42\x62\n\x14org.meshtastic.protoB\x0cXmodemProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
-_globals = globals()
-_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
-_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.xmodem_pb2', _globals)
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.protobuf.xmodem_pb2', globals())
if _descriptor._USE_C_DESCRIPTORS == False:
+
DESCRIPTOR._options = None
DESCRIPTOR._serialized_options = b'\n\024org.meshtastic.protoB\014XmodemProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
- _globals['_XMODEM']._serialized_start=58
- _globals['_XMODEM']._serialized_end=249
- _globals['_XMODEM_CONTROL']._serialized_start=166
- _globals['_XMODEM_CONTROL']._serialized_end=249
+ _XMODEM._serialized_start=58
+ _XMODEM._serialized_end=249
+ _XMODEM_CONTROL._serialized_start=166
+ _XMODEM_CONTROL._serialized_end=249
# @@protoc_insertion_point(module_scope)
diff --git a/meshtastic/protobuf/xmodem_pb2.pyi b/meshtastic/protobuf/xmodem_pb2.pyi
index d362ad0..58ecc7e 100644
--- a/meshtastic/protobuf/xmodem_pb2.pyi
+++ b/meshtastic/protobuf/xmodem_pb2.pyi
@@ -1,67 +1,28 @@
-"""
-@generated by mypy-protobuf. Do not edit manually!
-isort:skip_file
-"""
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
-import builtins
-import google.protobuf.descriptor
-import google.protobuf.internal.enum_type_wrapper
-import google.protobuf.message
-import sys
-import typing
+DESCRIPTOR: _descriptor.FileDescriptor
-if sys.version_info >= (3, 10):
- import typing as typing_extensions
-else:
- import typing_extensions
-
-DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
-
-@typing.final
-class XModem(google.protobuf.message.Message):
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
-
- class _Control:
- ValueType = typing.NewType("ValueType", builtins.int)
- V: typing_extensions.TypeAlias = ValueType
-
- class _ControlEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[XModem._Control.ValueType], builtins.type):
- DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
- NUL: XModem._Control.ValueType # 0
- SOH: XModem._Control.ValueType # 1
- STX: XModem._Control.ValueType # 2
- EOT: XModem._Control.ValueType # 4
- ACK: XModem._Control.ValueType # 6
- NAK: XModem._Control.ValueType # 21
- CAN: XModem._Control.ValueType # 24
- CTRLZ: XModem._Control.ValueType # 26
-
- class Control(_Control, metaclass=_ControlEnumTypeWrapper): ...
- NUL: XModem.Control.ValueType # 0
- SOH: XModem.Control.ValueType # 1
- STX: XModem.Control.ValueType # 2
- EOT: XModem.Control.ValueType # 4
- ACK: XModem.Control.ValueType # 6
- NAK: XModem.Control.ValueType # 21
- CAN: XModem.Control.ValueType # 24
- CTRLZ: XModem.Control.ValueType # 26
-
- CONTROL_FIELD_NUMBER: builtins.int
- SEQ_FIELD_NUMBER: builtins.int
- CRC16_FIELD_NUMBER: builtins.int
- BUFFER_FIELD_NUMBER: builtins.int
- control: global___XModem.Control.ValueType
- seq: builtins.int
- crc16: builtins.int
- buffer: builtins.bytes
- def __init__(
- self,
- *,
- control: global___XModem.Control.ValueType = ...,
- seq: builtins.int = ...,
- crc16: builtins.int = ...,
- buffer: builtins.bytes = ...,
- ) -> None: ...
- def ClearField(self, field_name: typing.Literal["buffer", b"buffer", "control", b"control", "crc16", b"crc16", "seq", b"seq"]) -> None: ...
-
-global___XModem = XModem
+class XModem(_message.Message):
+ __slots__ = ["buffer", "control", "crc16", "seq"]
+ class Control(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+ __slots__ = []
+ ACK: XModem.Control
+ BUFFER_FIELD_NUMBER: _ClassVar[int]
+ CAN: XModem.Control
+ CONTROL_FIELD_NUMBER: _ClassVar[int]
+ CRC16_FIELD_NUMBER: _ClassVar[int]
+ CTRLZ: XModem.Control
+ EOT: XModem.Control
+ NAK: XModem.Control
+ NUL: XModem.Control
+ SEQ_FIELD_NUMBER: _ClassVar[int]
+ SOH: XModem.Control
+ STX: XModem.Control
+ buffer: bytes
+ control: XModem.Control
+ crc16: int
+ seq: int
+ def __init__(self, control: _Optional[_Union[XModem.Control, str]] = ..., seq: _Optional[int] = ..., crc16: _Optional[int] = ..., buffer: _Optional[bytes] = ...) -> None: ...
diff --git a/nanopb_pb2.py b/nanopb_pb2.py
new file mode 100644
index 0000000..d07299d
--- /dev/null
+++ b/nanopb_pb2.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: nanopb.proto
+"""Generated protocol buffer code."""
+from google.protobuf.internal import builder as _builder
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cnanopb.proto\x1a google/protobuf/descriptor.proto\"\xa4\x07\n\rNanoPBOptions\x12\x10\n\x08max_size\x18\x01 \x01(\x05\x12\x12\n\nmax_length\x18\x0e \x01(\x05\x12\x11\n\tmax_count\x18\x02 \x01(\x05\x12&\n\x08int_size\x18\x07 \x01(\x0e\x32\x08.IntSize:\nIS_DEFAULT\x12$\n\x04type\x18\x03 \x01(\x0e\x32\n.FieldType:\nFT_DEFAULT\x12\x18\n\nlong_names\x18\x04 \x01(\x08:\x04true\x12\x1c\n\rpacked_struct\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0bpacked_enum\x18\n \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0cskip_message\x18\x06 \x01(\x08:\x05\x66\x61lse\x12\x18\n\tno_unions\x18\x08 \x01(\x08:\x05\x66\x61lse\x12\r\n\x05msgid\x18\t \x01(\r\x12\x1e\n\x0f\x61nonymous_oneof\x18\x0b \x01(\x08:\x05\x66\x61lse\x12\x15\n\x06proto3\x18\x0c \x01(\x08:\x05\x66\x61lse\x12#\n\x14proto3_singular_msgs\x18\x15 \x01(\x08:\x05\x66\x61lse\x12\x1d\n\x0e\x65num_to_string\x18\r \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0c\x66ixed_length\x18\x0f \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0b\x66ixed_count\x18\x10 \x01(\x08:\x05\x66\x61lse\x12\x1e\n\x0fsubmsg_callback\x18\x16 \x01(\x08:\x05\x66\x61lse\x12/\n\x0cmangle_names\x18\x11 \x01(\x0e\x32\x11.TypenameMangling:\x06M_NONE\x12(\n\x11\x63\x61llback_datatype\x18\x12 \x01(\t:\rpb_callback_t\x12\x34\n\x11\x63\x61llback_function\x18\x13 \x01(\t:\x19pb_default_field_callback\x12\x30\n\x0e\x64\x65scriptorsize\x18\x14 \x01(\x0e\x32\x0f.DescriptorSize:\x07\x44S_AUTO\x12\x1a\n\x0b\x64\x65\x66\x61ult_has\x18\x17 \x01(\x08:\x05\x66\x61lse\x12\x0f\n\x07include\x18\x18 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x1a \x03(\t\x12\x0f\n\x07package\x18\x19 \x01(\t\x12\x41\n\rtype_override\x18\x1b \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x19\n\x0bsort_by_tag\x18\x1c \x01(\x08:\x04true\x12.\n\rfallback_type\x18\x1d \x01(\x0e\x32\n.FieldType:\x0b\x46T_CALLBACK*i\n\tFieldType\x12\x0e\n\nFT_DEFAULT\x10\x00\x12\x0f\n\x0b\x46T_CALLBACK\x10\x01\x12\x0e\n\nFT_POINTER\x10\x04\x12\r\n\tFT_STATIC\x10\x02\x12\r\n\tFT_IGNORE\x10\x03\x12\r\n\tFT_INLINE\x10\x05*D\n\x07IntSize\x12\x0e\n\nIS_DEFAULT\x10\x00\x12\x08\n\x04IS_8\x10\x08\x12\t\n\x05IS_16\x10\x10\x12\t\n\x05IS_32\x10 \x12\t\n\x05IS_64\x10@*Z\n\x10TypenameMangling\x12\n\n\x06M_NONE\x10\x00\x12\x13\n\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n\tM_FLATTEN\x10\x02\x12\x16\n\x12M_PACKAGE_INITIALS\x10\x03*E\n\x0e\x44\x65scriptorSize\x12\x0b\n\x07\x44S_AUTO\x10\x00\x12\x08\n\x04\x44S_1\x10\x01\x12\x08\n\x04\x44S_2\x10\x02\x12\x08\n\x04\x44S_4\x10\x04\x12\x08\n\x04\x44S_8\x10\x08:E\n\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:G\n\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:E\n\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:>\n\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptionsB>\n\x18\x66i.kapsi.koti.jpa.nanopbZ\"github.com/meshtastic/go/generated')
+
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'nanopb_pb2', globals())
+if _descriptor._USE_C_DESCRIPTORS == False:
+ google_dot_protobuf_dot_descriptor__pb2.FileOptions.RegisterExtension(nanopb_fileopt)
+ google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(nanopb_msgopt)
+ google_dot_protobuf_dot_descriptor__pb2.EnumOptions.RegisterExtension(nanopb_enumopt)
+ google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(nanopb)
+
+ DESCRIPTOR._options = None
+ DESCRIPTOR._serialized_options = b'\n\030fi.kapsi.koti.jpa.nanopbZ\"github.com/meshtastic/go/generated'
+ _FIELDTYPE._serialized_start=985
+ _FIELDTYPE._serialized_end=1090
+ _INTSIZE._serialized_start=1092
+ _INTSIZE._serialized_end=1160
+ _TYPENAMEMANGLING._serialized_start=1162
+ _TYPENAMEMANGLING._serialized_end=1252
+ _DESCRIPTORSIZE._serialized_start=1254
+ _DESCRIPTORSIZE._serialized_end=1323
+ _NANOPBOPTIONS._serialized_start=51
+ _NANOPBOPTIONS._serialized_end=983
+# @@protoc_insertion_point(module_scope)
diff --git a/scripts/update_meshtastic_protobufs.py b/scripts/update_meshtastic_protobufs.py
index 5d1ef14..1014fdd 100644
--- a/scripts/update_meshtastic_protobufs.py
+++ b/scripts/update_meshtastic_protobufs.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python3
import argparse
+import re
import shutil
import subprocess
import sys
@@ -11,6 +12,39 @@ def run(cmd, cwd=None):
subprocess.run(cmd, cwd=cwd, check=True)
+def clone_ref(repo, ref, tmp_path):
+ if re.fullmatch(r"[0-9a-fA-F]{40}", ref):
+ run(["git", "clone", "--no-checkout", "--depth", "1", repo, str(tmp_path)])
+ run(["git", "fetch", "--depth", "1", "origin", ref], cwd=tmp_path)
+ run(["git", "checkout", "--detach", "FETCH_HEAD"], cwd=tmp_path)
+ return
+
+ run(["git", "clone", "--depth", "1", "--branch", ref, repo, str(tmp_path)])
+
+
+def stage_meshtastic_package(proto_root, tmp_path):
+ """Map upstream meshtastic/*.proto files to Meshview's vendored package path."""
+ if proto_root != tmp_path / "meshtastic":
+ return tmp_path, proto_root
+
+ stage_root = tmp_path / "_meshview_proto_stage"
+ staged_proto_root = stage_root / "meshtastic" / "protobuf"
+ staged_proto_root.mkdir(parents=True, exist_ok=True)
+
+ for proto in sorted(proto_root.glob("*.proto")):
+ text = proto.read_text(encoding="utf-8")
+ text = text.replace('import "meshtastic/', 'import "meshtastic/protobuf/')
+ text = text.replace('import "nanopb.proto"', 'import "meshtastic/protobuf/nanopb.proto"')
+ text = text.replace("package meshtastic;", "package meshtastic.protobuf;")
+ (staged_proto_root / proto.name).write_text(text, encoding="utf-8")
+
+ nanopb = tmp_path / "nanopb.proto"
+ if nanopb.exists():
+ shutil.copy2(nanopb, staged_proto_root / "nanopb.proto")
+
+ return stage_root, staged_proto_root
+
+
def main():
parser = argparse.ArgumentParser(description="Update Meshtastic protobufs")
parser.add_argument(
@@ -36,7 +70,7 @@ def main():
with tempfile.TemporaryDirectory(prefix="meshtastic-protobufs-") as tmp:
tmp_path = Path(tmp)
print(f"Cloning {args.repo} ({args.ref}) into {tmp_path}...")
- run(["git", "clone", "--depth", "1", "--branch", args.ref, args.repo, str(tmp_path)])
+ clone_ref(args.repo, args.ref, tmp_path)
upstream_rev = (
subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=tmp_path).decode().strip()
)
@@ -57,6 +91,7 @@ def main():
# Common locations in the meshtastic/protobufs repo
candidates = [
tmp_path / "meshtastic" / "protobuf",
+ tmp_path / "meshtastic",
tmp_path / "protobufs",
tmp_path / "protobuf",
tmp_path / "proto",
@@ -81,14 +116,17 @@ def main():
print(f"No .proto files found in {proto_root}", file=sys.stderr)
return 1
- rel_protos = [str(p.relative_to(tmp_path)) for p in protos]
+ proto_base, proto_root = stage_meshtastic_package(proto_root, tmp_path)
+ protos = sorted(proto_root.glob("*.proto"))
+ rel_protos = [str(p.relative_to(proto_base)) for p in protos]
protoc = shutil.which("protoc")
if protoc:
cmd = [
protoc,
- f"-I{tmp_path}",
+ f"-I{proto_base}",
f"--python_out={out_root}",
+ f"--pyi_out={out_root}",
*rel_protos,
]
print("Running protoc...")
@@ -107,8 +145,9 @@ def main():
sys.executable,
"-m",
"grpc_tools.protoc",
- f"-I{tmp_path}",
+ f"-I{proto_base}",
f"--python_out={out_root}",
+ f"--pyi_out={out_root}",
*rel_protos,
]
print("Running grpc_tools.protoc...")