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