Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

CalibrationControllerImpl.h

00001 #ifndef CALIBRATIONCONTROLLERIMPL_H
00002 #define CALIBRATIONCONTROLLERIMPL_H
00003 
00004 #include "ipc/CalibrationController.h"
00005 #include "IS/CalibrationControllerStatus.h"
00006 #include <boost/noncopyable.hpp>
00007 #include <boost/thread.hpp>
00008 #include <boost/shared_ptr.hpp>
00009 
00010 #include <memory>
00011 
00012 using std::auto_ptr;
00013 
00014 namespace SctCalibrationController {
00015 
00016 class Test;
00017 class ConfigUpdater;
00018 class RunControl;
00019 class SctApiAccessException;
00020 class Sequence;
00021 
00022 using namespace Ipc;
00023 
00039 class CalibrationControllerImpl : public CalibrationController, private boost::noncopyable {
00040 public:
00044     static CalibrationControllerImpl& initialize(RunControl& rc);
00045 
00049     static CalibrationControllerImpl& instance();
00050 
00055     virtual ScanLibrary& getScanLibrary() const;
00056     virtual TestLibrary& getTestLibrary() const;
00057     virtual SequenceLibrary& getSequenceLibrary() const;
00058     virtual void doScan( boost::shared_ptr<ScanRequest> r);
00059     virtual void doTest (boost::shared_ptr<TestRequest> t);
00060     virtual void doSequence (boost::shared_ptr<SequenceRequest> r);
00061     virtual void abort();
00062     virtual Sct_SctApi_T_Scan* getScan(unsigned long runNumber, unsigned long scanNumber) const;
00063     virtual void setUpdateOption( Sct_CalibrationController_T_CalibrationController_UpdateOption );
00064     virtual void updateWith (ilu_T_CString testResultInIs);
00066 
00069 
00072     void setApi(Sct_SctApi_T_SctApi& api);
00073 
00078     void takeControl(unsigned int runNumber);
00079 
00083     void giveupControl();
00084 
00088     void reset();
00090 
00091 
00092 
00095 
00099     Sct_SctApi_T_SctApi* getApi() const;
00100 
00104     unsigned int getRunNumber() const;
00105 
00109     unsigned int getNextScanNumber() const;
00111 
00112 private:
00113     CalibrationControllerImpl(RunControl& rc);
00114     virtual ~CalibrationControllerImpl();
00115     void updateStatus();
00116 
00117     bool isInControl();
00118     bool isBusy();
00119     void setBusy(bool busy);
00120     Sct_SctApi_T_SctApi* api;
00121 
00126     void executeSequence(SequenceRequest& sr);
00127 
00133     auto_ptr<Test> executeTest(TestRequest& tr, boost::shared_ptr<const Sequence> s);
00134 
00140     void executeScan (ScanRequest& s, unsigned int index);
00141 
00147     void applyChanges(const unsigned long runNumber, const unsigned long scanNumber, const std::list<std::string>& list );
00148 
00153     void sctApiError(SctApiAccessException& e);
00154 
00159     void setNextScanNumber(unsigned int scanNumber);
00160 
00164     static std::list<string> getAllModulesForScan(Sct_SctApi_T_Scan* scan);
00165 
00166     CalibrationControllerStatus status;                         
00167     RunControl& rc;                                             
00168     unsigned int runNumber;                                     
00169     unsigned int nextScanNumber;                                
00170     volatile bool abortNow;                                     
00171     volatile bool abortRightNow;                                
00172     static CalibrationControllerImpl* inst;                     
00173 
00174     boost::thread_group m_sequence_request_thread_group;        
00175 
00176     friend class SequenceRequestWorker;                         
00177 };
00178 }
00179 
00180 #endif //#ifndef CALIBRATIONCONTROLLERIMPL_H

Generated on Thu Jul 15 09:50:44 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5