1 changed files with 56 additions and 0 deletions
@ -0,0 +1,56 @@ |
|||||
|
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() |
||||
Loading…
Reference in new issue