crystalfontz.dbus.effects

DbusEffectClient

Bases: EffectClient

A facade over a DBusClient for use by effects.

Source code in crystalfontz/dbus/effects.py
 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()

load(client, timeout=TimeoutM.none, retry_times=RetryTimesM.none) async classmethod

Given a DBusClient, create a DbusEffectClient.

Source code in crystalfontz/dbus/effects.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@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)