edouard@571: import os edouard@571: from subprocess import Popen,PIPE Edouard@648: from ..toolchain_makefile import toolchain_makefile edouard@571: import hashlib edouard@571: edouard@571: class LPC_target(toolchain_makefile): edouard@571: #extension = ".ld" edouard@571: #DebugEnabled = False Edouard@725: def __init__(self, CTRInstance): edouard@571: self.binmd5key = None Edouard@725: toolchain_makefile.__init__(self, CTRInstance) edouard@571: edouard@571: def _GetBinMD5FileName(self): edouard@571: return os.path.join(self.buildpath, "lastbuildPLCbin.md5") edouard@571: edouard@571: def _get_md5_header(self): edouard@571: """Returns signature header""" edouard@571: size = int(Popen( edouard@571: ['arm-elf-size','-B',os.path.join(self.buildpath,"ArmPLC_rom.elf")], edouard@571: stdout=PIPE).communicate()[0].splitlines()[1].split()[0]) edouard@571: res = "&" + hashlib.md5(open(os.path.join(self.buildpath, "ArmPLC_rom.bin"), "rb").read(size)).hexdigest() + '\n' +\ edouard@571: "$" + str(size) + '\n' edouard@571: return res edouard@571: edouard@571: def GetBinaryCode(self): edouard@571: """Returns ready to send signed + sized intel formated hex program""" edouard@571: try: edouard@571: res = self._get_md5_header() +\ edouard@571: open(os.path.join(self.buildpath, "ArmPLC_rom.hex"), "r").read() edouard@571: return res edouard@571: except Exception, e: edouard@571: return None edouard@571: edouard@571: def _get_cached_md5_header(self): edouard@571: if self.binmd5key is not None: edouard@571: return self.binmd5key edouard@571: else: edouard@571: try: Edouard@600: return open(self._GetBinMD5FileName(), "r").read() edouard@571: except IOError, e: edouard@571: return None edouard@571: smarteh-dev@691: def ResetBinaryCodeMD5(self, mode): smarteh-dev@691: if mode == "BOOTLOADER": smarteh-dev@691: self.binmd5key = None smarteh-dev@691: try: smarteh-dev@691: os.remove(self._GetBinMD5FileName()) smarteh-dev@691: except Exception, e: smarteh-dev@691: pass smarteh-dev@691: else: smarteh-dev@691: return toolchain_makefile.ResetBinaryCodeMD5(self) smarteh-dev@691: edouard@571: def GetBinaryCodeMD5(self, mode): edouard@571: if mode == "BOOTLOADER": edouard@571: return self._get_cached_md5_header() edouard@571: else: edouard@571: return toolchain_makefile.GetBinaryCodeMD5(self) edouard@571: edouard@571: def build(self): edouard@571: res = toolchain_makefile.build(self) smarteh-dev@691: if res: smarteh-dev@691: self.binmd5key = self._get_md5_header() smarteh-dev@691: f = open(self._GetBinMD5FileName(), "w") smarteh-dev@691: f.write(self.binmd5key) smarteh-dev@691: f.close() smarteh-dev@691: try: Edouard@725: self.CTRInstance.logger.write( smarteh-dev@691: _("Binary is %s bytes long\n")% smarteh-dev@691: str(os.path.getsize( smarteh-dev@691: os.path.join(self.buildpath, "ArmPLC_rom.bin")))) smarteh-dev@691: except Exception, e: smarteh-dev@691: pass edouard@571: return res edouard@571: