Printing works! If you press the right buttons in the right order that is.
parent
7d13b17dd9
commit
ca92f69770
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import __init__
|
import __init__
|
||||||
|
|
||||||
import os, glob, wx, threading, sys
|
import os, glob, wx, threading, sys, time
|
||||||
|
|
||||||
from serial import Serial
|
from serial import Serial
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ class MachineCom():
|
||||||
if port == None:
|
if port == None:
|
||||||
port = profile.getPreference('serial_port')
|
port = profile.getPreference('serial_port')
|
||||||
if baudrate == None:
|
if baudrate == None:
|
||||||
baudrate = 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()
|
||||||
|
@ -116,6 +116,7 @@ class MachineCom():
|
||||||
try:
|
try:
|
||||||
programmer.connect(port)
|
programmer.connect(port)
|
||||||
programmer.close()
|
programmer.close()
|
||||||
|
print "Connecting to: %s %i" % (port, baudrate)
|
||||||
self.serial = Serial(port, baudrate, timeout=5)
|
self.serial = Serial(port, baudrate, timeout=5)
|
||||||
break
|
break
|
||||||
except ispBase.IspError:
|
except ispBase.IspError:
|
||||||
|
@ -131,8 +132,9 @@ class MachineCom():
|
||||||
|
|
||||||
def readline(self):
|
def readline(self):
|
||||||
if self.serial == None:
|
if self.serial == None:
|
||||||
return ''
|
return None
|
||||||
ret = self.serial.readline()
|
ret = self.serial.readline()
|
||||||
|
if ret != '':
|
||||||
print "Recv: " + ret.rstrip()
|
print "Recv: " + ret.rstrip()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -144,5 +146,6 @@ class MachineCom():
|
||||||
def sendCommand(self, cmd):
|
def sendCommand(self, cmd):
|
||||||
if self.serial == None:
|
if self.serial == None:
|
||||||
return
|
return
|
||||||
|
print 'Send: ' + cmd
|
||||||
self.serial.write(cmd + '\n')
|
self.serial.write(cmd + '\n')
|
||||||
|
|
||||||
|
|
|
@ -1,22 +1,31 @@
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
import __init__
|
import __init__
|
||||||
|
|
||||||
import wx
|
import wx, threading
|
||||||
|
|
||||||
|
from gui import machineCom
|
||||||
|
|
||||||
printWindowHandle = None
|
printWindowHandle = None
|
||||||
|
|
||||||
def printFile(filename):
|
def printFile(filename):
|
||||||
global printWindowHandle
|
global printWindowHandle
|
||||||
print "Want to print: " + filename
|
|
||||||
if printWindowHandle == None:
|
if printWindowHandle == None:
|
||||||
printWindowHandle = printWindow()
|
printWindowHandle = printWindow()
|
||||||
printWindowHandle.Show(True)
|
printWindowHandle.Show(True)
|
||||||
printWindowHandle.Raise()
|
printWindowHandle.Raise()
|
||||||
|
printWindowHandle.LoadGCodeFile(filename)
|
||||||
|
|
||||||
class printWindow(wx.Frame):
|
class printWindow(wx.Frame):
|
||||||
"Main user interface window"
|
"Main user interface window"
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(printWindow, self).__init__(None, -1, title='Printing')
|
super(printWindow, self).__init__(None, -1, title='Printing')
|
||||||
|
self.machineCom = None
|
||||||
|
self.thread = None
|
||||||
|
self.gcodeList = None
|
||||||
|
self.printIdx = None
|
||||||
|
self.bufferLineCount = 4
|
||||||
|
self.sendCnt = 0
|
||||||
|
|
||||||
self.SetSizer(wx.BoxSizer())
|
self.SetSizer(wx.BoxSizer())
|
||||||
self.panel = wx.Panel(self)
|
self.panel = wx.Panel(self)
|
||||||
self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)
|
self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)
|
||||||
|
@ -30,21 +39,99 @@ class printWindow(wx.Frame):
|
||||||
|
|
||||||
self.sizer.Add(boxsizer, pos=(0,0), span=(4,1), flag=wx.EXPAND)
|
self.sizer.Add(boxsizer, pos=(0,0), span=(4,1), flag=wx.EXPAND)
|
||||||
|
|
||||||
self.sizer.Add(wx.Button(self.panel, -1, 'Connect'), pos=(0,1))
|
self.connectButton = wx.Button(self.panel, -1, 'Connect')
|
||||||
self.sizer.Add(wx.Button(self.panel, -1, 'Load GCode'), pos=(1,1))
|
self.loadButton = wx.Button(self.panel, -1, 'Load GCode')
|
||||||
self.sizer.Add(wx.Button(self.panel, -1, 'Print GCode'), pos=(2,1))
|
self.printButton = wx.Button(self.panel, -1, 'Print GCode')
|
||||||
self.sizer.Add(wx.Button(self.panel, -1, 'Cancel print'), pos=(3,1))
|
self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')
|
||||||
|
self.sizer.Add(self.connectButton, pos=(0,1))
|
||||||
|
self.sizer.Add(self.loadButton, pos=(1,1))
|
||||||
|
self.sizer.Add(self.printButton, pos=(2,1))
|
||||||
|
self.sizer.Add(self.cancelButton, pos=(3,1))
|
||||||
self.sizer.Add(wx.Gauge(self.panel, -1), pos=(4,0), span=(1,2), flag=wx.EXPAND)
|
self.sizer.Add(wx.Gauge(self.panel, -1), pos=(4,0), span=(1,2), flag=wx.EXPAND)
|
||||||
self.sizer.AddGrowableRow(3)
|
self.sizer.AddGrowableRow(3)
|
||||||
self.sizer.AddGrowableCol(0)
|
self.sizer.AddGrowableCol(0)
|
||||||
|
|
||||||
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
||||||
|
self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnect)
|
||||||
|
self.loadButton.Bind(wx.EVT_BUTTON, self.OnLoad)
|
||||||
|
self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)
|
||||||
|
self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)
|
||||||
|
|
||||||
self.Layout()
|
self.Layout()
|
||||||
self.Fit()
|
self.Fit()
|
||||||
self.Centre()
|
self.Centre()
|
||||||
|
|
||||||
|
def OnConnect(self, e):
|
||||||
|
if self.machineCom != None:
|
||||||
|
self.machineCom.close()
|
||||||
|
self.thread.join()
|
||||||
|
self.machineCom = machineCom.MachineCom()
|
||||||
|
self.thread = threading.Thread(target=self.PrinterMonitor)
|
||||||
|
self.thread.start()
|
||||||
|
|
||||||
|
def OnLoad(self, e):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def OnPrint(self, e):
|
||||||
|
if self.machineCom == None:
|
||||||
|
return
|
||||||
|
if self.gcodeList == None:
|
||||||
|
return
|
||||||
|
if self.printIdx != None:
|
||||||
|
return
|
||||||
|
self.printIdx = 1
|
||||||
|
self.sendLine(0)
|
||||||
|
self.sendCnt = self.bufferLineCount
|
||||||
|
|
||||||
|
def OnCancel(self, e):
|
||||||
|
pass
|
||||||
|
|
||||||
def OnClose(self, e):
|
def OnClose(self, e):
|
||||||
global printWindowHandle
|
global printWindowHandle
|
||||||
printWindowHandle = None
|
printWindowHandle = None
|
||||||
|
if self.machineCom != None:
|
||||||
|
self.machineCom.close()
|
||||||
|
self.thread.join()
|
||||||
self.Destroy()
|
self.Destroy()
|
||||||
|
|
||||||
|
def LoadGCodeFile(self, filename):
|
||||||
|
gcodeList = ["M110"]
|
||||||
|
for line in open(filename, 'r'):
|
||||||
|
if ';' in line:
|
||||||
|
line = line[0:line.find(';')]
|
||||||
|
line = line.strip()
|
||||||
|
if len(line) > 0:
|
||||||
|
gcodeList.append(line)
|
||||||
|
print "Loaded: %s (%d)" % (filename, len(gcodeList))
|
||||||
|
self.gcodeList = gcodeList
|
||||||
|
|
||||||
|
def sendLine(self, lineNr):
|
||||||
|
if lineNr >= len(self.gcodeList):
|
||||||
|
return
|
||||||
|
checksum = reduce(lambda x,y:x^y, map(ord, "N%d%s" % (lineNr, self.gcodeList[lineNr])))
|
||||||
|
self.machineCom.sendCommand("N%d%s*%d" % (lineNr, self.gcodeList[lineNr], checksum))
|
||||||
|
|
||||||
|
def PrinterMonitor(self):
|
||||||
|
skipCount = 0
|
||||||
|
while True:
|
||||||
|
line = self.machineCom.readline()
|
||||||
|
if line == None:
|
||||||
|
return
|
||||||
|
while self.sendCnt > 0:
|
||||||
|
self.sendLine(self.printIdx)
|
||||||
|
self.printIdx += 1
|
||||||
|
self.sendCnt -= 1
|
||||||
|
if self.printIdx != None:
|
||||||
|
if line.startswith("ok"):
|
||||||
|
if skipCount > 0:
|
||||||
|
skipCount -= 1
|
||||||
|
else:
|
||||||
|
self.sendLine(self.printIdx)
|
||||||
|
self.printIdx += 1
|
||||||
|
elif "resend" in line.lower() or "rs" in line:
|
||||||
|
try:
|
||||||
|
lineNr=int(line.replace("N:"," ").replace("N"," ").replace(":"," ").split()[-1])
|
||||||
|
except:
|
||||||
|
if "rs" in line:
|
||||||
|
lineNr=int(line.split()[1])
|
||||||
|
self.printIdx = lineNr
|
||||||
|
|
Loading…
Reference in New Issue