2014-07-27 22:29:32 +03:00
|
|
|
# Copyright (C) Ivan Kravets <me@ikravets.com>
|
|
|
|
# See LICENSE for details.
|
|
|
|
|
2015-01-05 22:58:55 +02:00
|
|
|
import json
|
2014-08-09 23:13:29 +03:00
|
|
|
import sys
|
|
|
|
|
2014-12-03 20:16:50 +02:00
|
|
|
import click
|
2014-08-09 23:13:29 +03:00
|
|
|
from serial.tools import miniterm
|
2014-07-27 22:29:32 +03:00
|
|
|
|
|
|
|
from platformio.util import get_serialports
|
|
|
|
|
|
|
|
|
2014-12-03 20:16:50 +02:00
|
|
|
@click.group(short_help="List or Monitor Serial ports")
|
2014-07-27 22:29:32 +03:00
|
|
|
def cli():
|
2014-08-09 23:13:29 +03:00
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
@cli.command("list", short_help="List Serial ports")
|
2015-01-02 21:03:14 +02:00
|
|
|
@click.option("--json-output", is_flag=True)
|
|
|
|
def serialports_list(json_output):
|
|
|
|
|
|
|
|
if json_output:
|
2015-01-05 22:58:55 +02:00
|
|
|
click.echo(json.dumps(get_serialports()))
|
2015-01-02 21:03:14 +02:00
|
|
|
return
|
2014-07-27 22:29:32 +03:00
|
|
|
|
|
|
|
for item in get_serialports():
|
2014-12-03 20:16:50 +02:00
|
|
|
click.secho(item['port'], fg="cyan")
|
2015-04-20 17:20:27 +01:00
|
|
|
click.echo("-" * len(item['port']))
|
2014-12-03 20:16:50 +02:00
|
|
|
click.echo("Hardware ID: %s" % item['hwid'])
|
|
|
|
click.echo("Description: %s" % item['description'])
|
|
|
|
click.echo("")
|
2014-08-09 23:13:29 +03:00
|
|
|
|
|
|
|
|
|
|
|
@cli.command("monitor", short_help="Monitor Serial port")
|
2014-12-03 20:16:50 +02:00
|
|
|
@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="0", type=click.Choice(["0", "1"]),
|
|
|
|
help="Set initial RTS line state, default=0")
|
|
|
|
@click.option("--dtr", default="0", 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)
|
2014-08-09 23:13:29 +03:00
|
|
|
# --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""")
|
2015-07-30 17:50:07 +03:00
|
|
|
@click.option("--exit-char", type=int, default=29,
|
2014-12-03 20:16:50 +02:00
|
|
|
help="ASCII code of special character that is used to exit the "
|
2015-07-30 17:50:07 +03:00
|
|
|
"application, default=19 (DEC)")
|
|
|
|
@click.option("--menu-char", type=int, default=20,
|
2014-12-03 20:16:50 +02:00
|
|
|
help="ASCII code of special character that is used to control "
|
2015-07-30 17:50:07 +03:00
|
|
|
"miniterm (menu), default=20 (DEC)")
|
2014-12-03 20:16:50 +02:00
|
|
|
@click.option("--quiet", is_flag=True,
|
|
|
|
help="Diagnostics: suppress non-error messages, default=Off")
|
2014-12-28 20:57:05 +02:00
|
|
|
def serialports_monitor(**kwargs):
|
2015-07-07 23:08:54 +03:00
|
|
|
sys.argv = sys.argv[2:]
|
2014-12-28 20:57:05 +02:00
|
|
|
|
|
|
|
if not kwargs['port']:
|
|
|
|
for item in get_serialports():
|
|
|
|
if "VID:PID" in item['hwid']:
|
|
|
|
sys.argv += ["--port", item['port']]
|
|
|
|
break
|
|
|
|
|
2014-08-09 23:13:29 +03:00
|
|
|
try:
|
|
|
|
miniterm.main()
|
|
|
|
except: # pylint: disable=W0702
|
|
|
|
pass
|