From 653c31e1dc31822dddd80aac67d69edf8f988698 Mon Sep 17 00:00:00 2001 From: geeksville Date: Wed, 16 Sep 2020 10:04:56 -0700 Subject: [PATCH] #18 only control RTS on OS-X --- meshtastic/__init__.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/meshtastic/__init__.py b/meshtastic/__init__.py index cfe98f2..0860ebf 100644 --- a/meshtastic/__init__.py +++ b/meshtastic/__init__.py @@ -57,6 +57,7 @@ import sys import traceback import time import base64 +import platform from . import mesh_pb2 from . import util from pubsub import pub @@ -444,7 +445,12 @@ class StreamInterface(MeshInterface): # rts=False Needed to prevent TBEAMs resetting on OSX, because rts is connected to reset self.stream.port = devPath - self.stream.rts = False + # OS-X seems to have a bug in its serial driver. 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). Since it is going to drive it anyways we want to make + # sure it is driven low, so that the TBEAM won't reset + if platform.system() == 'Darwin': + self.stream.rts = False self.stream.open() self._rxThread = threading.Thread(target=self.__reader, args=()) @@ -538,6 +544,7 @@ class StreamInterface(MeshInterface): f"Meshtastic serial port disconnected, disconnecting... {ex}") finally: logging.debug("reader is exiting") - self.stream.rts = True # Return RTS high, so that the reset button still works + if platform.system() == 'Darwin': + self.stream.rts = True # Return RTS high, so that the reset button still works self.stream.close() self._disconnected()