Skip to content

Commit 03a9495

Browse files
crawfxrdjackpot51
authored andcommitted
hid_backlight: Check color_left if color doesn't exist
Signed-off-by: Tim Crawford <tcrawford@system76.com>
1 parent 281c3b5 commit 03a9495

File tree

1 file changed

+39
-17
lines changed

1 file changed

+39
-17
lines changed

src/hid_backlight.rs

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use hidapi::{HidApi, HidDevice, HidResult};
66
use inotify::{Inotify, WatchMask};
77
use std::{fs, path::Path};
88

9+
const USB_VID_ITE: u16 = 0x048d;
10+
911
fn keyboard(device: &HidDevice, brightness: u8, color: u32) -> HidResult<()> {
1012
// TODO: reset
1113
let raw_brightness = ((u16::from(brightness) * 10 + 254) / 255) as u8;
@@ -83,37 +85,57 @@ pub fn daemon() {
8385
return;
8486
}
8587

86-
// TODO: check for existence of files
88+
let mut inotify = Inotify::init().unwrap();
89+
let mut watches = inotify.watches();
90+
8791
let brightness_file = dir.join("brightness");
92+
if brightness_file.exists() {
93+
watches.add(&brightness_file, WatchMask::MODIFY).unwrap();
94+
}
95+
8896
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+
89103
let color_file = dir.join("color");
104+
let color_left_file = dir.join("color_left");
90105

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();
99113
}
100114

101115
let mut buffer = [0; 1024];
102116
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+
};
109131
let color = u32::from_str_radix(color_string.trim(), 16).unwrap();
110132

111133
let mut devices = 0;
112134

113135
for info in api.device_list() {
114136
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,
117139
_ => continue,
118140
};
119141

0 commit comments

Comments
 (0)