diff --git a/mik32_eeprom.py b/drivers/mik32_eeprom.py similarity index 100% rename from mik32_eeprom.py rename to drivers/mik32_eeprom.py diff --git a/mik32_ram.py b/drivers/mik32_ram.py similarity index 100% rename from mik32_ram.py rename to drivers/mik32_ram.py diff --git a/mik32_spifi.py b/drivers/mik32_spifi.py similarity index 100% rename from mik32_spifi.py rename to drivers/mik32_spifi.py diff --git a/tclrpc.py b/drivers/tclrpc.py similarity index 100% rename from tclrpc.py rename to drivers/tclrpc.py diff --git a/mik32_parsers.py b/mik32_parsers.py index 03491ea..a583003 100644 --- a/mik32_parsers.py +++ b/mik32_parsers.py @@ -113,17 +113,3 @@ def bytes2words(arr: List[int]) -> List[int]: words.append(word[0]+2**8*word[1]+2**16*word[2]+2**24*word[3]) word = [] return words - -def get_content(filename: str) -> List[int]: - content: List[int] = [] - - if filename.endswith(".bin"): - content = parse_bin(filename) - elif filename.endswith(".hex"): - content = parse_hex(filename)[0] - else: - raise Exception("Unsupported file format") - - return content - -# parse_hex("mik32-uploader../test-roms/eeprom.hex") diff --git a/mik32_upload.py b/mik32_upload.py index 0793458..8880f2d 100644 --- a/mik32_upload.py +++ b/mik32_upload.py @@ -1,17 +1,19 @@ import shlex -from .tclrpc import OpenOcdTclRpc import argparse import sys import subprocess -from .mik32_eeprom import * -from .mik32_spifi import * -from .mik32_ram import * -from .mik32_parsers import * import os -from typing import Iterable +from enum import Enum +from typing import List, Tuple +from .drivers.tclrpc import OpenOcdTclRpc +from .drivers.mik32_eeprom import * +from .drivers.mik32_spifi import * +from .drivers.mik32_ram import * +from .mik32_parsers import * +from .parsers.parser_hex import * -# class bcolors: +# class bcolors(Enum): # OK = '\033[92m' # WARNING = '\033[93m' # FAIL = '\033[91m' @@ -19,20 +21,61 @@ from typing import Iterable # BOLD = '\033[1m' # UNDERLINE = '\033[4m' + DEFAULT_OPENOCD_EXEC_FILE_PATH = os.path.join("openocd", "bin", "openocd.exe") -DEFAULT_OPENOCD_SCRIPTS_PATH = os.path.join("openocd", "share", "openocd", "scripts") +DEFAULT_OPENOCD_SCRIPTS_PATH = os.path.join( + "openocd", "share", "openocd", "scripts") + +supported_formats = [".hex"] def test_connection(): output = "" with OpenOcdTclRpc() as openocd: output = openocd.run(f"capture \"reg\"") - + if output == "": raise Exception("ERROR: no regs found, check MCU connection") -def upload_file(filename: str, boot_source: str = "eeprom", is_resume=True) -> int: +def read_file(filename: str) -> List[Tuple[int, List[int]]] : + segments: List[Tuple[int, List[int]]] = [] + lines: List[str] = [] + + file_name, file_extension = os.path.splitext(filename) + if file_extension in supported_formats: + with open(filename) as f: + lines = f.readlines() + elif file_extension == ".bin": + with open(filename, "rb") as f: + contents = list(f.read()) + segments[0] = (0, contents) + else: + raise Exception("Unsupported file format: %s" % (file_extension)) + + for line in lines: + record: Tuple[RecordType, List[int]] + if file_extension == ".hex": + record = + + + return segments + + +def get_content(filename: str) -> List[int]: + content: List[int] = [] + + if filename.endswith(".bin"): + content = parse_bin(filename) + elif filename.endswith(".hex"): + content = parse_hex(filename)[0] + else: + + + return content + + +def upload_file(filename: str, boot_source: str = "undefined", is_resume=True) -> int: """ Write ihex or binary file into MIK32 EEPROM or external flash memory @@ -76,13 +119,12 @@ def upload_file(filename: str, boot_source: str = "eeprom", is_resume=True) -> i result = spifi_write_file(get_content(filename), is_resume) elif boot_source == "ram": write_file(filename, is_resume) - result = 0 # TODO + result = 0 # TODO else: raise Exception("Unsupported boot source, use eeprom or spifi") result = 1 return result - def show_file(filename: str, boot_source: str = "eeprom"): @@ -104,7 +146,7 @@ def createParser(): parser.add_argument('filepath', nargs='?') parser.add_argument('--show-file', action="store_const", const=True) parser.add_argument('--no-upload', action="store_const", const=True) - parser.add_argument('-b', '--boot-mode', default='eeprom') + parser.add_argument('-b', '--boot-mode', default='undefined') return parser diff --git a/parsers/parser_hex.py b/parsers/parser_hex.py new file mode 100644 index 0000000..5bab9dd --- /dev/null +++ b/parsers/parser_hex.py @@ -0,0 +1,3 @@ +from parsers import RecordType + +def parse(str) -> \ No newline at end of file diff --git a/parsers/parsers.py b/parsers/parsers.py new file mode 100644 index 0000000..14e2c44 --- /dev/null +++ b/parsers/parsers.py @@ -0,0 +1,16 @@ +from enum import Enum +from typing import List, Tuple +import parser_hex + + +class RecordType(Enum): + DATA = 1 + + +def parse_line(line: str, file_extension: str) -> Tuple[RecordType, List[int]]: + record: Tuple[RecordType, List[int]] + + if file_extension == ".hex": + + + return record \ No newline at end of file