Skip to content

Commit 4cedb57

Browse files
committed
Add leds utils
1 parent ccf9db3 commit 4cedb57

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

src/arduino/app_utils/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from .jsonparser import *
1313
from .logger import *
1414
from .slidingwindowbuffer import *
15-
from .userinput import *
15+
from .leds import *
1616

1717
__all__ = [
1818
"App",
@@ -31,4 +31,5 @@
3131
"SineGenerator",
3232
"SlidingWindowBuffer",
3333
"UserTextInput",
34+
"Leds",
3435
]

src/arduino/app_utils/leds.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from arduino.app_utils import Logger, Bridge
2+
3+
logger = Logger(__name__)
4+
5+
LED_IDS = [1, 2, 3, 4] # Supported LED IDs
6+
7+
LED_BRIGHTNESS_FILES = [
8+
"/sys/class/leds/red:user/brightness",
9+
"/sys/class/leds/green:user/brightness",
10+
"/sys/class/leds/blue:user/brightness",
11+
"/sys/class/leds/red:panic/brightness",
12+
"/sys/class/leds/green:wlan/brightness",
13+
"/sys/class/leds/blue:bt/brightness",
14+
]
15+
16+
def set_led1_color(r, g, b):
17+
write_led_file(LED_BRIGHTNESS_FILES[0], r)
18+
write_led_file(LED_BRIGHTNESS_FILES[1], g)
19+
write_led_file(LED_BRIGHTNESS_FILES[2], b)
20+
21+
def set_led2_color(r, g, b):
22+
write_led_file(LED_BRIGHTNESS_FILES[3], r)
23+
write_led_file(LED_BRIGHTNESS_FILES[4], g)
24+
write_led_file(LED_BRIGHTNESS_FILES[5], b)
25+
26+
def write_led_file(led_file, color):
27+
try:
28+
with open(led_file, "w") as f:
29+
f.write(f"{color}\n")
30+
except Exception as e:
31+
print(f"Error writing to {led_file}: {e}")
32+
33+
class Leds:
34+
@staticmethod
35+
def set_led_color(ledid: int, rgb_color: dict):
36+
try:
37+
if ledid not in LED_IDS:
38+
raise ValueError(f"Unknown led '{ledid}'")
39+
40+
if not rgb_color or not all(k in rgb_color for k in ("r", "g", "b")):
41+
raise ValueError("Color must be an object with 'r', 'g', 'b' keys")
42+
43+
# Led 1 and 2 are controlled by Python code directly (MPU), while Led 3 and 4 are controlled via Bridge (MCU)
44+
match ledid:
45+
case 1:
46+
set_led1_color(rgb_color['r'], rgb_color['g'], rgb_color['b'])
47+
case 2:
48+
set_led2_color(rgb_color['r'], rgb_color['g'], rgb_color['b'])
49+
case 3 | 4:
50+
Bridge.call("set_led_color", ledid, rgb_color['r'], rgb_color['g'], rgb_color['b'])
51+
52+
except Exception as e:
53+
Logger(__name__).error(f"LED color set error: {e}")
54+
55+
Leds = Leds()

0 commit comments

Comments
 (0)