make install && README
[pyfrprog.git] / frprog.py
index 03a441dedf9627e76cfb69698fdac765b8a528e8..73b5ae6826a2db81b2605483e876f17e8807409e 100755 (executable)
--- a/frprog.py
+++ b/frprog.py
@@ -35,7 +35,7 @@ def recvChecksum():
        last_checksum = recvByte()
        last_checksum |= (recvByte() << 8)
 
-def cmdREAD(address, size):
+def bootromREAD(address, size):
        # send READ command
        sendByte(0x01)
        if (recvByte() != 0xF1):
@@ -54,7 +54,7 @@ def cmdREAD(address, size):
        recvChecksum()
        return data
 
-def cmdWRITE(address, size, data):
+def bootromWRITE(address, size, data):
        # send WRITE command
        sendByte(0x01)
        if (recvByte() != 0xF1):
@@ -72,7 +72,7 @@ def cmdWRITE(address, size, data):
        recvChecksum()
 
 # TODO: test this function!
-def cmdCALL(address):
+def bootromCALL(address):
        # send CALL command
        sendByte(0x01)
        if (recvByte() != 0xF1):
@@ -86,7 +86,7 @@ def cmdCALL(address):
        #return recvByte()
 
 # TODO: test this function!
-def cmdCHECKSUM():
+def bootromCHECKSUM():
        # call CHECKSUM command
        sendByte(0x01)
        if (recvByte() != 0xF1):
@@ -97,7 +97,7 @@ def cmdCHECKSUM():
        # get checksum
        recvChecksum()
 
-def cmdBAUDRATE(baudrate):
+def bootromBAUDRATE(baudrate):
        # send BAUDRATE command
        sendByte(0x01)
        if (recvByte() != 0xF1):
@@ -183,14 +183,17 @@ def readMHXFile(filename): # desired mhx filename
 
 
 # check command line arguments
-if len(sys.argv) != 3:
-       print "Usage: " + sys.argv[0] + " [pkernel mhx-file] [target mhx-file]"
+if len(sys.argv) != 2:
+       print "Usage: " + sys.argv[0] + " [target mhx-file]"
        sys.exit(1)
 
 # read in data from mhx-files before starting
 try:
-       bootloaderseqs = readMHXFile(sys.argv[1])
-       pkernelseqs = readMHXFile(sys.argv[2])
+       try:
+               bootloaderseqs = readMHXFile("pkernel/pkernel.mhx")
+       except IOError as error1:
+               bootloaderseqs = readMHXFile("%PREFIX%/share/frprog/pkernel.mhx")
+       pkernelseqs = readMHXFile(sys.argv[1])
 except IOError as error:
        print sys.argv[0] + ": Error - couldn't open file " + error.filename + "!"
        sys.exit(1)
@@ -210,9 +213,11 @@ while True:
                # timeout happened, who cares ;-)
                pass
 
+starttime = time.time() # save time at this point for evaluating the duration at the end
+
 print "OK, trying to set baudrate..."
 # set baudrate
-cmdBAUDRATE(BOOTLOADER_BAUDRATE)
+bootromBAUDRATE(BOOTLOADER_BAUDRATE)
 time.sleep(0.1) # just to get sure that the bootloader is really running in new baudrate mode!
 del tty
 tty = SerialPort(DEVICE, 100, BOOTLOADER_BAUDRATE)
@@ -225,22 +230,20 @@ for seq in bootloaderseqs:
        else:
                continue
        #print "RAMing", len(seq.data), "bytes at address", hex(addr)
-       cmdWRITE(addr, len(seq.data), seq.data)
+       bootromWRITE(addr, len(seq.data), seq.data)
        tty.flush()
        sys.stdout.write(".")
        sys.stdout.flush()
 print
 
 # execute our pkernel finally and set pkernel conform baudrate
-cmdCALL(0x30000)
-time.sleep(0.5) # just to get sure that the pkernel is really running!
+bootromCALL(0x30000)
+time.sleep(0.1) # just to get sure that the pkernel is really running!
 del tty
-pkernelmode = True
 tty = SerialPort(DEVICE, None, KERNEL_BAUDRATE)
 
 print "Performing ChipErase..."
 pkernCHIPERASE()
-print "Chip erasing done."
 
 print "Flashing",
 for seq in pkernelseqs:
@@ -254,7 +257,9 @@ for seq in pkernelseqs:
        sys.stdout.write(".")
        sys.stdout.flush()
 print
-print "Flashing done."
+
+duration = time.time() - starttime
+print "Procedure complete, took", round(duration, 2), "seconds."
 
 sendByte(0x97) # exit and restart
 print "Program was started. Have fun!"