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