ddt  0.1
ddtSubscriberSimulator.hpp
Go to the documentation of this file.
1 // @copyright
2 // (c) Copyright ESO 2020
3 // All Rights Reserved
4 // ESO (eso.org) is an Intergovernmental Organization, and therefore special
5 // legal conditions apply.
6 //
7 // @file ddtSubscriberSimulator.hpp
8 // @brief Simulator for receiving data.
9 //
10 // This is a simulator for receiving data from a publisher application. The
11 // simulator connects to a local Broker and either receives data from a remote
12 // publisher or from a local publisher.
13 //
14 // @author Matthias Grimm, CGI
15 // @since 2020/06/30
16 //
17 
18 #ifndef DDTSUBSCRIBERSIMULATOR_HPP_
19 #define DDTSUBSCRIBERSIMULATOR_HPP_
20 
21 #include <cpl.h>
22 #undef I
23 #undef arg
24 
25 #include <boost/algorithm/string.hpp>
26 #include <boost/bind/bind.hpp>
27 #include <boost/signals2/signal.hpp>
28 #include <iostream>
29 
30 #include "ddt/imageBuffer.hpp"
31 #include "ddt/imageIO.hpp"
32 #include "ddt/initCpl.hpp"
33 
38 #include "ddt/ddtLogger.hpp"
39 
41 #include "ddt/ddtEncDecImage2D.hpp"
42 #include "ddt/ddtEncDecImage3D.hpp"
43 
44 namespace mal = ::elt::mal;
45 namespace datatransfer = ::elt::ddt::datatransfer;
46 
47 namespace ddt {
48 
50  IMAGETRANSFER = 1,
51  OSCILLOSCOPE = 2,
52  MULTIDIM = 3,
53  CONFIGURATIONMAP = 4,
54  SEGMENTEDIMAGE = 5
55 };
56 
60 union R4 {
64  float i;
65 
69  unsigned char c[4];
70 };
71 
76  public:
81 
86 
91  int Run() final;
92 
96  bool Init(int argc, char** argv);
97 
102  int RunTransfer();
103 
104  private:
105  void ProcessNewData() final;
106  void ProcessNewDataOsc();
107  void ProcessNewDataMultiDim();
108  void PrintStatistics();
109  void DumpAsFile(ddt::DataSample* const data_sample, DdtEncDec* const encDec);
110 
111  cpl_image* createNewImageFromDataSample(ddt::DataSample* const sample,
112  const int bytes_per_pixel,
113  const int num_pix_x,
114  const int num_pix_y,
115  const uint32_t data_type,
116  bool* const unwrap_only);
117  cpl_propertylist* loadWCSFromMetadata(DdtEncDec* const encDec);
118 
119  void logMetaDataBase(DataSample* const data_sample,
120  const DdtEncDec* const encDec);
121  void logMetaDataImage2D(DataSample* const data_sample,
122  const DdtEncDecImage2D* const encDec2D);
123  void logMetaDataImage3D(DataSample* const data_sample,
124  const DdtEncDecImage3D* const encDec3D);
125  void logMetaDataBinaryxD(DataSample* const data_sample,
126  const DdtEncDecBinaryxD* const encDecxD);
127  void logSimulatorStart(const std::string use_case);
128  void logWcsInfo(const DdtEncDec* const encDec);
129 
130  std::vector<std::string> getDimensions(DataSample* const data_sample);
131 
132  std::unique_ptr<DdtDataSubscriber> subscriber;
133 
134  DdtLogger* logger = nullptr;
135  CommandLineParserBuilder* builder = nullptr;
136 
137  std::string broker_uri;
138  std::string data_stream_identifier;
139  int reading_interval = 10;
140  std::string remote_broker_uri;
141  int mode = 1;
142  bool statistics = false;
143  bool dump_data = false;
144  std::string dump_folder;
145 
146  std::atomic<bool> processing_active;
147 
148  boost::signals2::connection connection;
149 
150  const int BYTES_STEP = 2;
151 };
152 
153 } // namespace ddt
154 
155 #endif /* DDTSUBSCRIBERSIMULATOR_HPP_ */
commandLineParserBuilder.hpp
ddt::IMAGETRANSFER
@ IMAGETRANSFER
Definition: ddtPublisherSimulator.hpp:45
testPyDdtDataTransfer.data_type
data_type
Definition: testPyDdtDataTransfer.py:43
DdtEncDec
Definition: ddtEncDec.hpp:60
ddt::DdtSubscriberSimulator::RunTransfer
int RunTransfer()
Definition: ddtSubscriberSimulator.cpp:116
ddt::DdtSubscriberSimulator::~DdtSubscriberSimulator
~DdtSubscriberSimulator() final
Definition: ddtSubscriberSimulator.cpp:49
ddt::DdtLogger
Definition: ddtLogger.hpp:48
ddt::R4::i
float i
Definition: ddtSubscriberSimulator.hpp:64
ddt
Definition: ddtClient.hpp:36
ddtEncDecImage3D.hpp
DdtEncDecImage3D
Definition: ddtEncDecImage3D.hpp:51
ddt::SEGMENTEDIMAGE
@ SEGMENTEDIMAGE
Definition: ddtPublisherSimulator.hpp:49
imageIO.hpp
ddt::CommandLineParserBuilder
Definition: commandLineParserBuilder.hpp:24
imageBuffer.hpp
ddtEncDecImage2D.hpp
ddt::DataSample
Definition: ddtMemoryAccessor.hpp:173
ddt::DdtSubscriberSimulator::Init
bool Init(int argc, char **argv)
Definition: ddtSubscriberSimulator.cpp:63
ddt::R4::c
unsigned char c[4]
Definition: ddtSubscriberSimulator.hpp:69
ddtDataSubscriber.hpp
ddt::CONFIGURATIONMAP
@ CONFIGURATIONMAP
Definition: ddtPublisherSimulator.hpp:48
ddt::DdtSubscriberSimulator::Run
int Run() final
Definition: ddtSubscriberSimulator.cpp:104
ddtEncDecBinaryxD.hpp
ddt::DdtSubscriberSimulator::DdtSubscriberSimulator
DdtSubscriberSimulator()
testPyDdtDataTransfer.bytes_per_pixel
bytes_per_pixel
Definition: testPyDdtDataTransfer.py:37
DdtEncDecBinaryxD
Definition: ddtEncDecBinaryxD.hpp:47
ddt::OSCILLOSCOPE
@ OSCILLOSCOPE
Definition: ddtPublisherSimulator.hpp:46
ddtDataSubscriberApplication.hpp
ddtLogger.hpp
ddtDataTransferFactory.hpp
ddt::DdtDataSubscriberApplication
Definition: ddtDataSubscriberApplication.hpp:25
ddt::SubscriberModes
SubscriberModes
Definition: ddtSubscriberSimulator.hpp:49
DdtEncDecImage2D
Definition: ddtEncDecImage2D.hpp:54
ddt::R4
Definition: ddtSubscriberSimulator.hpp:60
ddt::MULTIDIM
@ MULTIDIM
Definition: ddtPublisherSimulator.hpp:47
initCpl.hpp
ddt::DdtSubscriberSimulator
Definition: ddtSubscriberSimulator.hpp:75
ddt::DdtDataSubscriber
Definition: ddtDataSubscriber.hpp:35