|
|
@@ -12,28 +12,25 @@ PYTHON = sys.executable
|
|
|
|
|
|
|
|
|
def action_extensions(base_actions, project_path):
|
|
|
- def _get_default_serial_port():
|
|
|
- """ Return a default serial port. esptool can do this (smarter), but it can create
|
|
|
- inconsistencies where esptool.py uses one port and idf_monitor uses another.
|
|
|
-
|
|
|
- Same logic as esptool.py search order, reverse sort by name and choose the first port.
|
|
|
- """
|
|
|
+ def _get_default_serial_port(args):
|
|
|
# Import is done here in order to move it after the check_environment() ensured that pyserial has been installed
|
|
|
- import serial.tools.list_ports
|
|
|
-
|
|
|
- ports = list(reversed(sorted(p.device for p in serial.tools.list_ports.comports())))
|
|
|
try:
|
|
|
- print("Choosing default port %s (use '-p PORT' option to set a specific serial port)" %
|
|
|
- ports[0].encode("ascii", "ignore"))
|
|
|
- return ports[0]
|
|
|
- except IndexError:
|
|
|
- raise FatalError(
|
|
|
- "No serial ports found. Connect a device, or use '-p PORT' option to set a specific port.")
|
|
|
+ import serial.tools.list_ports
|
|
|
+ esptool_path = os.path.join(os.environ["IDF_PATH"], "components/esptool_py/esptool/")
|
|
|
+ sys.path.insert(0, esptool_path)
|
|
|
+ import esptool
|
|
|
+ ports = list(sorted(p.device for p in serial.tools.list_ports.comports()))
|
|
|
+ esp = esptool.get_default_connected_device(serial_list=ports, port=None, connect_attempts=3,
|
|
|
+ initial_baud=args.baud)
|
|
|
+
|
|
|
+ return esp.serial_port
|
|
|
+ except Exception:
|
|
|
+ raise FatalError("No serial ports found. Connect a device, or use '-p PORT' option to set a specific port.")
|
|
|
|
|
|
def _get_esptool_args(args):
|
|
|
esptool_path = os.path.join(os.environ["IDF_PATH"], "components/esptool_py/esptool/esptool.py")
|
|
|
if args.port is None:
|
|
|
- args.port = _get_default_serial_port()
|
|
|
+ args.port = _get_default_serial_port(args)
|
|
|
result = [PYTHON, esptool_path]
|
|
|
result += ["-p", args.port]
|
|
|
result += ["-b", str(args.baud)]
|
|
|
@@ -66,8 +63,7 @@ def action_extensions(base_actions, project_path):
|
|
|
"""
|
|
|
Run idf_monitor.py to watch build output
|
|
|
"""
|
|
|
- if args.port is None:
|
|
|
- args.port = _get_default_serial_port()
|
|
|
+
|
|
|
desc_path = os.path.join(args.build_dir, "project_description.json")
|
|
|
if not os.path.exists(desc_path):
|
|
|
ensure_build_directory(args, ctx.info_name)
|
|
|
@@ -81,8 +77,8 @@ def action_extensions(base_actions, project_path):
|
|
|
"Try '%s flash monitor'." % (elf_file, ctx.info_name), ctx)
|
|
|
idf_monitor = os.path.join(os.environ["IDF_PATH"], "tools/idf_monitor.py")
|
|
|
monitor_args = [PYTHON, idf_monitor]
|
|
|
- if args.port is not None:
|
|
|
- monitor_args += ["-p", args.port]
|
|
|
+ esp_port = args.port or _get_default_serial_port(args)
|
|
|
+ monitor_args += ["-p", esp_port]
|
|
|
|
|
|
if not monitor_baud:
|
|
|
monitor_baud = os.getenv("IDF_MONITOR_BAUD") or os.getenv("MONITORBAUD") or project_desc["monitor_baud"]
|
|
|
@@ -117,11 +113,8 @@ def action_extensions(base_actions, project_path):
|
|
|
Run esptool to flash the entire project, from an argfile generated by the build system
|
|
|
"""
|
|
|
ensure_build_directory(args, ctx.info_name)
|
|
|
- if args.port is None:
|
|
|
- args.port = _get_default_serial_port()
|
|
|
-
|
|
|
- run_target(action, args, {"ESPPORT": args.port,
|
|
|
- "ESPBAUD": str(args.baud)})
|
|
|
+ esp_port = args.port or _get_default_serial_port(args)
|
|
|
+ run_target(action, args, {"ESPBAUD": str(args.baud),"ESPPORT": esp_port})
|
|
|
|
|
|
def erase_flash(action, ctx, args):
|
|
|
ensure_build_directory(args, ctx.info_name)
|