mcu: Track oids separately from objects requiring a build_config() callback

Track the oid count separately from the configurable object count -
this way it is possible to have internal objects that don't require an
oid in the mcu.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2017-08-23 18:55:04 -04:00
parent c72ca983ba
commit c727ed3592
1 changed files with 18 additions and 13 deletions

View File

@ -14,7 +14,7 @@ STEPCOMPRESS_ERROR_RET = -989898989
class MCU_stepper: class MCU_stepper:
def __init__(self, mcu, pin_params): def __init__(self, mcu, pin_params):
self._mcu = mcu self._mcu = mcu
self._oid = mcu.create_oid(self) self._oid = mcu.create_oid()
self._step_pin = pin_params['pin'] self._step_pin = pin_params['pin']
self._invert_step = pin_params['invert'] self._invert_step = pin_params['invert']
self._dir_pin = self._invert_dir = None self._dir_pin = self._invert_dir = None
@ -142,7 +142,7 @@ class MCU_endstop:
RETRY_QUERY = 1.000 RETRY_QUERY = 1.000
def __init__(self, mcu, pin_params): def __init__(self, mcu, pin_params):
self._mcu = mcu self._mcu = mcu
self._oid = mcu.create_oid(self) self._oid = mcu.create_oid()
self._steppers = [] self._steppers = []
self._pin = pin_params['pin'] self._pin = pin_params['pin']
self._pullup = pin_params['pullup'] self._pullup = pin_params['pullup']
@ -236,7 +236,7 @@ class MCU_endstop:
class MCU_digital_out: class MCU_digital_out:
def __init__(self, mcu, pin_params): def __init__(self, mcu, pin_params):
self._mcu = mcu self._mcu = mcu
self._oid = mcu.create_oid(self) self._oid = mcu.create_oid()
self._pin = pin_params['pin'] self._pin = pin_params['pin']
self._invert = pin_params['invert'] self._invert = pin_params['invert']
self._max_duration = 2. self._max_duration = 2.
@ -278,7 +278,7 @@ class MCU_pwm:
self._hard_pwm = False self._hard_pwm = False
self._cycle_time = 0.100 self._cycle_time = 0.100
self._max_duration = 2. self._max_duration = 2.
self._oid = mcu.create_oid(self) self._oid = mcu.create_oid()
self._pin = pin_params['pin'] self._pin = pin_params['pin']
self._invert = pin_params['invert'] self._invert = pin_params['invert']
self._last_clock = 0 self._last_clock = 0
@ -334,7 +334,7 @@ class MCU_adc:
def __init__(self, mcu, pin_params): def __init__(self, mcu, pin_params):
self._mcu = mcu self._mcu = mcu
self._pin = pin_params['pin'] self._pin = pin_params['pin']
self._oid = mcu.create_oid(self) self._oid = mcu.create_oid()
self._min_sample = self._max_sample = 0. self._min_sample = self._max_sample = 0.
self._sample_time = self._report_time = 0. self._sample_time = self._report_time = 0.
self._sample_count = 0 self._sample_count = 0
@ -406,7 +406,8 @@ class MCU:
printer.bglogger.set_rollover_info("mcu", None) printer.bglogger.set_rollover_info("mcu", None)
pins.get_printer_pins(printer).register_chip("mcu", self) pins.get_printer_pins(printer).register_chip("mcu", self)
self._emergency_stop_cmd = self._reset_cmd = None self._emergency_stop_cmd = self._reset_cmd = None
self._oids = [] self._oid_count = 0
self._config_objects = []
self._init_cmds = [] self._init_cmds = []
self._config_cmds = [] self._config_cmds = []
self._config_crc = None self._config_crc = None
@ -555,11 +556,11 @@ class MCU:
self.add_config_cmd(line) self.add_config_cmd(line)
def _build_config(self): def _build_config(self):
# Build config commands # Build config commands
for oid in self._oids: for co in self._config_objects:
oid.build_config() co.build_config()
self._add_custom() self._add_custom()
self._config_cmds.insert(0, "allocate_oids count=%d" % ( self._config_cmds.insert(0, "allocate_oids count=%d" % (
len(self._oids),)) self._oid_count,))
# Resolve pin names # Resolve pin names
mcu = self.serial.msgparser.get_constant('MCU') mcu = self.serial.msgparser.get_constant('MCU')
@ -628,10 +629,14 @@ class MCU:
pin_type = pin_params['type'] pin_type = pin_params['type']
if pin_type not in pcs: if pin_type not in pcs:
raise pins.error("pin type %s not supported on mcu" % (pin_type,)) raise pins.error("pin type %s not supported on mcu" % (pin_type,))
return pcs[pin_type](self, pin_params) co = pcs[pin_type](self, pin_params)
def create_oid(self, oid): self.add_config_object(co)
self._oids.append(oid) return co
return len(self._oids) - 1 def create_oid(self):
self._oid_count += 1
return self._oid_count - 1
def add_config_object(self, co):
self._config_objects.append(co)
def add_config_cmd(self, cmd, is_init=False): def add_config_cmd(self, cmd, is_init=False):
if is_init: if is_init:
self._init_cmds.append(cmd) self._init_cmds.append(cmd)