--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LPCtarget/__init__.py Sun May 20 11:29:35 2012 +0200
@@ -0,0 +1,74 @@
+import os
+from subprocess import Popen,PIPE
+from targets.toolchain_makefile import toolchain_makefile
+import hashlib
+
+class LPC_target(toolchain_makefile):
+ #extension = ".ld"
+ #DebugEnabled = False
+ def __init__(self, CTRInstance):
+ self.binmd5key = None
+ toolchain_makefile.__init__(self, CTRInstance)
+
+ def _GetBinMD5FileName(self):
+ return os.path.join(self.buildpath, "lastbuildPLCbin.md5")
+
+ def _get_md5_header(self):
+ """Returns signature header"""
+ size = int(Popen(
+ ['arm-elf-size','-B',os.path.join(self.buildpath,"ArmPLC_rom.elf")],
+ stdout=PIPE).communicate()[0].splitlines()[1].split()[0])
+ res = "&" + hashlib.md5(open(os.path.join(self.buildpath, "ArmPLC_rom.bin"), "rb").read(size)).hexdigest() + '\n' +\
+ "$" + str(size) + '\n'
+ return res
+
+ def GetBinaryCode(self):
+ """Returns ready to send signed + sized intel formated hex program"""
+ try:
+ res = self._get_md5_header() +\
+ open(os.path.join(self.buildpath, "ArmPLC_rom.hex"), "r").read()
+ return res
+ except Exception, e:
+ return None
+
+ def _get_cached_md5_header(self):
+ if self.binmd5key is not None:
+ return self.binmd5key
+ else:
+ try:
+ return open(self._GetBinMD5FileName(), "r").read()
+ except IOError, e:
+ return None
+
+ def ResetBinaryCodeMD5(self, mode):
+ if mode == "BOOTLOADER":
+ self.binmd5key = None
+ try:
+ os.remove(self._GetBinMD5FileName())
+ except Exception, e:
+ pass
+ else:
+ return toolchain_makefile.ResetBinaryCodeMD5(self)
+
+ def GetBinaryCodeMD5(self, mode):
+ if mode == "BOOTLOADER":
+ return self._get_cached_md5_header()
+ else:
+ return toolchain_makefile.GetBinaryCodeMD5(self)
+
+ def build(self):
+ res = toolchain_makefile.build(self)
+ if res:
+ self.binmd5key = self._get_md5_header()
+ f = open(self._GetBinMD5FileName(), "w")
+ f.write(self.binmd5key)
+ f.close()
+ try:
+ self.CTRInstance.logger.write(
+ _("Binary is %s bytes long\n")%
+ str(os.path.getsize(
+ os.path.join(self.buildpath, "ArmPLC_rom.bin"))))
+ except Exception, e:
+ pass
+ return res
+