mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-02-06 00:15:04 +01:00
143 lines
3.3 KiB
Rust
143 lines
3.3 KiB
Rust
// TODO: Generic builtin modes
|
|
// TODO: Traits for finding device + writing generic modes
|
|
// TODO: Traits for writing aura_sync
|
|
// TODO: separate keyboard and laptop parts?
|
|
|
|
use std::fmt::Debug;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
#[cfg(feature = "dbus")]
|
|
use zbus::zvariant::{OwnedValue, Type, Value};
|
|
|
|
/// A container of images/grids/gifs/pauses which can be iterated over to
|
|
/// generate cool effects
|
|
pub mod effects;
|
|
|
|
mod builtin_modes;
|
|
pub use builtin_modes::*;
|
|
|
|
/// Helper for detecting what is available
|
|
pub mod aura_detection;
|
|
pub mod error;
|
|
pub mod usb;
|
|
|
|
pub mod keyboard;
|
|
|
|
pub const AURA_LAPTOP_LED_MSG_LEN: usize = 17;
|
|
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
|
|
|
|
pub const RED: Colour = Colour {
|
|
r: 0xff,
|
|
g: 0x00,
|
|
b: 0x00,
|
|
};
|
|
pub const GREEN: Colour = Colour {
|
|
r: 0x00,
|
|
g: 0xff,
|
|
b: 0x00,
|
|
};
|
|
pub const BLUE: Colour = Colour {
|
|
r: 0x00,
|
|
g: 0x00,
|
|
b: 0xff,
|
|
};
|
|
pub const VIOLET: Colour = Colour {
|
|
r: 0x9b,
|
|
g: 0x26,
|
|
b: 0xb6,
|
|
};
|
|
pub const TEAL: Colour = Colour {
|
|
r: 0x00,
|
|
g: 0x7c,
|
|
b: 0x80,
|
|
};
|
|
pub const YELLOW: Colour = Colour {
|
|
r: 0xff,
|
|
g: 0xef,
|
|
b: 0x00,
|
|
};
|
|
pub const ORANGE: Colour = Colour {
|
|
r: 0xff,
|
|
g: 0xa4,
|
|
b: 0x00,
|
|
};
|
|
pub const GRADIENT: [Colour; 7] = [
|
|
RED, VIOLET, BLUE, TEAL, GREEN, YELLOW, ORANGE,
|
|
];
|
|
|
|
#[cfg_attr(feature = "dbus", derive(Type, Value, OwnedValue))]
|
|
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
pub enum AuraDeviceType {
|
|
/// Most new laptops
|
|
#[default]
|
|
LaptopKeyboard2021 = 0,
|
|
LaptopKeyboardPre2021 = 1,
|
|
LaptopKeyboardTuf = 2,
|
|
ScsiExtDisk = 3,
|
|
Ally = 4,
|
|
AnimeOrSlash = 5,
|
|
Unknown = 255,
|
|
}
|
|
|
|
impl AuraDeviceType {
|
|
pub fn is_old_laptop(&self) -> bool {
|
|
*self == Self::LaptopKeyboardPre2021
|
|
}
|
|
|
|
pub fn is_tuf_laptop(&self) -> bool {
|
|
*self == Self::LaptopKeyboardTuf
|
|
}
|
|
|
|
pub fn is_new_laptop(&self) -> bool {
|
|
*self == Self::LaptopKeyboard2021
|
|
}
|
|
|
|
pub fn is_ally(&self) -> bool {
|
|
*self == Self::Ally
|
|
}
|
|
|
|
pub fn is_scsi(&self) -> bool {
|
|
*self == Self::ScsiExtDisk
|
|
}
|
|
}
|
|
|
|
impl From<&str> for AuraDeviceType {
|
|
fn from(s: &str) -> Self {
|
|
match s.to_lowercase().trim_start_matches("0x") {
|
|
"tuf" => AuraDeviceType::LaptopKeyboardTuf,
|
|
"1932" => AuraDeviceType::ScsiExtDisk,
|
|
"1866" | "18c6" | "1869" | "1854" => Self::LaptopKeyboardPre2021,
|
|
"1abe" | "1b4c" => Self::Ally,
|
|
"19b3" | "193b" => Self::AnimeOrSlash,
|
|
"19b6" => Self::LaptopKeyboard2021,
|
|
_ => Self::Unknown,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// The powerr zones this laptop supports
|
|
#[cfg_attr(
|
|
feature = "dbus",
|
|
derive(Type, Value, OwnedValue),
|
|
zvariant(signature = "u")
|
|
)]
|
|
#[derive(Serialize, Deserialize, PartialEq, Eq, Hash, Debug, Default, Copy, Clone)]
|
|
pub enum PowerZones {
|
|
/// The logo on some laptop lids
|
|
Logo = 0,
|
|
/// The full keyboard (not zones)
|
|
#[default]
|
|
Keyboard = 1,
|
|
/// The lightbar, typically on the front of the laptop
|
|
Lightbar = 2,
|
|
/// The leds that may be placed around the edge of the laptop lid
|
|
Lid = 3,
|
|
/// The led strip on the rear of some laptops
|
|
RearGlow = 4,
|
|
/// Exists for the older 0x1866 models
|
|
KeyboardAndLightbar = 5,
|
|
/// Ally specific for creating correct packet
|
|
Ally = 6,
|
|
None = 255,
|
|
}
|