Как правильно обрабатывать фрагментацию буфера и блокировку потока в Web Serial API п
Всем привет!
Пишу диагностическую панель в браузере с использованием Web Serial API (плюс тестирую аналогичный сервис на Node.js через serialport) и столкнулся с неприятной проблемой фрагментации бинарных потоков и зависания reader-локов. Надеюсь, кто-то из опытных коллег уже набивал шишки на стыке фронтенда и работы с железом. Немного контекста: мы собираем в лаборатории тестовый стенд для снятия телеметрии с микроконтроллеров. Физически все это подключено через целый ворох компьютерных и сетевых кабелей — самодельные переходники RS-485/USB, различные сервисные патч https://serverorbit.com/cables/miscellaneous -корды и витые пары для снятия сигналов с датчиков. Контроллеры непрерывно шлют пакеты телеметрии (фиксированные фреймы по 32 байта) по последовательному интерфейсу на скорости 115200 бод. Основная проблема в том, что чанки из ReadableStream в браузере приходят произвольными кусками и совершенно не привязаны к границам наших пакетов. В зависимости от таймингов ОС и буферизации данных в кабеле, в одном read() может прийти 12 байт, а в следующем — 52 байта, содержащих остаток прошлого пакета и начало нового. Сейчас базовый цикл чтения выглядит примерно так: |
| Часовой пояс GMT +3, время: 15:07. |