LPCtarget/__init__.py
changeset 0 51f5a3138405
child 1 4f6d393cb36e
--- /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
+