Coverage for linuxpy/codegen/input.py: 0%
14 statements
« prev ^ index » next coverage.py v7.6.8, created at 2025-05-27 13:54 +0200
« prev ^ index » next coverage.py v7.6.8, created at 2025-05-27 13:54 +0200
1#
2# This file is part of the linuxpy project
3#
4# Copyright (c) 2023 Tiago Coutinho
5# Distributed under the GPLv3 license. See LICENSE for more info.
7import pathlib
9from .base import CEnum, run
11HEADERS = [
12 "/usr/include/linux/input.h",
13 "/usr/include/linux/uinput.h",
14 "/usr/include/linux/input-event-codes.h",
15]
18TEMPLATE = """\
19#
20# This file is part of the linuxpy project
21#
22# Copyright (c) 2023 Tiago Coutinho
23# Distributed under the GPLv3 license. See LICENSE for more info.
25# This file has been generated by {name}
26# Date: {date}
27# System: {system}
28# Release: {release}
29# Version: {version}
31import enum
33from linuxpy.ctypes import POINTER, Struct, Union, cchar, ccharp, cint, cuint, culonglong, i16, timeval, u8, u16
34from linuxpy.ioctl import IO as _IO, IOR as _IOR, IOW as _IOW, IOWR as _IOWR
37{enums_body}
40{structs_body}
43{iocs_body}"""
46this_dir = pathlib.Path(__file__).parent
49class IOCEnum(CEnum):
50 def add_item(self, name, value):
51 value = value.replace("UINPUT_IOCTL_BASE", '"U"')
52 super().add_item(name, value)
55# macros from #define statements
56MACRO_ENUMS = [
57 IOCEnum("UIOC", "UI_", filter=lambda _, value: "_IO" in value),
58 CEnum("Property", "INPUT_PROP_"),
59 CEnum(
60 "EventType",
61 "EV_",
62 filter=lambda name, _: name not in {"EV_VERSION", "EV_UINPUT"},
63 ),
64 CEnum("Key", ["KEY_", "BTN_"], with_prefix=True),
65 CEnum("Relative", "REL_"),
66 CEnum("Absolute", "ABS_"),
67 CEnum("Miscelaneous", "MSC_"),
68 CEnum("Synchronization", "SYN_"),
69 CEnum("Led", "LED_"),
70 CEnum("ID", "ID_"),
71 CEnum("Bus", "BUS_"),
72 CEnum("MultiTouch", "MT_TOOL_"),
73 CEnum("ForceFeedbackStatus", "FF_STATUS_"),
74 CEnum("ForceFeedback", "FF_"),
75 CEnum("UIForceFeedback", "UI_FF_"),
76 CEnum("Sound", "SND_"),
77 CEnum("Switch", "SW_"),
78 CEnum("AutoRepeat", "REP_"),
79 # IOC values are too complex to generate for now
80 # CEnum("IOC", "EVIOC")
81]
84def main(output=this_dir.parent / "input" / "raw.py"):
85 run(__name__, HEADERS, TEMPLATE, MACRO_ENUMS, output=output)
88if __name__ == "__main__":
89 main()