heater: take a gcode_id when setting up a heater (#1028)

Allow an arbitrary gcode_id to be supplied during heater setup. This allows future extras to register additional IDs beyond B, and T#.

Signed-off-by: John Jardine <john@gprime.net>
This commit is contained in:
john-- 2019-01-02 17:44:02 -05:00 committed by KevinOConnor
parent f4d323adbc
commit f6c9150349
4 changed files with 35 additions and 27 deletions

View file

@ -52,7 +52,7 @@ class GCodeParser:
# G-Code state
self.need_ack = False
self.toolhead = self.fan = self.extruder = None
self.heaters = []
self.heater = None
self.speed = 25.0
self.axis2pos = {'X': 0, 'Y': 1, 'Z': 2, 'E': 3}
def register_command(self, cmd, func, when_not_ready=False, desc=None):
@ -130,6 +130,7 @@ class GCodeParser:
self.is_printer_ready = True
self.gcode_handlers = self.ready_gcode_handlers
# Lookup printer components
self.heater = self.printer.lookup_object('heater')
self.toolhead = self.printer.lookup_object('toolhead')
if self.move_transform is None:
self.move_with_transform = self.toolhead.move
@ -138,8 +139,6 @@ class GCodeParser:
if extruders:
self.extruder = extruders[0]
self.toolhead.set_extruder(self.extruder)
self.heaters = [ e.get_heater() for e in extruders ]
self.heaters.append(self.printer.lookup_object('heater_bed', None))
self.fan = self.printer.lookup_object('fan', None)
if self.is_fileinput and self.fd_handle is None:
self.fd_handle = self.reactor.register_fd(self.fd, self.process_data)
@ -367,13 +366,11 @@ class GCodeParser:
def get_temp(self, eventtime):
# Tn:XXX /YYY B:XXX /YYY
out = []
for i, heater in enumerate(self.heaters):
if heater is not None:
cur, target = heater.get_temp(eventtime)
name = "B"
if i < len(self.heaters) - 1:
name = "T%d" % (i,)
out.append("%s:%.1f /%.1f" % (name, cur, target))
if self.heater is not None:
for heater in self.heater.get_all_heaters():
if heater is not None:
cur, target = heater.get_temp(eventtime)
out.append("%s:%.1f /%.1f" % (heater.gcode_id, cur, target))
if not out:
return "T:0"
return " ".join(out)
@ -389,13 +386,12 @@ class GCodeParser:
temp = self.get_float('S', params, 0.)
heater = None
if is_bed:
heater = self.heaters[-1]
heater = self.heater.get_heater_by_gcode_id('B')
elif 'T' in params:
index = self.get_int(
'T', params, minval=0, maxval=len(self.heaters)-2)
heater = self.heaters[index]
elif self.extruder is not None:
heater = self.extruder.get_heater()
index = self.get_int('T', params, minval=0)
heater = self.heater.get_heater_by_gcode_id('T%d' % (index,))
else:
heater = self.heater.get_heater_by_gcode_id('T0')
if heater is None:
if temp > 0.:
self.respond_error("Heater not configured")
@ -672,9 +668,10 @@ class GCodeParser:
if self.is_printer_ready:
self.toolhead.motor_off()
print_time = self.toolhead.get_last_move_time()
for heater in self.heaters:
if heater is not None:
heater.set_temp(print_time, 0.)
if self.heater is not None:
for heater in self.heater.get_all_heaters():
if heater is not None:
heater.set_temp(print_time, 0.)
if self.fan is not None:
self.fan.set_speed(print_time, 0.)
self.toolhead.dwell(0.500)