Main Page   Modules   Namespace List   Class Hierarchy   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 SctApiException;
00020 using namespace Ipc;
00021     
00022 class CalibrationControllerImpl : public CalibrationController, public boost::noncopyable {
00023 public:
00024     static CalibrationControllerImpl& initialize(RunControl& rc);
00025     static CalibrationControllerImpl& instance();    
00026         
00027     //Overrides
00028     virtual ScanLibrary& getScanLibrary() const;
00029     virtual TestLibrary& getTestLibrary() const;
00030     virtual SequenceLibrary& getSequenceLibrary() const;
00031     virtual void doScan (Sct_SctApi_T_Scan* s);
00032     virtual void doTest (boost::shared_ptr<TestRequest> t);
00033     virtual void doSequence (boost::shared_ptr<SequenceRequest> r);
00034     virtual void abort();
00035     virtual Sct_SctApi_T_Scan* getScan(unsigned long runNumber, unsigned long scanNumber) const;    
00036     virtual void setUpdateOption( Sct_CalibrationController_T_CalibrationController_UpdateOption );
00037 
00038     //Internal for communication with RunControl:
00039     void setApi(Sct_SctApi_T_SctApi& api);
00040     void takeControl(unsigned int runNumber);
00041     void giveupControl();
00042     void reset();
00043 
00044     //Internal for use by other classes
00045     void executeSequence(SequenceRequest& sr);
00046     auto_ptr<Test> executeTest(TestRequest& tr);
00047     void executeScan (Sct_SctApi_T_Scan* s, unsigned int index);
00048     Sct_SctApi_T_SctApi* getApi() const;
00049     unsigned int getRunNumber() const;
00050     unsigned int getNextScanNumber() const;
00051     
00052     void applyChanges(const unsigned long runNumber, const unsigned long scanNumber, const std::list<std::string>& list );
00053 
00054     //static void applyChangesCallback(ISCallbackInfo * isc);
00055 
00056 private:    
00057     CalibrationControllerImpl(RunControl& rc);
00058     virtual ~CalibrationControllerImpl();    
00059     void updateStatus();
00060     
00061     bool isInControl();
00062     bool isBusy();
00063     void setBusy(bool busy);
00064     Sct_SctApi_T_SctApi* api;
00065     
00066     void sctApiError(SctApiException& e);
00067     void setNextScanNumber(unsigned int scanNumber);
00068     
00072     static std::list<string> getAllModulesForScan(Sct_SctApi_T_Scan* scan);
00073 
00074     CalibrationControllerStatus status;
00075     RunControl& rc;
00076     unsigned int runNumber;
00077     unsigned int nextScanNumber;
00078     bool abortNow;
00079     static CalibrationControllerImpl* inst;
00080 
00081     boost::thread_group m_sequence_request_thread_group;
00082     
00083     friend class SequenceRequestWorker;
00084 };    
00085 }
00086 
00087 #endif //#ifndef CALIBRATIONCONTROLLERIMPL_H

Generated on Tue Dec 9 10:07:33 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3