Adjust anime init sequence

This commit is contained in:
Luke D. Jones
2024-05-21 22:36:18 +12:00
parent aee54f5756
commit e443ab00c9
18 changed files with 54 additions and 105 deletions

View File

@@ -11,6 +11,7 @@
- Minor updates in aura controller to ensure configs are updated if the support file changes - Minor updates in aura controller to ensure configs are updated if the support file changes
- Don't panic if -ENODEV on fan_curve enable - Don't panic if -ENODEV on fan_curve enable
- Adjust the G513Q support to match what is on the asus website. - Adjust the G513Q support to match what is on the asus website.
- Adjust init sequence of anime to prevent accidental use of Slash as Anime
## [v6.0.9] ## [v6.0.9]

View File

@@ -3,7 +3,7 @@ use std::error::Error;
use std::path::Path; use std::path::Path;
use std::process::exit; use std::process::exit;
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{AnimeDiagonal, AnimeType}; use rog_anime::{AnimeDiagonal, AnimeType};
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -26,7 +26,7 @@ fn main() -> Result<(), Box<dyn Error>> {
AnimeType::GA401, AnimeType::GA401,
)?; )?;
let anime_type = get_anime_type()?; let anime_type = get_maybe_anime_type()?;
proxy.write(matrix.into_data_buffer(anime_type)?).unwrap(); proxy.write(matrix.into_data_buffer(anime_type)?).unwrap();

View File

@@ -1,7 +1,7 @@
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{AnimeDiagonal, AnimeType}; use rog_anime::{AnimeDiagonal, AnimeType};
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -29,7 +29,7 @@ fn main() {
} }
} }
let anime_type = get_anime_type().unwrap(); let anime_type = get_maybe_anime_type().unwrap();
proxy proxy
.write(matrix.into_data_buffer(anime_type).unwrap()) .write(matrix.into_data_buffer(anime_type).unwrap())
.unwrap(); .unwrap();

View File

