mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-08 07:27:29 -06:00
Add a retry when probing for printers on discovered ports. This is to accomodate for printers that needs a few seconds to initialize before they open the port.
This commit is contained in:
parent
b3f0292ce6
commit
5214ef3bde
1 changed files with 32 additions and 29 deletions
|
@ -22,6 +22,7 @@ class AutoDetectBaudJob(Job):
|
||||||
def run(self):
|
def run(self):
|
||||||
Logger.log("d", "Auto detect baud rate started.")
|
Logger.log("d", "Auto detect baud rate started.")
|
||||||
timeout = 3
|
timeout = 3
|
||||||
|
tries = 2
|
||||||
|
|
||||||
programmer = Stk500v2()
|
programmer = Stk500v2()
|
||||||
serial = None
|
serial = None
|
||||||
|
@ -31,36 +32,38 @@ class AutoDetectBaudJob(Job):
|
||||||
except:
|
except:
|
||||||
programmer.close()
|
programmer.close()
|
||||||
|
|
||||||
for baud_rate in self._all_baud_rates:
|
for retry in range(tries):
|
||||||
Logger.log("d", "Checking {serial} if baud rate {baud_rate} works".format(serial= self._serial_port, baud_rate = baud_rate))
|
for baud_rate in self._all_baud_rates:
|
||||||
|
Logger.log("d", "Checking {serial} if baud rate {baud_rate} works".format(serial= self._serial_port, baud_rate = baud_rate))
|
||||||
|
|
||||||
if serial is None:
|
if serial is None:
|
||||||
try:
|
try:
|
||||||
serial = Serial(str(self._serial_port), baud_rate, timeout = timeout, writeTimeout = timeout)
|
serial = Serial(str(self._serial_port), baud_rate, timeout = timeout, writeTimeout = timeout)
|
||||||
except SerialException as e:
|
except SerialException as e:
|
||||||
Logger.logException("w", "Unable to create serial")
|
Logger.logException("w", "Unable to create serial")
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
# We already have a serial connection, just change the baud rate.
|
# We already have a serial connection, just change the baud rate.
|
||||||
try:
|
try:
|
||||||
serial.baudrate = baud_rate
|
serial.baudrate = baud_rate
|
||||||
except:
|
except:
|
||||||
continue
|
continue
|
||||||
sleep(1.5) # Ensure that we are not talking to the boot loader. 1.5 seconds seems to be the magic number
|
sleep(1.5) # Ensure that we are not talking to the boot loader. 1.5 seconds seems to be the magic number
|
||||||
successful_responses = 0
|
successful_responses = 0
|
||||||
|
|
||||||
serial.write(b"\n") # Ensure we clear out previous responses
|
|
||||||
serial.write(b"M105\n")
|
|
||||||
|
|
||||||
timeout_time = time() + timeout
|
|
||||||
|
|
||||||
while timeout_time > time():
|
|
||||||
line = serial.readline()
|
|
||||||
if b"ok T:" in line:
|
|
||||||
successful_responses += 1
|
|
||||||
if successful_responses >= 3:
|
|
||||||
self.setResult(baud_rate)
|
|
||||||
return
|
|
||||||
|
|
||||||
|
serial.write(b"\n") # Ensure we clear out previous responses
|
||||||
serial.write(b"M105\n")
|
serial.write(b"M105\n")
|
||||||
|
|
||||||
|
timeout_time = time() + timeout
|
||||||
|
|
||||||
|
while timeout_time > time():
|
||||||
|
line = serial.readline()
|
||||||
|
if b"ok T:" in line:
|
||||||
|
successful_responses += 1
|
||||||
|
if successful_responses >= 3:
|
||||||
|
self.setResult(baud_rate)
|
||||||
|
return
|
||||||
|
|
||||||
|
serial.write(b"M105\n")
|
||||||
|
sleep(15) # Give the printer some time to init and try again.
|
||||||
self.setResult(None) # Unable to detect the correct baudrate.
|
self.setResult(None) # Unable to detect the correct baudrate.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue