ifw-ccf 5.0.2
Loading...
Searching...
No Matches
comAdptBase.hpp
Go to the documentation of this file.
1
5#ifndef CCF_COMMON_COM_ADPT_BASE_HPP_H_
6#define CCF_COMMON_COM_ADPT_BASE_HPP_H_
7
8#include <ifw/core/utils/param/parameter.hpp>
9
14#include <ifw/ccf/common/db.hpp>
15
16
17namespace ifw::ccf::common {
18
19 enum class TriggerType {
20 SIGNAL = 0,
21 ABS_TIME = 1,
22 CUSTOM = 2,
23 NOT_USED = 3
24 };
25
34
39 std::string GetHostAddress();
40
46 class ComAdptBase: public Base {
47 public:
48
50 virtual ~ComAdptBase();
51
53 const std::string& GetDeviceAddress() const;
54
56 const int16_t GetDeviceWidth() const;
57
59 const int16_t GetDeviceHeight() const;
60
62 const int8_t GetDeviceResolution() const;
63
65 const std::string& GetId() const;
66
68 double GetMaxFrameRate() const;
69
71 void SetHostAdddress(const std::string& host_address);
72
74 virtual const std::string& GetHostAddress();
75
77 void SetIsSimAdapter(const bool is_sim);
78
80 bool GetIsSimAdapter() const;
81
83 const std::string& GetProtocol() const;
84
87 template <class TYPE>
88 TYPE GetDeviceProperty(const std::string& property) {
89 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
90 std::string tmp_value;
91 if (HasDeviceProperty(property, tmp_value)) {
92 TYPE ret_value;
93 ifw::core::utils::conversion::Convert(tmp_value, ret_value);
94 return ret_value;
95 } else {
96 CCFTHROW("Requesting undefined device property: " + property);
97 }
98 }
99
107 bool HasDeviceProperty(const std::string& property,
108 std::string& value);
109
111 double GetTheoreticFrameRate();
112
115 void Initialise(const bool re_init = false);
116
118 void SetDeviceAddress(const std::string& address);
119
121 void CheckConnection(bool& connected);
122
124 void CheckStatus(ifw::ccf::HwStatus& status,
125 std::string& message);
126
128 bool IsConnected() const;
129
131 void CheckIfConnected() const;
132
133 // Connect to the device. If already connected, it will disconnect and reconnect.
134 void Connect();
135
138 void AutoConnect(const uint8_t attempts = 5,
139 const double timeout = 10);
140
142 void Disconnect();
143
147 void WriteDeviceProps();
148
152 virtual void WriteDevicePropsUser();
153
156 void WriteDefaultSetup();
157
160 virtual void WriteDefaultSetupUser();
161
164 void SetIsConnected(const bool connected);
165
167 bool GetAllowLostFrames() const;
168
170 uint64_t IncLostFramesCount();
171 void SetLostFramesCount(const int64_t count);
172
174 uint64_t GetLostFramesCount() const;
175
177 uint64_t GetFrameCounter() const;
178
179 double GetTimeForLastFrame() const;
180
183
187 void Read(const std::string& name,
188 ifw::core::utils::param::Parameter& par);
189
193 void Read(const std::vector<std::string>& names,
194 std::vector<ifw::core::utils::param::Parameter>& pars);
195
199 std::string Read(const std::string& name);
200
203 template <class TYPE>
204 TYPE Read(const std::string& name) {
205 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
206 ifw::core::utils::param::Parameter par;
207 Read(name, par);
208 TYPE native_value;
209 ifw::core::utils::conversion::Convert(par.GetValue(), native_value);
210 return native_value;
211 //return boost::l_exical_cast<TYPE>(par.GetValue());
212 }
213
216 void Write(const ifw::core::utils::param::Parameter& par);
217
220 void Write(const std::vector<ifw::core::utils::param::Parameter>& pars);
221
224 template <class TYPE>
225 void Write(const std::string& name, const TYPE& value) {
226 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
227 ifw::core::utils::param::Parameter tmp_par(name, value);
228 Write(tmp_par);
229 }
230
241 bool& frame_received,
242 const double timeout,
243 bool& timed_out);
244
246 void Scan(std::vector<ifw::core::utils::param::Parameter>& pars);
247
249 void Start();
250
252 void Stop();
253
256 void HandleSetup();
257
260 void HandleParPreWrite(ifw::core::utils::param::Parameter& par);
261
264 void HandleParPostWrite(ifw::core::utils::param::Parameter& par);
265
267 void HandleParPostRead(ifw::core::utils::param::Parameter& par);
268
272 void MapParForDevice(ifw::core::utils::param::Parameter& par) const;
273
277 void MapParFromDevice(ifw::core::utils::param::Parameter& par) const;
278
280 bool HasNameMapping(const std::string& name) const;
281
282 virtual void SetAcqTrigger(const AcqTrigger& acq_trigger);
283
285
287
290 virtual void InitialiseUser();
291
294 virtual void SetDeviceAddressUser(const std::string& address);
295
298 virtual void CheckConnectionUser(bool& connected);
299
302 virtual void CheckStatusUser(ifw::ccf::HwStatus& status,
303 std::string& message);
304
308 virtual bool HasDevicePropertyUser(const std::string& property,
309 std::string& value);
310
314 virtual double GetTheoreticFrameRateUser();
315
318 virtual void ConnectUser();
319
322 virtual void DisconnectUser();
323
327 virtual bool IsConnectedUser() const;
328
331 virtual void ReadUser(const std::string& name,
332 ifw::core::utils::param::Parameter& par);
333
337 virtual void ReadUser(const std::vector<std::string>& names,
338 std::vector<ifw::core::utils::param::Parameter>& pars);
339
342 virtual void ReceiveUser(ifw::ccf::common::DataFrame& frame,
343 bool& frame_received,
344 const double timeout,
345 bool& timed_out);
346
349 virtual void AddMetaDataUser(ifw::ccf::common::DataFrame& frame);
350
353 virtual void ScanUser(std::vector<ifw::core::utils::param::Parameter>& pars);
354
357 virtual void StartUser();
358
361 virtual void StopUser();
362
365 virtual void WriteUser(const ifw::core::utils::param::Parameter& par);
366
370 virtual void WriteUser(const std::vector<ifw::core::utils::param::Parameter>& pars);
371
374 virtual void HandleSetupUser();
375
378
381 virtual void HandleParPreWriteUser(ifw::core::utils::param::Parameter& par);
382
385 virtual void HandleParPostWriteUser(ifw::core::utils::param::Parameter& par);
386
389 virtual void HandleParPostReadUser(ifw::core::utils::param::Parameter& par);
390
391 const NameMapping& GetNameMapping() const;
392
394 virtual void SetAcqTriggerUser();
395
396 protected:
399
400 virtual void AdjustExpoTimeFrameRate();
401
402 private:
403 bool m_initialised{false};
404 bool m_is_sim_adapter{false};
405 std::string m_device_address;
406 int16_t m_device_array_width{0};
407 int16_t m_device_array_height{0};
408 int8_t m_device_pixel_resolution{0};
409 std::string m_host_address;
410 bool m_allow_lost_frames{false};
411 uint64_t m_lost_frames_count{0};
412 bool m_auto_adjust_time_rate{true};
413 NameMapping m_device_name_mapping;
414
415 // The following map defines the keys to read back. Depending on the device, the key to read
416 // back may be different than the one written (setup vs status key). Due to this the second
417 // column is added.
418 std::map<std::string, std::string> m_status_setup_keys{
419 {"status.expo.time", "expo.time"},
420 // Frame rate may be calculated and not available immediately after setup.
421 // => the setup key:
422 {"expo.frame_rate", "status.expo.frame_rate"},
423 {"status.expo.win_start_x", "expo.win_start_x"},
424 {"status.expo.win_start_y", "expo.win_start_y"},
425 {"status.expo.win_width", "expo.win_width"},
426 {"status.expo.win_height", "expo.win_height"}};
427
428 DeviceInfo m_device_info;
429 std::atomic<double> m_min_acq_period{0}; // Used to delimit the frame acq.
430 std::atomic<double> m_time_last_frame{0}; // Time for receiving last frame.
431 std::atomic<bool> m_dev_acq_running{false};
432 std::atomic<uint64_t> m_frame_counter{0};
433
434 std::map<std::string, ifw::core::utils::param::Parameter> m_device_property_registry;
435 };
436
437}
438
439#endif // CCF_COMMON_COM_ADPT_BASE_HPP_H_
#define CCFTHROW(msg)
Definition base.hpp:366
Class to be used as parent all CCF classes.
Definition base.hpp:120
Definition comAdptBase.hpp:26
double m_abs_time
Definition comAdptBase.hpp:29
TriggerType m_trigger_type
Definition comAdptBase.hpp:28
std::string m_info
Definition comAdptBase.hpp:31
std::string m_custom_trigger
Definition comAdptBase.hpp:30
bool m_deferred_acq_start_active
Definition comAdptBase.hpp:32
Class to be used as parent for CCF Communication Adapters.
Definition comAdptBase.hpp:46
virtual ~ComAdptBase()
Definition comAdptBase.cpp:28
const int16_t GetDeviceWidth() const
Return the width of the data array from the configuration.
Definition comAdptBase.cpp:580
virtual bool HasDevicePropertyUser(const std::string &property, std::string &value)
Definition comAdptBase.cpp:1065
void SetHostAdddress(const std::string &host_address)
Set the address of the host (network interface) used for communication.
Definition comAdptBase.cpp:1003
virtual void ConnectUser()
Definition comAdptBase.cpp:522
bool HasNameMapping(const std::string &name) const
Return true if a mapping is defined in the Device Name Mapping for the given name.
Definition comAdptBase.cpp:966
void Stop()
Stop the image acquisition in the device.
Definition comAdptBase.cpp:433
virtual void ReceiveUser(ifw::ccf::common::DataFrame &frame, bool &frame_received, const double timeout, bool &timed_out)
Definition comAdptBase.cpp:545
void CheckIfConnected() const
Check if the connection is established. If not, throw an exception.
Definition comAdptBase.cpp:52
virtual void WriteDefaultSetupUser()
Definition comAdptBase.cpp:261
virtual void HandleParPostWriteUser(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:614
void SetIsSimAdapter(const bool is_sim)
Set the Simulation Adapter Flag.
Definition comAdptBase.cpp:32
void Write(const ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:446
uint64_t IncLostFramesCount()
Increment the counter of lost frames. The new value is returned.
Definition comAdptBase.cpp:1086
void SetDeviceAddress(const std::string &address)
Set the internal address, e.g. URI, used for communicating with the device.
Definition comAdptBase.cpp:69
double GetTheoreticFrameRate()
Render the theoritic, possible achievable frame rate (frame/s).
Definition comAdptBase.cpp:1072
virtual double GetTheoreticFrameRateUser()
Definition comAdptBase.cpp:1077
ComAdptBase()
Definition comAdptBase.cpp:23
void SetLostFramesCount(const int64_t count)
Definition comAdptBase.cpp:1091
virtual void HandleParPostReadUser(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:618
void ResetLostFramesCount()
Reset the lost frames counter.
Definition comAdptBase.cpp:1101
void HandleParPostRead(ifw::core::utils::param::Parameter &par)
Invoked before reading a parameter from the device, in case speciel handling is needed.
Definition comAdptBase.cpp:605
AcqTrigger m_acq_trigger
Definition comAdptBase.hpp:398
void CheckConnection(bool &connected)
Check if the connection to the device is OK.
Definition comAdptBase.cpp:81
virtual void AddMetaDataUser(ifw::ccf::common::DataFrame &frame)
Definition comAdptBase.cpp:384
virtual void HandleSetupUser()
Definition comAdptBase.cpp:922
const int16_t GetDeviceHeight() const
Return the height of the data array from the configuration.
Definition comAdptBase.cpp:585
bool GetIsSimAdapter() const
Return the Simulation Adapter Flag.
Definition comAdptBase.cpp:37
void ReadMutableSetupPars()
Read setup parameters from the camera device, which may mutate.
Definition comAdptBase.cpp:889
bool IsConnected() const
Returns true if the connection to the device is established and valid.
Definition comAdptBase.cpp:42
void WriteDeviceProps()
Definition comAdptBase.cpp:233
void HandleParPreWrite(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:595
virtual void ReadUser(const std::string &name, ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:530
virtual void WriteDevicePropsUser()
Definition comAdptBase.cpp:238
virtual void StartUser()
Definition comAdptBase.cpp:556
virtual void ScanUser(std::vector< ifw::core::utils::param::Parameter > &pars)
Definition comAdptBase.cpp:552
TYPE Read(const std::string &name)
Definition comAdptBase.hpp:204
virtual void InitialiseUser()
Definition comAdptBase.cpp:175
double GetMaxFrameRate() const
Get Maximim frame rate (Hz).
Definition comAdptBase.cpp:1106
bool GetAllowLostFrames() const
Return flag (cfg par) indicating if lost frames shall be ignored silently.
Definition comAdptBase.cpp:150
bool m_is_connected
Definition comAdptBase.hpp:397
void Read(const std::string &name, ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:307
double GetTimeForLastFrame() const
Definition comAdptBase.cpp:388
void Receive(ifw::ccf::common::DataFrame &frame, bool &frame_received, const double timeout, bool &timed_out)
Definition comAdptBase.cpp:347
const std::string & GetDeviceAddress() const
Return the address from the configuration.
Definition comAdptBase.cpp:575
const std::string & GetProtocol() const
Return the communication protocol used.
Definition comAdptBase.cpp:59
virtual void SetDeviceAddressUser(const std::string &address)
Definition comAdptBase.cpp:509
virtual void SetAcqTrigger(const AcqTrigger &acq_trigger)
Definition comAdptBase.cpp:155
bool HasDeviceProperty(const std::string &property, std::string &value)
Definition comAdptBase.cpp:1029
const NameMapping & GetNameMapping() const
Definition comAdptBase.cpp:298
void AutoConnect(const uint8_t attempts=5, const double timeout=10)
Definition comAdptBase.cpp:202
ifw::ccf::common::TriggerType GetAcqTriggerType() const
Definition comAdptBase.cpp:170
const std::string & GetId() const
Get the ID of the associated device.
Definition comAdptBase.cpp:64
virtual const std::string & GetHostAddress()
Return the address of the host (network interface) used for communicating with the device.
Definition comAdptBase.cpp:1011
uint64_t GetLostFramesCount() const
Return the number of lost frames currently registered.
Definition comAdptBase.cpp:1096
void CheckStatus(ifw::ccf::HwStatus &status, std::string &message)
Check the status of the device (health status).
Definition comAdptBase.cpp:90
void MapParForDevice(ifw::core::utils::param::Parameter &par) const
Definition comAdptBase.cpp:961
void Write(const std::string &name, const TYPE &value)
Definition comAdptBase.hpp:225
const int8_t GetDeviceResolution() const
Return the resolution of the data elements from the configuration.
Definition comAdptBase.cpp:590
virtual void AdjustExpoTimeFrameRate()
Definition comAdptBase.cpp:781
void Scan(std::vector< ifw::core::utils::param::Parameter > &pars)
Scan the address of the associated device and store the parameters in the vector.
Definition comAdptBase.cpp:399
virtual void HandleParPreWriteUser(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:610
void HandleParPostWrite(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:600
void Initialise(const bool re_init=false)
Definition comAdptBase.cpp:101
virtual void StopUser()
Definition comAdptBase.cpp:560
void Start()
Start the image acquisition in the device.
Definition comAdptBase.cpp:417
virtual void WriteUser(const ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:564
TYPE GetDeviceProperty(const std::string &property)
Definition comAdptBase.hpp:88
AcqTrigger & GetAcqTrigger()
Definition comAdptBase.cpp:165
void MapParFromDevice(ifw::core::utils::param::Parameter &par) const
Definition comAdptBase.cpp:955
virtual void CheckStatusUser(ifw::ccf::HwStatus &status, std::string &message)
Definition comAdptBase.cpp:517
void Disconnect()
Disconnect from the device.
Definition comAdptBase.cpp:285
void Connect()
Definition comAdptBase.cpp:179
void WriteDefaultSetup()
Definition comAdptBase.cpp:255
virtual bool IsConnectedUser() const
Definition comAdptBase.cpp:47
virtual void CheckConnectionUser(bool &connected)
Definition comAdptBase.cpp:513
uint64_t GetFrameCounter() const
Return the internal frame counter.
Definition comAdptBase.cpp:1111
void HandleSetup()
Definition comAdptBase.cpp:622
virtual void DisconnectUser()
Definition comAdptBase.cpp:526
virtual void SetAcqTriggerUser()
Specific implementation of the algorithm to trigger an acquisition.
Definition comAdptBase.cpp:303
void SetIsConnected(const bool connected)
Definition comAdptBase.cpp:392
Frame class used to store the data and metadata for one frames received from the camera.
Definition dataFrame.hpp:18
Implements a name mapping service, based on a Name Mapping File to be loaded and installed.
Definition nameMapping.hpp:24
Definition appBase.cpp:9
TriggerType
Definition comAdptBase.hpp:19
std::string GetHostAddress()
log4cplus::Logger & Logger()
Definition base.cpp:23
HwStatus
HW status values.
Definition base.hpp:150