@@ -2,7 +2,7 @@ use std::env;
use std::path::Path; use std::path::Path;
use std::thread::sleep; use std::thread::sleep;
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{ActionData, ActionLoader, Sequences}; use rog_anime::{ActionData, ActionLoader, Sequences};
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -19,7 +19,7 @@ fn main() {
let path = Path::new(&args[1]); let path = Path::new(&args[1]);
let brightness = args[2].parse::<f32>().unwrap(); let brightness = args[2].parse::<f32>().unwrap();
let anime_type = get_anime_type().unwrap(); let anime_type = get_maybe_anime_type().unwrap();
let mut seq = Sequences::new(anime_type); let mut seq = Sequences::new(anime_type);
seq.insert( seq.insert(
0, 0,

View File

@@ -1,6 +1,6 @@
use std::convert::TryFrom; use std::convert::TryFrom;
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{AnimeDataBuffer, AnimeGrid}; use rog_anime::{AnimeDataBuffer, AnimeGrid};
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -14,7 +14,7 @@ fn main() {
let conn = Connection::system().unwrap(); let conn = Connection::system().unwrap();
let proxy = AnimeProxyBlocking::new(&conn).unwrap(); let proxy = AnimeProxyBlocking::new(&conn).unwrap();
let anime_type = get_anime_type().unwrap(); let anime_type = get_maybe_anime_type().unwrap();
let mut matrix = AnimeGrid::new(anime_type); let mut matrix = AnimeGrid::new(anime_type);
let tmp = matrix.get_mut(); let tmp = matrix.get_mut();

View File

@@ -1,4 +1,4 @@
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::AnimeDataBuffer; use rog_anime::AnimeDataBuffer;
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -9,7 +9,7 @@ use zbus::blocking::Connection;
fn main() { fn main() {
let conn = Connection::system().unwrap(); let conn = Connection::system().unwrap();
let proxy = AnimeProxyBlocking::new(&conn).unwrap(); let proxy = AnimeProxyBlocking::new(&conn).unwrap();
let anime_type = get_anime_type().unwrap(); let anime_type = get_maybe_anime_type().unwrap();
let mut matrix = AnimeDataBuffer::new(anime_type); let mut matrix = AnimeDataBuffer::new(anime_type);
matrix.data_mut()[1] = 100; // start = 1 matrix.data_mut()[1] = 100; // start = 1
for n in matrix.data_mut()[2..32].iter_mut() { for n in matrix.data_mut()[2..32].iter_mut() {

View File

@@ -4,7 +4,7 @@ use std::error::Error;
use std::path::Path; use std::path::Path;
use std::process::exit; use std::process::exit;
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{AnimeDataBuffer, AnimeImage, Vec2}; use rog_anime::{AnimeDataBuffer, AnimeImage, Vec2};
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -20,7 +20,7 @@ fn main() -> Result<(), Box<dyn Error>> {
exit(-1); exit(-1);
} }
let anime_type = get_anime_type()?; let anime_type = get_maybe_anime_type()?;
let matrix = AnimeImage::from_png( let matrix = AnimeImage::from_png(
Path::new(&args[1]), Path::new(&args[1]),
args[2].parse::<f32>().unwrap(), args[2].parse::<f32>().unwrap(),

View File

@@ -7,7 +7,7 @@ use std::process::exit;
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{AnimeDataBuffer, AnimeImage, Vec2}; use rog_anime::{AnimeDataBuffer, AnimeImage, Vec2};
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
use zbus::blocking::Connection; use zbus::blocking::Connection;
@@ -23,7 +23,7 @@ fn main() -> Result<(), Box<dyn Error>> {
exit(-1); exit(-1);
} }
let anime_type = get_anime_type()?; let anime_type = get_maybe_anime_type()?;
let mut matrix = AnimeImage::from_png( let mut matrix = AnimeImage::from_png(
Path::new(&args[1]), Path::new(&args[1]),
args[2].parse::<f32>().unwrap(), args[2].parse::<f32>().unwrap(),

View File

@@ -9,7 +9,7 @@ use aura_cli::{LedPowerCommand1, LedPowerCommand2};
use dmi_id::DMIID; use dmi_id::DMIID;
use fan_curve_cli::FanCurveCommand; use fan_curve_cli::FanCurveCommand;
use gumdrop::{Opt, Options}; use gumdrop::{Opt, Options};
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_anime::{AnimTime, AnimeDataBuffer, AnimeDiagonal, AnimeGif, AnimeImage, AnimeType, Vec2}; use rog_anime::{AnimTime, AnimeDataBuffer, AnimeDiagonal, AnimeGif, AnimeImage, AnimeType, Vec2};
use rog_aura::keyboard::{AuraPowerState, LaptopAuraPower}; use rog_aura::keyboard::{AuraPowerState, LaptopAuraPower};
use rog_aura::{self, AuraDeviceType, AuraEffect, PowerZones}; use rog_aura::{self, AuraDeviceType, AuraEffect, PowerZones};
@@ -365,8 +365,8 @@ fn handle_anime(conn: &Connection, cmd: &AnimeCommand) -> Result<(), Box<dyn std
println!("Did Alice _really_ make it back from Wonderland?"); println!("Did Alice _really_ make it back from Wonderland?");
} }
let mut anime_type = get_anime_type()?; let mut anime_type = get_maybe_anime_type()?;
if let AnimeType::Unknown = anime_type { if let AnimeType::Unsupported = anime_type {
if let Some(model) = cmd.override_type { if let Some(model) = cmd.override_type {
anime_type = model; anime_type = model;
} }

View File

@@ -6,7 +6,7 @@ use std::sync::{Arc, Mutex};
use asusd_user::config::*; use asusd_user::config::*;
use asusd_user::ctrl_anime::{CtrlAnime, CtrlAnimeInner}; use asusd_user::ctrl_anime::{CtrlAnime, CtrlAnimeInner};
use config_traits::{StdConfig, StdConfigLoad}; use config_traits::{StdConfig, StdConfigLoad};
use rog_anime::usb::get_anime_type; use rog_anime::usb::get_maybe_anime_type;
use rog_aura::aura_detection::LedSupportData; use rog_aura::aura_detection::LedSupportData;
use rog_aura::keyboard::KeyLayout; use rog_aura::keyboard::KeyLayout;
use rog_dbus::zbus_anime::AnimeProxyBlocking; use rog_dbus::zbus_anime::AnimeProxyBlocking;
@@ -44,7 +44,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
// Set up the anime data and run loop/thread // Set up the anime data and run loop/thread
if supported.contains(&"org.asuslinux.Anime".to_string()) { if supported.contains(&"org.asuslinux.Anime".to_string()) {
if let Some(cfg) = config.active_anime { if let Some(cfg) = config.active_anime {
let anime_type = get_anime_type()?; let anime_type = get_maybe_anime_type()?;
let anime_config = ConfigAnime::new().set_name(cfg).load(); let anime_config = ConfigAnime::new().set_name(cfg).load();
let anime = anime_config.create(anime_type)?; let anime = anime_config.create(anime_type)?;
let anime_config = Arc::new(Mutex::new(anime_config)); let anime_config = Arc::new(Mutex::new(anime_config));

View File

@@ -1,6 +1,6 @@
use std::time::Duration; use std::time::Duration;
use config_traits::{StdConfig, StdConfigLoad2}; use config_traits::{StdConfig, StdConfigLoad};
use rog_anime::error::AnimeError; use rog_anime::error::AnimeError;
use rog_anime::usb::Brightness; use rog_anime::usb::Brightness;
use rog_anime::{ use rog_anime::{
@@ -10,60 +10,6 @@ use serde_derive::{Deserialize, Serialize};
const CONFIG_FILE: &str = "anime.ron"; const CONFIG_FILE: &str = "anime.ron";
#[derive(Deserialize, Serialize)]
pub struct AnimeConfigV460 {
pub system: Vec<ActionLoader>,
pub boot: Vec<ActionLoader>,
pub wake: Vec<ActionLoader>,
pub sleep: Vec<ActionLoader>,
pub shutdown: Vec<ActionLoader>,
pub brightness: f32,
}
impl From<AnimeConfigV460> for AnimeConfig {
fn from(c: AnimeConfigV460) -> AnimeConfig {
AnimeConfig {
system: c.system,
boot: c.boot,
wake: c.wake,
shutdown: c.shutdown,
..Default::default()
}
}
}
#[derive(Deserialize, Serialize, Debug)]
pub struct AnimeConfigV472 {
pub model_override: Option<AnimeType>,
pub system: Vec<ActionLoader>,
pub boot: Vec<ActionLoader>,
pub wake: Vec<ActionLoader>,
pub sleep: Vec<ActionLoader>,
pub shutdown: Vec<ActionLoader>,
pub brightness: f32,
pub display_enabled: bool,
pub display_brightness: Brightness,
pub builtin_anims_enabled: bool,
pub builtin_anims: Animations,
}
impl From<AnimeConfigV472> for AnimeConfig {
fn from(c: AnimeConfigV472) -> AnimeConfig {
AnimeConfig {
system: c.system,
boot: c.boot,
wake: c.wake,
shutdown: c.shutdown,
model_override: c.model_override,
display_enabled: c.display_enabled,
display_brightness: c.display_brightness,
builtin_anims_enabled: c.builtin_anims_enabled,
builtin_anims: c.builtin_anims,
..Default::default()
}
}
}
#[derive(Deserialize, Serialize, Default)] #[derive(Deserialize, Serialize, Default)]
pub struct AnimeConfigCached { pub struct AnimeConfigCached {
pub system: Vec<ActionData>, pub system: Vec<ActionData>,
@@ -108,7 +54,6 @@ impl AnimeConfigCached {
/// Config for base system actions for the anime display /// Config for base system actions for the anime display
#[derive(Deserialize, Serialize, Debug, Clone)] #[derive(Deserialize, Serialize, Debug, Clone)]
pub struct AnimeConfig { pub struct AnimeConfig {
pub model_override: Option<AnimeType>,
pub system: Vec<ActionLoader>, pub system: Vec<ActionLoader>,
pub boot: Vec<ActionLoader>, pub boot: Vec<ActionLoader>,
pub wake: Vec<ActionLoader>, pub wake: Vec<ActionLoader>,
@@ -127,7 +72,6 @@ pub struct AnimeConfig {
impl Default for AnimeConfig { impl Default for AnimeConfig {
fn default() -> Self { fn default() -> Self {
AnimeConfig { AnimeConfig {
model_override: None,
system: Vec::new(), system: Vec::new(),
boot: Vec::new(), boot: Vec::new(),
wake: Vec::new(), wake: Vec::new(),
@@ -159,7 +103,7 @@ impl StdConfig for AnimeConfig {
} }
} }
impl StdConfigLoad2<AnimeConfigV460, AnimeConfigV472> for AnimeConfig {} impl StdConfigLoad for AnimeConfig {}
impl From<&AnimeConfig> for DeviceState { impl From<&AnimeConfig> for DeviceState {
fn from(config: &AnimeConfig) -> Self { fn from(config: &AnimeConfig) -> Self {

View File

@@ -8,11 +8,11 @@ use std::sync::Arc;
use std::thread::sleep; use std::thread::sleep;
use ::zbus::export::futures_util::lock::Mutex; use ::zbus::export::futures_util::lock::Mutex;
use config_traits::{StdConfig, StdConfigLoad2}; use config_traits::{StdConfig, StdConfigLoad};
use log::{error, info, warn}; use log::{error, info, warn};
use rog_anime::error::AnimeError; use rog_anime::error::AnimeError;
use rog_anime::usb::{ use rog_anime::usb::{
get_anime_type, pkt_flush, pkt_set_brightness, pkt_set_enable_display, get_maybe_anime_type, pkt_flush, pkt_set_brightness, pkt_set_enable_display,
pkt_set_enable_powersave_anim, pkts_for_init, Brightness, pkt_set_enable_powersave_anim, pkts_for_init, Brightness,
}; };
use rog_anime::{ActionData, AnimeDataBuffer, AnimePacketType, AnimeType}; use rog_anime::{ActionData, AnimeDataBuffer, AnimePacketType, AnimeType};
@@ -64,6 +64,12 @@ pub struct CtrlAnime {
impl CtrlAnime { impl CtrlAnime {
#[inline] #[inline]
pub fn new() -> Result<CtrlAnime, RogError> { pub fn new() -> Result<CtrlAnime, RogError> {
let anime_type = get_maybe_anime_type()?;
if matches!(anime_type, AnimeType::Unsupported) {
info!("No Anime Matrix capable laptop found");
return Err(RogError::Anime(AnimeError::NoDevice));
}
let usb = USBRaw::new(0x193b).ok(); let usb = USBRaw::new(0x193b).ok();
let hid = HidRaw::new("193b").ok(); let hid = HidRaw::new("193b").ok();
let node = if usb.is_some() { let node = if usb.is_some() {
@@ -91,13 +97,6 @@ impl CtrlAnime {
// } // }
let mut config = AnimeConfig::new().load(); let mut config = AnimeConfig::new().load();
let mut anime_type = get_anime_type()?;
if let AnimeType::Unknown = anime_type {
if let Some(model) = config.model_override {
warn!("Overriding the Animatrix type as {model:?}");
anime_type = model;
}
}
info!("Device has an AniMe Matrix display: {anime_type:?}"); info!("Device has an AniMe Matrix display: {anime_type:?}");
let mut cache = AnimeConfigCached::default(); let mut cache = AnimeConfigCached::default();

View File

@@ -2,10 +2,11 @@ pub mod config;
pub mod trait_impls; pub mod trait_impls;
use config_traits::{StdConfig, StdConfigLoad}; use config_traits::{StdConfig, StdConfigLoad};
use log::info;
use rog_platform::hid_raw::HidRaw; use rog_platform::hid_raw::HidRaw;
use rog_platform::usb_raw::USBRaw; use rog_platform::usb_raw::USBRaw;
use rog_slash::error::SlashError; use rog_slash::error::SlashError;
use rog_slash::usb::{get_slash_type, pkt_set_mode, pkt_set_options, pkts_for_init}; use rog_slash::usb::{get_maybe_slash_type, pkt_set_mode, pkt_set_options, pkts_for_init};
use rog_slash::{SlashMode, SlashType}; use rog_slash::{SlashMode, SlashType};
use crate::ctrl_slash::config::SlashConfig; use crate::ctrl_slash::config::SlashConfig;
@@ -39,8 +40,9 @@ pub struct CtrlSlash {
impl CtrlSlash { impl CtrlSlash {
#[inline] #[inline]
pub fn new() -> Result<CtrlSlash, RogError> { pub fn new() -> Result<CtrlSlash, RogError> {
let slash_type = get_slash_type()?; let slash_type = get_maybe_slash_type()?;
if matches!(slash_type, SlashType::Unknown | SlashType::Unsupported) { if matches!(slash_type, SlashType::Unsupported) {
info!("No Slash capable laptop found");
return Err(RogError::Slash(SlashError::NoDevice)); return Err(RogError::Slash(SlashError::NoDevice));
} }
@@ -51,7 +53,7 @@ impl CtrlSlash {
} else if hid.is_some() { } else if hid.is_some() {
unsafe { Node::Hid(hid.unwrap_unchecked()) } unsafe { Node::Hid(hid.unwrap_unchecked()) }
} else { } else {
return Err(RogError::NotSupported); return Err(RogError::Slash(SlashError::NoDevice));
}; };
let ctrl = CtrlSlash { let ctrl = CtrlSlash {

View File

@@ -62,7 +62,7 @@ pub enum AnimeType {
GA401, GA401,
GA402, GA402,
GU604, GU604,
Unknown, Unsupported,
} }
impl FromStr for AnimeType { impl FromStr for AnimeType {
@@ -73,7 +73,7 @@ impl FromStr for AnimeType {
"ga401" | "GA401" => Self::GA401, "ga401" | "GA401" => Self::GA401,
"ga402" | "GA402" => Self::GA402, "ga402" | "GA402" => Self::GA402,
"gu604" | "GU604" => Self::GU604, "gu604" | "GU604" => Self::GU604,
_ => Self::Unknown, _ => Self::Unsupported,
}) })
} }
} }
@@ -165,7 +165,7 @@ impl TryFrom<AnimeDataBuffer> for AnimePacketType {
let mut buffers = match anime.anime { let mut buffers = match anime.anime {
AnimeType::GA401 => vec![[0; 640]; 2], AnimeType::GA401 => vec![[0; 640]; 2],
AnimeType::GA402 | AnimeType::GU604 | AnimeType::Unknown => vec![[0; 640]; 3], AnimeType::GA402 | AnimeType::GU604 | AnimeType::Unsupported => vec![[0; 640]; 3],
}; };
for (idx, chunk) in anime.data.as_slice().chunks(PANE_LEN).enumerate() { for (idx, chunk) in anime.data.as_slice().chunks(PANE_LEN).enumerate() {
@@ -176,7 +176,7 @@ impl TryFrom<AnimeDataBuffer> for AnimePacketType {
if matches!( if matches!(
anime.anime, anime.anime,
AnimeType::GA402 | AnimeType::GU604 | AnimeType::Unknown AnimeType::GA402 | AnimeType::GU604 | AnimeType::Unsupported
) { ) {
buffers[2][..7].copy_from_slice(&USB_PREFIX3); buffers[2][..7].copy_from_slice(&USB_PREFIX3);
} }

View File

@@ -241,13 +241,13 @@ impl From<AnimShutdown> for i32 {
} }
} }
/// `get_anime_type` is very broad, matching on part of the laptop board name /// `get_maybe_anime_type` is very broad, matching on part of the laptop board
/// only. For this reason `find_node()` must be used also to verify if the USB /// name only. For this reason `find_node()` must be used also to verify if the
/// device is available. /// USB device is available.
/// ///
/// The currently known USB device is `19b6`. /// The currently known USB device is `19b6`.
#[inline] #[inline]
pub fn get_anime_type() -> Result<AnimeType, AnimeError> { pub fn get_maybe_anime_type() -> Result<AnimeType, AnimeError> {
let dmi = DMIID::new().map_err(|_| AnimeError::NoDevice)?; // TODO: better error let dmi = DMIID::new().map_err(|_| AnimeError::NoDevice)?; // TODO: better error
let board_name = dmi.board_name; let board_name = dmi.board_name;
@@ -258,8 +258,8 @@ pub fn get_anime_type() -> Result<AnimeType, AnimeError> {
} else if board_name.contains("GU604V") { } else if board_name.contains("GU604V") {
return Ok(AnimeType::GU604); return Ok(AnimeType::GU604);
} }
log::warn!("AniMe Matrix device found but not yet supported, will default to a GA402 layout"); log::warn!("AniMe Matrix device found but could be a slash");
Ok(AnimeType::Unknown) Ok(AnimeType::Unsupported)
} }
/// Get the two device initialization packets. These are required for device /// Get the two device initialization packets. These are required for device

View File

@@ -12,7 +12,7 @@ use crate::error::SlashError;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)] #[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub enum SlashType { pub enum SlashType {
GA403, GA403,
Unknown, GA605,
Unsupported, Unsupported,
} }
@@ -22,7 +22,8 @@ impl FromStr for SlashType {
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> { fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
Ok(match s { Ok(match s {
"ga403" | "GA403" => Self::GA403, "ga403" | "GA403" => Self::GA403,
_ => Self::Unknown, "ga605" | "GA605" => Self::GA605,
_ => Self::Unsupported,
}) })
} }
} }

View File

@@ -28,12 +28,14 @@ pub type SlashUsbPacket = [u8; PACKET_SIZE];
/// ///
/// The currently known USB device is `193B`. /// The currently known USB device is `193B`.
#[inline] #[inline]
pub fn get_slash_type() -> Result<SlashType, SlashError> { pub fn get_maybe_slash_type() -> Result<SlashType, SlashError> {
let dmi = DMIID::new().map_err(|_| SlashError::NoDevice)?; // TODO: better error let dmi = DMIID::new().map_err(|_| SlashError::NoDevice)?; // TODO: better error
let board_name = dmi.board_name; let board_name = dmi.board_name;
if board_name.contains("GA403") { if board_name.contains("GA403") {
return Ok(SlashType::GA403); return Ok(SlashType::GA403);
} else if board_name.contains("GA605") {
return Ok(SlashType::GA605);
} }
Ok(SlashType::Unsupported) Ok(SlashType::Unsupported)
} }

View File

@@ -43,7 +43,7 @@ impl AniMatrix {
vertical: 2, vertical: 2,
horizontal: 5, horizontal: 5,
}, },
AnimeType::GA402 | AnimeType::Unknown => LedShape { AnimeType::GA402 | AnimeType::Unsupported => LedShape {
vertical: 2, vertical: 2,
horizontal: 5, horizontal: 5,
}, },
@@ -56,7 +56,7 @@ impl AniMatrix {
// Do a hard mapping of each (derived from wireshardk captures) // Do a hard mapping of each (derived from wireshardk captures)
let rows = match model { let rows = match model {
AnimeType::GA401 => GA401.to_vec(), AnimeType::GA401 => GA401.to_vec(),
AnimeType::GA402 | AnimeType::Unknown => GA402.to_vec(), AnimeType::GA402 | AnimeType::Unsupported => GA402.to_vec(),
AnimeType::GU604 => GU604.to_vec(), AnimeType::GU604 => GU604.to_vec(),
}; };