SctApiServer.h

00001 #ifndef SCTAPIIPC_SCTAPISERVER_H
00002 #define SCTAPIIPC_SCTAPISERVER_H
00003 
00004 #include <map>
00005 
00006 #include <boost/shared_ptr.hpp>
00007 
00008 #include <ipc/object.h>
00009 #include <ipc/server.h>
00010 #include <mrs/message.h>
00011 #include <vector>
00012 
00013 namespace SctApi {
00014   class SctApi;
00015   class Trigger;
00016   class TriggerImpl;
00017   class Scan;
00018   class ScanDefImpl;
00019 }
00020 
00021 #include "Sct_SctApi/SctApi.hh"
00022 #include "CrateStore.h"
00023 
00024 #include "Sct/Addressing.h"
00025 
00031 // other fwd decs:
00032 namespace Sct {
00033   class ScanStatusManager;
00034 };
00035 
00036 // Obsolete?
00037 // extern std::auto_ptr<IPCServer> ipcServer; 
00038 
00039 class ScanServer;
00040 class TriggerServer;
00041 
00045 class SctApiServer : public IPCNamedObject<POA_Sct_SctApi::SctApiIPC>,
00046                      public IPCServer {
00047 
00048  public:
00049   typedef std::vector<Sct_SctApi::CrateIPC_var> CrateIPC_vars;
00050   typedef std::vector<Sct::UCID> CrateDescriptors; // perhaps later will be typedef to CrateIPC_vars, but for the moment will be vector of UCIDs!
00051 
00052   SctApiServer(const CrateDescriptors & apis,
00053                const char* interfaceName);
00054   virtual ~SctApiServer();      // destructor
00055 
00056  // methods
00057 
00058   virtual Sct_SctApi::CrateIPC_ptr getCrate(const Sct::Corba::UCID& ucid);
00059   virtual Sct_SctApi::CrateIPC_ptr getCrateLegacy(CORBA::ULong partition, CORBA::ULong crate);
00060   virtual Sct::Corba::UCIDs* getCrateUCIDs();
00061   virtual void initialiseAll (CORBA::ULong runNumber);
00062   virtual CORBA::Boolean isInitialised();
00063   virtual void shutdownAll ();
00064   virtual char* status ();
00065   virtual void setRunNumber (CORBA::ULong newRun);
00066   virtual void setScanNumber (CORBA::ULong newScan);
00067   virtual CORBA::ULong getRunNumber ();
00068   virtual CORBA::ULong getScanNumber ();
00069   virtual CORBA::Boolean changeRunMode(Sct_SctApi::RunType mode);
00070   virtual CORBA::Boolean changeEventFormat(Sct_SctApi::EventFormatType format);
00071   virtual void unsetDebugOption (const char * opt);
00072   virtual void setDebugOption (const char * opt);
00073   virtual Sct_SctApi::DebugOptionList * listEnabledDebugOptions ();
00074   virtual Sct_SctApi::DebugOptionList * listDebugOptions ();
00075   virtual void unsetBusy();
00076   virtual void standardRegisterDumpURID (const Sct::Corba::URID& urid);
00077   virtual void standardRegisterDumpAll ();
00078   virtual sctConf::ModuleList * getModuleList ();
00079   virtual void configureBOC (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00080   virtual Sct_SctApi::BOCMonitorSequence* getBOCMonitorArray(CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00081   virtual void loadConfiguration (const char * filename);
00082   virtual void storeModuleConfigurations (Sct_SctApi::BankType bank);
00083   virtual void storeBOCConfigurations ();
00084   virtual void configureAllModules ();
00085   virtual void loadModuleConfigurations ();
00086   virtual sctConf::ABCDModule retrieveModule (CORBA::ULong mid);
00087 
00088   /* REMOVE
00089   virtual CORBA::Short dspBlockDump (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::Long dspStart, CORBA::Long numWords, CORBA::Long dspNumber);
00090   virtual Sct_SctApi::DataBlock * dspBlockRead (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::Long dspStart, CORBA::Long numWords, CORBA::Long dspNumber);
00091   virtual CORBA::Short dspBlockWrite (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, const Sct_SctApi::DataBlock & buffer, CORBA::ULong dspAddress, CORBA::Long dspNumber);
00092   virtual CORBA::ULong dspSingleRead (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::ULong dspAddr, CORBA::Long dspNumber);
00093   virtual void dspSingleWrite (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::ULong dspAddr, CORBA::ULong val, CORBA::Long dspNumber);
00094   virtual Sct_SctApi::DataBlock * readSlaveDsp (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::Short s, CORBA::ULong add, CORBA::ULong words);
00095   */
00096   virtual CORBA::ULong findModuleSerial (const char * sn);
00097   virtual char * convertToString (CORBA::ULong mid);
00098   virtual CORBA::ULong findModule (CORBA::UShort mur, CORBA::UShort number);
00099   virtual CORBA::ULong findModuleRod (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::ULong channel);
00100   virtual CORBA::ULong findBarrelModule (CORBA::ULong barrel, CORBA::ULong row, CORBA::Short number);
00101   virtual void convertToBarrelModule (CORBA::ULong mid, CORBA::ULong & barrel, CORBA::ULong & row, CORBA::Short & number);
00102   virtual CORBA::ULong findEndcapModule (CORBA::Long disk, CORBA::Long ring, CORBA::Long number);
00103   virtual void convertToEndcapModule (CORBA::ULong mid, CORBA::Long & disk, CORBA::ULong & ring, CORBA::ULong & number);
00104   virtual void getABCDModules (Sct_SctApi::BankType bank);
00105   virtual void getABCDModule (CORBA::ULong mid, Sct_SctApi::BankType bank);
00106   // REMOVE virtual sctConf::ABCDModule getABCDModuleRaw (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::ULong slot, Sct_SctApi::BankType bank);
00107   virtual void setABCDModule (CORBA::ULong mid, const Sct_SctApi::BankList& banks);
00108   virtual void setABCDModules (const Sct_SctApi::BankList& bank);
00109 
00110   virtual void copyABCDModule (CORBA::ULong mid, Sct_SctApi::BankType source, const Sct_SctApi::BankList& to);
00111   virtual void copyABCDModules (Sct_SctApi::BankType source, const Sct_SctApi::BankList& to);
00112   virtual void sendABCDModule (CORBA::ULong mid, Sct_SctApi::BankType bank, CORBA::ULong type);
00113   virtual void sendABCDModules (Sct_SctApi::BankType bank);
00114   virtual void modifyABCDMask (CORBA::ULong mid, const Sct_SctApi::DataBlock & mask);
00115   virtual void modifyABCDTrims (CORBA::ULong mid, const Sct_SctApi::CharBlock & trims);
00116   virtual void modifyABCDRC (CORBA::ULong mid, CORBA::ULong chip, CORBA::UShort index, CORBA::Double p0, CORBA::Double p1, CORBA::Double p2);
00117   virtual void setAutoUpdateBanks(const Sct_SctApi::BankList& banks);
00118   virtual void modifyABCDVar (CORBA::ULong typ, CORBA::Double var);
00119   virtual void modifyABCDModuleVar (CORBA::ULong mid, CORBA::ULong typ, CORBA::Double var);
00120   virtual void modifyABCDChipVar (CORBA::ULong mid, CORBA::ULong chip, CORBA::ULong typ, CORBA::Double var);
00121   virtual void modifyABCDVarAllModulesOneChip (CORBA::ULong chip, CORBA::ULong typ, CORBA::Double var);
00122   virtual void modifyABCDVarROD (CORBA::ULong typ, CORBA::Double var, const Sct_SctApi::BankList& banks);
00123   virtual void modifyABCDModuleVarROD (CORBA::ULong mid, CORBA::ULong typ, CORBA::Double var, const Sct_SctApi::BankList& banks);
00124   virtual void modifyBOCParam (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::ULong channel, CORBA::ULong type, CORBA::ULong val);
00125   virtual void lasersOff ();
00126   virtual void timSetFrequency (CORBA::ULong partition, CORBA::ULong crate, CORBA::Double trigFreq, CORBA::Double rstFreq);
00127   virtual void freeTriggers (CORBA::ULong partition, CORBA::ULong crate);
00128   virtual void stopTriggers (CORBA::ULong partition, CORBA::ULong crate);
00129   virtual void timL1A (CORBA::ULong partition, CORBA::ULong crate);
00130   virtual void timCalL1A (CORBA::ULong partition, CORBA::ULong crate, CORBA::Short delay);
00131   virtual CORBA::Short timReadRegister (CORBA::ULong partition, CORBA::ULong crate, CORBA::Short value);
00132   virtual void timWriteRegister (CORBA::ULong partition, CORBA::ULong crate, CORBA::Short reg, CORBA::Short value);
00133   CORBA::ULong sendTriggers (CORBA::ULong partition, CORBA::ULong crate, Sct_SctApi::Trigger_ptr trig, CORBA::ULong ntrigs, CORBA::UShort point_in_scan);
00134   virtual void sendRodTrigger (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, Sct_SctApi::Trigger_ptr trig);
00135 
00136   virtual void doScan (Sct_SctApi::Scan_ptr thisScan);
00137   virtual void doRawScan (Sct_SctApi::Scan_ptr thisScan, CORBA::Long delay, CORBA::Long width, CORBA::Boolean configure, CORBA::Boolean clockByTwo);
00138   virtual Sct_SctApi::ScanMonitor_ptr startAsyncScan(Sct_SctApi::Scan_ptr thisScan);
00139   virtual CORBA::Boolean hasFinishedScanning();
00140   virtual void abortScan();
00141 
00142   //REMOVE virtual void printBOCSetup (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00143   virtual Sct_SctApi::BOCChannelList * currentBOCSetup (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00144   virtual sctConf::BOCGlobalConfig currentBOCRegisters (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00145   virtual void sendL1A (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00146   virtual Sct_SctApi::CharBlock * probe (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod);
00147   virtual Sct_SctApi::CharBlock * probeHarness (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, CORBA::ULong harness);
00148   virtual Sct_SctApi::CharBlock * probeWithTrigger (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, Sct_SctApi::Trigger_ptr trig);
00149   virtual Sct_SctApi::CharBlock * probeHarnessWithTrigger (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, Sct_SctApi::Trigger_ptr trig, CORBA::ULong harness);
00150   virtual Sct_SctApi::CharMatrix * probeScanHarnessWithTrigger (CORBA::ULong partition, CORBA::ULong crate, CORBA::ULong rod, Sct_SctApi::Scan_ptr trig, CORBA::ULong harness);
00151   virtual CORBA::Boolean checkAllModulesProbe (const char * chars);
00152   virtual Sct_SctApi::AutoResultList * autoConfigureScan ();
00153   virtual Sct_SctApi::Scan_ptr createScan ();
00154   virtual Sct_SctApi::Scan_ptr getDefaultScan ();
00155   // Next two NOT USED
00156   virtual Sct_SctApi::Trigger_ptr createTrigger ();
00157   // virtual Sct_SctApi::Trigger_ptr getDefaultTrigger ();
00158   virtual Sct_SctApi::ScanList * knownScans ();
00159 
00160  private:
00161   typedef boost::shared_ptr<ScanServer> SharedScanServer;
00162   boost::shared_ptr<Sct::ScanStatusManager> m_assm;
00163 
00164  public:
00165   typedef std::list<SharedScanServer> Scans;
00166   Scans scans;
00167 
00168   ScanServer *defaultScan;
00169   TriggerServer *defaultTrigger;
00170 
00171   static SctApiServer *singleton;
00172 
00173   virtual void shutdown();
00174 
00175  protected:
00177   Sct_SctApi::CrateIPC_var worker();   // note that this "worker()" method is a stop-gap work-around only needed during the *transition* to multicrate.  For the moment, it returns an "arbitrary" worker, out of all of the registered CrateController workers. It is only for hanger-on methods that do not yet know about multi crate and expect SctApiServer to only know about one worker.  Eventually, every method of this class will have to avoid calling worker() and must instead distribute its work across the appropriate workers in "workers()" ... you were warned.
00178   typedef Sct::CrateStore::Worker Worker;
00179   typedef Sct::CrateStore::Workers Workers;
00180   Workers & workers();
00181 
00182  protected:
00183   MRSStream mrsStream;
00184   
00185   // NOT NEEDED CORBA::Short ddcSingleTimeout;
00186   // NOT NEEDED CORBA::Short ddcMultipleTimeout;
00187 
00188  private:
00189   Sct::CrateStore m_crateStore;
00190   unsigned long m_localRunNumber;
00191   unsigned long m_localScanNumber;
00192 };
00193 
00194 #endif

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