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
+25 -21
View File
@@ -2,47 +2,51 @@
mod common;
use anyhow::Result;
use std::error::Error;
use m::worker::VfdWorker;
use escpos_vfd::VfdWorker;
fn main() -> Result<()> {
// args:
// 1) port (default: /dev/cu.usbmodem101)
// 2) width (default: 20)
// 3) delay_ms (default: 80)
let mut args = common::ExampleArgs::from_env();
fn main() -> Result<(), Box<dyn Error>> {
// Аргументы:
// 1) port - serial-порт дисплея;
// 2) width - ширина строки, по ней ограничиваем движение курсора;
// 3) delay_ms - скорость движения символа.
let mut args = common::ExampleArgs::from_env()?;
let delay_ms: u64 = args.parse_or(80);
let width = args.width;
let columns = args.columns;
// Worker сериализует `print_at`: сначала стираем старую позицию, затем рисуем новую.
let worker = VfdWorker::start(args.config)?;
let vfd = worker.handle();
vfd.clear();
vfd.clear()?;
// Статика
let _ = vfd.print_line_diff(1, "print_at demo");
let _ = vfd.print_line_diff(2, "--------------------"); // будет обрезано по width
// Статичную шапку пишем через diff-метод. Вторая строка ниже станет рабочей областью.
vfd.print_line_diff(1, "print_at demo")?;
// Строка автоматически обрежется по настроенной ширине дисплея.
vfd.print_line_diff(2, "--------------------")?;
// “курсор бегает по 2-й строке
// "Курсор" бегает по 2-й строке. Координаты в API начинаются с 1, не с 0.
let y = 2u8;
let mut x: u8 = 1;
let mut dir: i8 = 1;
// чтобы не оставлять хвост помним прошлую позицию и стираем её пробелом
// Чтобы не оставлять хвост, помним прошлую позицию и стираем её пробелом.
let mut prev_x: u8 = x;
loop {
// стереть прошлую позицию
let _ = vfd.print_at(prev_x, y, " ");
// Стереть прошлую позицию.
vfd.print_at(prev_x, y, " ")?;
// нарисовать новую
let _ = vfd.print_at(x, y, ""); // можно заменить на "*" если надо
// Нарисовать новую. Если дисплей плохо показывает этот символ в выбранной
// таблице, замените его на ASCII "*".
vfd.print_at(x, y, "")?;
prev_x = x;
// шаг
// Шаг вправо/влево с отражением от границ настроенной ширины.
if dir > 0 {
if (x as usize) >= width {
if (x as usize) >= columns {
dir = -1;
} else {
x += 1;