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:
Kevin O'Connor 2020-11-20 11:36:36 -05:00
parent 37b475815e
commit bdd938b578
4 changed files with 43 additions and 25 deletions

View file

@ -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)