pins: Simplify alias code

Simplify the pin aliasing code now that all pins are defined via
enumerations.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2019-03-12 12:47:07 -04:00 committed by KevinOConnor
parent df6136802a
commit 618b374ae5
1 changed files with 9 additions and 25 deletions

View File

@ -1,6 +1,6 @@
# Pin name to pin number definitions # Pin name to pin number definitions
# #
# Copyright (C) 2016-2018 Kevin O'Connor <kevin@koconnor.net> # Copyright (C) 2016-2019 Kevin O'Connor <kevin@koconnor.net>
# #
# This file may be distributed under the terms of the GNU GPLv3 license. # This file may be distributed under the terms of the GNU GPLv3 license.
import re import re
@ -9,14 +9,6 @@ class error(Exception):
pass pass
######################################################################
# Hardware pin names
######################################################################
MCU_PINS = {
}
###################################################################### ######################################################################
# Arduino mappings # Arduino mappings
###################################################################### ######################################################################
@ -79,7 +71,7 @@ Arduino_from_mcu = {
"sam3x8e": (Arduino_Due, Arduino_Due_analog), "sam3x8e": (Arduino_Due, Arduino_Due_analog),
} }
def update_map_arduino(pins, mcu): def get_aliases_arduino(mcu):
if mcu not in Arduino_from_mcu: if mcu not in Arduino_from_mcu:
raise error("Arduino aliases not supported on mcu '%s'" % (mcu,)) raise error("Arduino aliases not supported on mcu '%s'" % (mcu,))
dpins, apins = Arduino_from_mcu[mcu] dpins, apins = Arduino_from_mcu[mcu]
@ -88,9 +80,7 @@ def update_map_arduino(pins, mcu):
aliases['ar' + str(i)] = dpins[i] aliases['ar' + str(i)] = dpins[i]
for i in range(len(apins)): for i in range(len(apins)):
aliases['analog%d' % (i,)] = apins[i] aliases['analog%d' % (i,)] = apins[i]
if pins: return aliases
aliases = {a: pins[v] for a, v in aliases.items()}
pins.update(aliases)
###################################################################### ######################################################################
@ -126,10 +116,10 @@ beagleboneblack_mappings = {
'P9_38': 'AIN3', 'P9_39': 'AIN0', 'P9_40': 'AIN1', 'P9_38': 'AIN3', 'P9_39': 'AIN0', 'P9_40': 'AIN1',
} }
def update_map_beaglebone(pins, mcu): def get_aliases_beaglebone(mcu):
if mcu != 'pru': if mcu != 'pru':
raise error("Beaglebone aliases not supported on mcu '%s'" % (mcu,)) raise error("Beaglebone aliases not supported on mcu '%s'" % (mcu,))
pins.update(beagleboneblack_mappings) return beagleboneblack_mappings
###################################################################### ######################################################################
@ -142,25 +132,19 @@ class PinResolver:
def __init__(self, mcu_type, validate_aliases=True): def __init__(self, mcu_type, validate_aliases=True):
self.mcu_type = mcu_type self.mcu_type = mcu_type
self.validate_aliases = validate_aliases self.validate_aliases = validate_aliases
self.pins = dict(MCU_PINS.get(mcu_type, {})) self.aliases = {}
self.active_pins = {} self.active_pins = {}
def update_aliases(self, mapping_name): def update_aliases(self, mapping_name):
self.pins = dict(MCU_PINS.get(self.mcu_type, {}))
if mapping_name == 'arduino': if mapping_name == 'arduino':
update_map_arduino(self.pins, self.mcu_type) self.aliases = get_aliases_arduino(self.mcu_type)
elif mapping_name == 'beaglebone': elif mapping_name == 'beaglebone':
update_map_beaglebone(self.pins, self.mcu_type) self.aliases = get_aliases_beaglebone(self.mcu_type)
else: else:
raise error("Unknown pin alias mapping '%s'" % (mapping_name,)) raise error("Unknown pin alias mapping '%s'" % (mapping_name,))
def update_command(self, cmd): def update_command(self, cmd):
def pin_fixup(m): def pin_fixup(m):
name = m.group('name') name = m.group('name')
if name in self.pins: pin_id = self.aliases.get(name, name)
pin_id = self.pins[name]
elif not self.pins:
pin_id = name
else:
raise error("Unable to translate pin name: %s" % (cmd,))
if (name != self.active_pins.setdefault(pin_id, name) if (name != self.active_pins.setdefault(pin_id, name)
and self.validate_aliases): and self.validate_aliases):
raise error("pin %s is an alias for %s" % ( raise error("pin %s is an alias for %s" % (