chiark / gitweb /
Untested update to machine communication. This should improve auto detection as it...
authordaid <daid303@gmail.com>
Wed, 5 Sep 2012 14:10:47 +0000 (16:10 +0200)
committerdaid <daid303@gmail.com>
Wed, 5 Sep 2012 14:10:47 +0000 (16:10 +0200)
Cura/avr_isp/stk500v2.py
Cura/gui/preview3d.py
Cura/util/machineCom.py

index 3945fb9d6646bd47d68b55b3ed5e9b032b7f6406..bfdcb4e48f0a31673662bdb7e4401c90dab0f4c3 100644 (file)
@@ -37,6 +37,17 @@ class Stk500v2(ispBase.IspBase):
                if self.serial != None:\r
                        self.serial.close()\r
                        self.serial = None\r
+\r
+       #Leave ISP does not reset the serial port, only resets the device, and returns the serial port after disconnecting it from the programming interface.\r
+       #       This allows you to use the serial port without opening it again.\r
+       def leaveISP(self):\r
+               if self.serial != None:\r
+                       if self.sendMessage([0x11]) != [0x11, 0x00]:\r
+                               raise ispBase.IspError("Failed to leave programming mode")\r
+                       ret = self.serial\r
+                       self.serial = None\r
+                       return ret\r
+               return None\r
        \r
        def isConnected(self):\r
                return self.serial != None\r
index f1149ea02219d39941fcb321ae85822a9c99faee..ec6dce20b2679d7a1c309ce78e8319868603f52a 100644 (file)
@@ -615,7 +615,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                glLightfv(GL_LIGHT0, GL_AMBIENT, map(lambda x: x / 5, self.objColor[self.parent.objectList.index(obj)]))\r
                                glEnable(GL_LIGHTING)\r
                                self.drawModel(obj)\r
-                       \r
+\r
                        if self.drawBorders and (self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray"):\r
                                glEnable(GL_DEPTH_TEST)\r
                                glDisable(GL_LIGHTING)\r
index 087b4eb3d660d683a97cfbc14b70b313fee2aa60..fa3cefa6d2c8a901a37de573a9ee167f8921675c 100644 (file)
@@ -85,7 +85,8 @@ class VirtualPrinter():
                self.readList = None
 
 class MachineCom():
-       def __init__(self, port = None, baudrate = None):
+       def __init__(self, port = None, baudrate = None, logCallback = None):
+               self._logCallback = logCallback
                if port == None:
                        port = profile.getPreference('serial_port')
                if baudrate == None:
@@ -93,86 +94,94 @@ class MachineCom():
                                baudrate = 0
                        else:
                                baudrate = int(profile.getPreference('serial_baud'))
-               self.serial = None
+               self._serial = None
                if port == 'AUTO':
                        programmer = stk500v2.Stk500v2()
+                       self._log("Serial port list: %s" % (str(serialList())))
                        for port in serialList():
                                try:
-                                       print "Connecting to: %s" % (port)
+                                       self._log("Connecting to: %s" % (port))
                                        programmer.connect(port)
-                                       programmer.close()
-                                       time.sleep(1)
-                                       self.serial = self._openPortWithBaudrate(port, baudrate)
+                                       self._serial = programmer.leaveISP()
+                                       self._configureSerialWithBaudrate(baudrate)
                                        break
                                except ispBase.IspError as (e):
-                                       print "Error while connecting to %s" % (port)
-                                       print e
+                                       self._log("Error while connecting to %s: %s" % (port, str(e)))
                                        pass
                                except:
-                                       print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
+                                       self._log("Unexpected error while connecting to serial port: %s %s" % (port, sys.exc_info()[0]))
                        programmer.close()
                elif port == 'VIRTUAL':
-                       self.serial = VirtualPrinter()
+                       self._serial = VirtualPrinter()
                else:
                        try:
-                               self.serial = self._openPortWithBaudrate(port, baudrate)
+                               self._serial = Serial(port, 115200, timeout=2)
+                               self._configureSerialWithBaudrate(baudrate)
                        except:
-                               print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
-               print self.serial
+                               self._log("Unexpected error while connecting to serial port: %s %s" % (port, sys.exc_info()[0]))
+               print self._serial
        
        def _openPortWithBaudrate(self, port, baudrate):
                if baudrate != 0:
-                       return Serial(port, baudrate, timeout=2)
+                       self._serial.baudrate = baudrate
+                       return
                for baudrate in baudrateList():
                        try:
-                               ser = Serial(port, baudrate, timeout=2)
+                               self._serial.baudrate = baudrate
                        except:
-                               print "Unexpected error while connecting to serial port:" + port, sys.exc_info()[0]
+                               self._log("Unexpected error while setting baudrate: %d %s" % (baudrate, sys.exc_info()[0]))
                                continue
-                       ser.setDTR(1)
-                       time.sleep(0.1)
-                       ser.setDTR(0)
-                       time.sleep(0.2)
+                       time.sleep(0.5)
                        starttime = time.time()
+                       self.sendCommand("\nM105")
                        for line in ser:
                                if 'start' in line:
-                                       ser.close()
-                                       ser = Serial(port, baudrate, timeout=2)
-                                       ser.setDTR(1)
-                                       time.sleep(0.1)
-                                       ser.setDTR(0)
-                                       time.sleep(0.2)
-                                       return ser
+                                       return
+                               if 'ok' in line:
+                                       return
                                if starttime - time.time() > 10:
                                        break
-                       ser.close()
+               self._serial.close()
                return None
+       
+       def _log(self, message):
+               if self._logCallback != None:
+                       self._logCallback(message)
+               else:
+                       print(message)
 
        def readline(self):
-               if self.serial == None:
+               if self._serial == None:
                        return None
                try:
-                       ret = self.serial.readline()
+                       ret = self._serial.readline()
                except:
-                       print "Unexpected error while reading serial port:", sys.exc_info()[0]
-                       ret = ''
-               #if ret != '':
-               #       print "Recv: " + ret.rstrip()
+                       self._log("Unexpected error while reading serial port: %s" % (sys.exc_info()[0]))
+                       return ''
+               if ret != '':
+                       self._log("Recv: %s" (ret.rstrip()))
+               else:
+                       self._log("Recv: NONE")
                return ret
        
        def close(self):
-               if self.serial != None:
-                       self.serial.close()
-               self.serial = None
+               if self._serial != None:
+                       self._serial.close()
+               self._serial = None
        
        def __del__(self):
                self.close()
        
        def isOpen(self):
-               return self.serial != None
+               return self._serial != None
        
        def sendCommand(self, cmd):
-               if self.serial == None:
+               if self._serial == None:
                        return
-               #print 'Send: ' + cmd
-               self.serial.write(cmd + '\n')
+               self._log('Send: %s' % (cmd))
+               try:
+                       self._serial.write(cmd)
+                       self._serial.write('\n')
+               except:
+                       self._log("Unexpected error while writing serial port: %s" % (sys.exc_info()[0]))
+