Source code for pynq.metadata.gpio_dict_view

# Copyright (C) 2022 Xilinx, Inc
# SPDX-License-Identifier: BSD-3-Clause

import json
from typing import Dict

from pynqmetadata import Module, ProcSysCore, SubordinatePort
from pynqmetadata.errors import FeatureNotYetImplemented

from .append_drivers_pass import DriverExtension

from .metadata_view import MetadataView


[docs]class GpioDictView(MetadataView): """ Provides a view onto the Metadata object that displays all GPIO pins controlled by the PS. Models a dictionary where the keys are the names of the pin and each entry contains: * the index of the pin :int * the current state of the pin : str """ def __init__(self, module: Module) -> None: super().__init__(module=module) self._state = {} @property def view(self) -> Dict: repr_dict = {} for core in self._md.blocks.values(): if isinstance(core, ProcSysCore): gpio = core.gpio for n, i in gpio.items(): repr_dict[n] = {} if n in self._state: repr_dict[n]["state"] = self._state[n] else: repr_dict[n]["state"] = None pins = set() for p in i["pins"]: ref: str = f"{p.parent().parent().hierarchy_name}/{p.name}" pins.add(ref) repr_dict[n]["pins"] = pins repr_dict[n]["index"] = int(i["index"]) return repr_dict def __setitem__(self, key: str, value: object) -> None: """Set the state of an item in the gpio_dict""" self._state[key] = value