ifw-fgf 2.0.0
 
Loading...
Searching...
No Matches
commAdapter.hpp
Go to the documentation of this file.
1
8
9#pragma once
10
11#include <stdint.h>
12#include <vector>
13#include <cstdint>
14#include <atomic>
15#include <thread>
16#include <condition_variable>
17#include <mutex>
18#include <memory>
19#include <string>
20#include <variant>
21
22#include <ifw/odp/cppcpl/imageCube.hpp>
23#include <ifw/odp/cppcpl/image.hpp>
24
25#include <ifw/fnd/tools/tools.hpp>
26
31#include <ifw/rtmslib_llnetio/rtmsSender.hpp>
32
33
34namespace sbss::fgf::dvc {
35
37 std::string src_ip;
38 std::string dest_ip;
39 int dest_port{0};
40 ifw::rtmslib::SenderConfig sender_cfg{};
41 };
42
43 using DevCtrlEnumKey = std::variant<ifw::fgf::common::SetupParam::ParamEnum>;
44
45 struct DevCtrlEnumKeyHash {
46 std::size_t operator()(const DevCtrlEnumKey& key) const {
47 return std::visit([](auto&& arg) -> std::size_t {
48 return std::hash<std::underlying_type_t<std::decay_t<decltype(arg)>>>()
49 (static_cast<std::underlying_type_t<std::decay_t<decltype(arg)>>>(arg));
50 }, key);
51 }
52 };
53
56
57 struct DevStatEnumKeyHash {
58 std::size_t operator()(const DevStatEnumKey& key) const {
59 return std::visit([](auto&& arg) -> std::size_t {
60 return std::hash<std::underlying_type_t<std::decay_t<decltype(arg)>>>()
61 (static_cast<std::underlying_type_t<std::decay_t<decltype(arg)>>>(arg));
62 }, key);
63 }
64 };
65
66
68 class CommAdapter: public ifw::fgf::common::ICommAdapter {
69 public:
70
71 CommAdapter(const RtmsNetworkConfig& rtms_cfg, const std::string& filename);
72
73 virtual ~CommAdapter();
74
76 virtual void Initialise();
77
79 virtual void CheckConnection(bool& connected);
80
82 virtual void Connect();
83
85 virtual void Disconnect();
86
88 virtual bool IsConnected() const;
89
91 virtual void Read(ifw::fgf::common::VectorVariant& params) const override;
92
94 virtual void Read(ifw::fgf::common::PairVariant& param) const override;
95
97 virtual void Write(const ifw::fgf::common::VectorVariant& params) override;
98
100 virtual void Write(const ifw::fgf::common::PairVariant& param) override;
101
103 virtual short Setup() override;
104
106 virtual short Start() override;
107
109 virtual short Stop() override;
110
112 virtual short Reset() override;
113
115 //virtual short GetLoggers() override; // TODO: Return value should be std::string
116 virtual std::string GetLoggers() override;
117
119 virtual short SetLogLevel(std::string& level, std::string& logger) override;
120
121 private:
122 virtual void Run();
123 void StartAcqThread();
124 void StopAcqThread();
125 void FillDataVectors();
126 void SerialiseDataInt(const ifw::odp::Image& image, std::vector<uint8_t>& datavec) const;
127 void SetSetupParam(fgf::dvc::DevCtrlEnumKey key,
128 const ifw::fgf::common::Variant& value);
129 void GetParam(fgf::dvc::DevStatEnumKey key,
130 ifw::fgf::common::Variant& value) const;
131 void EnsureRtmsSender(int width, int height, int bpp);
132 void PublishFrame(const std::shared_ptr<ifw::fgf::common::RawImage>& raw_image);
133
134 protected:
135
136 // Pointer to latest received image
137 std::shared_ptr<ifw::fgf::common::RawImage> m_raw_image;
138 int m_img_bpp{0};
139 int m_img_width{0};
140 int m_img_height{0};
141
142 private:
143 // Vector storing FITS planes to be used for the simulation
144 std::vector<std::vector<uint8_t>> m_image_data_vector;
145 mutable std::mutex m_image_data_mtx;
146
148 static std::atomic<bool> m_stopped;
149 std::atomic<bool> m_acq_active{false};
150 std::atomic<bool> m_acq_running{false};
151
153 std::thread m_acq_thread;
154 std::string m_filename;
155 ifw::fgf::common::CameraSetup m_cam_setup;
156 ifw::fgf::common::CameraStatus m_cam_status;
157 log4cplus::Logger m_logger;
158 RtmsNetworkConfig m_rtms_cfg;
159 std::unique_ptr<ifw::rtmslib::RtmsSender> m_rtms_sender;
160 int m_active_sender_bpp{0};
161 size_t m_active_sender_size{0};
162
163 double m_sim_im_acq_period{0.0};
164 ifw::fnd::tools::LoopFrequencyCalculator m_frame_rate_calculator;
165 };
166
167}
Abstract base class for implementing FGF Communication Adapters.
Definition iCommAdapter.hpp:24
CommAdapter(ifw::fgf::common::RtmsPublisher &publisher, const std::string &filename)
Definition commAdaptor.cpp:35
virtual short SetLogLevel(std::string &level, std::string &logger) override
Set the logging level for a (log4cplus) logger.
virtual bool IsConnected() const
IsConnected.
virtual std::string GetLoggers() override
Return the set of (log4cplus) loggers currently in use.
virtual short Stop() override
Stop image acquisition.
virtual void Initialise()
Initialise camera SDK.
virtual void Read(ifw::fgf::common::VectorVariant &params) const override
Read a generic set of attributes.
std::shared_ptr< ifw::fgf::common::RawImage > m_raw_image
Definition commAdapter.hpp:128
virtual void Connect()
Connect to camera.
int m_img_bpp
Definition commAdapter.hpp:129
virtual short Reset() override
Reset frame grabber.
int m_img_height
Definition commAdapter.hpp:131
virtual void Write(const ifw::fgf::common::VectorVariant &params) override
Write a set of attributes.
virtual void Read(ifw::fgf::common::PairVariant &param) const override
Read a single attribute.
virtual void Disconnect()
Disconnect from the camera.
int m_img_width
Definition commAdapter.hpp:130
virtual short Setup() override
Setup image acquisition.
virtual void CheckConnection(bool &connected)
CheckConnection.
virtual short Start() override
Start image acquisition.
virtual void Write(const ifw::fgf::common::PairVariant &param) override
Write a single attribute.
Frame Grabber Camera Base Class definitions.
Abstract base class for implementing FGF Communication Adapters.
Logging definitions.
Image class for handling images from the camera.
std::variant< bool, int, unsigned int, short, double, std::string > Variant
Definition setupParam.hpp:21
std::vector< PairVariant > VectorVariant
Definition setupParam.hpp:24
std::pair< std::string, Variant > PairVariant
Definition setupParam.hpp:23
Definition commAdaptor.cpp:28
std::variant< ifw::fgf::common::SetupParam::ParamEnum > DevCtrlEnumKey
Definition commAdapter.hpp:34
std::variant< ifw::fgf::common::StatusParam::StatusEnum, ifw::fgf::common::SetupParam::ParamEnum > DevStatEnumKey
Definition commAdapter.hpp:45
ParamEnum
Definition setupParam.hpp:42
StatusEnum
Status ("stat" category) parameters enums.
Definition statusParam.hpp:42
std::size_t operator()(const DevCtrlEnumKey &key) const
Definition commAdapter.hpp:46
std::size_t operator()(const DevStatEnumKey &key) const
Definition commAdapter.hpp:58
Definition commAdapter.hpp:36
int dest_port
Definition commAdapter.hpp:39
ifw::rtmslib::SenderConfig sender_cfg
Definition commAdapter.hpp:40
std::string src_ip
Definition commAdapter.hpp:37
std::string dest_ip
Definition commAdapter.hpp:38