import wx, os, platform, types, webbrowser, threading, time, re\r
import wx.wizard\r
\r
-from gui import machineCom\r
+from gui import firmwareInstall\r
+from util import machineCom\r
from util import profile\r
\r
class InfoPage(wx.wizard.WizardPageSimple):\r
return False\r
\r
def OnUpgradeClick(self, e):\r
- if machineCom.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex")):\r
+ if firmwareInstall.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex")):\r
self.GetParent().FindWindowById(wx.ID_FORWARD).Enable()\r
\r
def OnSkipClick(self, e):\r
--- /dev/null
+from __future__ import absolute_import
+import __init__
+
+import os, glob, wx, threading, sys, time
+
+from serial import Serial
+
+from avr_isp import stk500v2
+from avr_isp import ispBase
+from avr_isp import intelHex
+
+from util import machineCom
+from util import profile
+
+class InstallFirmware(wx.Dialog):
+ def __init__(self, filename, port = None):
+ super(InstallFirmware, self).__init__(parent=None, title="Firmware install", size=(250, 100))
+ if port == None:
+ port = profile.getPreference('serial_port')
+
+ sizer = wx.BoxSizer(wx.VERTICAL)
+
+ self.progressLabel = wx.StaticText(self, -1, 'Reading firmware...')
+ sizer.Add(self.progressLabel, 0, flag=wx.ALIGN_CENTER)
+ self.progressGauge = wx.Gauge(self, -1)
+ sizer.Add(self.progressGauge, 0, flag=wx.EXPAND)
+ self.okButton = wx.Button(self, -1, 'Ok')
+ self.okButton.Disable()
+ self.okButton.Bind(wx.EVT_BUTTON, self.OnOk)
+ sizer.Add(self.okButton, 0, flag=wx.ALIGN_CENTER)
+ self.SetSizer(sizer)
+
+ self.filename = filename
+ self.port = port
+
+ threading.Thread(target=self.OnRun).start()
+
+ self.ShowModal()
+ self.Destroy()
+
+ return
+
+ def OnRun(self):
+ hexFile = intelHex.readHex(self.filename)
+ wx.CallAfter(self.updateLabel, "Connecting to machine...")
+ programmer = stk500v2.Stk500v2()
+ programmer.progressCallback = self.OnProgress
+ if self.port == 'AUTO':
+ for self.port in machineCom.serialList():
+ try:
+ programmer.connect(self.port)
+ break
+ except ispBase.IspError:
+ pass
+ else:
+ try:
+ programmer.connect(self.port)
+ except ispBase.IspError:
+ pass
+
+ if programmer.isConnected():
+ wx.CallAfter(self.updateLabel, "Uploading firmware...")
+ try:
+ programmer.programChip(hexFile)
+ wx.CallAfter(self.updateLabel, "Done!")
+ except ispBase.IspError as e:
+ wx.CallAfter(self.updateLabel, "Failed to write firmware.\n" + str(e))
+
+ programmer.close()
+ wx.CallAfter(self.okButton.Enable)
+ return
+ wx.MessageBox('Failed to find machine for firmware upgrade\nIs your machine connected to the PC?', 'Firmware update', wx.OK | wx.ICON_ERROR)
+ wx.CallAfter(self.Close)
+
+ def updateLabel(self, text):
+ self.progressLabel.SetLabel(text)
+ self.Layout()
+
+ def OnProgress(self, value, max):
+ wx.CallAfter(self.progressGauge.SetRange, max)
+ wx.CallAfter(self.progressGauge.SetValue, value)
+
+ def OnOk(self, e):
+ self.Close()
+
+ def OnClose(self, e):
+ self.Destroy()
+
from gui import validators
from gui import preferencesDialog
from gui import configWizard
-from gui import machineCom
+from gui import firmwareInstall
from gui import printWindow
from gui import simpleMode
from gui import projectPlanner
self.Close()
def OnDefaultMarlinFirmware(self, e):
- machineCom.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex"))
+ firmwareInstall.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex"))
def OnCustomFirmware(self, e):
dlg=wx.FileDialog(self, "Open firmware to upload", os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
if not(os.path.exists(filename)):
return
#For some reason my Ubuntu 10.10 crashes here.
- machineCom.InstallFirmware(filename)
+ firmwareInstall.InstallFirmware(filename)
def OnFirstRunWizard(self, e):
configWizard.configWizard()
\r
from gui import configBase\r
from gui import validators\r
-from gui import machineCom\r
+from util import machineCom\r
from util import profile\r
\r
class preferencesDialog(configBase.configWindowBase):\r
import wx, threading, re, subprocess, sys, os\r
from wx.lib import buttons\r
\r
-from gui import machineCom\r
from gui import icon\r
from gui import toolbarUtil\r
+from util import machineCom\r
from util import profile\r
from util import gcodeInterpreter\r
\r
self.sendList = []\r
self.printIdx = None\r
self.temp = None\r
+ self.bedTemp = None\r
self.bufferLineCount = 4\r
self.sendCnt = 0\r
\r
h = self.connectButton.GetSize().GetHeight()\r
self.temperatureSelect = wx.SpinCtrl(self.panel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
self.temperatureSelect.SetRange(0, 400)\r
+ self.bedTemperatureLabel = wx.StaticText(self.panel, -1, "BedTemp:")\r
+ self.bedTemperatureSelect = wx.SpinCtrl(self.panel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.bedTemperatureSelect.SetRange(0, 400)\r
+ self.bedTemperatureLabel.Show(False)\r
+ self.bedTemperatureSelect.Show(False)\r
\r
self.sizer.Add(self.connectButton, pos=(0,1))\r
#self.sizer.Add(self.loadButton, pos=(1,1))\r
\r
self.sizer.Add(wx.StaticText(self.panel, -1, "Temp:"), pos=(0,3))\r
self.sizer.Add(self.temperatureSelect, pos=(0,4))\r
+ self.sizer.Add(self.bedTemperatureLabel, pos=(0,5))\r
+ self.sizer.Add(self.bedTemperatureSelect, pos=(0,6))\r
\r
self.directControlPanel = wx.Panel(self.panel)\r
self.sizer.Add(self.directControlPanel, pos=(1,3), span=(5,4))\r
self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)\r
\r
self.Bind(wx.EVT_SPINCTRL, self.OnTempChange, self.temperatureSelect)\r
+ self.Bind(wx.EVT_SPINCTRL, self.OnBedTempChange, self.bedTemperatureSelect)\r
\r
self.Layout()\r
self.Fit()\r
self.progress.SetValue(self.printIdx)\r
if self.temp != None:\r
status += 'Temp: %d\n' % (self.temp)\r
+ if self.bedTemp != None and self.bedTemp > 0:\r
+ status += 'Bed Temp: %d\n' % (self.bedTemp)\r
+ self.bedTemperatureLabel.Show(True)\r
+ self.bedTemperatureSelect.Show(True)\r
self.statsText.SetLabel(status.strip())\r
self.Layout()\r
\r
def OnTempChange(self, e):\r
self.sendCommand("M104 S%d" % (self.temperatureSelect.GetValue()))\r
\r
+ def OnBedTempChange(self, e):\r
+ self.sendCommand("M140 S%d" % (self.bedTemperatureSelect.GetValue()))\r
+\r
def LoadGCodeFile(self, filename):\r
if self.printIdx != None:\r
return\r
wx.CallAfter(self.UpdateButtonStates)\r
if 'T:' in line:\r
self.temp = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0))\r
+ if 'B:' in line:\r
+ self.bedTemp = float(re.search("[0-9\.]*", line.split('B:')[1]).group(0))\r
wx.CallAfter(self.UpdateProgress)\r
if self.printIdx == None:\r
if line == '': #When we have a communication "timeout" and we're not sending gcode, then read the temperature.\r
from gui import validators
from gui import preferencesDialog
from gui import configWizard
-from gui import machineCom
+from gui import firmwareInstall
from gui import printWindow
from gui import icon
from util import profile
prefDialog.Show(True)
def OnDefaultMarlinFirmware(self, e):
- machineCom.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex"))
+ firmwareInstall.InstallFirmware(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../firmware/default.hex"))
def OnCustomFirmware(self, e):
dlg=wx.FileDialog(self, "Open firmware to upload", os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
if not(os.path.exists(filename)):
return
#For some reason my Ubuntu 10.10 crashes here.
- machineCom.InstallFirmware(filename)
+ firmwareInstall.InstallFirmware(filename)
def OnFirstRunWizard(self, e):
configWizard.configWizard()
from __future__ import absolute_import
import __init__
-import os, glob, wx, threading, sys, time
+import os, glob, sys, time
from serial import Serial
pass
return baselist+glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyACM*') +glob.glob("/dev/tty.usb*")+glob.glob("/dev/cu.*")+glob.glob("/dev/rfcomm*")
-class InstallFirmware(wx.Dialog):
- def __init__(self, filename, port = None):
- super(InstallFirmware, self).__init__(parent=None, title="Firmware install", size=(250, 100))
- if port == None:
- port = profile.getPreference('serial_port')
-
- sizer = wx.BoxSizer(wx.VERTICAL)
-
- self.progressLabel = wx.StaticText(self, -1, 'Reading firmware...')
- sizer.Add(self.progressLabel, 0, flag=wx.ALIGN_CENTER)
- self.progressGauge = wx.Gauge(self, -1)
- sizer.Add(self.progressGauge, 0, flag=wx.EXPAND)
- self.okButton = wx.Button(self, -1, 'Ok')
- self.okButton.Disable()
- self.okButton.Bind(wx.EVT_BUTTON, self.OnOk)
- sizer.Add(self.okButton, 0, flag=wx.ALIGN_CENTER)
- self.SetSizer(sizer)
-
- self.filename = filename
- self.port = port
-
- threading.Thread(target=self.OnRun).start()
-
- self.ShowModal()
- self.Destroy()
-
- return
-
- def OnRun(self):
- hexFile = intelHex.readHex(self.filename)
- wx.CallAfter(self.updateLabel, "Connecting to machine...")
- programmer = stk500v2.Stk500v2()
- programmer.progressCallback = self.OnProgress
- if self.port == 'AUTO':
- for self.port in serialList():
- try:
- programmer.connect(self.port)
- break
- except ispBase.IspError:
- pass
- else:
- try:
- programmer.connect(self.port)
- except ispBase.IspError:
- pass
-
- if programmer.isConnected():
- wx.CallAfter(self.updateLabel, "Uploading firmware...")
- try:
- programmer.programChip(hexFile)
- wx.CallAfter(self.updateLabel, "Done!")
- except ispBase.IspError as e:
- wx.CallAfter(self.updateLabel, "Failed to write firmware.\n" + str(e))
-
- programmer.close()
- wx.CallAfter(self.okButton.Enable)
- return
- wx.MessageBox('Failed to find machine for firmware upgrade\nIs your machine connected to the PC?', 'Firmware update', wx.OK | wx.ICON_ERROR)
- wx.CallAfter(self.Close)
-
- def updateLabel(self, text):
- self.progressLabel.SetLabel(text)
- self.Layout()
-
- def OnProgress(self, value, max):
- wx.CallAfter(self.progressGauge.SetRange, max)
- wx.CallAfter(self.progressGauge.SetValue, value)
-
- def OnOk(self, e):
- self.Close()
-
- def OnClose(self, e):
- self.Destroy()
-
class VirtualPrinter():
def __init__(self):
self.readList = ['start\n']
self.temp = 0.0
self.targetTemp = 0.0
+ self.bedTemp = 1.0
+ self.bedTargetTemp = 1.0
def write(self, data):
if self.readList == None:
return
print "Send: %s" % (data.rstrip())
- if 'M104' in data:
+ if 'M104' in data or 'M109' in data:
try:
self.targetTemp = float(data[data.find('S')+1:])
except:
pass
+ if 'M140' in data or 'M190' in data:
+ try:
+ self.bedTargetTemp = float(data[data.find('S')+1:])
+ except:
+ pass
if 'M105' in data:
- self.readList.append("ok T:%f/%f\n" % (self.temp, self.targetTemp))
+ self.readList.append("ok T:%f /%f B:%f /%f @:64\n" % (self.temp, self.targetTemp, self.bedTemp, self.bedTargetTemp))
else:
self.readList.append("ok\n")
return ''
n = 0
self.temp = (self.temp + self.targetTemp) / 2
+ self.bedTemp = (self.bedTemp + self.bedTargetTemp) / 2
while len(self.readList) < 1:
time.sleep(0.1)
n += 1