You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

56 lines
1.4 KiB

import logging
import subprocess
from pathlib import Path
from typing import Sequence, Union
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("Download")
APPLICATION_NAME = "nucleo-wb55-dongle-usb"
#APPLICATION_NAME = "nucleo-wb55-dongle-blinky"
PORT="USB1"
CLI_PATH = Path("/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI")
ELF_FILE = Path.home() / Path(f"Documents/git/nucleo-playground-workspace/{APPLICATION_NAME}/Debug/{APPLICATION_NAME}.elf")
def execute_command(
command: Union[str, Sequence[str]],
):
logger.debug(f"Command is: {command}")
process = subprocess.Popen(
command,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
def _poll_stdout() -> str:
return process.stdout.readline().decode()
exit_code = None
command_logger = logger.getChild("Programmer")
while exit_code is None:
for line in iter(_poll_stdout, ''):
command_logger.info(line.rstrip())
exit_code = process.poll()
for line in iter(_poll_stdout, ''):
command_logger.info(line.rstrip()) # flush pipe
logger.debug(f"Coomand finished with exit code {exit_code}")
return exit_code
def download():
command = [
str(CLI_PATH),
"-c",
f"port={PORT}",
"-w", str(ELF_FILE),
]
execute_command(command)
if __name__ == "__main__":
download()