diff --git a/HISTORY.rst b/HISTORY.rst index 2187c582..97729197 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -24,6 +24,7 @@ PlatformIO 3.0 (`issue #814 `_) * Fixed issue with ``PATH`` auto-configuring for upload tools * Fixed ``99-platformio-udev.rules`` checker for Linux OS +* Stopped supporting PySerial 2.7 ------- diff --git a/docs/userguide/cmd_device.rst b/docs/userguide/cmd_device.rst index 379c2eda..a890a4db 100644 --- a/docs/userguide/cmd_device.rst +++ b/docs/userguide/cmd_device.rst @@ -152,14 +152,17 @@ Set initial ``RTS`` line state, default ``0`` Set initial ``DTR`` line state, default ``0`` +.. option:: + --echo + +Enable local echo, default ``Off`` + .. option:: --encoding Set the encoding for the serial port (e.g. ``hexlify``, ``Latin1``, ``UTF-8``), default ``UTF-8``. -**NEW**: Available in Miniterm/PySerial 3.0 - .. option:: -f, --filter @@ -173,8 +176,6 @@ Add text transformation. Available filters: * ``printable`` Show decimal code for all non-ASCII characters and replace most control codes -**NEW**: Available in Miniterm/PySerial 3.0 - .. option:: --eol @@ -187,8 +188,6 @@ End of line mode (``CR``, ``LF`` or ``CRLF``), default ``CRLF`` Do not apply any encodings/transformations -**NEW**: Available in Miniterm/PySerial 3.0 - .. option:: --exit-char @@ -209,40 +208,6 @@ default ``20`` (DEC) Diagnostics: suppress non-error messages, default ``Off`` -.. option:: - --echo - -Enable local echo, default ``Off`` - -.. option:: - --cr - -Do not send ``CR+LF``, send ``R`` only, default ``Off`` - -**REMOVED**: Is not available in Miniterm/PySerial 3.0 - -.. option:: - --lf - -Do not send ``CR+LF``, send ``LF`` only, default ``Off`` - -**REMOVED**: Is not available in Miniterm/PySerial 3.0 - -.. option:: - -d, --debug - -Debug received data (escape non-printable chars). ``--debug`` can be given -multiple times: - -0. just print what is received -1. escape non-printable characters, do newlines as unusual -2. escape non-printable characters, newlines too -3. hex dump everything - -**REMOVED**: Is not available in Miniterm/PySerial 3.0. -See :option:`platformio device monitor --encoding` and -:option:`platformio device monitor --filter` options. - Examples ~~~~~~~~ diff --git a/docs/userguide/remote/cmd_device.rst b/docs/userguide/remote/cmd_device.rst index 2dca1129..cbfe1877 100644 --- a/docs/userguide/remote/cmd_device.rst +++ b/docs/userguide/remote/cmd_device.rst @@ -171,6 +171,11 @@ Set initial ``RTS`` line state, default ``0`` Set initial ``DTR`` line state, default ``0`` +.. option:: + --echo + +Enable local echo, default ``Off`` + .. option:: --encoding @@ -220,11 +225,6 @@ default ``20`` (DEC) Diagnostics: suppress non-error messages, default ``Off`` -.. option:: - --echo - -Enable local echo, default ``Off`` - Examples ~~~~~~~~ diff --git a/platformio/commands/device.py b/platformio/commands/device.py index 28d6e9e8..367be3c4 100644 --- a/platformio/commands/device.py +++ b/platformio/commands/device.py @@ -16,10 +16,8 @@ import json import sys import click -from serial import VERSION as PYSERIAL_VERSION from serial.tools import miniterm -from platformio import app from platformio.exception import MinitermException from platformio.util import get_serialports @@ -45,181 +43,87 @@ def device_list(json_output): click.echo("") -if int(PYSERIAL_VERSION[0]) == 3: +@cli.command("monitor", short_help="Monitor device (Serial)") +@click.option("--port", "-p", help="Port, a number or a device name") +@click.option( + "--baud", "-b", type=int, default=9600, help="Set baud rate, default=9600") +@click.option( + "--parity", + default="N", + type=click.Choice(["N", "E", "O", "S", "M"]), + help="Set parity, default=N") +@click.option( + "--rtscts", is_flag=True, help="Enable RTS/CTS flow control, default=Off") +@click.option( + "--xonxoff", + is_flag=True, + help="Enable software flow control, default=Off") +@click.option( + "--rts", + default=None, + type=click.Choice(["0", "1"]), + help="Set initial RTS line state") +@click.option( + "--dtr", + default=None, + type=click.Choice(["0", "1"]), + help="Set initial DTR line state") +@click.option("--echo", is_flag=True, help="Enable local echo, default=Off") +@click.option( + "--encoding", + default="UTF-8", + help="Set the encoding for the serial port (e.g. hexlify, " + "Latin1, UTF-8), default: UTF-8") +@click.option("--filter", "-f", multiple=True, help="Add text transformation") +@click.option( + "--eol", + default="CRLF", + type=click.Choice(["CR", "LF", "CRLF"]), + help="End of line mode, default=CRLF") +@click.option( + "--raw", is_flag=True, help="Do not apply any encodings/transformations") +@click.option( + "--exit-char", + type=int, + default=3, + help="ASCII code of special character that is used to exit " + "the application, default=3 (Ctrl+C)") +@click.option( + "--menu-char", + type=int, + default=20, + help="ASCII code of special character that is used to " + "control miniterm (menu), default=20 (DEC)") +@click.option( + "--quiet", + is_flag=True, + help="Diagnostics: suppress non-error messages, default=Off") +def device_monitor(**kwargs): + if not kwargs['port']: + for item in get_serialports(): + if "VID:PID" in item['hwid']: + kwargs['port'] = item['port'] + break - @cli.command("monitor", short_help="Monitor device (Serial)") - @click.option("--port", "-p", help="Port, a number or a device name") - @click.option( - "--baud", - "-b", - type=int, - default=9600, - help="Set baud rate, default=9600") - @click.option( - "--parity", - default="N", - type=click.Choice(["N", "E", "O", "S", "M"]), - help="Set parity, default=N") - @click.option( - "--rtscts", - is_flag=True, - help="Enable RTS/CTS flow control, default=Off") - @click.option( - "--xonxoff", - is_flag=True, - help="Enable software flow control, default=Off") - @click.option( - "--rts", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial RTS line state") - @click.option( - "--dtr", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial DTR line state") - @click.option( - "--echo", is_flag=True, help="Enable local echo, default=Off") - @click.option( - "--encoding", - default="UTF-8", - help="Set the encoding for the serial port (e.g. hexlify, " - "Latin1, UTF-8), default: UTF-8") - @click.option( - "--filter", "-f", multiple=True, help="Add text transformation") - @click.option( - "--eol", - default="CRLF", - type=click.Choice(["CR", "LF", "CRLF"]), - help="End of line mode, default=CRLF") - @click.option( - "--raw", - is_flag=True, - help="Do not apply any encodings/transformations") - @click.option( - "--exit-char", - type=int, - default=3, - help="ASCII code of special character that is used to exit " - "the application, default=3 (Ctrl+C)") - @click.option( - "--menu-char", - type=int, - default=20, - help="ASCII code of special character that is used to " - "control miniterm (menu), default=20 (DEC)") - @click.option( - "--quiet", - is_flag=True, - help="Diagnostics: suppress non-error messages, default=Off") - def device_monitor(**kwargs): - if not kwargs['port']: - for item in get_serialports(): - if "VID:PID" in item['hwid']: - kwargs['port'] = item['port'] - break + sys.argv = ["monitor"] + for k, v in kwargs.iteritems(): + if k in ("port", "baud", "rts", "dtr"): + continue + k = "--" + k.replace("_", "-") + if isinstance(v, bool): + if v: + sys.argv.append(k) + elif isinstance(v, tuple): + for i in v: + sys.argv.extend([k, i]) + else: + sys.argv.extend([k, str(v)]) - sys.argv = ["monitor"] - for k, v in kwargs.iteritems(): - if k in ("port", "baud", "rts", "dtr"): - continue - k = "--" + k.replace("_", "-") - if isinstance(v, bool): - if v: - sys.argv.append(k) - elif isinstance(v, tuple): - for i in v: - sys.argv.extend([k, i]) - else: - sys.argv.extend([k, str(v)]) - - try: - miniterm.main( # pylint: disable=E1123 - default_port=kwargs['port'], - default_baudrate=kwargs['baud'], - default_rts=kwargs['rts'], - default_dtr=kwargs['dtr']) - except Exception as e: # pylint: disable=W0702 - raise MinitermException(e) -else: - - @cli.command("monitor", short_help="Monitor device (Serial)") - @click.option("--port", "-p", help="Port, a number or a device name") - @click.option( - "--baud", - "-b", - type=int, - default=9600, - help="Set baud rate, default=9600") - @click.option( - "--parity", - default="N", - type=click.Choice(["N", "E", "O", "S", "M"]), - help="Set parity, default=N") - @click.option( - "--rtscts", - is_flag=True, - help="Enable RTS/CTS flow control, default=Off") - @click.option( - "--xonxoff", - is_flag=True, - help="Enable software flow control, default=Off") - @click.option( - "--rts", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial RTS line state, default=0") - @click.option( - "--dtr", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial DTR line state, default=0") - @click.option( - "--echo", is_flag=True, help="Enable local echo, default=Off") - @click.option( - "--cr", - is_flag=True, - help="Do not send CR+LF, send CR only, default=Off") - @click.option( - "--lf", - is_flag=True, - help="Do not send CR+LF, send LF only, default=Off") - @click.option( - "--debug", - "-d", - count=True, - help="""Debug received data (escape non-printable chars) - # --debug can be given multiple times: - # 0: just print what is received - # 1: escape non-printable characters, do newlines as unusual - # 2: escape non-printable characters, newlines too - # 3: hex dump everything""") - @click.option( - "--exit-char", - type=int, - default=3, - help="ASCII code of special character that is used to exit " - "the application, default=3 (Ctrl+C)") - @click.option( - "--menu-char", - type=int, - default=20, - help="ASCII code of special character that is used to " - "control miniterm (menu), default=20 (DEC)") - @click.option( - "--quiet", - is_flag=True, - help="Diagnostics: suppress non-error messages, default=Off") - def device_monitor(**kwargs): - sys.argv = app.get_session_var("command_ctx").args[1:] - - if not kwargs['port']: - for item in get_serialports(): - if "VID:PID" in item['hwid']: - sys.argv += ["--port", item['port']] - break - - try: - miniterm.main() - except Exception as e: # pylint: disable=W0702 - raise MinitermException(e) + try: + miniterm.main( # pylint: disable=E1123 + default_port=kwargs['port'], + default_baudrate=kwargs['baud'], + default_rts=kwargs['rts'], + default_dtr=kwargs['dtr']) + except Exception as e: # pylint: disable=W0702 + raise MinitermException(e) diff --git a/platformio/commands/remote.py b/platformio/commands/remote.py index f6fffe46..94560ac0 100644 --- a/platformio/commands/remote.py +++ b/platformio/commands/remote.py @@ -20,7 +20,6 @@ from tempfile import mkdtemp from time import sleep import click -from serial import VERSION as PYSERIAL_VERSION from platformio import exception, util from platformio.commands.device import device_monitor as cmd_device_monitor @@ -85,151 +84,63 @@ def device_list(json_output): pioplus_call(sys.argv[1:]) -if int(PYSERIAL_VERSION[0]) == 3: - - @remote_device.command("monitor", short_help="Monitor device (Serial)") - @click.option("--port", "-p", help="Port, a number or a device name") - @click.option( - "--baud", - "-b", - type=int, - default=9600, - help="Set baud rate, default=9600") - @click.option( - "--parity", - default="N", - type=click.Choice(["N", "E", "O", "S", "M"]), - help="Set parity, default=N") - @click.option( - "--rtscts", - is_flag=True, - help="Enable RTS/CTS flow control, default=Off") - @click.option( - "--xonxoff", - is_flag=True, - help="Enable software flow control, default=Off") - @click.option( - "--rts", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial RTS line state") - @click.option( - "--dtr", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial DTR line state") - @click.option( - "--echo", is_flag=True, help="Enable local echo, default=Off") - @click.option( - "--encoding", - default="UTF-8", - help="Set the encoding for the serial port (e.g. hexlify, " - "Latin1, UTF-8), default: UTF-8") - @click.option( - "--filter", "-f", multiple=True, help="Add text transformation") - @click.option( - "--eol", - default="CRLF", - type=click.Choice(["CR", "LF", "CRLF"]), - help="End of line mode, default=CRLF") - @click.option( - "--raw", - is_flag=True, - help="Do not apply any encodings/transformations") - @click.option( - "--exit-char", - type=int, - default=3, - help="ASCII code of special character that is used to exit " - "the application, default=3 (Ctrl+C)") - @click.option( - "--menu-char", - type=int, - default=20, - help="ASCII code of special character that is used to " - "control miniterm (menu), default=20 (DEC)") - @click.option( - "--quiet", - is_flag=True, - help="Diagnostics: suppress non-error messages, default=Off") - @click.pass_context - def device_monitor(ctx, **kwargs): - _device_monitor(ctx, **kwargs) -else: - - @remote_device.command("monitor", short_help="Monitor device (Serial)") - @click.option("--port", "-p", help="Port, a number or a device name") - @click.option( - "--baud", - "-b", - type=int, - default=9600, - help="Set baud rate, default=9600") - @click.option( - "--parity", - default="N", - type=click.Choice(["N", "E", "O", "S", "M"]), - help="Set parity, default=N") - @click.option( - "--rtscts", - is_flag=True, - help="Enable RTS/CTS flow control, default=Off") - @click.option( - "--xonxoff", - is_flag=True, - help="Enable software flow control, default=Off") - @click.option( - "--rts", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial RTS line state, default=0") - @click.option( - "--dtr", - default=None, - type=click.Choice(["0", "1"]), - help="Set initial DTR line state, default=0") - @click.option( - "--echo", is_flag=True, help="Enable local echo, default=Off") - @click.option( - "--cr", - is_flag=True, - help="Do not send CR+LF, send CR only, default=Off") - @click.option( - "--lf", - is_flag=True, - help="Do not send CR+LF, send LF only, default=Off") - @click.option( - "--debug", - "-d", - count=True, - help="""Debug received data (escape non-printable chars) - # --debug can be given multiple times: - # 0: just print what is received - # 1: escape non-printable characters, do newlines as unusual - # 2: escape non-printable characters, newlines too - # 3: hex dump everything""") - @click.option( - "--exit-char", - type=int, - default=3, - help="ASCII code of special character that is used to exit " - "the application, default=3 (Ctrl+C)") - @click.option( - "--menu-char", - type=int, - default=20, - help="ASCII code of special character that is used to " - "control miniterm (menu), default=20 (DEC)") - @click.option( - "--quiet", - is_flag=True, - help="Diagnostics: suppress non-error messages, default=Off") - @click.pass_context - def device_monitor(ctx, **kwargs): - _device_monitor(ctx, **kwargs) - - -def _device_monitor(ctx, **kwargs): +@remote_device.command("monitor", short_help="Monitor device (Serial)") +@click.option("--port", "-p", help="Port, a number or a device name") +@click.option( + "--baud", "-b", type=int, default=9600, help="Set baud rate, default=9600") +@click.option( + "--parity", + default="N", + type=click.Choice(["N", "E", "O", "S", "M"]), + help="Set parity, default=N") +@click.option( + "--rtscts", is_flag=True, help="Enable RTS/CTS flow control, default=Off") +@click.option( + "--xonxoff", + is_flag=True, + help="Enable software flow control, default=Off") +@click.option( + "--rts", + default=None, + type=click.Choice(["0", "1"]), + help="Set initial RTS line state") +@click.option( + "--dtr", + default=None, + type=click.Choice(["0", "1"]), + help="Set initial DTR line state") +@click.option("--echo", is_flag=True, help="Enable local echo, default=Off") +@click.option( + "--encoding", + default="UTF-8", + help="Set the encoding for the serial port (e.g. hexlify, " + "Latin1, UTF-8), default: UTF-8") +@click.option("--filter", "-f", multiple=True, help="Add text transformation") +@click.option( + "--eol", + default="CRLF", + type=click.Choice(["CR", "LF", "CRLF"]), + help="End of line mode, default=CRLF") +@click.option( + "--raw", is_flag=True, help="Do not apply any encodings/transformations") +@click.option( + "--exit-char", + type=int, + default=3, + help="ASCII code of special character that is used to exit " + "the application, default=3 (Ctrl+C)") +@click.option( + "--menu-char", + type=int, + default=20, + help="ASCII code of special character that is used to " + "control miniterm (menu), default=20 (DEC)") +@click.option( + "--quiet", + is_flag=True, + help="Diagnostics: suppress non-error messages, default=Off") +@click.pass_context +def device_monitor(ctx, **kwargs): def _tx_target(sock_dir): try: diff --git a/setup.py b/setup.py index 29a759d9..b54a4d19 100644 --- a/setup.py +++ b/setup.py @@ -24,7 +24,7 @@ install_requires = [ "requests>=2.4.0,<3", "semantic_version>=2.5.0", "colorama", - "pyserial<4" + "pyserial>=3,<4" ] setup(