miniterm: fix backspace conversion for Python 2.x
diff --git a/serial/tools/miniterm.py b/serial/tools/miniterm.py
index e9fe2f9..8b9605f 100644
--- a/serial/tools/miniterm.py
+++ b/serial/tools/miniterm.py
@@ -95,9 +95,9 @@
def getkey(self):
while True:
z = msvcrt.getwch()
- if z == '\r':
- return '\n'
- elif z in '\x00\x0e': # functions keys, ignore
+ if z == u'\r':
+ return u'\n'
+ elif z in u'\x00\x0e': # functions keys, ignore
msvcrt.getwch()
else:
return z
@@ -125,8 +125,8 @@
def getkey(self):
c = self.enc_stdin.read(1)
- if c == '\x7f':
- c = '\b' # map the BS key (which yields DEL) to backspace
+ if c == u'\x7f':
+ c = u'\b' # map the BS key (which yields DEL) to backspace
return c
def cleanup(self):
@@ -277,13 +277,10 @@
class Miniterm(object):
- def __init__(self, port, baudrate, parity, rtscts, xonxoff, echo=False, eol='crlf', filters=()):
+ def __init__(self, serial_instance, echo=False, eol='crlf', filters=()):
self.console = Console()
- self.serial = serial.serial_for_url(port, baudrate, parity=parity, rtscts=rtscts, xonxoff=xonxoff, timeout=1)
+ self.serial = serial_instance
self.echo = echo
- self.dtr_state = True
- self.rts_state = True
- self.break_state = False
self.raw = False
self.input_encoding = 'UTF-8'
self.output_encoding = 'UTF-8'
@@ -342,15 +339,15 @@
sys.stderr.write("\n--- Settings: {p.name} {p.baudrate},{p.bytesize},{p.parity},{p.stopbits}\n".format(
p=self.serial))
sys.stderr.write('--- RTS: {:8} DTR: {:8} BREAK: {:8}\n'.format(
- ('active' if self.rts_state else 'inactive'),
- ('active' if self.dtr_state else 'inactive'),
- ('active' if self.break_state else 'inactive')))
+ ('active' if self.serial.rts else 'inactive'),
+ ('active' if self.serial.dtr else 'inactive'),
+ ('active' if self.serial.break_condition else 'inactive')))
try:
sys.stderr.write('--- CTS: {:8} DSR: {:8} RI: {:8} CD: {:8}\n'.format(
- ('active' if self.serial.getCTS() else 'inactive'),
- ('active' if self.serial.getDSR() else 'inactive'),
- ('active' if self.serial.getRI() else 'inactive'),
- ('active' if self.serial.getCD() else 'inactive')))
+ ('active' if self.serial.cts else 'inactive'),
+ ('active' if self.serial.dsr else 'inactive'),
+ ('active' if self.serial.ri else 'inactive'),
+ ('active' if self.serial.cd else 'inactive')))
except serial.SerialException:
# on RFC 2217 ports, it can happen if no modem state notification was
# yet received. ignore this error.
@@ -370,7 +367,7 @@
try:
while self.alive and self._reader_alive:
# read all that is there or wait for one byte
- data = self.serial.read(self.serial.inWaiting() or 1)
+ data = self.serial.read(self.serial.in_waiting or 1)
if data:
if self.raw:
self.console.write_bytes(data)
@@ -410,12 +407,13 @@
else:
#~ if self.raw:
text = c
- echo_text = text
for transformation in self.tx_transformations:
text = transformation.tx(text)
- echo_text = transformation.echo(echo_text)
self.serial.write(self.tx_encoder.encode(text))
if self.echo:
+ echo_text = c
+ for transformation in self.tx_transformations:
+ echo_text = transformation.echo(echo_text)
self.console.write(echo_text)
except:
self.alive = False
@@ -451,17 +449,14 @@
elif c in '\x08hH?': # CTRL+H, h, H, ? -> Show help
sys.stderr.write(self.get_help_text())
elif c == '\x12': # CTRL+R -> Toggle RTS
- self.rts_state = not self.rts_state
- self.serial.setRTS(self.rts_state)
- sys.stderr.write('--- RTS {} ---\n'.format('active' if self.rts_state else 'inactive'))
+ self.serial.rts = not self.serial.rts
+ sys.stderr.write('--- RTS {} ---\n'.format('active' if self.serial.rts else 'inactive'))
elif c == '\x04': # CTRL+D -> Toggle DTR
- self.dtr_state = not self.dtr_state
- self.serial.setDTR(self.dtr_state)
- sys.stderr.write('--- DTR {} ---\n'.format('active' if self.dtr_state else 'inactive'))
+ self.serial.dtr = not self.serial.dtr
+ sys.stderr.write('--- DTR {} ---\n'.format('active' if self.serial.dtr else 'inactive'))
elif c == '\x02': # CTRL+B -> toggle BREAK condition
- self.break_state = not self.break_state
- self.serial.setBreak(self.break_state)
- sys.stderr.write('--- BREAK {} ---\n'.format('active' if self.break_state else 'inactive'))
+ self.serial.break_condition = not self.serial.break_condition
+ sys.stderr.write('--- BREAK {} ---\n'.format('active' if self.serial.break_condition else 'inactive'))
elif c == '\x05': # CTRL+E -> toggle local echo
self.echo = not self.echo
sys.stderr.write('--- local echo {} ---\n'.format('active' if self.echo else 'inactive'))
@@ -764,27 +759,42 @@
try:
- miniterm = Miniterm(
+ serial_instance = serial.serial_for_url(
args.port,
args.baudrate,
- args.parity,
+ parity=args.parity,
rtscts=args.rtscts,
xonxoff=args.xonxoff,
- echo=args.echo,
- eol=args.eol.lower(),
- filters=filters,
- )
- miniterm.exit_character = unichr(args.exit_char)
- miniterm.menu_character = unichr(args.menu_char)
- miniterm.raw = args.raw
- miniterm.set_rx_encoding(args.serial_port_encoding)
- miniterm.set_tx_encoding(args.serial_port_encoding)
+ timeout=1,
+ do_not_open=True)
+
+ if args.dtr is not None:
+ if not args.quiet:
+ sys.stderr.write('--- forcing DTR {}\n'.format('active' if args.dtr else 'inactive'))
+ serial_instance.dtr = args.dtr
+ if args.rts is not None:
+ if not args.quiet:
+ sys.stderr.write('--- forcing RTS {}\n'.format('active' if args.rts else 'inactive'))
+ serial_instance.rts = args.rts
+
+ serial_instance.open()
except serial.SerialException as e:
sys.stderr.write('could not open port {}: {}\n'.format(repr(args.port), e))
if args.develop:
raise
sys.exit(1)
+ miniterm = Miniterm(
+ serial_instance,
+ echo=args.echo,
+ eol=args.eol.lower(),
+ filters=filters)
+ miniterm.exit_character = unichr(args.exit_char)
+ miniterm.menu_character = unichr(args.menu_char)
+ miniterm.raw = args.raw
+ miniterm.set_rx_encoding(args.serial_port_encoding)
+ miniterm.set_tx_encoding(args.serial_port_encoding)
+
if not args.quiet:
sys.stderr.write('--- Miniterm on {p.name} {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'.format(
p=miniterm.serial))
@@ -795,17 +805,6 @@
key_description('\x08'),
))
- if args.dtr is not None:
- if not args.quiet:
- sys.stderr.write('--- forcing DTR {}\n'.format('active' if args.dtr else 'inactive'))
- miniterm.serial.setDTR(args.dtr)
- miniterm.dtr_state = args.dtr
- if args.rts is not None:
- if not args.quiet:
- sys.stderr.write('--- forcing RTS {}\n'.format('active' if args.rts else 'inactive'))
- miniterm.serial.setRTS(args.rts)
- miniterm.rts_state = args.rts
-
miniterm.start()
try:
miniterm.join(True)