def install_teensy_core_linux(install_prefix, install_dir, cache_dir): """Download and install Teensyduino artifacts for Windows.""" teensy_artifacts = _ARDUINO_CORE_ARTIFACTS["teensy"][platform.system()] arduino_artifact = teensy_artifacts["arduino-ide"] arduino_tarfile = file_operations.download_to_cache( url=arduino_artifact["url"], expected_sha256sum=arduino_artifact["sha256"], cache_directory=cache_dir, downloaded_file_name=arduino_artifact["file_name"]) teensyduino_artifact = teensy_artifacts["teensyduino"] teensyduino_installer = file_operations.download_to_cache( url=teensyduino_artifact["url"], expected_sha256sum=teensyduino_artifact["sha256"], cache_directory=cache_dir, downloaded_file_name=teensyduino_artifact["file_name"]) file_operations.extract_archive(arduino_tarfile, install_dir, cache_dir) os.chmod(teensyduino_installer, os.stat(teensyduino_installer).st_mode | stat.S_IEXEC) original_working_dir = os.getcwd() os.chdir(install_prefix) # "teensy" here should match args.core_name install_command = [teensyduino_installer, "--dir=teensy"] subprocess.run(install_command) file_operations.remove_empty_directories(install_dir) os.chdir(original_working_dir)
def install_stm32duino_core(install_prefix, install_dir, cache_dir): artifacts = _ARDUINO_CORE_ARTIFACTS["stm32duino"]["all"]["core"] core_tarfile = file_operations.download_to_cache( url=artifacts["url"], expected_sha256sum=artifacts["sha256"], cache_directory=cache_dir) package_path = os.path.join(install_dir, "hardware", "stm32", artifacts["version"]) os.makedirs(package_path, exist_ok=True) file_operations.extract_archive(core_tarfile, package_path, cache_dir) original_working_dir = os.getcwd() os.chdir(install_prefix) # TODO(tonymd): Fetch platform specific tools as specified by: # https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json os.chdir(original_working_dir) return True
def install_arduino_samd_core(install_prefix: str, install_dir: str, cache_dir: str): artifacts = _ARDUINO_CORE_ARTIFACTS["arduino-samd"]["all"]["core"] core_tarfile = file_operations.download_to_cache( url=artifacts["url"], expected_sha256sum=artifacts["sha256"], cache_directory=cache_dir) package_path = os.path.join(install_dir, "hardware", "samd", artifacts["version"]) os.makedirs(package_path, exist_ok=True) file_operations.extract_archive(core_tarfile, package_path, cache_dir) original_working_dir = os.getcwd() os.chdir(install_prefix) # TODO(tonymd): Fetch core/tools as specified by: # http://downloads.arduino.cc/packages/package_index.json os.chdir(original_working_dir) return True
def install_adafruit_samd_core(install_prefix: str, install_dir: str, cache_dir: str): artifacts = _ARDUINO_CORE_ARTIFACTS["adafruit-samd"]["all"]["core"] core_tarfile = file_operations.download_to_cache( url=artifacts["url"], expected_sha256sum=artifacts["sha256"], cache_directory=cache_dir) package_path = os.path.join(install_dir, "hardware", "samd", artifacts["version"]) os.makedirs(package_path, exist_ok=True) file_operations.extract_archive(core_tarfile, package_path, cache_dir) original_working_dir = os.getcwd() os.chdir(install_prefix) # TODO(tonymd): Fetch platform specific tools as specified by: # https://adafruit.github.io/arduino-board-index/package_adafruit_index.json # Specifically: # https://github.com/ARM-software/CMSIS_5/archive/5.4.0.tar.gz os.chdir(original_working_dir) return True
def install_teensy_core_mac(unused_install_prefix, install_dir, cache_dir): """Download and install Teensyduino artifacts for Mac.""" teensy_artifacts = _ARDUINO_CORE_ARTIFACTS["teensy"][platform.system()] teensyduino_artifact = teensy_artifacts["teensyduino"] teensyduino_zip = file_operations.download_to_cache( url=teensyduino_artifact["url"], expected_sha256sum=teensyduino_artifact["sha256"], cache_directory=cache_dir) extracted_files = file_operations.extract_archive( teensyduino_zip, install_dir, cache_dir, remove_single_toplevel_folder=False) toplevel_folder = sorted(extracted_files)[0] os.symlink(os.path.join(toplevel_folder, "Contents", "Java", "hardware"), os.path.join(install_dir, "hardware"), target_is_directory=True)
def install_teensy_core_windows(install_prefix, install_dir, cache_dir): """Download and install Teensyduino artifacts for Windows.""" teensy_artifacts = _ARDUINO_CORE_ARTIFACTS["teensy"][platform.system()] arduino_artifact = teensy_artifacts["arduino-ide"] arduino_zipfile = file_operations.download_to_cache( url=arduino_artifact["url"], expected_sha256sum=arduino_artifact["sha256"], cache_directory=cache_dir, downloaded_file_name=arduino_artifact["file_name"]) teensyduino_artifact = teensy_artifacts["teensyduino"] teensyduino_installer = file_operations.download_to_cache( url=teensyduino_artifact["url"], expected_sha256sum=teensyduino_artifact["sha256"], cache_directory=cache_dir, downloaded_file_name=teensyduino_artifact["file_name"]) file_operations.extract_archive(arduino_zipfile, install_dir, cache_dir) # "teensy" here should match args.core_name teensy_core_dir = os.path.join(install_prefix, "teensy") # Change working directory for installation original_working_dir = os.getcwd() os.chdir(install_prefix) install_command = [teensyduino_installer, "--dir=teensy"] _LOG.info(" Running: %s", " ".join(install_command)) _LOG.info(" Please click yes on the Windows 'User Account Control' " "dialog.") _LOG.info(" You should see: 'Verified publisher: PRJC.COM LLC'") def wait_for_process(process_name, timeout=30, result_operator=operator.truth): start_time = time.time() while result_operator(process_name in get_windows_process_names()): time.sleep(1) if time.time() > start_time + timeout: _LOG.error( "Error: Installation Failed.\n" "Please click yes on the Windows 'User Account Control' " "dialog.") sys.exit(1) # Run Teensyduino installer with admin rights (non-blocking) # User Account Control (UAC) will prompt the user for consent import ctypes # pylint: disable=import-outside-toplevel ctypes.windll.shell32.ShellExecuteW( None, # parent window handle "runas", # operation teensyduino_installer, # file to run subprocess.list2cmdline(install_command), # command parameters install_prefix, # working directory 1) # Display mode (SW_SHOWNORMAL: Activates and displays a window) # Wait for teensyduino_installer to start running wait_for_process("TeensyduinoInstall.exe", result_operator=operator.not_) _LOG.info("Waiting for TeensyduinoInstall.exe to finish.") # Wait till teensyduino_installer is finished wait_for_process("TeensyduinoInstall.exe", timeout=360) if not os.path.exists(os.path.join(teensy_core_dir, "hardware", "teensy")): _LOG.error( "Error: Installation Failed.\n" "Please try again and ensure Teensyduino is installed in " "the folder:\n" "%s", teensy_core_dir) sys.exit(1) else: _LOG.info("Install complete!") file_operations.remove_empty_directories(install_dir) os.chdir(original_working_dir)