aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/pins.py
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2019-08-09 11:42:50 -0400
committerKevinOConnor <kevin@koconnor.net>2019-08-19 12:57:59 -0400
commit395429be146238a7a59fb9fde28cfdd2bdab8ccc (patch)
treea4cc9b75a1efe28e826247b147193a1aa20e20c3 /klippy/pins.py
parenta482ddf582862103fdf4ef465cbad81ea46af90b (diff)
downloadkutter-395429be146238a7a59fb9fde28cfdd2bdab8ccc.tar.gz
kutter-395429be146238a7a59fb9fde28cfdd2bdab8ccc.tar.xz
kutter-395429be146238a7a59fb9fde28cfdd2bdab8ccc.zip
pins: Move reserved pin handling into PinResolver class
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/pins.py')
-rw-r--r--klippy/pins.py35
1 files changed, 18 insertions, 17 deletions
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<prefix>[ _]pin=)(?P<name>[^ ]*)')
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())