From 920e4e86f5cc354a339f95e99db84e00c1980e4b Mon Sep 17 00:00:00 2001 From: Luke Date: Wed, 27 Jan 2021 20:09:30 +1300 Subject: [PATCH] Trial fix for 1854 --- asus-nb-ctrl/src/ctrl_leds.rs | 59 ++++++++++++++++++++--------------- asus-nb-ctrl/src/daemon.rs | 6 +++- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/asus-nb-ctrl/src/ctrl_leds.rs b/asus-nb-ctrl/src/ctrl_leds.rs index cde1902c..30451f1f 100644 --- a/asus-nb-ctrl/src/ctrl_leds.rs +++ b/asus-nb-ctrl/src/ctrl_leds.rs @@ -281,21 +281,39 @@ impl CtrlKbdBacklight { config: Arc>, ) -> Result { // TODO: return error if *all* nodes are None + let led_node = Self::get_node_failover( + id_product, + None, + Self::scan_led_node, + ).map_or_else(|err| { + warn!("led_node: {}", err); + None + }, |node| Some(node)); + + let kbd_node = Self::get_node_failover( + id_product, + condev_iface, + Self::scan_kbd_node, + ).map_or_else(|err| { + warn!("kbd_node: {}", err); + None + }, |node| Some(node)); + + let bright_node = Self::get_kbd_bright_path(); + + if led_node.is_none() && kbd_node.is_none() && Self::get_kbd_bright_path().is_err() { + return Err(RogError::MissingFunction( + "All keyboard features missing, you may require a v5.11 series kernel or newer".into(), + )); + } + let ctrl = CtrlKbdBacklight { // Using `ok` here so we can continue without keyboard features but // still get brightness control at least... maybe... - led_node: Some(Self::get_node_failover( - id_product, - None, - Self::scan_led_node, - )?), - kbd_node: Some(Self::get_node_failover( - id_product, - condev_iface, - Self::scan_kbd_node, - )?), + led_node, + kbd_node, // TODO: Check for existance - bright_node: Self::get_kbd_bright_path()?.to_owned(), + bright_node: bright_node?.to_owned(), supported_modes, flip_effect_write: false, config, @@ -318,23 +336,12 @@ impl CtrlKbdBacklight { iface: Option<&String>, fun: fn(&str, Option<&String>) -> Result, ) -> Result { - // We do three tries here just to be certain that we avoid systemd unit - // load order issues - for n in 0..=2 { - // 0,1,2 inclusive - match fun(id_product, iface) { - Ok(o) => return Ok(o), - Err(e) => { - if n == 2 { - warn!("Looking for node: {}", e.to_string()); - std::thread::sleep(std::time::Duration::from_secs(1)); - } else { - break; - } - } + match fun(id_product, iface) { + Ok(o) => return Ok(o), + Err(e) => { + warn!("Looking for node: {}", e.to_string()); } } - // Shouldn't be possible to reach this... Err(RogError::NotFound(format!("{}, {:?}", id_product, iface))) } diff --git a/asus-nb-ctrl/src/daemon.rs b/asus-nb-ctrl/src/daemon.rs index e609d475..99831957 100644 --- a/asus-nb-ctrl/src/daemon.rs +++ b/asus-nb-ctrl/src/daemon.rs @@ -152,6 +152,7 @@ fn start_daemon() -> Result<(), Box> { ) .map_err(|err| { error!("Keyboard control: {}", err); + err }) { let tmp = Arc::new(Mutex::new(ctrl)); DbusKbdBacklight::new(tmp.clone()).add_to_server(&mut object_server); @@ -181,7 +182,10 @@ fn start_daemon() -> Result<(), Box> { object_server.with(&"/org/asuslinux/Charge".try_into()?, |obj: &CtrlCharge| { let x = obj.limit(); obj.notify_charge(x as u8) - })?; + }).map_err(|err| { + warn!("object_server notify_charge error: {}", err); + }) + .ok(); loop { if let Err(err) = object_server.try_handle_next() {