29 lines
1016 B
Python
29 lines
1016 B
Python
"""Open an already configured serial session without a bridge reset pulse."""
|
|
import os
|
|
|
|
|
|
def open_configured_session(port):
|
|
# POSIX pySerial normally applies DTR before RTS when opening. Some
|
|
# bridge drivers initially assert both lines; clearing DTR first pulses
|
|
# ESP32 EN. Defer DTR until RTS is released. Windows configures both in
|
|
# one DCB operation and uses dsrdtr for real handshaking, so leave it alone.
|
|
# The caller selects DTR and supplies the already configured port; no USB
|
|
# inventory or pySerial import is needed here.
|
|
defer_dtr = os.name == "posix" and not port.dtr
|
|
previous_dsrdtr = port.dsrdtr
|
|
try:
|
|
if defer_dtr:
|
|
port.dsrdtr = True
|
|
port.open()
|
|
if defer_dtr:
|
|
port.rts = False
|
|
port.dtr = False
|
|
port.dsrdtr = previous_dsrdtr
|
|
except BaseException:
|
|
try:
|
|
port.close()
|
|
finally:
|
|
if defer_dtr:
|
|
port.dsrdtr = previous_dsrdtr
|
|
raise
|