mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Merge branch 'feat/monitor_port_detection' into 'release/v5.0'
feat(tools/monitor): add simple port detection [backport v5.0] See merge request espressif/esp-idf!26329
This commit is contained in:
commit
b9a15e601b
@ -9,7 +9,7 @@
|
||||
# - If core dump output is detected, it is converted to a human-readable report
|
||||
# by espcoredump.py.
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
# Contains elements taken from miniterm "Very simple serial terminal" which
|
||||
@ -33,7 +33,6 @@ from builtins import bytes
|
||||
from typing import Any, List, Optional, Type, Union
|
||||
|
||||
import serial
|
||||
import serial.tools.list_ports
|
||||
# Windows console stuff
|
||||
from idf_monitor_base.ansi_color_converter import get_ansi_converter
|
||||
from idf_monitor_base.argument_parser import get_parser
|
||||
@ -53,7 +52,7 @@ from idf_monitor_base.output_helpers import normal_print, yellow_print
|
||||
from idf_monitor_base.serial_handler import SerialHandler, SerialHandlerNoElf, run_make
|
||||
from idf_monitor_base.serial_reader import LinuxReader, SerialReader
|
||||
from idf_monitor_base.web_socket_client import WebSocketClient
|
||||
from serial.tools import miniterm
|
||||
from serial.tools import list_ports, miniterm
|
||||
|
||||
key_description = miniterm.key_description
|
||||
|
||||
@ -291,6 +290,21 @@ def main() -> None:
|
||||
# avoid the modification of args.port.
|
||||
port = args.port
|
||||
|
||||
# if no port was set, detect connected ports and use one of them
|
||||
if port is None:
|
||||
try:
|
||||
port_list = list_ports.comports()
|
||||
port = port_list[-1].device
|
||||
# keep the `/dev/ttyUSB0` default port on linux if connected
|
||||
if sys.platform == 'linux':
|
||||
for p in port_list:
|
||||
if p.device == '/dev/ttyUSB0':
|
||||
port = p.device
|
||||
break
|
||||
yellow_print(f'--- Using autodetected port {port}')
|
||||
except IndexError:
|
||||
sys.exit('No serial ports detected.')
|
||||
|
||||
# GDB uses CreateFile to open COM port, which requires the COM name to be r'\\.\COMx' if the COM
|
||||
# number is larger than 10
|
||||
if os.name == 'nt' and port.startswith('COM'):
|
||||
|
@ -1,8 +1,9 @@
|
||||
# SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
|
||||
from .constants import DEFAULT_PRINT_FILTER, DEFAULT_TOOLCHAIN_PREFIX, PANIC_DECODE_BACKTRACE, PANIC_DECODE_DISABLE
|
||||
from .coredump import COREDUMP_DECODE_DISABLE, COREDUMP_DECODE_INFO
|
||||
@ -13,8 +14,9 @@ def get_parser(): # type: () -> argparse.ArgumentParser
|
||||
|
||||
parser.add_argument(
|
||||
'--port', '-p',
|
||||
help='Serial port device',
|
||||
default=os.environ.get('ESPTOOL_PORT', '/dev/ttyUSB0')
|
||||
help='Serial port device. If not set, a connected port will be used.' +
|
||||
(' Defaults to `/dev/ttyUSB0` if connected.' if sys.platform == 'linux' else ''),
|
||||
default=os.environ.get('ESPTOOL_PORT', None)
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
|
@ -1,4 +1,4 @@
|
||||
# SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import queue
|
||||
@ -7,6 +7,7 @@ import sys
|
||||
import time
|
||||
|
||||
import serial
|
||||
from serial.tools import list_ports
|
||||
|
||||
from .constants import CHECK_ALIVE_FLAG_TIMEOUT, MINIMAL_EN_LOW_DELAY, RECONNECT_DELAY, TAG_SERIAL
|
||||
from .output_helpers import red_print, yellow_print
|
||||
@ -49,7 +50,13 @@ class SerialReader(Reader):
|
||||
self.serial.rts = high # IO0=HIGH
|
||||
self.serial.dtr = self.serial.dtr # usbser.sys workaround
|
||||
# Current state not reset the target!
|
||||
self.serial.open()
|
||||
try:
|
||||
self.serial.open()
|
||||
except serial.serialutil.SerialException:
|
||||
# if connection to port fails suggest other available ports
|
||||
port_list = '\n'.join([p.device for p in list_ports.comports()])
|
||||
yellow_print(f'Connection to {self.serial.portstr} failed. Available ports:\n{port_list}')
|
||||
return
|
||||
if not self.gdb_exit and self.reset:
|
||||
self.serial.dtr = high # Set dtr to reset state (affected by rts)
|
||||
self.serial.rts = low # Set rts/dtr to the reset state
|
||||
|
Loading…
Reference in New Issue
Block a user