ifw-ccf 6.0.0
 
Loading...
Searching...
No Matches
comAdptBase.hpp
Go to the documentation of this file.
1
6
7#ifndef CCF_COMMON_COM_ADPT_BASE_HPP_H_
8#define CCF_COMMON_COM_ADPT_BASE_HPP_H_
9
10#include <ifw/core/utils/param/parameter.hpp>
11
16#include <ifw/ccf/common/db.hpp>
17
18
19namespace ifw::ccf::common {
20
21 enum class TriggerType {
22 SIGNAL = 0,
24 CUSTOM = 2,
26 };
27
36
41 std::string GetHostAddress();
42
48 class ComAdptBase: public Base {
49 public:
50
52 virtual ~ComAdptBase();
53
55 const std::string& GetDeviceAddress() const;
56
64 static std::string ResolveHostname(const std::string& address);
65
67 const int16_t GetDeviceWidth() const;
68
70 const int16_t GetDeviceHeight() const;
71
73 const int8_t GetDeviceResolution() const;
74
76 const std::string& GetId() const;
77
79 double GetMaxFrameRate() const;
80
82 void SetHostAdddress(const std::string& host_address);
83
85 virtual const std::string& GetHostAddress();
86
88 void SetIsSimAdapter(const bool is_sim);
89
91 bool GetIsSimAdapter() const;
92
94 const std::string& GetProtocol() const;
95
98 template <class TYPE>
99 TYPE GetDeviceProperty(const std::string& property) {
100 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
101 std::string tmp_value;
102 if (HasDeviceProperty(property, tmp_value)) {
103 TYPE ret_value;
104 ifw::core::utils::conversion::Convert(tmp_value, ret_value);
105 return ret_value;
106 } else {
107 CCFTHROW("Requesting undefined device property: " + property);
108 }
109 }
110
118 bool HasDeviceProperty(const std::string& property,
119 std::string& value);
120
122 double GetTheoreticFrameRate();
123
126 void Initialise(const bool re_init = false);
127
129 void SetDeviceAddress(const std::string& address);
130
132 void CheckConnection(bool& connected);
133
135 void CheckStatus(ifw::ccf::HwStatus& status,
136 std::string& message);
137
139 bool IsConnected() const;
140
142 void CheckIfConnected() const;
143
144 // Connect to the device. If already connected, it will disconnect and reconnect.
145 void Connect();
146
149 void AutoConnect(const uint8_t attempts = 5,
150 const double timeout = 10);
151
153 void Disconnect();
154
158 void WriteDeviceProps();
159
163 virtual void WriteDevicePropsUser();
164
167 void WriteDefaultSetup();
168
171 virtual void WriteDefaultSetupUser();
172
175 void SetIsConnected(const bool connected);
176
178 bool GetAllowLostFrames() const;
179
181 uint64_t IncLostFramesCount();
182 void SetLostFramesCount(const int64_t count);
183
185 uint64_t GetLostFramesCount() const;
186
188 uint64_t GetFrameCounter() const;
189
190 double GetTimeForLastFrame() const;
191
194
198 void Read(const std::string& name,
199 ifw::core::utils::param::Parameter& par);
200
204 void Read(const std::vector<std::string>& names,
205 std::vector<ifw::core::utils::param::Parameter>& pars);
206
210 std::string Read(const std::string& name);
211
214 template <class TYPE>
215 TYPE Read(const std::string& name) {
216 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
217 ifw::core::utils::param::Parameter par;
218 Read(name, par);
219 TYPE native_value;
220 ifw::core::utils::conversion::Convert(par.GetValue(), native_value);
221 return native_value;
222 //return boost::l_exical_cast<TYPE>(par.GetValue());
223 }
224
227 void Write(const ifw::core::utils::param::Parameter& par);
228
231 void Write(const std::vector<ifw::core::utils::param::Parameter>& pars);
232
235 template <class TYPE>
236 void Write(const std::string& name, const TYPE& value) {
237 LOG4CPLUS_TRACE_METHOD(Logger(), __PRETTY_FUNCTION__);
238 ifw::core::utils::param::Parameter tmp_par(name, value);
239 Write(tmp_par);
240 }
241
252 bool& frame_received,
253 const double timeout,
254 bool& timed_out);
255
257 void Scan(std::vector<ifw::core::utils::param::Parameter>& pars);
258
260 void Start();
261
263 void Stop();
264
267 void HandleSetup();
268
271 void HandleParPreWrite(ifw::core::utils::param::Parameter& par);
272
275 void HandleParPostWrite(ifw::core::utils::param::Parameter& par);
276
278 void HandleParPostRead(ifw::core::utils::param::Parameter& par);
279
283 void MapParForDevice(ifw::core::utils::param::Parameter& par) const;
284
288 void MapParFromDevice(ifw::core::utils::param::Parameter& par) const;
289
291 bool HasNameMapping(const std::string& name) const;
292
293 virtual void SetAcqTrigger(const AcqTrigger& acq_trigger);
294
296
298
301 virtual void InitialiseUser();
302
305 virtual void SetDeviceAddressUser(const std::string& address);
306
309 virtual void CheckConnectionUser(bool& connected);
310
313 virtual void CheckStatusUser(ifw::ccf::HwStatus& status,
314 std::string& message);
315
319 virtual bool HasDevicePropertyUser(const std::string& property,
320 std::string& value);
321
325 virtual double GetTheoreticFrameRateUser();
326
329 virtual void ConnectUser();
330
333 virtual void DisconnectUser();
334
338 virtual bool IsConnectedUser() const;
339
342 virtual void ReadUser(const std::string& name,
343 ifw::core::utils::param::Parameter& par);
344
348 virtual void ReadUser(const std::vector<std::string>& names,
349 std::vector<ifw::core::utils::param::Parameter>& pars);
350
353 virtual void ReceiveUser(ifw::ccf::common::DataFrame& frame,
354 bool& frame_received,
355 const double timeout,
356 bool& timed_out);
357
360 virtual void AddMetaDataUser(ifw::ccf::common::DataFrame& frame);
361
364 virtual void ScanUser(std::vector<ifw::core::utils::param::Parameter>& pars);
365
368 virtual void StartUser();
369
372 virtual void StopUser();
373
376 virtual void WriteUser(const ifw::core::utils::param::Parameter& par);
377
381 virtual void WriteUser(const std::vector<ifw::core::utils::param::Parameter>& pars);
382
385 virtual void HandleSetupUser();
386
389
392 virtual void HandleParPreWriteUser(ifw::core::utils::param::Parameter& par);
393
396 virtual void HandleParPostWriteUser(ifw::core::utils::param::Parameter& par);
397
400 virtual void HandleParPostReadUser(ifw::core::utils::param::Parameter& par);
401
402 const NameMapping& GetNameMapping() const;
403
405 virtual void SetAcqTriggerUser();
406
407 protected:
410
411 virtual void AdjustExpoTimeFrameRate();
412
413 private:
414 bool m_initialised{false};
415 bool m_is_sim_adapter{false};
416 std::string m_device_address;
417 int16_t m_device_array_width{0};
418 int16_t m_device_array_height{0};
419 int8_t m_device_pixel_resolution{0};
420 std::string m_host_address;
421 bool m_allow_lost_frames{false};
422 uint64_t m_lost_frames_count{0};
423 bool m_auto_adjust_time_rate{true};
424 NameMapping m_device_name_mapping;
425
426 // The following map defines the keys to read back. Depending on the device, the key to read
427 // back may be different than the one written (setup vs status key). Due to this the second
428 // column is added.
429 std::map<std::string, std::string> m_status_setup_keys{
430 {"status.expo.time", "expo.time"},
431 // Frame rate may be calculated and not available immediately after setup.
432 // => the setup key:
433 {"expo.frame_rate", "status.expo.frame_rate"},
434 {"status.expo.win_start_x", "expo.win_start_x"},
435 {"status.expo.win_start_y", "expo.win_start_y"},
436 {"status.expo.win_width", "expo.win_width"},
437 {"status.expo.win_height", "expo.win_height"}};
438
439 DeviceInfo m_device_info;
440 std::atomic<double> m_min_acq_period{0}; // Used to delimit the frame acq.
441 std::atomic<double> m_time_last_frame{0}; // Time for receiving last frame.
442 std::atomic<bool> m_dev_acq_running{false};
443 std::atomic<uint64_t> m_frame_counter{0};
444
445 std::map<std::string, ifw::core::utils::param::Parameter> m_device_property_registry;
446 };
447
448}
449
450#endif // CCF_COMMON_COM_ADPT_BASE_HPP_H_
#define CCFTHROW(msg)
Definition base.hpp:399
Base()
Definition base.cpp:121
Definition comAdptBase.hpp:28
double m_abs_time
Definition comAdptBase.hpp:31
TriggerType m_trigger_type
Definition comAdptBase.hpp:30
std::string m_info
Definition comAdptBase.hpp:33
std::string m_custom_trigger
Definition comAdptBase.hpp:32
bool m_deferred_acq_start_active
Definition comAdptBase.hpp:34
virtual ~ComAdptBase()
Definition comAdptBase.cpp:31
const int16_t GetDeviceWidth() const
Return the width of the data array from the configuration.
Definition comAdptBase.cpp:641
virtual bool HasDevicePropertyUser(const std::string &property, std::string &value)
Definition comAdptBase.cpp:1134
void SetHostAdddress(const std::string &host_address)
Set the address of the host (network interface) used for communication.
Definition comAdptBase.cpp:1072
virtual void ConnectUser()
Definition comAdptBase.cpp:543
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:1035
void Stop()
Stop the image acquisition in the device.
Definition comAdptBase.cpp:454
virtual void ReceiveUser(ifw::ccf::common::DataFrame &frame, bool &frame_received, const double timeout, bool &timed_out)
Definition comAdptBase.cpp:566
void CheckIfConnected() const
Check if the connection is established. If not, throw an exception.
Definition comAdptBase.cpp:55
virtual void WriteDefaultSetupUser()
Definition comAdptBase.cpp:264
virtual void HandleParPostWriteUser(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:675
void SetIsSimAdapter(const bool is_sim)
Set the Simulation Adapter Flag.
Definition comAdptBase.cpp:35
void Write(const ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:467
uint64_t IncLostFramesCount()
Increment the counter of lost frames. The new value is returned.
Definition comAdptBase.cpp:1155
void SetDeviceAddress(const std::string &address)
Set the internal address, e.g. URI, used for communicating with the device.
Definition comAdptBase.cpp:72
double GetTheoreticFrameRate()
Render the theoritic, possible achievable frame rate (frame/s).
Definition comAdptBase.cpp:1141
virtual double GetTheoreticFrameRateUser()
Definition comAdptBase.cpp:1146
ComAdptBase()
Definition comAdptBase.cpp:26
void SetLostFramesCount(const int64_t count)
Definition comAdptBase.cpp:1160
virtual void HandleParPostReadUser(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:679
void ResetLostFramesCount()
Reset the lost frames counter.
Definition comAdptBase.cpp:1170
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:666
AcqTrigger m_acq_trigger
Definition comAdptBase.hpp:409
void CheckConnection(bool &connected)
Check if the connection to the device is OK.
Definition comAdptBase.cpp:84
virtual void AddMetaDataUser(ifw::ccf::common::DataFrame &frame)
Definition comAdptBase.cpp:405
virtual void HandleSetupUser()
Definition comAdptBase.cpp:991
const int16_t GetDeviceHeight() const
Return the height of the data array from the configuration.
Definition comAdptBase.cpp:646
bool GetIsSimAdapter() const
Return the Simulation Adapter Flag.
Definition comAdptBase.cpp:40
void ReadMutableSetupPars()
Read setup parameters from the camera device, which may mutate.
Definition comAdptBase.cpp:958
bool IsConnected() const
Returns true if the connection to the device is established and valid.
Definition comAdptBase.cpp:45
void WriteDeviceProps()
Definition comAdptBase.cpp:236
void HandleParPreWrite(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:656
virtual void ReadUser(const std::string &name, ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:551
virtual void WriteDevicePropsUser()
Definition comAdptBase.cpp:241
virtual void StartUser()
Definition comAdptBase.cpp:577
virtual void ScanUser(std::vector< ifw::core::utils::param::Parameter > &pars)
Definition comAdptBase.cpp:573
TYPE Read(const std::string &name)
Definition comAdptBase.hpp:215
virtual void InitialiseUser()
Definition comAdptBase.cpp:178
double GetMaxFrameRate() const
Get Maximim frame rate (Hz).
Definition comAdptBase.cpp:1175
bool GetAllowLostFrames() const
Return flag (cfg par) indicating if lost frames shall be ignored silently.
Definition comAdptBase.cpp:153
bool m_is_connected
Definition comAdptBase.hpp:408
void Read(const std::string &name, ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:327
double GetTimeForLastFrame() const
Definition comAdptBase.cpp:409
void Receive(ifw::ccf::common::DataFrame &frame, bool &frame_received, const double timeout, bool &timed_out)
Definition comAdptBase.cpp:367
const std::string & GetDeviceAddress() const
Return the address from the configuration.
Definition comAdptBase.cpp:596
const std::string & GetProtocol() const
Return the communication protocol used.
Definition comAdptBase.cpp:62
virtual void SetDeviceAddressUser(const std::string &address)
Definition comAdptBase.cpp:530
virtual void SetAcqTrigger(const AcqTrigger &acq_trigger)
Definition comAdptBase.cpp:158
bool HasDeviceProperty(const std::string &property, std::string &value)
Definition comAdptBase.cpp:1098
const NameMapping & GetNameMapping() const
Definition comAdptBase.cpp:315
void AutoConnect(const uint8_t attempts=5, const double timeout=10)
Definition comAdptBase.cpp:205
ifw::ccf::common::TriggerType GetAcqTriggerType() const
Definition comAdptBase.cpp:173
static std::string ResolveHostname(const std::string &address)
Definition comAdptBase.cpp:601
const std::string & GetId() const
Get the ID of the associated device.
Definition comAdptBase.cpp:67
virtual const std::string & GetHostAddress()
Return the address of the host (network interface) used for communicating with the device.
Definition comAdptBase.cpp:1080
uint64_t GetLostFramesCount() const
Return the number of lost frames currently registered.
Definition comAdptBase.cpp:1165
void CheckStatus(ifw::ccf::HwStatus &status, std::string &message)
Check the status of the device (health status).
Definition comAdptBase.cpp:93
void MapParForDevice(ifw::core::utils::param::Parameter &par) const
Definition comAdptBase.cpp:1030
void Write(const std::string &name, const TYPE &value)
Definition comAdptBase.hpp:236
const int8_t GetDeviceResolution() const
Return the resolution of the data elements from the configuration.
Definition comAdptBase.cpp:651
virtual void AdjustExpoTimeFrameRate()
Definition comAdptBase.cpp:842
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:420
virtual void HandleParPreWriteUser(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:671
void HandleParPostWrite(ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:661
void Initialise(const bool re_init=false)
Definition comAdptBase.cpp:104
virtual void StopUser()
Definition comAdptBase.cpp:581
void Start()
Start the image acquisition in the device.
Definition comAdptBase.cpp:438
virtual void WriteUser(const ifw::core::utils::param::Parameter &par)
Definition comAdptBase.cpp:585
TYPE GetDeviceProperty(const std::string &property)
Definition comAdptBase.hpp:99
AcqTrigger & GetAcqTrigger()
Definition comAdptBase.cpp:168
void MapParFromDevice(ifw::core::utils::param::Parameter &par) const
Definition comAdptBase.cpp:1024
virtual void CheckStatusUser(ifw::ccf::HwStatus &status, std::string &message)
Definition comAdptBase.cpp:538
void Disconnect()
Disconnect from the device.
Definition comAdptBase.cpp:302
void Connect()
Definition comAdptBase.cpp:182
void WriteDefaultSetup()
Definition comAdptBase.cpp:258
virtual bool IsConnectedUser() const
Definition comAdptBase.cpp:50
virtual void CheckConnectionUser(bool &connected)
Definition comAdptBase.cpp:534
uint64_t GetFrameCounter() const
Return the internal frame counter.
Definition comAdptBase.cpp:1180
void HandleSetup()
Definition comAdptBase.cpp:683
virtual void DisconnectUser()
Definition comAdptBase.cpp:547
virtual void SetAcqTriggerUser()
Specific implementation of the algorithm to trigger an acquisition.
Definition comAdptBase.cpp:320
void SetIsConnected(const bool connected)
Definition comAdptBase.cpp:413
Frame class used to store the data and metadata for one frames received from the camera.
Definition dataFrame.hpp:20
Implements a name mapping service, based on a Name Mapping File to be loaded and installed.
Definition nameMapping.hpp:26
Definition appBase.cpp:10
TriggerType
Definition comAdptBase.hpp:21
@ NOT_USED
Definition comAdptBase.hpp:25
@ ABS_TIME
Definition comAdptBase.hpp:23
@ CUSTOM
Definition comAdptBase.hpp:24
@ SIGNAL
Definition comAdptBase.hpp:22
std::string GetHostAddress()
log4cplus::Logger & Logger()
Definition base.cpp:24
HwStatus
HW status values.
Definition base.hpp:152