diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2019-03-31 20:30:14 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2019-04-04 18:29:31 -0400 |
commit | 1ab02e522565ba991e13a0629041cadf60066926 (patch) | |
tree | 2b139b88fdec859ea0ad24677aaccdd5b14ea6a9 /klippy/pins.py | |
parent | 4c3d50693ee37f82ff2edad6a9779bcfd56fca1a (diff) | |
download | kutter-1ab02e522565ba991e13a0629041cadf60066926.tar.gz kutter-1ab02e522565ba991e13a0629041cadf60066926.tar.xz kutter-1ab02e522565ba991e13a0629041cadf60066926.zip |
bus: Support bus enumerations and add support for reserved pins
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/pins.py')
-rw-r--r-- | klippy/pins.py | 15 |
1 files changed, 14 insertions, 1 deletions
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<prefix>[ _]pin=)(?P<name>[^ ]*)') 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: |