Skip to content

Библиотека для упаковки и распаковки данных по алгоритму Хэмминга (избыточные данные для восстановления)

License

Notifications You must be signed in to change notification settings

GyverLibs/Hamming

Repository files navigation

latest PIO Foo Foo Foo

Foo

Hamming

Библиотека для упаковки и распаковки данных по алгоритму Хэмминга (избыточные данные для восстановления)

  • Порядок алгоритма 4-7 (чем выше, тем надёжнее, но дольше обработка)
  • Восстановление данных, повреждённых при пересылке
  • Принимает любой тип данных

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Установка

  • Библиотеку можно найти по названию Hamming и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Инициализация

Hamming<5> buf;   // <> - порядок кода (4-7)

Использование

// запаковать данные любого типа в буфер, возвращает статус операции
uint8_t pack(T &data);
uint8_t pack(uint8_t *ptr, uint32_t size);

// распаковать данные из буфера, возвращает статус операции
uint8_t unpack(uint8_t* data, uint32_t size);

uint8_t status();       // возвращает статус последней операции
uint32_t length();      // размер буфера (больше, чем размер входных данных)
void stop();            // освободить буфер
uint8_t *buffer;        // внутренний буфер

// статусы операции (pack/unpack):
// 0 - ОК
// 1 - исправлены ошибки (unpack)
// 2 - есть неисправленные ошибки (unpack)
// 3 - parity error (unpack)
// 4 - битый пакет (unpack)
// 5 - ошибка аллокации буфера

Пример

Остальные примеры смотри в examples!

#include <Hamming.h>
void setup() {
  Serial.begin(9600);

  // создали дату (любой тип)
  char data0[] = "Hello, world! Lorem Ipsum";

  // запаковали
  Hamming<5> buf;   // <> - порядок кода (4-7)
  // пакуем во внутренний буфер buf.buffer
  buf.pack(data0);  // 12мс
  
  // запакованные данные хранятся в buf.buffer с размером buf.length()
  // можно их "отправить"
  
  // ======== "ПЕРЕДАЧА" ========

  // про@бали часть (два байта!)
  buf.buffer[5] = 0;
  buf.buffer[6] = 0;
  
  // ======== "ПРИЁМ" ========

  // распаковываем. Порядок в <> такой же!
  Hamming<5> buf2;
  
  // передаём "принятые" запакованные данные и их длину (её тоже надо передать или знать)
  buf2.unpack(buf.buffer, buf.length());  // 6мс
  
  // выводим как строку
  Serial.println((char*)buf2.buffer);
  
  // выводим статус распаковки
  Serial.println(buf2.status());
}

void loop() {
}

Версии

  • v1.0
  • v1.1 - исправлена критическая ошибка
  • v1.2 - добавлена bool pack(uint8_t *ptr, uint32_t size)
  • v1.3 - исправлена критическая ошибка
  • v1.3.1 - мелкие улучшения

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для упаковки и распаковки данных по алгоритму Хэмминга (избыточные данные для восстановления)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages