#include "vme_mem_sis1100.hh" #include "mstrg.hh" #include #include #include #include #include // Device settings const std::string device = "/tmp/sis1100_00remote"; const ttcvi::vme_addr_t base_addr = 0x32100000; ttcvi::vme_mem_sis1100 vme((const char *)device.c_str(),0); ttcvi::mstrg mtrg (vme,base_addr); using namespace std; // void oneshot_trigger( long src ) { // long ctr_old, ctr_new; // ctr_old = tvi.get_event_count(); // ctr_new = ctr_old; // tvi.set_count_mode(0); // printf(" ( Event counter set to %s )\n",TTCviEOcount[tvi.get_count()]); // tvi.set_l1a_src(src); // while( tvi.get_event_count() == ctr_old ) { usleep(10); } // tvi.set_l1a_src(7); // ctr_new = tvi.get_event_count(); // DIMTriggerSelect = tvi.get_l1a_src(); // DIMServiceTriggerSelect.updateService(); // DIMEventCount = ctr_new; // DIMServiceEventCount.updateService(); // printf("%d triggers sent.\n", ctr_new - ctr_old ); // } class mstrg_command : public DimCommand { public: mstrg_command(): DimCommand("mstrg/command","C") {}; protected: void commandHandler(); }; void mstrg_command::commandHandler() { char* received = getString(); char *token = strtok(received, " ="); if (!token) return; if (strncmp(token,"0",1)==0) { mtrg.set_reg(0); } if (strcmp(token,"src")==0) { mtrg.set_reg(atoi(strtok(NULL," "))); } if (strcmp(token,"reset")==0) { mtrg.set_reg(42); } }; // // Main // main(int argc, char *argv[] ) { //if (fork() > 0) exit(0); //****** D I M ************************************* //GlobalVars for DIM Services int counter = 999; // RegisterDIM Services DimService trg_counter_service ("MSTRG/COUNTER", counter); trg_counter_service.updateService(); // Register DIM command channel mstrg_command cmnd; // Start DIM server DimServer::start("MSTRG"); while(1) { usleep(1000000); if (counter != mtrg.get_counter()) { counter = mtrg.get_counter(); trg_counter_service.updateService(); } } }; // EOF