]> sigrok.org Git - sigrok-util.git/blobdiff - firmware/hantek-dso-extract.py
Move/rename firmware extractor tools.
[sigrok-util.git] / firmware / hantek-dso-extract.py
diff --git a/firmware/hantek-dso-extract.py b/firmware/hantek-dso-extract.py
deleted file mode 100755 (executable)
index 045e50a..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/python3
-##
-## This file is part of the sigrok-util project.
-##
-## Copyright (C) 2012 Bert Vermeulen <bert@biot.com>
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, see <http://www.gnu.org/licenses/>.
-##
-
-import sys
-import os
-import re
-import struct
-from array import array
-
-import parsepe
-
-
-def find_model(filename):
-       filename = os.path.split(filename)[-1]
-       m = re.search('^dso([a-z0-9]+)1.sys$', filename, re.I)
-       if m:
-               model = m.group(1).upper()
-               model = model.replace('X86', '').replace('AMD64', '').replace('IA64', '')
-               if model == '520A':
-                       model = '5200A'
-       else:
-               model = 'unknown'
-
-       return model
-
-
-def unsparse(data):
-       p = 0
-       maxaddr = 0
-       blob = array('B', [0] * 0x4000)
-       while p <= len(data) and data[p+4] == 0:
-               num_bytes = struct.unpack("<H", data[p:p+2])[0]
-               address = struct.unpack("<H", data[p+2:p+4])[0]
-               chunk = array('B')
-               chunk.frombytes(data[p+5:p+5+num_bytes])
-               p += 22
-
-               if address > 0x4000:
-                       # the FX2 only has 16K RAM. other writes are to registers
-                       # in the 0xe000 region, skip those
-                       continue
-
-               blob[address:address+num_bytes] = chunk
-
-               if address + num_bytes > maxaddr:
-                       maxaddr = address + num_bytes
-
-       return blob[:maxaddr].tostring()
-
-
-def usage():
-       print("hantek-dso-extract.py <driverfile>")
-       sys.exit()
-
-
-#
-# main
-#
-
-if len(sys.argv) != 2:
-       usage()
-
-try:
-       filename = sys.argv[1]
-       binihx = parsepe.extract_symbol(filename, '_firmware')
-       if binihx is None:
-               raise Exception("no firmware found")
-       blob = unsparse(binihx)
-       outfile = 'hantek-dso-' + find_model(filename) + '.fw'
-       open(outfile, 'wb').write(blob)
-       print("saved %d bytes to %s" % (len(blob), outfile))
-except Exception as e:
-       print("Error: %s" % str(e))
-
-
-