Line data Source code
1 : /**
2 : * @file CreateElink.hpp Specific ElinkConcept creator.
3 : *
4 : * This is part of the DUNE DAQ , copyright 2020.
5 : * Licensing/copyright details are in the COPYING file that you should have
6 : * received with this code.
7 : */
8 : #ifndef FLXLIBS_SRC_CREATEELINK_HPP_
9 : #define FLXLIBS_SRC_CREATEELINK_HPP_
10 :
11 : #include "ElinkConcept.hpp"
12 : #include "ElinkModel.hpp"
13 : #include "flxlibs/AvailableParserOperations.hpp"
14 : #include "datahandlinglibs/DataHandlingIssues.hpp"
15 : //#include "fdreadoutlibs/ProtoWIBSuperChunkTypeAdapter.hpp"
16 : //#include "fdreadoutlibs/DUNEWIBSuperChunkTypeAdapter.hpp"
17 : #include "fdreadoutlibs/DAPHNESuperChunkTypeAdapter.hpp"
18 : #include "fdreadoutlibs/DAPHNEStreamSuperChunkTypeAdapter.hpp"
19 : #include "fdreadoutlibs/VariableSizePayloadTypeAdapter.hpp"
20 :
21 : #include "appmodel/DataMoveCallbackConf.hpp"
22 :
23 : #include <memory>
24 : #include <string>
25 :
26 : namespace dunedaq {
27 :
28 : //DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter, "WIBFrame")
29 : //DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter, "WIB2Frame")
30 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter, "PDSFrame")
31 : DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter, "PDSStreamFrame")
32 :
33 : namespace flxlibs {
34 :
35 : std::unique_ptr<ElinkConcept>
36 0 : createElinkModel(const appmodel::DataMoveCallbackConf* conf)
37 : {
38 0 : auto datatype = conf->get_data_type();
39 : /*
40 :
41 : if (raw_dt.find("WIBFrame") != std::string::npos) {
42 : // WIB1 specific char arrays
43 : // Create Model
44 : auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter>>();
45 :
46 : // Setup sink (acquire pointer from QueueRegistry)
47 : elink_model->set_sink(conn_uid);
48 :
49 : // Get parser and sink
50 : auto& parser = elink_model->get_parser();
51 : auto& sink = elink_model->get_sink();
52 : auto& error_sink = elink_model->get_error_sink();
53 :
54 : // Modify parser as needed...
55 : parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter>(sink);
56 : if (error_sink != nullptr) {
57 : parser.process_chunk_with_error_func = parsers::errorChunkIntoSink(error_sink);
58 : }
59 : // parser.process_block_func = ...
60 :
61 : // Return with setup model
62 : return elink_model;
63 :
64 : } else if (raw_dt.find("WIB2Frame") != std::string::npos) {
65 : // WIB2 specific char arrays
66 : auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter>>();
67 : elink_model->set_sink(conn_uid);
68 : auto& parser = elink_model->get_parser();
69 : auto& sink = elink_model->get_sink();
70 : parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter>(sink);
71 : return elink_model;
72 :
73 : } else*/
74 0 : if (datatype.find("PDSStreamFrame") != std::string::npos) {
75 : // PDS specific char arrays
76 0 : auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>>();
77 0 : elink_model->set_sink_config(conf);
78 0 : auto& parser = elink_model->get_parser();
79 0 : auto& cb = elink_model->m_sink_callback;
80 0 : parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>(cb);
81 0 : return elink_model;
82 :
83 0 : } else if (datatype.find("PDSFrame") != std::string::npos) {
84 : // PDS specific char arrays
85 0 : auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>>();
86 0 : elink_model->set_sink_config(conf);
87 0 : auto& parser = elink_model->get_parser();
88 0 : auto& cb = elink_model->m_sink_callback;
89 0 : parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>(cb);
90 0 : return elink_model;
91 :
92 :
93 0 : } else if (datatype.find("varsize") != std::string::npos) {
94 : // Variable sized user payloads
95 0 : auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::VariableSizePayloadTypeAdapter>>();
96 0 : elink_model->set_sink_config(conf);
97 0 : auto& parser = elink_model->get_parser();
98 0 : auto& cb = elink_model->m_sink_callback;
99 0 : parser.process_chunk_func = parsers::varsizedChunkIntoWrapper(cb);
100 0 : parser.process_shortchunk_func = parsers::varsizedShortchunkIntoWrapper(cb);
101 0 : return elink_model;
102 0 : }
103 :
104 0 : return nullptr;
105 0 : }
106 :
107 : } // namespace flxlibs
108 : } // namespace dunedaq
109 :
110 : #endif // FLXLIBS_SRC_CREATEELINK_HPP_
|