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   virtual void shutdown() { };
00045   static CalibrationControllerImpl & initialize(RunControl& rc);
00046 
00050     //static CalibrationControllerImpl& instance();
00051     static Sct_CalibrationController::CalibrationController_ptr instance();
00052 
00057     virtual Sct_CalibrationController::ScanLibrary_ptr getScanLibrary();
00058     virtual Sct_CalibrationController::TestLibrary_ptr getTestLibrary();
00059     virtual Sct_CalibrationController::SequenceLibrary_ptr getSequenceLibrary();
00060     virtual void doScan(Sct_CalibrationController::ScanRequest_ptr r);
00061     virtual void doTest(Sct_CalibrationController::TestRequest_ptr t);
00062     virtual void doSequence(Sct_CalibrationController::SequenceRequest_ptr r);
00063     virtual void abort();
00064     virtual Sct_SctApi::Scan_ptr getScan(unsigned long runNumber, unsigned long scanNumber);
00065     virtual void setUpdateOption(Sct_CalibrationController::CalibrationController::UpdateOption opt);
00066     virtual void updateWith (const char* testResultInIs, bool force);
00068 
00071 
00074     void setApi(Sct_SctApi::SctApiIPC_ptr api);
00075 
00080     void takeControl(unsigned int runNumber);
00081 
00085     void giveupControl();
00086 
00090     void reset();
00092 
00093 
00094 
00097 
00101     Sct_SctApi::SctApiIPC_ptr getApi();
00102 
00106     unsigned int getRunNumber() const;
00107 
00111     unsigned int getNextScanNumber() const;
00113 
00114 private:
00115     CalibrationControllerImpl(RunControl& rc);
00116     virtual ~CalibrationControllerImpl();
00117     void updateStatus();
00118 
00119     bool isInControl();
00120     bool isBusy();
00121     void setBusy(bool busy);
00122     Sct_SctApi::SctApiIPC_ptr m_api;
00123 
00128     void executeSequence(Sct_CalibrationController::SequenceRequest_ptr sr);
00129 
00135     auto_ptr<Test> executeTest(Sct_CalibrationController::TestRequest_ptr tr, boost::shared_ptr<const Sequence> s);
00136 
00142     void executeScan (Sct_CalibrationController::ScanRequest_ptr s, unsigned int index);
00143 
00149     void applyChanges(const unsigned long runNumber, const unsigned long scanNumber, const std::list<std::string>& list );
00150 
00155     void sctApiError(SctApiAccessException& e);
00156 
00161     void setNextScanNumber(unsigned int scanNumber);
00162 
00166     static std::list<string> getAllModulesForScan(Sct_SctApi::Scan_ptr scan);
00167 
00168     CalibrationControllerStatus status;                         
00169     RunControl& rc;                                             
00170     unsigned int runNumber;                                     
00171     unsigned int nextScanNumber;                                
00172     volatile bool abortNow;                                     
00173     volatile bool abortRightNow;                                
00174     static CalibrationControllerImpl * inst;                     
00175     static CalibrationControllerImpl * underlyingInstance() { return inst; };
00176     boost::thread_group m_sequence_request_thread_group;        
00177 
00178     friend class SequenceRequestWorker;                         
00179 };
00180 }
00181 
00182 #endif //#ifndef CALIBRATIONCONTROLLERIMPL_H

Generated on Fri Sep 16 18:01:49 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5