mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
Add more multizone support
This commit is contained in:
@@ -286,39 +286,39 @@ impl From<&SetAuraBuiltin> for Vec<AuraEffect> {
|
|||||||
match aura {
|
match aura {
|
||||||
SetAuraBuiltin::MultiStatic(data) => {
|
SetAuraBuiltin::MultiStatic(data) => {
|
||||||
zones[0].mode = AuraModeNum::Static;
|
zones[0].mode = AuraModeNum::Static;
|
||||||
zones[0].zone = AuraZone::One;
|
zones[0].zone = AuraZone::KeyOne;
|
||||||
zones[0].colour1 = data.colour1;
|
zones[0].colour1 = data.colour1;
|
||||||
|
|
||||||
zones[1].mode = AuraModeNum::Static;
|
zones[1].mode = AuraModeNum::Static;
|
||||||
zones[1].zone = AuraZone::Two;
|
zones[1].zone = AuraZone::KeyTwo;
|
||||||
zones[1].colour1 = data.colour2;
|
zones[1].colour1 = data.colour2;
|
||||||
|
|
||||||
zones[2].mode = AuraModeNum::Static;
|
zones[2].mode = AuraModeNum::Static;
|
||||||
zones[2].zone = AuraZone::Three;
|
zones[2].zone = AuraZone::KeyThree;
|
||||||
zones[2].colour1 = data.colour3;
|
zones[2].colour1 = data.colour3;
|
||||||
|
|
||||||
zones[3].mode = AuraModeNum::Static;
|
zones[3].mode = AuraModeNum::Static;
|
||||||
zones[3].zone = AuraZone::Four;
|
zones[3].zone = AuraZone::KeyFour;
|
||||||
zones[3].colour1 = data.colour4;
|
zones[3].colour1 = data.colour4;
|
||||||
}
|
}
|
||||||
SetAuraBuiltin::MultiBreathe(data) => {
|
SetAuraBuiltin::MultiBreathe(data) => {
|
||||||
zones[0].mode = AuraModeNum::Breathe;
|
zones[0].mode = AuraModeNum::Breathe;
|
||||||
zones[0].zone = AuraZone::One;
|
zones[0].zone = AuraZone::KeyOne;
|
||||||
zones[0].colour1 = data.colour1;
|
zones[0].colour1 = data.colour1;
|
||||||
zones[0].speed = data.speed;
|
zones[0].speed = data.speed;
|
||||||
|
|
||||||
zones[1].mode = AuraModeNum::Breathe;
|
zones[1].mode = AuraModeNum::Breathe;
|
||||||
zones[1].zone = AuraZone::Two;
|
zones[1].zone = AuraZone::KeyTwo;
|
||||||
zones[1].colour1 = data.colour2;
|
zones[1].colour1 = data.colour2;
|
||||||
zones[1].speed = data.speed;
|
zones[1].speed = data.speed;
|
||||||
|
|
||||||
zones[2].mode = AuraModeNum::Breathe;
|
zones[2].mode = AuraModeNum::Breathe;
|
||||||
zones[2].zone = AuraZone::Three;
|
zones[2].zone = AuraZone::KeyThree;
|
||||||
zones[2].colour1 = data.colour3;
|
zones[2].colour1 = data.colour3;
|
||||||
zones[2].speed = data.speed;
|
zones[2].speed = data.speed;
|
||||||
|
|
||||||
zones[3].mode = AuraModeNum::Breathe;
|
zones[3].mode = AuraModeNum::Breathe;
|
||||||
zones[3].zone = AuraZone::Four;
|
zones[3].zone = AuraZone::KeyFour;
|
||||||
zones[3].colour1 = data.colour4;
|
zones[3].colour1 = data.colour4;
|
||||||
zones[3].speed = data.speed;
|
zones[3].speed = data.speed;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::laptops::LaptopLedData;
|
use crate::laptops::LaptopLedData;
|
||||||
use log::{error, info, warn};
|
use log::{error, warn};
|
||||||
use rog_aura::{AuraEffect, AuraModeNum, AuraZone, LedBrightness, LedPowerStates};
|
use rog_aura::{AuraEffect, AuraModeNum, AuraZone, LedBrightness, LedPowerStates};
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
@@ -9,65 +9,14 @@ use std::io::{Read, Write};
|
|||||||
pub static AURA_CONFIG_PATH: &str = "/etc/asusd/aura.conf";
|
pub static AURA_CONFIG_PATH: &str = "/etc/asusd/aura.conf";
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
pub struct AuraConfigV407 {
|
#[serde(default)]
|
||||||
pub brightness: LedBrightness,
|
|
||||||
pub current_mode: AuraModeNum,
|
|
||||||
pub builtins: BTreeMap<AuraModeNum, AuraEffect>,
|
|
||||||
pub multizone: Option<AuraMultiZone>,
|
|
||||||
pub awake_enabled: bool,
|
|
||||||
pub sleep_anim_enabled: bool,
|
|
||||||
pub side_leds_enabled: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AuraConfigV407 {
|
|
||||||
pub(crate) fn into_current(self) -> AuraConfig {
|
|
||||||
AuraConfig {
|
|
||||||
brightness: self.brightness,
|
|
||||||
last_brightness: LedBrightness::Med,
|
|
||||||
current_mode: self.current_mode,
|
|
||||||
builtins: self.builtins,
|
|
||||||
multizone: self.multizone,
|
|
||||||
power_states: LedPowerStates {
|
|
||||||
boot_anim: true,
|
|
||||||
sleep_anim: self.sleep_anim_enabled,
|
|
||||||
all_leds: self.awake_enabled,
|
|
||||||
keys_leds: self.awake_enabled,
|
|
||||||
side_leds: self.side_leds_enabled,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct AuraConfigV411 {
|
|
||||||
pub brightness: LedBrightness,
|
|
||||||
pub current_mode: AuraModeNum,
|
|
||||||
pub builtins: BTreeMap<AuraModeNum, AuraEffect>,
|
|
||||||
pub multizone: Option<AuraMultiZone>,
|
|
||||||
pub power_states: LedPowerStates,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AuraConfigV411 {
|
|
||||||
pub(crate) fn into_current(self) -> AuraConfig {
|
|
||||||
AuraConfig {
|
|
||||||
brightness: self.brightness,
|
|
||||||
last_brightness: LedBrightness::Med,
|
|
||||||
current_mode: self.current_mode,
|
|
||||||
builtins: self.builtins,
|
|
||||||
multizone: self.multizone,
|
|
||||||
power_states: self.power_states,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct AuraConfig {
|
pub struct AuraConfig {
|
||||||
pub brightness: LedBrightness,
|
pub brightness: LedBrightness,
|
||||||
/// Used to re-set brightness on wake from sleep/hibernation
|
/// Used to re-set brightness on wake from sleep/hibernation
|
||||||
pub last_brightness: LedBrightness,
|
pub last_brightness: LedBrightness,
|
||||||
pub current_mode: AuraModeNum,
|
pub current_mode: AuraModeNum,
|
||||||
pub builtins: BTreeMap<AuraModeNum, AuraEffect>,
|
pub builtins: BTreeMap<AuraModeNum, AuraEffect>,
|
||||||
pub multizone: Option<AuraMultiZone>,
|
pub multizone: Option<BTreeMap<AuraModeNum, Vec<AuraEffect>>>,
|
||||||
pub power_states: LedPowerStates,
|
pub power_states: LedPowerStates,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,16 +60,6 @@ impl AuraConfig {
|
|||||||
} else {
|
} else {
|
||||||
if let Ok(data) = serde_json::from_str(&buf) {
|
if let Ok(data) = serde_json::from_str(&buf) {
|
||||||
return data;
|
return data;
|
||||||
} else if let Ok(data) = serde_json::from_str::<AuraConfigV407>(&buf) {
|
|
||||||
let config = data.into_current();
|
|
||||||
config.write();
|
|
||||||
info!("Updated AuraConfig version");
|
|
||||||
return config;
|
|
||||||
} else if let Ok(data) = serde_json::from_str::<AuraConfigV411>(&buf) {
|
|
||||||
let config = data.into_current();
|
|
||||||
config.write();
|
|
||||||
info!("Updated AuraConfig version");
|
|
||||||
return config;
|
|
||||||
}
|
}
|
||||||
warn!(
|
warn!(
|
||||||
"Could not deserialise {}.\nWill rename to {}-old and recreate config",
|
"Could not deserialise {}.\nWill rename to {}-old and recreate config",
|
||||||
@@ -187,107 +126,27 @@ impl AuraConfig {
|
|||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
if let Some(multi) = self.multizone.as_mut() {
|
if let Some(multi) = self.multizone.as_mut() {
|
||||||
multi.set(effect)
|
if let Some(fx) = multi.get_mut(effect.mode()) {
|
||||||
|
for fx in fx.iter_mut() {
|
||||||
|
if fx.mode == effect.mode {
|
||||||
|
*fx = effect;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let mut tmp = BTreeMap::new();
|
||||||
|
tmp.insert(*effect.mode(), vec![effect]);
|
||||||
|
self.multizone = Some(tmp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_multizone(&self, aura_type: AuraModeNum) -> Option<&[AuraEffect; 4]> {
|
pub fn get_multizone(&self, aura_type: AuraModeNum) -> Option<&[AuraEffect]> {
|
||||||
if let Some(multi) = &self.multizone {
|
if let Some(multi) = &self.multizone {
|
||||||
if aura_type == AuraModeNum::Static {
|
return multi.get(&aura_type).map(|v| v.as_slice());
|
||||||
return Some(multi.static_());
|
|
||||||
} else if aura_type == AuraModeNum::Breathe {
|
|
||||||
return Some(multi.breathe());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
|
||||||
pub struct AuraMultiZone {
|
|
||||||
static_: [AuraEffect; 4],
|
|
||||||
breathe: [AuraEffect; 4],
|
|
||||||
}
|
|
||||||
|
|
||||||
impl AuraMultiZone {
|
|
||||||
pub fn set(&mut self, effect: AuraEffect) {
|
|
||||||
if effect.mode == AuraModeNum::Static {
|
|
||||||
match effect.zone {
|
|
||||||
AuraZone::None => {}
|
|
||||||
AuraZone::One => self.static_[0] = effect,
|
|
||||||
AuraZone::Two => self.static_[1] = effect,
|
|
||||||
AuraZone::Three => self.static_[2] = effect,
|
|
||||||
AuraZone::Four => self.static_[3] = effect,
|
|
||||||
}
|
|
||||||
} else if effect.mode == AuraModeNum::Breathe {
|
|
||||||
match effect.zone {
|
|
||||||
AuraZone::None => {}
|
|
||||||
AuraZone::One => self.breathe[0] = effect,
|
|
||||||
AuraZone::Two => self.breathe[1] = effect,
|
|
||||||
AuraZone::Three => self.breathe[2] = effect,
|
|
||||||
AuraZone::Four => self.breathe[3] = effect,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn static_(&self) -> &[AuraEffect; 4] {
|
|
||||||
&self.static_
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn breathe(&self) -> &[AuraEffect; 4] {
|
|
||||||
&self.breathe
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for AuraMultiZone {
|
|
||||||
fn default() -> Self {
|
|
||||||
Self {
|
|
||||||
static_: [
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Static,
|
|
||||||
zone: AuraZone::One,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Static,
|
|
||||||
zone: AuraZone::Two,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Static,
|
|
||||||
zone: AuraZone::Three,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Static,
|
|
||||||
zone: AuraZone::Four,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
],
|
|
||||||
breathe: [
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Breathe,
|
|
||||||
zone: AuraZone::One,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Breathe,
|
|
||||||
zone: AuraZone::Two,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Breathe,
|
|
||||||
zone: AuraZone::Three,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
AuraEffect {
|
|
||||||
mode: AuraModeNum::Breathe,
|
|
||||||
zone: AuraZone::Four,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -211,10 +211,13 @@ impl From<u8> for AuraModeNum {
|
|||||||
#[derive(Debug, Copy, Clone, PartialEq, Deserialize, Serialize)]
|
#[derive(Debug, Copy, Clone, PartialEq, Deserialize, Serialize)]
|
||||||
pub enum AuraZone {
|
pub enum AuraZone {
|
||||||
None,
|
None,
|
||||||
One,
|
KeyOne,
|
||||||
Two,
|
KeyTwo,
|
||||||
Three,
|
KeyThree,
|
||||||
Four,
|
KeyFour,
|
||||||
|
Logo,
|
||||||
|
LightbarLeft,
|
||||||
|
LightbarRight,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Default factory modes structure. This easily converts to an USB HID packet with:
|
/// Default factory modes structure. This easily converts to an USB HID packet with:
|
||||||
|
|||||||
Reference in New Issue
Block a user