#include "vme_mem_sis1100.hh" #include "mstrg.hh" #include #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; bool ack=false; // 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,"mode")==0) { mtrg.set_mode(atoi(strtok(NULL," "))); ack = true; } if (strcmp(token,"coinc")==0) { mtrg.set_mode(0); ack = true; } */ }; // // Main // main(int argc, char *argv[] ) { // if (fork() > 0) exit(0); //****** D I M ************************************* //GlobalVars for DIM Services // int pt_counter = 999; // int pt_counter_r = 999; // RegisterDIM Services // DimService trg_counter_pt_service ("MSTRG/PT_COUNTER", pt_counter); //DimService trg_pt_rate_service ("MSTRG/PT_RATE", pt_rate); //trg_counter_pt_service.updateService(); //trg_pt_rate_service.updateService(); // Register DIM command channel // mstrg_command cmnd; // Start DIM server //DimServer::start("MSTRG"); if (strcmp(argv[1],"read") == 0) { int i = 0; char tmp_string[32]; char result1[3]; char result2[3]; char result3[3]; char result4[3]; char result5[3]; char result6[3]; char result7[3]; char result8[3]; char result9[3]; char result10[3]; char result11[3]; char result12[3]; char result13[3]; char result14[20]; //char result15[3]; //char result16[3]; uint16_t tmp_int; uint16_t q; uint16_t last_wraddress; uint16_t cnt_offset; uint16_t rdaddress; uint16_t state; last_wraddress = mtrg.get_wraddress(); cnt_offset = (1022 - mtrg.get_cnt_limit() ); rdaddress = last_wraddress; cout << "Takt " << "SZB " << "PT " << "L0 " << "L1 " << "BU2 " << "BU1 " << "CTB " << "CTB " << "SM " << "GTU " << "COI " << "SZT " << "na " << "STATE" << endl; while (i<1024){ mtrg.set_rdaddress(rdaddress); tmp_int = mtrg.get_content(); q = tmp_int; state = 0; if ((q & 1) == 0) sprintf (result1, "."); else sprintf (result1, "X"); if ((q & 2) == 0) sprintf (result2, "."); else sprintf (result2, "X"); if ((q & 4) == 0) sprintf (result3, "."); else sprintf (result3, "X"); if ((q & 8) == 0) sprintf (result4, "."); else sprintf (result4, "X"); if ((q & 16) == 0) sprintf (result5, "."); else sprintf (result5, "X"); if ((q & 32) == 0) sprintf (result6, "."); else sprintf (result6, "X"); if ((q & 64) == 0) sprintf (result7, "."); else sprintf (result7, "X"); if ((q & 128) == 0) sprintf (result8, "."); else sprintf (result8, "X"); if ((q & 256) == 0) sprintf (result9, "."); else sprintf (result9, "X"); if ((q & 512) == 0) sprintf (result10, "."); else sprintf (result10, "X"); if ((q & 1024) == 0) sprintf (result11, "."); else sprintf (result11, "X"); if ((q & 2048) == 0) sprintf (result12, "."); else sprintf (result12, "X"); if ((q & 4096) == 0) sprintf (result13, "."); else sprintf (result13, "X"); if ((q & 8192) == 0) state = state; else state = state + 1; if ((q & 16384) == 0) state = state; else state = state + 2; if ((q & 32768) == 0) state = state; else state = state +4; switch (state) { case 0 : sprintf (result14, "idle"); break; case 1 : sprintf (result14, "send_pt"); break; case 2 : sprintf (result14, "wait_l0"); break; case 3 : sprintf (result14, "send_l0"); break; case 4 : sprintf (result14, "wait_l1"); break; case 5 : sprintf (result14, "send_l1"); break; case 6 : sprintf (result14, "readout"); break; case 7 : sprintf (result14, "clear"); break; default : sprintf (result14, "N/A"); } // sprintf (tmp_string , "test %b" , tmp_int); if (i<10) cout << i <<" " << result1 << " " << result2 << " " << result3 << " " << result4 << " " << result5 << " " << result6 << " " << result7 << " " << result8 << " " << result9 << " " << result10 << " " << result11 << " " << result12 << " " << result13 << " " << result14 < 1022 || cnt_limit <= 0) cout << endl << "Invalid Argument"< " << endl << endl; cout << "Option " << "Description" << endl<