Teacup_Firmware/configtool/miscellaneouspage.py

241 lines
7.5 KiB
Python

import wx
from configtool.page import Page
from configtool.data import reFloat
class MiscellaneousPage(wx.Panel, Page):
def __init__(self, parent, nb, idPg, font):
wx.Panel.__init__(self, nb, wx.ID_ANY)
Page.__init__(self, font)
self.parent = parent
self.id = idPg
self.font = font
self.labels = {
"USE_INTERNAL_PULLUPS": "Use Internal Pullups",
"BED_LEVELING": "Enable dynamic bed leveling",
"Z_AUTODISABLE": "Z Autodisable",
"EECONFIG": "Enable EEPROM Storage",
"BANG_BANG": "Enable",
"BANG_BANG_ON": "On PWM Level:",
"BANG_BANG_OFF": "Off PWM Level:",
"REPORT_TARGET_TEMPS": "Report Target Temperatures",
"MOVEBUFFER_SIZE": "Movebuffer Size:",
"DC_EXTRUDER": "Heater:",
"DC_EXTRUDER_PWM": "PWM:",
"USE_WATCHDOG": "Use the Watchdog Timer",
"TH_COUNT": "Temperature History Size:",
"FAST_PWM": "Fast PWM",
"ENDSTOP_STEPS": "Endstop Steps:",
"PID_SCALE": "PID Scaling Factor:",
"TEMP_HYSTERESIS": "Temperature Hysteresis:",
"TEMP_RESIDENCY_TIME": "Temperature Residency Time:",
"TEMP_EWMA": "Temperature EWMA:",
"HEATER_SANITY_CHECK": "Heater Sanity Check",
}
self.heaterNameNone = "<none>"
self.heaterNames = [self.heaterNameNone]
self.boardHeaters = []
self.processors = []
sz = wx.GridBagSizer()
sz.Add((20, 40), pos=(0, 0))
sz.Add((40, 40), pos=(0, 2))
sz.Add((40, 40), pos=(0, 4))
sz.Add((20, 30), pos=(1, 0))
sz.Add((20, 30), pos=(2, 0))
sz.Add((20, 30), pos=(3, 0))
sz.Add((20, 30), pos=(4, 0))
sz.Add((20, 30), pos=(5, 0))
sz.Add((20, 30), pos=(6, 0))
sz.Add((20, 30), pos=(7, 0))
sz.Add((20, 30), pos=(8, 0))
labelWidth = 140
k = "EECONFIG"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(1, 1))
k = "USE_INTERNAL_PULLUPS"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(2, 1))
k = "USE_WATCHDOG"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(3, 1))
k = "FAST_PWM"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(4, 1))
k = "HEATER_SANITY_CHECK"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(5, 1))
k = "REPORT_TARGET_TEMPS"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(6, 1))
k = "Z_AUTODISABLE"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(7, 1))
k = "BED_LEVELING"
cb = self.addCheckBox(k, self.onCheckBox)
sz.Add(cb, pos=(8, 1))
b = wx.StaticBox(self, wx.ID_ANY, "BANG BANG Bed Control")
b.SetFont(font)
sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
sbox.Add((5, 5))
k = "BANG_BANG"
cb = self.addCheckBox(k, self.onCheckBox)
sbox.Add(cb, 1, wx.LEFT, 60)
sbox.Add((5, 20))
k = "BANG_BANG_ON"
tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger)
sbox.Add(tc)
sbox.Add((5, 5))
k = "BANG_BANG_OFF"
tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger)
sbox.Add(tc)
sbox.Add((5, 5))
sz.Add(sbox, pos=(1, 3), span=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL)
b = wx.StaticBox(self, wx.ID_ANY, "DC Motor Extruder")
b.SetFont(font)
sbox = wx.StaticBoxSizer(b, wx.VERTICAL)
sbox.Add((5, 5))
k = "DC_EXTRUDER"
ch = self.addChoice(k, self.heaterNames, 0, 60, self.onChoice)
sbox.Add(ch)
sbox.Add((5, 5))
k = "DC_EXTRUDER_PWM"
tc = self.addTextCtrl(k, 60, self.onTextCtrlInteger)
sbox.Add(tc)
sbox.Add((5, 5))
sz.Add(sbox, pos=(6, 3), span=(3, 1), flag=wx.ALIGN_CENTER_HORIZONTAL)
labelWidth = 190
k = "MOVEBUFFER_SIZE"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(1, 5))
k = "TH_COUNT"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(2, 5))
k = "ENDSTOP_STEPS"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(3, 5))
k = "PID_SCALE"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(4, 5))
k = "TEMP_HYSTERESIS"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(6, 5))
k = "TEMP_RESIDENCY_TIME"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(7, 5))
k = "TEMP_EWMA"
tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger)
sz.Add(tc, pos=(8, 5))
self.SetSizer(sz)
self.enableAll(False)
def setHeaters(self, hlist):
k = "DC_EXTRUDER"
v = self.choices[k].GetSelection()
currentChoice = self.heaterNames[v]
self.boardHeaters = [s[0] for s in hlist]
self.heaterNames = [self.heaterNameNone] + self.boardHeaters
self.choices[k].Clear()
self.choices[k].SetFont(self.font)
for h in self.heaterNames:
self.choices[k].Append(h)
try:
v = self.heaterNames.index(currentChoice)
except:
v = 0
dlg = wx.MessageDialog(
self,
"Printer: Miscellaneous tab:\nDC Extruder heater "
'"%s" not defined for this board. Please check.' % currentChoice,
"Warning",
wx.OK + wx.ICON_WARNING,
)
dlg.ShowModal()
dlg.Destroy()
self.choices[k].SetSelection(v)
def setOriginalHeater(self, h):
k = "DC_EXTRUDER"
if h and h.startswith("HEATER_"):
hname = h[len("HEATER_") :]
else:
hname = h
if hname and len(self.boardHeaters) != 0:
if hname not in self.boardHeaters:
dlg = wx.MessageDialog(
self,
"Printer: Miscellaneous tab:\nDC Extruder "
'heater "%s" not defined for this board. '
"Please check." % hname,
"Warning",
wx.OK + wx.ICON_WARNING,
)
dlg.ShowModal()
dlg.Destroy()
self.heaterNames = [self.heaterNameNone] + self.boardHeaters
else:
self.heaterNames = [self.heaterNameNone]
if hname and hname != self.heaterNameNone:
self.heaterNames.append(hname)
self.choices[k].Clear()
self.choices[k].SetFont(self.font)
for ht in self.heaterNames:
self.choices[k].Append(ht)
if hname:
try:
v = self.heaterNames.index(hname)
except:
v = 0
else:
v = 0
self.choices[k].SetSelection(v)
def getValues(self):
result = Page.getValues(self)
k = "DC_EXTRUDER"
s = self.choices[k].GetSelection()
v = self.choices[k].GetString(s)
if v == self.heaterNameNone:
if k in self.choicesOriginal.keys():
result[k] = self.choicesOriginal[k][0], False
else:
result[k] = "", False
else:
result[k] = "HEATER_%s" % v, True
return result