diff --git a/klippy/serialhdl.py b/klippy/serialhdl.py index 7120c43c..2a539cf1 100644 --- a/klippy/serialhdl.py +++ b/klippy/serialhdl.py @@ -6,7 +6,7 @@ import time, logging, threading import serial -import msgproto, chelper +import msgproto, chelper, util class SerialReader: BITS_PER_BYTE = 10. @@ -298,6 +298,7 @@ class SerialBootStrap: # Attempt to place an AVR stk500v2 style programmer into normal mode def stk500v2_leave(ser, reactor): logging.debug("Starting stk500v2 leave programmer sequence") + util.clear_hupcl(ser.fileno()) origbaud = ser.baudrate # Request a dummy speed first as this seems to help reset the port ser.baudrate = 2400 diff --git a/klippy/util.py b/klippy/util.py index caac827e..6bbfd9af 100644 --- a/klippy/util.py +++ b/klippy/util.py @@ -16,6 +16,12 @@ def set_nonblock(fd): fcntl.fcntl(fd, fcntl.F_SETFL , fcntl.fcntl(fd, fcntl.F_GETFL) | os.O_NONBLOCK) +# Clear HUPCL flag +def clear_hupcl(fd): + attrs = termios.tcgetattr(fd) + attrs[2] = attrs[2] & ~termios.HUPCL + termios.tcsetattr(fd, termios.TCSADRAIN, attrs) + # Support for creating a pseudo-tty for emulating a serial port def create_pty(ptyname): mfd, sfd = pty.openpty()