chiark / gitweb /
Update commandline programmer.
[cura.git] / Cura / avr_isp / stk500v2.py
index 82fb12f4b9181887a4612a58ee4f67af9ca9718d..8bacdab9f1d812a8ece2f73229af1b7b7b8eb068 100644 (file)
@@ -14,7 +14,7 @@ class Stk500v2(ispBase.IspBase):
                self.progressCallback = None
        
        def connect(self, port = 'COM22', speed = 115200):
-               if self.serial != None:
+               if self.serial is not None:
                        self.close()
                try:
                        self.serial = Serial(str(port), speed, timeout=1, writeTimeout=10000)
@@ -29,7 +29,7 @@ class Stk500v2(ispBase.IspBase):
                time.sleep(0.1)
                self.serial.setDTR(0)
                time.sleep(0.2)
-               
+
                self.sendMessage([1])
                if self.sendMessage([0x10, 0xc8, 0x64, 0x19, 0x20, 0x00, 0x53, 0x03, 0xac, 0x53, 0x00, 0x00]) != [0x10, 0x00]:
                        self.close()
@@ -37,7 +37,7 @@ class Stk500v2(ispBase.IspBase):
                self.serial.timeout = 5
 
        def close(self):
-               if self.serial != None:
+               if self.serial is not None:
                        self.serial.close()
                        self.serial = None
 
@@ -145,23 +145,39 @@ class Stk500v2(ispBase.IspBase):
                                else:
                                        return data
 
+def portList():
+       ret = []
+       import _winreg
+       key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
+       i=0
+       while True:
+               try:
+                       values = _winreg.EnumValue(key, i)
+               except:
+                       return ret
+               if 'USBSER' in values[0]:
+                       ret.append(values[1])
+               i+=1
+       return ret
 
-def main():
+def runProgrammer(port, filename):
        programmer = Stk500v2()
+       programmer.connect(port = port)
+       programmer.programChip(intelHex.readHex(filename))
+       programmer.close()
+
+def main():
+       import threading
        if sys.argv[1] == 'AUTO':
-               import _winreg
-               key=_winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,"HARDWARE\\DEVICEMAP\\SERIALCOMM")
-               i=0
-               while True:
-                       values = _winreg.EnumValue(key, i)
-                       if 'USBSER' in values[0]:
-                               programmer.connect(port = values[1])
-                               break
-                       i+=1
+               print portList()
+               for port in portList():
+                       threading.Thread(target=runProgrammer, args=(port,sys.argv[2])).start()
+                       time.sleep(5)
        else:
+               programmer = Stk500v2()
                programmer.connect(port = sys.argv[1])
-       programmer.programChip(intelHex.readHex(sys.argv[2]))
-       sys.exit(1)
+               programmer.programChip(intelHex.readHex(sys.argv[2]))
+               sys.exit(1)
 
 if __name__ == '__main__':
        main()