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

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. 

6 

7import pathlib 

8 

9from .base import CEnum, run 

10 

11HEADERS = [ 

12 "/usr/include/linux/input.h", 

13 "/usr/include/linux/uinput.h", 

14 "/usr/include/linux/input-event-codes.h", 

15] 

16 

17 

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. 

24 

25# This file has been generated by {name} 

26# Date: {date} 

27# System: {system} 

28# Release: {release} 

29# Version: {version} 

30 

31import enum 

32 

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 

35 

36 

37{enums_body} 

38 

39 

40{structs_body} 

41 

42 

43{iocs_body}""" 

44 

45 

46this_dir = pathlib.Path(__file__).parent 

47 

48 

49class IOCEnum(CEnum): 

50 def add_item(self, name, value): 

51 value = value.replace("UINPUT_IOCTL_BASE", '"U"') 

52 super().add_item(name, value) 

53 

54 

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] 

82 

83 

84def main(output=this_dir.parent / "input" / "raw.py"): 

85 run(__name__, HEADERS, TEMPLATE, MACRO_ENUMS, output=output) 

86 

87 

88if __name__ == "__main__": 

89 main()