DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
CreateElink.hpp
Go to the documentation of this file.
1
8#ifndef FLXLIBS_SRC_CREATEELINK_HPP_
9#define FLXLIBS_SRC_CREATEELINK_HPP_
10
11#include "ElinkConcept.hpp"
12#include "ElinkModel.hpp"
15//#include "fdreadoutlibs/ProtoWIBSuperChunkTypeAdapter.hpp"
16//#include "fdreadoutlibs/DUNEWIBSuperChunkTypeAdapter.hpp"
20
21#include <memory>
22#include <string>
23
24namespace dunedaq {
25
26//DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter, "WIBFrame")
27//DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter, "WIB2Frame")
29DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter, "PDSStreamFrame")
30
31namespace flxlibs {
32
33std::unique_ptr<ElinkConcept>
34createElinkModel(const std::string& conn_uid)
35{
36 auto datatypes = dunedaq::iomanager::IOManager::get()->get_datatypes(conn_uid);
37 if (datatypes.size() != 1) {
38 ers::error(dunedaq::datahandlinglibs::GenericConfigurationError(ERS_HERE,
39 "Multiple output data types specified! Expected only a single type!"));
40 }
41 std::string raw_dt{ *datatypes.begin() };
42 TLOG() << "Choosing specializations for ElinkModel for output connection "
43 << " [uid:" << conn_uid << " , data_type:" << raw_dt << ']';
44/*
45
46 if (raw_dt.find("WIBFrame") != std::string::npos) {
47 // WIB1 specific char arrays
48 // Create Model
49 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter>>();
50
51 // Setup sink (acquire pointer from QueueRegistry)
52 elink_model->set_sink(conn_uid);
53
54 // Get parser and sink
55 auto& parser = elink_model->get_parser();
56 auto& sink = elink_model->get_sink();
57 auto& error_sink = elink_model->get_error_sink();
58
59 // Modify parser as needed...
60 parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter>(sink);
61 if (error_sink != nullptr) {
62 parser.process_chunk_with_error_func = parsers::errorChunkIntoSink(error_sink);
63 }
64 // parser.process_block_func = ...
65
66 // Return with setup model
67 return elink_model;
68
69 } else if (raw_dt.find("WIB2Frame") != std::string::npos) {
70 // WIB2 specific char arrays
71 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter>>();
72 elink_model->set_sink(conn_uid);
73 auto& parser = elink_model->get_parser();
74 auto& sink = elink_model->get_sink();
75 parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter>(sink);
76 return elink_model;
77
78 } else*/
79 if (raw_dt.find("PDSStreamFrame") != std::string::npos) {
80 // PDS specific char arrays
81 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>>();
82 elink_model->set_sink(conn_uid);
83 auto& parser = elink_model->get_parser();
84 auto& sink = elink_model->get_sink();
85 parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DAPHNEStreamSuperChunkTypeAdapter>(sink);
86 return elink_model;
87
88 } else if (raw_dt.find("PDSFrame") != std::string::npos) {
89 // PDS specific char arrays
90 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>>();
91 elink_model->set_sink(conn_uid);
92 auto& parser = elink_model->get_parser();
93 auto& sink = elink_model->get_sink();
94 parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DAPHNESuperChunkTypeAdapter>(sink);
95 return elink_model;
96
97
98 } else if (raw_dt.find("varsize") != std::string::npos) {
99 // Variable sized user payloads
100 auto elink_model = std::make_unique<ElinkModel<fdreadoutlibs::types::VariableSizePayloadTypeAdapter>>();
101 elink_model->set_sink(conn_uid);
102 auto& parser = elink_model->get_parser();
103 auto& sink = elink_model->get_sink();
104 parser.process_chunk_func = parsers::varsizedChunkIntoWrapper(sink);
105 parser.process_shortchunk_func = parsers::varsizedShortchunkIntoWrapper(sink);
106 return elink_model;
107 }
108
109 return nullptr;
110}
111
112} // namespace flxlibs
113} // namespace dunedaq
114
115#endif // FLXLIBS_SRC_CREATEELINK_HPP_
#define ERS_HERE
#define DUNE_DAQ_TYPESTRING(Type, typestring)
static std::shared_ptr< IOManager > get()
Definition IOManager.hpp:40
#define TLOG(...)
Definition macro.hpp:22
std::unique_ptr< ElinkConcept > createElinkModel(const std::string &conn_uid)
Including Qt Headers.
void error(const Issue &issue)
Definition ers.hpp:81