#include <iostream>
#include <string>
#include <csignal>
#include <cstdio>
#include <DAQ++/DAQmanager.h>
#include "MyModule.h"
#include "utils.h"
#include "Trigger.h"
bool DoRun = true;
void quit(int )
{
// signal(SIGINT,SIG_DFL);
std::cout << std::endl << "Run stop forced" << std::endl;
DoRun = false;
}
/**
This is an implementation of a run manager.
It maintains a pointer to a DataLogger that gets activated everytime
a new run starts.
*/
class Rmanager : public DAQpp::RunManager
{
public:
Rmanager(DAQpp::DAQid id, DAQpp::RunCommand *rc = 0)
: DAQpp::RunManager(id, rc)
{}
~Rmanager()
{}
};
int main(int argc, char **argv)
{
Trigger trigger;
DAQpp::GTimer timer;
int nwords = 131;
double run_time = 15.;
std::cout << "Usage: tsttrigger [nwords | freq | run_time]" << std::endl;
if (argc > 1)
nwords = atoi(argv[1]);
if (argc > 2)
{
double freq = atof(argv[2]);
std::cout << "Setting frequency to: " << freq << std::endl;
trigger.set_freq(freq);
}
if ( argc > 3)
{
run_time = atof(argv[3]);
}
std::cout << "Each event will have " << nwords << " words" << std::endl;
std::cout << "Estimated freq. is " << trigger.get_freq() << std::endl;
std::cout << "Will run for " << run_time << " seconds" << std::endl;
// catch control-c
signal(SIGINT, quit);
DAQpp::RunManager *run_manager = new DAQpp::RunManager("main");
run_manager->addModule( new MyModule("100", nwords) );
//---------------------------------------------------------------------
// Start the DAQ
//---------------------------------------------------------------------
DAQpp::DAQmanager *daq_manager = DAQpp::DAQmanager::theDAQmanager();
run_manager->set_max_events(0);
run_manager->Activate();
std::cout << "Enabling interrupts" << std::endl;
trigger.enableInterrupts();
std::cout << "Starting the run" << std::endl;
daq_manager->StartRun(DAQpp::DAQmanager::Threaded);
timer.start();
while ( timer() < run_time && DoRun)
{
DAQpp::wait(0.1);
if ( !daq_manager->isRunning() )
break;
std:: cout << '\r' << run_manager->GetStatus() << std::flush;
}
std::cout << "\n\nDisabling interrupts" << std::endl;
trigger.disableInterrupts();
std::cout << "\n\nStopping the run" << std::endl;
daq_manager->StopRun();
std::cout << "\nWait for end of run" << std::endl;
daq_manager->WaitForEndOfRun(100000);
std::cout << std::endl
<< "--> Run stats. \n"
<< "---------------\n"
<< std::endl;
std::cout << *run_manager << std::endl;
return 0;
}