Rename crate to escpos-vfd and add tokio support
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.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
//! Синхронный старт с полностью ручными 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(())
|
||||
}
|
||||
Reference in New Issue
Block a user