00001 #include <sys/types.h>
00002 #include <string.h>
00003
00004 #include <rtsLog.h>
00005 #include <rtsSystems.h>
00006
00007 #include <DAQ_READER/daqReader.h>
00008 #include <DAQ_READER/daq_dta.h>
00009
00010 #include "daq_svt.h"
00011
00012 extern int svt_reader(char *m, struct svt_t *svt, u_int driver) ;
00013
00014 const char *daq_svt::help_string = "SVT tst\n" ;
00015
00016
00017 class daq_det_svt_factory : public daq_det_factory
00018 {
00019 public:
00020 daq_det_svt_factory() {
00021 daq_det_factory::det_factories[SVT_ID] = this ;
00022 }
00023
00024 daq_det *create() {
00025 return new daq_svt ;
00026 }
00027 } ;
00028
00029 static daq_det_svt_factory svt_factory ;
00030
00031
00032
00033 daq_svt::daq_svt(daqReader *rts_caller)
00034 {
00035 LOG(DBG,"SVT: rts_id %d, name %s",rts_id,name) ;
00036
00037
00038 rts_id = SVT_ID ;
00039 name = rts2name(rts_id) ;
00040 sfs_name = "svt" ;
00041 caller = rts_caller ;
00042 if(caller) caller->insert(this, rts_id) ;
00043
00044
00045 legacy = new daq_dta ;
00046
00047 LOG(DBG,"%s: constructor: caller %p",name,caller) ;
00048 }
00049
00050 daq_svt::~daq_svt()
00051 {
00052 LOG(DBG,"%s: destructor",name) ;
00053
00054 if(caller) caller->de_insert(rts_id) ;
00055
00056 delete legacy ;
00057
00058 return ;
00059 }
00060
00061
00062 daq_dta *daq_svt::get(const char *bank, int c1, int c2, int c3, void *p1, void *p2)
00063 {
00064 Make() ;
00065 if(!present) return 0 ;
00066
00067 if(strcmp(bank,"*")==0) bank = "legacy" ;
00068
00069 if(strcasecmp(bank,"legacy") != 0) {
00070 LOG(ERR,"%s: unknown bank %s",name,bank) ;
00071 return 0 ;
00072 }
00073
00074 return handle_legacy() ;
00075
00076 }
00077
00078
00079 daq_dta *daq_svt::handle_legacy()
00080 {
00081
00082
00083 legacy->create(1,"svt_t",rts_id,DAQ_DTA_STRUCT(svt_t)) ;
00084
00085
00086 svt_t *svt_p = (svt_t *) legacy->request(1) ;
00087
00088 svt_reader(caller->mem, svt_p, m_Debug) ;
00089
00090 legacy->finalize(1,0,0,0) ;
00091 legacy->rewind() ;
00092
00093 return legacy ;
00094 }