Browse Source

Fix connections to devices not based on arduino

stk500v2 failed to release the serial port on timeout.
TheRikke 8 years ago
parent
commit
5ed32230f7
1 changed files with 12 additions and 9 deletions
  1. 12 9
      plugins/USBPrinting/avr_isp/stk500v2.py

+ 12 - 9
plugins/USBPrinting/avr_isp/stk500v2.py

@@ -43,17 +43,20 @@ class Stk500v2(ispBase.IspBase):
 
         self.serial.flushInput()
         self.serial.flushOutput()
-        if self.sendMessage([0x10, 0xc8, 0x64, 0x19, 0x20, 0x00, 0x53, 0x03, 0xac, 0x53, 0x00, 0x00]) != [0x10, 0x00]:
-            self.close()
-            raise ispBase.IspError("Failed to enter programming mode")
+        try:
+            if self.sendMessage([0x10, 0xc8, 0x64, 0x19, 0x20, 0x00, 0x53, 0x03, 0xac, 0x53, 0x00, 0x00]) != [0x10, 0x00]:
+                raise ispBase.IspError("Failed to enter programming mode")
 
-        self.sendMessage([0x06, 0x80, 0x00, 0x00, 0x00])
-        if self.sendMessage([0xEE])[1] == 0x00:
-            self._has_checksum = True
-        else:
-            self._has_checksum = False
+            self.sendMessage([0x06, 0x80, 0x00, 0x00, 0x00])
+            if self.sendMessage([0xEE])[1] == 0x00:
+                self._has_checksum = True
+            else:
+                self._has_checksum = False
+        except ispBase.IspError:
+            self.close()
+            raise
         self.serial.timeout = 5
-
+ 
     def close(self):
         if self.serial is not None:
             self.serial.close()