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_ssd.h"
00011
00012
00013 const char *daq_ssd::help_string = "SSD tst\n" ;
00014
00015 class daq_det_ssd_factory : public daq_det_factory
00016 {
00017 public:
00018 daq_det_ssd_factory() {
00019 daq_det_factory::det_factories[SSD_ID] = this ;
00020 }
00021
00022 daq_det *create() {
00023 return new daq_ssd ;
00024 }
00025 } ;
00026
00027 static daq_det_ssd_factory ssd_factory ;
00028
00029
00030
00031 daq_ssd::daq_ssd(daqReader *rts_caller)
00032 {
00033 LOG(DBG,"SSD: rts_id %d, name %s",rts_id,name) ;
00034
00035 rts_id = SSD_ID ;
00036 sfs_name = name = rts2name(rts_id) ;
00037 caller = rts_caller ;
00038 if(caller) caller->insert(this, rts_id) ;
00039
00040 legacy = new daq_dta ;
00041
00042 LOG(DBG,"%s: constructor: caller %p",name,caller) ;
00043 }
00044
00045 daq_ssd::~daq_ssd()
00046 {
00047 LOG(DBG,"%s: destructor",name) ;
00048 if(caller) caller->de_insert(rts_id) ;
00049
00050 delete legacy ;
00051
00052 return ;
00053 }
00054
00055
00056 daq_dta *daq_ssd::get(const char *bank, int c1, int c2, int c3, void *p1, void *p2)
00057 {
00058 Make() ;
00059 if(!present) return 0 ;
00060
00061 if(strcmp(bank,"*")==0) bank = "legacy" ;
00062
00063 if(strcasecmp(bank,"legacy") != 0) {
00064 LOG(ERR,"%s: unknown bank %s",name,bank) ;
00065 return 0 ;
00066 }
00067
00068 return handle_legacy() ;
00069
00070 }
00071
00072
00073 daq_dta *daq_ssd::handle_legacy()
00074 {
00075
00076
00077 legacy->create(1,"ssd_t",rts_id,DAQ_DTA_STRUCT(ssd_t)) ;
00078
00079
00080 ssd_t *ssd_p = (ssd_t *) legacy->request(1) ;
00081
00082 ssd_reader(caller->mem, ssd_p, m_Debug) ;
00083
00084 legacy->finalize(1,0,0,0) ;
00085 legacy->rewind() ;
00086
00087 return legacy ;
00088 }