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

CalibrationControllerImpl.h

Go to the documentation of this file.
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 SctApiException;
00020 using namespace Ipc;
00021 
00035 class CalibrationControllerImpl : public CalibrationController, public boost::noncopyable {
00036 public:
00037     static CalibrationControllerImpl& initialize(RunControl& rc);
00038     static CalibrationControllerImpl& instance();    
00039         
00040     //Overrides
00041     virtual ScanLibrary& getScanLibrary() const;
00042     virtual TestLibrary& getTestLibrary() const;
00043     virtual SequenceLibrary& getSequenceLibrary() const;
00044     virtual void doScan (Sct_SctApi_T_Scan* s);
00045     virtual void doTest (boost::shared_ptr<TestRequest> t);
00046     virtual void doSequence (boost::shared_ptr<SequenceRequest> r);
00047     virtual void abort();
00048     virtual Sct_SctApi_T_Scan* getScan(unsigned long runNumber, unsigned long scanNumber) const;    
00049     virtual void setUpdateOption( Sct_CalibrationController_T_CalibrationController_UpdateOption );
00050 
00051     //Internal for communication with RunControl:
00052     void setApi(Sct_SctApi_T_SctApi& api);
00053     void takeControl(unsigned int runNumber);
00054     void giveupControl();
00055     void reset();
00056 
00057     //Internal for use by other classes
00058     void executeSequence(SequenceRequest& sr);
00059     auto_ptr<Test> executeTest(TestRequest& tr);
00060     void executeScan (Sct_SctApi_T_Scan* s, unsigned int index);
00061     Sct_SctApi_T_SctApi* getApi() const;
00062     unsigned int getRunNumber() const;
00063     unsigned int getNextScanNumber() const;
00064     
00065     void applyChanges(const unsigned long runNumber, const unsigned long scanNumber, const std::list<std::string>& list );
00066 
00067     //static void applyChangesCallback(ISCallbackInfo * isc);
00068 
00069 private:    
00070     CalibrationControllerImpl(RunControl& rc);
00071     virtual ~CalibrationControllerImpl();    
00072     void updateStatus();
00073     
00074     bool isInControl();
00075     bool isBusy();
00076     void setBusy(bool busy);
00077     Sct_SctApi_T_SctApi* api;
00078     
00079     void sctApiError(SctApiException& e);
00080     void setNextScanNumber(unsigned int scanNumber);
00081     
00085     static std::list<string> getAllModulesForScan(Sct_SctApi_T_Scan* scan);
00086 
00087     CalibrationControllerStatus status;
00088     RunControl& rc;
00089     unsigned int runNumber;
00090     unsigned int nextScanNumber;
00091     bool abortNow;
00092     static CalibrationControllerImpl* inst;
00093 
00094     boost::thread_group m_sequence_request_thread_group;
00095     
00096     friend class SequenceRequestWorker;
00097 };    
00098 }
00099 
00100 #endif //#ifndef CALIBRATIONCONTROLLERIMPL_H

Generated on Mon Dec 15 19:35:59 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3