Program Listing for File main_tohost.cpp

Return to documentation for file (main_tohost.cpp)

#include "tohost.hpp"

#include <memory>

#include <ers/ers.h>


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<ConfigToHost> c = std::make_unique<ConfigToHost>();
    c->parse(argc, argv);

    try {
        auto th = ToHost<ConfigToHost, FlxDevice, FlxToHostBuffer>(std::move(c));

        for (auto & dev_no : th.cfg->resource.device){
            th.devices.emplace_back(std::make_unique<FlxDevice>(*th.cfg, dev_no));
            for(int id : th.cfg->resource.dma_ids){
                int unique_id = th.cfg->get_unique_dmaid(id, dev_no);
                th.dma_buffers.emplace(unique_id, make_unique<FlxToHostBuffer>(id, th.devices.back()));
            }
        }

        th.start();

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

        while (signal_status == 0) {
            th.print_monitoring();
            usleep(th.cfg->stats.monitoring_period_ms * 1000);
        }
        ERS_INFO(std::format("Received signal {}, exiting...", static_cast<int>(signal_status)));
        th.stop();
    } catch (const ers::Issue& e) {
        ers::fatal(e);
        return 1;
    }
    return 0;
}