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,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(())
|
||||
}
|
||||
Reference in New Issue
Block a user