в событие: цикл читаем пока читается из порта и пишем в буфер программы
Анализ_буфера()
если, то есть полный пакет :
удалить данные пакета из буфера программы или указатель двинуть на конец пакета в буфере
используем_пакет_по_назначению
иначе, то ничего не делаем ждем события с куском пакета
....
(ждем новое событие)