Runcontrol: Difference between revisions
Line 19: | Line 19: | ||
*tokenInterval_ = 0; /* reset when needed */ | *tokenInterval_ = 0; /* reset when needed */ | ||
* rcServer/Components.s/daqRun.cc: two methods dealing with database: | |||
/* called from dbaseReader::parseOptions(); | /* called from dbaseReader::parseOptions() when reading '_option' table during 'Configure' transition; | ||
in line '*tokenInterval_ = itval' operator '=' overloaded in daqData class, calling 'notifychannels' and 'write' | in line '*tokenInterval_ = itval' operator '=' overloaded in daqData class, calling 'notifychannels' and 'write' | ||
methods; 'write' method calls rcsTokenIntervalWriter::write() registered above | methods; 'write' method calls rcsTokenIntervalWriter::write() registered above | ||
Line 40: | Line 41: | ||
} | } | ||
* rcServer/Components.s/rcsTokenIntervalWriter.cc: writer to database: | |||
void | |||
rcsTokenIntervalWriter::write (daqData* data) | |||
{ | |||
run_->updateTokenInterval ((int)(*data)); | |||
} | |||
Revision as of 11:38, 5 October 2015
This page describes run control part of Coda DAQ system. It reside in $CODA/src/rc/ directory.
Communication between rcServer and runcontrol
Lets use 'tokenInterval' as example. It reside in database, and can be changed by runcontrol. Following steps were made to implement 'tokenInterval' functionality:
- rcServer/Components.s/daqRun.h: object must have a type 'daqData' to use reloaded operations etc:
daqData* tokenInterval_; /* variable */ daqDataWriter* tokenIWriter_; /* database writer */
- rcServer/Components.s/daqRun.cc: create object, connect it to manager, and enable writing:
tokenInterval_ = new rcsDaqData (exptname_, "tokenInterval", 0); /* create variable */ tokenInterval_->connect (dataManager_); /* register to data manager (class daqDataUpdater) */ tokenInterval_->enableWrite (); /* enable writing to database */ tokenIWriter_ = new rcsTokenIntervalWriter (this); /* create database writer */ tokenInterval_->writer (tokenIWriter_); /* register database writer */ *tokenInterval_ = 0; /* reset when needed */
- rcServer/Components.s/daqRun.cc: two methods dealing with database:
/* called from dbaseReader::parseOptions() when reading '_option' table during 'Configure' transition; in line '*tokenInterval_ = itval' operator '=' overloaded in daqData class, calling 'notifychannels' and 'write' methods; 'write' method calls rcsTokenIntervalWriter::write() registered above */ void daqRun::tokenInterval (int itval, int writeUpdate) { /* if not write to database, disable the write */ if (!writeUpdate) tokenInterval_->disableWrite (); *tokenInterval_ = itval; /*overloaded '=' here ! */ if (!writeUpdate) tokenInterval_->enableWrite (); }
/* writer for 'tokenInterval_', called from rcServer/Components.s/rcsTokenIntervalWriter.cc registered above */ void daqRun::updateTokenInterval (int itval) { dbreader_->putTokenInterval (itval); /* put new value into database */ }
- rcServer/Components.s/rcsTokenIntervalWriter.cc: writer to database:
void rcsTokenIntervalWriter::write (daqData* data) { run_->updateTokenInterval ((int)(*data)); }
adcecal5:runControl> grep \"tokenInterval\" */*/*.cc
rcClient/src.s/rcClient.cc: tokenInterval_ = new rccDaqData (exptname_, "tokenInterval", 0);
rcServer/Components.s/daqRun.cc:/*sergey: corresponds to "tokenInterval" !? see
rcClient/src.s/rcClient.cc: tokenInterval_ = new rccDaqData (exptname_, "tokenInterval", 0);
rcServer/Components.s/dbaseReader.cc: else if (::strcmp (row[0], DBASE_TOKEN_INTERVAL) == 0) /* DBASE_TOKEN_INTERVAL="tokenInterval" */
Xui/src.s/rcClientHandler.cc: if (handler_.monitorOnCallback (exptname, "tokenInterval",
Xui/src.s/rcTokenIButton.cc: daqData data (client.exptname (), "tokenInterval", newval);