commit 69eb0be76963e3aa5eb5d74876a06f6ed741e518 from: Benjamins Stürz date: Sat Feb 08 15:02:17 2025 UTC add initial ppa6-cups driver commit - 1f0257d4d8969af8d472921bc67ce67fce21d69e commit + 69eb0be76963e3aa5eb5d74876a06f6ed741e518 blob - 78300644d9d42baf9d584d7c4797842ba7c81ee8 blob + 1693cd4507d222c600750560861d390748df5a08 --- Cargo.lock +++ Cargo.lock @@ -2466,6 +2466,13 @@ dependencies = [ ] [[package]] +name = "ppa6-cups" +version = "0.1.0" +dependencies = [ + "ppa6", +] + +[[package]] name = "ppa6-gui" version = "0.1.0" dependencies = [ blob - f32aebedd1356763aaad4963d1da765b5a917f49 blob + 4a89a4c105fe627d3e6be80e728e0116faa8b601 --- Cargo.toml +++ Cargo.toml @@ -2,6 +2,7 @@ resolver = "2" members = [ "ppa6", + "ppa6-cups", "ppa6-gui" ] blob - /dev/null blob + 59b21523a478d8104609900fbda77983eefb7a16 (mode 644) --- /dev/null +++ ppa6-cups/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "ppa6-cups" +version = "0.1.0" +edition = "2021" + +[dependencies] +ppa6 = { path = "../ppa6", version = "0.1.0" } blob - /dev/null blob + 65dee1b2bb880aea6ae3a9b2dec3f350b9c23227 (mode 644) --- /dev/null +++ ppa6-cups/src/main.rs @@ -0,0 +1,51 @@ +use std::{io::Read, path::PathBuf}; +use ppa6::{usb_context, Document, Printer}; + +#[derive(Debug)] +struct Job { + id: String, + user: String, + title: String, + num: u32, + options: String, + path: Option, +} + +fn parse_cli() -> Option { + let mut args = std::env::args(); + + Some(Job { + id: args.next()?, + user: args.next()?, + title: args.next()?, + num: args.next()?.parse().ok()?, + options: args.next()?, + path: args.next().map(PathBuf::from), + }) +} + +fn main() { + let Some(job) = parse_cli() else { + eprintln!("usage: ppa6 job_id user job_name ncopies options [file]"); + std::process::exit(1) + }; + + dbg!(&job); + + let ctx = usb_context().expect("failed to load libusb"); + let mut printer = Printer::find(&ctx).expect("no PeriPage A6 found"); + + let pixels = match job.path.as_deref() { + Some(path) => std::fs::read(path).expect("failed to read file"), + None => { + let mut buf = Vec::new(); + std::io::stdin().read_to_end(&mut buf).expect("failed to read stdin"); + buf + } + }; + let doc = Document::new(pixels).expect("failed to create document"); + + for _ in 0..job.num { + printer.print(&doc, true).expect("failed to print"); + } +}