diff --git a/asusctl/examples/animatrix-diag-png.rs b/asusctl/examples/animatrix-diag-png.rs index 187a1b25..5d8d8fa3 100644 --- a/asusctl/examples/animatrix-diag-png.rs +++ b/asusctl/examples/animatrix-diag-png.rs @@ -10,17 +10,12 @@ fn main() -> Result<(), Box> { let args: Vec = env::args().into_iter().collect(); if args.len() != 3 { - println!( - "Usage: " - ); + println!("Usage: "); println!("e.g, asusctl/examples/doom_large.png 0.8"); exit(-1); } - let matrix = AniMeDiagonal::from_png( - Path::new(&args[1]), - args[2].parse::().unwrap(), - )?; + let matrix = AniMeDiagonal::from_png(Path::new(&args[1]), args[2].parse::().unwrap())?; client .proxies() diff --git a/asusctl/examples/animatrix-grid.rs b/asusctl/examples/animatrix-grid.rs index 2e42c1cc..8678f1cd 100644 --- a/asusctl/examples/animatrix-grid.rs +++ b/asusctl/examples/animatrix-grid.rs @@ -13,12 +13,12 @@ fn main() { let mut i = 0; for (y, row) in tmp.iter_mut().enumerate() { - if y % 2 == 0 && i + 1 != row.len() -1 { + if y % 2 == 0 && i + 1 != row.len() - 1 { i += 1; dbg!(i); } row[row.len() - i] = 0x22; - if i > 5{ + if i > 5 { row[row.len() - i + 5] = 0x22; } if i > 10 { diff --git a/asusctl/examples/animatrix-png.rs b/asusctl/examples/animatrix-png.rs index f2d0e98e..53bc88df 100644 --- a/asusctl/examples/animatrix-png.rs +++ b/asusctl/examples/animatrix-png.rs @@ -10,9 +10,7 @@ fn main() -> Result<(), Box> { let args: Vec = env::args().into_iter().collect(); if args.len() != 8 { - println!( - "Usage: " - ); + println!("Usage: "); println!("e.g, asusctl/examples/doom_large.png 0.9 0.9 0.4 0.0 0.0,0.8"); exit(-1); } diff --git a/asusctl/src/main.rs b/asusctl/src/main.rs index cfa05145..a7354c33 100644 --- a/asusctl/src/main.rs +++ b/asusctl/src/main.rs @@ -8,10 +8,7 @@ use daemon::{ ctrl_rog_bios::RogBiosSupportedFunctions, ctrl_supported::SupportedFunctions, }; use gumdrop::{Opt, Options}; -use rog_anime::{ - AniMeDataBuffer, ANIME_DATA_LEN, - AniMeImage, Vec2, -}; +use rog_anime::{AniMeDataBuffer, AniMeImage, Vec2, ANIME_DATA_LEN}; use rog_dbus::AuraDbusClient; use rog_types::{ aura_modes::{self, AuraEffect, AuraModeNum}, diff --git a/daemon/src/ctrl_anime.rs b/daemon/src/ctrl_anime.rs index 14f29051..e7e9e713 100644 --- a/daemon/src/ctrl_anime.rs +++ b/daemon/src/ctrl_anime.rs @@ -182,7 +182,7 @@ impl CtrlAnimeDisplay { } #[inline] - fn do_set_boot(&self, status: bool) { + fn do_set_boot(&self, status: bool) { let mut flush = [0; PACKET_SIZE]; flush[0] = DEV_PAGE; flush[1] = SET; diff --git a/data/anime/Festive/0.0.1/Category name translation.csv b/data/anime/Festive/0.0.1/Category name translation.csv deleted file mode 100755 index c1590249..00000000 --- a/data/anime/Festive/0.0.1/Category name translation.csv +++ /dev/null @@ -1,15 +0,0 @@ -Language,String -en,Festive -zh-tw,節慶 -zh-cn,节庆 -nl,Feestelijk -fr,Festif -de,Festlich -ja,フェスティバル -pt,Festivo -ru,Праздники -es,Festivo -it,Feste -cs,Slavnostní -ko,축제 -tr,Eğlence diff --git a/data/anime/Festive/0.0.2/Category name translation.csv b/data/anime/Festive/0.0.2/Category name translation.csv deleted file mode 100755 index 12c5b8d5..00000000 --- a/data/anime/Festive/0.0.2/Category name translation.csv +++ /dev/null @@ -1,18 +0,0 @@ -Language,String -en,Festive -zh-tw,節慶 -zh-cn,节庆 -nl,Feestelijk -fr,Festif -de,Festlich -ja,フェスティバル -pt,Festivo -ru,Праздники -es,Festivo -it,Feste -cs,Slavnostní -ko,축제 -tr,Eğlence -fi,Juhlava -nb,Festlig -sv,Festligt diff --git a/data/anime/Festive/0.0.2/Cupid.gif b/data/anime/Festive/Cupid.gif similarity index 100% rename from data/anime/Festive/0.0.2/Cupid.gif rename to data/anime/Festive/Cupid.gif diff --git a/data/anime/Festive/0.0.2/Firework.gif b/data/anime/Festive/Firework.gif similarity index 100% rename from data/anime/Festive/0.0.2/Firework.gif rename to data/anime/Festive/Firework.gif diff --git a/data/anime/Festive/0.0.1/Halloween.gif b/data/anime/Festive/Halloween.gif similarity index 100% rename from data/anime/Festive/0.0.1/Halloween.gif rename to data/anime/Festive/Halloween.gif diff --git a/data/anime/Festive/0.0.1/Happy Holiday.gif b/data/anime/Festive/Happy Holiday.gif similarity index 100% rename from data/anime/Festive/0.0.1/Happy Holiday.gif rename to data/anime/Festive/Happy Holiday.gif diff --git a/data/anime/Festive/0.0.2/Happy new year.gif b/data/anime/Festive/Happy new year.gif similarity index 100% rename from data/anime/Festive/0.0.2/Happy new year.gif rename to data/anime/Festive/Happy new year.gif diff --git a/data/anime/Festive/0.0.2/Lantern.gif b/data/anime/Festive/Lantern.gif similarity index 100% rename from data/anime/Festive/0.0.2/Lantern.gif rename to data/anime/Festive/Lantern.gif diff --git a/data/anime/Festive/0.0.2/Valentine's Day.gif b/data/anime/Festive/Valentine's Day.gif similarity index 100% rename from data/anime/Festive/0.0.2/Valentine's Day.gif rename to data/anime/Festive/Valentine's Day.gif diff --git a/data/anime/Festive/0.0.2/Year of the Ox.gif b/data/anime/Festive/Year of the Ox.gif similarity index 100% rename from data/anime/Festive/0.0.2/Year of the Ox.gif rename to data/anime/Festive/Year of the Ox.gif diff --git a/data/anime/Folder order.csv b/data/anime/Folder order.csv deleted file mode 100755 index 95e87243..00000000 --- a/data/anime/Folder order.csv +++ /dev/null @@ -1,16 +0,0 @@ -Language,Trend,Gaming,Festive,Music,ROG theme -cs,1,2,3,4,5 -de,1,2,3,4,5 -en,1,2,3,4,5 -es,1,2,3,4,5 -fr,1,2,3,4,5 -it,1,2,3,4,5 -ja,1,2,3,4,5 -ko,1,2,3,4,5 -nl,1,2,3,4,5 -pt,1,2,3,4,5 -ru,1,2,3,4,5 -tr,1,2,3,4,5 -zh-cn,1,2,3,4,5 -zh-tw,1,2,3,4,5 -default,1,2,3,4,5 diff --git a/data/anime/Gaming/0.0.1/Category name translation.csv b/data/anime/Gaming/0.0.1/Category name translation.csv deleted file mode 100755 index e0ea4444..00000000 --- a/data/anime/Gaming/0.0.1/Category name translation.csv +++ /dev/null @@ -1,15 +0,0 @@ -Language,String -en,Gaming -zh-tw,遊戲 -zh-cn,游戏 -nl,Gaming -fr,Jeu -de,Gaming -ja,ゲーム -pt,Jogos -ru,Игры -es,Juegos -it,Gaming -cs,Hraní -ko,게이밍 -tr,Oyun diff --git a/data/anime/Gaming/0.0.2/Category name translation.csv b/data/anime/Gaming/0.0.2/Category name translation.csv deleted file mode 100755 index e0ea4444..00000000 --- a/data/anime/Gaming/0.0.2/Category name translation.csv +++ /dev/null @@ -1,15 +0,0 @@ -Language,String -en,Gaming -zh-tw,遊戲 -zh-cn,游戏 -nl,Gaming -fr,Jeu -de,Gaming -ja,ゲーム -pt,Jogos -ru,Игры -es,Juegos -it,Gaming -cs,Hraní -ko,게이밍 -tr,Oyun diff --git a/data/anime/Gaming/0.0.1/Bird.gif b/data/anime/Gaming/Bird.gif similarity index 100% rename from data/anime/Gaming/0.0.1/Bird.gif rename to data/anime/Gaming/Bird.gif diff --git a/data/anime/Gaming/0.0.1/Controller.gif b/data/anime/Gaming/Controller.gif similarity index 100% rename from data/anime/Gaming/0.0.1/Controller.gif rename to data/anime/Gaming/Controller.gif diff --git a/data/anime/Gaming/0.0.1/FPS.gif b/data/anime/Gaming/FPS.gif similarity index 100% rename from data/anime/Gaming/0.0.1/FPS.gif rename to data/anime/Gaming/FPS.gif diff --git a/data/anime/Gaming/0.0.2/Fight.gif b/data/anime/Gaming/Fight.gif similarity index 100% rename from data/anime/Gaming/0.0.2/Fight.gif rename to data/anime/Gaming/Fight.gif diff --git a/data/anime/Gaming/0.0.1/Keyboard.gif b/data/anime/Gaming/Keyboard.gif similarity index 100% rename from data/anime/Gaming/0.0.1/Keyboard.gif rename to data/anime/Gaming/Keyboard.gif diff --git a/data/anime/Gaming/0.0.1/MOBA.gif b/data/anime/Gaming/MOBA.gif similarity index 100% rename from data/anime/Gaming/0.0.1/MOBA.gif rename to data/anime/Gaming/MOBA.gif diff --git a/data/anime/Gaming/0.0.2/UFO.gif b/data/anime/Gaming/UFO.gif similarity index 100% rename from data/anime/Gaming/0.0.2/UFO.gif rename to data/anime/Gaming/UFO.gif diff --git a/data/anime/Music/0.0.1/Category name translation.csv b/data/anime/Music/0.0.1/Category name translation.csv deleted file mode 100755 index 2ca9b78b..00000000 --- a/data/anime/Music/0.0.1/Category name translation.csv +++ /dev/null @@ -1,17 +0,0 @@ -Language,String -en,Music -zh-tw,音樂 -zh-cn,音乐 -nl,Muziek -fr,Musique -de,Musik -ja,ミュージック -pt,Música -ru,Музыка -es,Música -it,Musica -cs,Hudba -ko,음악 -tr,Müzik -, -, diff --git a/data/anime/Music/0.0.2/DJ.gif b/data/anime/Music/DJ.gif similarity index 100% rename from data/anime/Music/0.0.2/DJ.gif rename to data/anime/Music/DJ.gif diff --git a/data/anime/Music/0.0.1/Music-player.gif b/data/anime/Music/Music-player.gif similarity index 100% rename from data/anime/Music/0.0.1/Music-player.gif rename to data/anime/Music/Music-player.gif diff --git a/data/anime/ROG Gallery/0.0.1/Category name translation.csv b/data/anime/ROG Gallery/0.0.1/Category name translation.csv deleted file mode 100755 index 6ab5be52..00000000 --- a/data/anime/ROG Gallery/0.0.1/Category name translation.csv +++ /dev/null @@ -1,15 +0,0 @@ -Language,String -en,ROG Gallery -zh-tw,ROG 主題 -zh-cn,ROG 主题 -nl,ROG-thema -fr,Thème ROG -de,ROG-Thema -ja,ROG テーマ -pt,Tema ROG -ru,Тема ROG -es,Tema de ROG -it,Tema ROG -cs,Téma ROG -ko,ROG 테마 -tr,ROG teması diff --git a/data/anime/ROG Gallery/0.0.1/For-those-who-dare.gif b/data/anime/ROG Gallery/For-those-who-dare.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/For-those-who-dare.gif rename to data/anime/ROG Gallery/For-those-who-dare.gif diff --git a/data/anime/ROG Gallery/0.0.1/For-those-who-dare_2.gif b/data/anime/ROG Gallery/For-those-who-dare_2.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/For-those-who-dare_2.gif rename to data/anime/ROG Gallery/For-those-who-dare_2.gif diff --git a/data/anime/ROG Gallery/0.0.1/Fragment.gif b/data/anime/ROG Gallery/Fragment.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/Fragment.gif rename to data/anime/ROG Gallery/Fragment.gif diff --git a/data/anime/ROG Gallery/0.0.1/Infinite-triangle.gif b/data/anime/ROG Gallery/Infinite-triangle.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/Infinite-triangle.gif rename to data/anime/ROG Gallery/Infinite-triangle.gif diff --git a/data/anime/ROG Gallery/0.0.1/Kaleidoscope1.gif b/data/anime/ROG Gallery/Kaleidoscope1.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/Kaleidoscope1.gif rename to data/anime/ROG Gallery/Kaleidoscope1.gif diff --git a/data/anime/ROG Gallery/0.0.1/Kaleidoscope2.gif b/data/anime/ROG Gallery/Kaleidoscope2.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/Kaleidoscope2.gif rename to data/anime/ROG Gallery/Kaleidoscope2.gif diff --git a/data/anime/ROG Gallery/Kaleidoscope2.png b/data/anime/ROG Gallery/Kaleidoscope2.png new file mode 100644 index 00000000..709083ad Binary files /dev/null and b/data/anime/ROG Gallery/Kaleidoscope2.png differ diff --git a/data/anime/ROG Gallery/0.0.1/Sunset.gif b/data/anime/ROG Gallery/Sunset.gif similarity index 100% rename from data/anime/ROG Gallery/0.0.1/Sunset.gif rename to data/anime/ROG Gallery/Sunset.gif diff --git a/data/anime/Trend/0.0.1/Category name translation.csv b/data/anime/Trend/0.0.1/Category name translation.csv deleted file mode 100755 index 20321136..00000000 --- a/data/anime/Trend/0.0.1/Category name translation.csv +++ /dev/null @@ -1,15 +0,0 @@ -Language,String -en,Trend -zh-tw,潮流 -zh-cn,潮流 -nl,Trend -fr,Tendance -de,Trend -ja,トレンド -pt,Tendência -ru,В тренде -es,Tendencia -it,Tendenza -cs,Trend -ko,트렌드 -tr,Popüler diff --git a/data/anime/Trend/0.0.2/Category name translation.csv b/data/anime/Trend/0.0.2/Category name translation.csv deleted file mode 100755 index 20321136..00000000 --- a/data/anime/Trend/0.0.2/Category name translation.csv +++ /dev/null @@ -1,15 +0,0 @@ -Language,String -en,Trend -zh-tw,潮流 -zh-cn,潮流 -nl,Trend -fr,Tendance -de,Trend -ja,トレンド -pt,Tendência -ru,В тренде -es,Tendencia -it,Tendenza -cs,Trend -ko,트렌드 -tr,Popüler diff --git a/data/anime/Trend/0.0.1/Dog.gif b/data/anime/Trend/Dog.gif similarity index 100% rename from data/anime/Trend/0.0.1/Dog.gif rename to data/anime/Trend/Dog.gif diff --git a/data/anime/Trend/0.0.1/Ski.gif b/data/anime/Trend/Ski.gif similarity index 100% rename from data/anime/Trend/0.0.1/Ski.gif rename to data/anime/Trend/Ski.gif diff --git a/data/anime/Trend/0.0.2/Wave.gif b/data/anime/Trend/Wave.gif similarity index 100% rename from data/anime/Trend/0.0.2/Wave.gif rename to data/anime/Trend/Wave.gif diff --git a/data/anime/anime.readme b/data/anime/anime.readme new file mode 100644 index 00000000..56c66885 --- /dev/null +++ b/data/anime/anime.readme @@ -0,0 +1,6 @@ +See https://blog.joshwalsh.me/asus-anime-matrix/ for details on how +the diagonal layout works. + +`diagonal-template.*` is provided from the website above. It is best to +export the final file to 36px height - no scaling is done in asusd or +rog-anime crate for diagonal displays. diff --git a/data/anime/diagonal-template.png b/data/anime/diagonal-template.png new file mode 100644 index 00000000..e2dc90d5 Binary files /dev/null and b/data/anime/diagonal-template.png differ diff --git a/data/anime/diagonal-template.svg b/data/anime/diagonal-template.svg new file mode 100644 index 00000000..95b55d61 --- /dev/null +++ b/data/anime/diagonal-template.svg @@ -0,0 +1,1292 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + THISWAY UP + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rog-anime/src/anime_diagonal.rs b/rog-anime/src/anime_diagonal.rs index ac7e8464..31b22982 100644 --- a/rog-anime/src/anime_diagonal.rs +++ b/rog-anime/src/anime_diagonal.rs @@ -26,6 +26,7 @@ impl AniMeDiagonal { &mut self.0 } + /// Get a full diagonal row where `x` `y` is the starting point and `len` is the length of data. fn get_row(&self, x: usize, y: usize, len: usize) -> Vec { let mut buf = Vec::with_capacity(len); for i in 0..len { @@ -37,10 +38,7 @@ impl AniMeDiagonal { /// Generate the base image from inputs. The result can be displayed as is or /// updated via scale, position, or angle then displayed again after `update()`. - pub fn from_png( - path: &Path, - bright: f32, - ) -> Result { + pub fn from_png(path: &Path, bright: f32) -> Result { use pix::el::Pixel; let data = std::fs::read(path)?; let data = std::io::Cursor::new(data); @@ -53,8 +51,7 @@ impl AniMeDiagonal { match raster { png_pong::PngRaster::Graya8(ras) => { width = ras.width(); - for (y, row) in ras.pixels() - .chunks(width as usize).enumerate() { + for (y, row) in ras.pixels().chunks(width as usize).enumerate() { for (x, px) in row.iter().enumerate() { let v = ::from(px.one() * bright); matrix.0[y][x] = v; @@ -75,61 +72,61 @@ impl From<&AniMeDiagonal> for AniMeDataBuffer { fn from(anime: &AniMeDiagonal) -> Self { let mut buf = vec![0u8; ANIME_DATA_LEN]; - buf[1..=33].copy_from_slice(&anime.get_row(2, 3, 33)); - buf[34..=66].copy_from_slice(&anime.get_row(2, 2, 33)); - buf[68..=100].copy_from_slice(&anime.get_row(2, 1, 33)); - buf[101..=134].copy_from_slice(&anime.get_row(2, 0, 34)); - buf[136..=169].copy_from_slice(&anime.get_row(3, 0, 34)); - buf[170..=202].copy_from_slice(&anime.get_row(4, 0, 33)); - buf[204..=236].copy_from_slice(&anime.get_row(5, 0, 33)); - buf[237..=268].copy_from_slice(&anime.get_row(6, 0, 32)); - buf[270..=301].copy_from_slice(&anime.get_row(7, 0, 32)); - buf[302..=332].copy_from_slice(&anime.get_row(8, 0, 31)); - buf[334..=364].copy_from_slice(&anime.get_row(9, 0, 31)); - buf[365..=394].copy_from_slice(&anime.get_row(10, 0, 30)); - buf[396..=425].copy_from_slice(&anime.get_row(11, 0, 30)); - buf[426..=454].copy_from_slice(&anime.get_row(12, 0, 29)); - buf[456..=484].copy_from_slice(&anime.get_row(13, 0, 29)); - buf[485..=512].copy_from_slice(&anime.get_row(14, 0, 28)); - buf[514..=541].copy_from_slice(&anime.get_row(15, 0, 28)); - buf[542..=568].copy_from_slice(&anime.get_row(16, 0, 27)); - buf[570..=596].copy_from_slice(&anime.get_row(17, 0, 27)); - buf[597..=622].copy_from_slice(&anime.get_row(18, 0, 26)); - buf[624..=649].copy_from_slice(&anime.get_row(19, 0, 26)); - buf[650..=674].copy_from_slice(&anime.get_row(20, 0, 25)); - buf[676..=700].copy_from_slice(&anime.get_row(21, 0, 25)); - buf[701..=724].copy_from_slice(&anime.get_row(22, 0, 24)); - buf[726..=749].copy_from_slice(&anime.get_row(23, 0, 24)); - buf[750..=772].copy_from_slice(&anime.get_row(24, 0, 23)); - buf[774..=796].copy_from_slice(&anime.get_row(25, 0, 23)); - buf[797..=818].copy_from_slice(&anime.get_row(26, 0, 22)); - buf[820..=841].copy_from_slice(&anime.get_row(27, 0, 22)); - buf[842..=862].copy_from_slice(&anime.get_row(28, 0, 21)); - buf[864..=884].copy_from_slice(&anime.get_row(29, 0, 21)); - buf[885..=904].copy_from_slice(&anime.get_row(30, 0, 20)); - buf[906..=925].copy_from_slice(&anime.get_row(31, 0, 20)); - buf[926..=944].copy_from_slice(&anime.get_row(32, 0, 19)); - buf[946..=964].copy_from_slice(&anime.get_row(33, 0, 19)); - buf[965..=982].copy_from_slice(&anime.get_row(34, 0, 18)); - buf[984..=1001].copy_from_slice(&anime.get_row(35, 0, 18)); - buf[1002..=1018].copy_from_slice(&anime.get_row(36, 0, 17)); - buf[1020..=1036].copy_from_slice(&anime.get_row(37, 0, 17)); - buf[1037..=1052].copy_from_slice(&anime.get_row(38, 0, 16)); - buf[1054..=1069].copy_from_slice(&anime.get_row(39, 0, 16)); - buf[1070..=1084].copy_from_slice(&anime.get_row(40, 0, 15)); - buf[1086..=1100].copy_from_slice(&anime.get_row(41, 0, 15)); - buf[1101..=1114].copy_from_slice(&anime.get_row(42, 0, 14)); - buf[1116..=1129].copy_from_slice(&anime.get_row(43, 0, 14)); - buf[1130..=1142].copy_from_slice(&anime.get_row(44, 0, 13)); - buf[1144..=1156].copy_from_slice(&anime.get_row(45, 0, 13)); - buf[1157..=1168].copy_from_slice(&anime.get_row(46, 0, 12)); - buf[1170..=1181].copy_from_slice(&anime.get_row(47, 0, 12)); - buf[1182..=1192].copy_from_slice(&anime.get_row(48, 0, 11)); - buf[1194..=1204].copy_from_slice(&anime.get_row(49, 0, 11)); - buf[1205..=1214].copy_from_slice(&anime.get_row(50, 0, 10)); - buf[1216..=1225].copy_from_slice(&anime.get_row(51, 0, 10)); - buf[1226..=1234].copy_from_slice(&anime.get_row(52, 0, 9)); - buf[1236..=1244].copy_from_slice(&anime.get_row(53, 0, 9)); + buf[1..=32].copy_from_slice(&anime.get_row(0, 3, 32)); + buf[34..=66].copy_from_slice(&anime.get_row(0, 2, 33)); + buf[69..=101].copy_from_slice(&anime.get_row(1, 2, 33)); // ?! + buf[102..=134].copy_from_slice(&anime.get_row(1, 1, 33)); + buf[137..=169].copy_from_slice(&anime.get_row(2, 1, 33)); + buf[170..=202].copy_from_slice(&anime.get_row(2, 0, 33)); + buf[204..=236].copy_from_slice(&anime.get_row(3, 0, 33)); + buf[237..=268].copy_from_slice(&anime.get_row(4, 0, 32)); + buf[270..=301].copy_from_slice(&anime.get_row(5, 0, 32)); + buf[302..=332].copy_from_slice(&anime.get_row(6, 0, 31)); + buf[334..=364].copy_from_slice(&anime.get_row(7, 0, 31)); + buf[365..=394].copy_from_slice(&anime.get_row(8, 0, 30)); + buf[396..=425].copy_from_slice(&anime.get_row(9, 0, 30)); + buf[426..=454].copy_from_slice(&anime.get_row(10, 0, 29)); + buf[456..=484].copy_from_slice(&anime.get_row(11, 0, 29)); + buf[485..=512].copy_from_slice(&anime.get_row(12, 0, 28)); + buf[514..=541].copy_from_slice(&anime.get_row(13, 0, 28)); + buf[542..=568].copy_from_slice(&anime.get_row(14, 0, 27)); + buf[570..=596].copy_from_slice(&anime.get_row(15, 0, 27)); + buf[597..=622].copy_from_slice(&anime.get_row(16, 0, 26)); + buf[624..=649].copy_from_slice(&anime.get_row(17, 0, 26)); + buf[650..=674].copy_from_slice(&anime.get_row(18, 0, 25)); + buf[676..=700].copy_from_slice(&anime.get_row(19, 0, 25)); + buf[701..=724].copy_from_slice(&anime.get_row(20, 0, 24)); + buf[726..=749].copy_from_slice(&anime.get_row(21, 0, 24)); + buf[750..=772].copy_from_slice(&anime.get_row(22, 0, 23)); + buf[774..=796].copy_from_slice(&anime.get_row(23, 0, 23)); + buf[797..=818].copy_from_slice(&anime.get_row(24, 0, 22)); + buf[820..=841].copy_from_slice(&anime.get_row(25, 0, 22)); + buf[842..=862].copy_from_slice(&anime.get_row(26, 0, 21)); + buf[864..=884].copy_from_slice(&anime.get_row(27, 0, 21)); + buf[885..=904].copy_from_slice(&anime.get_row(28, 0, 20)); + buf[906..=925].copy_from_slice(&anime.get_row(29, 0, 20)); + buf[926..=944].copy_from_slice(&anime.get_row(30, 0, 19)); + buf[946..=964].copy_from_slice(&anime.get_row(31, 0, 19)); + buf[965..=982].copy_from_slice(&anime.get_row(32, 0, 18)); + buf[984..=1001].copy_from_slice(&anime.get_row(33, 0, 18)); + buf[1002..=1018].copy_from_slice(&anime.get_row(34, 0, 17)); + buf[1020..=1036].copy_from_slice(&anime.get_row(35, 0, 17)); + buf[1037..=1052].copy_from_slice(&anime.get_row(36, 0, 16)); + buf[1054..=1069].copy_from_slice(&anime.get_row(37, 0, 16)); + buf[1070..=1084].copy_from_slice(&anime.get_row(38, 0, 15)); + buf[1086..=1100].copy_from_slice(&anime.get_row(39, 0, 15)); + buf[1101..=1114].copy_from_slice(&anime.get_row(40, 0, 14)); + buf[1116..=1129].copy_from_slice(&anime.get_row(41, 0, 14)); + buf[1130..=1142].copy_from_slice(&anime.get_row(42, 0, 13)); + buf[1144..=1156].copy_from_slice(&anime.get_row(43, 0, 13)); + buf[1157..=1168].copy_from_slice(&anime.get_row(44, 0, 12)); + buf[1170..=1181].copy_from_slice(&anime.get_row(45, 0, 12)); + buf[1182..=1192].copy_from_slice(&anime.get_row(46, 0, 11)); + buf[1194..=1204].copy_from_slice(&anime.get_row(47, 0, 11)); + buf[1205..=1214].copy_from_slice(&anime.get_row(48, 0, 10)); + buf[1216..=1225].copy_from_slice(&anime.get_row(49, 0, 10)); + buf[1226..=1234].copy_from_slice(&anime.get_row(50, 0, 9)); + buf[1236..=1244].copy_from_slice(&anime.get_row(51, 0, 9)); AniMeDataBuffer::from_vec(buf) } diff --git a/rog-anime/src/anime_gif.rs b/rog-anime/src/anime_gif.rs index 13783721..7ef5b2cf 100644 --- a/rog-anime/src/anime_gif.rs +++ b/rog-anime/src/anime_gif.rs @@ -1,10 +1,12 @@ use serde_derive::{Deserialize, Serialize}; -use std::{fs::File, path::{Path}, time::Duration}; +use std::{fs::File, path::Path, time::Duration}; use crate::{error::AnimeError, AniMeDataBuffer, AniMeDiagonal}; #[derive(Debug, Clone, Deserialize, Serialize)] pub struct AniMeFrame { + /// Precomputed data for the frame. This can be transferred directly to the + /// the `asusd` daemon over dbus or converted to USB packet with `AniMePacketType::from(buffer)` data: AniMeDataBuffer, delay: Duration, } diff --git a/rog-anime/src/anime_image.rs b/rog-anime/src/anime_image.rs index ffac92ee..d0972987 100644 --- a/rog-anime/src/anime_image.rs +++ b/rog-anime/src/anime_image.rs @@ -40,7 +40,7 @@ impl Led { const fn bright(&self) -> u8 { self.2 } - + fn set_bright(&mut self, a: u8) { self.2 = a; } @@ -239,9 +239,7 @@ impl AniMeImage { let data = std::fs::read(path)?; let data = std::io::Cursor::new(data); let decoder = png_pong::Decoder::new(data)?.into_steps(); - let png_pong::Step { raster, delay: _ } = decoder - .last() - .ok_or(AnimeError::NoFrames)??; + let png_pong::Step { raster, delay: _ } = decoder.last().ok_or(AnimeError::NoFrames)??; let width; let pixels = match raster { diff --git a/rog-anime/src/error.rs b/rog-anime/src/error.rs index 6bfa7e3f..3033eea4 100644 --- a/rog-anime/src/error.rs +++ b/rog-anime/src/error.rs @@ -1,7 +1,7 @@ -use std::error::Error; -use std::fmt; use gif::DecodingError; use png_pong::decode::Error as PngError; +use std::error::Error; +use std::fmt; #[derive(Debug)] pub enum AnimeError { @@ -9,7 +9,9 @@ pub enum AnimeError { Io(std::io::Error), Png(PngError), Gif(DecodingError), - Format + Format, + /// The input was incorrect size, expected size is `IncorrectSize(width, height)` + IncorrectSize(u32, u32), } impl fmt::Display for AnimeError { @@ -21,6 +23,11 @@ impl fmt::Display for AnimeError { AnimeError::Png(e) => write!(f, "PNG error: {}", e), AnimeError::Gif(e) => write!(f, "GIF error: {}", e), AnimeError::Format => write!(f, "PNG file is not 8bit greyscale"), + AnimeError::IncorrectSize(width, height) => write!( + f, + "The input image size is incorrect, expected {}x{}", + width, height + ), } } } @@ -43,4 +50,4 @@ impl From for AnimeError { fn from(err: DecodingError) -> Self { AnimeError::Gif(err) } -} \ No newline at end of file +}