mirror of https://github.com/ARMmbed/mbed-os.git
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
#
|
|
# Copyright (c) 2020-2021 Arm Limited and Contributors. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
"""Flash binary onto the connected device."""
|
|
|
|
import shutil
|
|
import os
|
|
import pathlib
|
|
import platform
|
|
|
|
from mbed_tools.build.exceptions import BinaryFileNotFoundError
|
|
|
|
|
|
def _flash_dev(disk: pathlib.Path, image_path: pathlib.Path) -> None:
|
|
"""Flash device using copy method.
|
|
|
|
Args:
|
|
disk: Device mount point.
|
|
image_path: Image file to be copied to device.
|
|
"""
|
|
shutil.copy(image_path, disk, follow_symlinks=False)
|
|
if not platform.system() == "Windows":
|
|
os.sync()
|
|
|
|
|
|
def _build_binary_file_path(program_path: pathlib.Path, build_dir: pathlib.Path, hex_file: bool) -> pathlib.Path:
|
|
"""Build binary file name.
|
|
|
|
Args:
|
|
program_path: Path to the Mbed project.
|
|
build_dir: Path to the CMake build folder.
|
|
hex_file: Use hex file.
|
|
|
|
Returns:
|
|
Path to binary file.
|
|
|
|
Raises:
|
|
BinaryFileNotFoundError: binary file not found in the path specified
|
|
"""
|
|
fw_fbase = build_dir / program_path.name
|
|
fw_file = fw_fbase.with_suffix(".hex" if hex_file else ".bin")
|
|
if not fw_file.exists():
|
|
raise BinaryFileNotFoundError(f"Build program file (firmware) not found {fw_file}")
|
|
return fw_file
|
|
|
|
|
|
def flash_binary(
|
|
mount_point: pathlib.Path, program_path: pathlib.Path, build_dir: pathlib.Path, mbed_target: str, hex_file: bool
|
|
) -> pathlib.Path:
|
|
"""Flash binary onto a device.
|
|
|
|
Look through the connected devices and flash the binary if the connected and built target matches.
|
|
|
|
Args:
|
|
mount_point: Mount point of the target device.
|
|
program_path: Path to the Mbed project.
|
|
build_dir: Path to the CMake build folder.
|
|
mbed_target: The name of the Mbed target to build for.
|
|
hex_file: Use hex file.
|
|
"""
|
|
fw_file = _build_binary_file_path(program_path, build_dir, hex_file)
|
|
_flash_dev(mount_point, fw_file)
|
|
return fw_file
|