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
00032 namespace Sct {
00033 class ScanStatusManager;
00034 };
00035
00036
00037
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;
00051
00052 SctApiServer(const CrateDescriptors & apis,
00053 const char* interfaceName);
00054 virtual ~SctApiServer();
00055
00056
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
00089
00090
00091
00092
00093
00094
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
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
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
00156 virtual Sct_SctApi::Trigger_ptr createTrigger ();
00157
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();
00178 typedef Sct::CrateStore::Worker Worker;
00179 typedef Sct::CrateStore::Workers Workers;
00180 Workers & workers();
00181
00182 protected:
00183 MRSStream mrsStream;
00184
00185
00186
00187
00188 private:
00189 Sct::CrateStore m_crateStore;
00190 unsigned long m_localRunNumber;
00191 unsigned long m_localScanNumber;
00192 };
00193
00194 #endif