// // DaqSetup.cpp // #include #include #include "DaqSetup.h" #include "ParseOption.h" #include "Vxi_vme.h" #include "LogFile.h" extern "C" { #include #include } // ---------------------------------- DaqSetup* DaqSetup::_instance = 0; // ------------------------------- // Instance // ------------------------------- DaqSetup* DaqSetup::Instance () { if ( _instance == 0 ) { _instance = new DaqSetup; } // logFile << " instance " << _instance << endl; return _instance; } // ------------------------------ // Constructor // ------------------------------ DaqSetup::DaqSetup () { logFile << " Daq setup created " << endl; } // --------------------------------------------- // return reference to dspCard and detPlane // --------------------------------------------- ReadoutConfig* DaqSetup::readoutConfig () { return (&_readoutConfig) ; } DaqEnv* DaqSetup::daqEnv () { return ( _daqEnv ); } int DaqSetup::newDaqEnv () { if ( _daqEnv != 0 ) { delete _daqEnv; } _daqEnv = new DaqEnv; if ( _daqEnv == 0 ) { cout << " error in creating DaqEnv " << endl; return 0; } else { cout << " creating DaqEnv " << endl; return 1; } } // =================================================== // read default from file // =================================================== int DaqSetup::read_fromFile (char* fileName) { if ( _instance == 0 || _daqEnv == 0 ) { logFile << " nothing initilized (daqSetup) " << endl; return 0; } // ------------------------ // open file name // ------------------------ ifstream inFile; inFile.open (fileName, ios::in); if ( !inFile ) { logFile << " Could not open file " << fileName << endl; return 0; } logFile << " read default config: " << fileName << endl; char key[50], arg[100], planeName[30], dir[200]; int linkNr; unsigned int baseAddr = 0x0; ParseOption opt (inFile); logFile << " start reading " << endl; while ( opt.nextKey (key, arg) ) { // --- directories ---- if ( strcmp (key, "dataDir:") == 0 ) { sscanf (arg, "%s", dir); _daqEnv->setDir (DataDir, dir); } else if ( strcmp (key, "detectorDir:") == 0 ) { sscanf (arg, "%s", dir); logFile << " detectors " << dir << endl; _daqEnv->setDir (DetDir, dir); } else if ( strcmp (key, "ctrlBlkDir:") == 0 ) { sscanf (arg, "%s", dir); _daqEnv->setDir (CtrlBlkDir, dir); } else if ( strcmp (key, "autoPilotDir:") == 0 ) { sscanf (arg, "%s", dir); _daqEnv->setDir (AutoPilotDir, dir); } // --------------------------- // dsp card // --------------------------- else if ( strcmp (key, "dsp:") == 0 ) { if ( sscanf (arg, "%x", &baseAddr) == 1 ) { logFile << " baseAddress " << hex << baseAddr << dec << endl; _readoutConfig.add_dspCard (0); DspCard *dsp = _readoutConfig.get_dspCard (0); Vxi_vme* vme = vme->Instance (); if ( dsp->address_base ( vme->get_baseAddrMap (baseAddr) ) ) { dsp->init (); dsp->verbFlagOff (); dsp->ctrlBlk.load (0, "noise.cb"); dsp->ctrlBlk.load (1, "cal_0.cb"); dsp->ctrlBlk.load (2, "hac_tp_reset.cb"); if ( dsp->ctrlBlk.load (3, "hac_reset.cb") ) dsp->ctrlBlk.execute (3, 100); } } else { logFile << " error in reading default configuration " << endl; baseAddr = 0; } Sleep ( 100 ); } // --------------------------- // detector plane // --------------------------- else if ( strcmp (key, "link:") == 0 && baseAddr != 0 ) { if ( sscanf (arg, "%d %s", &linkNr, planeName) == 2 ) { logFile << " link: " << linkNr << " " << planeName << endl; _readoutConfig.add_detPlane (linkNr, 0); DetPlane *detPlane; if ( detPlane = _readoutConfig.get_detPlane (linkNr, 0) ) { detPlane->init (planeName); Sleep ( 100 ); } } } } inFile.close (); return 1; }