act-common

Сейчас -- набор самостоятельных библиотек под разные платформы, схемы, документы и т.д.

Включает:

  1. act-common-src-logger -- [Win] простой логгер
  2. act-common-src-com-port -- [Win] работа с COM-портом в стиле "реактор" (IO Reactor)
  3. act-common-mc-common -- [AVR] набор утилит для микроконтроллера
  4. act-common-schema -- некоторые общие схемы

act-common-src-logger

Библиотека для логирования процесса работы программы. Поддерживает не так много функций, однако позволяет перенаправлять лог в произвольное место (файл, консоль, GUI), хотя это и реализуется пользователем.

Подробная инструкция по установке и настройке представлена находится в репозитории.

Репозиторий

act-common-src-com-port

Обертка над WinAPI по части работы с COM-портом, а также реализованный IO Reactor.

Паттерн IO Reactor предполагает наличие некоего реактора, который, будучи (сконфигурированным и) запущенным, работает в фоновом потоке (нескольких потоках), организуя две очереди (ввода и вывода соответсвенно). При поступлении входных данных реактор производит набор преобразований над ними, и уже эти окончательные данные кладутся в очередь ввода (или вызывается функция обратного вызова). При наличии свободного места в канале вывода реактор производит запись в него элемента очереди вывода. Реактор может быть конфигурирем "на лету", т.е. может допускать замену канала ввода-вывода, в т.ч. продолжать работу в режиме ожидания при выходе нижележащего канала ввода-вывода из строя.

Реактор полностью конфигурируем "на лету". В случае неисправности COM-порта ожидает установки корректного COM-порта.

Двустроннее преобразование "объект пакета"-"байты" осуществляет т.н. "диалект".

Описание типов приводится в README репозитория. Примеры расположены внутри репозитория под директорией examples.

Некоторые примеры

Создание и открытие COM-порта:

com_port port;
port.open(com_port_options("COM3", CBR_4800, 8, true, ODDPARITY, ONESTOPBIT));

if (!port.open()) { /* log error message */ }

Создание и конфигурирование реактора (custom_dialect -- некоторый реализованный диалект -- наследник dialect < ipacket_t, opacket_t >):

reactor < custom_dialect > r;
r.start();

r.supply_port(std::move(port));

Отправка пакетов данных (в предположении, что custom_dialect -- наследник dialect < unsigned char, unsigned char >):

r.supply_opacket(unsigned char(56));
r.supply_opacket(unsigned char(57));
r.supply_opacket(unsigned char(58));

Прием пакетов данных (в том же предположении):

std::list<unsigned char> packets;
{
    // обязательно защитить чтение блокировкой!
    reactor_t::guard_t guard(r.iqueue_mutex);
    // обязательно очистить очередь пакетов!
    packets.splice(packets.end(), r.iqueue);
}

Остановка реактора:

r.stop();
r.join(); // фактическое ожидание остановки

Репозиторий

Примеры

act-common-mc-common

В основном содержит определения для упрощения ввода-вывода со стороны микроконтролера.

Реализует кольцевые буферы на статических массивах. Предоставляет два варианта статических массивов (со статическим и динамическим размером). Позволяет использовать блокировки в стиле c++0x.

Подробная документация представлена в репозитории.

Репозиторий

results matching ""

    No results matching ""