From 395429be146238a7a59fb9fde28cfdd2bdab8ccc Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Fri, 9 Aug 2019 11:42:50 -0400 Subject: pins: Move reserved pin handling into PinResolver class Signed-off-by: Kevin O'Connor --- klippy/pins.py | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'klippy/pins.py') diff --git a/klippy/pins.py b/klippy/pins.py index 46a3ecbd..c1b4588f 100644 --- a/klippy/pins.py +++ b/klippy/pins.py @@ -151,17 +151,21 @@ def get_aliases_beaglebone(mcu): re_pin = re.compile(r'(?P[ _]pin=)(?P[^ ]*)') class PinResolver: - def __init__(self, mcu_type, reserved_pins, validate_aliases=True): - self.mcu_type = mcu_type - self.reserved_pins = reserved_pins + def __init__(self, validate_aliases=True): self.validate_aliases = validate_aliases + self.reserved = {} self.aliases = {} self.active_pins = {} - def update_aliases(self, mapping_name): + def reserve_pin(self, pin, reserve_name): + if pin in self.reserved and self.reserved[pin] != reserve_name: + raise error("Pin %s reserved for %s - can't reserve for %s" % ( + pin, self.reserved[pin], reserve_name)) + self.reserved[pin] = reserve_name + def add_pin_mapping(self, mcu_type, mapping_name): if mapping_name == 'arduino': - self.aliases = get_aliases_arduino(self.mcu_type) + self.aliases = get_aliases_arduino(mcu_type) elif mapping_name == 'beaglebone': - self.aliases = get_aliases_beaglebone(self.mcu_type) + self.aliases = get_aliases_beaglebone(mcu_type) else: raise error("Unknown pin alias mapping '%s'" % (mapping_name,)) def update_command(self, cmd): @@ -172,9 +176,9 @@ class PinResolver: and self.validate_aliases): raise error("pin %s is an alias for %s" % ( name, self.active_pins[pin_id])) - if pin_id in self.reserved_pins: + if pin_id in self.reserved: raise error("pin %s is reserved for %s" % ( - name, self.reserved_pins[pin_id])) + name, self.reserved[pin_id])) return m.group('prefix') + str(pin_id) return re_pin.sub(pin_fixup, cmd) @@ -188,7 +192,7 @@ class PrinterPins: def __init__(self): self.chips = {} self.active_pins = {} - self.reserved_pins = {} + self.pin_resolvers = {} def parse_pin(self, pin_desc, can_invert=False, can_pullup=False): desc = pin_desc.strip() pullup = invert = 0 @@ -242,19 +246,16 @@ class PrinterPins: def reset_pin_sharing(self, pin_params): share_name = "%s:%s" % (pin_params['chip_name'], pin_params['pin']) del self.active_pins[share_name] - def reserve_pin(self, chip_name, pin, reserve_name): - chip_reserve = self.reserved_pins.setdefault(chip_name, {}) - if pin in chip_reserve and chip_reserve[pin] != reserve_name: - raise error("Pin %s:%s reserved for %s - can't reserve for %s" % ( - chip_name, pin, chip_reserve[pin], reserve_name)) - chip_reserve[pin] = reserve_name - def get_reserved_pins(self, chip_name): - return self.reserved_pins.get(chip_name, {}) + def get_pin_resolver(self, chip_name): + if chip_name not in self.pin_resolvers: + raise error("Unknown chip name '%s'" % (chip_name,)) + return self.pin_resolvers[chip_name] def register_chip(self, chip_name, chip): chip_name = chip_name.strip() if chip_name in self.chips: raise error("Duplicate chip name '%s'" % (chip_name,)) self.chips[chip_name] = chip + self.pin_resolvers[chip_name] = PinResolver() def add_printer_objects(config): config.get_printer().add_object('pins', PrinterPins()) -- cgit v1.2.3-70-g09d2