chiark / gitweb /
Merge pull request #706 from hg42/fix-most-communication-problems
authordaid <daid303@gmail.com>
Sat, 18 Jan 2014 08:25:36 +0000 (00:25 -0800)
committerdaid <daid303@gmail.com>
Sat, 18 Jan 2014 08:25:36 +0000 (00:25 -0800)
Fix most communication problems (#698 without waiting for "start")

Cura/cura.py
Cura/util/machineCom.py

index c631a02ff3255bb598daab70bd3574c12ad190ce..dadb223848869343b959b07dfc3a82c3cc11b237 100644 (file)
@@ -28,7 +28,9 @@ def main():
 
        (options, args) = parser.parse_args()
 
+       print "load preferences from " + profile.getPreferencePath()
        profile.loadPreferences(profile.getPreferencePath())
+
        if options.profile is not None:
                profile.setProfileFromString(options.profile)
        elif options.profileini is not None:
index 8e14aac35c5ce3e6754bbda01e2d113a7a9dfad4..7ac9333cf71f1738a35f58189dbbce48c4c47829 100644 (file)
@@ -231,9 +231,9 @@ class MachineCom(object):
                return "?%d?" % (self._state)
        
        def getShortErrorString(self):
-               if len(self._errorValue) < 20:
+               if len(self._errorValue) < 30:
                        return self._errorValue
-               return self._errorValue[:20] + "..."
+               return self._errorValue[:30] + "..."
 
        def getErrorString(self):
                return self._errorValue
@@ -285,11 +285,10 @@ class MachineCom(object):
                #Open the serial port.
                if self._port == 'AUTO':
                        self._changeState(self.STATE_DETECT_SERIAL)
-                       self._log("Serial port list: %s" % (str(serialList(True))))
                        programmer = stk500v2.Stk500v2()
                        for p in serialList(True):
                                try:
-                                       self._log("Connecting to: %s" % (p))
+                                       self._log("Connecting to: %s (programmer)" % (p))
                                        programmer.connect(p)
                                        self._serial = programmer.leaveISP()
                                        profile.putMachineSetting('serial_port_auto', p)
@@ -301,6 +300,7 @@ class MachineCom(object):
                                        self._log("Unexpected error while connecting to serial port: %s %s" % (p, getExceptionString()))
                                programmer.close()
                        if self._serial is None:
+                               self._log("Serial port list: %s" % (str(serialList(True))))
                                self._serialDetectList = serialList(True)
                elif self._port == 'VIRTUAL':
                        self._changeState(self.STATE_OPEN_SERIAL)
@@ -308,10 +308,11 @@ class MachineCom(object):
                else:
                        self._changeState(self.STATE_OPEN_SERIAL)
                        try:
-                               self._log("Connecting to: %s" % (self._port))
                                if self._baudrate == 0:
+                                       self._log("Connecting to: %s with baudrate: 115200 (fallback)" % (self._port))
                                        self._serial = serial.Serial(str(self._port), 115200, timeout=0.1, writeTimeout=10000)
                                else:
+                                       self._log("Connecting to: %s with baudrate: %s (configured)" % (self._port, self._baudrate))
                                        self._serial = serial.Serial(str(self._port), self._baudrate, timeout=2, writeTimeout=10000)
                        except:
                                self._log("Unexpected error while connecting to serial port: %s %s" % (self._port, getExceptionString()))
@@ -319,13 +320,19 @@ class MachineCom(object):
                        baudrate = self._baudrate
                        if baudrate == 0:
                                baudrate = self._baudrateDetectList.pop(0)
-                       self._serial = serial.Serial(self._serialDetectList.pop(0), baudrate, timeout=0.1, writeTimeout=10000)
+                       port = self._serialDetectList.pop(0)
+                       self._log("Connecting to: %s with baudrate: %s (auto)" % (port, baudrate))
+                       try:
+                               self._serial = serial.Serial(port, baudrate, timeout=0.1, writeTimeout=10000)
+                       except:
+                               pass
                else:
                        self._log("Connected to: %s, starting monitor" % (self._serial))
                        if self._baudrate == 0:
                                self._changeState(self.STATE_DETECT_BAUDRATE)
                        else:
                                self._changeState(self.STATE_CONNECTING)
+
                #Start monitoring the serial port.
                if self._state == self.STATE_CONNECTING:
                        timeout = time.time() + 15
@@ -433,22 +440,22 @@ class MachineCom(object):
                                if line == '':
                                        if self._extruderCount > 0:
                                                self._temperatureRequestExtruder = (self._temperatureRequestExtruder + 1) % self._extruderCount
-                                               self._sendCommand("M105 T%d" % (self._temperatureRequestExtruder))
+                                               self.sendCommand("M105 T%d" % (self._temperatureRequestExtruder))
                                        else:
-                                               self._sendCommand("M105")
+                                               self.sendCommand("M105")
                                        tempRequestTimeout = time.time() + 5
                        elif self._state == self.STATE_PRINTING:
-                               if line == '' and time.time() > timeout:
-                                       self._log("Communication timeout during printing, forcing a line")
-                                       line = 'ok'
                                #Even when printing request the temperature every 5 seconds.
                                if time.time() > tempRequestTimeout:
                                        if self._extruderCount > 0:
                                                self._temperatureRequestExtruder = (self._temperatureRequestExtruder + 1) % self._extruderCount
-                                               self._sendCommand("M105 T%d" % (self._temperatureRequestExtruder))
+                                               self.sendCommand("M105 T%d" % (self._temperatureRequestExtruder))
                                        else:
-                                               self._sendCommand("M105")
+                                               self.sendCommand("M105")
                                        tempRequestTimeout = time.time() + 5
+                               if line == '' and time.time() > timeout:
+                                       self._log("Communication timeout during printing, forcing a line")
+                                       line = 'ok'
                                if 'ok' in line:
                                        timeout = time.time() + 5
                                        if not self._commandQueue.empty():