Commit Diff


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<GrayImage> {
+	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::<Vec<u8>>();
 
-	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(())
 }