connectors/LPC/LPCBootProto.py
author Edouqrd Tisserant <edouard.tisserant@gmail.com>
Thu, 03 Feb 2011 18:20:47 +0100
changeset 569 37af7286dd65
parent 567 72b51ec5be64
child 571 427bf9130d12
permissions -rw-r--r--
LPC program transfer more verbose, test code added in __main__ of LPCBootProto
545
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     1
from LPCProto import *
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     2
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     3
class LPCBootProto(LPCProto):
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     4
    def HandleTransaction(self, transaction):
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     5
        self.TransactionLock.acquire()
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     6
        try:
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     7
            transaction.SetPseudoFile(self.serialPort)
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     8
            res = transaction.ExchangeData()
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
     9
        finally:
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    10
            self.TransactionLock.release()
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    11
        return "Stopped", res
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    12
    
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    13
class LPCBootTransaction:
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    14
    def __init__(self, optdata = ""):
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    15
        self.OptData = optdata
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    16
        self.pseudofile = None
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    17
        
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    18
    def SetPseudoFile(self, pseudofile):
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    19
        self.pseudofile = pseudofile
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    20
        
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    21
    def SendData(self):
548
1428fd553988 Some fixes in LPCApp{Obj,Proto}, to be continued.
Lolitech
parents: 545
diff changeset
    22
        res = self.pseudofile.write(self.OptData)
1428fd553988 Some fixes in LPCApp{Obj,Proto}, to be continued.
Lolitech
parents: 545
diff changeset
    23
        return True 
545
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    24
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    25
    def GetData(self):
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    26
        pass # not impl
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    27
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    28
    def ExchangeData(self): 
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    29
        pass
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    30
567
72b51ec5be64 keep LPC in boot mode to give a chance to ask for a transfer
edouard
parents: 548
diff changeset
    31
class KEEPBOOTINGTransaction(LPCBootTransaction):
72b51ec5be64 keep LPC in boot mode to give a chance to ask for a transfer
edouard
parents: 548
diff changeset
    32
    def __init__(self):
72b51ec5be64 keep LPC in boot mode to give a chance to ask for a transfer
edouard
parents: 548
diff changeset
    33
        LPCBootTransaction.__init__(self, "md5\n")
72b51ec5be64 keep LPC in boot mode to give a chance to ask for a transfer
edouard
parents: 548
diff changeset
    34
    ExchangeData = LPCBootTransaction.SendData
72b51ec5be64 keep LPC in boot mode to give a chance to ask for a transfer
edouard
parents: 548
diff changeset
    35
545
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    36
class LOADTransaction(LPCBootTransaction):
569
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    37
    def __init__(self, data, PLCprint):
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    38
        self.PLCprint = PLCprint
545
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    39
        LPCBootTransaction.__init__(self, data)
627e5c636a4f Refactored LPC connector for new bootloader and application modes
Lolitech
parents:
diff changeset
    40
569
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    41
    def sendDataHook(self):
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    42
        #file("fw.bin","w").write(self.OptData)
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    43
        data = self.OptData
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    44
        loptdata = len(self.OptData)
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    45
        count=0
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    46
        self.PLCprint("%dkB:" % (loptdata/1024))
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    47
        while len(data)>0:
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    48
            res = self.pseudofile.write(data[:loptdata/100])
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    49
            data = data[res:]
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    50
            count += 1
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    51
            if count % 10 == 0 :
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    52
                self.PLCprint("%d%%" % count)
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    53
            else :
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    54
                self.PLCprint(".")
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    55
        self.PLCprint("\n")
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    56
        return True
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    57
    ExchangeData = sendDataHook
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    58
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    59
if __name__ == "__main__":
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    60
    TestConnection = LPCBootProto(2,115200,1200)
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    61
    mystr=file("fw.bin").read()
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    62
    def mylog(blah):
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    63
        print blah,
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    64
37af7286dd65 LPC program transfer more verbose, test code added in __main__ of LPCBootProto
Edouqrd Tisserant <edouard.tisserant@gmail.com>
parents: 567
diff changeset
    65
    TestConnection.HandleTransaction(LOADTransaction(mystr, mylog))