use crate::controller::AsusController;
use crate::error::ControllerError;
use crate::state::ControllerState;
pub trait DisplayMode: std::fmt::Debug + Send + Sync {
fn apply(&self, controller: &AsusController) -> Result<(), ControllerError>;
fn symbol(&self) -> &'static [u8];
fn is_ereading(&self) -> bool {
false
}
fn mode_id(&self) -> i32;
}
#[derive(Debug, Clone, Copy)]
pub struct NormalMode;
impl NormalMode {
pub fn new() -> Self {
Self
}
}
impl Default for NormalMode {
fn default() -> Self {
Self::new()
}
}
impl DisplayMode for NormalMode {
fn apply(&self, controller: &AsusController) -> Result<(), ControllerError> {
controller.set_splendid_mode(b"MyOptSetSplendidFunc", 1)
}
fn symbol(&self) -> &'static [u8] {
b"MyOptSetSplendidFunc"
}
fn mode_id(&self) -> i32 {
1
}
}
#[derive(Debug, Clone, Copy)]
pub struct VividMode;
impl VividMode {
pub fn new() -> Self {
Self
}
}
impl Default for VividMode {
fn default() -> Self {
Self::new()
}
}
impl DisplayMode for VividMode {
fn apply(&self, controller: &AsusController) -> Result<(), ControllerError> {
controller.set_splendid_mode(b"MyOptSetSplendidFunc", 2)
}
fn symbol(&self) -> &'static [u8] {
b"MyOptSetSplendidFunc"
}
fn mode_id(&self) -> i32 {
2
}
}
#[derive(Debug, Clone, Copy)]
pub struct ManualMode {
pub value: u8,
}
impl ManualMode {
pub fn new(value: u8) -> Result<Self, ControllerError> {
if value > 100 {
return Err(ControllerError::InvalidSliderValue {
mode: "Manual",
value,
min: 0,
max: 100,
});
}
Ok(Self { value })
}
pub fn from_controller_state(state: &ControllerState) -> Self {
Self {
value: state.manual_slider,
}
}
}
impl DisplayMode for ManualMode {
fn apply(&self, controller: &AsusController) -> Result<(), ControllerError> {
controller.set_splendid_mode(b"MyOptSetSplendidManualFunc", self.value)
}
fn symbol(&self) -> &'static [u8] {
b"MyOptSetSplendidManualFunc"
}
fn mode_id(&self) -> i32 {
6
}
}
#[derive(Debug, Clone, Copy)]
pub struct EyeCareMode {
pub level: u8,
}
impl EyeCareMode {
pub fn new(level: u8) -> Result<Self, ControllerError> {
if level > 4 {
return Err(ControllerError::InvalidSliderValue {
mode: "EyeCare",
value: level,
min: 0,
max: 4,
});
}
Ok(Self { level })
}
pub fn from_controller_state(state: &ControllerState) -> Self {
Self {
level: state.eyecare_level,
}
}
}
impl DisplayMode for EyeCareMode {
fn apply(&self, controller: &AsusController) -> Result<(), ControllerError> {
controller.set_splendid_mode(b"MyOptSetSplendidEyecareFunc", self.level)
}
fn symbol(&self) -> &'static [u8] {
b"MyOptSetSplendidEyecareFunc"
}
fn mode_id(&self) -> i32 {
7
}
}
#[derive(Debug, Clone, Copy)]
pub struct EReadingMode {
pub grayscale: u8,
pub temp: u8,
}
impl EReadingMode {
pub fn new(grayscale: u8, temp: u8) -> Result<Self, ControllerError> {
if grayscale > 4 {
return Err(ControllerError::InvalidSliderValue {
mode: "EReading grayscale",
value: grayscale,
min: 0,
max: 4,
});
}
Ok(Self { grayscale, temp })
}
pub fn from_controller_state(state: &ControllerState) -> Self {
Self {
grayscale: state.ereading_grayscale,
temp: state.ereading_temp,
}
}
}
impl DisplayMode for EReadingMode {
fn apply(&self, controller: &AsusController) -> Result<(), ControllerError> {
controller.set_monochrome_mode(self.grayscale, self.temp)
}
fn symbol(&self) -> &'static [u8] {
b"MyOptSetSplendidMonochromeFunc"
}
fn is_ereading(&self) -> bool {
true
}
fn mode_id(&self) -> i32 {
-1 }
}