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 
00020 namespace SctCalibrationController {
00021 
00022 class Test;
00023 class ConfigUpdater;
00024 class RunControl;
00025 class SctApiAccessException;
00026 class Sequence;
00027 
00028 using namespace Ipc;
00029 
00045 class CalibrationControllerImpl : public CalibrationController, private boost::noncopyable {
00046 public:
00050   virtual void shutdown() { };
00051   static CalibrationControllerImpl & initialize(RunControl& rc);
00052 
00056     //static CalibrationControllerImpl& instance();
00057     static Sct_CalibrationController::CalibrationController_ptr instance();
00058 
00063     virtual Sct_CalibrationController::ScanLibrary_ptr getScanLibrary();
00064     virtual Sct_CalibrationController::TestLibrary_ptr getTestLibrary();
00065     virtual Sct_CalibrationController::SequenceLibrary_ptr getSequenceLibrary();
00066     virtual void doScan(Sct_CalibrationController::ScanRequest_ptr r);
00067     virtual void doTest(Sct_CalibrationController::TestRequest_ptr t);
00068     virtual void doSequence(Sct_CalibrationController::SequenceRequest_ptr r);
00069     virtual void abort();
00070     virtual Sct_SctApi::Scan_ptr getScan(unsigned long runNumber, unsigned long scanNumber);
00071     virtual void setUpdateOption(Sct_CalibrationController::CalibrationController::UpdateOption opt);
00072     virtual void updateWith (const char* testResultInIs, bool force);
00074 
00077 
00080     void setApi(Sct_SctApi::SctApiIPC_ptr api);
00081 
00086     void takeControl(unsigned int runNumber);
00087 
00091     void giveupControl();
00092 
00096     void reset();
00098 
00099 
00100 
00103 
00107     Sct_SctApi::SctApiIPC_ptr getApi();
00108 
00112     unsigned int getRunNumber() const;
00113 
00117     unsigned int getNextScanNumber() const;
00119 
00120 private:
00121     CalibrationControllerImpl(RunControl& rc);
00122     virtual ~CalibrationControllerImpl();
00123     void updateStatus();
00124 
00125     bool isInControl();
00126     bool isBusy();
00127     void setBusy(bool busy);
00128     Sct_SctApi::SctApiIPC_ptr m_api;
00129 
00134     void executeSequence(Sct_CalibrationController::SequenceRequest_ptr sr);
00135 
00141     auto_ptr<Test> executeTest(Sct_CalibrationController::TestRequest_ptr tr, boost::shared_ptr<const Sequence> s);
00142 
00148     void executeScan (Sct_CalibrationController::ScanRequest_ptr s, unsigned int index);
00149 
00155     void applyChanges(const unsigned long runNumber, const unsigned long scanNumber, const std::list<std::string>& list );
00156 
00161     void sctApiError(SctApiAccessException& e);
00162 
00167     void setNextScanNumber(unsigned int scanNumber);
00168 
00172     static std::list<std::string> getAllModulesForScan(Sct_SctApi::Scan_ptr scan);
00173 
00174     CalibrationControllerStatus status;                         
00175     RunControl& rc;                                             
00176     unsigned int runNumber;                                     
00177     unsigned int nextScanNumber;                                
00178     volatile bool abortNow;                                     
00179     volatile bool abortRightNow;                                
00180     static CalibrationControllerImpl * inst;                     
00181     static CalibrationControllerImpl * underlyingInstance() { return inst; };
00182     boost::thread_group m_sequence_request_thread_group;        
00183 
00184     friend class SequenceRequestWorker;                         
00185 };
00186 }
00187 
00188 #endif //#ifndef CALIBRATIONCONTROLLERIMPL_H

Generated on Mon Feb 6 14:01:17 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6