added WaldorfMicrowaveXT
This commit is contained in:
@@ -4,6 +4,7 @@ import enum
|
||||
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
|
||||
|
||||
import os
|
||||
import re
|
||||
import struct
|
||||
from argparse import ArgumentParser
|
||||
from io import BytesIO
|
||||
@@ -15,6 +16,10 @@ from pygccxml.declarations import unsigned_int_t
|
||||
|
||||
|
||||
class AImage(object):
|
||||
def __init__(self, folder: str, output_dir: str = "out"):
|
||||
self.out_path = os.path.join(folder, output_dir)
|
||||
os.makedirs(self.out_path, exist_ok=True)
|
||||
|
||||
def parse(self):
|
||||
pass
|
||||
|
||||
@@ -53,6 +58,31 @@ class AImage(object):
|
||||
print(actual)
|
||||
return actual == target
|
||||
|
||||
@staticmethod
|
||||
def combine(filename_hi: str, filename_lo: str):
|
||||
data_hi = b''
|
||||
data_lo = b''
|
||||
with open(filename_hi, "rb") as fp:
|
||||
data_hi = fp.read()
|
||||
with open(filename_lo, "rb") as fp:
|
||||
data_lo = fp.read()
|
||||
|
||||
data = b''
|
||||
for hi, lo in zip(data_hi, data_lo):
|
||||
z = int.from_bytes([hi, lo], byteorder='big')
|
||||
b = struct.pack('>H', z)
|
||||
data += b
|
||||
|
||||
return data, data_hi, data_lo
|
||||
|
||||
def _save(self, filename: str, data):
|
||||
with open(os.path.join(self.out_path, filename), 'wb') as fp:
|
||||
fp.write(data)
|
||||
|
||||
def _json_save(self, filename: str, data):
|
||||
with open(os.path.join(self.out_path, filename), 'w') as fp:
|
||||
json.dump(data, fp, indent=4)
|
||||
|
||||
def get_waves(self):
|
||||
pass
|
||||
|
||||
@@ -99,8 +129,23 @@ class WaldorfMicroWave2V00(AImage):
|
||||
}
|
||||
]
|
||||
|
||||
def __init__(self, filename_hi: str, filename_lo: str, out_dir="."):
|
||||
self.out_dir = out_dir
|
||||
def __init__(self, folder: str, out_dir="."):
|
||||
AImage.__init__(self, folder, out_dir)
|
||||
filename_hi = None
|
||||
filename_lo = None
|
||||
for filename in os.listdir(folder):
|
||||
filepath = os.path.join(folder, filename)
|
||||
if re.match('.*_H.bin', filename):
|
||||
filename_hi = filepath
|
||||
if re.match('.*_L.bin', filename):
|
||||
filename_lo = filepath
|
||||
|
||||
if filename_hi is None:
|
||||
return
|
||||
|
||||
if filename_lo is None:
|
||||
return
|
||||
|
||||
data, data_hi, data_lo = self.combine(filename_hi, filename_lo)
|
||||
|
||||
self._is_valid = self._check(data, self.target)
|
||||
@@ -114,14 +159,6 @@ class WaldorfMicroWave2V00(AImage):
|
||||
self._json_save("wave_table.json", wave_table)
|
||||
|
||||
|
||||
def _save(self, filename: str, data):
|
||||
with open(os.path.join(self.out_dir, filename), 'wb') as fp:
|
||||
fp.write(data)
|
||||
|
||||
def _json_save(self, filename: str, data):
|
||||
with open(os.path.join(self.out_dir, filename), 'w') as fp:
|
||||
json.dump(data, fp, indent=4)
|
||||
|
||||
@staticmethod
|
||||
def wave_extract(descr, data_hi, data_lo):
|
||||
data = b''
|
||||
@@ -162,24 +199,6 @@ class WaldorfMicroWave2V00(AImage):
|
||||
def is_valid(self):
|
||||
return self._is_valid
|
||||
|
||||
@staticmethod
|
||||
def combine(filename_hi: str, filename_lo: str):
|
||||
data_hi = b''
|
||||
data_lo = b''
|
||||
with open(filename_hi, "rb") as fp:
|
||||
data_hi = fp.read()
|
||||
with open(filename_lo, "rb") as fp:
|
||||
data_lo = fp.read()
|
||||
|
||||
data = b''
|
||||
for hi, lo in zip(data_hi, data_lo):
|
||||
z = int.from_bytes([hi, lo], byteorder='big')
|
||||
b = struct.pack('>H', z)
|
||||
data += b
|
||||
|
||||
return data, data_hi, data_lo
|
||||
|
||||
|
||||
|
||||
class PpgEvu1v00(AImage):
|
||||
pass
|
||||
@@ -187,10 +206,31 @@ class PpgEvu1v00(AImage):
|
||||
class PpgEvu2v00(AImage):
|
||||
pass
|
||||
|
||||
class WaldorfMicrowaveXT(AImage):
|
||||
def __init__(self, folder: str, out_dir="."):
|
||||
AImage.__init__(self, folder, out_dir)
|
||||
filename_hi = None
|
||||
filename_lo = None
|
||||
for filename in os.listdir(folder):
|
||||
filepath = os.path.join(folder, filename)
|
||||
if re.match('upper_.*.bin', filename):
|
||||
filename_hi = filepath
|
||||
if re.match('lower_.*.bin', filename):
|
||||
filename_lo = filepath
|
||||
|
||||
if filename_hi is None:
|
||||
return
|
||||
|
||||
if filename_lo is None:
|
||||
return
|
||||
|
||||
data, data_hi, data_lo = self.combine(filename_lo, filename_hi)
|
||||
self._save("combined_be.bin", data)
|
||||
|
||||
|
||||
def detect(args):
|
||||
os.makedirs(args.output_dir, exist_ok=True)
|
||||
image = WaldorfMicroWave2V00(args.filepath, args.extra, args.output_dir)
|
||||
image = WaldorfMicroWave2V00(args.folder, args.output_dir)
|
||||
image = WaldorfMicrowaveXT(args.folder, args.output_dir)
|
||||
pass
|
||||
|
||||
def main(args):
|
||||
@@ -199,8 +239,7 @@ def main(args):
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument("filepath", help="Location of firmware binary image")
|
||||
parser.add_argument("--extra", help="Location of firmware binary image")
|
||||
parser.add_argument("folder", help="Folder with firmware binary image")
|
||||
parser.add_argument("--output_dir", help="Location of output data", default='out')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
Reference in New Issue
Block a user