00001 #include <sys/types.h>
00002 #include <errno.h>
00003 #include <assert.h>
00004
00005 #include <rtsLog.h>
00006 #include <rtsSystems.h>
00007
00008
00009
00010
00011 #include <SFS/sfs_index.h>
00012 #include <DAQ_READER/daqReader.h>
00013 #include <DAQ_READER/daq_dta.h>
00014
00015
00016 #include "daq_tpc.h"
00017
00018 extern int tpc_reader(char *m, tpc_t *tpc, int sec, int flag) ;
00019
00020
00021 class daq_det_tpc_factory : public daq_det_factory
00022 {
00023 public:
00024 daq_det_tpc_factory() {
00025 daq_det_factory::det_factories[TPC_ID] = this ;
00026 }
00027
00028 daq_det *create() {
00029 return new daq_tpc ;
00030 }
00031 } ;
00032
00033 static daq_det_tpc_factory tpc_factory ;
00034
00035
00036
00037
00038 daq_tpc::daq_tpc(daqReader *rts_caller)
00039 {
00040 rts_id = TPC_ID ;
00041 name = sfs_name = rts2name(rts_id) ;
00042
00043 caller = rts_caller ;
00044 if(caller) caller->insert(this, rts_id) ;
00045
00046 legacy = new daq_dta ;
00047
00048 LOG(DBG,"%s: constructor: caller %p",name,rts_caller) ;
00049 return ;
00050 }
00051
00052 daq_tpc::~daq_tpc()
00053 {
00054 LOG(DBG,"%s: DEstructor",name) ;
00055
00056 delete legacy ;
00057
00058 return ;
00059 }
00060
00061
00062
00063 daq_dta *daq_tpc::get(const char *bank, int sec, int row, int pad, void *p1, void *p2)
00064 {
00065 Make() ;
00066 if(!present) return 0 ;
00067
00068
00069 if(!bank || (strcasecmp(bank,"legacy")==0)) bank = "legacy" ;
00070
00071
00072 if(strcasecmp(bank,"legacy")==0) {
00073 return handle_legacy(sec,row) ;
00074 }
00075
00076
00077
00078 LOG(ERR,"%s: unknown bank type \"%s\"",name,bank) ;
00079 return 0 ;
00080 }
00081
00082 daq_dta *daq_tpc::handle_legacy(int sec, int rdo)
00083 {
00084 int min_s, max_s ;
00085 int found_something = 0 ;
00086
00087 if(sec <= 0) {
00088 min_s = 1 ;
00089 max_s = 24 ;
00090 }
00091 else {
00092 min_s = max_s = sec ;
00093 }
00094
00095 legacy->create((max_s-min_s+1)*sizeof(tpc_t),"tpc_t",rts_id,DAQ_DTA_STRUCT(tpc_t)) ;
00096
00097 for(int s=min_s;s<=max_s;s++) {
00098 int have ;
00099
00100 tpc_t *tpc_p = (tpc_t *) legacy->request(1) ;
00101
00102
00103 have = tpc_reader(caller->mem, tpc_p, s-1, m_Debug) ;
00104
00105 if(have) {
00106 found_something = 1 ;
00107 legacy->finalize(1,s,0,0) ;
00108 }
00109 else {
00110 LOG(NOTE,"%s: sector %d: not found",name,s) ;
00111 }
00112
00113 }
00114
00115 legacy->rewind() ;
00116
00117 LOG(NOTE,"%s: done",name) ;
00118
00119 if(found_something) return legacy ;
00120 else return 0 ;
00121 }
00122
00123
00124 int daq_tpc::get_l2(char *buff, int buff_bytes, struct daq_trg_word *trg, int prompt)
00125 {
00126 trg[0].t = 1234 ;
00127 trg[0].daq = 0 ;
00128 trg[0].trg = 4 ;
00129 trg[0].rhic = 0 ;
00130
00131 return 1 ;
00132 }