Меню Закрыть

Разделение данных на пакеты

Если существует ограничение по объему передаваемых данных за одну транзакцию – данные будут разбиты на фрагменты и переданы пакетами. Подробнее о структуре передаваемых данных написано здесь.

Данные, разделенные на фрагменты, передаются в двух типах пакетов:

Заглавный пакет 0x87

Передача данных в пакетах начинается с заглавного пакета. Размер заголовка (не включая массив data) пакета – 8 байт. Первый байт заглавного пакета всегда 0x87.

НазваниеРазмерОписание
flag1 байтПостоянная. 0x87
packetID2 байтаID пакета.
packetsCnt1 байтКоличество пакетов, в которых будут переданы данные.
dataSize2 байтаСколько данных во всех пакетах.
crc1 байтКонтрольная сумма от данных во всех пакетах.
packDataSz1 байтСколько данных в данном пакете.
data[]packDataSzДанные.
Структура заглавного пакета

Заглавный пакет содержит информацию об общем числе пакетов packetsCnt и общем количестве байт данных dataSize, а так же из самих данных data.

Второй и последующие пакеты 0x88

Последующие пакеты всегда начинаются с байта 0x88. Размер 5 байт (не включая массив data), имеют следующую структуру:

НазваниеРазмерОписание
flag1 байтПостоянная. 0x88
packetID2 байтаID пакета.
packetNum1 байтНомер текущего пакета, начиная с 0, где 0 – заглавный пакет.
packDataSz1 байтСколько данных в данном пакете.
data[]packDataSzДанные.
Структура последующих пакетов

Алгоритм работы с пакетами

Получив заглавный пакет с 0x87 создается временное хранилище и определяется какое будет общее количество пакетов. При получении пакета 0x88 проверяется packetNum и packetID, добавляется в хранилище. После получения последнего пакета извлекаются все поля data из всех пакетов. Проверяется CRC от данных, хранилище очищается, данные передаются далее для обработки. Обработка полученных данных выполняется в соответствии с описанием здесь.

Пример разделения данных на пакеты: