import binascii import os import sys import time import shutil LEN = 2**16 huffman = False TARGET=os.getcwd() SOURCE=sys.argv[1] HUFFMAN_ENCODER="/Users/david/Devel/arch/avr/code/quickdev16/packages/huffman/huffman-encode" data = open(SOURCE,"r").read() print "Load %s, %i bytes" % (SOURCE,len(data)) data = data[:LEN] print "Use %i bytes" % (len(data)) data = binascii.rlecode_hqx(data) print "RLE crunch (%i) bytes" % (len(data)) rle_size = len(data) huffman_size = 0 if huffman == True: binfile = open("/tmp/loader.rle","w") binfile.write(data) binfile.close() cmd = "%s /tmp/loader.rle" % HUFFMAN_ENCODER print cmd os.system(cmd) data = open("/tmp/loader.rle.hfm","r").read() print "HUFFMAN crunch (%i) bytes" % (len(data)) huffman_size = len(data) os.unlink("/tmp/loader.rle") os.unlink("/tmp/loader.rle.hfm") cfile = open("/tmp/loader.c","w") hfile = open("/tmp/loader.h","w") parts = [] cnt = len(data) / ((2**15) -1 ) r = len(data) - (cnt * ((2**15) -1)) for i in range(0, cnt): parts.append(((2**15) -1 )) parts.append(r) hfile.write('''/* File: %s Time: %s */ #ifndef __FIFO_H__ #define __FIFO_H__ #define ROM_HUFFMAN_SIZE %i #define ROM_RLE_SIZE %i #define ROM_BUFFER_CNT %i ''' % (os.path.basename(SOURCE),time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()), huffman_size, rle_size,len(parts))) for idx,val in enumerate(parts): hfile.write('#define ROM_BUFFER_SIZE%02i %i\n' % (idx+1,val)) hfile.write('\n#endif\n') hfile.close() cfile.write('''/* File: %s Time: %s */ #include #include ''') addr = 0 for idx,val in enumerate(parts): cfile.write(''' const char _rom%02i[ROM_BUFFER_SIZE%02i] PROGMEM = { ''' % (idx+1,idx+1)) l = addr h = addr + parts[idx] addr+= parts[idx] for idx,c in enumerate(data[l:h]): c = ord(c) if idx