use eyre::{bail, Context}; use labelo_p710bt::commander::P710btCommander; use labelo_p710bt::protocol::{AdvancedModeSettings, VariousModeSettings}; use labelo_p710bt::usb::UsbP710bt; use tracing::info; use tracing_subscriber::layer::SubscriberExt; use tracing_subscriber::util::SubscriberInitExt; pub fn main() -> eyre::Result<()> { tracing_subscriber::registry() .with( tracing_subscriber::EnvFilter::try_from_default_env() .unwrap_or_else(|_| "p710bt=debug,info".into()), ) .with(tracing_subscriber::fmt::layer()) .init(); let mut devices = UsbP710bt::list_devices()?; if devices.len() != 1 { bail!("Found {} P710BT devices, aborting.", devices.len()); } let device = UsbP710bt::open(devices.remove(0))?; let mut printer = P710btCommander::new(device)?; printer.invalidate_and_initialise()?; let status = printer.status()?; info!("Printer status: {status:?}"); printer.set_raster_mode_and_automatic_notification()?; // printer.print_information(status.media_type.unwrap(), status.media_width_mm, 128, true) // .context("PIC")?; // // printer.set_mode_settings( // VariousModeSettings::AUTO_CUT, // AdvancedModeSettings::HIGH_RES_PRINTING, // 4 // )?; // for i in 0u16..128u16 { // let mut line = [0u8; 16]; // for bit in 0..16 { // if (i >> bit) & 1 == 1 { // line[bit as usize] = 0xFF; // } // } // // //eprintln!("ln = {line:?}"); // // printer.raster_line(line) // .with_context(|| format!("line {line:?}"))?; // } // // printer.finish_printing(true)?; for page in 0..3 { printer .print_information( status.media_type.unwrap(), status.media_width_mm, 512, page == 0, ) .context("PIC")?; printer.set_mode_settings( VariousModeSettings::AUTO_CUT, AdvancedModeSettings::HIGH_RES_PRINTING | AdvancedModeSettings::NO_BUFFER_CLEARING_WHEN_PRINTING, 4, )?; for i in 0u16..512u16 { let mut line = [0u8; 16]; for bit in 0..16 { if ((i + page * 512) >> bit) & 1 == 1 { line[bit as usize] = 0xFF; } } //eprintln!("ln = {line:?}"); printer .raster_line(line) .with_context(|| format!("line {line:?}"))?; } printer.finish_printing(page == 3)?; } Ok(()) }