MultiMote
14cf65bbf0
All checks were successful
Build and deploy mmote.ru / Build-And-Deploy (push) Successful in 34s
40 lines
2.2 KiB
Markdown
40 lines
2.2 KiB
Markdown
---
|
||
title: Изучаем протокол принтеров Niimbot
|
||
description: Изучаем протокол принтеров Niimbot и печатаем этикетки, отправляя пакеты
|
||
date: 2024-06-29T21:10:28+03:00
|
||
draft: false
|
||
tags:
|
||
- bluetooth
|
||
- niimbot
|
||
- термопечать
|
||
- Niimbot B1
|
||
- Niimbot B110
|
||
- реверс-инжиниринг
|
||
- javascript
|
||
- typescript
|
||
- web
|
||
categories:
|
||
- reverse-engineering
|
||
featured_image: miniature.jpg
|
||
lastmod: 2024-07-25T21:04:37+03:00
|
||
telegram_entry_id: ""
|
||
type: default
|
||
---
|
||
|
||
После того, как поигрались с [niimprint](/niimbot-d110-pc), захотелось чего-то большего. У меня появилась идея написать полноценный веб-интерфейс для печати, в котором можно будет и рисовать этикетки, и печатать. Для этого я решил изучить протокол принтеров.
|
||
|
||
<!--more-->
|
||
|
||
Вооружившись Wireshark и android телефоном, снял дампы обмена данными с принтером по bluetooth. Для этого нужно было включить опцию "Bluetooth HCI Snoop Log" в настройках разработчика, а потом на компьютере после печати запустить `adb bugreport <filename>`.
|
||
|
||
Изучив пакеты и сверившись с другими открытыми данными, получилась такая структура пакета:
|
||
|
||
![niimbot packet](packet.png)
|
||
|
||
* **Prefix** – префикс `0x03`, присутствующий только при одной команде - **Connect**.
|
||
* **Head** – всегда 2 байта `0x55` `0x55`.
|
||
* **Command** – ID команды (пакета).
|
||
* **Data length** – количество байтов данных, идущих далее.
|
||
* **Data** – непосредственно данные в количестве **Data length**.
|
||
* **Checksum** – вычисляется с помощью XOR всех байтов от **Command** до последнего байта **Data**.
|
||
* **Tail** – всегда 2 байта `0xAA` `0xAA`. |