forked from platformio/platformio-core
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright (C) Ivan Kravets <me@ikravets.com>
 | 
						|
# See LICENSE for details.
 | 
						|
 | 
						|
import sys
 | 
						|
 | 
						|
import click
 | 
						|
from serial.tools import miniterm
 | 
						|
 | 
						|
from platformio.util import get_serialports
 | 
						|
 | 
						|
 | 
						|
@click.group(short_help="List or Monitor Serial ports")
 | 
						|
def cli():
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
@cli.command("list", short_help="List Serial ports")
 | 
						|
def serialports_list():
 | 
						|
 | 
						|
    for item in get_serialports():
 | 
						|
        click.secho(item['port'], fg="cyan")
 | 
						|
        click.echo("----------")
 | 
						|
        click.echo("Hardware ID: %s" % item['hwid'])
 | 
						|
        click.echo("Description: %s" % item['description'])
 | 
						|
        click.echo("")
 | 
						|
 | 
						|
 | 
						|
@cli.command("monitor", short_help="Monitor Serial port")
 | 
						|
@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)
 | 
						|
# --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=0x1d,
 | 
						|
              help="ASCII code of special character that is used to exit the "
 | 
						|
              "application, default=0x1d")
 | 
						|
@click.option("--menu-char", type=int, default=0x14,
 | 
						|
              help="ASCII code of special character that is used to control "
 | 
						|
              "miniterm (menu), default=0x14")
 | 
						|
@click.option("--quiet", is_flag=True,
 | 
						|
              help="Diagnostics: suppress non-error messages, default=Off")
 | 
						|
def serialports_monitor(**_):
 | 
						|
    sys.argv = sys.argv[3:]
 | 
						|
    try:
 | 
						|
        miniterm.main()
 | 
						|
    except:  # pylint: disable=W0702
 | 
						|
        pass
 |