refactored

This commit is contained in:
2025-08-11 18:00:14 +02:00
parent 46f6d9a763
commit 682e8ca232
+31 -24
View File
@@ -1,27 +1,20 @@
# This is a sample Python script.
import enum import enum
# Press Umschalt+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
import os import os
import re import re
import struct import struct
from argparse import ArgumentParser from argparse import ArgumentParser
from io import BytesIO
from typing import BinaryIO
import hashlib import hashlib
import json import json
import abc
from pygccxml.declarations import unsigned_int_t class AImage(abc.ABC):
class AImage(object):
def __init__(self, folder: str, output_dir: str = "out"): def __init__(self, folder: str, output_dir: str = "out"):
self.folder = folder
self.out_path = os.path.join(folder, output_dir) self.out_path = os.path.join(folder, output_dir)
os.makedirs(self.out_path, exist_ok=True) os.makedirs(self.out_path, exist_ok=True)
def parse(self): def parse(self):
pass return False
def version(self): def version(self):
pass pass
@@ -131,20 +124,23 @@ class WaldorfMicroWave2V00(AImage):
def __init__(self, folder: str, out_dir="."): def __init__(self, folder: str, out_dir="."):
AImage.__init__(self, folder, out_dir) AImage.__init__(self, folder, out_dir)
self._is_valid = False
def parse(self):
filename_hi = None filename_hi = None
filename_lo = None filename_lo = None
for filename in os.listdir(folder): for filename in os.listdir(self.folder):
filepath = os.path.join(folder, filename) filepath = os.path.join(self.folder, filename)
if re.match('.*_H.bin', filename): if re.match('.*_H.bin', filename):
filename_hi = filepath filename_hi = filepath
if re.match('.*_L.bin', filename): if re.match('.*_L.bin', filename):
filename_lo = filepath filename_lo = filepath
if filename_hi is None: if filename_hi is None:
return return False
if filename_lo is None: if filename_lo is None:
return return False
data, data_hi, data_lo = self.combine(filename_hi, filename_lo) data, data_hi, data_lo = self.combine(filename_hi, filename_lo)
@@ -158,6 +154,7 @@ class WaldorfMicroWave2V00(AImage):
wave_table = self.wave_table_extract(self.wave_tables_descr, data_hi, data_lo) wave_table = self.wave_table_extract(self.wave_tables_descr, data_hi, data_lo)
self._json_save("wave_table.json", wave_table) self._json_save("wave_table.json", wave_table)
return self._is_valid
@staticmethod @staticmethod
def wave_extract(descr, data_hi, data_lo): def wave_extract(descr, data_hi, data_lo):
@@ -170,7 +167,6 @@ class WaldorfMicroWave2V00(AImage):
@staticmethod @staticmethod
def wave_table_extract(descr, data_hi, data_lo): def wave_table_extract(descr, data_hi, data_lo):
data = [] data = []
table_count = 0 table_count = 0
pos = 0 pos = 0
@@ -209,32 +205,43 @@ class PpgEvu2v00(AImage):
class WaldorfMicrowaveXT(AImage): class WaldorfMicrowaveXT(AImage):
def __init__(self, folder: str, out_dir="."): def __init__(self, folder: str, out_dir="."):
AImage.__init__(self, folder, out_dir) AImage.__init__(self, folder, out_dir)
def parse(self):
filename_hi = None filename_hi = None
filename_lo = None filename_lo = None
for filename in os.listdir(folder): for filename in os.listdir(self.folder):
filepath = os.path.join(folder, filename) filepath = os.path.join(self.folder, filename)
if re.match('upper_.*.bin', filename): if re.match('upper_.*.bin', filename):
filename_hi = filepath filename_hi = filepath
if re.match('lower_.*.bin', filename): if re.match('lower_.*.bin', filename):
filename_lo = filepath filename_lo = filepath
if filename_hi is None: if filename_hi is None:
return return False
if filename_lo is None: if filename_lo is None:
return return False
data, data_hi, data_lo = self.combine(filename_lo, filename_hi) data, data_hi, data_lo = self.combine(filename_lo, filename_hi)
self._save("combined_be.bin", data) self._save("combined_be.bin", data)
return True
def detect(args): def detect(args):
image = WaldorfMicroWave2V00(args.folder, args.output_dir) wave_obj_list = [
image = WaldorfMicrowaveXT(args.folder, args.output_dir) WaldorfMicroWave2V00(args.folder, args.output_dir),
pass WaldorfMicrowaveXT(args.folder, args.output_dir)
]
for wave_obj in wave_obj_list:
if wave_obj.parse():
return wave_obj
return None
def main(args): def main(args):
image_type = detect(args) result = detect(args)
print(f"Detected parser: {result}")
if __name__ == '__main__': if __name__ == '__main__':