--- 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), захотелось чего-то большего. У меня появилась идея написать полноценный веб-интерфейс для печати, в котором можно будет и рисовать этикетки, и печатать. Для этого я решил изучить протокол принтеров. Вооружившись Wireshark и android телефоном, снял дампы обмена данными с принтером по bluetooth. Для этого нужно было включить опцию "Bluetooth HCI Snoop Log" в настройках разработчика, а потом на компьютере после печати запустить `adb bugreport `. Изучив пакеты и сверившись с другими открытыми данными, получилась такая структура пакета: ![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`.