26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 | class DbusEffectClient(EffectClient):
"""
A facade over a DBusClient for use by effects.
"""
@classmethod
async def load(
cls: Type[Self],
client: DbusInterface,
timeout: TimeoutT = TimeoutM.none,
retry_times: RetryTimesT = RetryTimesM.none,
) -> Self:
"""
Given a DBusClient, create a DbusEffectClient.
"""
versions = VersionsM.unpack(await client.versions(timeout, retry_times))
device = lookup_device(
versions.model, versions.hardware_rev, versions.firmware_rev
)
return cls(client, device)
def __init__(self: Self, client: DbusInterface, device: Device) -> None:
self.client: DbusInterface = client
self.device: Device = device
async def clear_screen(
self: Self, timeout: Optional[float] = None, retry_times: Optional[int] = None
) -> ClearedScreen:
await self.client.clear_screen(
TimeoutM.pack(timeout), RetryTimesM.pack(retry_times)
)
return ClearedScreen()
async def set_cursor_position(
self: Self,
row: int,
column: int,
timeout: Optional[float] = None,
retry_times: Optional[int] = None,
) -> CursorPositionSet:
await self.client.set_cursor_position(
row, column, TimeoutM.pack(timeout), RetryTimesM.pack(retry_times)
)
return CursorPositionSet()
async def set_cursor_style(
self: Self,
style: CursorStyle,
timeout: Optional[float] = None,
retry_times: Optional[int] = None,
) -> CursorStyleSet:
await self.client.set_cursor_style(
CursorStyleM.pack(style),
TimeoutM.pack(timeout),
RetryTimesM.pack(retry_times),
)
return CursorStyleSet()
async def set_contrast(
self: Self,
contrast: float,
timeout: Optional[float] = None,
retry_times: Optional[int] = None,
) -> ContrastSet:
await self.client.set_contrast(
contrast, TimeoutM.pack(timeout), RetryTimesM.pack(retry_times)
)
return ContrastSet()
async def set_backlight(
self: Self,
lcd_brightness: float,
keypad_brightness: Optional[int] = None,
timeout: Optional[float] = None,
retry_times: Optional[int] = None,
) -> BacklightSet:
await self.client.set_backlight(
lcd_brightness,
KeypadBrightnessM.pack(keypad_brightness),
TimeoutM.pack(timeout),
RetryTimesM.pack(retry_times),
)
return BacklightSet()
async def send_data(
self: Self,
row: int,
column: int,
data: str | bytes,
timeout: Optional[float] = None,
retry_times: Optional[int] = None,
) -> DataSent:
await self.client.send_data(
row,
column,
data.encode("utf-8") if isinstance(data, str) else data,
TimeoutM.pack(timeout),
RetryTimesM.pack(retry_times),
)
return DataSent()
|