aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/pins.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/pins.py')
-rw-r--r--klippy/pins.py15
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: