From 77ce067841d3d6504aa3269463022b135ab45953 Mon Sep 17 00:00:00 2001 From: Live session user Date: Thu, 18 Apr 2024 14:41:25 +0000 Subject: [PATCH] linux support test --- mik32_upload.py | 22 ++++++++++++++++------ tclrpc.py | 19 +++++++++++++++++-- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/mik32_upload.py b/mik32_upload.py index 7d02557..7f192de 100644 --- a/mik32_upload.py +++ b/mik32_upload.py @@ -26,9 +26,13 @@ import sys # BOLD = '\033[1m' # UNDERLINE = '\033[4m' +if os.name == 'nt': + openocd_exec = "openocd.exe" +else: + openocd_exec = "openocd" default_openocd_host = '127.0.0.1' -openocd_exec_path = os.path.join("openocd", "bin", "openocd.exe") +openocd_exec_path = os.path.join("openocd", "bin", openocd_exec) openocd_scripts_path = os.path.join("openocd", "share", "openocd", "scripts") openocd_interface_path = os.path.join("interface", "ftdi", "m-link.cfg") openocd_target_path = os.path.join("target", "mik32.cfg") @@ -129,12 +133,15 @@ def run_openocd( cmd = [openocd_exec, "-s", openocd_scripts, "-f", openocd_interface, "-f", openocd_target] - creation_flags = subprocess.SW_HIDE - if is_open_console: - creation_flags |= subprocess.CREATE_NEW_CONSOLE + if os.name == 'nt': + creation_flags = subprocess.SW_HIDE + if is_open_console: + creation_flags |= subprocess.CREATE_NEW_CONSOLE - proc = subprocess.Popen( - cmd, creationflags=creation_flags) + proc = subprocess.Popen( + cmd, creationflags=creation_flags) + else: + proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) return proc @@ -226,7 +233,10 @@ def upload_file( except OSError as e: raise OpenOCDStartupException(e) try: + # time.sleep(0.1) + with OpenOcdTclRpc(host, port) as openocd: + print('try beginning') if (all(openocd_interface.find(i) == -1 for i in adapter_speed_not_supported)): openocd.run(f"adapter speed {adapter_speed}") openocd.run(f"log_output \"{log_path}\"") diff --git a/tclrpc.py b/tclrpc.py index 8e99d54..8da0176 100644 --- a/tclrpc.py +++ b/tclrpc.py @@ -1,6 +1,7 @@ import re import socket from logging import getLogger +import time from typing import List logger = getLogger(__name__) @@ -52,9 +53,11 @@ class OpenOcdTclRpc: def __enter__(self): self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.sock.settimeout(5.0) try: - self.sock.connect((self.host, self.port)) + # self.sock.connect((self.host, self.port)) + self.wait_for_port() + # except Exception as e: + # print(e) except socket.timeout: logger.debug("Test connection timed out, try again") self.sock.close() @@ -87,6 +90,18 @@ class OpenOcdTclRpc: if index != len(data) - 1: raise Exception('Unhandled extra bytes after %r'.format(self.SEPARATOR_BYTES)) return data[:-1] + + def wait_for_port(self, timeout: float = 5.0): + sock = None + start_time = time.perf_counter() + while time.perf_counter() - start_time < timeout: + try: + sock = self.sock.connect((self.host, self.port)) + break + except OSError as ex: + time.sleep(0.01) + if sock != None: + self.sock = sock def run(self, cmd): """Run a command and raise an error if it returns an error"""