commit 5913bf0583323576119b67d131681eac7b44fd39 from: Benjamin Stürz date: Mon Feb 10 22:36:05 2025 UTC ppa6-print: make compatible with new ppa6 version commit - 7dc87c2e803b3891f2602718beffba9dfc9c00fa commit + 5913bf0583323576119b67d131681eac7b44fd39 blob - a424f0b334946592fb8742b9533967552a94fbea blob + 3fce12d2acc3bccdfe914a94b808502f3df70684 --- Cargo.lock +++ Cargo.lock @@ -606,15 +606,6 @@ dependencies = [ ] [[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - -[[package]] name = "jobserver" version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -866,10 +857,10 @@ dependencies = [ "cosmic-text", "env_logger", "image", - "itertools 0.14.0", "log", "open", "ppa6", + "rayon", ] [[package]] @@ -983,7 +974,7 @@ dependencies = [ "built", "cfg-if", "interpolate_name", - "itertools 0.12.1", + "itertools", "libc", "libfuzzer-sys", "log", blob - 96dea95ed7d82307d30c22533c7b5efe2ab3b0bd blob + 2ed3be8cc8109a4e3e559e4ee155da6724ee6c72 --- ppa6-print/Cargo.toml +++ ppa6-print/Cargo.toml @@ -9,9 +9,9 @@ cosmic-text = "0.12.1" clap = { version = "4.5.28", features = ["derive"] } clap-num = "1.2.0" image = "0.25.5" -itertools = "0.14.0" open = "5.3.2" ppa6.workspace = true env_logger = "0.11.6" clap-verbosity = "2.1.0" log = "0.4.25" +rayon = "1.10.0" blob - 440bb5d975d986111bc18f835dc355ea4a65dcd0 blob + 48f42677e545198d53d9a7dfba103a4c7efbb1a4 --- ppa6-print/src/main.rs +++ ppa6-print/src/main.rs @@ -5,8 +5,8 @@ use clap_num::maybe_hex; use clap_verbosity::Verbosity; use cosmic_text::{Attrs, Buffer, Color, FontSystem, Metrics, Shaping, SwashCache}; use image::{imageops::{dither, ColorMap, FilterType}, DynamicImage, GrayImage, ImageFormat, ImageReader, Luma, RgbImage}; -use ppa6::{usb_context, Document, Printer}; -use itertools::Itertools; +use ppa6::Printer; +use rayon::prelude::*; #[derive(Parser)] struct Cli { @@ -122,15 +122,32 @@ fn rotate(img: GrayImage, deg: usize) -> GrayImage { } fn picture(cli: &Cli, data: &[u8]) -> Result { + log::trace!("parsing..."); let img = ImageReader::new(Cursor::new(data)) .with_guessed_format()? .decode()? .into_luma8(); - let mut img = DynamicImage::ImageLuma8(resize(rotate(img, cli.rotate))) - .brighten(cli.brighten) - .adjust_contrast(cli.contrast) - .into_luma8(); + + log::trace!("rotating..."); + let img = rotate(img, cli.rotate); + + log::trace!("resizing..."); + let mut img = DynamicImage::ImageLuma8(resize(img)); + + if cli.brighten != 0 { + log::trace!("brightening..."); + img = img.brighten(cli.brighten); + } + + if cli.contrast != 0.0 { + log::trace!("adjusting contrast..."); + img = img.adjust_contrast(cli.contrast); + } + + let mut img = img.into_luma8(); assert_eq!(img.width(), 384); + + log::trace!("dithering..."); dither(&mut img, &BlackWhiteMap(cli.threshold)); Ok(img) } @@ -211,17 +228,18 @@ fn main() -> Result<()> { return Ok(()); } + log::trace!("mapping..."); let pixels = img - .pixels() + .par_pixels() .map(|c| (c.0[0] < cli.threshold) ^ cli.invert) .chunks(8) - .into_iter() .map(|chunk| { chunk + .iter() .enumerate() .fold(0u8, |mut acc, (i, c)| { assert!(i < 8); - if c { + if *c { acc |= 128 >> i; } acc @@ -229,23 +247,24 @@ fn main() -> Result<()> { }) .collect::>(); - let doc = Document::new(pixels)?; - - let ctx = usb_context()?; - let mut printer = Printer::find(&ctx)?; - + let mut printer = Printer::find()?; + printer.reset()?; log::info!("IP: {}", printer.get_ip()?); - log::info!("Firmware: {}", printer.get_firmware()?); + log::info!("Firmware: {}", printer.get_firmware_ver()?); log::info!("Serial: {}", printer.get_serial()?); - log::info!("Hardware: {}", printer.get_hardware()?); + log::info!("Hardware: {}", printer.get_hardware_ver()?); log::info!("Name: {}", printer.get_name()?); log::info!("MAC: {:x?}", printer.get_mac()?); log::info!("Battery: {}%", printer.get_battery()?); - for i in 0..cli.num { - printer.print(&doc, cli.feed && i == (cli.num - 1))?; + for _ in 0..cli.num { + printer.print_image_chunked(&pixels, 384)?; } + if cli.feed { + printer.push(0x60)?; + } + Ok(()) }