conv_zip.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import binascii
  2. import os
  3. import sys
  4. import time
  5. import shutil
  6. LEN = 2**16
  7. huffman = False
  8. TARGET=os.getcwd()
  9. SOURCE=sys.argv[1]
  10. DEFLATE=os.path.basename(sys.argv[1]) + ".deflate"
  11. PATH="/Users/david/Devel/arch/avr/code/quickdev16/scripts"
  12. WINE="/Applications/Darwine/Wine.bundle/Contents/bin/wine"
  13. KZIP=os.path.join(PATH,"kzip.exe")
  14. DEFLOPT=os.path.join(PATH,"DeflOpt.exe")
  15. ZIP2RAW=os.path.join(PATH,"zip2raw.rb")
  16. if os.path.isfile("rom.zip"):
  17. os.unlink("rom.zip")
  18. os.system("%s %s rom /s1 %s" % (WINE,KZIP,SOURCE))
  19. os.system("%s %s /a rom.zip" % (WINE,DEFLOPT))
  20. os.system("ruby %s rom.zip" % ZIP2RAW)
  21. if os.path.isfile("rom.zip"):
  22. os.unlink("rom.zip")
  23. data = open(DEFLATE).read()
  24. os.unlink(DEFLATE)
  25. zip_size = len(data)
  26. cfile = open("/tmp/loader.c","w")
  27. hfile = open("/tmp/loader.h","w")
  28. parts = []
  29. cnt = len(data) / ((2**15) -1 )
  30. r = len(data) - (cnt * ((2**15) -1))
  31. for i in range(0, cnt):
  32. parts.append(((2**15) -1 ))
  33. parts.append(r)
  34. hfile.write('''/*
  35. File: %s
  36. Time: %s
  37. */
  38. #ifndef __FIFO_H__
  39. #define __FIFO_H__
  40. #define ROM_ZIP_SIZE %i
  41. #define ROM_BUFFER_CNT %i
  42. ''' % (os.path.basename(SOURCE),time.strftime("%a, %d %b %Y %H:%M:%S",
  43. time.localtime()),zip_size,len(parts)))
  44. for idx,val in enumerate(parts):
  45. hfile.write('#define ROM_BUFFER_SIZE%02i %i\n' % (idx+1,val))
  46. hfile.write('\n#endif\n')
  47. hfile.close()
  48. cfile.write('''/*
  49. File: %s
  50. Time: %s
  51. */
  52. #include <avr/pgmspace.h>
  53. #include <loader.h>
  54. ''')
  55. addr = 0
  56. for idx,val in enumerate(parts):
  57. cfile.write('''
  58. const char _rom%02i[ROM_BUFFER_SIZE%02i] PROGMEM = {
  59. ''' % (idx+1,idx+1))
  60. l = addr
  61. h = addr + parts[idx]
  62. addr+= parts[idx]
  63. for idx,c in enumerate(data[l:h]):
  64. c = ord(c)
  65. if idx<len(data)-1:
  66. cfile.write("0x%02x," % c)
  67. else:
  68. cfile.write("0x%02x" % c)
  69. if idx and idx%16==0:
  70. cfile.write("\n")
  71. cfile.write('''
  72. };
  73. ''')
  74. cfile.write('PGM_VOID_P _rom[ROM_BUFFER_CNT]= {')
  75. for idx,val in enumerate(parts):
  76. if idx<len(parts)-1:
  77. cfile.write('''&_rom%02i,''' % (idx+1))
  78. else:
  79. cfile.write('''&_rom%02i''' % (idx+1))
  80. cfile.write('''};
  81. ''')
  82. cfile.write('const int _rom_size[ROM_BUFFER_CNT] = {')
  83. for idx,val in enumerate(parts):
  84. if idx<len(parts)-1:
  85. cfile.write('''%i,''' % (val))
  86. else:
  87. cfile.write('''%i''' % (val))
  88. cfile.write('''};
  89. ''')
  90. cfile.close()
  91. shutil.copy("/tmp/loader.c", os.path.join(TARGET,"loader.c"))
  92. shutil.copy("/tmp/loader.h", os.path.join(TARGET,"loader.h"))
  93. print "wrote loader.c"
  94. print "wrote loader.h"