00001 #include "SctApi/SctApi.h"
00002 #include "SctApi/SctApiImpl.h"
00003
00004 #include <ipc/object.h>
00005 #include "Sct_SctApi.hh"
00006
00007 class SctApiServer : public SctApi::SctApi, public IPCObject, public virtual Sct_SctApi_T_SctApi {
00008 public:
00009
00010 SctApiServer(const char* oid, IPCServer* server);
00011 virtual ~SctApiServer();
00012
00013
00014
00015 virtual void initialiseAll (Sct_SctApiStatus *_status, ilu_Cardinal runNumber);
00016 virtual void shutdownAll (Sct_SctApiStatus *_status);
00017 virtual void status (Sct_SctApiStatus *_status);
00018 virtual void setRunNumber (Sct_SctApiStatus *_status, ilu_Cardinal newRun);
00019 virtual void setScanNumber (Sct_SctApiStatus *_status, ilu_Cardinal newScan);
00020 virtual void awaitResponse (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod);
00021 virtual Sct_SctApi_T_DataBlock getResponse (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal * length);
00022 virtual void flashLED (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_ShortCardinal slaveNumber, ilu_Cardinal period, ilu_Cardinal flashes);
00023 virtual void echo (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal length, Sct_SctApi_T_DataBlock data);
00024 virtual void createDebugPrimList (Sct_SctApiStatus *_status);
00025 virtual void addDebugPrimList (Sct_SctApiStatus *_status, ilu_Cardinal length, ilu_Integer index, ilu_Integer id, ilu_Integer version, Sct_SctApi_T_DataBlock body);
00026 virtual void sendDebugPrimList (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod);
00027 virtual void sendDebugSlavePrimList (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal slave, ilu_Boolean await, ilu_Boolean response);
00028 virtual void loadConfiguration (Sct_SctApiStatus *_status, ilu_T_CString filename);
00029 virtual void storeModuleConfigurations (Sct_SctApiStatus *_status);
00030 virtual void configureAllModules (Sct_SctApiStatus *_status);
00031 virtual sctConf_T_ABCDModule* retrieveModule (Sct_SctApiStatus *_status, ilu_Cardinal mid);
00032 virtual ilu_ShortInteger dspBlockDump (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Integer dspStart, ilu_Integer numWords, ilu_Integer dspNumber);
00033 virtual Sct_SctApi_T_DataBlock dspBlockRead (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Integer dspStart, ilu_Integer numWords, ilu_Integer dspNumber, ilu_Integer * length);
00034 virtual ilu_ShortInteger dspBlockWrite (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, Sct_SctApi_T_DataBlock buffer, ilu_Cardinal dspAddress, ilu_Integer numWords, ilu_Integer dspNumber);
00035 virtual ilu_Cardinal dspSingleRead (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal dspAddr, ilu_Integer dspNumber);
00036 virtual void dspSingleWrite (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal dspAddr, ilu_Cardinal val, ilu_Integer dspNumber);
00037 virtual Sct_SctApi_T_DataBlock readSlaveDsp (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_ShortInteger s, ilu_Cardinal add, ilu_Cardinal words);
00038 virtual ilu_Cardinal findModuleSerial (Sct_SctApiStatus *_status, ilu_T_CString sn);
00039 virtual ilu_T_CString convertToString (Sct_SctApiStatus *_status, ilu_Cardinal mid);
00040 virtual ilu_Cardinal findModule (Sct_SctApiStatus *_status, ilu_ShortCardinal mur, ilu_ShortCardinal number);
00041 virtual ilu_Cardinal findBarrelModule (Sct_SctApiStatus *_status, ilu_Cardinal barrel, ilu_Cardinal row, ilu_ShortInteger number);
00042 virtual void convertToBarrelModule (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal * barrel, ilu_Cardinal * row, ilu_ShortInteger * number);
00043 virtual ilu_Cardinal findEndcapModule (Sct_SctApiStatus *_status, ilu_Integer disk, ilu_Integer ring, ilu_Integer number);
00044 virtual void convertToEndcapModule (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal * disk, ilu_Cardinal * ring, ilu_Cardinal * number);
00045 virtual void getABCDModules (Sct_SctApiStatus *_status, ilu_Cardinal bank);
00046 virtual void getABCDModule (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal bank);
00047 virtual void setABCDModule (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal bank);
00048 virtual void setABCDModules (Sct_SctApiStatus *_status, ilu_Cardinal bank);
00049 virtual void sendABCDModule (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal bank, ilu_Cardinal type);
00050 virtual void sendABCDModules (Sct_SctApiStatus *_status, ilu_Cardinal bank);
00051 virtual void modifyABCDMask (Sct_SctApiStatus *_status, ilu_Cardinal mid, Sct_SctApi_T_DataBlock mask);
00052 virtual void modifyABCDTrims (Sct_SctApiStatus *_status, ilu_Cardinal mid, Sct_SctApi_T_CharBlock trims);
00053 virtual void modifyABCDRC (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal chip, ilu_ShortCardinal index, ilu_Real p0, ilu_Real p1, ilu_Real p2);
00054 virtual void modifyABCDVar (Sct_SctApiStatus *_status, ilu_Cardinal typ, ilu_Real var);
00055 virtual void modifyABCDModuleVar (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal typ, ilu_Real var);
00056 virtual void modifyABCDChipVar (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Cardinal chip, ilu_Cardinal typ, ilu_Real var);
00057 virtual void modifyBOCParam (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal channel, ilu_Cardinal type, ilu_Cardinal val);
00058 virtual void lasersOff (Sct_SctApiStatus *_status);
00059 virtual void freeTriggers (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Real freq);
00060 virtual void stopTriggers (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate);
00061 virtual void timL1A (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate);
00062 virtual void timCalL1A (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_ShortInteger delay);
00063 virtual void sendTriggerAll (Sct_SctApiStatus *_status, class Sct_SctApi_T_Trigger * trig);
00064 virtual void sendTrigger (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, class Sct_SctApi_T_Trigger * trig);
00065 virtual void doScan (Sct_SctApiStatus *_status, class Sct_SctApi_T_Scan * thisScan);
00066 virtual void doRawScan (Sct_SctApiStatus *_status, class Sct_SctApi_T_Scan * thisScan, ilu_Integer delay);
00067 virtual void printBOCSetup (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod);
00068 virtual void printABCDModule (Sct_SctApiStatus *_status, ilu_Cardinal mid);
00069 virtual void printABCDRodModule (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_ShortInteger bank);
00070 virtual void decodeEvent (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_ShortInteger sl, ilu_ShortInteger index, ilu_Boolean extFlag, ilu_Boolean errorType);
00071 virtual void rawData (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Integer delay, ilu_Integer units, ilu_Boolean setMask);
00072 virtual void sendL1A (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod);
00073 virtual Sct_SctApi_T_CharBlock probe (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod);
00074 virtual Sct_SctApi_T_CharBlock probeHarness (Sct_SctApiStatus *_status, ilu_Cardinal partition, ilu_Cardinal crate, ilu_Cardinal rod, ilu_Cardinal harness);
00075 virtual void requestHardReset (Sct_SctApiStatus *_status, ilu_Cardinal mid);
00076 virtual void requestIVCurve (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_ShortReal start, ilu_ShortReal stop, ilu_ShortReal step, ilu_ShortCardinal delay, ilu_ShortReal currentLim);
00077 virtual void setSelect (Sct_SctApiStatus *_status, ilu_Cardinal mid, ilu_Boolean value);
00078 virtual void changeRunState (Sct_SctApiStatus *_status, ilu_Integer state);
00079 virtual void ddcGetChannelParameter (Sct_SctApiStatus *_status, ilu_Integer crate, ilu_Integer channel, ilu_T_CString dpeName, ilu_Integer * dpeValue, ilu_Integer timeout);
00080
00081
00082 virtual class Sct_SctApi_T_Scan * defaultScan (Sct_SctApiStatus *_status);
00083 virtual class Sct_SctApi_T_Trigger * defaultTrigger (Sct_SctApiStatus *_status);
00084 virtual Sct_SctApi_T_ScanList knownScans (Sct_SctApiStatus *_status);
00085
00086 std::list<Sct_SctApi_T_Scan *> scans;
00087
00088 static SctApiServer *singleton;
00089
00090 protected:
00091 SctApi::SctApi &worker();
00092
00093 MRSStream mrsStream;
00094 ISInfoDictionary isDict;
00095 };
00096
00097
00098 class ScanServer : public SctApi::ScanDefImpl, public IPCObject, public virtual Sct_SctApi_T_Scan {
00099 ScanServer(const ScanServer &);
00100 ScanServer &operator=(const ScanServer &);
00101
00102 static int nextNumber;
00103
00104 public:
00105 ScanServer(IPCServer* server);
00106
00107 virtual ~ScanServer();
00108
00109 virtual void print (Sct_SctApiStatus *_status);
00110 virtual void configure (Sct_SctApiStatus *_status, ilu_ShortCardinal type, ilu_Real start, ilu_Real stop, ilu_Real step);
00111 virtual void configure2 (Sct_SctApiStatus *_status, ilu_ShortCardinal type, ilu_Real start, ilu_Real stop, ilu_Real step);
00112 virtual class Sct_SctApi_T_Trigger * getTrigger1 (Sct_SctApiStatus *_status);
00113 virtual class Sct_SctApi_T_Trigger * getTrigger2 (Sct_SctApiStatus *_status);
00114 virtual void setTrigger1 (Sct_SctApiStatus *_status, class Sct_SctApi_T_Trigger * trig);
00115 virtual void setTrigger2 (Sct_SctApiStatus *_status, class Sct_SctApi_T_Trigger * trig);
00116 virtual void setScanVariable1 (Sct_SctApiStatus *_status, ilu_ShortCardinal var);
00117 virtual void setScanVariable2 (Sct_SctApiStatus *_status, ilu_ShortCardinal var);
00118 virtual ilu_ShortCardinal getScanVariable1 (Sct_SctApiStatus *_status);
00119 virtual ilu_ShortCardinal getScanVariable2 (Sct_SctApiStatus *_status);
00120 virtual void setNTrigs (Sct_SctApiStatus *_status, ilu_Cardinal nTrigs);
00121 virtual ilu_ShortCardinal getNTrigs (Sct_SctApiStatus *_status);
00122 virtual Sct_SctApi_T_ScanPoints getScanPoints1 (Sct_SctApiStatus *_status);
00123 virtual Sct_SctApi_T_ScanPoints getScanPoints2 (Sct_SctApiStatus *_status);
00124 virtual void setScanPoints1 (Sct_SctApiStatus *_status, Sct_SctApi_T_ScanPoints scans);
00125 virtual void setScanPoints2 (Sct_SctApiStatus *_status, Sct_SctApi_T_ScanPoints scans);
00126 virtual ilu_Integer getOption (Sct_SctApiStatus *_status, Sct_SctApi_T_Scan_ScanOptions opt);
00127 virtual void setOption (Sct_SctApiStatus *_status, Sct_SctApi_T_Scan_ScanOptions opt, ilu_Integer val);
00128 virtual ilu_Cardinal getScanNumber (Sct_SctApiStatus *_status);
00129 virtual void setScanNumber (Sct_SctApiStatus *_status, ilu_Cardinal scan);
00130 virtual ilu_Cardinal getRunNumber (Sct_SctApiStatus *_status);
00131 virtual void setRunNumber (Sct_SctApiStatus *_status, ilu_Cardinal run);
00132 virtual sctConf_T_ModuleList getModuleList (Sct_SctApiStatus *_status, ilu_Cardinal group);
00133 virtual ilu_Cardinal getNGroups (Sct_SctApiStatus *_status);
00134
00135
00136 virtual void destroy(ipcStatus *_status);
00137
00138 protected:
00139 static std::string getServerName();
00140
00141 protected:
00142 SctApi::Scan &worker();
00143 };
00144
00145
00146 class TriggerServer : public SctApi::TriggerImpl, public IPCObject, public virtual Sct_SctApi_T_Trigger {
00147 TriggerServer(const TriggerServer &);
00148 TriggerServer &operator=(const TriggerServer &);
00149
00150 static int nextNumber;
00151
00152 public:
00153 TriggerServer(IPCServer* server);
00154
00155 virtual ~TriggerServer();
00156
00157 virtual void print (Sct_SctApiStatus *_status);
00158 virtual void singleL1A (Sct_SctApiStatus *_status);
00159 virtual void calL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay);
00160 virtual void pulseL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay);
00161 virtual void softL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay);
00162 virtual void softCalL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay, ilu_ShortCardinal delay2);
00163 virtual void softPulseL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay, ilu_ShortCardinal delay2);
00164 virtual void bcL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay);
00165 virtual void bcCalL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay, ilu_ShortCardinal delay2);
00166 virtual void bcPulseL1A (Sct_SctApiStatus *_status, ilu_ShortCardinal delay, ilu_ShortCardinal delay2);
00167 virtual void setCommIncr (Sct_SctApiStatus *_status, ilu_ShortCardinal command, ilu_ShortCardinal incr);
00168 virtual void getCommIncr (Sct_SctApiStatus *_status, ilu_ShortCardinal * command, ilu_ShortCardinal * incr);
00169
00170 virtual void destroy(ipcStatus *_status);
00171
00172 protected:
00173 static std::string getServerName();
00174
00175 SctApi::Trigger &worker();
00176 };
00177