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:
+25
-21
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user