diff --git a/meshtastic/__init__.py b/meshtastic/__init__.py index 746d7c4..7bf3b60 100644 --- a/meshtastic/__init__.py +++ b/meshtastic/__init__.py @@ -367,6 +367,7 @@ class MeshInterface: if nodeId == LOCAL_ADDR: return self.localNode else: + logging.info("Requesting configuration from remote node (this could take a while)") n = Node(self, nodeId) n.requestConfig() if not n.waitForConfig(maxsecs = 60): @@ -620,7 +621,7 @@ class MeshInterface: fromRadio = mesh_pb2.FromRadio() fromRadio.ParseFromString(fromRadioBytes) asDict = google.protobuf.json_format.MessageToDict(fromRadio) - logging.debug(f"Received from radio: {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 @@ -694,7 +695,7 @@ class MeshInterface: try: return self.nodesByNum[num]["user"]["id"] except: - logging.warn(f"Node {num} not found for fromId") + logging.debug(f"Node {num} not found for fromId") return None def _getOrCreateByNum(self, nodeNum): @@ -937,8 +938,8 @@ class StreamInterface(MeshInterface): # logging.debug("reading character") b = self._readBytes(1) # logging.debug("In reader loop") + # logging.debug(f"read returned {b}") if len(b) > 0: - # logging.debug(f"read returned {b}") c = b[0] ptr = len(self._rxBuf) diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 3448e65..d7b1bfa 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -167,6 +167,7 @@ def setPref(attributes, name, 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""" @@ -176,7 +177,11 @@ def onConnected(interface): print("Connected to radio") def getNode(): - return interface.getNode(args.destOrLocal) + """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.settime or args.setlat or args.setlon or args.setalt: closeNow = True @@ -249,7 +254,7 @@ def onConnected(interface): # handle settings if args.set: closeNow = True - prefs = getNode().radioConfig.preferences + prefs = getNode().radioConfig.preferences # Handle the int/float/bool arguments for pref in args.set: @@ -296,9 +301,11 @@ def onConnected(interface): getNode().writeChannel(channelIndex) if args.info: - closeNow = True - interface.showInfo() + if not args.destOrLocal: # If we aren't trying to talk to our local node, don't show it + interface.showInfo() + getNode().showInfo() + closeNow = True # FIXME, for now we leave the link up while talking to remote nodes if args.nodes: closeNow = True @@ -318,7 +325,7 @@ def onConnected(interface): tunnel.Tunnel(interface, subnet=args.tunnel_net) except Exception as ex: - print(ex) + print(f"Exception while handling connection: {ex}") # 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: @@ -353,7 +360,7 @@ def common(): args.destOrLocal = "^local" else: args.destOrAll = args.dest - args.destOrLocal = args.dest + args.destOrLocal = args.dest # FIXME, temp hack for debugging remove if not args.seriallog: if args.info or args.nodes or args.set or args.seturl or args.setowner or args.setlat or args.setlon or \ diff --git a/meshtastic/util.py b/meshtastic/util.py index 62ec06c..6375238 100644 --- a/meshtastic/util.py +++ b/meshtastic/util.py @@ -3,8 +3,7 @@ from collections import defaultdict import serial import serial.tools.list_ports from queue import Queue -import threading -import logging +import threading, sys, logging """Some devices such as a seger jlink we never want to accidentally open""" blacklistVids = dict.fromkeys([0x1366]) @@ -64,6 +63,6 @@ class DeferredExecution(): try: o = self.queue.get() o() - except Exception as ex: + except: logging.error( - f"Unexpected exception in deferred execution {ex}") + f"Unexpected error in deferred execution {sys.exc_info()[0]}")