Untested update to machine communication. This should improve auto detection as it no longer cycles trough a lot of resets. However, this will break the configuration wizard which will need an update.
parent
e7dc86ed7c
commit
06fcf0dd07
|
@ -37,6 +37,17 @@ class Stk500v2(ispBase.IspBase):
|
||||||
if self.serial != None:
|
if self.serial != None:
|
||||||
self.serial.close()
|
self.serial.close()
|
||||||
self.serial = None
|
self.serial = None
|
||||||
|
|
||||||
|
#Leave ISP does not reset the serial port, only resets the device, and returns the serial port after disconnecting it from the programming interface.
|
||||||
|
# This allows you to use the serial port without opening it again.
|
||||||
|
def leaveISP(self):
|
||||||
|
if self.serial != None:
|
||||||
|
if self.sendMessage([0x11]) != [0x11, 0x00]:
|
||||||
|
raise ispBase.IspError("Failed to leave programming mode")
|
||||||
|
ret = self.serial
|
||||||
|
self.serial = None
|
||||||
|
return ret
|
||||||
|
return None
|
||||||
|
|
||||||
def isConnected(self):
|
def isConnected(self):
|
||||||
return self.serial != None
|
return self.serial != None
|
||||||
|
|
|
@ -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)]))
|
glLightfv(GL_LIGHT0, GL_AMBIENT, map(lambda x: x / 5, self.objColor[self.parent.objectList.index(obj)]))
|
||||||
glEnable(GL_LIGHTING)
|
glEnable(GL_LIGHTING)
|
||||||
self.drawModel(obj)
|
self.drawModel(obj)
|
||||||
|
|
||||||
if self.drawBorders and (self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray"):
|
if self.drawBorders and (self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray"):
|
||||||
glEnable(GL_DEPTH_TEST)
|
glEnable(GL_DEPTH_TEST)
|
||||||
glDisable(GL_LIGHTING)
|
glDisable(GL_LIGHTING)
|
||||||
|
|
|
@ -85,7 +85,8 @@ class VirtualPrinter():
|
||||||
self.readList = None
|
self.readList = None
|
||||||
|
|
||||||
class MachineCom():
|
class MachineCom():
|
||||||
def __init__(self, port = None, baudrate = None):
|
def __init__(self, port = None, baudrate = None, logCallback = None):
|
||||||
|
self._logCallback = logCallback
|
||||||
if port == None:
|
if port == None:
|
||||||
port = profile.getPreference('serial_port')
|
port = profile.getPreference('serial_port')
|
||||||
if baudrate == None:
|
if baudrate == None:
|
||||||
|
@ -93,86 +94,94 @@ class MachineCom():
|
||||||
baudrate = 0
|
baudrate = 0
|
||||||
else:
|
else:
|
||||||
baudrate = int(profile.getPreference('serial_baud'))
|
baudrate = int(profile.getPreference('serial_baud'))
|
||||||
self.serial = None
|
self._serial = None
|
||||||
if port == 'AUTO':
|
if port == 'AUTO':
|
||||||
programmer = stk500v2.Stk500v2()
|
programmer = stk500v2.Stk500v2()
|
||||||
|
self._log("Serial port list: %s" % (str(serialList())))
|
||||||
for port in serialList():
|
for port in serialList():
|
||||||
try:
|
try:
|
||||||
print "Connecting to: %s" % (port)
|
self._log("Connecting to: %s" % (port))
|
||||||
programmer.connect(port)
|
programmer.connect(port)
|
||||||
programmer.close()
|
self._serial = programmer.leaveISP()
|
||||||
time.sleep(1)
|
self._configureSerialWithBaudrate(baudrate)
|
||||||
self.serial = self._openPortWithBaudrate(port, baudrate)
|
|
||||||
break
|
break
|
||||||
except ispBase.IspError as (e):
|
except ispBase.IspError as (e):
|
||||||
print "Error while connecting to %s" % (port)
|
self._log("Error while connecting to %s: %s" % (port, str(e)))
|
||||||
print e
|
|
||||||
pass
|
pass
|
||||||
except:
|
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()
|
programmer.close()
|
||||||
elif port == 'VIRTUAL':
|
elif port == 'VIRTUAL':
|
||||||
self.serial = VirtualPrinter()
|
self._serial = VirtualPrinter()
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
self.serial = self._openPortWithBaudrate(port, baudrate)
|
self._serial = Serial(port, 115200, timeout=2)
|
||||||
|
self._configureSerialWithBaudrate(baudrate)
|
||||||
except:
|
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]))
|
||||||
print self.serial
|
print self._serial
|
||||||
|
|
||||||
def _openPortWithBaudrate(self, port, baudrate):
|
def _openPortWithBaudrate(self, port, baudrate):
|
||||||
if baudrate != 0:
|
if baudrate != 0:
|
||||||
return Serial(port, baudrate, timeout=2)
|
self._serial.baudrate = baudrate
|
||||||
|
return
|
||||||
for baudrate in baudrateList():
|
for baudrate in baudrateList():
|
||||||
try:
|
try:
|
||||||
ser = Serial(port, baudrate, timeout=2)
|
self._serial.baudrate = baudrate
|
||||||
except:
|
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
|
continue
|
||||||
ser.setDTR(1)
|
time.sleep(0.5)
|
||||||
time.sleep(0.1)
|
|
||||||
ser.setDTR(0)
|
|
||||||
time.sleep(0.2)
|
|
||||||
starttime = time.time()
|
starttime = time.time()
|
||||||
|
self.sendCommand("\nM105")
|
||||||
for line in ser:
|
for line in ser:
|
||||||
if 'start' in line:
|
if 'start' in line:
|
||||||
ser.close()
|
return
|
||||||
ser = Serial(port, baudrate, timeout=2)
|
if 'ok' in line:
|
||||||
ser.setDTR(1)
|
return
|
||||||
time.sleep(0.1)
|
|
||||||
ser.setDTR(0)
|
|
||||||
time.sleep(0.2)
|
|
||||||
return ser
|
|
||||||
if starttime - time.time() > 10:
|
if starttime - time.time() > 10:
|
||||||
break
|
break
|
||||||
ser.close()
|
self._serial.close()
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _log(self, message):
|
||||||
|
if self._logCallback != None:
|
||||||
|
self._logCallback(message)
|
||||||
|
else:
|
||||||
|
print(message)
|
||||||
|
|
||||||
def readline(self):
|
def readline(self):
|
||||||
if self.serial == None:
|
if self._serial == None:
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
ret = self.serial.readline()
|
ret = self._serial.readline()
|
||||||
except:
|
except:
|
||||||
print "Unexpected error while reading serial port:", sys.exc_info()[0]
|
self._log("Unexpected error while reading serial port: %s" % (sys.exc_info()[0]))
|
||||||
ret = ''
|
return ''
|
||||||
#if ret != '':
|
if ret != '':
|
||||||
# print "Recv: " + ret.rstrip()
|
self._log("Recv: %s" (ret.rstrip()))
|
||||||
|
else:
|
||||||
|
self._log("Recv: NONE")
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
if self.serial != None:
|
if self._serial != None:
|
||||||
self.serial.close()
|
self._serial.close()
|
||||||
self.serial = None
|
self._serial = None
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def isOpen(self):
|
def isOpen(self):
|
||||||
return self.serial != None
|
return self._serial != None
|
||||||
|
|
||||||
def sendCommand(self, cmd):
|
def sendCommand(self, cmd):
|
||||||
if self.serial == None:
|
if self._serial == None:
|
||||||
return
|
return
|
||||||
#print 'Send: ' + cmd
|
self._log('Send: %s' % (cmd))
|
||||||
self.serial.write(cmd + '\n')
|
try:
|
||||||
|
self._serial.write(cmd)
|
||||||
|
self._serial.write('\n')
|
||||||
|
except:
|
||||||
|
self._log("Unexpected error while writing serial port: %s" % (sys.exc_info()[0]))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue