summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2015-08-24 01:31:42 +0200
committerChris Liechti <cliechti@gmx.net>2015-08-24 01:31:42 +0200
commit269f77bf5565c587324cda6c49d8c63c9d65c221 (patch)
treef57ad7880cdcce5ca88b9223eccaf554d328d92f
parent4d989c2570de9af859c09102654c18dd99a21cd4 (diff)
downloadpyserial-git-269f77bf5565c587324cda6c49d8c63c9d65c221.tar.gz
miniterm: switch console mode in context manager
-rw-r--r--serial/tools/miniterm.py76
1 files changed, 42 insertions, 34 deletions
diff --git a/serial/tools/miniterm.py b/serial/tools/miniterm.py
index a88e23f..b388671 100644
--- a/serial/tools/miniterm.py
+++ b/serial/tools/miniterm.py
@@ -55,6 +55,17 @@ class ConsoleBase(object):
self.output.write(s)
self.output.flush()
+ # - - - - - - - - - - - - - - - - - - - - - - - -
+ # context manager:
+ # switch terminal temporary to normal mode (e.g. to get user input)
+
+ def __enter__(self):
+ self.cleanup()
+ return self
+
+ def __exit__(self, *args, **kwargs):
+ self.setup()
+
if os.name == 'nt':
import msvcrt
@@ -403,24 +414,23 @@ class Miniterm(object):
elif c == '\x15': # CTRL+U -> upload file
sys.stderr.write('\n--- File to upload: ')
sys.stderr.flush()
- self.console.cleanup()
- filename = sys.stdin.readline().rstrip('\r\n')
- if filename:
- try:
- with open(filename, 'rb') as f:
- sys.stderr.write('--- Sending file {} ---\n'.format(filename))
- while True:
- block = f.read(1024)
- if not block:
- break
- self.serial.write(block)
- # Wait for output buffer to drain.
- self.serial.flush()
- sys.stderr.write('.') # Progress indicator.
- sys.stderr.write('\n--- File {} sent ---\n'.format(filename))
- except IOError as e:
- sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e))
- self.console.setup()
+ with self.console:
+ filename = sys.stdin.readline().rstrip('\r\n')
+ if filename:
+ try:
+ with open(filename, 'rb') as f:
+ sys.stderr.write('--- Sending file {} ---\n'.format(filename))
+ while True:
+ block = f.read(1024)
+ if not block:
+ break
+ self.serial.write(block)
+ # Wait for output buffer to drain.
+ self.serial.flush()
+ sys.stderr.write('.') # Progress indicator.
+ sys.stderr.write('\n--- File {} sent ---\n'.format(filename))
+ except IOError as e:
+ sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e))
elif c in '\x08hH?': # CTRL+H, h, H, ? -> Show help
sys.stderr.write(self.get_help_text())
elif c == '\x12': # CTRL+R -> Toggle RTS
@@ -446,12 +456,11 @@ class Miniterm(object):
dump_port_list()
sys.stderr.write('--- Enter port name: ')
sys.stderr.flush()
- self.console.cleanup()
- try:
- port = sys.stdin.readline().strip()
- except KeyboardInterrupt:
- port = None
- self.console.setup()
+ with self.console:
+ try:
+ port = sys.stdin.readline().strip()
+ except KeyboardInterrupt:
+ port = None
if port and port != self.serial.port:
# reader thread needs to be shut down
self._stop_reader()
@@ -477,16 +486,15 @@ class Miniterm(object):
elif c in 'bB': # B -> change baudrate
sys.stderr.write('\n--- Baudrate: ')
sys.stderr.flush()
- self.console.cleanup()
- backup = self.serial.baudrate
- try:
- self.serial.baudrate = int(sys.stdin.readline().strip())
- except ValueError as e:
- sys.stderr.write('--- ERROR setting baudrate: %s ---\n'.format(e))
- self.serial.baudrate = backup
- else:
- self.dump_port_settings()
- self.console.setup()
+ with self.console:
+ backup = self.serial.baudrate
+ try:
+ self.serial.baudrate = int(sys.stdin.readline().strip())
+ except ValueError as e:
+ sys.stderr.write('--- ERROR setting baudrate: %s ---\n'.format(e))
+ self.serial.baudrate = backup
+ else:
+ self.dump_port_settings()
elif c == '8': # 8 -> change to 8 bits
self.serial.bytesize = serial.EIGHTBITS
self.dump_port_settings()