DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
CreateSource.hpp
Go to the documentation of this file.
1
8#ifndef DPDKLIBS_SRC_CREATESOURCE_HPP_
9#define DPDKLIBS_SRC_CREATESOURCE_HPP_
10
11#include "SourceConcept.hpp"
12#include "SourceModel.hpp"
14
17
18#include <memory>
19#include <string>
20
21namespace dunedaq {
22
24DUNE_DAQ_TYPESTRING(dunedaq::fdreadoutlibs::types::TDEEthTypeAdapter, "TDEEthFrame")
25
26namespace dpdklibs {
27
28std::shared_ptr<SourceConcept>
29createSourceModel(const std::string& conn_uid, bool callback_mode)
30{
31 auto datatypes = dunedaq::iomanager::IOManager::get()->get_datatypes(conn_uid);
32 if (datatypes.size() != 1) {
33 ers::error(dunedaq::datahandlinglibs::GenericConfigurationError(ERS_HERE,
34 "Multiple output data types specified! Expected only a single type!"));
35 }
36 std::string raw_dt{ *datatypes.begin() };
37 TLOG() << "Choosing specializations for SourceModel for output connection "
38 << " [uid:" << conn_uid << " , data_type:" << raw_dt << ']';
39
40 if (raw_dt.find("WIBEthFrame") != std::string::npos) {
41 // Create Model
42 auto source_model = std::make_shared<SourceModel<fdreadoutlibs::types::DUNEWIBEthTypeAdapter>>();
43
44 // For callback acquisition later (lazy)
45 source_model->set_sink_name(conn_uid);
46
47 // Setup sink (acquire pointer from QueueRegistry)
48 source_model->set_sink(conn_uid, callback_mode);
49
50 // Get parser and sink
51 //auto& parser = source_model->get_parser();
52 //auto& sink = source_model->get_sink();
53 //auto& error_sink = source_model->get_error_sink();
54
55 // Modify parser as needed...
56 //parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::ProtoWIBSuperChunkTypeAdapter>(sink);
57 //if (error_sink != nullptr) {
58 // parser.process_chunk_with_error_func = parsers::errorChunkIntoSink(error_sink);
59 //}
60 // parser.process_block_func = ...
61
62 // Return with setup model
63 return source_model;
64
65 } else if (raw_dt.find("TDEEthFrame") != std::string::npos) {
66 // WIB2 specific char arrays
67 auto source_model = std::make_shared<SourceModel<fdreadoutlibs::types::TDEEthTypeAdapter>>();
68 source_model->set_sink_name(conn_uid);
69 source_model->set_sink(conn_uid, callback_mode);
70 //auto& parser = source_model->get_parser();
71 //parser.process_chunk_func = parsers::fixsizedChunkInto<fdreadoutlibs::types::DUNEWIBSuperChunkTypeAdapter>(sink);
72 return source_model;
73 }
74
75 return nullptr;
76}
77
78} // namespace dpdklibs
79} // namespace dunedaq
80
81#endif // DPDKLIBS_SRC_CREATESOURCE_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::shared_ptr< SourceConcept > createSourceModel(const std::string &conn_uid, bool callback_mode)
Including Qt Headers.
void error(const Issue &issue)
Definition ers.hpp:81