Реализация платформенно-независимой библиотеки HDLC-протокола на Python
Разработать независимую от среды выполнения библиотеку на Python, реализующую протокол HDLC. Библиотека должна уметь собирать и разбирать фреймы, отслеживать порядок пакетов, поддерживать все режимы работы HDLC и предоставлять API верхнего уровня. При этом она не зависит от конкретного транспорта — данные от физического уровня и к нему передаются через вызовы функций, а обработка таймеров осуществляется извне. Это делает библиотеку пригодной как для десктопных, так и для embedded-платформ, где используется Python.
Предоплата 40 000 ₽
При идеальном результате могу вернуть до 100% — 40 000 ₽Цель и задачи работы
Цель — создать на Python библиотеку, реализующую протокол HDLC таким образом, чтобы она могла использоваться в различных проектах, независимо от платформы. Задача — спроектировать гибкий и расширяемый модуль с чистым API, отделённый от канального уровня, транспорта и ОС. Библиотека должна быть написана в классическом стиле с акцентом на читаемость, модульность и повторное использование.
Дополнительные задачи:
- покрыть ключевые функции тестами;
- обеспечить полную сериализацию и десериализацию HDLC-кадров;
- реализовать базовое управление состоянием протокола и обработку таймеров.
Содержание работы
Тебе нужно:
- Ознакомиться с принципами работы HDLC (особенно важны режимы NRM, ARM, ABM) и кратко описать их поведение для документации.
- Спроектировать архитектуру: возможно, несколько классов —
HDLCProtocol
,HDLCFrame
,HDLCStateMachine
или аналогично. - Реализовать следующие основные функции/методы:
- генерация HDLC-фрейма (адрес, управляющий байт, полезная нагрузка, контрольная сумма, экранирование);
- разбор фрейма (в том числе отложенная обработка при частичном вводе);
- FIFO-буферы для входящих и исходящих байтов;
- имитация потока времени — отдельный вызов, обрабатывающий таймерные события (например, timeouts, retransmit);
- API, включающее:
send(data: bytes) -> None
receive() -> Optional[bytes]
input_from_channel(data: bytes) -> None
get_data_to_send() -> bytes
tick(elapsed_ms: int) -> None
- Реализовать CLI-пример или юнит-тесты, где эмулируется обмен между двумя экземплярами библиотеки.
- Написать короткое README, где описан способ подключения, примеры и архитектура.
Результат и критерии завершения работы
Ожидаемый результат — готовая к использованию библиотека HDLC на Python, с модульной архитектурой, покрытием тестами и чистым API. Критерии завершения:
- поддержка сборки и разборки фреймов;
- реализована логика подтверждений и обработки таймеров;
- библиотека полностью независима от сокетов, UART, asyncio и других внешних систем;
- API оформлено в виде классов с чётко разделёнными зонами ответственности;
- код читаемый, без "магии", с аннотациями типов;
- сопровождается юнит-тестами и базовой документацией;
- отсутствие критичных багов и проблем с памятью (важно даже в Python — например, избегать утечек через циклы ссылок);
- легко импортируется и используется в стороннем проекте.
Качественная реализация может привести не только к возврату полной суммы, но и к приглашению на доработку библиотеки или её интеграцию в реальный проект.