From: <ro...@us...> - 2011-04-15 09:27:39
|
Revision: 2479 http://nscldaq.svn.sourceforge.net/nscldaq/?rev=2479&view=rev Author: ron-fox Date: 2011-04-15 09:27:33 +0000 (Fri, 15 Apr 2011) Log Message: ----------- Final coding touches to get monitored data. Modified Paths: -------------- trunk/llnlReadout/tclserver/CControlModule.cpp trunk/llnlReadout/tclserver/CControlModule.h trunk/llnlReadout/tclserver/CMonCommand.cpp trunk/llnlReadout/tclserver/CMonCommand.h Modified: trunk/llnlReadout/tclserver/CControlModule.cpp =================================================================== --- trunk/llnlReadout/tclserver/CControlModule.cpp 2011-04-15 09:06:43 UTC (rev 2478) +++ trunk/llnlReadout/tclserver/CControlModule.cpp 2011-04-15 09:27:33 UTC (rev 2479) @@ -205,3 +205,15 @@ { return m_pHardware->processMonitorList(pData, remaining); } +/** + * Return the data monitored by the driver. + * @return string + * @retval monitored data in form and content that is + * driver dependent. + */ +string +ControlModule::getMonitoredData() +{ + return m_pHardware->getMonitoredData(); + +} Modified: trunk/llnlReadout/tclserver/CControlModule.h =================================================================== --- trunk/llnlReadout/tclserver/CControlModule.h 2011-04-15 09:06:43 UTC (rev 2478) +++ trunk/llnlReadout/tclserver/CControlModule.h 2011-04-15 09:27:33 UTC (rev 2479) @@ -82,6 +82,7 @@ void addMonitorList(CVMUSBReadoutList& vmeList); void* processMonitorList(void* pData, size_t remaining); + std::string getMonitoredData(); }; Modified: trunk/llnlReadout/tclserver/CMonCommand.cpp =================================================================== --- trunk/llnlReadout/tclserver/CMonCommand.cpp 2011-04-15 09:06:43 UTC (rev 2478) +++ trunk/llnlReadout/tclserver/CMonCommand.cpp 2011-04-15 09:27:33 UTC (rev 2479) @@ -0,0 +1,91 @@ +/* + http://www.gnu.org/licenses/gpl.txt + + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ +#include <config.h> + +#include "TclServer.h" +#include <TCLObject.h> +#include <TCLInterpreter.h> + + +/** + * Construct the command object. This is + * given the command name 'mon'. + * @param interp - Tcl interpretr on which we will + * be registered. + * @param server - Reference to the Tcl server + * needed in order to get the driver + * instances. + */ +CMonCommand::CMonCommand(CTCLInterpreter& interp, + TclServer& server) : + m_Server(server), + CTCLObjectProcessor(interp, "mon", true) +{} +/** + * Destructor: In fact destruction never actually + * happens...if it did the parent destructor + * takes care of everything we need. + */ +CMonCommand::~CMonCommand() +{} + +/*--------------------------------------------------*/ + +/** Command entry point. The form of the command is +\verbatim +mon instance-name +\endverbatim +* Where instance-name is the name of a device. +* the command will return a string result that is +* driver dependent in form and content. +* @param interp - Interpreter running this command +* @param objv - Encapsulated Tcl_Obj's that make up +* the command line. +* @return int +* @retval TCL_OK - Command completed successfully. +* @retval TCL_ERROR - Command failed. +* +* @note The intepreter result will contain the +* data from the driver on success. +* contents on failure are likely an error message. +*/ +int +CMonCommand::operator()(CTCLInterpreter& interp, + vector<CTCLObject>& objv) +{ + // Must have exactly two command words: + + if (objv.size() != 2) { + interp.setResult("ERROR - mon command incorrect # params"); + return TCL_ERROR; + } + + // extract the driver instance name and attempt + // to get it: + + string instanceName = static_cast<string>(objv[1]); + CControlModule* pInstance = m_Server.findModule(instanceName); + if (!pInstance) { + interp.setResult("ERROR - mon - unknown driver instance"); + return TCL_ERROR; + } + + // At this point nothing can go wrong except + // exceptions thrown by the driver: + + try { + interp.setResult(pInstance->getMonitoredData()); + } + catch(...) { + interp.setResult("ERROR - mon - driver threw an exception"); + return TCL_ERROR; + } + return TCL_OK; +} Modified: trunk/llnlReadout/tclserver/CMonCommand.h =================================================================== --- trunk/llnlReadout/tclserver/CMonCommand.h 2011-04-15 09:06:43 UTC (rev 2478) +++ trunk/llnlReadout/tclserver/CMonCommand.h 2011-04-15 09:27:33 UTC (rev 2479) @@ -0,0 +1,73 @@ +/* + http://www.gnu.org/licenses/gpl.txt + + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ + +#ifndef __CMONCOMMAND_H +#define __CMONCOMMAND_H + +#ifndef __TCLOBJECTPROCESSOR_H +#include <TCLObjectProcessor.h> +#endif + +#ifndef __STL_VECTOR +#include <vector> +#ifndef __STL_VECTOR +#define __STL_VECTOR +#endif +#endif + +#ifndef __STL_STRING +#include <string> +#ifndef __STL_STRING +#define __STL_STRING +#endif +#endif + + +class TclServer; +class CTCLObject; +class CTCLInterpreter; +/** + Implements the mon command. 'mon' is used to + retrieve any periodically monitored data from + device driver instance. mon operates without + synchronizing with the data acquisition as the + driver instances are assumed to have contributed to + a periodic monitor list which is dispatched periodically. + Device driver instances are presumed to be caching + the results of these lists and returning the values + of those cached values rather than interacting with the + VME bus. See as an example the CV6553 module which + supports the CAEN V6553 high voltage bias supply. +*/ +class CMonCommand : public CTCLObjectProcessor +{ +private: + TclServer& m_Server; // Tcl server that is running us. +public: + CMonCommand(CTCLInterpreter& interp, + TclServer& server, + virtual ~CMonCommand(); +private: + CMonCommand(const CMonCommand& rhs); + CMonCommand& operator=(const CMonCommand& rhs); + int operator==(const CMonCommand& rhs) const; + int operator!=(const CMonCommand& rhs) const; +public: + + // Command entry point: + +protected: + int operator()(CTCLInterpreter& interp, + std::vector<CTCLObject>& objv); + + +}; + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |