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.
|
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import struct
|
import struct
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
@@ -15,6 +16,10 @@ from pygccxml.declarations import unsigned_int_t
|
|||||||
|
|
||||||
|
|
||||||
class AImage(object):
|
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):
|
def parse(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -53,6 +58,31 @@ class AImage(object):
|
|||||||
print(actual)
|
print(actual)
|
||||||
return actual == target
|
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):
|
def get_waves(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -99,8 +129,23 @@ class WaldorfMicroWave2V00(AImage):
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, filename_hi: str, filename_lo: str, out_dir="."):
|
def __init__(self, folder: str, out_dir="."):
|
||||||
self.out_dir = 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)
|
data, data_hi, data_lo = self.combine(filename_hi, filename_lo)
|
||||||
|
|
||||||
self._is_valid = self._check(data, self.target)
|
self._is_valid = self._check(data, self.target)
|
||||||
@@ -114,14 +159,6 @@ class WaldorfMicroWave2V00(AImage):
|
|||||||
self._json_save("wave_table.json", wave_table)
|
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
|
@staticmethod
|
||||||
def wave_extract(descr, data_hi, data_lo):
|
def wave_extract(descr, data_hi, data_lo):
|
||||||
data = b''
|
data = b''
|
||||||
@@ -162,24 +199,6 @@ class WaldorfMicroWave2V00(AImage):
|
|||||||
def is_valid(self):
|
def is_valid(self):
|
||||||
return self._is_valid
|
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):
|
class PpgEvu1v00(AImage):
|
||||||
pass
|
pass
|
||||||
@@ -187,10 +206,31 @@ class PpgEvu1v00(AImage):
|
|||||||
class PpgEvu2v00(AImage):
|
class PpgEvu2v00(AImage):
|
||||||
pass
|
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):
|
def detect(args):
|
||||||
os.makedirs(args.output_dir, exist_ok=True)
|
image = WaldorfMicroWave2V00(args.folder, args.output_dir)
|
||||||
image = WaldorfMicroWave2V00(args.filepath, args.extra, args.output_dir)
|
image = WaldorfMicrowaveXT(args.folder, args.output_dir)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def main(args):
|
def main(args):
|
||||||
@@ -199,8 +239,7 @@ def main(args):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = ArgumentParser()
|
parser = ArgumentParser()
|
||||||
parser.add_argument("filepath", help="Location of firmware binary image")
|
parser.add_argument("folder", help="Folder with firmware binary image")
|
||||||
parser.add_argument("--extra", help="Location of firmware binary image")
|
|
||||||
parser.add_argument("--output_dir", help="Location of output data", default='out')
|
parser.add_argument("--output_dir", help="Location of output data", default='out')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|||||||
Reference in New Issue
Block a user