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:
Кобелев Андрей Андреевич
2026-08-16 11:24:20 +05:00
parent efc53e6ef5
commit 244d907cc2
25 changed files with 3823 additions and 782 deletions
+34
View File
@@ -0,0 +1,34 @@
//! Асинхронный worker на Tokio с bounded queue и явным shutdown.
mod common;
use escpos_vfd::tokio::AsyncVfdWorker;
use std::error::Error;
use std::time::Duration;
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn Error>> {
// В Cargo.toml у примера указан `required-features = ["tokio"]`. Поэтому sync-only
// пользователи не подтягивают async-зависимости, а сам файл остаётся обычным
// понятным Tokio-примером без cfg-обёрток.
let config = common::ExampleArgs::from_env()?.config;
// Async worker открывает serial-порт через `tokio-serial` и запускает одну task,
// которая последовательно пишет команды в устройство.
let worker = AsyncVfdWorker::start(config).await?;
let display = worker.handle();
// Каждый await завершается после записи команды worker-ом или возвращает ошибку I/O.
// Если очередь заполнена, `send` внутри handle даст backpressure через `.await`.
display.clear().await?;
display.set_brightness(2).await?;
display.print_line_diff(1, "Tokio worker").await?;
display.print_line_diff(2, "bounded queue").await?;
// Держим текст на физическом дисплее пару секунд, затем делаем graceful shutdown:
// ранее принятые команды завершатся, task остановится, serial transport вернётся.
tokio::time::sleep(Duration::from_secs(2)).await;
worker.shutdown().await?;
Ok(())
}