@@ -0,0 +1,49 @@
|
|||||||
|
name: Rust
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
name: Test
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install Rust
|
||||||
|
uses: dtolnay/rust-toolchain@1.85
|
||||||
|
with:
|
||||||
|
components: rustfmt, clippy
|
||||||
|
|
||||||
|
- name: Cache
|
||||||
|
uses: Swatinem/rust-cache@v2
|
||||||
|
|
||||||
|
- name: Format
|
||||||
|
run: cargo fmt --all -- --check
|
||||||
|
|
||||||
|
- name: Check
|
||||||
|
run: cargo check --all-targets --all-features
|
||||||
|
|
||||||
|
- name: Clippy
|
||||||
|
run: cargo clippy --all-targets --all-features -- -D warnings
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: cargo test --all-features
|
||||||
|
|
||||||
|
- name: Documentation
|
||||||
|
env:
|
||||||
|
RUSTDOCFLAGS: "-D warnings"
|
||||||
|
run: cargo doc --no-deps --all-features
|
||||||
|
|
||||||
|
- name: Package
|
||||||
|
run: cargo package --allow-dirty
|
||||||
@@ -1,5 +1,10 @@
|
|||||||
# escpos-vfd
|
# escpos-vfd
|
||||||
|
|
||||||
|
[](https://crates.io/crates/escpos-vfd)
|
||||||
|
[](https://docs.rs/escpos-vfd)
|
||||||
|
[](https://www.rust-lang.org)
|
||||||
|
[](https://git.belvedersky.ru/belvedersky/vfd/src/branch/master/LICENSE-MIT)
|
||||||
|
|
||||||
`escpos-vfd` — Rust-библиотека для символьных VFD-дисплеев покупателя (customer display),
|
`escpos-vfd` — Rust-библиотека для символьных VFD-дисплеев покупателя (customer display),
|
||||||
которые работают через serial-порт и понимают Epson/ESC/POS-совместимые команды.
|
которые работают через serial-порт и понимают Epson/ESC/POS-совместимые команды.
|
||||||
|
|
||||||
@@ -53,15 +58,15 @@ fn main() -> escpos_vfd::Result<()> {
|
|||||||
|
|
||||||
## Что выбрать
|
## Что выбрать
|
||||||
|
|
||||||
| Задача | API |
|
| Задача | API |
|
||||||
| --- | --- |
|
| -------------------------------------------- | ------------------------------------ |
|
||||||
| Запустить проверенный 20×2 CP866 дисплей | `VfdConfig::preset(...)` |
|
| Запустить проверенный 20×2 CP866 дисплей | `VfdConfig::preset(...)` |
|
||||||
| Настроить другой дисплей | `SerialSettings` + `DisplaySettings` |
|
| Настроить другой дисплей | `SerialSettings` + `DisplaySettings` |
|
||||||
| Писать напрямую из текущего потока | `Vfd` |
|
| Писать напрямую из текущего потока | `Vfd` |
|
||||||
| Отправлять команды из нескольких потоков | `VfdWorker` + `VfdHandle` |
|
| Отправлять команды из нескольких потоков | `VfdWorker` + `VfdHandle` |
|
||||||
| Писать напрямую из Tokio task | `tokio::AsyncVfd` |
|
| Писать напрямую из Tokio task | `tokio::AsyncVfd` |
|
||||||
| Отправлять команды из нескольких Tokio tasks | `tokio::AsyncVfdWorker` |
|
| Отправлять команды из нескольких Tokio tasks | `tokio::AsyncVfdWorker` |
|
||||||
| Отправить нестандартную команду | `write_raw(...)` |
|
| Отправить нестандартную команду | `write_raw(...)` |
|
||||||
|
|
||||||
## Настройка другого дисплея
|
## Настройка другого дисплея
|
||||||
|
|
||||||
@@ -123,12 +128,12 @@ control, с тайм-аутом `100 ms`. На Unix порт по умолчан
|
|||||||
|
|
||||||
`TextEncoding` определяет, как Rust-строка превращается в байты:
|
`TextEncoding` определяет, как Rust-строка превращается в байты:
|
||||||
|
|
||||||
| Значение | Назначение |
|
| Значение | Назначение |
|
||||||
| --- | --- |
|
| ------------- | ------------------------------------------------- |
|
||||||
| `Cp866` | CP866 / IBM866 |
|
| `Cp866` | CP866 / IBM866 |
|
||||||
| `Windows1251` | Windows-1251 / CP1251 |
|
| `Windows1251` | Windows-1251 / CP1251 |
|
||||||
| `Ascii` | только ASCII, остальные символы заменяются на `?` |
|
| `Ascii` | только ASCII, остальные символы заменяются на `?` |
|
||||||
| `Utf8` | UTF-8 без перекодирования |
|
| `Utf8` | UTF-8 без перекодирования |
|
||||||
|
|
||||||
`code_table` отвечает за команду `ESC t n`. Например, конкретному CP866-дисплею могут
|
`code_table` отвечает за команду `ESC t n`. Например, конкретному CP866-дисплею могут
|
||||||
одновременно понадобиться:
|
одновременно понадобиться:
|
||||||
@@ -280,34 +285,34 @@ vfd.write_raw(&[0x1b, 0x40])?;
|
|||||||
Библиотека использует `escpos_vfd::Result<T> = Result<T, VfdError>` и разделяет ошибки по
|
Библиотека использует `escpos_vfd::Result<T> = Result<T, VfdError>` и разделяет ошибки по
|
||||||
смыслу:
|
смыслу:
|
||||||
|
|
||||||
| Ошибка | Когда возникает |
|
| Ошибка | Когда возникает |
|
||||||
| --- | --- |
|
| --------------------------------- | ------------------------------------------- |
|
||||||
| `VfdError::Config(...)` | неверная конфигурация |
|
| `VfdError::Config(...)` | неверная конфигурация |
|
||||||
| `VfdError::Serial(...)` | ошибка открытия или настройки serial-порта |
|
| `VfdError::Serial(...)` | ошибка открытия или настройки serial-порта |
|
||||||
| `VfdError::Io(...)` | ошибка записи или `flush` |
|
| `VfdError::Io(...)` | ошибка записи или `flush` |
|
||||||
| `VfdError::InvalidCoordinate` | координата вне дисплея |
|
| `VfdError::InvalidCoordinate` | координата вне дисплея |
|
||||||
| `VfdError::InvalidLine` | строка вне `1..=rows` |
|
| `VfdError::InvalidLine` | строка вне `1..=rows` |
|
||||||
| `VfdError::UnsupportedBrightness` | неподдерживаемый уровень яркости |
|
| `VfdError::UnsupportedBrightness` | неподдерживаемый уровень яркости |
|
||||||
| `VfdError::QueueClosed` | очередь worker-а закрыта |
|
| `VfdError::QueueClosed` | очередь worker-а закрыта |
|
||||||
| `VfdError::WorkerStopped` | worker остановился до подтверждения команды |
|
| `VfdError::WorkerStopped` | worker остановился до подтверждения команды |
|
||||||
| `VfdError::WorkerPanicked` | sync worker завершился с panic |
|
| `VfdError::WorkerPanicked` | sync worker завершился с panic |
|
||||||
| `VfdError::WorkerCancelled` | Tokio worker был отменён |
|
| `VfdError::WorkerCancelled` | Tokio worker был отменён |
|
||||||
|
|
||||||
## Примеры
|
## Примеры
|
||||||
|
|
||||||
В репозитории есть небольшие аппаратные примеры для основных сценариев:
|
В репозитории есть небольшие аппаратные примеры для основных сценариев:
|
||||||
|
|
||||||
| Пример | Что показывает |
|
| Пример | Что показывает |
|
||||||
| --- | --- |
|
| -------------- | -------------------------- |
|
||||||
| `preset_sync` | запуск с готовым пресетом |
|
| `preset_sync` | запуск с готовым пресетом |
|
||||||
| `manual_sync` | ручную конфигурацию |
|
| `manual_sync` | ручную конфигурацию |
|
||||||
| `tokio_worker` | Tokio worker |
|
| `tokio_worker` | Tokio worker |
|
||||||
| `clock` | частые diff-обновления |
|
| `clock` | частые diff-обновления |
|
||||||
| `marquee` | бегущую строку |
|
| `marquee` | бегущую строку |
|
||||||
| `brightness` | яркость |
|
| `brightness` | яркость |
|
||||||
| `position` | позиционирование |
|
| `position` | позиционирование |
|
||||||
| `update_at` | частичные обновления |
|
| `update_at` | частичные обновления |
|
||||||
| `blink` | повторную запись в позицию |
|
| `blink` | повторную запись в позицию |
|
||||||
|
|
||||||
Например:
|
Например:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user