Rename crate to escpos-vfd and add tokio support Introduce a configurable crate-ready API with presets, typed errors, optional Tokio async support, and expanded documentation.
50 lines
2.6 KiB
Rust
50 lines
2.6 KiB
Rust
//! Синхронный старт с полностью ручными serial/display настройками.
|
|
|
|
use escpos_vfd::{DisplaySettings, SerialSettings, TextEncoding, Vfd, VfdConfig};
|
|
use serialport::{DataBits, FlowControl, Parity, StopBits};
|
|
use std::error::Error;
|
|
use std::time::Duration;
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
// Ручной пример показывает, что библиотека не держит глобальных `FIXED_BAUD` или
|
|
// `TABLE_CYR`: каждый параметр задаёт приложение.
|
|
let port_name = std::env::args()
|
|
.nth(1)
|
|
.unwrap_or_else(|| "/dev/cu.usbmodem101".to_string());
|
|
|
|
// Все serial-параметры задаются явно, без скрытого FIXED_BAUD.
|
|
let mut serial = SerialSettings::new(port_name, 9_600);
|
|
serial.data_bits = DataBits::Eight;
|
|
serial.parity = Parity::None;
|
|
serial.stop_bits = StopBits::One;
|
|
serial.flow_control = FlowControl::None;
|
|
serial.timeout = Duration::from_millis(100);
|
|
|
|
// `encoding` кодирует Rust-строку в байты, а `code_table` отвечает только за
|
|
// аппаратную команду `ESC t n`. Эти настройки часто должны совпадать по смыслу,
|
|
// но это два разных слоя протокола.
|
|
let mut display = DisplaySettings::new(20, 2, TextEncoding::Cp866);
|
|
|
|
// Если дисплей уже настроен DIP-переключателями или использует другой протокол
|
|
// выбора таблицы, оставьте `None`, и библиотека не отправит `ESC t`.
|
|
display.code_table = Some(6);
|
|
display.reset_on_open = true;
|
|
display.brightness = Some(1..=4);
|
|
display.brightness_settle = Duration::from_millis(2);
|
|
|
|
// `VfdConfig::new` валидирует геометрию, baud rate и queue capacity до открытия
|
|
// serial-порта, поэтому ошибки настроек видны сразу.
|
|
let config = VfdConfig::new(serial, display)?;
|
|
let mut display = Vfd::open(config)?;
|
|
|
|
// Для обычного текста используйте типизированные методы; `write_raw` нужен
|
|
// только для команд, которых пока нет в публичном API.
|
|
display.clear()?;
|
|
display.print_line(1, "Ручной режим")?;
|
|
|
|
// Координаты в библиотеке 1-based: первая колонка - x=1, первая строка - y=1.
|
|
display.print_at(1, 2, "20x2, CP866")?;
|
|
|
|
Ok(())
|
|
}
|