mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-12-24 08:38:34 -07:00
Merge f045d0858d into 8b58aa1302
This commit is contained in:
commit
d64004458c
1 changed files with 38 additions and 9 deletions
|
|
@ -32,6 +32,25 @@ def resolve_bus_name(mcu, param, bus):
|
|||
pin_resolver.reserve_pin(pin, bus)
|
||||
return bus
|
||||
|
||||
def format_cfg_line(params):
|
||||
if params.get('pin') is not None:
|
||||
definition = "%s:%s" % (params['chip_name'], params['pin'])
|
||||
else:
|
||||
definition = "%s" % (params.get("value"))
|
||||
return "%s = %s" % (params['cfg_key'], definition)
|
||||
|
||||
def validate_pins(config, pins_params):
|
||||
ppins = config.get_printer().lookup_object("pins")
|
||||
for i in range(len(pins_params)-1):
|
||||
if pins_params[i].get('chip') == pins_params[i+1].get('chip'):
|
||||
continue
|
||||
msg = """
|
||||
# Pins MUST be on the same MCU
|
||||
[%s]
|
||||
""" % (config.get_name(),)
|
||||
for pin_params in pins_params:
|
||||
msg += "%s\n" % (format_cfg_line(pin_params),)
|
||||
raise ppins.error(msg)
|
||||
|
||||
######################################################################
|
||||
# SPI
|
||||
|
|
@ -136,10 +155,15 @@ def MCU_SPI_from_config(config, mode, pin_option="cs_pin",
|
|||
for name in ['miso', 'mosi', 'sclk']]
|
||||
sw_pin_params = [ppins.lookup_pin(config.get(name), share_type=name)
|
||||
for name in sw_pin_names]
|
||||
for pin_params in sw_pin_params:
|
||||
if pin_params['chip'] != mcu:
|
||||
raise ppins.error("%s: spi pins must be on same mcu" % (
|
||||
config.get_name(),))
|
||||
# Enrich pins info
|
||||
for i in range(len(sw_pin_params)):
|
||||
sw_pin_params[i]['cfg_key'] = sw_pin_params[i]['share_type']
|
||||
# Define CS as virtual pin to reuse validation
|
||||
vpin_params = []
|
||||
if pin is not None:
|
||||
cs_pin_params["cfg_key"] = pin_option
|
||||
vpin_params = [cs_pin_params]
|
||||
validate_pins(config, sw_pin_params + vpin_params)
|
||||
sw_pins = tuple([pin_params['pin'] for pin_params in sw_pin_params])
|
||||
bus = None
|
||||
else:
|
||||
|
|
@ -227,7 +251,6 @@ class MCU_I2C:
|
|||
def MCU_I2C_from_config(config, default_addr=None, default_speed=100000):
|
||||
# Load bus parameters
|
||||
printer = config.get_printer()
|
||||
i2c_mcu = mcu.get_printer_mcu(printer, config.get('i2c_mcu', 'mcu'))
|
||||
speed = config.getint('i2c_speed', default_speed, minval=100000)
|
||||
if default_addr is None:
|
||||
addr = config.getint('i2c_address', minval=0, maxval=127)
|
||||
|
|
@ -240,13 +263,19 @@ def MCU_I2C_from_config(config, default_addr=None, default_speed=100000):
|
|||
for name in ['scl', 'sda']]
|
||||
sw_pin_params = [ppins.lookup_pin(config.get(name), share_type=name)
|
||||
for name in sw_pin_names]
|
||||
for pin_params in sw_pin_params:
|
||||
if pin_params['chip'] != i2c_mcu:
|
||||
raise ppins.error("%s: i2c pins must be on same mcu" % (
|
||||
config.get_name(),))
|
||||
mcu_name = sw_pin_params[0]['chip_name']
|
||||
i2c_mcu = mcu.get_printer_mcu(printer, config.get('i2c_mcu', mcu_name))
|
||||
# Enrich pins info
|
||||
for i in range(len(sw_pin_params)):
|
||||
sw_pin_params[i]['cfg_key'] = sw_pin_params[i]['share_type']
|
||||
# Define MCU as virtual pin to reuse validation
|
||||
vpin_params = [{'cfg_key': 'i2c_mcu', 'chip': i2c_mcu,
|
||||
'value': i2c_mcu.get_name()}]
|
||||
validate_pins(config, sw_pin_params + vpin_params)
|
||||
sw_pins = tuple([pin_params['pin'] for pin_params in sw_pin_params])
|
||||
bus = None
|
||||
else:
|
||||
i2c_mcu = mcu.get_printer_mcu(printer, config.get('i2c_mcu', 'mcu'))
|
||||
bus = config.get('i2c_bus', None)
|
||||
sw_pins = None
|
||||
# Create MCU_I2C object
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue