-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathkeyboard_backlight.py
More file actions
84 lines (67 loc) · 2.92 KB
/
keyboard_backlight.py
File metadata and controls
84 lines (67 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
from typing import Dict
from system76_backlight_manager.common import get_laptop_model, read_file, write_file
from system76_backlight_manager.enums import Mode, Position
from system76_backlight_manager.paths.backlights import (
FOUR_BACKLIGHT_PATH,
SINGLE_BACKLIGHT_PATH,
LEGACY_SINGLE_BACKLIGHT_PATH,
)
class KeyboardBacklight:
MODEL_NUMBER_BACKLIGHT_MAPPING = {
"bonw14": SINGLE_BACKLIGHT_PATH,
"darp5": LEGACY_SINGLE_BACKLIGHT_PATH,
"darp6": SINGLE_BACKLIGHT_PATH,
"gaze17-3060-b": SINGLE_BACKLIGHT_PATH,
"oryp4": FOUR_BACKLIGHT_PATH,
"oryp5": FOUR_BACKLIGHT_PATH,
"oryp6": SINGLE_BACKLIGHT_PATH,
"oryp4": FOUR_BACKLIGHT_PATH,
"serw11": FOUR_BACKLIGHT_PATH,
"serw12": FOUR_BACKLIGHT_PATH,
# More to come
}
def __init__(self):
self.laptop_model = get_laptop_model()
keyboard_backlight_paths = self.MODEL_NUMBER_BACKLIGHT_MAPPING.get(
self.laptop_model,
)
if keyboard_backlight_paths is None:
raise RuntimeError(f"{self.laptop_model} is not supported by this script")
self.max_brightness_path = keyboard_backlight_paths["max_brightness_path"]
self.brightness_path = keyboard_backlight_paths["brightness_path"]
self.brightness_color_paths = keyboard_backlight_paths["brightness_color"]
def breathe(self) -> None:
self._ramp_up()
self._ramp_down()
def static(self, brightness_level: int) -> None:
if brightness_level > self.max_brightness:
raise RuntimeError("Brightness level must not exceed {self.max_brightness}")
self.brightness = brightness_level
def set_color(self, color: str, position: Position) -> None:
if path := self.brightness_color_paths.get(position.name, None):
write_file(path, color)
else:
raise RuntimeError(f"{position} is not supported for model {self.laptop_model}")
@property
def brightness(self) -> int:
return int(read_file(path=self.brightness_path))
@brightness.setter
def brightness(self, value: int):
write_file(path=self.brightness_path, value=str(value))
@property
def max_brightness(self):
return int(read_file(path=self.max_brightness_path))
def _ramp_up(self):
current_brightness = self._read_brightness()
while current_brightness < self.brightness_max_value:
self._set_brightness(value=current_brightness)
current_brightness += 1
def _ramp_down(self):
current_brightness = self._read_brightness()
while current_brightness > self.brightness_min_value:
self._set_brightness(value=current_brightness)
current_brightness -= 1
def update_color(self, color):
write_file(path=self.brightness_color, value=color)
def is_multi_region_color(self) -> bool:
return len(self.brightness_color_paths) > 1