From 1ab02e522565ba991e13a0629041cadf60066926 Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sun, 31 Mar 2019 20:30:14 -0400 Subject: bus: Support bus enumerations and add support for reserved pins Signed-off-by: Kevin O'Connor --- klippy/pins.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'klippy/pins.py') diff --git a/klippy/pins.py b/klippy/pins.py index f764b414..b1c8810e 100644 --- a/klippy/pins.py +++ b/klippy/pins.py @@ -129,8 +129,9 @@ def get_aliases_beaglebone(mcu): re_pin = re.compile(r'(?P[ _]pin=)(?P[^ ]*)') class PinResolver: - def __init__(self, mcu_type, validate_aliases=True): + def __init__(self, mcu_type, reserved_pins, validate_aliases=True): self.mcu_type = mcu_type + self.reserved_pins = reserved_pins self.validate_aliases = validate_aliases self.aliases = {} self.active_pins = {} @@ -149,6 +150,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: + raise error("pin %s is reserved for %s" % ( + name, self.reserved_pins[pin_id])) return m.group('prefix') + str(pin_id) return re_pin.sub(pin_fixup, cmd) @@ -162,6 +166,7 @@ class PrinterPins: def __init__(self): self.chips = {} self.active_pins = {} + self.reserved_pins = {} def lookup_pin(self, pin_desc, can_invert=False, can_pullup=False, share_type=None): desc = pin_desc.strip() @@ -210,6 +215,14 @@ 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 register_chip(self, chip_name, chip): chip_name = chip_name.strip() if chip_name in self.chips: -- cgit v1.2.3-70-g09d2