summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjal2 <jal2>2003-03-30 11:10:52 +0000
committerjal2 <jal2>2003-03-30 11:10:52 +0000
commit50a72671eda2258d91c51a2d321b752e329cf90c (patch)
tree3e7d9f2b351473af95395728a40a6b4dd89068fe
parenta4d284397a69767c96a24916f7ea531d39f65611 (diff)
a tool to convert binary firmware files (e.g. from Windows drivers) into C header files extracting the version info
-rwxr-xr-xscripts/fwbin2h96
1 files changed, 96 insertions, 0 deletions
diff --git a/scripts/fwbin2h b/scripts/fwbin2h
new file mode 100755
index 0000000..84d7ffe
--- /dev/null
+++ b/scripts/fwbin2h
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+#
+# $Id: fwbin2h,v 1.1 2003/03/30 11:10:52 jal2 Exp $
+#
+# file: fwbin2h
+#
+# This file converts binary firmware files (e.g. extracted
+# from Windows drivers) into a C header file.
+#
+# invocation:
+# fwbin2h <internal fw> <external fw> <radio chipset>
+#
+# which expects the internal and external firmware part in the
+# two files <internal fw> <external fw>.
+# please use: <radio chipset> ::= 503rfmd | i3861 | i3863 | 505rfmd
+# output will be into the file: fw_<radio chipset>_<version>.h
+# where the version is extracted from the internal fw part.
+
+### imports
+import sys
+import string
+import os
+import re
+
+debug = 1
+known_radios = ["503rfmd","i3861","i3863","505rfmd"]
+### main ###
+if __name__ == '__main__':
+ if len(sys.argv) != 4:
+ sys.stderr.write("call: %s <internal fw> <external fw> <radio name>\n" %
+ sys.argv[0])
+ sys.exit(1)
+
+ radio = sys.argv[3]
+ if not (radio in known_radios):
+ sys.stderr.write("#WRG unknown radio name %s (not in %s)\n" %
+ (radio,known_radios))
+
+ f = open(sys.argv[1])
+ internal_image = f.read()
+ f.close()
+ f = open(sys.argv[2])
+ external_image = f.read()
+ f.close()
+ pos = string.find(internal_image,"ATMEL_AP")
+ if pos >= 0:
+ major = ord(internal_image[pos+0x34])
+ minor = ord(internal_image[pos+0x35])
+ sub = ord(internal_image[pos+0x36])
+ build = ord(internal_image[pos+0x37])
+ version = "%d.%d.%d-%d" % (major,minor,sub,build)
+ else:
+ version = "unknown"
+ if debug: print "#DBG got version " + version
+
+ # write the output file
+ outname = "fw-" + radio + "-" + version + ".h"
+ f = open(outname,"w")
+ f.write("""
+/*
+The following firmware has been extracted from the binary files
+%s and %s (all licenses of these files remain valid for this one)
+
+Target: AT76C503 with %s radio
+Version: %s
+*/
+""" % (sys.argv[1], sys.argv[2], radio, version))
+
+ f.write("#define FW_%s_INTERNAL { \\\n" % string.upper(radio))
+ i=0
+ for b in internal_image:
+ f.write("0x%02X," % ord(b))
+ i = i + 1
+ if i % 16 == 0:
+ f.write(" \\\n")
+ f.write("}\n\n");
+
+ f.write("#define FW_%s_EXTERNAL { \\\n" % string.upper(radio))
+ i=0
+ for b in external_image:
+ f.write("0x%02X," % ord(b))
+ i = i + 1
+ if i % 16 == 0:
+ f.write(" \\\n")
+ f.write("}\n\n");
+
+ f.close()
+
+
+
+
+
+
+
+
+