Menu

Commit [r37]  Maximize  Restore  History

[+] Парсим пакет данных от принтера, иначе ложные сообщения об ошибке

Почему это даёт ложные срабатывания:
Код ищет байты ошибок (0x45, 0x60 и т.д.) в любом месте принятого массива.
Когда приходит пакет 02 40 60 40 40 03 0d 0a (где ошибки нет), байт 0x60 случайно оказывается на 3-й позиции (индекс 2). Старый алгоритм находит его и ошибочно считает, что это ERR_CLP_HEAD_OPEN, хотя по протоколу код ошибки должен находиться строго в пятом байте (индекс 4), а статус общей ошибки — во втором байте (индекс 1).
Решение
Необходимо реализовать функцию, которая:
Ищет в потоке байт полную структуру пакета (начало 0x02 и конец 0x03 0x0D 0x0A).
Проверяет строго второй (0x45) и пятый (коды ошибок) байты.
Использует буфер накопления, так как данные по UART могут приходить частями (прерывания могут срабатывать несколько раз, пока пакет не соберётся целиком).

dynamicsalex 2026-08-27

changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPCOM_Magnit.cpp
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPCOM_Magnit.cppproj
added /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPPacket.cpp
added /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPPacket.h
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.d
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.elf
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.hex
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.lss
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.map
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.srec
added /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPPacket.d
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/Makefile
changed /trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/makedep.mk
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPCOM_Magnit.cpp Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPCOM_Magnit.cppproj Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPPacket.cpp Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/CLPPacket.h Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.d Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.hex Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.lss Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.map Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPCOM_Magnit.srec Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/CLPPacket.d Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/Makefile Diff Switch to side-by-side view
Loading...
/trunk/CLPCOM_Magnit_Experimental/Firmware/CLPCOM_Magnit/CLPCOM_Magnit/Debug/makedep.mk Diff Switch to side-by-side view
Loading...