board_pins: Use an explicit parameter to specify mcu name(s)
Add an 'mcu' option to the board_pins config and use that to specify the name of the mcu to apply the aliases to. Support applying the aliases to multiple mcus. Add support for any number of options starting with an "aliases_" prefix. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
@@ -1,29 +1,36 @@
|
||||
# Support for custom board pin aliases
|
||||
#
|
||||
# Copyright (C) 2019 Kevin O'Connor <kevin@koconnor.net>
|
||||
# Copyright (C) 2019-2020 Kevin O'Connor <kevin@koconnor.net>
|
||||
#
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||
|
||||
class PrinterBoardAliases:
|
||||
def __init__(self, config, chip_name):
|
||||
def __init__(self, config):
|
||||
ppins = config.get_printer().lookup_object('pins')
|
||||
pin_resolver = ppins.get_pin_resolver(chip_name)
|
||||
aliases = config.get("aliases").strip()
|
||||
if aliases.endswith(','):
|
||||
aliases = aliases[:-1]
|
||||
parts = [a.split('=', 1) for a in aliases.split(',')]
|
||||
for pair in parts:
|
||||
if len(pair) != 2:
|
||||
raise ppins.error("Unable to parse aliases in %s"
|
||||
% (config.get_name(),))
|
||||
name, value = [s.strip() for s in pair]
|
||||
if value.startswith('<') and value.endswith('>'):
|
||||
pin_resolver.reserve_pin(name, value)
|
||||
else:
|
||||
pin_resolver.alias_pin(name, value)
|
||||
mcu_names = [n.strip() for n in config.get('mcu', 'mcu').split(',')]
|
||||
pin_resolvers = [ppins.get_pin_resolver(n) for n in mcu_names]
|
||||
options = ["aliases"] + config.get_prefix_options("aliases_")
|
||||
for opt in options:
|
||||
aliases = config.get(opt, "").strip()
|
||||
if not aliases:
|
||||
continue
|
||||
if aliases.endswith(','):
|
||||
aliases = aliases[:-1]
|
||||
parts = [a.split('=', 1) for a in aliases.split(',')]
|
||||
for pair in parts:
|
||||
if len(pair) != 2:
|
||||
raise ppins.error("Unable to parse aliases in %s"
|
||||
% (config.get_name(),))
|
||||
name, value = [s.strip() for s in pair]
|
||||
if value.startswith('<') and value.endswith('>'):
|
||||
for pin_resolver in pin_resolvers:
|
||||
pin_resolver.reserve_pin(name, value)
|
||||
else:
|
||||
for pin_resolver in pin_resolvers:
|
||||
pin_resolver.alias_pin(name, value)
|
||||
|
||||
def load_config(config):
|
||||
return PrinterBoardAliases(config, "mcu")
|
||||
return PrinterBoardAliases(config)
|
||||
|
||||
def load_config_prefix(config):
|
||||
return PrinterBoardAliases(config, config.get_name().split()[1])
|
||||
return PrinterBoardAliases(config)
|
||||
|
||||
Reference in New Issue
Block a user