boop/betty_scart/trunk/boop_icp.py
2017-07-01 21:56:25 +02:00

86 lines
2.2 KiB
Python

#!/usr/bin/env python
# based on http://blog.theroyweb.com/embedding-a-binary-file-as-an-array-in-firmware
# Convert binary file to a hex encoded array for inclusion in C projects
import os
import sys
import struct
class BinToArray:
def __init__(self):
pass
def ConvertFileToArray(self, strInFile, strOutFile, ignoreBytes):
""" Reads binary file at location strInFile and writes out a C array of hex values
Parameters -
strInFile - Path and filename of binary file to convert
strOutFile - Path and filename of output. Suggested extension is .c or .cpp
ignoreBytes - Number of bytes to ignore at the beginning of binary file. Helps
strip out file headers and only encode the payload/data.
"""
strVarType = "const unsigned char"
strVarName = "scart_image"
strValSpace = ""
ValsPerLine = 15
ValCount = 0
ValsTotal = 0x1C00 #7168
# Open input file
try:
fileIn = open(strInFile, 'rb')
except IOError, err:
logging.debug("Could not open input file %s" % (strInFile))
return
# end try
# Open output file
try:
fileOut = open(strOutFile, 'w')
except IOError, err:
logging.debug("Could not open output file %s" % (strOutFile))
return
# end try
# Start array definition preamble
inFileName = os.path.basename(strInFile)
fileOut.write("// Array representation of binary file %s\n\n\n" % (inFileName))
fileOut.write("%s %s[] = \n{\n" % (strVarType, strVarName) )
# Convert and write array into C file
# ignore header
fileIn.seek(ignoreBytes)
# output hex bytes linewise
while True:
if ValCount + ValsPerLine > ValsTotal:
ValsPerLine = ValsTotal - ValCount
if ValsPerLine == 0:
break
ValCount += ValsPerLine
# read data
bufChunk = fileIn.read(ValsPerLine)
# write line of hex bytes
fileOut.write("\t")
for byteVal in bufChunk:
fileOut.write("0x%02x,%s" % (ord(byteVal), strValSpace))
fileOut.write("\n")
# Close files
fileIn.close()
fileOut.write("};\n")
fileOut.close()
sys.stderr.write("Converted %d values.\n\n" % (ValCount))
if __name__ == "__main__":
converter = BinToArray()
converter.ConvertFileToArray("betty_scart.bin", "../../boop/trunk/tools/scart_image_data.h", 0, )