mirror of
https://gitlab.com/asus-linux/asusctl.git
synced 2026-01-22 17:33:19 +01:00
130 lines
3.6 KiB
Rust
130 lines
3.6 KiB
Rust
use std::str::FromStr;
|
|
|
|
use serde_derive::{Deserialize, Serialize};
|
|
use typeshare::typeshare;
|
|
#[cfg(feature = "dbus")]
|
|
use zbus::zvariant::Type;
|
|
use zbus::zvariant::{OwnedValue, Value};
|
|
|
|
use crate::error::SlashError;
|
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)]
|
|
pub enum SlashType {
|
|
GA403,
|
|
Unknown,
|
|
}
|
|
|
|
impl FromStr for SlashType {
|
|
type Err = SlashError;
|
|
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
|
Ok(match s {
|
|
"ga403" | "GA403" => Self::GA403,
|
|
_ => Self::Unknown,
|
|
})
|
|
}
|
|
}
|
|
|
|
#[typeshare]
|
|
#[cfg_attr(feature = "dbus", derive(Type, Value, OwnedValue))]
|
|
#[derive(Debug, PartialEq, Eq, Copy, Clone, Deserialize, Serialize)]
|
|
pub enum SlashMode {
|
|
Bounce = 0x10,
|
|
Slash = 0x12,
|
|
Loading = 0x13,
|
|
BitStream = 0x1D,
|
|
Transmission = 0x1A,
|
|
Flow = 0x19,
|
|
Flux = 0x25,
|
|
Phantom = 0x24,
|
|
Spectrum = 0x26,
|
|
Hazard = 0x32,
|
|
Interfacing = 0x33,
|
|
Ramp = 0x34,
|
|
GameOver = 0x42,
|
|
Start = 0x43,
|
|
Buzzer = 0x44,
|
|
}
|
|
|
|
impl Default for SlashMode {
|
|
fn default() -> Self {
|
|
SlashMode::Flow
|
|
}
|
|
}
|
|
|
|
impl SlashMode {
|
|
pub const fn to_string(&self) -> &str
|
|
{
|
|
match &self {
|
|
SlashMode::Bounce => "Bounce",
|
|
SlashMode::Slash => "Slash",
|
|
SlashMode::Loading => "Loading",
|
|
SlashMode::BitStream => "BitStream",
|
|
SlashMode::Transmission => "Transmission",
|
|
SlashMode::Flow => "Flow",
|
|
SlashMode::Flux => "Flux",
|
|
SlashMode::Phantom => "Phantom",
|
|
SlashMode::Spectrum => "Spectrum",
|
|
SlashMode::Hazard => "Hazard",
|
|
SlashMode::Interfacing => "Interfacing",
|
|
SlashMode::Ramp => "Ramp",
|
|
SlashMode::GameOver => "GameOver",
|
|
SlashMode::Start => "Start",
|
|
SlashMode::Buzzer => "Buzzer",
|
|
}
|
|
}
|
|
|
|
pub fn from_string(value: &str) -> Self
|
|
{
|
|
match value {
|
|
"Bounce" => SlashMode::Bounce,
|
|
"Slash" => SlashMode::Slash,
|
|
"Loading" => SlashMode::Loading,
|
|
"BitStream" => SlashMode::BitStream,
|
|
"Transmission" => SlashMode::Transmission,
|
|
"Flow" => SlashMode::Flow,
|
|
"Flux" => SlashMode::Flux,
|
|
"Phantom" => SlashMode::Phantom,
|
|
"Spectrum" => SlashMode::Spectrum,
|
|
"Hazard" => SlashMode::Hazard,
|
|
"Interfacing" => SlashMode::Interfacing,
|
|
"Ramp" => SlashMode::Ramp,
|
|
"GameOver" => SlashMode::GameOver,
|
|
"Start" => SlashMode::Start,
|
|
"Buzzer" => SlashMode::Buzzer,
|
|
_ => SlashMode::Bounce
|
|
}
|
|
}
|
|
|
|
pub const fn list() -> [&'static str; 15] {
|
|
[
|
|
SlashMode::Bounce.to_string(),
|
|
SlashMode::Slash.to_string(),
|
|
SlashMode::Loading.to_string(),
|
|
SlashMode::BitStream.to_string(),
|
|
SlashMode::Transmission.to_string(),
|
|
SlashMode::Flow.to_string(),
|
|
SlashMode::Flux.to_string(),
|
|
SlashMode::Phantom.to_string(),
|
|
SlashMode::Spectrum.to_string(),
|
|
SlashMode::Hazard.to_string(),
|
|
SlashMode::Interfacing.to_string(),
|
|
SlashMode::Ramp.to_string(),
|
|
SlashMode::GameOver.to_string(),
|
|
SlashMode::Start.to_string(),
|
|
SlashMode::Buzzer.to_string(),
|
|
]
|
|
}
|
|
}
|
|
|
|
#[typeshare]
|
|
#[cfg_attr(feature = "dbus", derive(Type))]
|
|
#[typeshare]
|
|
#[derive(Debug, PartialEq, Eq, Copy, Clone, Deserialize, Serialize)]
|
|
pub struct DeviceState {
|
|
pub slash_enabled: bool,
|
|
pub slash_brightness: u8,
|
|
pub slash_interval: u8,
|
|
pub slash_mode: SlashMode,
|
|
}
|
|
|