@@ -6,6 +6,8 @@ use hidapi::{HidApi, HidDevice, HidResult};
6
6
use inotify:: { Inotify , WatchMask } ;
7
7
use std:: { fs, path:: Path } ;
8
8
9
+ const USB_VID_ITE : u16 = 0x048d ;
10
+
9
11
fn keyboard ( device : & HidDevice , brightness : u8 , color : u32 ) -> HidResult < ( ) > {
10
12
// TODO: reset
11
13
let raw_brightness = ( ( u16:: from ( brightness) * 10 + 254 ) / 255 ) as u8 ;
@@ -83,37 +85,57 @@ pub fn daemon() {
83
85
return ;
84
86
}
85
87
86
- // TODO: check for existence of files
88
+ let mut inotify = Inotify :: init ( ) . unwrap ( ) ;
89
+ let mut watches = inotify. watches ( ) ;
90
+
87
91
let brightness_file = dir. join ( "brightness" ) ;
92
+ if brightness_file. exists ( ) {
93
+ watches. add ( & brightness_file, WatchMask :: MODIFY ) . unwrap ( ) ;
94
+ }
95
+
88
96
let brightness_hw_changed_file = dir. join ( "brightness_hw_changed" ) ;
97
+ if brightness_hw_changed_file. exists ( ) {
98
+ if let Err ( e) = watches. add ( & brightness_hw_changed_file, WatchMask :: MODIFY ) {
99
+ log:: warn!( "hid_backlight: failed to watch hardware changed file: {}" , e) ;
100
+ }
101
+ }
102
+
89
103
let color_file = dir. join ( "color" ) ;
104
+ let color_left_file = dir. join ( "color_left" ) ;
90
105
91
- let mut inotify = Inotify :: init ( ) . unwrap ( ) ;
92
- let mut watches = inotify. watches ( ) ;
93
- watches. add ( & brightness_file, WatchMask :: MODIFY ) . unwrap ( ) ;
94
- if let Err ( e) = watches. add ( & brightness_hw_changed_file, WatchMask :: MODIFY ) {
95
- log:: warn!( "hid_backlight: failed to watch hardware changed file: {}" , e) ;
96
- }
97
- if let Err ( e) = watches. add ( & color_file, WatchMask :: MODIFY ) {
98
- log:: warn!( "hid_backlight: failed to watch keyboard color: {}" , e) ;
106
+ if color_file. exists ( ) {
107
+ if let Err ( e) = watches. add ( & color_file, WatchMask :: MODIFY ) {
108
+ log:: warn!( "hid_backlight: failed to watch keyboard color: {}" , e) ;
109
+ }
110
+ } else if color_left_file. exists ( ) {
111
+ // XXX: Watch other zones?
112
+ watches. add ( & color_left_file, WatchMask :: MODIFY ) . unwrap ( ) ;
99
113
}
100
114
101
115
let mut buffer = [ 0 ; 1024 ] ;
102
116
loop {
103
- let brightness_string = fs:: read_to_string ( & brightness_file) . unwrap ( ) ;
104
- let brightness = brightness_string. trim ( ) . parse :: < u8 > ( ) . unwrap ( ) ;
105
-
106
- let color_string = fs:: read_to_string ( & color_file)
107
- // Fallback for non-colored keyboards
108
- . unwrap_or_else ( |_| String :: from ( "FFFFFF" ) ) ;
117
+ let brightness = if brightness_file. exists ( ) {
118
+ let brightness_string = fs:: read_to_string ( & brightness_file) . unwrap ( ) ;
119
+ brightness_string. trim ( ) . parse :: < u8 > ( ) . unwrap ( )
120
+ } else {
121
+ 0
122
+ } ;
123
+
124
+ let color_string = if color_file. exists ( ) {
125
+ fs:: read_to_string ( & color_file) . unwrap ( )
126
+ } else if color_left_file. exists ( ) {
127
+ fs:: read_to_string ( & color_left_file) . unwrap ( )
128
+ } else {
129
+ String :: from ( "FFFFFF" )
130
+ } ;
109
131
let color = u32:: from_str_radix ( color_string. trim ( ) , 16 ) . unwrap ( ) ;
110
132
111
133
let mut devices = 0 ;
112
134
113
135
for info in api. device_list ( ) {
114
136
let f = match ( info. vendor_id ( ) , info. product_id ( ) ) {
115
- ( 0x048d , 0x8297 ) => lightguide,
116
- ( 0x048d , 0x8910 ) => keyboard,
137
+ ( USB_VID_ITE , 0x8297 ) => lightguide,
138
+ ( USB_VID_ITE , 0x8910 ) => keyboard,
117
139
_ => continue ,
118
140
} ;
119
141
0 commit comments