--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LPCconnector/LPCBootProto.py Sun May 20 11:29:35 2012 +0200
@@ -0,0 +1,69 @@
+from LPCProto import *
+
+class LPCBootProto(LPCProto):
+ def HandleTransaction(self, transaction):
+ self.TransactionLock.acquire()
+ try:
+ transaction.SetPseudoFile(self.serialPort)
+ res = transaction.ExchangeData()
+ finally:
+ self.TransactionLock.release()
+ return "Stopped", res
+
+class LPCBootTransaction:
+ def __init__(self, optdata = ""):
+ self.OptData = optdata
+ self.pseudofile = None
+
+ def SetPseudoFile(self, pseudofile):
+ self.pseudofile = pseudofile
+
+ def ExchangeData(self):
+ self.pseudofile.write(self.OptData)
+ return map(lambda x:self.pseudofile.readline(), xrange(self.expectedlines))
+
+class KEEPBOOTINGTransaction(LPCBootTransaction):
+ def __init__(self):
+ self.expectedlines = 2
+ LPCBootTransaction.__init__(self, "md5\n")
+
+class STARTTransaction(LPCBootTransaction):
+ def __init__(self):
+ self.expectedlines = 0
+ LPCBootTransaction.__init__(self, "go\n")
+
+class CHECKMD5Transaction(LPCBootTransaction):
+ def __init__(self, md5ref):
+ self.expectedlines = 5
+ LPCBootTransaction.__init__(self, md5ref+"md5\n")
+
+class LOADTransaction(LPCBootTransaction):
+ def __init__(self, data, PLCprint):
+ self.PLCprint = PLCprint
+ LPCBootTransaction.__init__(self, data)
+
+ def ExchangeData(self):
+ #file("fw.bin","w").write(self.OptData)
+ data = self.OptData
+ loptdata = len(self.OptData)
+ count=0
+ #self.PLCprint("%dkB:" % (loptdata/1024))
+ while len(data)>0:
+ res = self.pseudofile.write(data[:loptdata/100])
+ data = data[res:]
+ count += 1
+ if count % 10 == 0 :
+ self.PLCprint("%d%%" % count)
+ else :
+ self.PLCprint(".")
+ self.PLCprint("\n")
+ return True
+
+if __name__ == "__main__":
+ __builtins__.BMZ_DBG = True
+ TestConnection = LPCBootProto(2,115200,1200)
+ mystr=file("fw.bin").read()
+ def mylog(blah):
+ print blah,
+
+ TestConnection.HandleTransaction(LOADTransaction(mystr, mylog))