diff --git a/misc/config_tools/board_inspector/board_inspector.py b/misc/config_tools/board_inspector/board_inspector.py index 43485e8c2..a2373e2e8 100755 --- a/misc/config_tools/board_inspector/board_inspector.py +++ b/misc/config_tools/board_inspector/board_inspector.py @@ -102,6 +102,7 @@ def main(board_name, board_xml, args): root_node.append(lxml.etree.Element("memory")) root_node.append(lxml.etree.Element("ioapics")) root_node.append(lxml.etree.Element("devices")) + root_node.append(lxml.etree.Element("device-classes")) extractors_path = os.path.join(script_dir, "extractors") extractors = [f for f in os.listdir(extractors_path) if f[:2].isdigit()] diff --git a/misc/config_tools/board_inspector/extractors/70-device-classes.py b/misc/config_tools/board_inspector/extractors/70-device-classes.py new file mode 100644 index 000000000..89ed6a18f --- /dev/null +++ b/misc/config_tools/board_inspector/extractors/70-device-classes.py @@ -0,0 +1,42 @@ +# Copyright (C) 2022 Intel Corporation. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +import re, os +import logging +from extractors.helpers import add_child, get_node + +SYS_DEVICES_CLASS_PATH = "/sys/class/input/" + +def get_input_ids(): + input_ids = list() + root_regex = re.compile("input([0-9]+)") + for root in filter(lambda x: x.startswith("input"), os.listdir(SYS_DEVICES_CLASS_PATH)): + m = root_regex.match(root) + if m: + input_ids.append(int(m.group(1))) + return sorted(input_ids) + +def extract_topology(device_classes_node): + inputs_node = add_child(device_classes_node, "inputs", None) + input_ids = get_input_ids() + for id in input_ids: + input_node = add_child(inputs_node, "input", None) + try: + with open("/sys/class/input/input{}/name".format(id), "r") as f: + res = f.read().strip() + add_child(input_node, "name", res) + except Exception as e: + logging.warning(f"Failed to read the data of /sys/class/input/input{id}/name: {e}") + + try: + with open("/sys/class/input/input{}/phys".format(id), "r") as f: + res = f.read().strip() + add_child(input_node, "phys", res) + except Exception as e: + logging.warning(f"Failed to read the data of /sys/class/input/input{id}/phys: {e}") + +def extract(args, board_etree): + device_classes_node = get_node(board_etree, "//device-classes") + extract_topology(device_classes_node) \ No newline at end of file