mirror of
https://github.com/platformio/platformio-core.git
synced 2025-07-30 18:17:13 +02:00
Configure Serial Port Monitor from platformio.ini
// Resolve #787
This commit is contained in:
@ -15,6 +15,8 @@ PlatformIO 3.0
|
|||||||
- Compatibility with the popular IDEs: Atom, VSCode, Eclipse, Sublime Text, etc
|
- Compatibility with the popular IDEs: Atom, VSCode, Eclipse, Sublime Text, etc
|
||||||
- Windows, MacOS, Linux (+ARMv6-8)
|
- Windows, MacOS, Linux (+ARMv6-8)
|
||||||
|
|
||||||
|
* Configure Serial Port Monitor in `Project Configuration File "platformio.ini" <http://docs.platformio.org/page/projectconf.html>`__
|
||||||
|
(`issue #787 <https://github.com/platformio/platformio-core/issues/787>`_)
|
||||||
* Project generator for `VIM <http://docs.platformio.org/page/ide/vim.html>`__
|
* Project generator for `VIM <http://docs.platformio.org/page/ide/vim.html>`__
|
||||||
* Multi-line support for the different options in `Project Configuration File "platformio.ini" <http://docs.platformio.org/page/projectconf.html>`__,
|
* Multi-line support for the different options in `Project Configuration File "platformio.ini" <http://docs.platformio.org/page/projectconf.html>`__,
|
||||||
such as: ``build_flags``, ``build_unflags``, etc.
|
such as: ``build_flags``, ``build_unflags``, etc.
|
||||||
|
2
docs
2
docs
Submodule docs updated: 41943b7d59...71c5c3f074
@ -14,12 +14,12 @@
|
|||||||
|
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
from os import getcwd
|
||||||
|
|
||||||
import click
|
import click
|
||||||
from serial.tools import miniterm
|
from serial.tools import miniterm
|
||||||
|
|
||||||
from platformio.exception import MinitermException
|
from platformio import exception, util
|
||||||
from platformio.util import get_serialports
|
|
||||||
|
|
||||||
|
|
||||||
@click.group(short_help="Monitor device or list existing")
|
@click.group(short_help="Monitor device or list existing")
|
||||||
@ -32,10 +32,10 @@ def cli():
|
|||||||
def device_list(json_output):
|
def device_list(json_output):
|
||||||
|
|
||||||
if json_output:
|
if json_output:
|
||||||
click.echo(json.dumps(get_serialports()))
|
click.echo(json.dumps(util.get_serialports()))
|
||||||
return
|
return
|
||||||
|
|
||||||
for item in get_serialports():
|
for item in util.get_serialports():
|
||||||
click.secho(item['port'], fg="cyan")
|
click.secho(item['port'], fg="cyan")
|
||||||
click.echo("-" * len(item['port']))
|
click.echo("-" * len(item['port']))
|
||||||
click.echo("Hardware ID: %s" % item['hwid'])
|
click.echo("Hardware ID: %s" % item['hwid'])
|
||||||
@ -45,8 +45,7 @@ def device_list(json_output):
|
|||||||
|
|
||||||
@cli.command("monitor", short_help="Monitor device (Serial)")
|
@cli.command("monitor", short_help="Monitor device (Serial)")
|
||||||
@click.option("--port", "-p", help="Port, a number or a device name")
|
@click.option("--port", "-p", help="Port, a number or a device name")
|
||||||
@click.option(
|
@click.option("--baud", "-b", type=int, help="Set baud rate, default=9600")
|
||||||
"--baud", "-b", type=int, default=9600, help="Set baud rate, default=9600")
|
|
||||||
@click.option(
|
@click.option(
|
||||||
"--parity",
|
"--parity",
|
||||||
default="N",
|
default="N",
|
||||||
@ -98,15 +97,39 @@ def device_list(json_output):
|
|||||||
"--quiet",
|
"--quiet",
|
||||||
is_flag=True,
|
is_flag=True,
|
||||||
help="Diagnostics: suppress non-error messages, default=Off")
|
help="Diagnostics: suppress non-error messages, default=Off")
|
||||||
def device_monitor(**kwargs):
|
@click.option(
|
||||||
|
"-d",
|
||||||
|
"--project-dir",
|
||||||
|
default=getcwd,
|
||||||
|
type=click.Path(
|
||||||
|
exists=True, file_okay=False, dir_okay=True, resolve_path=True))
|
||||||
|
@click.option(
|
||||||
|
"-e",
|
||||||
|
"--environment",
|
||||||
|
help="Load configuration from `platformio.ini` and specified environment")
|
||||||
|
def device_monitor(**kwargs): # pylint: disable=too-many-branches
|
||||||
|
try:
|
||||||
|
project_options = get_project_options(kwargs['project_dir'],
|
||||||
|
kwargs['environment'])
|
||||||
|
monitor_options = {k: v for k, v in project_options or []}
|
||||||
|
if monitor_options:
|
||||||
|
for k in ("port", "baud", "rts", "dtr"):
|
||||||
|
k2 = "monitor_%s" % k
|
||||||
|
if kwargs[k] is None and k2 in monitor_options:
|
||||||
|
kwargs[k] = monitor_options[k2]
|
||||||
|
if k != "port":
|
||||||
|
kwargs[k] = int(kwargs[k])
|
||||||
|
except exception.NotPlatformIOProject:
|
||||||
|
pass
|
||||||
|
|
||||||
if not kwargs['port']:
|
if not kwargs['port']:
|
||||||
ports = get_serialports(filter_hwid=True)
|
ports = util.get_serialports(filter_hwid=True)
|
||||||
if len(ports) == 1:
|
if len(ports) == 1:
|
||||||
kwargs['port'] = ports[0]['port']
|
kwargs['port'] = ports[0]['port']
|
||||||
|
|
||||||
sys.argv = ["monitor"]
|
sys.argv = ["monitor"]
|
||||||
for k, v in kwargs.iteritems():
|
for k, v in kwargs.iteritems():
|
||||||
if k in ("port", "baud", "rts", "dtr"):
|
if k in ("port", "baud", "rts", "dtr", "environment", "project_dir"):
|
||||||
continue
|
continue
|
||||||
k = "--" + k.replace("_", "-")
|
k = "--" + k.replace("_", "-")
|
||||||
if isinstance(v, bool):
|
if isinstance(v, bool):
|
||||||
@ -121,8 +144,31 @@ def device_monitor(**kwargs):
|
|||||||
try:
|
try:
|
||||||
miniterm.main(
|
miniterm.main(
|
||||||
default_port=kwargs['port'],
|
default_port=kwargs['port'],
|
||||||
default_baudrate=kwargs['baud'],
|
default_baudrate=kwargs['baud'] or 9600,
|
||||||
default_rts=kwargs['rts'],
|
default_rts=kwargs['rts'],
|
||||||
default_dtr=kwargs['dtr'])
|
default_dtr=kwargs['dtr'])
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise MinitermException(e)
|
raise exception.MinitermException(e)
|
||||||
|
|
||||||
|
|
||||||
|
def get_project_options(project_dir, environment):
|
||||||
|
config = util.load_project_config(project_dir)
|
||||||
|
if not config.sections():
|
||||||
|
return
|
||||||
|
|
||||||
|
known_envs = [s[4:] for s in config.sections() if s.startswith("env:")]
|
||||||
|
if environment:
|
||||||
|
if environment in known_envs:
|
||||||
|
return config.items("env:%s" % environment)
|
||||||
|
raise exception.UnknownEnvNames(environment, ", ".join(known_envs))
|
||||||
|
|
||||||
|
if not known_envs:
|
||||||
|
return
|
||||||
|
|
||||||
|
if config.has_option("platformio", "env_default"):
|
||||||
|
env_default = config.get("platformio",
|
||||||
|
"env_default").split(", ")[0].strip()
|
||||||
|
if env_default and env_default in known_envs:
|
||||||
|
return config.items("env:%s" % env_default)
|
||||||
|
|
||||||
|
return config.items("env:%s" % known_envs[0])
|
||||||
|
Reference in New Issue
Block a user