Source code for qualia_core.deployment.toolchain.STM32CubeIDE

from __future__ import annotations

import sys
from pathlib import Path

from .Eclipse import Eclipse

if sys.version_info >= (3, 12):
    from typing import override
else:
    from typing_extensions import override

[docs] class STM32CubeIDE(Eclipse): def __init__(self, projectname: str, projectdir: Path, outdir: Path | None = None) -> None: outdir = outdir if outdir is not None else Path('out')/'deploy'/'STM32CubeIDE' stm32cubeide_dir = Path('/opt')/'stm32cubeide' stm32cubeide_bin = stm32cubeide_dir/'stm32cubeide' # STM32CubeProgrammer bundled with STM32CubeIDE 1.6.0 cannot reset MCU, use system-wide STM32CubeProgrammer 2.7.0 stm32cubeprogrammer_bin = Path('/')/'usr'/'bin'/'STM32_Programmer_CLI' #stm32cubeprogrammer_bin = next((self.__stm32cubeide_dir/'plugins').glob('com.st.stm32cube.ide.mcu.externaltools.cubeprogrammer.linux64_*'))/'tools'/'bin'/'STM32_Programmer.sh' arm_size_bin = next(filter(Path.is_dir, (stm32cubeide_dir/'plugins').glob('com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32*')))/'tools'/'bin'/'arm-none-eabi-size' super().__init__(eclipse_bin=stm32cubeide_bin, size_bin=arm_size_bin, upload_bin=stm32cubeprogrammer_bin, projectname=projectname, projectdir=projectdir, outdir=outdir) @override def _upload(self, tag: str, logdir: Path, args: tuple[str, ...] | None = None, cmd: Path | None = None) -> bool: args = ('--connect', 'port=SWD', 'mode=UR', 'reset=hwRst', '--download', str(self._outdir/f'{tag}.elf'), '0x08000000', '--verify', '-hardRst', *(args if args is not None else ())) return super()._upload(tag=tag, logdir=logdir, args=args, cmd=cmd)