PRAKTIKA.plyask.in

Реализация кроссплатформенной библиотеки HDLC-протокола на C

Разработать чистую, независимую от платформы библиотеку на языке C, реализующую протокол HDLC. Библиотека должна обеспечивать сборку и парсинг фреймов, управление порядком пакетов и поддержку всех режимов работы HDLC. Пользователь библиотеки управляет временем, вводом/выводом и подключением к транспортному уровню извне — библиотека не знает ни о сокетах, ни о UART, ни о таймерах, ни о ОС. Это позволяет использовать её как на embedded-платформах, так и в обычных десктопных приложениях.

Предоплата 50 000 ₽

При идеальном результате могу вернуть до 100% — 50 000 ₽

Цель и задачи работы

Цель — создать пригодную к использованию в реальных проектах независимую реализацию протокола HDLC, подходящую для систем с ограниченными ресурсами, а также десктопных приложений. Основная задача — реализовать весь набор возможностей HDLC с удобным API, который не зависит от конкретной платформы или среды выполнения.

Дополнительные задачи включают:

  • спроектировать API, подходящий как для embedded, так и для системного программирования;
  • предусмотреть архитектуру, допускающую расширение (например, добавление логгирования или тестовых хуков);
  • покрыть код юнит-тестами хотя бы частично (минимум — корректная сборка и парсинг фреймов).

Содержание работы

Тебе нужно:

  • Изучить спецификацию HDLC и описать коротко (в Markdown) её основные режимы: Normal Response Mode (NRM), Asynchronous Response Mode (ARM), Asynchronous Balanced Mode (ABM), и особенности управления потоком и подтверждений.
  • Реализовать сборку и разбор HDLC-фреймов, включая:
    • адресацию,
    • контрольную сумму (FCS),
    • экранирование спецсимволов (bit/byte stuffing),
    • и контроль длины.
  • Реализовать внутреннее состояние канала, управляющее порядком кадров, переподтверждениями и тайм-аутами.
  • Спроектировать API верхнего уровня с функциями:
    • hdlc_init(...)
    • hdlc_connect(...)
    • hdlc_send(...)
    • hdlc_receive(...)
    • hdlc_input_from_link(...) (приходит байт/массив байтов от UART/сокета)
    • hdlc_output_to_link(...) (получить байты, которые надо отправить)
    • hdlc_tick(...) (вызов для обработки внутренних таймеров)
  • Подготовить простейший CLI-тест (или набор юнит-тестов), эмулирующий обмен между двумя инстансами библиотеки в разных режимах.
  • Оформить всё в виде рабочей библиотеки с заголовочным файлом hdlc.h и реализацией hdlc.c.

Результат и критерии завершения работы

Ожидаемый результат — чистая, воспроизводимая и протестированная библиотека HDLC с независимым от среды API. Библиотека должна собираться стандартным gcc или clang без специальных флагов и зависимостей. Результат считается завершённым, если:

  • все заявленные режимы работы HDLC реализованы;
  • сборка/парсинг фреймов работает корректно;
  • API удобен и прозрачен для интеграции (будет проверено на реальном прототипе);
  • код оформлен по базовым стандартам (читаемый, с комментариями, без "магических чисел");
  • работа сопровождается README с описанием API и кратким объяснением архитектуры;
  • при тестировании не возникает утечек памяти (valgrind, если используешь malloc);
  • покрытие хотя бы базовых кейсов тестами.

Хорошая архитектура и внимание к деталям могут стать поводом для возврата полной суммы или предложения дальнейшего оплачиваемого сотрудничества.