diff options
Diffstat (limited to 'klippy/pins.py')
-rw-r--r-- | klippy/pins.py | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/klippy/pins.py b/klippy/pins.py index 4f2c1db2..a160c78b 100644 --- a/klippy/pins.py +++ b/klippy/pins.py @@ -205,6 +205,7 @@ class PrinterPins: self.chips = {} self.active_pins = {} self.pin_resolvers = {} + self.allow_multi_use_pins = {} def parse_pin(self, pin_desc, can_invert=False, can_pullup=False): desc = pin_desc.strip() pullup = invert = 0 @@ -241,10 +242,12 @@ class PrinterPins: share_name = "%s:%s" % (pin_params['chip_name'], pin) if share_name in self.active_pins: share_params = self.active_pins[share_name] - if share_type is None or share_type != share_params['share_type']: + if share_name in self.allow_multi_use_pins: + pass + elif share_type is None or share_type != share_params['share_type']: raise error("pin %s used multiple times in config" % (pin,)) - if (pin_params['invert'] != share_params['invert'] - or pin_params['pullup'] != share_params['pullup']): + elif (pin_params['invert'] != share_params['invert'] + or pin_params['pullup'] != share_params['pullup']): raise error("Shared pin %s must have same polarity" % (pin,)) return share_params pin_params['share_type'] = share_type @@ -268,6 +271,10 @@ class PrinterPins: raise error("Duplicate chip name '%s'" % (chip_name,)) self.chips[chip_name] = chip self.pin_resolvers[chip_name] = PinResolver() + def allow_multi_use_pin(self, pin_desc): + pin_params = self.parse_pin(pin_desc) + share_name = "%s:%s" % (pin_params['chip_name'], pin_params['pin']) + self.allow_multi_use_pins[share_name] = True def add_printer_objects(config): config.get_printer().add_object('pins', PrinterPins()) |