Program Listing for File main_trickle.cpp

Return to documentation for file (trickle/main_trickle.cpp)

#include "trickle.hpp"

#include "ers/ers.h"
#include <format>


static volatile std::sig_atomic_t signal_status;
void signal_handler(int s){signal_status = s;}

int main(int argc, char** argv)
{
    std::unique_ptr<ConfigTrickle> c = std::make_unique<ConfigTrickle>();
    c->parse(argc, argv);

    auto trkl = trickle::Trickle<ConfigTrickle, FlxDevice, FlxFromHostBuffer>(std::move(c));

    for (auto & dev_no : trkl.cfg->resource.device){
        trkl.devices.emplace_back(std::make_unique<FlxDevice>(*trkl.cfg, dev_no));
        trkl.dma_buffers.emplace(dev_no, std::make_unique<FlxFromHostBuffer>(trkl.devices.back()));
    }

    trkl.start();

    std::signal(SIGINT, signal_handler);
    std::signal(SIGTERM, signal_handler);

    while (signal_status == 0) {
        std::this_thread::sleep_for(std::chrono::milliseconds(trkl.cfg->stats.monitoring_period_ms));
    }
    ERS_INFO(std::format("Received signal {}, exiting trickle configuration...", static_cast<int>(signal_status)));
    trkl.stop();
    return 0;
}