aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2018-07-26 09:44:45 -0400
committerKevin O'Connor <kevin@koconnor.net>2018-07-26 09:44:45 -0400
commit273a98d39a88a372c8a2c816622e7df1f777e77d (patch)
tree2e8d4253f901a093d745127d97fd2464098d9266 /klippy/extras
parent7a9553b38a39398226d95b7569a0b889b8cdb10a (diff)
downloadkutter-273a98d39a88a372c8a2c816622e7df1f777e77d.tar.gz
kutter-273a98d39a88a372c8a2c816622e7df1f777e77d.tar.xz
kutter-273a98d39a88a372c8a2c816622e7df1f777e77d.zip
pins: Explicitly pass can_invert and can_pullup to lookup_pin()
Don't pass pin_type to lookup_pin() - instead, if a pin can be inverted or can have a pullup, then the caller must explicitly specify that when calling lookup_pin(). This simplifies the code for the cases where it is not valid to invert or pullup. Explicitly pass the pin_type to setup_pin() and have ppins.setup_pin() apply default pullup and invert flags. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras')
-rw-r--r--klippy/extras/ad5206.py4
-rw-r--r--klippy/extras/buttons.py2
-rw-r--r--klippy/extras/display/hd44780.py4
-rw-r--r--klippy/extras/display/st7920.py4
-rw-r--r--klippy/extras/display/uc1701.py4
-rw-r--r--klippy/extras/multi_pin.py8
-rw-r--r--klippy/extras/probe.py10
-rw-r--r--klippy/extras/replicape.py14
-rw-r--r--klippy/extras/spi_temperature.py3
-rw-r--r--klippy/extras/tmc2130.py9
10 files changed, 25 insertions, 37 deletions
diff --git a/klippy/extras/ad5206.py b/klippy/extras/ad5206.py
index a4764464..ec4db4e5 100644
--- a/klippy/extras/ad5206.py
+++ b/klippy/extras/ad5206.py
@@ -8,9 +8,7 @@ class ad5206:
def __init__(self, config):
ppins = config.get_printer().lookup_object('pins')
enable_pin = config.get('enable_pin')
- enable_pin_params = ppins.lookup_pin('digital_out', enable_pin)
- if enable_pin_params['invert']:
- raise ppins.error("ad5206 can not invert pin")
+ enable_pin_params = ppins.lookup_pin(enable_pin)
mcu = enable_pin_params['chip']
pin = enable_pin_params['pin']
scale = config.getfloat('scale', 1., above=0.)
diff --git a/klippy/extras/buttons.py b/klippy/extras/buttons.py
index 76727328..8c5c2bd0 100644
--- a/klippy/extras/buttons.py
+++ b/klippy/extras/buttons.py
@@ -141,7 +141,7 @@ class PrinterButtons:
mcu = mcu_name = None
pin_params_list = []
for pin in pins:
- pin_params = ppins.lookup_pin('digital_in', pin)
+ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True)
if mcu is not None and pin_params['chip'] != mcu:
raise ppins.error("button pins must be on same mcu")
mcu = pin_params['chip']
diff --git a/klippy/extras/display/hd44780.py b/klippy/extras/display/hd44780.py
index 6f1ebaab..69fdcbb8 100644
--- a/klippy/extras/display/hd44780.py
+++ b/klippy/extras/display/hd44780.py
@@ -23,15 +23,13 @@ class HD44780:
self.printer = config.get_printer()
# pin config
ppins = self.printer.lookup_object('pins')
- pins = [ppins.lookup_pin('digital_out', config.get(name + '_pin'))
+ pins = [ppins.lookup_pin(config.get(name + '_pin'))
for name in ['rs', 'e', 'd4', 'd5', 'd6', 'd7']]
mcu = None
for pin_params in pins:
if mcu is not None and pin_params['chip'] != mcu:
raise ppins.error("hd44780 all pins must be on same mcu")
mcu = pin_params['chip']
- if pin_params['invert']:
- raise ppins.error("hd44780 can not invert pin")
self.pins = [pin_params['pin'] for pin_params in pins]
self.mcu = mcu
self.oid = self.mcu.create_oid()
diff --git a/klippy/extras/display/st7920.py b/klippy/extras/display/st7920.py
index eebc3428..006b23f0 100644
--- a/klippy/extras/display/st7920.py
+++ b/klippy/extras/display/st7920.py
@@ -17,15 +17,13 @@ class ST7920:
printer = config.get_printer()
# pin config
ppins = printer.lookup_object('pins')
- pins = [ppins.lookup_pin('digital_out', config.get(name + '_pin'))
+ pins = [ppins.lookup_pin(config.get(name + '_pin'))
for name in ['cs', 'sclk', 'sid']]
mcu = None
for pin_params in pins:
if mcu is not None and pin_params['chip'] != mcu:
raise ppins.error("st7920 all pins must be on same mcu")
mcu = pin_params['chip']
- if pin_params['invert']:
- raise ppins.error("st7920 can not invert pin")
self.pins = [pin_params['pin'] for pin_params in pins]
self.mcu = mcu
self.oid = self.mcu.create_oid()
diff --git a/klippy/extras/display/uc1701.py b/klippy/extras/display/uc1701.py
index f76af041..c2b86540 100644
--- a/klippy/extras/display/uc1701.py
+++ b/klippy/extras/display/uc1701.py
@@ -17,15 +17,13 @@ class UC1701:
printer = config.get_printer()
# pin config
ppins = printer.lookup_object('pins')
- pins = [ppins.lookup_pin('digital_out', config.get(name + '_pin'))
+ pins = [ppins.lookup_pin(config.get(name + '_pin'))
for name in ['cs','a0']]
mcu = None
for pin_params in pins:
if mcu is not None and pin_params['chip'] != mcu:
raise ppins.error("uc1701 all pins must be on same mcu")
mcu = pin_params['chip']
- if pin_params['invert']:
- raise ppins.error("uc1701 can not invert pin")
self.pins = [pin_params['pin'] for pin_params in pins]
self.mcu = mcu
self.spi_oid = self.mcu.create_oid()
diff --git a/klippy/extras/multi_pin.py b/klippy/extras/multi_pin.py
index f378d400..efa9676a 100644
--- a/klippy/extras/multi_pin.py
+++ b/klippy/extras/multi_pin.py
@@ -15,21 +15,21 @@ class PrinterMultiPin:
self.pin_type = None
self.pin_list = [pin.strip() for pin in config.get('pins').split(',')]
self.mcu_pins = []
- def setup_pin(self, pin_params):
+ def setup_pin(self, pin_type, pin_params):
ppins = self.printer.lookup_object('pins')
pin_name = pin_params['pin']
pin = self.printer.lookup_object('multi_pin ' + pin_name, None)
if pin is not self:
if pin is None:
raise ppins.error("multi_pin %s not configured" % (pin_name,))
- return pin.setup_pin(pin_params)
+ return pin.setup_pin(pin_type, pin_params)
if self.pin_type is not None:
raise ppins.error("Can't setup multi_pin %s twice" % (pin_name,))
- self.pin_type = pin_params['type']
+ self.pin_type = pin_type
invert = ""
if pin_params['invert']:
invert = "!"
- self.mcu_pins = [ppins.setup_pin(self.pin_type, invert + pin_desc)
+ self.mcu_pins = [ppins.setup_pin(pin_type, invert + pin_desc)
for pin_desc in self.pin_list]
return self
def get_mcu(self):
diff --git a/klippy/extras/probe.py b/klippy/extras/probe.py
index 47ea7d73..3c27e73b 100644
--- a/klippy/extras/probe.py
+++ b/klippy/extras/probe.py
@@ -26,10 +26,11 @@ class PrinterProbe:
self.z_position = pconfig.getfloat('minimum_z_position', 0.)
# Create an "endstop" object to handle the probe pin
ppins = self.printer.lookup_object('pins')
- pin_params = ppins.lookup_pin('endstop', config.get('pin'))
+ pin = config.get('pin')
+ pin_params = ppins.lookup_pin(pin, can_invert=True, can_pullup=True)
mcu = pin_params['chip']
mcu.add_config_object(self)
- self.mcu_probe = mcu.setup_pin(pin_params)
+ self.mcu_probe = mcu.setup_pin('endstop', pin_params)
if (config.get('activate_gcode', None) is not None or
config.get('deactivate_gcode', None) is not None):
self.mcu_probe = ProbeEndstopWrapper(config, self.mcu_probe)
@@ -46,9 +47,8 @@ class PrinterProbe:
kin = self.printer.lookup_object('toolhead').get_kinematics()
for stepper in kin.get_steppers('Z'):
stepper.add_to_endstop(self.mcu_probe)
- def setup_pin(self, pin_params):
- if (pin_params['pin'] != 'z_virtual_endstop'
- or pin_params['type'] != 'endstop'):
+ def setup_pin(self, pin_type, pin_params):
+ if pin_type != 'endstop' or pin_params['pin'] != 'z_virtual_endstop':
raise pins.error("Probe virtual endstop only useful as endstop pin")
if pin_params['invert'] or pin_params['pullup']:
raise pins.error("Can not pullup/invert probe virtual endstop")
diff --git a/klippy/extras/replicape.py b/klippy/extras/replicape.py
index 5bc851e9..91e75550 100644
--- a/klippy/extras/replicape.py
+++ b/klippy/extras/replicape.py
@@ -14,10 +14,10 @@ REPLICAPE_PCA9685_CYCLE_TIME = .001
PIN_MIN_TIME = 0.100
class pca9685_pwm:
- def __init__(self, replicape, channel, pin_params):
+ def __init__(self, replicape, channel, pin_type, pin_params):
self._replicape = replicape
self._channel = channel
- if pin_params['type'] not in ['digital_out', 'pwm']:
+ if pin_type not in ['digital_out', 'pwm']:
raise pins.error("Pin type not supported on replicape")
self._mcu = replicape.host_mcu
self._mcu.add_config_object(self)
@@ -90,14 +90,14 @@ class pca9685_pwm:
self.set_pwm(print_time, 0.)
class ReplicapeDACEnable:
- def __init__(self, replicape, channel, pin_params):
- if pin_params['type'] != 'digital_out':
+ def __init__(self, replicape, channel, pin_type, pin_params):
+ if pin_type != 'digital_out':
raise pins.error("Replicape virtual enable pin must be digital_out")
if pin_params['invert']:
raise pins.error("Replicape virtual enable pin can not be inverted")
self.mcu = replicape.host_mcu
self.value = replicape.stepper_dacs[channel]
- self.pwm = pca9685_pwm(replicape, channel, pin_params)
+ self.pwm = pca9685_pwm(replicape, channel, pin_type, pin_params)
def get_mcu(self):
return self.mcu
def setup_max_duration(self, max_duration):
@@ -221,12 +221,12 @@ class Replicape:
clock = self.host_mcu.print_time_to_clock(print_time)
# XXX - the spi_send message should be scheduled
self.spi_send_cmd.send([self.sr_oid, sr], minclock=clock, reqclock=clock)
- def setup_pin(self, pin_params):
+ def setup_pin(self, pin_type, pin_params):
pin = pin_params['pin']
if pin not in self.pins:
raise pins.error("Unknown replicape pin %s" % (pin,))
pclass, channel = self.pins[pin]
- return pclass(self, channel, pin_params)
+ return pclass(self, channel, pin_type, pin_params)
def load_config(config):
return Replicape(config)
diff --git a/klippy/extras/spi_temperature.py b/klippy/extras/spi_temperature.py
index 10ea1a8f..18e6dc69 100644
--- a/klippy/extras/spi_temperature.py
+++ b/klippy/extras/spi_temperature.py
@@ -26,8 +26,7 @@ class SensorBase:
self.min_sample_value = self.max_sample_value = 0
self._report_clock = 0
ppins = config.get_printer().lookup_object('pins')
- sensor_pin = config.get('sensor_pin')
- pin_params = ppins.lookup_pin('digital_out', sensor_pin)
+ pin_params = ppins.lookup_pin(config.get('sensor_pin'))
self.mcu = mcu = pin_params['chip']
pin = pin_params['pin']
# SPI bus configuration
diff --git a/klippy/extras/tmc2130.py b/klippy/extras/tmc2130.py
index 001e6229..949145f2 100644
--- a/klippy/extras/tmc2130.py
+++ b/klippy/extras/tmc2130.py
@@ -26,9 +26,7 @@ class TMC2130:
# pin setup
ppins = self.printer.lookup_object("pins")
cs_pin = config.get('cs_pin')
- cs_pin_params = ppins.lookup_pin('digital_out', cs_pin)
- if cs_pin_params['invert']:
- raise pins.error("tmc2130 can not invert pin")
+ cs_pin_params = ppins.lookup_pin(cs_pin)
self.mcu = cs_pin_params['chip']
pin = cs_pin_params['pin']
self.oid = self.mcu.create_oid()
@@ -113,9 +111,8 @@ class TMC2130:
step_dist = stepper_config.getfloat('step_distance')
step_dist_256 = step_dist / (1 << self.mres)
return int(TMC_FREQUENCY * step_dist_256 / velocity + .5)
- def setup_pin(self, pin_params):
- if (pin_params['pin'] != 'virtual_endstop'
- or pin_params['type'] != 'endstop'):
+ def setup_pin(self, pin_type, pin_params):
+ if pin_type != 'endstop' or pin_params['pin'] != 'virtual_endstop':
raise pins.error("tmc2130 virtual endstop only useful as endstop")
if pin_params['invert'] or pin_params['pullup']:
raise pins.error("Can not pullup/invert tmc2130 virtual endstop")