PRAKTIKA.plyask.in

Реализация платформенно-независимой библиотеки 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 — например, избегать утечек через циклы ссылок);
  • легко импортируется и используется в стороннем проекте.

Качественная реализация может привести не только к возврату полной суммы, но и к приглашению на доработку библиотеки или её интеграцию в реальный проект.