From 7735b4b16c72077e5c4ca11595d6d052a587aecc Mon Sep 17 00:00:00 2001 From: Jm Casler Date: Tue, 30 Nov 2021 16:09:07 -0800 Subject: [PATCH] Remove the -E files --- meshtastic/__init__.py-E | 1069 ----------- meshtastic/__main__.py-E | 675 ------- meshtastic/admin_pb2.py-E | 184 -- meshtastic/apponly_pb2.py-E | 72 - meshtastic/ble.py-E | 0 meshtastic/channel_pb2.py-E | 255 --- meshtastic/deviceonly_pb2.py-E | 255 --- meshtastic/environmental_measurement_pb2.py-E | 83 - meshtastic/mesh_pb2.py-E | 1646 ----------------- meshtastic/mqtt_pb2.py-E | 86 - meshtastic/node.py-E | 404 ---- meshtastic/portnums_pb2.py-E | 132 -- meshtastic/radioconfig_pb2.py-E | 932 ---------- meshtastic/remote_hardware.py-E | 67 - meshtastic/remote_hardware_pb2.py-E | 124 -- meshtastic/storeforward_pb2.py-E | 291 --- meshtastic/test.py-E | 182 -- meshtastic/tunnel.py-E | 207 --- meshtastic/util.py-E | 90 - 19 files changed, 6754 deletions(-) delete mode 100644 meshtastic/__init__.py-E delete mode 100644 meshtastic/__main__.py-E delete mode 100644 meshtastic/admin_pb2.py-E delete mode 100644 meshtastic/apponly_pb2.py-E delete mode 100644 meshtastic/ble.py-E delete mode 100644 meshtastic/channel_pb2.py-E delete mode 100644 meshtastic/deviceonly_pb2.py-E delete mode 100644 meshtastic/environmental_measurement_pb2.py-E delete mode 100644 meshtastic/mesh_pb2.py-E delete mode 100644 meshtastic/mqtt_pb2.py-E delete mode 100644 meshtastic/node.py-E delete mode 100644 meshtastic/portnums_pb2.py-E delete mode 100644 meshtastic/radioconfig_pb2.py-E delete mode 100644 meshtastic/remote_hardware.py-E delete mode 100644 meshtastic/remote_hardware_pb2.py-E delete mode 100644 meshtastic/storeforward_pb2.py-E delete mode 100644 meshtastic/test.py-E delete mode 100644 meshtastic/tunnel.py-E delete mode 100644 meshtastic/util.py-E diff --git a/meshtastic/__init__.py-E b/meshtastic/__init__.py-E deleted file mode 100644 index 58b4354..0000000 --- a/meshtastic/__init__.py-E +++ /dev/null @@ -1,1069 +0,0 @@ -""" -# an API for Meshtastic devices - -Primary class: SerialInterface -Install with pip: "[pip3 install meshtastic](https://pypi.org/project/meshtastic/)" -Source code on [github](https://github.com/meshtastic/Meshtastic-python) - -properties of SerialInterface: - -- radioConfig - Current radio configuration and device settings, if you write to this the new settings will be applied to -the device. -- nodes - The database of received nodes. Includes always up-to-date location and username information for each -node in the mesh. This is a read-only datastructure. -- nodesByNum - like "nodes" but keyed by nodeNum instead of nodeId -- myInfo - Contains read-only information about the local radio device (software version, hardware version, etc) - -# Published PubSub topics - -We use a [publish-subscribe](https://pypubsub.readthedocs.io/en/v4.0.3/) model to communicate asynchronous events. Available -topics: - -- meshtastic.connection.established - published once we've successfully connected to the radio and downloaded the node DB -- meshtastic.connection.lost - published once we've lost our link to the radio -- meshtastic.receive.text(packet) - delivers a received packet as a dictionary, if you only care about a particular -type of packet, you should subscribe to the full topic name. If you want to see all packets, simply subscribe to "meshtastic.receive". -- meshtastic.receive.position(packet) -- meshtastic.receive.user(packet) -- meshtastic.receive.data.portnum(packet) (where portnum is an integer or well known PortNum enum) -- meshtastic.node.updated(node = NodeInfo) - published when a node in the DB changes (appears, location changed, username changed, etc...) - -We receive position, user, or data packets from the mesh. You probably only care about meshtastic.receive.data. The first argument for -that publish will be the packet. Text or binary data packets (from sendData or sendText) will both arrive this way. If you print packet -you'll see the fields in the dictionary. decoded.data.payload will contain the raw bytes that were sent. If the packet was sent with -sendText, decoded.data.text will **also** be populated with the decoded string. For ASCII these two strings will be the same, but for -unicode scripts they can be different. - -# Example Usage -``` -import meshtastic -from pubsub import pub - -def onReceive(packet, interface): # called when a packet arrives - print(f"Received: {packet}") - -def onConnection(interface, topic=pub.AUTO_TOPIC): # called when we (re)connect to the radio - # defaults to broadcast, specify a destination ID if you wish - interface.sendText("hello mesh") - -pub.subscribe(onReceive, "meshtastic.receive") -pub.subscribe(onConnection, "meshtastic.connection.established") -# By default will try to find a meshtastic device, otherwise provide a device path like /dev/ttyUSB0 -interface = meshtastic.SerialInterface() - -``` - -""" - -import pygatt -import google.protobuf.json_format -import serial -import threading -import logging -import sys -import random -import traceback -import time -import base64 -import platform -import socket -import timeago -import os -import stat -from . import mesh_pb2, portnums_pb2, apponly_pb2, admin_pb2, environmental_measurement_pb2, remote_hardware_pb2, channel_pb2, radioconfig_pb2, util -from .util import fixme, catchAndIgnore, stripnl, DeferredExecution, Timeout -from .node import Node -from pubsub import pub -from dotmap import DotMap -from datetime import datetime -from tabulate import tabulate -from typing import * -from google.protobuf.json_format import MessageToJson - -START1 = 0x94 -START2 = 0xc3 -HEADER_LEN = 4 -MAX_TO_FROM_RADIO_SIZE = 512 -defaultHopLimit = 3 - -"""A special ID that means broadcast""" -BROADCAST_ADDR = "^all" - -"""A special ID that means the local node""" -LOCAL_ADDR = "^local" - -# if using 8 bit nodenums this will be shortend on the target -BROADCAST_NUM = 0xffffffff - -"""The numeric buildnumber (shared with android apps) specifying the level of device code we are guaranteed to understand - -format is Mmmss (where M is 1+the numeric major number. i.e. 20120 means 1.1.20 -""" -OUR_APP_VERSION = 20200 - -publishingThread = DeferredExecution("publishing") - - -class ResponseHandler(NamedTuple): - """A pending response callback, waiting for a response to one of our messages""" - # requestId: int - used only as a key - callback: Callable - # FIXME, add timestamp and age out old requests - - -class KnownProtocol(NamedTuple): - """Used to automatically decode known protocol payloads""" - name: str - # portnum: int, now a key - # If set, will be called to prase as a protocol buffer - protobufFactory: Callable = None - # If set, invoked as onReceive(interface, packet) - onReceive: Callable = None - - -class MeshInterface: - """Interface class for meshtastic devices - - Properties: - - isConnected - nodes - debugOut - """ - - def __init__(self, debugOut=None, noProto=False): - """Constructor - - Keyword Arguments: - noProto -- If True, don't try to run our protocol on the link - just be a dumb serial client. - """ - self.debugOut = debugOut - self.nodes = None # FIXME - self.isConnected = threading.Event() - self.noProto = noProto - self.localNode = Node(self, -1) # We fixup nodenum later - self.myInfo = None # We don't have device info yet - self.responseHandlers = {} # A map from request ID to the handler - self.failure = None # If we've encountered a fatal exception it will be kept here - self._timeout = Timeout() - self.heartbeatTimer = None - random.seed() # FIXME, we should not clobber the random seedval here, instead tell user they must call it - self.currentPacketId = random.randint(0, 0xffffffff) - - def close(self): - """Shutdown this interface""" - if self.heartbeatTimer: - self.heartbeatTimer.cancel() - - self._sendDisconnect() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, traceback): - if exc_type is not None and exc_value is not None: - logging.error( - f'An exception of type {exc_type} with value {exc_value} has occurred') - if traceback is not None: - logging.error(f'Traceback: {traceback}') - self.close() - - def showInfo(self, file=sys.stdout): - """Show human readable summary about this object""" - owner = f"Owner: {self.getLongName()} ({self.getShortName()})" - myinfo = f"\nMy info: {stripnl(MessageToJson(self.myInfo))}" - mesh = "\nNodes in mesh:" - nodes = "" - for n in self.nodes.values(): - nodes = nodes + f" {stripnl(n)}" - infos = owner + myinfo + mesh + nodes - print(infos) - return infos - - def showNodes(self, includeSelf=True, file=sys.stdout): - """Show table summary of nodes in mesh""" - def formatFloat(value, precision=2, unit=''): - return f'{value:.{precision}f}{unit}' if value else None - - def getLH(ts): - return datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S') if ts else None - - def getTimeAgo(ts): - return timeago.format(datetime.fromtimestamp(ts), datetime.now()) if ts else None - - rows = [] - for node in self.nodes.values(): - if not includeSelf and node['num'] == self.localNode.nodeNum: - continue - - row = {"N": 0} - - user = node.get('user') - if user: - row.update({ - "User": user['longName'], - "AKA": user['shortName'], - "ID": user['id'], - }) - - pos = node.get('position') - if pos: - row.update({ - "Latitude": formatFloat(pos.get("latitude"), 4, "°"), - "Longitude": formatFloat(pos.get("longitude"), 4, "°"), - "Altitude": formatFloat(pos.get("altitude"), 0, " m"), - "Battery": formatFloat(pos.get("batteryLevel"), 2, "%"), - }) - - row.update({ - "SNR": formatFloat(node.get("snr"), 2, " dB"), - "LastHeard": getLH(node.get("lastHeard")), - "Since": getTimeAgo(node.get("lastHeard")), - }) - - rows.append(row) - - # Why doesn't this way work? - #rows.sort(key=lambda r: r.get('LastHeard', '0000'), reverse=True) - rows.sort(key=lambda r: r.get('LastHeard') or '0000', reverse=True) - for i, row in enumerate(rows): - row['N'] = i+1 - - table = tabulate(rows, headers='keys', missingval='N/A', - tablefmt='fancy_grid') - print(table) - return table - - - def getNode(self, nodeId): - """Return a node object which contains device settings and channel info""" - if nodeId == LOCAL_ADDR: - return self.localNode - else: - n = Node(self, nodeId) - n.requestConfig() - if not n.waitForConfig(): - raise Exception("Timed out waiting for node config") - return n - - def sendText(self, text: AnyStr, - destinationId=BROADCAST_ADDR, - wantAck=False, - wantResponse=False, - hopLimit=defaultHopLimit, - onResponse=None, - channelIndex=0): - """Send a utf8 string to some other node, if the node has a display it will also be shown on the device. - - Arguments: - text {string} -- The text to send - - Keyword Arguments: - destinationId {nodeId or nodeNum} -- where to send this message (default: {BROADCAST_ADDR}) - portNum -- the application portnum (similar to IP port numbers) of the destination, see portnums.proto for a list - wantAck -- True if you want the message sent in a reliable manner (with retries and ack/nak provided for delivery) - wantResponse -- True if you want the service on the other side to send an application layer response - - Returns the sent packet. The id field will be populated in this packet and can be used to track future message acks/naks. - """ - return self.sendData(text.encode("utf-8"), destinationId, - portNum=portnums_pb2.PortNum.TEXT_MESSAGE_APP, - wantAck=wantAck, - wantResponse=wantResponse, - hopLimit=hopLimit, - onResponse=onResponse, - channelIndex=channelIndex); - - def sendData(self, data, destinationId=BROADCAST_ADDR, - portNum=portnums_pb2.PortNum.PRIVATE_APP, wantAck=False, - wantResponse=False, - hopLimit=defaultHopLimit, - onResponse=None, - channelIndex=0): - """Send a data packet to some other node - - Keyword Arguments: - data -- the data to send, either as an array of bytes or as a protobuf (which will be automatically serialized to bytes) - destinationId {nodeId or nodeNum} -- where to send this message (default: {BROADCAST_ADDR}) - portNum -- the application portnum (similar to IP port numbers) of the destination, see portnums.proto for a list - wantAck -- True if you want the message sent in a reliable manner (with retries and ack/nak provided for delivery) - wantResponse -- True if you want the service on the other side to send an application layer response - onResponse -- A closure of the form funct(packet), that will be called when a response packet arrives (or the transaction is NAKed due to non receipt) - - Returns the sent packet. The id field will be populated in this packet and can be used to track future message acks/naks. - """ - if getattr(data, "SerializeToString", None): - logging.debug(f"Serializing protobuf as data: {stripnl(data)}") - data = data.SerializeToString() - - if len(data) > mesh_pb2.Constants.DATA_PAYLOAD_LEN: - raise Exception("Data payload too big") - - if portNum == portnums_pb2.PortNum.UNKNOWN_APP: # we are now more strict wrt port numbers - raise Exception("A non-zero port number must be specified") - - meshPacket = mesh_pb2.MeshPacket() - meshPacket.channel = channelIndex - meshPacket.decoded.payload = data - meshPacket.decoded.portnum = portNum - meshPacket.decoded.want_response = wantResponse - - p = self._sendPacket(meshPacket, destinationId, - wantAck=wantAck, hopLimit=hopLimit) - if onResponse is not None: - self._addResponseHandler(p.id, onResponse) - return p - - def sendPosition(self, latitude=0.0, longitude=0.0, altitude=0, timeSec=0, destinationId=BROADCAST_ADDR, wantAck=False, wantResponse=False): - """ - Send a position packet to some other node (normally a broadcast) - - Also, the device software will notice this packet and use it to automatically set its notion of - the local position. - - If timeSec is not specified (recommended), we will use the local machine time. - - Returns the sent packet. The id field will be populated in this packet and can be used to track future message acks/naks. - """ - p = mesh_pb2.Position() - if(latitude != 0.0): - p.latitude_i = int(latitude / 1e-7) - - if(longitude != 0.0): - p.longitude_i = int(longitude / 1e-7) - - if(altitude != 0): - p.altitude = int(altitude) - - if timeSec == 0: - timeSec = time.time() # returns unix timestamp in seconds - p.time = int(timeSec) - - return self.sendData(p, destinationId, - portNum=portnums_pb2.PortNum.POSITION_APP, - wantAck=wantAck, - wantResponse=wantResponse) - - def _addResponseHandler(self, requestId, callback): - self.responseHandlers[requestId] = ResponseHandler(callback) - - def _sendPacket(self, meshPacket, - destinationId=BROADCAST_ADDR, - wantAck=False, hopLimit=defaultHopLimit): - """Send a MeshPacket to the specified node (or if unspecified, broadcast). - You probably don't want this - use sendData instead. - - Returns the sent packet. The id field will be populated in this packet and - can be used to track future message acks/naks. - """ - - # We allow users to talk to the local node before we've completed the full connection flow... - if(self.myInfo is not None and destinationId != self.myInfo.my_node_num): - self._waitConnected() - - toRadio = mesh_pb2.ToRadio() - - if destinationId is None: - raise Exception("destinationId must not be None") - elif isinstance(destinationId, int): - nodeNum = destinationId - elif destinationId == BROADCAST_ADDR: - nodeNum = BROADCAST_NUM - elif destinationId == LOCAL_ADDR: - nodeNum = self.myInfo.my_node_num - # A simple hex style nodeid - we can parse this without needing the DB - elif destinationId.startswith("!"): - nodeNum = int(destinationId[1:], 16) - else: - node = self.nodes.get(destinationId) - if not node: - raise Exception(f"NodeId {destinationId} not found in DB") - nodeNum = node['num'] - - meshPacket.to = nodeNum - meshPacket.want_ack = wantAck - meshPacket.hop_limit = hopLimit - - # if the user hasn't set an ID for this packet (likely and recommended), we should pick a new unique ID - # so the message can be tracked. - if meshPacket.id == 0: - meshPacket.id = self._generatePacketId() - - toRadio.packet.CopyFrom(meshPacket) - #logging.debug(f"Sending packet: {stripnl(meshPacket)}") - self._sendToRadio(toRadio) - return meshPacket - - def waitForConfig(self): - """Block until radio config is received. Returns True if config has been received.""" - success = self._timeout.waitForSet(self, attrs=('myInfo', 'nodes') - ) and self.localNode.waitForConfig() - if not success: - raise Exception("Timed out waiting for interface config") - - def getMyNodeInfo(self): - if self.myInfo is None: - return None - return self.nodesByNum.get(self.myInfo.my_node_num) - - def getMyUser(self): - nodeInfo = self.getMyNodeInfo() - if nodeInfo is not None: - return nodeInfo.get('user') - return None - - def getLongName(self): - user = self.getMyUser() - if user is not None: - return user.get('longName', None) - return None - - def getShortName(self): - user = self.getMyUser() - if user is not None: - return user.get('shortName', None) - return None - - def _waitConnected(self): - """Block until the initial node db download is complete, or timeout - and raise an exception""" - if not self.isConnected.wait(10.0): # timeout after 10 seconds - raise Exception("Timed out waiting for connection completion") - - # If we failed while connecting, raise the connection to the client - if self.failure: - raise self.failure - - def _generatePacketId(self): - """Get a new unique packet ID""" - if self.currentPacketId is None: - raise Exception("Not connected yet, can not generate packet") - else: - self.currentPacketId = (self.currentPacketId + 1) & 0xffffffff - return self.currentPacketId - - def _disconnected(self): - """Called by subclasses to tell clients this interface has disconnected""" - self.isConnected.clear() - publishingThread.queueWork(lambda: pub.sendMessage( - "meshtastic.connection.lost", interface=self)) - - def _startHeartbeat(self): - """We need to send a heartbeat message to the device every X seconds""" - def callback(): - self.heartbeatTimer = None - prefs = self.localNode.radioConfig.preferences - i = prefs.phone_timeout_secs / 2 - logging.debug(f"Sending heartbeat, interval {i}") - if i != 0: - self.heartbeatTimer = threading.Timer(i, callback) - self.heartbeatTimer.start() - p = mesh_pb2.ToRadio() - self._sendToRadio(p) - - callback() # run our periodic callback now, it will make another timer if necessary - - def _connected(self): - """Called by this class to tell clients we are now fully connected to a node - """ - # (because I'm lazy) _connected might be called when remote Node - # objects complete their config reads, don't generate redundant isConnected - # for the local interface - if not self.isConnected.is_set(): - self.isConnected.set() - self._startHeartbeat() - publishingThread.queueWork(lambda: pub.sendMessage( - "meshtastic.connection.established", interface=self)) - - def _startConfig(self): - """Start device packets flowing""" - self.myInfo = None - self.nodes = {} # nodes keyed by ID - self.nodesByNum = {} # nodes keyed by nodenum - - startConfig = mesh_pb2.ToRadio() - self.configId = random.randint(0, 0xffffffff) - startConfig.want_config_id = self.configId - self._sendToRadio(startConfig) - - def _sendDisconnect(self): - """Tell device we are done using it""" - m = mesh_pb2.ToRadio() - m.disconnect = True - self._sendToRadio(m) - - def _sendToRadio(self, toRadio): - """Send a ToRadio protobuf to the device""" - if self.noProto: - logging.warn( - f"Not sending packet because protocol use is disabled by noProto") - else: - #logging.debug(f"Sending toRadio: {stripnl(toRadio)}") - self._sendToRadioImpl(toRadio) - - def _sendToRadioImpl(self, toRadio): - """Send a ToRadio protobuf to the device""" - logging.error(f"Subclass must provide toradio: {toRadio}") - - def _handleConfigComplete(self): - """ - Done with initial config messages, now send regular MeshPackets to ask for settings and channels - """ - self.localNode.requestConfig() - - def _handleFromRadio(self, fromRadioBytes): - """ - Handle a packet that arrived from the radio(update model and publish events) - - Called by subclasses.""" - fromRadio = mesh_pb2.FromRadio() - fromRadio.ParseFromString(fromRadioBytes) - asDict = google.protobuf.json_format.MessageToDict(fromRadio) - #logging.debug(f"Received from radio: {fromRadio}") - if fromRadio.HasField("my_info"): - self.myInfo = fromRadio.my_info - self.localNode.nodeNum = self.myInfo.my_node_num - logging.debug(f"Received myinfo: {stripnl(fromRadio.my_info)}") - - failmsg = None - # Check for app too old - if self.myInfo.min_app_version > OUR_APP_VERSION: - failmsg = "This device needs a newer python client, please \"pip install --upgrade meshtastic\". For more information see https://tinyurl.com/5bjsxu32" - - # check for firmware too old - if self.myInfo.max_channels == 0: - failmsg = "This version of meshtastic-python requires device firmware version 1.2 or later. For more information see https://tinyurl.com/5bjsxu32" - - if failmsg: - self.failure = Exception(failmsg) - self.isConnected.set() # let waitConnected return this exception - self.close() - - elif fromRadio.HasField("node_info"): - node = asDict["nodeInfo"] - try: - self._fixupPosition(node["position"]) - except: - logging.debug("Node without position") - - logging.debug(f"Received nodeinfo: {node}") - - self.nodesByNum[node["num"]] = node - if "user" in node: # Some nodes might not have user/ids assigned yet - self.nodes[node["user"]["id"]] = node - publishingThread.queueWork(lambda: pub.sendMessage("meshtastic.node.updated", - node=node, interface=self)) - elif fromRadio.config_complete_id == self.configId: - # we ignore the config_complete_id, it is unneeded for our stream API fromRadio.config_complete_id - logging.debug(f"Config complete ID {self.configId}") - self._handleConfigComplete() - elif fromRadio.HasField("packet"): - self._handlePacketFromRadio(fromRadio.packet) - elif fromRadio.rebooted: - # Tell clients the device went away. Careful not to call the overridden subclass version that closes the serial port - MeshInterface._disconnected(self) - - self._startConfig() # redownload the node db etc... - else: - logging.debug("Unexpected FromRadio payload") - - def _fixupPosition(self, position): - """Convert integer lat/lon into floats - - Arguments: - position {Position dictionary} -- object ot fix up - """ - if "latitudeI" in position: - position["latitude"] = position["latitudeI"] * 1e-7 - if "longitudeI" in position: - position["longitude"] = position["longitudeI"] * 1e-7 - - def _nodeNumToId(self, num): - """Map a node node number to a node ID - - Arguments: - num {int} -- Node number - - Returns: - string -- Node ID - """ - if num == BROADCAST_NUM: - return BROADCAST_ADDR - - try: - return self.nodesByNum[num]["user"]["id"] - except: - logging.debug(f"Node {num} not found for fromId") - return None - - def _getOrCreateByNum(self, nodeNum): - """Given a nodenum find the NodeInfo in the DB (or create if necessary)""" - if nodeNum == BROADCAST_NUM: - raise Exception("Can not create/find nodenum by the broadcast num") - - if nodeNum in self.nodesByNum: - return self.nodesByNum[nodeNum] - else: - n = {"num": nodeNum} # Create a minimial node db entry - self.nodesByNum[nodeNum] = n - return n - - def _handlePacketFromRadio(self, meshPacket): - """Handle a MeshPacket that just arrived from the radio - - Will publish one of the following events: - - meshtastic.receive.text(packet = MeshPacket dictionary) - - meshtastic.receive.position(packet = MeshPacket dictionary) - - meshtastic.receive.user(packet = MeshPacket dictionary) - - meshtastic.receive.data(packet = MeshPacket dictionary) - """ - - asDict = google.protobuf.json_format.MessageToDict(meshPacket) - - # We normally decompose the payload into a dictionary so that the client - # doesn't need to understand protobufs. But advanced clients might - # want the raw protobuf, so we provide it in "raw" - asDict["raw"] = meshPacket - - # from might be missing if the nodenum was zero. - if not "from" in asDict: - asDict["from"] = 0 - logging.error( - f"Device returned a packet we sent, ignoring: {stripnl(asDict)}") - return - if not "to" in asDict: - asDict["to"] = 0 - - # /add fromId and toId fields based on the node ID - try: - asDict["fromId"] = self._nodeNumToId(asDict["from"]) - except Exception as ex: - logging.warn(f"Not populating fromId {ex}") - try: - asDict["toId"] = self._nodeNumToId(asDict["to"]) - except Exception as ex: - logging.warn(f"Not populating toId {ex}") - - # We could provide our objects as DotMaps - which work with . notation or as dictionaries - # asObj = DotMap(asDict) - topic = "meshtastic.receive" # Generic unknown packet type - - decoded = asDict["decoded"] - # The default MessageToDict converts byte arrays into base64 strings. - # We don't want that - it messes up data payload. So slam in the correct - # byte array. - decoded["payload"] = meshPacket.decoded.payload - - # UNKNOWN_APP is the default protobuf portnum value, and therefore if not set it will not be populated at all - # to make API usage easier, set it to prevent confusion - if not "portnum" in decoded: - decoded["portnum"] = portnums_pb2.PortNum.Name( - portnums_pb2.PortNum.UNKNOWN_APP) - - portnum = decoded["portnum"] - - topic = f"meshtastic.receive.data.{portnum}" - - # decode position protobufs and update nodedb, provide decoded version as "position" in the published msg - # move the following into a 'decoders' API that clients could register? - portNumInt = meshPacket.decoded.portnum # we want portnum as an int - handler = protocols.get(portNumInt) - # The decoded protobuf as a dictionary (if we understand this message) - p = None - if handler is not None: - topic = f"meshtastic.receive.{handler.name}" - - # Convert to protobuf if possible - if handler.protobufFactory is not None: - pb = handler.protobufFactory() - pb.ParseFromString(meshPacket.decoded.payload) - p = google.protobuf.json_format.MessageToDict(pb) - asDict["decoded"][handler.name] = p - # Also provide the protobuf raw - asDict["decoded"][handler.name]["raw"] = pb - - # Call specialized onReceive if necessary - if handler.onReceive is not None: - handler.onReceive(self, asDict) - - # Is this message in response to a request, if so, look for a handler - requestId = decoded.get("requestId") - if requestId is not None: - # We ignore ACK packets, but send NAKs and data responses to the handlers - routing = decoded.get("routing") - isAck = routing is not None and ("errorReason" not in routing) - if not isAck: - # we keep the responseHandler in dict until we get a non ack - handler = self.responseHandlers.pop(requestId, None) - if handler is not None: - handler.callback(asDict) - - logging.debug(f"Publishing {topic}: packet={stripnl(asDict)} ") - publishingThread.queueWork(lambda: pub.sendMessage( - topic, packet=asDict, interface=self)) - - -# Our standard BLE characteristics -TORADIO_UUID = "f75c76d2-129e-4dad-a1dd-7866124401e7" -FROMRADIO_UUID = "8ba2bcc2-ee02-4a55-a531-c525c5e454d5" -FROMNUM_UUID = "ed9da18c-a800-4f66-a670-aa7547e34453" - - -class BLEInterface(MeshInterface): - """A not quite ready - FIXME - BLE interface to devices""" - - def __init__(self, address, debugOut=None): - self.address = address - self.adapter = pygatt.GATTToolBackend() # BGAPIBackend() - self.adapter.start() - logging.debug(f"Connecting to {self.address}") - self.device = self.adapter.connect(address) - logging.debug("Connected to device") - # fromradio = self.device.char_read(FROMRADIO_UUID) - MeshInterface.__init__(self, debugOut=debugOut) - - self._readFromRadio() # read the initial responses - - def handle_data(handle, data): - self._handleFromRadio(data) - - self.device.subscribe(FROMNUM_UUID, callback=handle_data) - - def _sendToRadioImpl(self, toRadio): - """Send a ToRadio protobuf to the device""" - #logging.debug(f"Sending: {stripnl(toRadio)}") - b = toRadio.SerializeToString() - self.device.char_write(TORADIO_UUID, b) - - def close(self): - MeshInterface.close(self) - self.adapter.stop() - - def _readFromRadio(self): - wasEmpty = False - while not wasEmpty: - b = self.device.char_read(FROMRADIO_UUID) - wasEmpty = len(b) == 0 - if not wasEmpty: - self._handleFromRadio(b) - - -class StreamInterface(MeshInterface): - """Interface class for meshtastic devices over a stream link (serial, TCP, etc)""" - - def __init__(self, debugOut=None, noProto=False, connectNow=True): - """Constructor, opens a connection to self.stream - - Keyword Arguments: - devPath {string} -- A filepath to a device, i.e. /dev/ttyUSB0 (default: {None}) - debugOut {stream} -- If a stream is provided, any debug serial output from the device will be emitted to that stream. (default: {None}) - - Raises: - Exception: [description] - Exception: [description] - """ - - if not hasattr(self, 'stream'): - raise Exception( - "StreamInterface is now abstract (to update existing code create SerialInterface instead)") - self._rxBuf = bytes() # empty - self._wantExit = False - - # FIXME, figure out why daemon=True causes reader thread to exit too early - self._rxThread = threading.Thread( - target=self.__reader, args=(), daemon=True) - - MeshInterface.__init__(self, debugOut=debugOut, noProto=noProto) - - # Start the reader thread after superclass constructor completes init - if connectNow: - self.connect() - if not noProto: - self.waitForConfig() - - def connect(self): - """Connect to our radio - - Normally this is called automatically by the constructor, but if you passed in connectNow=False you can manually - start the reading thread later. - """ - - # Send some bogus UART characters to force a sleeping device to wake, and if the reading statemachine was parsing a bad packet make sure - # we write enought start bytes to force it to resync (we don't use START1 because we want to ensure it is looking for START1) - p = bytearray([START2] * 32) - self._writeBytes(p) - time.sleep(0.1) # wait 100ms to give device time to start running - - self._rxThread.start() - - self._startConfig() - - if not self.noProto: # Wait for the db download if using the protocol - self._waitConnected() - - def _disconnected(self): - """We override the superclass implementation to close our port""" - MeshInterface._disconnected(self) - - logging.debug("Closing our port") - if not self.stream is None: - self.stream.close() - self.stream = None - - def _writeBytes(self, b): - """Write an array of bytes to our stream and flush""" - if self.stream: # ignore writes when stream is closed - self.stream.write(b) - self.stream.flush() - - def _readBytes(self, len): - """Read an array of bytes from our stream""" - return self.stream.read(len) - - def _sendToRadioImpl(self, toRadio): - """Send a ToRadio protobuf to the device""" - logging.debug(f"Sending: {stripnl(toRadio)}") - b = toRadio.SerializeToString() - bufLen = len(b) - # We convert into a string, because the TCP code doesn't work with byte arrays - header = bytes([START1, START2, (bufLen >> 8) & 0xff, bufLen & 0xff]) - self._writeBytes(header + b) - - def close(self): - """Close a connection to the device""" - logging.debug("Closing stream") - MeshInterface.close(self) - # pyserial cancel_read doesn't seem to work, therefore we ask the reader thread to close things for us - self._wantExit = True - if self._rxThread != threading.current_thread(): - self._rxThread.join() # wait for it to exit - - def __reader(self): - """The reader thread that reads bytes from our stream""" - empty = bytes() - - try: - while not self._wantExit: - # logging.debug("reading character") - b = self._readBytes(1) - # logging.debug("In reader loop") - # logging.debug(f"read returned {b}") - if len(b) > 0: - c = b[0] - ptr = len(self._rxBuf) - - # Assume we want to append this byte, fixme use bytearray instead - self._rxBuf = self._rxBuf + b - - if ptr == 0: # looking for START1 - if c != START1: - self._rxBuf = empty # failed to find start - if self.debugOut != None: - try: - self.debugOut.write(b.decode("utf-8")) - except: - self.debugOut.write('?') - - elif ptr == 1: # looking for START2 - if c != START2: - self._rxBuf = empty # failed to find start2 - elif ptr >= HEADER_LEN - 1: # we've at least got a header - # big endian length follos header - packetlen = (self._rxBuf[2] << 8) + self._rxBuf[3] - - if ptr == HEADER_LEN - 1: # we _just_ finished reading the header, validate length - if packetlen > MAX_TO_FROM_RADIO_SIZE: - self._rxBuf = empty # length ws out out bounds, restart - - if len(self._rxBuf) != 0 and ptr + 1 >= packetlen + HEADER_LEN: - try: - self._handleFromRadio(self._rxBuf[HEADER_LEN:]) - except Exception as ex: - logging.error( - f"Error while handling message from radio {ex}") - traceback.print_exc() - self._rxBuf = empty - else: - # logging.debug(f"timeout") - pass - except serial.SerialException as ex: - if not self._wantExit: # We might intentionally get an exception during shutdown - logging.warn( - f"Meshtastic serial port disconnected, disconnecting... {ex}") - except OSError as ex: - if not self._wantExit: # We might intentionally get an exception during shutdown - logging.error( - f"Unexpected OSError, terminating meshtastic reader... {ex}") - except Exception as ex: - logging.error( - f"Unexpected exception, terminating meshtastic reader... {ex}") - finally: - logging.debug("reader is exiting") - self._disconnected() - - -class SerialInterface(StreamInterface): - """Interface class for meshtastic devices over a serial link""" - - def __init__(self, devPath=None, debugOut=None, noProto=False, connectNow=True): - """Constructor, opens a connection to a specified serial port, or if unspecified try to - find one Meshtastic device by probing - - Keyword Arguments: - devPath {string} -- A filepath to a device, i.e. /dev/ttyUSB0 (default: {None}) - debugOut {stream} -- If a stream is provided, any debug serial output from the device will be emitted to that stream. (default: {None}) - """ - - if devPath is None: - ports = util.findPorts() - if len(ports) == 0: - raise Exception("No Meshtastic devices detected") - elif len(ports) > 1: - raise Exception( - f"Multiple ports detected, you must specify a device, such as {ports[0]}") - else: - devPath = ports[0] - - logging.debug(f"Connecting to {devPath}") - - # Note: we provide None for port here, because we will be opening it later - self.stream = serial.Serial( - None, 921600, exclusive=True, timeout=0.5, write_timeout=0) - - # rts=False Needed to prevent TBEAMs resetting on OSX, because rts is connected to reset - self.stream.port = devPath - - # HACK: If the platform driving the serial port is unable to leave the RTS pin in high-impedance - # mode, set RTS to false so that the device platform won't be reset spuriously. - # Linux does this properly, so don't apply this hack on Linux (because it makes the reset button not work). - if self._hostPlatformAlwaysDrivesUartRts(): - self.stream.rts = False - self.stream.open() - - StreamInterface.__init__( - self, debugOut=debugOut, noProto=noProto, connectNow=connectNow) - - """true if platform driving the serial port is Windows Subsystem for Linux 1.""" - def _isWsl1(self): - # WSL1 identifies itself as Linux, but has a special char device at /dev/lxss for use with session control, - # e.g. /init. We should treat WSL1 as Windows for the RTS-driving hack because the underlying platfrom - # serial driver for the CP21xx still exhibits the buggy behavior. - # WSL2 is not covered here, as it does not (as of 2021-May-25) support the appropriate functionality to - # share or pass-through serial ports. - try: - # Claims to be Linux, but has /dev/lxss; must be WSL 1 - return platform.system() == 'Linux' and stat.S_ISCHR(os.stat('/dev/lxss').st_mode); - except: - # Couldn't stat /dev/lxss special device; not WSL1 - return False; - - def _hostPlatformAlwaysDrivesUartRts(self): - # OS-X/Windows seems to have a bug in its CP21xx serial drivers. It ignores that we asked for no RTSCTS - # control and will always drive RTS either high or low (rather than letting the CP102 leave - # it as an open-collector floating pin). - # TODO: When WSL2 supports USB passthrough, this will get messier. If/when WSL2 gets virtual serial - # ports that "share" the Windows serial port (and thus the Windows drivers), this code will need to be - # updated to reflect that as well -- or if T-Beams get made with an alternate USB to UART bridge that has - # a less buggy driver. - return platform.system() != 'Linux' or self._isWsl1(); - -class TCPInterface(StreamInterface): - """Interface class for meshtastic devices over a TCP link""" - - def __init__(self, hostname: AnyStr, debugOut=None, noProto=False, connectNow=True, portNumber=4403): - """Constructor, opens a connection to a specified IP address/hostname - - Keyword Arguments: - hostname {string} -- Hostname/IP address of the device to connect to - """ - - logging.debug(f"Connecting to {hostname}") - - server_address = (hostname, portNumber) - sock = socket.create_connection(server_address) - - # Instead of wrapping as a stream, we use the native socket API - # self.stream = sock.makefile('rw') - self.stream = None - self.socket = sock - - StreamInterface.__init__( - self, debugOut=debugOut, noProto=noProto, connectNow=connectNow) - - def close(self): - """Close a connection to the device""" - logging.debug("Closing TCP stream") - StreamInterface.close(self) - # Sometimes the socket read might be blocked in the reader thread. Therefore we force the shutdown by closing - # the socket here - self._wantExit = True - if not self.socket is None: - try: - self.socket.shutdown(socket.SHUT_RDWR) - except: - pass # Ignore errors in shutdown, because we might have a race with the server - self.socket.close() - - def _writeBytes(self, b): - """Write an array of bytes to our stream and flush""" - self.socket.send(b) - - def _readBytes(self, len): - """Read an array of bytes from our stream""" - return self.socket.recv(len) - - -def _onTextReceive(iface, asDict): - """Special text auto parsing for received messages""" - # We don't throw if the utf8 is invalid in the text message. Instead we just don't populate - # the decoded.data.text and we log an error message. This at least allows some delivery to - # the app and the app can deal with the missing decoded representation. - # - # Usually btw this problem is caused by apps sending binary data but setting the payload type to - # text. - try: - asBytes = asDict["decoded"]["payload"] - asDict["decoded"]["text"] = asBytes.decode("utf-8") - except Exception as ex: - logging.error(f"Malformatted utf8 in text message: {ex}") - _receiveInfoUpdate(iface, asDict) - - -def _onPositionReceive(iface, asDict): - """Special auto parsing for received messages""" - p = asDict["decoded"]["position"] - iface._fixupPosition(p) - # update node DB as needed - iface._getOrCreateByNum(asDict["from"])["position"] = p - - -def _onNodeInfoReceive(iface, asDict): - """Special auto parsing for received messages""" - p = asDict["decoded"]["user"] - # decode user protobufs and update nodedb, provide decoded version as "position" in the published msg - # update node DB as needed - n = iface._getOrCreateByNum(asDict["from"]) - n["user"] = p - # We now have a node ID, make sure it is uptodate in that table - iface.nodes[p["id"]] = n - _receiveInfoUpdate(iface, asDict) - - -def _receiveInfoUpdate(iface, asDict): - iface._getOrCreateByNum(asDict["from"])["lastReceived"] = asDict - iface._getOrCreateByNum(asDict["from"])["lastHeard"] = asDict.get("rxTime") - iface._getOrCreateByNum(asDict["from"])["snr"] = asDict.get("rxSnr") - iface._getOrCreateByNum(asDict["from"])["hopLimit"] = asDict.get("hopLimit") - - -"""Well known message payloads can register decoders for automatic protobuf parsing""" -protocols = { - portnums_pb2.PortNum.TEXT_MESSAGE_APP: KnownProtocol("text", onReceive=_onTextReceive), - portnums_pb2.PortNum.POSITION_APP: KnownProtocol("position", mesh_pb2.Position, _onPositionReceive), - portnums_pb2.PortNum.NODEINFO_APP: KnownProtocol("user", mesh_pb2.User, _onNodeInfoReceive), - portnums_pb2.PortNum.ADMIN_APP: KnownProtocol("admin", admin_pb2.AdminMessage), - portnums_pb2.PortNum.ROUTING_APP: KnownProtocol("routing", mesh_pb2.Routing), - portnums_pb2.PortNum.ENVIRONMENTAL_MEASUREMENT_APP: KnownProtocol("environmental", environmental_measurement_pb2.EnvironmentalMeasurement), - portnums_pb2.PortNum.REMOTE_HARDWARE_APP: KnownProtocol( - "remotehw", remote_hardware_pb2.HardwareMessage) -} diff --git a/meshtastic/__main__.py-E b/meshtastic/__main__.py-E deleted file mode 100644 index 193ef02..0000000 --- a/meshtastic/__main__.py-E +++ /dev/null @@ -1,675 +0,0 @@ -#!python3 - -import argparse -import platform -import logging -import sys -import codecs -import time -import base64 -import os -from . import SerialInterface, TCPInterface, BLEInterface, test, remote_hardware -from pubsub import pub -from . import mesh_pb2, portnums_pb2, channel_pb2 -from .util import stripnl -import google.protobuf.json_format -import pyqrcode -import traceback -import pkg_resources - -"""We only import the tunnel code if we are on a platform that can run it""" -have_tunnel = platform.system() == 'Linux' - -"""The command line arguments""" -args = None - -"""The parser for arguments""" -parser = argparse.ArgumentParser() - -channelIndex = 0 - - -def onReceive(packet, interface): - """Callback invoked when a packet arrives""" - try: - d = packet.get('decoded') - - # Exit once we receive a reply - if args.sendtext and packet["to"] == interface.myInfo.my_node_num and d["portnum"] == portnums_pb2.PortNum.TEXT_MESSAGE_APP: - interface.close() # after running command then exit - - # Reply to every received message with some stats - if args.reply: - msg = d.get('text') - if msg: - #shortName = packet['decoded']['shortName'] - rxSnr = packet['rxSnr'] - hopLimit = packet['hopLimit'] - print(f"message: {msg}") - reply = "got msg \'{}\' with rxSnr: {} and hopLimit: {}".format( - msg, rxSnr, hopLimit) - print("Sending reply: ", reply) - interface.sendText(reply) - - except Exception as ex: - print(ex) - - -def onConnection(interface, topic=pub.AUTO_TOPIC): - """Callback invoked when we connect/disconnect from a radio""" - print(f"Connection changed: {topic.getName()}") - - -trueTerms = {"t", "true", "yes"} -falseTerms = {"f", "false", "no"} - - -def genPSK256(): - return os.urandom(32) - - -def fromPSK(valstr): - """A special version of fromStr that assumes the user is trying to set a PSK. - In that case we also allow "none", "default" or "random" (to have python generate one), or simpleN - """ - if valstr == "random": - return genPSK256() - elif valstr == "none": - return bytes([0]) # Use the 'no encryption' PSK - elif valstr == "default": - return bytes([1]) # Use default channel psk - elif valstr.startswith("simple"): - # Use one of the single byte encodings - return bytes([int(valstr[6:]) + 1]) - else: - return fromStr(valstr) - - -def fromStr(valstr): - """try to parse as int, float or bool (and fallback to a string as last resort) - - Returns: an int, bool, float, str or byte array (for strings of hex digits) - - Args: - valstr (string): A user provided string - """ - if(len(valstr) == 0): # Treat an emptystring as an empty bytes - val = bytes() - elif(valstr.startswith('0x')): - # if needed convert to string with asBytes.decode('utf-8') - val = bytes.fromhex(valstr[2:]) - elif valstr in trueTerms: - val = True - elif valstr in falseTerms: - val = False - else: - try: - val = int(valstr) - except ValueError: - try: - val = float(valstr) - except ValueError: - val = valstr # Not a float or an int, assume string - - return val - - -never = 0xffffffff -oneday = 24 * 60 * 60 - - -def getPref(attributes, name): - """Get a channel or preferences value""" - - objDesc = attributes.DESCRIPTOR - field = objDesc.fields_by_name.get(name) - if not field: - print(f"{attributes.__class__.__name__} doesn't have an attribute called {name}, so you can not get it.") - print(f"Choices are:") - for f in objDesc.fields: - print(f" {f.name}") - return - - # okay - try to read the value - try: - try: - val = getattr(attributes, name) - except TypeError as ex: - # The getter didn't like our arg type guess try again as a string - val = getattr(attributes, name) - - # succeeded! - print(f"{name}: {str(val)}") - except Exception as ex: - print(f"Can't get {name} due to {ex}") - - -def setPref(attributes, name, valStr): - """Set a channel or preferences value""" - - objDesc = attributes.DESCRIPTOR - field = objDesc.fields_by_name.get(name) - if not field: - print(f"{attributes.__class__.__name__} doesn't have an attribute called {name}, so you can not set it.") - print(f"Choices are:") - for f in objDesc.fields: - print(f" {f.name}") - return - - val = fromStr(valStr) - - enumType = field.enum_type - if enumType and type(val) == str: - # We've failed so far to convert this string into an enum, try to find it by reflection - e = enumType.values_by_name.get(val) - if e: - val = e.number - else: - print(f"{name} doesn't have an enum called {val}, so you can not set it.") - print(f"Choices are:") - for f in enumType.values: - print(f" {f.name}") - return - - # okay - try to read the value - try: - try: - setattr(attributes, name, val) - except TypeError as ex: - # The setter didn't like our arg type guess try again as a string - setattr(attributes, name, valStr) - - # succeeded! - print(f"Set {name} to {valStr}") - except Exception as ex: - print(f"Can't set {name} due to {ex}") - - -targetNode = None - - -def onConnected(interface): - """Callback invoked when we connect to a radio""" - closeNow = False # Should we drop the connection after we finish? - try: - global args - print("Connected to radio") - - def getNode(): - """This operation could be expensive, so we try to cache the results""" - global targetNode - if not targetNode: - targetNode = interface.getNode(args.destOrLocal) - return targetNode - - if args.setlat or args.setlon or args.setalt: - closeNow = True - - alt = 0 - lat = 0.0 - lon = 0.0 - time = 0 # always set time, but based on the local clock - prefs = interface.localNode.radioConfig.preferences - if args.setalt: - alt = int(args.setalt) - prefs.fixed_position = True - print(f"Fixing altitude at {alt} meters") - if args.setlat: - lat = float(args.setlat) - prefs.fixed_position = True - print(f"Fixing latitude at {lat} degrees") - if args.setlon: - lon = float(args.setlon) - prefs.fixed_position = True - print(f"Fixing longitude at {lon} degrees") - - print("Setting device position") - # can include lat/long/alt etc: latitude = 37.5, longitude = -122.1 - interface.sendPosition(lat, lon, alt, time) - interface.localNode.writeConfig() - elif not args.no_time: - # We normally provide a current time to the mesh when we connect - interface.sendPosition() - - if args.set_owner: - closeNow = True - print(f"Setting device owner to {args.set_owner}") - getNode().setOwner(args.set_owner) - - if args.set_ham: - closeNow = True - print( - f"Setting HAM ID to {args.set_ham} and turning off encryption") - getNode().setOwner(args.set_ham, is_licensed=True) - # Must turn off crypt on primary channel - ch = getNode().channels[0] - ch.settings.psk = fromPSK("none") - print(f"Writing modified channels to device") - getNode().writeChannel(0) - - if args.reboot: - closeNow = True - getNode().reboot() - - if args.sendtext: - closeNow = True - print(f"Sending text message {args.sendtext} to {args.destOrAll}") - interface.sendText(args.sendtext, args.destOrAll, - wantAck=True) - - if args.sendping: - print(f"Sending ping message {args.sendtext} to {args.destOrAll}") - payload = str.encode("test string") - interface.sendData(payload, args.destOrAll, portNum=portnums_pb2.PortNum.REPLY_APP, - wantAck=True, wantResponse=True) - - if args.gpio_wrb or args.gpio_rd or args.gpio_watch: - rhc = remote_hardware.RemoteHardwareClient(interface) - - if args.gpio_wrb: - bitmask = 0 - bitval = 0 - for wrpair in (args.gpio_wrb or []): - bitmask |= 1 << int(wrpair[0]) - bitval |= int(wrpair[1]) << int(wrpair[0]) - print( - f"Writing GPIO mask 0x{bitmask:x} with value 0x{bitval:x} to {args.dest}") - rhc.writeGPIOs(args.dest, bitmask, bitval) - closeNow = True - - if args.gpio_rd: - bitmask = int(args.gpio_rd, 16) - print(f"Reading GPIO mask 0x{bitmask:x} from {args.dest}") - - def onResponse(packet): - """A closure to handle the response packet""" - hw = packet["decoded"]["remotehw"] - print(f'GPIO read response gpio_value={hw["gpioValue"]}') - sys.exit(0) # Just force an exit (FIXME - ugly) - - rhc.readGPIOs(args.dest, bitmask, onResponse) - - if args.gpio_watch: - bitmask = int(args.gpio_watch, 16) - print(f"Watching GPIO mask 0x{bitmask:x} from {args.dest}") - rhc.watchGPIOs(args.dest, bitmask) - - # handle settings - if args.set: - closeNow = True - prefs = getNode().radioConfig.preferences - - # Handle the int/float/bool arguments - for pref in args.set: - setPref( - prefs, pref[0], pref[1]) - - print("Writing modified preferences to device") - getNode().writeConfig() - - - if args.seturl: - closeNow = True - getNode().setURL(args.seturl) - - # handle changing channels - - if args.ch_add: - closeNow = True - n = getNode() - ch = n.getChannelByName(args.ch_add) - if ch: - logging.error( - f"This node already has a '{args.ch_add}' channel - no changes.") - else: - ch = n.getDisabledChannel() - if not ch: - raise Exception("No free channels were found") - chs = channel_pb2.ChannelSettings() - chs.psk = genPSK256() - chs.name = args.ch_add - ch.settings.CopyFrom(chs) - ch.role = channel_pb2.Channel.Role.SECONDARY - print(f"Writing modified channels to device") - n.writeChannel(ch.index) - - if args.ch_del: - closeNow = True - - print(f"Deleting channel {channelIndex}") - ch = getNode().deleteChannel(channelIndex) - - if args.ch_set or args.ch_longslow or args.ch_shortfast: - closeNow = True - - ch = getNode().channels[channelIndex] - - enable = args.ch_enable # should we enable this channel? - - if args.ch_longslow or args.ch_shortfast: - if channelIndex != 0: - raise Exception( - "standard channel settings can only be applied to the PRIMARY channel") - - enable = True # force enable - - def setSimpleChannel(modem_config): - """Set one of the simple modem_config only based channels""" - - # Completely new channel settings - chs = channel_pb2.ChannelSettings() - chs.modem_config = modem_config - chs.psk = bytes([1]) # Use default channel psk 1 - - ch.settings.CopyFrom(chs) - - # handle the simple channel set commands - if args.ch_longslow: - setSimpleChannel( - channel_pb2.ChannelSettings.ModemConfig.Bw125Cr48Sf4096) - - if args.ch_shortfast: - setSimpleChannel( - channel_pb2.ChannelSettings.ModemConfig.Bw500Cr45Sf128) - - # Handle the channel settings - for pref in (args.ch_set or []): - if pref[0] == "psk": - ch.settings.psk = fromPSK(pref[1]) - else: - setPref(ch.settings, pref[0], pref[1]) - enable = True # If we set any pref, assume the user wants to enable the channel - - if enable: - ch.role = channel_pb2.Channel.Role.PRIMARY if ( - channelIndex == 0) else channel_pb2.Channel.Role.SECONDARY - else: - ch.role = channel_pb2.Channel.Role.DISABLED - - print(f"Writing modified channels to device") - getNode().writeChannel(channelIndex) - - if args.info: - print("") - if not args.dest: # If we aren't trying to talk to our local node, don't show it - interface.showInfo() - - print("") - getNode().showInfo() - closeNow = True # FIXME, for now we leave the link up while talking to remote nodes - print("") - - if args.get: - closeNow = True - prefs = getNode().radioConfig.preferences - - # Handle the int/float/bool arguments - for pref in args.get: - getPref( - prefs, pref[0]) - - print("Completed getting preferences") - - if args.nodes: - closeNow = True - interface.showNodes() - - if args.qr: - closeNow = True - url = interface.localNode.getURL(includeAll=False) - print(f"Primary channel URL {url}") - qr = pyqrcode.create(url) - print(qr.terminal()) - - if have_tunnel and args.tunnel: - from . import tunnel - # Even if others said we could close, stay open if the user asked for a tunnel - closeNow = False - tunnel.Tunnel(interface, subnet=args.tunnel_net) - - # if the user didn't ask for serial debugging output, we might want to exit after we've done our operation - if (not args.seriallog) and closeNow: - interface.close() # after running command then exit - - except Exception as ex: - print(f"Aborting due to: {ex}") - interface.close() # close the connection now, so that our app exits - - -def onNode(node): - """Callback invoked when the node DB changes""" - print(f"Node changed: {node}") - - -def subscribe(): - """Subscribe to the topics the user probably wants to see, prints output to stdout""" - pub.subscribe(onReceive, "meshtastic.receive") - # pub.subscribe(onConnection, "meshtastic.connection") - - # We now call onConnected from main - # pub.subscribe(onConnected, "meshtastic.connection.established") - - # pub.subscribe(onNode, "meshtastic.node") - - -def common(): - """Shared code for all of our command line wrappers""" - global args - logging.basicConfig(level=logging.DEBUG if args.debug else logging.INFO) - - if len(sys.argv) == 1: - parser.print_help(sys.stderr) - sys.exit(1) - else: - if args.ch_index is not None: - global channelIndex - channelIndex = int(args.ch_index) - - # Some commands require dest to be set, so we now use destOrAll/destOrLocal for more lenient commands - if not args.dest: - args.destOrAll = "^all" - args.destOrLocal = "^local" - else: - args.destOrAll = args.dest - args.destOrLocal = args.dest # FIXME, temp hack for debugging remove - - if not args.seriallog: - if args.noproto: - args.seriallog = "stdout" - else: - args.seriallog = "none" # assume no debug output in this case - - if args.deprecated != None: - logging.error( - 'This option has been deprecated, see help below for the correct replacement...') - parser.print_help(sys.stderr) - sys.exit(1) - elif args.test: - test.testAll() - else: - if args.seriallog == "stdout": - logfile = sys.stdout - elif args.seriallog == "none": - args.seriallog = None - logging.debug("Not logging serial output") - logfile = None - else: - logging.info(f"Logging serial output to {args.seriallog}") - logfile = open(args.seriallog, 'w+', - buffering=1) # line buffering - - subscribe() - if args.ble: - client = BLEInterface(args.ble, debugOut=logfile) - elif args.host: - client = TCPInterface( - args.host, debugOut=logfile, noProto=args.noproto) - else: - client = SerialInterface( - args.port, debugOut=logfile, noProto=args.noproto) - - # We assume client is fully connected now - onConnected(client) - - if args.noproto or (have_tunnel and args.tunnel): # loop until someone presses ctrlc - while True: - time.sleep(1000) - - # don't call exit, background threads might be running still - # sys.exit(0) - - -def initParser(): - global parser, args - - parser.add_argument( - "--port", - help="The port the Meshtastic device is connected to, i.e. /dev/ttyUSB0. If unspecified, we'll try to find it.", - default=None) - - parser.add_argument( - "--host", - help="The hostname/ipaddr of the device to connect to (over TCP)", - default=None) - - parser.add_argument( - "--seriallog", - help="Log device serial output to either 'stdout', 'none' or a filename to append to.") - - parser.add_argument("--info", help="Read and display the radio config information", - action="store_true") - - parser.add_argument("--nodes", help="Print Node List in a pretty formatted table", - action="store_true") - - parser.add_argument("--qr", help="Display the QR code that corresponds to the current channel", - action="store_true") - - parser.add_argument( - "--get", help="Get a preferences field", nargs=1, action='append') - - parser.add_argument( - "--set", help="Set a preferences field", nargs=2, action='append') - - parser.add_argument( - "--seturl", help="Set a channel URL", action="store") - - parser.add_argument( - "--ch-index", help="Set the specified channel index", action="store") - - parser.add_argument( - "--ch-add", help="Add a secondary channel, you must specify a channel name", default=None) - - parser.add_argument( - "--ch-del", help="Delete the ch-index channel", action='store_true') - - parser.add_argument( - "--ch-enable", help="Enable the specified channel", action="store_true", dest="ch_enable") - - parser.add_argument( - "--ch-disable", help="Disable the specified channel", action="store_false", dest="ch_enable") - - parser.add_argument( - "--ch-set", help="Set a channel parameter", nargs=2, action='append') - - parser.add_argument( - "--ch-longslow", help="Change to the standard long-range (but slow) channel", action='store_true') - - parser.add_argument( - "--ch-shortfast", help="Change to the standard fast (but short range) channel", action='store_true') - - parser.add_argument( - "--set-owner", help="Set device owner name", action="store") - - parser.add_argument( - "--set-ham", help="Set licensed HAM ID and turn off encryption", action="store") - - parser.add_argument( - "--dest", help="The destination node id for any sent commands, if not set '^all' or '^local' is assumed as appropriate", default=None) - - parser.add_argument( - "--sendtext", help="Send a text message") - - parser.add_argument( - "--sendping", help="Send a ping message (which requests a reply)", action="store_true") - - parser.add_argument( - "--reboot", help="Tell the destination node to reboot", action="store_true") - - # parser.add_argument( - # "--repeat", help="Normally the send commands send only one message, use this option to request repeated sends") - - parser.add_argument( - "--reply", help="Reply to received messages", - action="store_true") - - parser.add_argument( - "--gpio-wrb", nargs=2, help="Set a particlar GPIO # to 1 or 0", action='append') - - parser.add_argument( - "--gpio-rd", help="Read from a GPIO mask") - - parser.add_argument( - "--gpio-watch", help="Start watching a GPIO mask for changes") - - parser.add_argument( - "--no-time", help="Suppress sending the current time to the mesh", action="store_true") - - parser.add_argument( - "--setalt", help="Set device altitude (allows use without GPS)") - - parser.add_argument( - "--setlat", help="Set device latitude (allows use without GPS)") - - parser.add_argument( - "--setlon", help="Set device longitude (allows use without GPS)") - - parser.add_argument("--debug", help="Show API library debug log messages", - action="store_true") - - parser.add_argument("--test", help="Run stress test against all connected Meshtastic devices", - action="store_true") - - parser.add_argument("--ble", help="BLE mac address to connect to (BLE is not yet supported for this tool)", - default=None) - - parser.add_argument("--noproto", help="Don't start the API, just function as a dumb serial terminal.", - action="store_true") - - parser.add_argument('--setchan', dest='deprecated', nargs=2, action='append', - help='Deprecated, use "--ch-set param value" instead') - parser.add_argument('--set-router', dest='deprecated', - action='store_true', help='Deprecated, use "--set is_router true" instead') - parser.add_argument('--unset-router', dest='deprecated', - action='store_false', help='Deprecated, use "--set is_router false" instead') - - if have_tunnel: - parser.add_argument('--tunnel', - action='store_true', help="Create a TUN tunnel device for forwarding IP packets over the mesh") - parser.add_argument( - "--subnet", dest='tunnel_net', help="Sets the local-end subnet address for the TUN IP bridge", default=None) - - parser.set_defaults(deprecated=None) - - parser.add_argument('--version', action='version', - version=f"{pkg_resources.require('meshtastic')[0].version}") - - args = parser.parse_args() - - -def main(): - """Perform command line meshtastic operations""" - initParser() - common() - - -def tunnelMain(): - """Run a meshtastic IP tunnel""" - global args - initParser() - args.tunnel = True - common() - - -if __name__ == "__main__": - main() diff --git a/meshtastic/admin_pb2.py-E b/meshtastic/admin_pb2.py-E deleted file mode 100644 index 2bed559..0000000 --- a/meshtastic/admin_pb2.py-E +++ /dev/null @@ -1,184 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: admin.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import mesh_pb2 as mesh__pb2 -import radioconfig_pb2 as radioconfig__pb2 -import channel_pb2 as channel__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='admin.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\013AdminProtosH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x0b\x61\x64min.proto\x1a\nmesh.proto\x1a\x11radioconfig.proto\x1a\rchannel.proto\"\xfb\x02\n\x0c\x41\x64minMessage\x12!\n\tset_radio\x18\x01 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1a\n\tset_owner\x18\x02 \x01(\x0b\x32\x05.UserH\x00\x12\x1f\n\x0bset_channel\x18\x03 \x01(\x0b\x32\x08.ChannelH\x00\x12\x1b\n\x11get_radio_request\x18\x04 \x01(\x08H\x00\x12*\n\x12get_radio_response\x18\x05 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1d\n\x13get_channel_request\x18\x06 \x01(\rH\x00\x12(\n\x14get_channel_response\x18\x07 \x01(\x0b\x32\x08.ChannelH\x00\x12\x1d\n\x13\x63onfirm_set_channel\x18 \x01(\x08H\x00\x12\x1b\n\x11\x63onfirm_set_radio\x18! \x01(\x08H\x00\x12\x18\n\x0e\x65xit_simulator\x18\" \x01(\x08H\x00\x12\x18\n\x0ereboot_seconds\x18# \x01(\x05H\x00\x42\t\n\x07variantBG\n\x13\x63om.geeksville.meshB\x0b\x41\x64minProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' - , - dependencies=[mesh__pb2.DESCRIPTOR,radioconfig__pb2.DESCRIPTOR,channel__pb2.DESCRIPTOR,]) - - - - -_ADMINMESSAGE = _descriptor.Descriptor( - name='AdminMessage', - full_name='AdminMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='set_radio', full_name='AdminMessage.set_radio', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='set_owner', full_name='AdminMessage.set_owner', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='set_channel', full_name='AdminMessage.set_channel', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='get_radio_request', full_name='AdminMessage.get_radio_request', index=3, - number=4, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='get_radio_response', full_name='AdminMessage.get_radio_response', index=4, - number=5, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='get_channel_request', full_name='AdminMessage.get_channel_request', index=5, - number=6, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='get_channel_response', full_name='AdminMessage.get_channel_response', index=6, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='confirm_set_channel', full_name='AdminMessage.confirm_set_channel', index=7, - number=32, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='confirm_set_radio', full_name='AdminMessage.confirm_set_radio', index=8, - number=33, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='exit_simulator', full_name='AdminMessage.exit_simulator', index=9, - number=34, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='reboot_seconds', full_name='AdminMessage.reboot_seconds', index=10, - number=35, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='variant', full_name='AdminMessage.variant', - index=0, containing_type=None, fields=[]), - ], - serialized_start=62, - serialized_end=441, -) - -_ADMINMESSAGE.fields_by_name['set_radio'].message_type = radioconfig__pb2._RADIOCONFIG -_ADMINMESSAGE.fields_by_name['set_owner'].message_type = mesh__pb2._USER -_ADMINMESSAGE.fields_by_name['set_channel'].message_type = channel__pb2._CHANNEL -_ADMINMESSAGE.fields_by_name['get_radio_response'].message_type = radioconfig__pb2._RADIOCONFIG -_ADMINMESSAGE.fields_by_name['get_channel_response'].message_type = channel__pb2._CHANNEL -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['set_radio']) -_ADMINMESSAGE.fields_by_name['set_radio'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['set_owner']) -_ADMINMESSAGE.fields_by_name['set_owner'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['set_channel']) -_ADMINMESSAGE.fields_by_name['set_channel'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['get_radio_request']) -_ADMINMESSAGE.fields_by_name['get_radio_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['get_radio_response']) -_ADMINMESSAGE.fields_by_name['get_radio_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['get_channel_request']) -_ADMINMESSAGE.fields_by_name['get_channel_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['get_channel_response']) -_ADMINMESSAGE.fields_by_name['get_channel_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['confirm_set_channel']) -_ADMINMESSAGE.fields_by_name['confirm_set_channel'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['confirm_set_radio']) -_ADMINMESSAGE.fields_by_name['confirm_set_radio'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['exit_simulator']) -_ADMINMESSAGE.fields_by_name['exit_simulator'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -_ADMINMESSAGE.oneofs_by_name['variant'].fields.append( - _ADMINMESSAGE.fields_by_name['reboot_seconds']) -_ADMINMESSAGE.fields_by_name['reboot_seconds'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant'] -DESCRIPTOR.message_types_by_name['AdminMessage'] = _ADMINMESSAGE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -AdminMessage = _reflection.GeneratedProtocolMessageType('AdminMessage', (_message.Message,), { - 'DESCRIPTOR' : _ADMINMESSAGE, - '__module__' : 'admin_pb2' - # @@protoc_insertion_point(class_scope:AdminMessage) - }) -_sym_db.RegisterMessage(AdminMessage) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/apponly_pb2.py-E b/meshtastic/apponly_pb2.py-E deleted file mode 100644 index 3f2bee9..0000000 --- a/meshtastic/apponly_pb2.py-E +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: apponly.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import channel_pb2 as channel__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='apponly.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\rAppOnlyProtosH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\rapponly.proto\x1a\rchannel.proto\"0\n\nChannelSet\x12\"\n\x08settings\x18\x01 \x03(\x0b\x32\x10.ChannelSettingsBI\n\x13\x63om.geeksville.meshB\rAppOnlyProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' - , - dependencies=[channel__pb2.DESCRIPTOR,]) - - - - -_CHANNELSET = _descriptor.Descriptor( - name='ChannelSet', - full_name='ChannelSet', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='settings', full_name='ChannelSet.settings', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=32, - serialized_end=80, -) - -_CHANNELSET.fields_by_name['settings'].message_type = channel__pb2._CHANNELSETTINGS -DESCRIPTOR.message_types_by_name['ChannelSet'] = _CHANNELSET -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ChannelSet = _reflection.GeneratedProtocolMessageType('ChannelSet', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELSET, - '__module__' : 'apponly_pb2' - # @@protoc_insertion_point(class_scope:ChannelSet) - }) -_sym_db.RegisterMessage(ChannelSet) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/ble.py-E b/meshtastic/ble.py-E deleted file mode 100644 index e69de29..0000000 diff --git a/meshtastic/channel_pb2.py-E b/meshtastic/channel_pb2.py-E deleted file mode 100644 index 43ae666..0000000 --- a/meshtastic/channel_pb2.py-E +++ /dev/null @@ -1,255 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: channel.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='channel.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\rChannelProtosH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\rchannel.proto\"\xe6\x02\n\x0f\x43hannelSettings\x12\x10\n\x08tx_power\x18\x01 \x01(\x05\x12\x32\n\x0cmodem_config\x18\x03 \x01(\x0e\x32\x1c.ChannelSettings.ModemConfig\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x15\n\rspread_factor\x18\x07 \x01(\r\x12\x13\n\x0b\x63oding_rate\x18\x08 \x01(\r\x12\x13\n\x0b\x63hannel_num\x18\t \x01(\r\x12\x0b\n\x03psk\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\n\n\x02id\x18\n \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x10 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x11 \x01(\x08\"`\n\x0bModemConfig\x12\x12\n\x0e\x42w125Cr45Sf128\x10\x00\x12\x12\n\x0e\x42w500Cr45Sf128\x10\x01\x12\x14\n\x10\x42w31_25Cr48Sf512\x10\x02\x12\x13\n\x0f\x42w125Cr48Sf4096\x10\x03\"\x8b\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12\"\n\x08settings\x18\x02 \x01(\x0b\x32\x10.ChannelSettings\x12\x1b\n\x04role\x18\x03 \x01(\x0e\x32\r.Channel.Role\"0\n\x04Role\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\x42I\n\x13\x63om.geeksville.meshB\rChannelProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' -) - - - -_CHANNELSETTINGS_MODEMCONFIG = _descriptor.EnumDescriptor( - name='ModemConfig', - full_name='ChannelSettings.ModemConfig', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='Bw125Cr45Sf128', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='Bw500Cr45Sf128', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='Bw31_25Cr48Sf512', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='Bw125Cr48Sf4096', index=3, number=3, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=280, - serialized_end=376, -) -_sym_db.RegisterEnumDescriptor(_CHANNELSETTINGS_MODEMCONFIG) - -_CHANNEL_ROLE = _descriptor.EnumDescriptor( - name='Role', - full_name='Channel.Role', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='DISABLED', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PRIMARY', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='SECONDARY', index=2, number=2, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=470, - serialized_end=518, -) -_sym_db.RegisterEnumDescriptor(_CHANNEL_ROLE) - - -_CHANNELSETTINGS = _descriptor.Descriptor( - name='ChannelSettings', - full_name='ChannelSettings', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='tx_power', full_name='ChannelSettings.tx_power', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='modem_config', full_name='ChannelSettings.modem_config', index=1, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='bandwidth', full_name='ChannelSettings.bandwidth', index=2, - number=6, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='spread_factor', full_name='ChannelSettings.spread_factor', index=3, - number=7, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='coding_rate', full_name='ChannelSettings.coding_rate', index=4, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='channel_num', full_name='ChannelSettings.channel_num', index=5, - number=9, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='psk', full_name='ChannelSettings.psk', index=6, - number=4, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='name', full_name='ChannelSettings.name', index=7, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='id', full_name='ChannelSettings.id', index=8, - number=10, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='uplink_enabled', full_name='ChannelSettings.uplink_enabled', index=9, - number=16, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='downlink_enabled', full_name='ChannelSettings.downlink_enabled', index=10, - number=17, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _CHANNELSETTINGS_MODEMCONFIG, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=18, - serialized_end=376, -) - - -_CHANNEL = _descriptor.Descriptor( - name='Channel', - full_name='Channel', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='index', full_name='Channel.index', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='settings', full_name='Channel.settings', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='role', full_name='Channel.role', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _CHANNEL_ROLE, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=379, - serialized_end=518, -) - -_CHANNELSETTINGS.fields_by_name['modem_config'].enum_type = _CHANNELSETTINGS_MODEMCONFIG -_CHANNELSETTINGS_MODEMCONFIG.containing_type = _CHANNELSETTINGS -_CHANNEL.fields_by_name['settings'].message_type = _CHANNELSETTINGS -_CHANNEL.fields_by_name['role'].enum_type = _CHANNEL_ROLE -_CHANNEL_ROLE.containing_type = _CHANNEL -DESCRIPTOR.message_types_by_name['ChannelSettings'] = _CHANNELSETTINGS -DESCRIPTOR.message_types_by_name['Channel'] = _CHANNEL -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ChannelSettings = _reflection.GeneratedProtocolMessageType('ChannelSettings', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELSETTINGS, - '__module__' : 'channel_pb2' - # @@protoc_insertion_point(class_scope:ChannelSettings) - }) -_sym_db.RegisterMessage(ChannelSettings) - -Channel = _reflection.GeneratedProtocolMessageType('Channel', (_message.Message,), { - 'DESCRIPTOR' : _CHANNEL, - '__module__' : 'channel_pb2' - # @@protoc_insertion_point(class_scope:Channel) - }) -_sym_db.RegisterMessage(Channel) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/deviceonly_pb2.py-E b/meshtastic/deviceonly_pb2.py-E deleted file mode 100644 index 8a4580a..0000000 --- a/meshtastic/deviceonly_pb2.py-E +++ /dev/null @@ -1,255 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: deviceonly.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import mesh_pb2 as mesh__pb2 -import channel_pb2 as channel__pb2 -import radioconfig_pb2 as radioconfig__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='deviceonly.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\nDeviceOnlyH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x10\x64\x65viceonly.proto\x1a\nmesh.proto\x1a\rchannel.proto\x1a\x11radioconfig.proto\"\x80\x01\n\x11LegacyRadioConfig\x12\x39\n\x0bpreferences\x18\x01 \x01(\x0b\x32$.LegacyRadioConfig.LegacyPreferences\x1a\x30\n\x11LegacyPreferences\x12\x1b\n\x06region\x18\x0f \x01(\x0e\x32\x0b.RegionCode\"\x8f\x02\n\x0b\x44\x65viceState\x12\'\n\x0blegacyRadio\x18\x01 \x01(\x0b\x32\x12.LegacyRadioConfig\x12\x1c\n\x07my_node\x18\x02 \x01(\x0b\x32\x0b.MyNodeInfo\x12\x14\n\x05owner\x18\x03 \x01(\x0b\x32\x05.User\x12\x1a\n\x07node_db\x18\x04 \x03(\x0b\x32\t.NodeInfo\x12\"\n\rreceive_queue\x18\x05 \x03(\x0b\x32\x0b.MeshPacket\x12\x0f\n\x07version\x18\x08 \x01(\r\x12$\n\x0frx_text_message\x18\x07 \x01(\x0b\x32\x0b.MeshPacket\x12\x0f\n\x07no_save\x18\t \x01(\x08\x12\x15\n\rdid_gps_reset\x18\x0b \x01(\x08J\x04\x08\x0c\x10\r\")\n\x0b\x43hannelFile\x12\x1a\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x08.ChannelBF\n\x13\x63om.geeksville.meshB\nDeviceOnlyH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' - , - dependencies=[mesh__pb2.DESCRIPTOR,channel__pb2.DESCRIPTOR,radioconfig__pb2.DESCRIPTOR,]) - - - - -_LEGACYRADIOCONFIG_LEGACYPREFERENCES = _descriptor.Descriptor( - name='LegacyPreferences', - full_name='LegacyRadioConfig.LegacyPreferences', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='region', full_name='LegacyRadioConfig.LegacyPreferences.region', index=0, - number=15, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=147, - serialized_end=195, -) - -_LEGACYRADIOCONFIG = _descriptor.Descriptor( - name='LegacyRadioConfig', - full_name='LegacyRadioConfig', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='preferences', full_name='LegacyRadioConfig.preferences', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_LEGACYRADIOCONFIG_LEGACYPREFERENCES, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=67, - serialized_end=195, -) - - -_DEVICESTATE = _descriptor.Descriptor( - name='DeviceState', - full_name='DeviceState', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='legacyRadio', full_name='DeviceState.legacyRadio', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='my_node', full_name='DeviceState.my_node', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='owner', full_name='DeviceState.owner', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='node_db', full_name='DeviceState.node_db', index=3, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='receive_queue', full_name='DeviceState.receive_queue', index=4, - number=5, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='version', full_name='DeviceState.version', index=5, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rx_text_message', full_name='DeviceState.rx_text_message', index=6, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='no_save', full_name='DeviceState.no_save', index=7, - number=9, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='did_gps_reset', full_name='DeviceState.did_gps_reset', index=8, - number=11, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=198, - serialized_end=469, -) - - -_CHANNELFILE = _descriptor.Descriptor( - name='ChannelFile', - full_name='ChannelFile', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='channels', full_name='ChannelFile.channels', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=471, - serialized_end=512, -) - -_LEGACYRADIOCONFIG_LEGACYPREFERENCES.fields_by_name['region'].enum_type = radioconfig__pb2._REGIONCODE -_LEGACYRADIOCONFIG_LEGACYPREFERENCES.containing_type = _LEGACYRADIOCONFIG -_LEGACYRADIOCONFIG.fields_by_name['preferences'].message_type = _LEGACYRADIOCONFIG_LEGACYPREFERENCES -_DEVICESTATE.fields_by_name['legacyRadio'].message_type = _LEGACYRADIOCONFIG -_DEVICESTATE.fields_by_name['my_node'].message_type = mesh__pb2._MYNODEINFO -_DEVICESTATE.fields_by_name['owner'].message_type = mesh__pb2._USER -_DEVICESTATE.fields_by_name['node_db'].message_type = mesh__pb2._NODEINFO -_DEVICESTATE.fields_by_name['receive_queue'].message_type = mesh__pb2._MESHPACKET -_DEVICESTATE.fields_by_name['rx_text_message'].message_type = mesh__pb2._MESHPACKET -_CHANNELFILE.fields_by_name['channels'].message_type = channel__pb2._CHANNEL -DESCRIPTOR.message_types_by_name['LegacyRadioConfig'] = _LEGACYRADIOCONFIG -DESCRIPTOR.message_types_by_name['DeviceState'] = _DEVICESTATE -DESCRIPTOR.message_types_by_name['ChannelFile'] = _CHANNELFILE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -LegacyRadioConfig = _reflection.GeneratedProtocolMessageType('LegacyRadioConfig', (_message.Message,), { - - 'LegacyPreferences' : _reflection.GeneratedProtocolMessageType('LegacyPreferences', (_message.Message,), { - 'DESCRIPTOR' : _LEGACYRADIOCONFIG_LEGACYPREFERENCES, - '__module__' : 'deviceonly_pb2' - # @@protoc_insertion_point(class_scope:LegacyRadioConfig.LegacyPreferences) - }) - , - 'DESCRIPTOR' : _LEGACYRADIOCONFIG, - '__module__' : 'deviceonly_pb2' - # @@protoc_insertion_point(class_scope:LegacyRadioConfig) - }) -_sym_db.RegisterMessage(LegacyRadioConfig) -_sym_db.RegisterMessage(LegacyRadioConfig.LegacyPreferences) - -DeviceState = _reflection.GeneratedProtocolMessageType('DeviceState', (_message.Message,), { - 'DESCRIPTOR' : _DEVICESTATE, - '__module__' : 'deviceonly_pb2' - # @@protoc_insertion_point(class_scope:DeviceState) - }) -_sym_db.RegisterMessage(DeviceState) - -ChannelFile = _reflection.GeneratedProtocolMessageType('ChannelFile', (_message.Message,), { - 'DESCRIPTOR' : _CHANNELFILE, - '__module__' : 'deviceonly_pb2' - # @@protoc_insertion_point(class_scope:ChannelFile) - }) -_sym_db.RegisterMessage(ChannelFile) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/environmental_measurement_pb2.py-E b/meshtastic/environmental_measurement_pb2.py-E deleted file mode 100644 index 302fc24..0000000 --- a/meshtastic/environmental_measurement_pb2.py-E +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: environmental_measurement.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='environmental_measurement.proto', - package='', - syntax='proto3', - serialized_options=b'Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x1f\x65nvironmental_measurement.proto\"g\n\x18\x45nvironmentalMeasurement\x12\x13\n\x0btemperature\x18\x01 \x01(\x02\x12\x19\n\x11relative_humidity\x18\x02 \x01(\x02\x12\x1b\n\x13\x62\x61rometric_pressure\x18\x03 \x01(\x02\x42#Z!github.com/meshtastic/gomeshprotob\x06proto3' -) - - - - -_ENVIRONMENTALMEASUREMENT = _descriptor.Descriptor( - name='EnvironmentalMeasurement', - full_name='EnvironmentalMeasurement', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='temperature', full_name='EnvironmentalMeasurement.temperature', index=0, - number=1, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='relative_humidity', full_name='EnvironmentalMeasurement.relative_humidity', index=1, - number=2, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='barometric_pressure', full_name='EnvironmentalMeasurement.barometric_pressure', index=2, - number=3, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=35, - serialized_end=138, -) - -DESCRIPTOR.message_types_by_name['EnvironmentalMeasurement'] = _ENVIRONMENTALMEASUREMENT -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -EnvironmentalMeasurement = _reflection.GeneratedProtocolMessageType('EnvironmentalMeasurement', (_message.Message,), { - 'DESCRIPTOR' : _ENVIRONMENTALMEASUREMENT, - '__module__' : 'environmental_measurement_pb2' - # @@protoc_insertion_point(class_scope:EnvironmentalMeasurement) - }) -_sym_db.RegisterMessage(EnvironmentalMeasurement) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/mesh_pb2.py-E b/meshtastic/mesh_pb2.py-E deleted file mode 100644 index 17e45a8..0000000 --- a/meshtastic/mesh_pb2.py-E +++ /dev/null @@ -1,1646 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: mesh.proto - -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import portnums_pb2 as portnums__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='mesh.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\nMeshProtosH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\nmesh.proto\x1a\x0eportnums.proto\"\x94\x06\n\x08Position\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07\x12,\n\x0flocation_source\x18\n \x01(\x0e\x32\x13.Position.LocSource\x12,\n\x0f\x61ltitude_source\x18\x0b \x01(\x0e\x32\x13.Position.AltSource\x12\x15\n\rpos_timestamp\x18\x0c \x01(\x07\x12\x17\n\x0fpos_time_millis\x18\r \x01(\x05\x12\x14\n\x0c\x61ltitude_hae\x18\x0e \x01(\x11\x12\x15\n\ralt_geoid_sep\x18\x0f \x01(\x11\x12\x0c\n\x04PDOP\x18\x10 \x01(\r\x12\x0c\n\x04HDOP\x18\x11 \x01(\r\x12\x0c\n\x04VDOP\x18\x12 \x01(\r\x12\x14\n\x0cgps_accuracy\x18\x13 \x01(\r\x12\x14\n\x0cground_speed\x18\x14 \x01(\r\x12\x14\n\x0cground_track\x18\x15 \x01(\r\x12\x13\n\x0b\x66ix_quality\x18\x16 \x01(\r\x12\x10\n\x08\x66ix_type\x18\x17 \x01(\r\x12\x14\n\x0csats_in_view\x18\x18 \x01(\r\x12\x11\n\tsensor_id\x18\x19 \x01(\r\x12\x17\n\x0fpos_next_update\x18( \x01(\r\x12\x16\n\x0epos_seq_number\x18) \x01(\r\"n\n\tLocSource\x12\x16\n\x12LOCSRC_UNSPECIFIED\x10\x00\x12\x17\n\x13LOCSRC_MANUAL_ENTRY\x10\x01\x12\x17\n\x13LOCSRC_GPS_INTERNAL\x10\x02\x12\x17\n\x13LOCSRC_GPS_EXTERNAL\x10\x03\"\x85\x01\n\tAltSource\x12\x16\n\x12\x41LTSRC_UNSPECIFIED\x10\x00\x12\x17\n\x13\x41LTSRC_MANUAL_ENTRY\x10\x01\x12\x17\n\x13\x41LTSRC_GPS_INTERNAL\x10\x02\x12\x17\n\x13\x41LTSRC_GPS_EXTERNAL\x10\x03\x12\x15\n\x11\x41LTSRC_BAROMETRIC\x10\x04J\x04\x08\x07\x10\x08J\x04\x08\x08\x10\t\"\xd7\x01\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\x12 \n\x08hw_model\x18\x06 \x01(\x0e\x32\x0e.HardwareModel\x12\x13\n\x0bis_licensed\x18\x07 \x01(\x08\x12\x13\n\x04team\x18\x08 \x01(\x0e\x32\x05.Team\x12\x14\n\x0ctx_power_dbm\x18\n \x01(\r\x12\x14\n\x0c\x61nt_gain_dbi\x18\x0b \x01(\r\x12\x13\n\x0b\x61nt_azimuth\x18\x0c \x01(\r\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x07\"\xc5\x02\n\x07Routing\x12(\n\rroute_request\x18\x01 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0broute_reply\x18\x02 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12&\n\x0c\x65rror_reason\x18\x03 \x01(\x0e\x32\x0e.Routing.ErrorH\x00\"\xb4\x01\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\x0f\n\x0b\x42\x41\x44_REQUEST\x10 \x12\x12\n\x0eNOT_AUTHORIZED\x10!B\t\n\x07variant\"{\n\x04\x44\x61ta\x12\x19\n\x07portnum\x18\x01 \x01(\x0e\x32\x08.PortNum\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\x15\n\rwant_response\x18\x03 \x01(\x08\x12\x0c\n\x04\x64\x65st\x18\x04 \x01(\x07\x12\x0e\n\x06source\x18\x05 \x01(\x07\x12\x12\n\nrequest_id\x18\x06 \x01(\x07\"\xe0\x02\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\x07\x12\n\n\x02to\x18\x02 \x01(\x07\x12\x0f\n\x07\x63hannel\x18\x03 \x01(\r\x12\x18\n\x07\x64\x65\x63oded\x18\x04 \x01(\x0b\x32\x05.DataH\x00\x12\x13\n\tencrypted\x18\x05 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\x07\x12\x0f\n\x07rx_time\x18\x07 \x01(\x07\x12\x0e\n\x06rx_snr\x18\x08 \x01(\x02\x12\x11\n\thop_limit\x18\n \x01(\r\x12\x10\n\x08want_ack\x18\x0b \x01(\x08\x12&\n\x08priority\x18\x0c \x01(\x0e\x32\x14.MeshPacket.Priority\x12\x0f\n\x07rx_rssi\x18\r \x01(\x05\"[\n\x08Priority\x12\t\n\x05UNSET\x10\x00\x12\x07\n\x03MIN\x10\x01\x12\x0e\n\nBACKGROUND\x10\n\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10@\x12\x0c\n\x08RELIABLE\x10\x46\x12\x07\n\x03\x41\x43K\x10x\x12\x07\n\x03MAX\x10\x7f\x42\x10\n\x0epayloadVariant\"j\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\x12\n\nlast_heard\x18\x04 \x01(\x07\"\xcb\x02\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\r\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x11\n\tnum_bands\x18\x03 \x01(\r\x12\x14\n\x0cmax_channels\x18\x0f \x01(\r\x12\x12\n\x06region\x18\x04 \x01(\tB\x02\x18\x01\x12\x1f\n\x13hw_model_deprecated\x18\x05 \x01(\tB\x02\x18\x01\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12&\n\nerror_code\x18\x07 \x01(\x0e\x32\x12.CriticalErrorCode\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\x12\x14\n\x0creboot_count\x18\n \x01(\r\x12\x1c\n\x14message_timeout_msec\x18\r \x01(\r\x12\x17\n\x0fmin_app_version\x18\x0e \x01(\r\"\xb5\x01\n\tLogRecord\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0c\n\x04time\x18\x02 \x01(\x07\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x1f\n\x05level\x18\x04 \x01(\x0e\x32\x10.LogRecord.Level\"X\n\x05Level\x12\t\n\x05UNSET\x10\x00\x12\x0c\n\x08\x43RITICAL\x10\x32\x12\t\n\x05\x45RROR\x10(\x12\x0b\n\x07WARNING\x10\x1e\x12\x08\n\x04INFO\x10\x14\x12\t\n\x05\x44\x45\x42UG\x10\n\x12\t\n\x05TRACE\x10\x05\"\xe9\x01\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x0b \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12 \n\nlog_record\x18\x07 \x01(\x0b\x32\n.LogRecordH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x42\x10\n\x0epayloadVariantJ\x04\x08\x02\x10\x03J\x04\x08\x06\x10\x07\"\xe1\x01\n\x07ToRadio\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12&\n\tpeer_info\x18\x03 \x01(\x0b\x32\x11.ToRadio.PeerInfoH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x12\x14\n\ndisconnect\x18h \x01(\x08H\x00\x1a\x35\n\x08PeerInfo\x12\x13\n\x0b\x61pp_version\x18\x01 \x01(\r\x12\x14\n\x0cmqtt_gateway\x18\x02 \x01(\x08\x42\x10\n\x0epayloadVariantJ\x04\x08\x01\x10\x02J\x04\x08\x65\x10\x66J\x04\x08\x66\x10gJ\x04\x08g\x10h*\xac\x02\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\x0c\n\x08TBEAM0p7\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\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\'*\xb5\x01\n\x04Team\x12\t\n\x05\x43LEAR\x10\x00\x12\x08\n\x04\x43YAN\x10\x01\x12\t\n\x05WHITE\x10\x02\x12\n\n\x06YELLOW\x10\x03\x12\n\n\x06ORANGE\x10\x04\x12\x0b\n\x07MAGENTA\x10\x05\x12\x07\n\x03RED\x10\x06\x12\n\n\x06MAROON\x10\x07\x12\n\n\x06PURPLE\x10\x08\x12\r\n\tDARK_BLUE\x10\t\x12\x08\n\x04\x42LUE\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*.\n\tConstants\x12\n\n\x06Unused\x10\x00\x12\x15\n\x10\x44\x41TA_PAYLOAD_LEN\x10\xed\x01*\xe1\x01\n\x11\x43riticalErrorCode\x12\x08\n\x04None\x10\x00\x12\x0e\n\nTxWatchdog\x10\x01\x12\x12\n\x0eSleepEnterWait\x10\x02\x12\x0b\n\x07NoRadio\x10\x03\x12\x0f\n\x0bUnspecified\x10\x04\x12\x13\n\x0fUBloxInitFailed\x10\x05\x12\x0c\n\x08NoAXP192\x10\x06\x12\x17\n\x13InvalidRadioSetting\x10\x07\x12\x12\n\x0eTransmitFailed\x10\x08\x12\x0c\n\x08\x42rownout\x10\t\x12\x11\n\rSX1262Failure\x10\n\x12\x0f\n\x0bRadioSpiBug\x10\x0b\x42\x46\n\x13\x63om.geeksville.meshB\nMeshProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' - , - dependencies=[portnums__pb2.DESCRIPTOR,]) - -_HARDWAREMODEL = _descriptor.EnumDescriptor( - name='HardwareModel', - full_name='HardwareModel', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNSET', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TLORA_V2', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TLORA_V1', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TLORA_V2_1_1p6', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TBEAM', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='HELTEC_V2_0', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TBEAM0p7', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='T_ECHO', index=7, number=7, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TLORA_V1_1p3', index=8, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='RAK4631', index=9, number=9, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='HELTEC_V2_1', index=10, number=10, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LORA_RELAY_V1', index=11, number=32, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NRF52840DK', index=12, number=33, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PPR', index=13, number=34, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GENIEBLOCKS', index=14, number=35, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NRF52_UNKNOWN', index=15, number=36, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PORTDUINO', index=16, number=37, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ANDROID_SIM', index=17, number=38, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DIY_V1', index=18, number=39, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2971, - serialized_end=3271, -) -_sym_db.RegisterEnumDescriptor(_HARDWAREMODEL) - -HardwareModel = enum_type_wrapper.EnumTypeWrapper(_HARDWAREMODEL) -_TEAM = _descriptor.EnumDescriptor( - name='Team', - full_name='Team', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='CLEAR', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CYAN', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='WHITE', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='YELLOW', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ORANGE', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAGENTA', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='RED', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAROON', index=7, number=7, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PURPLE', index=8, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DARK_BLUE', index=9, number=9, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='BLUE', index=10, number=10, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TEAL', index=11, number=11, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GREEN', index=12, number=12, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DARK_GREEN', index=13, number=13, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='BROWN', index=14, number=14, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=3274, - serialized_end=3455, -) -_sym_db.RegisterEnumDescriptor(_TEAM) - -Team = enum_type_wrapper.EnumTypeWrapper(_TEAM) -_CONSTANTS = _descriptor.EnumDescriptor( - name='Constants', - full_name='Constants', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='Unused', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DATA_PAYLOAD_LEN', index=1, number=237, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=3457, - serialized_end=3503, -) -_sym_db.RegisterEnumDescriptor(_CONSTANTS) - -Constants = enum_type_wrapper.EnumTypeWrapper(_CONSTANTS) -_CRITICALERRORCODE = _descriptor.EnumDescriptor( - name='CriticalErrorCode', - full_name='CriticalErrorCode', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='None', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TxWatchdog', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='SleepEnterWait', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NoRadio', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='Unspecified', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='UBloxInitFailed', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NoAXP192', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='InvalidRadioSetting', index=7, number=7, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TransmitFailed', index=8, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='Brownout', index=9, number=9, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='SX1262Failure', index=10, number=10, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='RadioSpiBug', index=11, number=11, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=3506, - serialized_end=3731, -) -_sym_db.RegisterEnumDescriptor(_CRITICALERRORCODE) - -CriticalErrorCode = enum_type_wrapper.EnumTypeWrapper(_CRITICALERRORCODE) -UNSET = 0 -TLORA_V2 = 1 -TLORA_V1 = 2 -TLORA_V2_1_1p6 = 3 -TBEAM = 4 -HELTEC_V2_0 = 5 -TBEAM0p7 = 6 -T_ECHO = 7 -TLORA_V1_1p3 = 8 -RAK4631 = 9 -HELTEC_V2_1 = 10 -LORA_RELAY_V1 = 32 -NRF52840DK = 33 -PPR = 34 -GENIEBLOCKS = 35 -NRF52_UNKNOWN = 36 -PORTDUINO = 37 -ANDROID_SIM = 38 -DIY_V1 = 39 -CLEAR = 0 -CYAN = 1 -WHITE = 2 -YELLOW = 3 -ORANGE = 4 -MAGENTA = 5 -RED = 6 -MAROON = 7 -PURPLE = 8 -DARK_BLUE = 9 -BLUE = 10 -TEAL = 11 -GREEN = 12 -DARK_GREEN = 13 -BROWN = 14 -Unused = 0 -DATA_PAYLOAD_LEN = 237 -globals()['None'] = 0 -TxWatchdog = 1 -SleepEnterWait = 2 -NoRadio = 3 -Unspecified = 4 -UBloxInitFailed = 5 -NoAXP192 = 6 -InvalidRadioSetting = 7 -TransmitFailed = 8 -Brownout = 9 -SX1262Failure = 10 -RadioSpiBug = 11 - - -_POSITION_LOCSOURCE = _descriptor.EnumDescriptor( - name='LocSource', - full_name='Position.LocSource', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='LOCSRC_UNSPECIFIED', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOCSRC_MANUAL_ENTRY', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOCSRC_GPS_INTERNAL', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOCSRC_GPS_EXTERNAL', index=3, number=3, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=561, - serialized_end=671, -) -_sym_db.RegisterEnumDescriptor(_POSITION_LOCSOURCE) - -_POSITION_ALTSOURCE = _descriptor.EnumDescriptor( - name='AltSource', - full_name='Position.AltSource', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='ALTSRC_UNSPECIFIED', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ALTSRC_MANUAL_ENTRY', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ALTSRC_GPS_INTERNAL', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ALTSRC_GPS_EXTERNAL', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ALTSRC_BAROMETRIC', index=4, number=4, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=674, - serialized_end=807, -) -_sym_db.RegisterEnumDescriptor(_POSITION_ALTSOURCE) - -_ROUTING_ERROR = _descriptor.EnumDescriptor( - name='Error', - full_name='Routing.Error', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='NONE', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NO_ROUTE', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GOT_NAK', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TIMEOUT', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NO_INTERFACE', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAX_RETRANSMIT', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NO_CHANNEL', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TOO_LARGE', index=7, number=7, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NO_RESPONSE', index=8, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='BAD_REQUEST', index=9, number=32, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NOT_AUTHORIZED', index=10, number=33, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=1207, - serialized_end=1387, -) -_sym_db.RegisterEnumDescriptor(_ROUTING_ERROR) - -_MESHPACKET_PRIORITY = _descriptor.EnumDescriptor( - name='Priority', - full_name='MeshPacket.Priority', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNSET', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MIN', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='BACKGROUND', index=2, number=10, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DEFAULT', index=3, number=64, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='RELIABLE', index=4, number=70, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ACK', index=5, number=120, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAX', index=6, number=127, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=1769, - serialized_end=1860, -) -_sym_db.RegisterEnumDescriptor(_MESHPACKET_PRIORITY) - -_LOGRECORD_LEVEL = _descriptor.EnumDescriptor( - name='Level', - full_name='LogRecord.Level', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNSET', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CRITICAL', index=1, number=50, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ERROR', index=2, number=40, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='WARNING', index=3, number=30, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='INFO', index=4, number=20, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DEBUG', index=5, number=10, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TRACE', index=6, number=5, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2416, - serialized_end=2504, -) -_sym_db.RegisterEnumDescriptor(_LOGRECORD_LEVEL) - - -_POSITION = _descriptor.Descriptor( - name='Position', - full_name='Position', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='latitude_i', full_name='Position.latitude_i', index=0, - number=1, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='longitude_i', full_name='Position.longitude_i', index=1, - number=2, type=15, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='altitude', full_name='Position.altitude', index=2, - number=3, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='battery_level', full_name='Position.battery_level', index=3, - number=4, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='time', full_name='Position.time', index=4, - number=9, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='location_source', full_name='Position.location_source', index=5, - number=10, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='altitude_source', full_name='Position.altitude_source', index=6, - number=11, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pos_timestamp', full_name='Position.pos_timestamp', index=7, - number=12, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pos_time_millis', full_name='Position.pos_time_millis', index=8, - number=13, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='altitude_hae', full_name='Position.altitude_hae', index=9, - number=14, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='alt_geoid_sep', full_name='Position.alt_geoid_sep', index=10, - number=15, type=17, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='PDOP', full_name='Position.PDOP', index=11, - number=16, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='HDOP', full_name='Position.HDOP', index=12, - number=17, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='VDOP', full_name='Position.VDOP', index=13, - number=18, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_accuracy', full_name='Position.gps_accuracy', index=14, - number=19, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ground_speed', full_name='Position.ground_speed', index=15, - number=20, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ground_track', full_name='Position.ground_track', index=16, - number=21, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fix_quality', full_name='Position.fix_quality', index=17, - number=22, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fix_type', full_name='Position.fix_type', index=18, - number=23, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sats_in_view', full_name='Position.sats_in_view', index=19, - number=24, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sensor_id', full_name='Position.sensor_id', index=20, - number=25, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pos_next_update', full_name='Position.pos_next_update', index=21, - number=40, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='pos_seq_number', full_name='Position.pos_seq_number', index=22, - number=41, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _POSITION_LOCSOURCE, - _POSITION_ALTSOURCE, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=31, - serialized_end=819, -) - - -_USER = _descriptor.Descriptor( - name='User', - full_name='User', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='id', full_name='User.id', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='long_name', full_name='User.long_name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='short_name', full_name='User.short_name', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='macaddr', full_name='User.macaddr', index=3, - number=4, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hw_model', full_name='User.hw_model', index=4, - number=6, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_licensed', full_name='User.is_licensed', index=5, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='team', full_name='User.team', index=6, - number=8, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='tx_power_dbm', full_name='User.tx_power_dbm', index=7, - number=10, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ant_gain_dbi', full_name='User.ant_gain_dbi', index=8, - number=11, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ant_azimuth', full_name='User.ant_azimuth', index=9, - number=12, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=822, - serialized_end=1037, -) - - -_ROUTEDISCOVERY = _descriptor.Descriptor( - name='RouteDiscovery', - full_name='RouteDiscovery', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='route', full_name='RouteDiscovery.route', index=0, - number=2, type=7, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1039, - serialized_end=1070, -) - - -_ROUTING = _descriptor.Descriptor( - name='Routing', - full_name='Routing', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='route_request', full_name='Routing.route_request', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='route_reply', full_name='Routing.route_reply', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='error_reason', full_name='Routing.error_reason', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _ROUTING_ERROR, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='variant', full_name='Routing.variant', - index=0, containing_type=None, fields=[]), - ], - serialized_start=1073, - serialized_end=1398, -) - - -_DATA = _descriptor.Descriptor( - name='Data', - full_name='Data', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='portnum', full_name='Data.portnum', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='payload', full_name='Data.payload', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='want_response', full_name='Data.want_response', index=2, - number=3, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='dest', full_name='Data.dest', index=3, - number=4, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='source', full_name='Data.source', index=4, - number=5, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='request_id', full_name='Data.request_id', index=5, - number=6, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1400, - serialized_end=1523, -) - - -_MESHPACKET = _descriptor.Descriptor( - name='MeshPacket', - full_name='MeshPacket', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='from', full_name='MeshPacket.from', index=0, - number=1, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='to', full_name='MeshPacket.to', index=1, - number=2, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='channel', full_name='MeshPacket.channel', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='decoded', full_name='MeshPacket.decoded', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='encrypted', full_name='MeshPacket.encrypted', index=4, - number=5, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='id', full_name='MeshPacket.id', index=5, - number=6, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rx_time', full_name='MeshPacket.rx_time', index=6, - number=7, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rx_snr', full_name='MeshPacket.rx_snr', index=7, - number=8, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hop_limit', full_name='MeshPacket.hop_limit', index=8, - number=10, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='want_ack', full_name='MeshPacket.want_ack', index=9, - number=11, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='priority', full_name='MeshPacket.priority', index=10, - number=12, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rx_rssi', full_name='MeshPacket.rx_rssi', index=11, - number=13, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _MESHPACKET_PRIORITY, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='payloadVariant', full_name='MeshPacket.payloadVariant', - index=0, containing_type=None, fields=[]), - ], - serialized_start=1526, - serialized_end=1878, -) - - -_NODEINFO = _descriptor.Descriptor( - name='NodeInfo', - full_name='NodeInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='num', full_name='NodeInfo.num', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='user', full_name='NodeInfo.user', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='position', full_name='NodeInfo.position', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='snr', full_name='NodeInfo.snr', index=3, - number=7, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='last_heard', full_name='NodeInfo.last_heard', index=4, - number=4, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1880, - serialized_end=1986, -) - - -_MYNODEINFO = _descriptor.Descriptor( - name='MyNodeInfo', - full_name='MyNodeInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='my_node_num', full_name='MyNodeInfo.my_node_num', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='has_gps', full_name='MyNodeInfo.has_gps', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='num_bands', full_name='MyNodeInfo.num_bands', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='max_channels', full_name='MyNodeInfo.max_channels', index=3, - number=15, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='region', full_name='MyNodeInfo.region', index=4, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=b'\030\001', file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='hw_model_deprecated', full_name='MyNodeInfo.hw_model_deprecated', index=5, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=b'\030\001', file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='firmware_version', full_name='MyNodeInfo.firmware_version', index=6, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='error_code', full_name='MyNodeInfo.error_code', index=7, - number=7, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='error_address', full_name='MyNodeInfo.error_address', index=8, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='error_count', full_name='MyNodeInfo.error_count', index=9, - number=9, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='reboot_count', full_name='MyNodeInfo.reboot_count', index=10, - number=10, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='message_timeout_msec', full_name='MyNodeInfo.message_timeout_msec', index=11, - number=13, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='min_app_version', full_name='MyNodeInfo.min_app_version', index=12, - number=14, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1989, - serialized_end=2320, -) - - -_LOGRECORD = _descriptor.Descriptor( - name='LogRecord', - full_name='LogRecord', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='message', full_name='LogRecord.message', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='time', full_name='LogRecord.time', index=1, - number=2, type=7, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='source', full_name='LogRecord.source', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='level', full_name='LogRecord.level', index=3, - number=4, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _LOGRECORD_LEVEL, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2323, - serialized_end=2504, -) - - -_FROMRADIO = _descriptor.Descriptor( - name='FromRadio', - full_name='FromRadio', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='num', full_name='FromRadio.num', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='packet', full_name='FromRadio.packet', index=1, - number=11, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='my_info', full_name='FromRadio.my_info', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='node_info', full_name='FromRadio.node_info', index=3, - number=4, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='log_record', full_name='FromRadio.log_record', index=4, - number=7, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='config_complete_id', full_name='FromRadio.config_complete_id', index=5, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='rebooted', full_name='FromRadio.rebooted', index=6, - number=9, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='payloadVariant', full_name='FromRadio.payloadVariant', - index=0, containing_type=None, fields=[]), - ], - serialized_start=2507, - serialized_end=2740, -) - - -_TORADIO_PEERINFO = _descriptor.Descriptor( - name='PeerInfo', - full_name='ToRadio.PeerInfo', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='app_version', full_name='ToRadio.PeerInfo.app_version', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='mqtt_gateway', full_name='ToRadio.PeerInfo.mqtt_gateway', index=1, - number=2, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2873, - serialized_end=2926, -) - -_TORADIO = _descriptor.Descriptor( - name='ToRadio', - full_name='ToRadio', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='packet', full_name='ToRadio.packet', index=0, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='peer_info', full_name='ToRadio.peer_info', index=1, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='want_config_id', full_name='ToRadio.want_config_id', index=2, - number=100, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='disconnect', full_name='ToRadio.disconnect', index=3, - number=104, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_TORADIO_PEERINFO, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - _descriptor.OneofDescriptor( - name='payloadVariant', full_name='ToRadio.payloadVariant', - index=0, containing_type=None, fields=[]), - ], - serialized_start=2743, - serialized_end=2968, -) - -_POSITION.fields_by_name['location_source'].enum_type = _POSITION_LOCSOURCE -_POSITION.fields_by_name['altitude_source'].enum_type = _POSITION_ALTSOURCE -_POSITION_LOCSOURCE.containing_type = _POSITION -_POSITION_ALTSOURCE.containing_type = _POSITION -_USER.fields_by_name['hw_model'].enum_type = _HARDWAREMODEL -_USER.fields_by_name['team'].enum_type = _TEAM -_ROUTING.fields_by_name['route_request'].message_type = _ROUTEDISCOVERY -_ROUTING.fields_by_name['route_reply'].message_type = _ROUTEDISCOVERY -_ROUTING.fields_by_name['error_reason'].enum_type = _ROUTING_ERROR -_ROUTING_ERROR.containing_type = _ROUTING -_ROUTING.oneofs_by_name['variant'].fields.append( - _ROUTING.fields_by_name['route_request']) -_ROUTING.fields_by_name['route_request'].containing_oneof = _ROUTING.oneofs_by_name['variant'] -_ROUTING.oneofs_by_name['variant'].fields.append( - _ROUTING.fields_by_name['route_reply']) -_ROUTING.fields_by_name['route_reply'].containing_oneof = _ROUTING.oneofs_by_name['variant'] -_ROUTING.oneofs_by_name['variant'].fields.append( - _ROUTING.fields_by_name['error_reason']) -_ROUTING.fields_by_name['error_reason'].containing_oneof = _ROUTING.oneofs_by_name['variant'] -_DATA.fields_by_name['portnum'].enum_type = portnums__pb2._PORTNUM -_MESHPACKET.fields_by_name['decoded'].message_type = _DATA -_MESHPACKET.fields_by_name['priority'].enum_type = _MESHPACKET_PRIORITY -_MESHPACKET_PRIORITY.containing_type = _MESHPACKET -_MESHPACKET.oneofs_by_name['payloadVariant'].fields.append( - _MESHPACKET.fields_by_name['decoded']) -_MESHPACKET.fields_by_name['decoded'].containing_oneof = _MESHPACKET.oneofs_by_name['payloadVariant'] -_MESHPACKET.oneofs_by_name['payloadVariant'].fields.append( - _MESHPACKET.fields_by_name['encrypted']) -_MESHPACKET.fields_by_name['encrypted'].containing_oneof = _MESHPACKET.oneofs_by_name['payloadVariant'] -_NODEINFO.fields_by_name['user'].message_type = _USER -_NODEINFO.fields_by_name['position'].message_type = _POSITION -_MYNODEINFO.fields_by_name['error_code'].enum_type = _CRITICALERRORCODE -_LOGRECORD.fields_by_name['level'].enum_type = _LOGRECORD_LEVEL -_LOGRECORD_LEVEL.containing_type = _LOGRECORD -_FROMRADIO.fields_by_name['packet'].message_type = _MESHPACKET -_FROMRADIO.fields_by_name['my_info'].message_type = _MYNODEINFO -_FROMRADIO.fields_by_name['node_info'].message_type = _NODEINFO -_FROMRADIO.fields_by_name['log_record'].message_type = _LOGRECORD -_FROMRADIO.oneofs_by_name['payloadVariant'].fields.append( - _FROMRADIO.fields_by_name['packet']) -_FROMRADIO.fields_by_name['packet'].containing_oneof = _FROMRADIO.oneofs_by_name['payloadVariant'] -_FROMRADIO.oneofs_by_name['payloadVariant'].fields.append( - _FROMRADIO.fields_by_name['my_info']) -_FROMRADIO.fields_by_name['my_info'].containing_oneof = _FROMRADIO.oneofs_by_name['payloadVariant'] -_FROMRADIO.oneofs_by_name['payloadVariant'].fields.append( - _FROMRADIO.fields_by_name['node_info']) -_FROMRADIO.fields_by_name['node_info'].containing_oneof = _FROMRADIO.oneofs_by_name['payloadVariant'] -_FROMRADIO.oneofs_by_name['payloadVariant'].fields.append( - _FROMRADIO.fields_by_name['log_record']) -_FROMRADIO.fields_by_name['log_record'].containing_oneof = _FROMRADIO.oneofs_by_name['payloadVariant'] -_FROMRADIO.oneofs_by_name['payloadVariant'].fields.append( - _FROMRADIO.fields_by_name['config_complete_id']) -_FROMRADIO.fields_by_name['config_complete_id'].containing_oneof = _FROMRADIO.oneofs_by_name['payloadVariant'] -_FROMRADIO.oneofs_by_name['payloadVariant'].fields.append( - _FROMRADIO.fields_by_name['rebooted']) -_FROMRADIO.fields_by_name['rebooted'].containing_oneof = _FROMRADIO.oneofs_by_name['payloadVariant'] -_TORADIO_PEERINFO.containing_type = _TORADIO -_TORADIO.fields_by_name['packet'].message_type = _MESHPACKET -_TORADIO.fields_by_name['peer_info'].message_type = _TORADIO_PEERINFO -_TORADIO.oneofs_by_name['payloadVariant'].fields.append( - _TORADIO.fields_by_name['packet']) -_TORADIO.fields_by_name['packet'].containing_oneof = _TORADIO.oneofs_by_name['payloadVariant'] -_TORADIO.oneofs_by_name['payloadVariant'].fields.append( - _TORADIO.fields_by_name['peer_info']) -_TORADIO.fields_by_name['peer_info'].containing_oneof = _TORADIO.oneofs_by_name['payloadVariant'] -_TORADIO.oneofs_by_name['payloadVariant'].fields.append( - _TORADIO.fields_by_name['want_config_id']) -_TORADIO.fields_by_name['want_config_id'].containing_oneof = _TORADIO.oneofs_by_name['payloadVariant'] -_TORADIO.oneofs_by_name['payloadVariant'].fields.append( - _TORADIO.fields_by_name['disconnect']) -_TORADIO.fields_by_name['disconnect'].containing_oneof = _TORADIO.oneofs_by_name['payloadVariant'] -DESCRIPTOR.message_types_by_name['Position'] = _POSITION -DESCRIPTOR.message_types_by_name['User'] = _USER -DESCRIPTOR.message_types_by_name['RouteDiscovery'] = _ROUTEDISCOVERY -DESCRIPTOR.message_types_by_name['Routing'] = _ROUTING -DESCRIPTOR.message_types_by_name['Data'] = _DATA -DESCRIPTOR.message_types_by_name['MeshPacket'] = _MESHPACKET -DESCRIPTOR.message_types_by_name['NodeInfo'] = _NODEINFO -DESCRIPTOR.message_types_by_name['MyNodeInfo'] = _MYNODEINFO -DESCRIPTOR.message_types_by_name['LogRecord'] = _LOGRECORD -DESCRIPTOR.message_types_by_name['FromRadio'] = _FROMRADIO -DESCRIPTOR.message_types_by_name['ToRadio'] = _TORADIO -DESCRIPTOR.enum_types_by_name['HardwareModel'] = _HARDWAREMODEL -DESCRIPTOR.enum_types_by_name['Team'] = _TEAM -DESCRIPTOR.enum_types_by_name['Constants'] = _CONSTANTS -DESCRIPTOR.enum_types_by_name['CriticalErrorCode'] = _CRITICALERRORCODE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Position = _reflection.GeneratedProtocolMessageType('Position', (_message.Message,), { - 'DESCRIPTOR' : _POSITION, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:Position) - }) -_sym_db.RegisterMessage(Position) - -User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), { - 'DESCRIPTOR' : _USER, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:User) - }) -_sym_db.RegisterMessage(User) - -RouteDiscovery = _reflection.GeneratedProtocolMessageType('RouteDiscovery', (_message.Message,), { - 'DESCRIPTOR' : _ROUTEDISCOVERY, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:RouteDiscovery) - }) -_sym_db.RegisterMessage(RouteDiscovery) - -Routing = _reflection.GeneratedProtocolMessageType('Routing', (_message.Message,), { - 'DESCRIPTOR' : _ROUTING, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:Routing) - }) -_sym_db.RegisterMessage(Routing) - -Data = _reflection.GeneratedProtocolMessageType('Data', (_message.Message,), { - 'DESCRIPTOR' : _DATA, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:Data) - }) -_sym_db.RegisterMessage(Data) - -MeshPacket = _reflection.GeneratedProtocolMessageType('MeshPacket', (_message.Message,), { - 'DESCRIPTOR' : _MESHPACKET, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:MeshPacket) - }) -_sym_db.RegisterMessage(MeshPacket) - -NodeInfo = _reflection.GeneratedProtocolMessageType('NodeInfo', (_message.Message,), { - 'DESCRIPTOR' : _NODEINFO, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:NodeInfo) - }) -_sym_db.RegisterMessage(NodeInfo) - -MyNodeInfo = _reflection.GeneratedProtocolMessageType('MyNodeInfo', (_message.Message,), { - 'DESCRIPTOR' : _MYNODEINFO, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:MyNodeInfo) - }) -_sym_db.RegisterMessage(MyNodeInfo) - -LogRecord = _reflection.GeneratedProtocolMessageType('LogRecord', (_message.Message,), { - 'DESCRIPTOR' : _LOGRECORD, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:LogRecord) - }) -_sym_db.RegisterMessage(LogRecord) - -FromRadio = _reflection.GeneratedProtocolMessageType('FromRadio', (_message.Message,), { - 'DESCRIPTOR' : _FROMRADIO, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:FromRadio) - }) -_sym_db.RegisterMessage(FromRadio) - -ToRadio = _reflection.GeneratedProtocolMessageType('ToRadio', (_message.Message,), { - - 'PeerInfo' : _reflection.GeneratedProtocolMessageType('PeerInfo', (_message.Message,), { - 'DESCRIPTOR' : _TORADIO_PEERINFO, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:ToRadio.PeerInfo) - }) - , - 'DESCRIPTOR' : _TORADIO, - '__module__' : 'mesh_pb2' - # @@protoc_insertion_point(class_scope:ToRadio) - }) -_sym_db.RegisterMessage(ToRadio) -_sym_db.RegisterMessage(ToRadio.PeerInfo) - - -DESCRIPTOR._options = None -_MYNODEINFO.fields_by_name['region']._options = None -_MYNODEINFO.fields_by_name['hw_model_deprecated']._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/mqtt_pb2.py-E b/meshtastic/mqtt_pb2.py-E deleted file mode 100644 index f2df05a..0000000 --- a/meshtastic/mqtt_pb2.py-E +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: mqtt.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import mesh_pb2 as mesh__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='mqtt.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\nMQTTProtosH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\nmqtt.proto\x1a\nmesh.proto\"V\n\x0fServiceEnvelope\x12\x1b\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\tBF\n\x13\x63om.geeksville.meshB\nMQTTProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' - , - dependencies=[mesh__pb2.DESCRIPTOR,]) - - - - -_SERVICEENVELOPE = _descriptor.Descriptor( - name='ServiceEnvelope', - full_name='ServiceEnvelope', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='packet', full_name='ServiceEnvelope.packet', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='channel_id', full_name='ServiceEnvelope.channel_id', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gateway_id', full_name='ServiceEnvelope.gateway_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=26, - serialized_end=112, -) - -_SERVICEENVELOPE.fields_by_name['packet'].message_type = mesh__pb2._MESHPACKET -DESCRIPTOR.message_types_by_name['ServiceEnvelope'] = _SERVICEENVELOPE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ServiceEnvelope = _reflection.GeneratedProtocolMessageType('ServiceEnvelope', (_message.Message,), { - 'DESCRIPTOR' : _SERVICEENVELOPE, - '__module__' : 'mqtt_pb2' - # @@protoc_insertion_point(class_scope:ServiceEnvelope) - }) -_sym_db.RegisterMessage(ServiceEnvelope) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/node.py-E b/meshtastic/node.py-E deleted file mode 100644 index eab6974..0000000 --- a/meshtastic/node.py-E +++ /dev/null @@ -1,404 +0,0 @@ -""" -# an API for Meshtastic devices - -Primary class: SerialInterface -Install with pip: "[pip3 install meshtastic](https://pypi.org/project/meshtastic/)" -Source code on [github](https://github.com/meshtastic/Meshtastic-python) - -properties of SerialInterface: - -- radioConfig - Current radio configuration and device settings, if you write to this the new settings will be applied to -the device. -- nodes - The database of received nodes. Includes always up-to-date location and username information for each -node in the mesh. This is a read-only datastructure. -- nodesByNum - like "nodes" but keyed by nodeNum instead of nodeId -- myInfo - Contains read-only information about the local radio device (software version, hardware version, etc) - -# Published PubSub topics - -We use a [publish-subscribe](https://pypubsub.readthedocs.io/en/v4.0.3/) model to communicate asynchronous events. Available -topics: - -- meshtastic.connection.established - published once we've successfully connected to the radio and downloaded the node DB -- meshtastic.connection.lost - published once we've lost our link to the radio -- meshtastic.receive.text(packet) - delivers a received packet as a dictionary, if you only care about a particular -type of packet, you should subscribe to the full topic name. If you want to see all packets, simply subscribe to "meshtastic.receive". -- meshtastic.receive.position(packet) -- meshtastic.receive.user(packet) -- meshtastic.receive.data.portnum(packet) (where portnum is an integer or well known PortNum enum) -- meshtastic.node.updated(node = NodeInfo) - published when a node in the DB changes (appears, location changed, username changed, etc...) - -We receive position, user, or data packets from the mesh. You probably only care about meshtastic.receive.data. The first argument for -that publish will be the packet. Text or binary data packets (from sendData or sendText) will both arrive this way. If you print packet -you'll see the fields in the dictionary. decoded.data.payload will contain the raw bytes that were sent. If the packet was sent with -sendText, decoded.data.text will **also** be populated with the decoded string. For ASCII these two strings will be the same, but for -unicode scripts they can be different. - -# Example Usage -``` -import meshtastic -from pubsub import pub - -def onReceive(packet, interface): # called when a packet arrives - print(f"Received: {packet}") - -def onConnection(interface, topic=pub.AUTO_TOPIC): # called when we (re)connect to the radio - # defaults to broadcast, specify a destination ID if you wish - interface.sendText("hello mesh") - -pub.subscribe(onReceive, "meshtastic.receive") -pub.subscribe(onConnection, "meshtastic.connection.established") -# By default will try to find a meshtastic device, otherwise provide a device path like /dev/ttyUSB0 -interface = meshtastic.SerialInterface() - -``` - -""" - -import pygatt -import google.protobuf.json_format -import serial -import threading -import logging -import sys -import random -import traceback -import time -import base64 -import platform -import socket -from . import mesh_pb2, portnums_pb2, apponly_pb2, admin_pb2, environmental_measurement_pb2, remote_hardware_pb2, channel_pb2, radioconfig_pb2, util -from .util import fixme, catchAndIgnore, stripnl, DeferredExecution, Timeout -from pubsub import pub -from dotmap import DotMap -from typing import * -from google.protobuf.json_format import MessageToJson - - - -def pskToString(psk: bytes): - """Given an array of PSK bytes, decode them into a human readable (but privacy protecting) string""" - if len(psk) == 0: - return "unencrypted" - elif len(psk) == 1: - b = psk[0] - if b == 0: - return "unencrypted" - elif b == 1: - return "default" - else: - return f"simple{b - 1}" - else: - return "secret" - - -class Node: - """A model of a (local or remote) node in the mesh - - Includes methods for radioConfig and channels - """ - - def __init__(self, iface, nodeNum): - """Constructor""" - self.iface = iface - self.nodeNum = nodeNum - self.radioConfig = None - self.channels = None - self._timeout = Timeout(maxSecs=60) - - def showChannels(self): - """Show human readable description of our channels""" - print("Channels:") - for c in self.channels: - if c.role != channel_pb2.Channel.Role.DISABLED: - cStr = stripnl(MessageToJson(c.settings)) - print( - f" {channel_pb2.Channel.Role.Name(c.role)} psk={pskToString(c.settings.psk)} {cStr}") - publicURL = self.getURL(includeAll=False) - adminURL = self.getURL(includeAll=True) - print(f"\nPrimary channel URL: {publicURL}") - if adminURL != publicURL: - print(f"Complete URL (includes all channels): {adminURL}") - - def showInfo(self): - """Show human readable description of our node""" - print( - f"Preferences: {stripnl(MessageToJson(self.radioConfig.preferences))}\n") - self.showChannels() - - def requestConfig(self): - """ - Send regular MeshPackets to ask for settings and channels - """ - self.radioConfig = None - self.channels = None - self.partialChannels = [] # We keep our channels in a temp array until finished - - self._requestSettings() - - def waitForConfig(self): - """Block until radio config is received. Returns True if config has been received.""" - return self._timeout.waitForSet(self, attrs=('radioConfig', 'channels')) - - def writeConfig(self): - """Write the current (edited) radioConfig to the device""" - if self.radioConfig == None: - raise Exception("No RadioConfig has been read") - - p = admin_pb2.AdminMessage() - p.set_radio.CopyFrom(self.radioConfig) - - self._sendAdmin(p) - logging.debug("Wrote config") - - def writeChannel(self, channelIndex, adminIndex=0): - """Write the current (edited) channel to the device""" - - p = admin_pb2.AdminMessage() - p.set_channel.CopyFrom(self.channels[channelIndex]) - - self._sendAdmin(p, adminIndex=adminIndex) - logging.debug(f"Wrote channel {channelIndex}") - - def deleteChannel(self, channelIndex): - """Delete the specifed channelIndex and shift other channels up""" - ch = self.channels[channelIndex] - if ch.role != channel_pb2.Channel.Role.SECONDARY: - raise Exception("Only SECONDARY channels can be deleted") - - # we are careful here because if we move the "admin" channel the channelIndex we need to use - # for sending admin channels will also change - adminIndex = self.iface.localNode._getAdminChannelIndex() - - self.channels.pop(channelIndex) - self._fixupChannels() # expand back to 8 channels - - index = channelIndex - while index < self.iface.myInfo.max_channels: - self.writeChannel(index, adminIndex=adminIndex) - index += 1 - - # if we are updating the local node, we might end up *moving* the admin channel index as we are writing - if (self.iface.localNode == self) and index >= adminIndex: - # We've now passed the old location for admin index (and writen it), so we can start finding it by name again - adminIndex = 0 - - def getChannelByName(self, name): - """Try to find the named channel or return None""" - for c in (self.channels or []): - if c.settings and c.settings.name == name: - return c - return None - - def getDisabledChannel(self): - """Return the first channel that is disabled (i.e. available for some new use)""" - for c in self.channels: - if c.role == channel_pb2.Channel.Role.DISABLED: - return c - return None - - def _getAdminChannelIndex(self): - """Return the channel number of the admin channel, or 0 if no reserved channel""" - c = self.getChannelByName("admin") - if c: - return c.index - else: - return 0 - - def setOwner(self, long_name, short_name=None, is_licensed=False): - """Set device owner name""" - nChars = 3 - minChars = 2 - if long_name is not None: - long_name = long_name.strip() - if short_name is None: - words = long_name.split() - if len(long_name) <= nChars: - short_name = long_name - elif len(words) >= minChars: - short_name = ''.join(map(lambda word: word[0], words)) - else: - trans = str.maketrans(dict.fromkeys('aeiouAEIOU')) - short_name = long_name[0] + long_name[1:].translate(trans) - if len(short_name) < nChars: - short_name = long_name[:nChars] - - p = admin_pb2.AdminMessage() - - if long_name is not None: - p.set_owner.long_name = long_name - if short_name is not None: - short_name = short_name.strip() - if len(short_name) > nChars: - short_name = short_name[:nChars] - p.set_owner.short_name = short_name - p.set_owner.is_licensed = is_licensed - - return self._sendAdmin(p) - - def getURL(self, includeAll: bool = True): - """The sharable URL that describes the current channel - """ - # Only keep the primary/secondary channels, assume primary is first - channelSet = apponly_pb2.ChannelSet() - for c in self.channels: - if c.role == channel_pb2.Channel.Role.PRIMARY or (includeAll and c.role == channel_pb2.Channel.Role.SECONDARY): - channelSet.settings.append(c.settings) - bytes = channelSet.SerializeToString() - s = base64.urlsafe_b64encode(bytes).decode('ascii') - return f"https://www.meshtastic.org/d/#{s}".replace("=", "") - - def setURL(self, url): - """Set mesh network URL""" - if self.radioConfig == None: - raise Exception("No RadioConfig has been read") - - # URLs are of the form https://www.meshtastic.org/d/#{base64_channel_set} - # Split on '/#' to find the base64 encoded channel settings - splitURL = url.split("/#") - b64 = splitURL[-1] - - # We normally strip padding to make for a shorter URL, but the python parser doesn't like - # that. So add back any missing padding - # per https://stackoverflow.com/a/9807138 - missing_padding = len(b64) % 4 - if missing_padding: - b64 += '=' * (4 - missing_padding) - - decodedURL = base64.urlsafe_b64decode(b64) - channelSet = apponly_pb2.ChannelSet() - channelSet.ParseFromString(decodedURL) - - i = 0 - for chs in channelSet.settings: - ch = channel_pb2.Channel() - ch.role = channel_pb2.Channel.Role.PRIMARY if i == 0 else channel_pb2.Channel.Role.SECONDARY - ch.index = i - ch.settings.CopyFrom(chs) - self.channels[ch.index] = ch - self.writeChannel(ch.index) - i = i + 1 - - def _requestSettings(self): - """ - Done with initial config messages, now send regular MeshPackets to ask for settings - """ - p = admin_pb2.AdminMessage() - p.get_radio_request = True - - def onResponse(p): - """A closure to handle the response packet""" - self.radioConfig = p["decoded"]["admin"]["raw"].get_radio_response - logging.debug("Received radio config, now fetching channels...") - self._timeout.reset() # We made foreward progress - self._requestChannel(0) # now start fetching channels - - # Show progress message for super slow operations - if self != self.iface.localNode: - logging.info( - "Requesting preferences from remote node (this could take a while)") - - return self._sendAdmin(p, - wantResponse=True, - onResponse=onResponse) - - def exitSimulator(self): - """ - Tell a simulator node to exit (this message is ignored for other nodes) - """ - p = admin_pb2.AdminMessage() - p.exit_simulator = True - - return self._sendAdmin(p) - - def reboot(self, secs: int = 10): - """ - Tell the node to reboot - """ - p = admin_pb2.AdminMessage() - p.reboot_seconds = secs - logging.info(f"Telling node to reboot in {secs} seconds") - - return self._sendAdmin(p) - - def _fixupChannels(self): - """Fixup indexes and add disabled channels as needed""" - - # Add extra disabled channels as needed - for index, ch in enumerate(self.channels): - ch.index = index # fixup indexes - - self._fillChannels() - - def _fillChannels(self): - """Mark unused channels as disabled""" - - # Add extra disabled channels as needed - index = len(self.channels) - while index < self.iface.myInfo.max_channels: - ch = channel_pb2.Channel() - ch.role = channel_pb2.Channel.Role.DISABLED - ch.index = index - self.channels.append(ch) - index += 1 - - def _requestChannel(self, channelNum: int): - """ - Done with initial config messages, now send regular MeshPackets to ask for settings - """ - p = admin_pb2.AdminMessage() - p.get_channel_request = channelNum + 1 - - # Show progress message for super slow operations - if self != self.iface.localNode: - logging.info( - f"Requesting channel {channelNum} info from remote node (this could take a while)") - else: - logging.debug(f"Requesting channel {channelNum}") - - def onResponse(p): - """A closure to handle the response packet""" - c = p["decoded"]["admin"]["raw"].get_channel_response - self.partialChannels.append(c) - self._timeout.reset() # We made foreward progress - logging.debug(f"Received channel {stripnl(c)}") - index = c.index - - # for stress testing, we can always download all channels - fastChannelDownload = True - - # Once we see a response that has NO settings, assume we are at the end of channels and stop fetching - quitEarly = ( - c.role == channel_pb2.Channel.Role.DISABLED) and fastChannelDownload - - if quitEarly or index >= self.iface.myInfo.max_channels - 1: - logging.debug("Finished downloading channels") - - self.channels = self.partialChannels - self._fixupChannels() - - # FIXME, the following should only be called after we have settings and channels - self.iface._connected() # Tell everone else we are ready to go - else: - self._requestChannel(index + 1) - - return self._sendAdmin(p, - wantResponse=True, - onResponse=onResponse) - - def _sendAdmin(self, p: admin_pb2.AdminMessage, wantResponse=False, - onResponse=None, - adminIndex=0): - """Send an admin message to the specified node (or the local node if destNodeNum is zero)""" - - if adminIndex == 0: # unless a special channel index was used, we want to use the admin index - adminIndex = self.iface.localNode._getAdminChannelIndex() - - return self.iface.sendData(p, self.nodeNum, - portNum=portnums_pb2.PortNum.ADMIN_APP, - wantAck=True, - wantResponse=wantResponse, - onResponse=onResponse, - channelIndex=adminIndex) - - diff --git a/meshtastic/portnums_pb2.py-E b/meshtastic/portnums_pb2.py-E deleted file mode 100644 index 7c33c8b..0000000 --- a/meshtastic/portnums_pb2.py-E +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: portnums.proto - -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='portnums.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\010PortnumsH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x0eportnums.proto*\xcb\x02\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\x0f\n\x0bROUTING_APP\x10\x05\x12\r\n\tADMIN_APP\x10\x06\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12!\n\x1d\x45NVIRONMENTAL_MEASUREMENT_APP\x10\x43\x12\x0b\n\x07ZPS_APP\x10\x44\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\x44\n\x13\x63om.geeksville.meshB\x08PortnumsH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' -) - -_PORTNUM = _descriptor.EnumDescriptor( - name='PortNum', - full_name='PortNum', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNKNOWN_APP', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TEXT_MESSAGE_APP', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='REMOTE_HARDWARE_APP', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POSITION_APP', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='NODEINFO_APP', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUTING_APP', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ADMIN_APP', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='REPLY_APP', index=7, number=32, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='IP_TUNNEL_APP', index=8, number=33, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='SERIAL_APP', index=9, number=64, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='STORE_FORWARD_APP', index=10, number=65, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='RANGE_TEST_APP', index=11, number=66, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ENVIRONMENTAL_MEASUREMENT_APP', index=12, number=67, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ZPS_APP', index=13, number=68, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PRIVATE_APP', index=14, number=256, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ATAK_FORWARDER', index=15, number=257, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAX', index=16, number=511, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=19, - serialized_end=350, -) -_sym_db.RegisterEnumDescriptor(_PORTNUM) - -PortNum = enum_type_wrapper.EnumTypeWrapper(_PORTNUM) -UNKNOWN_APP = 0 -TEXT_MESSAGE_APP = 1 -REMOTE_HARDWARE_APP = 2 -POSITION_APP = 3 -NODEINFO_APP = 4 -ROUTING_APP = 5 -ADMIN_APP = 6 -REPLY_APP = 32 -IP_TUNNEL_APP = 33 -SERIAL_APP = 64 -STORE_FORWARD_APP = 65 -RANGE_TEST_APP = 66 -ENVIRONMENTAL_MEASUREMENT_APP = 67 -ZPS_APP = 68 -PRIVATE_APP = 256 -ATAK_FORWARDER = 257 -MAX = 511 - - -DESCRIPTOR.enum_types_by_name['PortNum'] = _PORTNUM -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/radioconfig_pb2.py-E b/meshtastic/radioconfig_pb2.py-E deleted file mode 100644 index 1e755fb..0000000 --- a/meshtastic/radioconfig_pb2.py-E +++ /dev/null @@ -1,932 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: radioconfig.proto - -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='radioconfig.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\021RadioConfigProtosH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x11radioconfig.proto\"\xfa\x12\n\x0bRadioConfig\x12\x31\n\x0bpreferences\x18\x01 \x01(\x0b\x32\x1c.RadioConfig.UserPreferences\x1a\xb7\x12\n\x0fUserPreferences\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12 \n\x18position_broadcast_smart\x18\x11 \x01(\x08\x12\x1b\n\x13send_owner_interval\x18\x02 \x01(\r\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x16\n\x0escreen_on_secs\x18\x05 \x01(\r\x12\x1a\n\x12phone_timeout_secs\x18\x06 \x01(\r\x12\x1d\n\x15phone_sds_timeout_sec\x18\x07 \x01(\r\x12\x1d\n\x15mesh_sds_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08sds_secs\x18\t \x01(\r\x12\x0f\n\x07ls_secs\x18\n \x01(\r\x12\x15\n\rmin_wake_secs\x18\x0b \x01(\r\x12\x11\n\twifi_ssid\x18\x0c \x01(\t\x12\x15\n\rwifi_password\x18\r \x01(\t\x12\x14\n\x0cwifi_ap_mode\x18\x0e \x01(\x08\x12\x1b\n\x06region\x18\x0f \x01(\x0e\x32\x0b.RegionCode\x12&\n\x0e\x63harge_current\x18\x10 \x01(\x0e\x32\x0e.ChargeCurrent\x12\x11\n\tis_router\x18% \x01(\x08\x12\x14\n\x0cis_low_power\x18& \x01(\x08\x12\x16\n\x0e\x66ixed_position\x18\' \x01(\x08\x12\x17\n\x0fserial_disabled\x18( \x01(\x08\x12(\n\x0elocation_share\x18 \x01(\x0e\x32\x10.LocationSharing\x12$\n\rgps_operation\x18! \x01(\x0e\x32\r.GpsOperation\x12\x1b\n\x13gps_update_interval\x18\" \x01(\r\x12\x18\n\x10gps_attempt_time\x18$ \x01(\r\x12\x15\n\rgps_accept_2d\x18- \x01(\x08\x12\x13\n\x0bgps_max_dop\x18. \x01(\r\x12\x18\n\x10\x66requency_offset\x18) \x01(\x02\x12\x13\n\x0bmqtt_server\x18* \x01(\t\x12\x15\n\rmqtt_disabled\x18+ \x01(\x08\x12(\n\ngps_format\x18, \x01(\x0e\x32\x14.GpsCoordinateFormat\x12\x15\n\rfactory_reset\x18\x64 \x01(\x08\x12\x19\n\x11\x64\x65\x62ug_log_enabled\x18\x65 \x01(\x08\x12\x17\n\x0fignore_incoming\x18g \x03(\r\x12\x1c\n\x14serialplugin_enabled\x18x \x01(\x08\x12\x19\n\x11serialplugin_echo\x18y \x01(\x08\x12\x18\n\x10serialplugin_rxd\x18z \x01(\r\x12\x18\n\x10serialplugin_txd\x18{ \x01(\r\x12\x1c\n\x14serialplugin_timeout\x18| \x01(\r\x12\x19\n\x11serialplugin_mode\x18} \x01(\r\x12\'\n\x1f\x65xt_notification_plugin_enabled\x18~ \x01(\x08\x12)\n!ext_notification_plugin_output_ms\x18\x7f \x01(\r\x12\'\n\x1e\x65xt_notification_plugin_output\x18\x80\x01 \x01(\r\x12\'\n\x1e\x65xt_notification_plugin_active\x18\x81\x01 \x01(\x08\x12.\n%ext_notification_plugin_alert_message\x18\x82\x01 \x01(\x08\x12+\n\"ext_notification_plugin_alert_bell\x18\x83\x01 \x01(\x08\x12\"\n\x19range_test_plugin_enabled\x18\x84\x01 \x01(\x08\x12!\n\x18range_test_plugin_sender\x18\x85\x01 \x01(\r\x12\x1f\n\x16range_test_plugin_save\x18\x86\x01 \x01(\x08\x12%\n\x1cstore_forward_plugin_enabled\x18\x94\x01 \x01(\x08\x12\'\n\x1estore_forward_plugin_heartbeat\x18\x95\x01 \x01(\x08\x12%\n\x1cstore_forward_plugin_records\x18\x89\x01 \x01(\r\x12\x30\n\'store_forward_plugin_history_return_max\x18\x8a\x01 \x01(\r\x12\x33\n*store_forward_plugin_history_return_window\x18\x8b\x01 \x01(\r\x12=\n4environmental_measurement_plugin_measurement_enabled\x18\x8c\x01 \x01(\x08\x12\x38\n/environmental_measurement_plugin_screen_enabled\x18\x8d\x01 \x01(\x08\x12\x44\n;environmental_measurement_plugin_read_error_count_threshold\x18\x8e\x01 \x01(\r\x12\x39\n0environmental_measurement_plugin_update_interval\x18\x8f\x01 \x01(\r\x12;\n2environmental_measurement_plugin_recovery_interval\x18\x90\x01 \x01(\r\x12;\n2environmental_measurement_plugin_display_farenheit\x18\x91\x01 \x01(\x08\x12v\n,environmental_measurement_plugin_sensor_type\x18\x92\x01 \x01(\x0e\x32?.RadioConfig.UserPreferences.EnvironmentalMeasurementSensorType\x12\x34\n+environmental_measurement_plugin_sensor_pin\x18\x93\x01 \x01(\r\x12\x17\n\x0eposition_flags\x18\x96\x01 \x01(\r\x12\x1a\n\x11is_always_powered\x18\x97\x01 \x01(\x08\x12\"\n\x19\x61uto_screen_carousel_secs\x18\x98\x01 \x01(\r\"<\n\"EnvironmentalMeasurementSensorType\x12\t\n\x05\x44HT11\x10\x00\x12\x0b\n\x07\x44S18B20\x10\x01J\x06\x08\x88\x01\x10\x89\x01*f\n\nRegionCode\x12\t\n\x05Unset\x10\x00\x12\x06\n\x02US\x10\x01\x12\t\n\x05\x45U433\x10\x02\x12\t\n\x05\x45U865\x10\x03\x12\x06\n\x02\x43N\x10\x04\x12\x06\n\x02JP\x10\x05\x12\x07\n\x03\x41NZ\x10\x06\x12\x06\n\x02KR\x10\x07\x12\x06\n\x02TW\x10\x08\x12\x06\n\x02RU\x10\t*\xd1\x01\n\rChargeCurrent\x12\x0b\n\x07MAUnset\x10\x00\x12\t\n\x05MA100\x10\x01\x12\t\n\x05MA190\x10\x02\x12\t\n\x05MA280\x10\x03\x12\t\n\x05MA360\x10\x04\x12\t\n\x05MA450\x10\x05\x12\t\n\x05MA550\x10\x06\x12\t\n\x05MA630\x10\x07\x12\t\n\x05MA700\x10\x08\x12\t\n\x05MA780\x10\t\x12\t\n\x05MA880\x10\n\x12\t\n\x05MA960\x10\x0b\x12\n\n\x06MA1000\x10\x0c\x12\n\n\x06MA1080\x10\r\x12\n\n\x06MA1160\x10\x0e\x12\n\n\x06MA1240\x10\x0f\x12\n\n\x06MA1320\x10\x10*j\n\x0cGpsOperation\x12\x0e\n\nGpsOpUnset\x10\x00\x12\x13\n\x0fGpsOpStationary\x10\x01\x12\x0f\n\x0bGpsOpMobile\x10\x02\x12\x11\n\rGpsOpTimeOnly\x10\x03\x12\x11\n\rGpsOpDisabled\x10\x04*\x83\x01\n\x13GpsCoordinateFormat\x12\x10\n\x0cGpsFormatDec\x10\x00\x12\x10\n\x0cGpsFormatDMS\x10\x01\x12\x10\n\x0cGpsFormatUTM\x10\x02\x12\x11\n\rGpsFormatMGRS\x10\x03\x12\x10\n\x0cGpsFormatOLC\x10\x04\x12\x11\n\rGpsFormatOSGR\x10\x05*@\n\x0fLocationSharing\x12\x0c\n\x08LocUnset\x10\x00\x12\x0e\n\nLocEnabled\x10\x01\x12\x0f\n\x0bLocDisabled\x10\x02*\xbc\x01\n\rPositionFlags\x12\x11\n\rPOS_UNDEFINED\x10\x00\x12\x10\n\x0cPOS_ALTITUDE\x10\x01\x12\x0f\n\x0bPOS_ALT_MSL\x10\x02\x12\x0f\n\x0bPOS_GEO_SEP\x10\x04\x12\x0b\n\x07POS_DOP\x10\x08\x12\r\n\tPOS_HVDOP\x10\x10\x12\x0f\n\x0bPOS_BATTERY\x10 \x12\x11\n\rPOS_SATINVIEW\x10@\x12\x10\n\x0bPOS_SEQ_NOS\x10\x80\x01\x12\x12\n\rPOS_TIMESTAMP\x10\x80\x02\x42M\n\x13\x63om.geeksville.meshB\x11RadioConfigProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' -) - -_REGIONCODE = _descriptor.EnumDescriptor( - name='RegionCode', - full_name='RegionCode', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='Unset', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='US', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EU433', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='EU865', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CN', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='JP', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ANZ', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='KR', index=7, number=7, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TW', index=8, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='RU', index=9, number=9, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2450, - serialized_end=2552, -) -_sym_db.RegisterEnumDescriptor(_REGIONCODE) - -RegionCode = enum_type_wrapper.EnumTypeWrapper(_REGIONCODE) -_CHARGECURRENT = _descriptor.EnumDescriptor( - name='ChargeCurrent', - full_name='ChargeCurrent', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='MAUnset', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA100', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA190', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA280', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA360', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA450', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA550', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA630', index=7, number=7, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA700', index=8, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA780', index=9, number=9, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA880', index=10, number=10, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA960', index=11, number=11, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA1000', index=12, number=12, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA1080', index=13, number=13, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA1160', index=14, number=14, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA1240', index=15, number=15, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MA1320', index=16, number=16, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2555, - serialized_end=2764, -) -_sym_db.RegisterEnumDescriptor(_CHARGECURRENT) - -ChargeCurrent = enum_type_wrapper.EnumTypeWrapper(_CHARGECURRENT) -_GPSOPERATION = _descriptor.EnumDescriptor( - name='GpsOperation', - full_name='GpsOperation', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='GpsOpUnset', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsOpStationary', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsOpMobile', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsOpTimeOnly', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsOpDisabled', index=4, number=4, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2766, - serialized_end=2872, -) -_sym_db.RegisterEnumDescriptor(_GPSOPERATION) - -GpsOperation = enum_type_wrapper.EnumTypeWrapper(_GPSOPERATION) -_GPSCOORDINATEFORMAT = _descriptor.EnumDescriptor( - name='GpsCoordinateFormat', - full_name='GpsCoordinateFormat', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='GpsFormatDec', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsFormatDMS', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsFormatUTM', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsFormatMGRS', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsFormatOLC', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GpsFormatOSGR', index=5, number=5, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2875, - serialized_end=3006, -) -_sym_db.RegisterEnumDescriptor(_GPSCOORDINATEFORMAT) - -GpsCoordinateFormat = enum_type_wrapper.EnumTypeWrapper(_GPSCOORDINATEFORMAT) -_LOCATIONSHARING = _descriptor.EnumDescriptor( - name='LocationSharing', - full_name='LocationSharing', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='LocUnset', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LocEnabled', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LocDisabled', index=2, number=2, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=3008, - serialized_end=3072, -) -_sym_db.RegisterEnumDescriptor(_LOCATIONSHARING) - -LocationSharing = enum_type_wrapper.EnumTypeWrapper(_LOCATIONSHARING) -_POSITIONFLAGS = _descriptor.EnumDescriptor( - name='PositionFlags', - full_name='PositionFlags', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='POS_UNDEFINED', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_ALTITUDE', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_ALT_MSL', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_GEO_SEP', index=3, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_DOP', index=4, number=8, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_HVDOP', index=5, number=16, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_BATTERY', index=6, number=32, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_SATINVIEW', index=7, number=64, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_SEQ_NOS', index=8, number=128, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='POS_TIMESTAMP', index=9, number=256, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=3075, - serialized_end=3263, -) -_sym_db.RegisterEnumDescriptor(_POSITIONFLAGS) - -PositionFlags = enum_type_wrapper.EnumTypeWrapper(_POSITIONFLAGS) -Unset = 0 -US = 1 -EU433 = 2 -EU865 = 3 -CN = 4 -JP = 5 -ANZ = 6 -KR = 7 -TW = 8 -RU = 9 -MAUnset = 0 -MA100 = 1 -MA190 = 2 -MA280 = 3 -MA360 = 4 -MA450 = 5 -MA550 = 6 -MA630 = 7 -MA700 = 8 -MA780 = 9 -MA880 = 10 -MA960 = 11 -MA1000 = 12 -MA1080 = 13 -MA1160 = 14 -MA1240 = 15 -MA1320 = 16 -GpsOpUnset = 0 -GpsOpStationary = 1 -GpsOpMobile = 2 -GpsOpTimeOnly = 3 -GpsOpDisabled = 4 -GpsFormatDec = 0 -GpsFormatDMS = 1 -GpsFormatUTM = 2 -GpsFormatMGRS = 3 -GpsFormatOLC = 4 -GpsFormatOSGR = 5 -LocUnset = 0 -LocEnabled = 1 -LocDisabled = 2 -POS_UNDEFINED = 0 -POS_ALTITUDE = 1 -POS_ALT_MSL = 2 -POS_GEO_SEP = 4 -POS_DOP = 8 -POS_HVDOP = 16 -POS_BATTERY = 32 -POS_SATINVIEW = 64 -POS_SEQ_NOS = 128 -POS_TIMESTAMP = 256 - - -_RADIOCONFIG_USERPREFERENCES_ENVIRONMENTALMEASUREMENTSENSORTYPE = _descriptor.EnumDescriptor( - name='EnvironmentalMeasurementSensorType', - full_name='RadioConfig.UserPreferences.EnvironmentalMeasurementSensorType', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='DHT11', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DS18B20', index=1, number=1, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=2380, - serialized_end=2440, -) -_sym_db.RegisterEnumDescriptor(_RADIOCONFIG_USERPREFERENCES_ENVIRONMENTALMEASUREMENTSENSORTYPE) - - -_RADIOCONFIG_USERPREFERENCES = _descriptor.Descriptor( - name='UserPreferences', - full_name='RadioConfig.UserPreferences', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='position_broadcast_secs', full_name='RadioConfig.UserPreferences.position_broadcast_secs', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='position_broadcast_smart', full_name='RadioConfig.UserPreferences.position_broadcast_smart', index=1, - number=17, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='send_owner_interval', full_name='RadioConfig.UserPreferences.send_owner_interval', index=2, - number=2, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='wait_bluetooth_secs', full_name='RadioConfig.UserPreferences.wait_bluetooth_secs', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='screen_on_secs', full_name='RadioConfig.UserPreferences.screen_on_secs', index=4, - number=5, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='phone_timeout_secs', full_name='RadioConfig.UserPreferences.phone_timeout_secs', index=5, - number=6, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='phone_sds_timeout_sec', full_name='RadioConfig.UserPreferences.phone_sds_timeout_sec', index=6, - number=7, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='mesh_sds_timeout_secs', full_name='RadioConfig.UserPreferences.mesh_sds_timeout_secs', index=7, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sds_secs', full_name='RadioConfig.UserPreferences.sds_secs', index=8, - number=9, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ls_secs', full_name='RadioConfig.UserPreferences.ls_secs', index=9, - number=10, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='min_wake_secs', full_name='RadioConfig.UserPreferences.min_wake_secs', index=10, - number=11, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='wifi_ssid', full_name='RadioConfig.UserPreferences.wifi_ssid', index=11, - number=12, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='wifi_password', full_name='RadioConfig.UserPreferences.wifi_password', index=12, - number=13, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='wifi_ap_mode', full_name='RadioConfig.UserPreferences.wifi_ap_mode', index=13, - number=14, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='region', full_name='RadioConfig.UserPreferences.region', index=14, - number=15, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='charge_current', full_name='RadioConfig.UserPreferences.charge_current', index=15, - number=16, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_router', full_name='RadioConfig.UserPreferences.is_router', index=16, - number=37, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_low_power', full_name='RadioConfig.UserPreferences.is_low_power', index=17, - number=38, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='fixed_position', full_name='RadioConfig.UserPreferences.fixed_position', index=18, - number=39, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serial_disabled', full_name='RadioConfig.UserPreferences.serial_disabled', index=19, - number=40, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='location_share', full_name='RadioConfig.UserPreferences.location_share', index=20, - number=32, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_operation', full_name='RadioConfig.UserPreferences.gps_operation', index=21, - number=33, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_update_interval', full_name='RadioConfig.UserPreferences.gps_update_interval', index=22, - number=34, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_attempt_time', full_name='RadioConfig.UserPreferences.gps_attempt_time', index=23, - number=36, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_accept_2d', full_name='RadioConfig.UserPreferences.gps_accept_2d', index=24, - number=45, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_max_dop', full_name='RadioConfig.UserPreferences.gps_max_dop', index=25, - number=46, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='frequency_offset', full_name='RadioConfig.UserPreferences.frequency_offset', index=26, - number=41, type=2, cpp_type=6, label=1, - has_default_value=False, default_value=float(0), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='mqtt_server', full_name='RadioConfig.UserPreferences.mqtt_server', index=27, - number=42, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='mqtt_disabled', full_name='RadioConfig.UserPreferences.mqtt_disabled', index=28, - number=43, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gps_format', full_name='RadioConfig.UserPreferences.gps_format', index=29, - number=44, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='factory_reset', full_name='RadioConfig.UserPreferences.factory_reset', index=30, - number=100, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='debug_log_enabled', full_name='RadioConfig.UserPreferences.debug_log_enabled', index=31, - number=101, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ignore_incoming', full_name='RadioConfig.UserPreferences.ignore_incoming', index=32, - number=103, type=13, cpp_type=3, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serialplugin_enabled', full_name='RadioConfig.UserPreferences.serialplugin_enabled', index=33, - number=120, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serialplugin_echo', full_name='RadioConfig.UserPreferences.serialplugin_echo', index=34, - number=121, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serialplugin_rxd', full_name='RadioConfig.UserPreferences.serialplugin_rxd', index=35, - number=122, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serialplugin_txd', full_name='RadioConfig.UserPreferences.serialplugin_txd', index=36, - number=123, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serialplugin_timeout', full_name='RadioConfig.UserPreferences.serialplugin_timeout', index=37, - number=124, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='serialplugin_mode', full_name='RadioConfig.UserPreferences.serialplugin_mode', index=38, - number=125, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ext_notification_plugin_enabled', full_name='RadioConfig.UserPreferences.ext_notification_plugin_enabled', index=39, - number=126, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ext_notification_plugin_output_ms', full_name='RadioConfig.UserPreferences.ext_notification_plugin_output_ms', index=40, - number=127, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ext_notification_plugin_output', full_name='RadioConfig.UserPreferences.ext_notification_plugin_output', index=41, - number=128, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ext_notification_plugin_active', full_name='RadioConfig.UserPreferences.ext_notification_plugin_active', index=42, - number=129, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ext_notification_plugin_alert_message', full_name='RadioConfig.UserPreferences.ext_notification_plugin_alert_message', index=43, - number=130, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ext_notification_plugin_alert_bell', full_name='RadioConfig.UserPreferences.ext_notification_plugin_alert_bell', index=44, - number=131, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='range_test_plugin_enabled', full_name='RadioConfig.UserPreferences.range_test_plugin_enabled', index=45, - number=132, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='range_test_plugin_sender', full_name='RadioConfig.UserPreferences.range_test_plugin_sender', index=46, - number=133, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='range_test_plugin_save', full_name='RadioConfig.UserPreferences.range_test_plugin_save', index=47, - number=134, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='store_forward_plugin_enabled', full_name='RadioConfig.UserPreferences.store_forward_plugin_enabled', index=48, - number=148, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='store_forward_plugin_heartbeat', full_name='RadioConfig.UserPreferences.store_forward_plugin_heartbeat', index=49, - number=149, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='store_forward_plugin_records', full_name='RadioConfig.UserPreferences.store_forward_plugin_records', index=50, - number=137, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='store_forward_plugin_history_return_max', full_name='RadioConfig.UserPreferences.store_forward_plugin_history_return_max', index=51, - number=138, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='store_forward_plugin_history_return_window', full_name='RadioConfig.UserPreferences.store_forward_plugin_history_return_window', index=52, - number=139, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_measurement_enabled', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_measurement_enabled', index=53, - number=140, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_screen_enabled', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_screen_enabled', index=54, - number=141, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_read_error_count_threshold', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_read_error_count_threshold', index=55, - number=142, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_update_interval', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_update_interval', index=56, - number=143, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_recovery_interval', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_recovery_interval', index=57, - number=144, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_display_farenheit', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_display_farenheit', index=58, - number=145, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_sensor_type', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_sensor_type', index=59, - number=146, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='environmental_measurement_plugin_sensor_pin', full_name='RadioConfig.UserPreferences.environmental_measurement_plugin_sensor_pin', index=60, - number=147, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='position_flags', full_name='RadioConfig.UserPreferences.position_flags', index=61, - number=150, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='is_always_powered', full_name='RadioConfig.UserPreferences.is_always_powered', index=62, - number=151, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='auto_screen_carousel_secs', full_name='RadioConfig.UserPreferences.auto_screen_carousel_secs', index=63, - number=152, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _RADIOCONFIG_USERPREFERENCES_ENVIRONMENTALMEASUREMENTSENSORTYPE, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=89, - serialized_end=2448, -) - -_RADIOCONFIG = _descriptor.Descriptor( - name='RadioConfig', - full_name='RadioConfig', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='preferences', full_name='RadioConfig.preferences', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_RADIOCONFIG_USERPREFERENCES, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=22, - serialized_end=2448, -) - -_RADIOCONFIG_USERPREFERENCES.fields_by_name['region'].enum_type = _REGIONCODE -_RADIOCONFIG_USERPREFERENCES.fields_by_name['charge_current'].enum_type = _CHARGECURRENT -_RADIOCONFIG_USERPREFERENCES.fields_by_name['location_share'].enum_type = _LOCATIONSHARING -_RADIOCONFIG_USERPREFERENCES.fields_by_name['gps_operation'].enum_type = _GPSOPERATION -_RADIOCONFIG_USERPREFERENCES.fields_by_name['gps_format'].enum_type = _GPSCOORDINATEFORMAT -_RADIOCONFIG_USERPREFERENCES.fields_by_name['environmental_measurement_plugin_sensor_type'].enum_type = _RADIOCONFIG_USERPREFERENCES_ENVIRONMENTALMEASUREMENTSENSORTYPE -_RADIOCONFIG_USERPREFERENCES.containing_type = _RADIOCONFIG -_RADIOCONFIG_USERPREFERENCES_ENVIRONMENTALMEASUREMENTSENSORTYPE.containing_type = _RADIOCONFIG_USERPREFERENCES -_RADIOCONFIG.fields_by_name['preferences'].message_type = _RADIOCONFIG_USERPREFERENCES -DESCRIPTOR.message_types_by_name['RadioConfig'] = _RADIOCONFIG -DESCRIPTOR.enum_types_by_name['RegionCode'] = _REGIONCODE -DESCRIPTOR.enum_types_by_name['ChargeCurrent'] = _CHARGECURRENT -DESCRIPTOR.enum_types_by_name['GpsOperation'] = _GPSOPERATION -DESCRIPTOR.enum_types_by_name['GpsCoordinateFormat'] = _GPSCOORDINATEFORMAT -DESCRIPTOR.enum_types_by_name['LocationSharing'] = _LOCATIONSHARING -DESCRIPTOR.enum_types_by_name['PositionFlags'] = _POSITIONFLAGS -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -RadioConfig = _reflection.GeneratedProtocolMessageType('RadioConfig', (_message.Message,), { - - 'UserPreferences' : _reflection.GeneratedProtocolMessageType('UserPreferences', (_message.Message,), { - 'DESCRIPTOR' : _RADIOCONFIG_USERPREFERENCES, - '__module__' : 'radioconfig_pb2' - # @@protoc_insertion_point(class_scope:RadioConfig.UserPreferences) - }) - , - 'DESCRIPTOR' : _RADIOCONFIG, - '__module__' : 'radioconfig_pb2' - # @@protoc_insertion_point(class_scope:RadioConfig) - }) -_sym_db.RegisterMessage(RadioConfig) -_sym_db.RegisterMessage(RadioConfig.UserPreferences) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/remote_hardware.py-E b/meshtastic/remote_hardware.py-E deleted file mode 100644 index ae98938..0000000 --- a/meshtastic/remote_hardware.py-E +++ /dev/null @@ -1,67 +0,0 @@ - -from . import portnums_pb2, remote_hardware_pb2 -from pubsub import pub - - -def onGPIOreceive(packet, interface): - """Callback for received GPIO responses - - FIXME figure out how to do closures with methods in python""" - hw = packet["decoded"]["remotehw"] - print(f'Received RemoteHardware typ={hw["typ"]}, gpio_value={hw["gpioValue"]}') - - -class RemoteHardwareClient: - """ - This is the client code to control/monitor simple hardware built into the - meshtastic devices. It is intended to be both a useful API/service and example - code for how you can connect to your own custom meshtastic services - """ - - def __init__(self, iface): - """ - Constructor - - iface is the already open MeshInterface instance - """ - self.iface = iface - ch = iface.localNode.getChannelByName("gpio") - if not ch: - raise Exception( - "No gpio channel found, please create on the sending and receive nodes to use this (secured) service (--ch-add gpio --info then --seturl)") - self.channelIndex = ch.index - - pub.subscribe( - onGPIOreceive, "meshtastic.receive.remotehw") - - def _sendHardware(self, nodeid, r, wantResponse=False, onResponse=None): - if not nodeid: - raise Exception( - "You must set a destination node ID for this operation (use --dest \!xxxxxxxxx)") - return self.iface.sendData(r, nodeid, portnums_pb2.REMOTE_HARDWARE_APP, - wantAck=True, channelIndex=self.channelIndex, wantResponse=wantResponse, onResponse=onResponse) - - def writeGPIOs(self, nodeid, mask, vals): - """ - Write the specified vals bits to the device GPIOs. Only bits in mask that - are 1 will be changed - """ - r = remote_hardware_pb2.HardwareMessage() - r.typ = remote_hardware_pb2.HardwareMessage.Type.WRITE_GPIOS - r.gpio_mask = mask - r.gpio_value = vals - return self._sendHardware(nodeid, r) - - def readGPIOs(self, nodeid, mask, onResponse = None): - """Read the specified bits from GPIO inputs on the device""" - r = remote_hardware_pb2.HardwareMessage() - r.typ = remote_hardware_pb2.HardwareMessage.Type.READ_GPIOS - r.gpio_mask = mask - return self._sendHardware(nodeid, r, wantResponse=True, onResponse=onResponse) - - def watchGPIOs(self, nodeid, mask): - """Watch the specified bits from GPIO inputs on the device for changes""" - r = remote_hardware_pb2.HardwareMessage() - r.typ = remote_hardware_pb2.HardwareMessage.Type.WATCH_GPIOS - r.gpio_mask = mask - return self._sendHardware(nodeid, r) diff --git a/meshtastic/remote_hardware_pb2.py-E b/meshtastic/remote_hardware_pb2.py-E deleted file mode 100644 index 17c41b4..0000000 --- a/meshtastic/remote_hardware_pb2.py-E +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: remote_hardware.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='remote_hardware.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\016RemoteHardwareH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x15remote_hardware.proto\"\xca\x01\n\x0fHardwareMessage\x12\"\n\x03typ\x18\x01 \x01(\x0e\x32\x15.HardwareMessage.Type\x12\x11\n\tgpio_mask\x18\x02 \x01(\x04\x12\x12\n\ngpio_value\x18\x03 \x01(\x04\"l\n\x04Type\x12\t\n\x05UNSET\x10\x00\x12\x0f\n\x0bWRITE_GPIOS\x10\x01\x12\x0f\n\x0bWATCH_GPIOS\x10\x02\x12\x11\n\rGPIOS_CHANGED\x10\x03\x12\x0e\n\nREAD_GPIOS\x10\x04\x12\x14\n\x10READ_GPIOS_REPLY\x10\x05\x42J\n\x13\x63om.geeksville.meshB\x0eRemoteHardwareH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' -) - - - -_HARDWAREMESSAGE_TYPE = _descriptor.EnumDescriptor( - name='Type', - full_name='HardwareMessage.Type', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNSET', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='WRITE_GPIOS', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='WATCH_GPIOS', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='GPIOS_CHANGED', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='READ_GPIOS', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='READ_GPIOS_REPLY', index=5, number=5, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=120, - serialized_end=228, -) -_sym_db.RegisterEnumDescriptor(_HARDWAREMESSAGE_TYPE) - - -_HARDWAREMESSAGE = _descriptor.Descriptor( - name='HardwareMessage', - full_name='HardwareMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='typ', full_name='HardwareMessage.typ', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gpio_mask', full_name='HardwareMessage.gpio_mask', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='gpio_value', full_name='HardwareMessage.gpio_value', index=2, - number=3, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _HARDWAREMESSAGE_TYPE, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=26, - serialized_end=228, -) - -_HARDWAREMESSAGE.fields_by_name['typ'].enum_type = _HARDWAREMESSAGE_TYPE -_HARDWAREMESSAGE_TYPE.containing_type = _HARDWAREMESSAGE -DESCRIPTOR.message_types_by_name['HardwareMessage'] = _HARDWAREMESSAGE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -HardwareMessage = _reflection.GeneratedProtocolMessageType('HardwareMessage', (_message.Message,), { - 'DESCRIPTOR' : _HARDWAREMESSAGE, - '__module__' : 'remote_hardware_pb2' - # @@protoc_insertion_point(class_scope:HardwareMessage) - }) -_sym_db.RegisterMessage(HardwareMessage) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/storeforward_pb2.py-E b/meshtastic/storeforward_pb2.py-E deleted file mode 100644 index b27cb8e..0000000 --- a/meshtastic/storeforward_pb2.py-E +++ /dev/null @@ -1,291 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: storeforward.proto - -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='storeforward.proto', - package='', - syntax='proto3', - serialized_options=b'\n\023com.geeksville.meshB\017StoreAndForwardH\003Z!github.com/meshtastic/gomeshproto', - serialized_pb=b'\n\x12storeforward.proto\"\x8d\x05\n\x16StoreAndForwardMessage\x12\x33\n\x02rr\x18\x01 \x01(\x0e\x32\'.StoreAndForwardMessage.RequestResponse\x12\x31\n\x05stats\x18\x02 \x01(\x0b\x32\".StoreAndForwardMessage.Statistics\x12\x30\n\x07history\x18\x03 \x01(\x0b\x32\x1f.StoreAndForwardMessage.History\x1a\xc6\x01\n\nStatistics\x12\x15\n\rMessagesTotal\x18\x01 \x01(\r\x12\x15\n\rMessagesSaved\x18\x02 \x01(\r\x12\x13\n\x0bMessagesMax\x18\x03 \x01(\r\x12\x0e\n\x06UpTime\x18\x04 \x01(\r\x12\x10\n\x08Requests\x18\x05 \x01(\r\x12\x17\n\x0fRequestsHistory\x18\x06 \x01(\r\x12\x11\n\tHeartbeat\x18\x07 \x01(\x08\x12\x11\n\tReturnMax\x18\x08 \x01(\r\x12\x14\n\x0cReturnWindow\x18\t \x01(\r\x1a\x32\n\x07History\x12\x17\n\x0fHistoryMessages\x18\x01 \x01(\r\x12\x0e\n\x06Window\x18\x02 \x01(\r\"\xdb\x01\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\x10\n\x0c\x43LIENT_ERROR\x10\x65\x12\x12\n\x0e\x43LIENT_HISTORY\x10\x66\x12\x10\n\x0c\x43LIENT_STATS\x10g\x12\x0f\n\x0b\x43LIENT_PING\x10h\x12\x0f\n\x0b\x43LIENT_PONG\x10i\x12\x08\n\x03MAX\x10\xff\x01\x42K\n\x13\x63om.geeksville.meshB\x0fStoreAndForwardH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3' -) - - - -_STOREANDFORWARDMESSAGE_REQUESTRESPONSE = _descriptor.EnumDescriptor( - name='RequestResponse', - full_name='StoreAndForwardMessage.RequestResponse', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNSET', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUTER_ERROR', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUTER_HEARTBEAT', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUTER_PING', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUTER_PONG', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='ROUTER_BUSY', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CLIENT_ERROR', index=6, number=101, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CLIENT_HISTORY', index=7, number=102, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CLIENT_STATS', index=8, number=103, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CLIENT_PING', index=9, number=104, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='CLIENT_PONG', index=10, number=105, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MAX', index=11, number=255, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=457, - serialized_end=676, -) -_sym_db.RegisterEnumDescriptor(_STOREANDFORWARDMESSAGE_REQUESTRESPONSE) - - -_STOREANDFORWARDMESSAGE_STATISTICS = _descriptor.Descriptor( - name='Statistics', - full_name='StoreAndForwardMessage.Statistics', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='MessagesTotal', full_name='StoreAndForwardMessage.Statistics.MessagesTotal', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='MessagesSaved', full_name='StoreAndForwardMessage.Statistics.MessagesSaved', index=1, - number=2, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='MessagesMax', full_name='StoreAndForwardMessage.Statistics.MessagesMax', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='UpTime', full_name='StoreAndForwardMessage.Statistics.UpTime', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='Requests', full_name='StoreAndForwardMessage.Statistics.Requests', index=4, - number=5, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='RequestsHistory', full_name='StoreAndForwardMessage.Statistics.RequestsHistory', index=5, - number=6, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='Heartbeat', full_name='StoreAndForwardMessage.Statistics.Heartbeat', index=6, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ReturnMax', full_name='StoreAndForwardMessage.Statistics.ReturnMax', index=7, - number=8, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='ReturnWindow', full_name='StoreAndForwardMessage.Statistics.ReturnWindow', index=8, - number=9, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=204, - serialized_end=402, -) - -_STOREANDFORWARDMESSAGE_HISTORY = _descriptor.Descriptor( - name='History', - full_name='StoreAndForwardMessage.History', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='HistoryMessages', full_name='StoreAndForwardMessage.History.HistoryMessages', index=0, - number=1, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='Window', full_name='StoreAndForwardMessage.History.Window', index=1, - number=2, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=404, - serialized_end=454, -) - -_STOREANDFORWARDMESSAGE = _descriptor.Descriptor( - name='StoreAndForwardMessage', - full_name='StoreAndForwardMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='rr', full_name='StoreAndForwardMessage.rr', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='stats', full_name='StoreAndForwardMessage.stats', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='history', full_name='StoreAndForwardMessage.history', index=2, - number=3, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_STOREANDFORWARDMESSAGE_STATISTICS, _STOREANDFORWARDMESSAGE_HISTORY, ], - enum_types=[ - _STOREANDFORWARDMESSAGE_REQUESTRESPONSE, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=23, - serialized_end=676, -) - -_STOREANDFORWARDMESSAGE_STATISTICS.containing_type = _STOREANDFORWARDMESSAGE -_STOREANDFORWARDMESSAGE_HISTORY.containing_type = _STOREANDFORWARDMESSAGE -_STOREANDFORWARDMESSAGE.fields_by_name['rr'].enum_type = _STOREANDFORWARDMESSAGE_REQUESTRESPONSE -_STOREANDFORWARDMESSAGE.fields_by_name['stats'].message_type = _STOREANDFORWARDMESSAGE_STATISTICS -_STOREANDFORWARDMESSAGE.fields_by_name['history'].message_type = _STOREANDFORWARDMESSAGE_HISTORY -_STOREANDFORWARDMESSAGE_REQUESTRESPONSE.containing_type = _STOREANDFORWARDMESSAGE -DESCRIPTOR.message_types_by_name['StoreAndForwardMessage'] = _STOREANDFORWARDMESSAGE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -StoreAndForwardMessage = _reflection.GeneratedProtocolMessageType('StoreAndForwardMessage', (_message.Message,), { - - 'Statistics' : _reflection.GeneratedProtocolMessageType('Statistics', (_message.Message,), { - 'DESCRIPTOR' : _STOREANDFORWARDMESSAGE_STATISTICS, - '__module__' : 'storeforward_pb2' - # @@protoc_insertion_point(class_scope:StoreAndForwardMessage.Statistics) - }) - , - - 'History' : _reflection.GeneratedProtocolMessageType('History', (_message.Message,), { - 'DESCRIPTOR' : _STOREANDFORWARDMESSAGE_HISTORY, - '__module__' : 'storeforward_pb2' - # @@protoc_insertion_point(class_scope:StoreAndForwardMessage.History) - }) - , - 'DESCRIPTOR' : _STOREANDFORWARDMESSAGE, - '__module__' : 'storeforward_pb2' - # @@protoc_insertion_point(class_scope:StoreAndForwardMessage) - }) -_sym_db.RegisterMessage(StoreAndForwardMessage) -_sym_db.RegisterMessage(StoreAndForwardMessage.Statistics) -_sym_db.RegisterMessage(StoreAndForwardMessage.History) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/meshtastic/test.py-E b/meshtastic/test.py-E deleted file mode 100644 index c377427..0000000 --- a/meshtastic/test.py-E +++ /dev/null @@ -1,182 +0,0 @@ -import logging -from . import util -from . import SerialInterface, TCPInterface, BROADCAST_NUM -from pubsub import pub -import time -import sys -import threading, traceback -from dotmap import DotMap - -"""The interfaces we are using for our tests""" -interfaces = None - -"""A list of all packets we received while the current test was running""" -receivedPackets = None - -testsRunning = False - -testNumber = 0 - -sendingInterface = None - - -def onReceive(packet, interface): - """Callback invoked when a packet arrives""" - if sendingInterface == interface: - pass - # print("Ignoring sending interface") - else: - # print(f"From {interface.stream.port}: {packet}") - p = DotMap(packet) - - if p.decoded.portnum == "TEXT_MESSAGE_APP": - # We only care a about clear text packets - if receivedPackets != None: - receivedPackets.append(p) - - -def onNode(node): - """Callback invoked when the node DB changes""" - print(f"Node changed: {node}") - - -def subscribe(): - """Subscribe to the topics the user probably wants to see, prints output to stdout""" - - pub.subscribe(onNode, "meshtastic.node") - - -def testSend(fromInterface, toInterface, isBroadcast=False, asBinary=False, wantAck=False): - """ - Sends one test packet between two nodes and then returns success or failure - - Arguments: - fromInterface {[type]} -- [description] - toInterface {[type]} -- [description] - - Returns: - boolean -- True for success - """ - global receivedPackets - receivedPackets = [] - fromNode = fromInterface.myInfo.my_node_num - - if isBroadcast: - toNode = BROADCAST_NUM - else: - toNode = toInterface.myInfo.my_node_num - - logging.debug( - f"Sending test wantAck={wantAck} packet from {fromNode} to {toNode}") - global sendingInterface - sendingInterface = fromInterface - if not asBinary: - fromInterface.sendText(f"Test {testNumber}", toNode, wantAck=wantAck) - else: - fromInterface.sendData((f"Binary {testNumber}").encode( - "utf-8"), toNode, wantAck=wantAck) - for sec in range(60): # max of 60 secs before we timeout - time.sleep(1) - if (len(receivedPackets) >= 1): - return True - return False # Failed to send - - -def runTests(numTests=50, wantAck=False, maxFailures=0): - logging.info(f"Running {numTests} tests with wantAck={wantAck}") - numFail = 0 - numSuccess = 0 - for i in range(numTests): - global testNumber - testNumber = testNumber + 1 - isBroadcast = True - # asBinary=(i % 2 == 0) - success = testSend( - interfaces[0], interfaces[1], isBroadcast, asBinary=False, wantAck=wantAck) - if not success: - numFail = numFail + 1 - logging.error( - f"Test {testNumber} failed, expected packet not received ({numFail} failures so far)") - else: - numSuccess = numSuccess + 1 - logging.info( - f"Test {testNumber} succeeded {numSuccess} successes {numFail} failures so far") - - # if numFail >= 3: - # for i in interfaces: - # i.close() - # return - - time.sleep(1) - - if numFail > maxFailures: - logging.error("Too many failures! Test failed!") - - return numFail - - -def testThread(numTests=50): - logging.info("Found devices, starting tests...") - runTests(numTests, wantAck=True) - # Allow a few dropped packets - runTests(numTests, wantAck=False, maxFailures=5) - - -def onConnection(topic=pub.AUTO_TOPIC): - """Callback invoked when we connect/disconnect from a radio""" - print(f"Connection changed: {topic.getName()}") - - -def openDebugLog(portName): - debugname = "log" + portName.replace("/", "_") - logging.info(f"Writing serial debugging to {debugname}") - return open(debugname, 'w+', buffering=1) - - -def testAll(): - """ - Run a series of tests using devices we can find. - - Raises: - Exception: If not enough devices are found - """ - ports = util.findPorts() - if (len(ports) < 2): - raise Exception("Must have at least two devices connected to USB") - - pub.subscribe(onConnection, "meshtastic.connection") - pub.subscribe(onReceive, "meshtastic.receive") - global interfaces - interfaces = list(map(lambda port: SerialInterface( - port, debugOut=openDebugLog(port), connectNow=True), ports)) - - logging.info("Ports opened, starting test") - testThread() - - for i in interfaces: - i.close() - - -def testSimulator(): - """ - Assume that someone has launched meshtastic-native as a simulated node. - Talk to that node over TCP, do some operations and if they are successful - exit the process with a success code, else exit with a non zero exit code. - - Run with - python3 -c 'from meshtastic.test import testSimulator; testSimulator()' - """ - logging.basicConfig(level=logging.DEBUG if False else logging.INFO) - logging.info("Connecting to simulator on localhost!") - try: - iface = TCPInterface("localhost") - iface.showInfo() - iface.localNode.showInfo() - iface.localNode.exitSimulator() - iface.close() - logging.info("Integration test successful!") - except: - print("Error while testing simulator:", sys.exc_info()[0]) - traceback.print_exc() - sys.exit(1) - sys.exit(0) diff --git a/meshtastic/tunnel.py-E b/meshtastic/tunnel.py-E deleted file mode 100644 index 0aa9dc0..0000000 --- a/meshtastic/tunnel.py-E +++ /dev/null @@ -1,207 +0,0 @@ -# code for IP tunnel over a mesh -# Note python-pytuntap was too buggy -# using pip3 install pytap2 -# make sure to "sudo setcap cap_net_admin+eip /usr/bin/python3.8" so python can access tun device without being root -# sudo ip tuntap del mode tun tun0 -# sudo bin/run.sh --port /dev/ttyUSB0 --setch-shortfast -# sudo bin/run.sh --port /dev/ttyUSB0 --tunnel --debug -# ssh -Y root@192.168.10.151 (or dietpi), default password p -# ncat -e /bin/cat -k -u -l 1235 -# ncat -u 10.115.64.152 1235 -# ping -c 1 -W 20 10.115.64.152 -# ping -i 30 -W 30 10.115.64.152 - -# FIXME: use a more optimal MTU - -from . import portnums_pb2 -from pubsub import pub -import logging -import threading - -# A new non standard log level that is lower level than DEBUG -LOG_TRACE = 5 - -# fixme - find a way to move onTunnelReceive inside of the class -tunnelInstance = None - -"""A list of chatty UDP services we should never accidentally -forward to our slow network""" -udpBlacklist = { - 1900, # SSDP - 5353, # multicast DNS -} - -"""A list of TCP services to block""" -tcpBlacklist = {} - -"""A list of protocols we ignore""" -protocolBlacklist = { - 0x02, # IGMP - 0x80, # Service-Specific Connection-Oriented Protocol in a Multilink and Connectionless Environment -} - - -def hexstr(barray): - """Print a string of hex digits""" - return ":".join('{:02x}'.format(x) for x in barray) - - -def ipstr(barray): - """Print a string of ip digits""" - return ".".join('{}'.format(x) for x in barray) - - -def readnet_u16(p, offset): - """Read big endian u16 (network byte order)""" - return p[offset] * 256 + p[offset + 1] - - -def onTunnelReceive(packet, interface): - """Callback for received tunneled messages from mesh - - FIXME figure out how to do closures with methods in python""" - tunnelInstance.onReceive(packet) - - -class Tunnel: - """A TUN based IP tunnel over meshtastic""" - - def __init__(self, iface, subnet=None, netmask="255.255.0.0"): - """ - Constructor - - iface is the already open MeshInterface instance - subnet is used to construct our network number (normally 10.115.x.x) - """ - - if subnet is None: - subnet = "10.115" - - self.iface = iface - self.subnetPrefix = subnet - - global tunnelInstance - tunnelInstance = self - - logging.info( - "Starting IP to mesh tunnel (you must be root for this *pre-alpha* feature to work). Mesh members:") - - pub.subscribe(onTunnelReceive, "meshtastic.receive.data.IP_TUNNEL_APP") - myAddr = self._nodeNumToIp(self.iface.myInfo.my_node_num) - - for node in self.iface.nodes.values(): - nodeId = node["user"]["id"] - ip = self._nodeNumToIp(node["num"]) - logging.info(f"Node { nodeId } has IP address { ip }") - - logging.debug("creating TUN device with MTU=200") - # FIXME - figure out real max MTU, it should be 240 - the overhead bytes for SubPacket and Data - from pytap2 import TapDevice - self.tun = TapDevice(name="mesh") - self.tun.up() - self.tun.ifconfig(address=myAddr, netmask=netmask, mtu=200) - logging.debug(f"starting TUN reader, our IP address is {myAddr}") - self._rxThread = threading.Thread( - target=self.__tunReader, args=(), daemon=True) - self._rxThread.start() - - def onReceive(self, packet): - p = packet["decoded"]["payload"] - if packet["from"] == self.iface.myInfo.my_node_num: - logging.debug("Ignoring message we sent") - else: - logging.debug( - f"Received mesh tunnel message type={type(p)} len={len(p)}") - # we don't really need to check for filtering here (sender should have checked), but this provides - # useful debug printing on types of packets received - if not self._shouldFilterPacket(p): - self.tun.write(p) - - def _shouldFilterPacket(self, p): - """Given a packet, decode it and return true if it should be ignored""" - protocol = p[8 + 1] - srcaddr = p[12:16] - destAddr = p[16:20] - subheader = 20 - ignore = False # Assume we will be forwarding the packet - if protocol in protocolBlacklist: - ignore = True - logging.log( - LOG_TRACE, f"Ignoring blacklisted protocol 0x{protocol:02x}") - elif protocol == 0x01: # ICMP - icmpType = p[20] - icmpCode = p[21] - checksum = p[22:24] - logging.debug( - f"forwarding ICMP message src={ipstr(srcaddr)}, dest={ipstr(destAddr)}, type={icmpType}, code={icmpCode}, checksum={checksum}") - # reply to pings (swap src and dest but keep rest of packet unchanged) - #pingback = p[:12]+p[16:20]+p[12:16]+p[20:] - # tap.write(pingback) - elif protocol == 0x11: # UDP - srcport = readnet_u16(p, subheader) - destport = readnet_u16(p, subheader + 2) - if destport in udpBlacklist: - ignore = True - logging.log( - LOG_TRACE, f"ignoring blacklisted UDP port {destport}") - else: - logging.debug( - f"forwarding udp srcport={srcport}, destport={destport}") - elif protocol == 0x06: # TCP - srcport = readnet_u16(p, subheader) - destport = readnet_u16(p, subheader + 2) - if destport in tcpBlacklist: - ignore = True - logging.log( - LOG_TRACE, f"ignoring blacklisted TCP port {destport}") - else: - logging.debug( - f"forwarding tcp srcport={srcport}, destport={destport}") - else: - logging.warning( - f"forwarding unexpected protocol 0x{protocol:02x}, src={ipstr(srcaddr)}, dest={ipstr(destAddr)}") - - return ignore - - def __tunReader(self): - tap = self.tun - logging.debug("TUN reader running") - while True: - p = tap.read() - #logging.debug(f"IP packet received on TUN interface, type={type(p)}") - destAddr = p[16:20] - - if not self._shouldFilterPacket(p): - self.sendPacket(destAddr, p) - - def _ipToNodeId(self, ipAddr): - # We only consider the last 16 bits of the nodenum for IP address matching - ipBits = ipAddr[2] * 256 + ipAddr[3] - - if ipBits == 0xffff: - return "^all" - - for node in self.iface.nodes.values(): - nodeNum = node["num"] & 0xffff - # logging.debug(f"Considering nodenum 0x{nodeNum:x} for ipBits 0x{ipBits:x}") - if (nodeNum) == ipBits: - return node["user"]["id"] - return None - - def _nodeNumToIp(self, nodeNum): - return f"{self.subnetPrefix}.{(nodeNum >> 8) & 0xff}.{nodeNum & 0xff}" - - def sendPacket(self, destAddr, p): - """Forward the provided IP packet into the mesh""" - nodeId = self._ipToNodeId(destAddr) - if nodeId is not None: - logging.debug( - f"Forwarding packet bytelen={len(p)} dest={ipstr(destAddr)}, destNode={nodeId}") - self.iface.sendData( - p, nodeId, portnums_pb2.IP_TUNNEL_APP, wantAck=False) - else: - logging.warning( - f"Dropping packet because no node found for destIP={ipstr(destAddr)}") - - def close(self): - self.tun.close() diff --git a/meshtastic/util.py-E b/meshtastic/util.py-E deleted file mode 100644 index 4f27d30..0000000 --- a/meshtastic/util.py-E +++ /dev/null @@ -1,90 +0,0 @@ - -from collections import defaultdict -import serial, traceback -import serial.tools.list_ports -from queue import Queue -import threading, sys, time, logging - -"""Some devices such as a seger jlink we never want to accidentally open""" -blacklistVids = dict.fromkeys([0x1366]) - - -def stripnl(s): - """remove newlines from a string (and remove extra whitespace)""" - s = str(s).replace("\n", " ") - return ' '.join(s.split()) - - -def fixme(message): - raise Exception(f"FIXME: {message}") - - -def catchAndIgnore(reason, closure): - """Call a closure but if it throws an excpetion print it and continue""" - try: - closure() - except BaseException as ex: - logging.error(f"Exception thrown in {reason}: {ex}") - - -def findPorts(): - """Find all ports that might have meshtastic devices - - Returns: - list -- a list of device paths - """ - l = list(map(lambda port: port.device, - filter(lambda port: port.vid != None and port.vid not in blacklistVids, - serial.tools.list_ports.comports()))) - l.sort() - return l - - -class dotdict(dict): - """dot.notation access to dictionary attributes""" - __getattr__ = dict.get - __setattr__ = dict.__setitem__ - __delattr__ = dict.__delitem__ - - -class Timeout: - def __init__(self, maxSecs=20): - self.expireTime = 0 - self.sleepInterval = 0.1 - self.expireTimeout = maxSecs - - def reset(self): - """Restart the waitForSet timer""" - self.expireTime = time.time() + self.expireTimeout - - def waitForSet(self, target, attrs=()): - """Block until the specified attributes are set. Returns True if config has been received.""" - self.reset() - while time.time() < self.expireTime: - if all(map(lambda a: getattr(target, a, None), attrs)): - return True - time.sleep(self.sleepInterval) - return False - - -class DeferredExecution(): - """A thread that accepts closures to run, and runs them as they are received""" - - def __init__(self, name=None): - self.queue = Queue() - self.thread = threading.Thread(target=self._run, args=(), name=name) - self.thread.daemon = True - self.thread.start() - - def queueWork(self, runnable): - self.queue.put(runnable) - - def _run(self): - while True: - try: - o = self.queue.get() - o() - except: - logging.error( - f"Unexpected error in deferred execution {sys.exc_info()[0]}") - print(traceback.format_exc())