mmote.ru/content/posts/niimbot-proto/index.md
MultiMote 14cf65bbf0
All checks were successful
Build and deploy mmote.ru / Build-And-Deploy (push) Successful in 34s
niimbot-proto: черновик
2024-07-25 21:06:25 +03:00

2.2 KiB
Raw Blame History

title description date draft tags categories featured_image lastmod telegram_entry_id type
Изучаем протокол принтеров Niimbot Изучаем протокол принтеров Niimbot и печатаем этикетки, отправляя пакеты 2024-06-29T21:10:28+03:00 false
bluetooth
niimbot
термопечать
Niimbot B1
Niimbot B110
реверс-инжиниринг
javascript
typescript
web
reverse-engineering
miniature.jpg 2024-07-25T21:04:37+03:00 default

После того, как поигрались с niimprint, захотелось чего-то большего. У меня появилась идея написать полноценный веб-интерфейс для печати, в котором можно будет и рисовать этикетки, и печатать. Для этого я решил изучить протокол принтеров.

Вооружившись Wireshark и android телефоном, снял дампы обмена данными с принтером по bluetooth. Для этого нужно было включить опцию "Bluetooth HCI Snoop Log" в настройках разработчика, а потом на компьютере после печати запустить adb bugreport <filename>.

Изучив пакеты и сверившись с другими открытыми данными, получилась такая структура пакета:

niimbot packet

  • Prefix префикс 0x03, присутствующий только при одной команде - Connect.
  • Head всегда 2 байта 0x55 0x55.
  • Command ID команды (пакета).
  • Data length количество байтов данных, идущих далее.
  • Data непосредственно данные в количестве Data length.
  • Checksum вычисляется с помощью XOR всех байтов от Command до последнего байта Data.
  • Tail всегда 2 байта 0xAA 0xAA.