from __future__ import absolute_import\r
import __init__\r
\r
-import wx\r
+import wx, threading\r
+\r
+from gui import machineCom\r
\r
printWindowHandle = None\r
\r
def printFile(filename):\r
global printWindowHandle\r
- print "Want to print: " + filename\r
if printWindowHandle == None:\r
printWindowHandle = printWindow()\r
printWindowHandle.Show(True)\r
printWindowHandle.Raise()\r
+ printWindowHandle.LoadGCodeFile(filename)\r
\r
class printWindow(wx.Frame):\r
"Main user interface window"\r
def __init__(self):\r
super(printWindow, self).__init__(None, -1, title='Printing')\r
+ self.machineCom = None\r
+ self.thread = None\r
+ self.gcodeList = None\r
+ self.printIdx = None\r
+ self.bufferLineCount = 4\r
+ self.sendCnt = 0\r
+ \r
self.SetSizer(wx.BoxSizer())\r
self.panel = wx.Panel(self)\r
self.GetSizer().Add(self.panel, 1, flag=wx.EXPAND)\r
\r
self.sizer.Add(boxsizer, pos=(0,0), span=(4,1), flag=wx.EXPAND)\r
\r
- self.sizer.Add(wx.Button(self.panel, -1, 'Connect'), pos=(0,1))\r
- self.sizer.Add(wx.Button(self.panel, -1, 'Load GCode'), pos=(1,1))\r
- self.sizer.Add(wx.Button(self.panel, -1, 'Print GCode'), pos=(2,1))\r
- self.sizer.Add(wx.Button(self.panel, -1, 'Cancel print'), pos=(3,1))\r
+ self.connectButton = wx.Button(self.panel, -1, 'Connect')\r
+ self.loadButton = wx.Button(self.panel, -1, 'Load GCode')\r
+ self.printButton = wx.Button(self.panel, -1, 'Print GCode')\r
+ self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')\r
+ self.sizer.Add(self.connectButton, pos=(0,1))\r
+ self.sizer.Add(self.loadButton, pos=(1,1))\r
+ self.sizer.Add(self.printButton, pos=(2,1))\r
+ self.sizer.Add(self.cancelButton, pos=(3,1))\r
self.sizer.Add(wx.Gauge(self.panel, -1), pos=(4,0), span=(1,2), flag=wx.EXPAND)\r
self.sizer.AddGrowableRow(3)\r
self.sizer.AddGrowableCol(0)\r
\r
self.Bind(wx.EVT_CLOSE, self.OnClose)\r
+ self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnect)\r
+ self.loadButton.Bind(wx.EVT_BUTTON, self.OnLoad)\r
+ self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)\r
+ self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)\r
\r
self.Layout()\r
self.Fit()\r
self.Centre()\r
\r
+ def OnConnect(self, e):\r
+ if self.machineCom != None:\r
+ self.machineCom.close()\r
+ self.thread.join()\r
+ self.machineCom = machineCom.MachineCom()\r
+ self.thread = threading.Thread(target=self.PrinterMonitor)\r
+ self.thread.start()\r
+ \r
+ def OnLoad(self, e):\r
+ pass\r
+ \r
+ def OnPrint(self, e):\r
+ if self.machineCom == None:\r
+ return\r
+ if self.gcodeList == None:\r
+ return\r
+ if self.printIdx != None:\r
+ return\r
+ self.printIdx = 1\r
+ self.sendLine(0)\r
+ self.sendCnt = self.bufferLineCount\r
+ \r
+ def OnCancel(self, e):\r
+ pass\r
+ \r
def OnClose(self, e):\r
global printWindowHandle\r
printWindowHandle = None\r
+ if self.machineCom != None:\r
+ self.machineCom.close()\r
+ self.thread.join()\r
self.Destroy()\r
+\r
+ def LoadGCodeFile(self, filename):\r
+ gcodeList = ["M110"]\r
+ for line in open(filename, 'r'):\r
+ if ';' in line:\r
+ line = line[0:line.find(';')]\r
+ line = line.strip()\r
+ if len(line) > 0:\r
+ gcodeList.append(line)\r
+ print "Loaded: %s (%d)" % (filename, len(gcodeList))\r
+ self.gcodeList = gcodeList\r
+\r
+ def sendLine(self, lineNr):\r
+ if lineNr >= len(self.gcodeList):\r
+ return\r
+ checksum = reduce(lambda x,y:x^y, map(ord, "N%d%s" % (lineNr, self.gcodeList[lineNr])))\r
+ self.machineCom.sendCommand("N%d%s*%d" % (lineNr, self.gcodeList[lineNr], checksum))\r
+\r
+ def PrinterMonitor(self):\r
+ skipCount = 0\r
+ while True:\r
+ line = self.machineCom.readline()\r
+ if line == None:\r
+ return\r
+ while self.sendCnt > 0:\r
+ self.sendLine(self.printIdx)\r
+ self.printIdx += 1\r
+ self.sendCnt -= 1\r
+ if self.printIdx != None:\r
+ if line.startswith("ok"):\r
+ if skipCount > 0:\r
+ skipCount -= 1\r
+ else:\r
+ self.sendLine(self.printIdx)\r
+ self.printIdx += 1\r
+ elif "resend" in line.lower() or "rs" in line:\r
+ try:\r
+ lineNr=int(line.replace("N:"," ").replace("N"," ").replace(":"," ").split()[-1])\r
+ except:\r
+ if "rs" in line:\r
+ lineNr=int(line.split()[1])\r
+ self.printIdx = lineNr\r