ifw-ccf  1.0.0
comAdptAravis.hpp
Go to the documentation of this file.
1 
5 #ifndef CCF_PROTOCOLS_ARAVIS_LIB_COM_ADPT_HPP_H_
6 #define CCF_PROTOCOLS_ARAVIS_LIB_COM_ADPT_HPP_H_
7 
8 #include <stdint.h>
9 #include <vector>
10 
13 
16 
17 namespace ccf::protocols::aravis {
18 
20  void FrameReceptionThread(void* com_adapter);
21 
26  public:
28  // Constants
31  // @{
32  const double CONNECT_TIMEOUT = 10.0;
33  const double FRAME_REC_THR_SLEEP_TIME = 0.0005;
34  const uint16_t MAX_NB_OF_RECEP_BUFFERS = 100;
35  const uint16_t NB_OF_INPUT_BUFFERS = 5;
36  const int32_t DEFAULT_PACKET_SIZE = 1500;
37  const uint32_t STREAM_BYTES_PER_SECOND_MIN = 1000000;
38  const uint32_t STREAM_BYTES_PER_SECOND_MAX = 248000000; // 12400000;
39  // @}
40 
42  // GigE Vision com. parameter names
45  // @{
46  const std::string GIGE_PAR_ACQUISITION_ABORT = "AcquisitionAbort";
47  const std::string GIGE_PAR_ACQUISITION_MODE = "AcquisitionMode";
48  const std::string GIGE_PAR_ACQUISITION_START = "AcquisitionStart";
49  const std::string GIGE_PAR_ACQUISITION_STOP = "AcquisitionStop";
50  const std::string GIGE_PAR_DEVICE_VENDOR_NAME = "DeviceVendorName";
51  const std::string GIGE_PAR_PACKET_SIZE = "PacketSize";
52  const std::string GIGE_PAR_PAYLOAD_SIZE = "PayloadSize";
53  const std::string GIGE_PAR_PIXELFORMAT = "PixelFormat";
54  const std::string GIGE_PAR_SENSOR_BITS = "SensorBits";
55  const std::string GIGE_PAR_SENSOR_HEIGHT = "SensorHeight";
56  const std::string GIGE_PAR_SENSOR_TYPE = "SensorType";
57  const std::string GIGE_PAR_SENSOR_WIDTH = "SensorWidth";
58  const std::string GIGE_PAR_STREAM_BYTES_PER_SECOND = "StreamBytesPerSecond";
59  const std::string GIGE_PAR_TIMESTAMP_TICK_FREQ = "TimestampTickFreq";
60  const std::string GIGE_PAR_FRAME_TRIGGER_MODE = "FrameStartTriggerMode";
61  const std::string GIGE_PAR_TRIGGER_MODE = "TriggerMode";
62  const std::string GIGE_PAR_TRIGGER_SOURCE = "TriggerSource";
63  // @}
65 
67  // Status code lookup
69  const std::map<int, std::string> ARV_BUFFER_STATUS_STRING =
70  {
71  {ARV_BUFFER_STATUS_UNKNOWN, "Unknown error"},
72  {ARV_BUFFER_STATUS_SUCCESS, "Success"},
73  {ARV_BUFFER_STATUS_CLEARED, "Buffer cleared"},
74  {ARV_BUFFER_STATUS_TIMEOUT, "Timeout"},
75  {ARV_BUFFER_STATUS_MISSING_PACKETS, "Missing packets"},
76  {ARV_BUFFER_STATUS_WRONG_PACKET_ID, "Wrong packet ID"},
77  {ARV_BUFFER_STATUS_SIZE_MISMATCH, "Size mismatch"},
78  {ARV_BUFFER_STATUS_FILLING, "Buffer filling"},
79  {ARV_BUFFER_STATUS_ABORTED, "Aborted"}
80  };
82 
83  ComAdptAravis();
84  virtual ~ComAdptAravis();
85 
86  virtual void InitialiseUser();
87 
88  virtual void CheckConnectionUser(bool& connected);
89 
90  virtual void CheckStatusUser(ccf::common::HwStatus& status,
91  std::string& message);
92  virtual void ConnectUser();
93 
94  virtual void DisconnectUser();
95 
96  virtual bool IsConnectedUser() const;
97 
98  virtual void ReadUser(const std::string& name,
99  ctd::param::Parameter& par);
100 
101  virtual void ReceiveUser(ccf::common::DataFrame& frame,
102  bool& frame_received,
103  const double timeout,
104  bool& timed_out);
105 
106  virtual void ScanUser(std::vector<ctd::param::Parameter>& pars);
107 
108  virtual void StartUser();
109 
110  virtual void StopUser();
111 
112  virtual void WriteUser(const ctd::param::Parameter& par);
113 
114  virtual double GetTheoreticFrameRateUser();
115 
116  virtual void _AdjustStreamBytesPerSecHook();
117 
118  virtual int8_t _ReadBasicParsHook();
119 
120  // TODO: Check if support via aravisComAdpt::HandleParsPreWrite()
121  virtual int8_t _WriteParHook(ctd::param::Parameter& par,
122  bool& ignore_unknown);
123 
124  // Public member variables to allow FrameReceptionThread to access them.
126  bool p_exec_fr_acq_thr; // p_acq_thr_running;
129  ArvDevice* p_device;
130  ArvFrame p_frame_buffers[100]; // TODO: Allocate from cfg?
132  uint32_t p_frame_count;
135  int32_t p_payload_size;
136  std::map<ArvBufferStatus, std::string> p_status_map;
137  ArvStream* p_stream;
141  std::thread* p_fr_acq_thr;
142  struct sched_param p_fr_acq_thr_sched_par;
143 
144  bool GetAcqThrExecFlag();
145 
146  protected:
147  void _Reset();
148  void _ClearCamHandle();
149 
150  std::string m_vendor; // TODO: Check if needed.
152  int32_t m_sensor_height; // TODO: Check if needed.
153  int32_t m_sensor_width; // TODO: Check if needed.
154 
155  // TODO: These parameters ("m_cur_expo*") should maybe be removed and this information based on the values from the camera.
164 
165  private:
166  virtual void _Write(ctd::param::Parameter& par);
167  void _UpdateObjectParStatus(const ctd::param::Parameter& par);
168  void _GetCameraAttributesList(ArvGc* gen_i_cam);
169  void _GetFlags(ArvGc* gen_i_cam, const std::string& name);
170  void _GetNode(const std::string& name, ArvGc* gen_i_cam, ArvGcNode** node);
171  int16_t _MonoPixelFormatToBits(std::string par_value);
172  int16_t _MonoPixelFormatToBits(ctd::param::Parameter& par);
173  bool _PackedPixelFormat(ArvPixelFormat pixel_format);
174  void _StartAcq();
175  void _StartAcqThr();
176  void _PauseAcqThr();
177  void _GetIntEnumValue(const std::string& name,
178  ctd::param::Parameter& par);
179 
180  std::map<std::string, ArvAttributeInfo> m_attributes;
181  std::map<ccf::protocols::aravis::ArvDatatype, std::vector<std::string>> m_data_type_map;
182 
183  double m_delay_start_after_stop;
184  double m_last_frame_recv;
185  gulong m_sig_handler_id;
186  uint32_t m_stream_bytes_max;
187  double m_time_last_stop;
188  std::string m_host_address;
189  };
190 
191  }
192 
193  #endif // CCF_PROTOCOLS_ARAVIS_LIB_COM_ADPT_HPP_H_
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_ACQUISITION_STOP
const std::string GIGE_PAR_ACQUISITION_STOP
Definition: comAdptAravis.hpp:49
ccf::protocols::aravis::ComAdptAravis::InitialiseUser
virtual void InitialiseUser()
Definition: comAdptAravis.cpp:92
ccf::protocols::aravis::ComAdptAravis::CheckStatusUser
virtual void CheckStatusUser(ccf::common::HwStatus &status, std::string &message)
Definition: comAdptAravis.cpp:187
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_win_start_x
int32_t m_cur_expo_win_start_x
Definition: comAdptAravis.hpp:160
ccf::protocols::aravis::ComAdptAravis::_AdjustStreamBytesPerSecHook
virtual void _AdjustStreamBytesPerSecHook()
Definition: hooks.cpp:14
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_frame_rate
double m_cur_expo_frame_rate
Definition: comAdptAravis.hpp:157
ccf::protocols::aravis
Definition: comAdptAravis.cpp:26
ccf::protocols::aravis::ComAdptAravis
CCF Com. Int. implementing communication based on the Aravis open-source glib/gobject-based library f...
Definition: comAdptAravis.hpp:25
ccf::protocols::aravis::ComAdptAravis::_WriteParHook
virtual int8_t _WriteParHook(ctd::param::Parameter &par, bool &ignore_unknown)
Definition: hooks.cpp:59
ccf::protocols::aravis::ComAdptAravis::p_timestamp_frequency
double p_timestamp_frequency
Definition: comAdptAravis.hpp:140
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_bin_y
int32_t m_cur_expo_bin_y
Definition: comAdptAravis.hpp:159
ccf::protocols::aravis::ComAdptAravis::StopUser
virtual void StopUser()
Definition: comAdptAravis.cpp:646
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_bin_x
int32_t m_cur_expo_bin_x
Definition: comAdptAravis.hpp:158
ccf::protocols::aravis::ComAdptAravis::CheckConnectionUser
virtual void CheckConnectionUser(bool &connected)
Definition: comAdptAravis.cpp:157
ccf::protocols::aravis::ComAdptAravis::IsConnectedUser
virtual bool IsConnectedUser() const
Definition: comAdptAravis.cpp:203
ccf::common::ExpoMode
ExpoMode
Exposure modes.
Definition: base.hpp:201
ccf::protocols::aravis::ComAdptAravis::p_frame_buffers
ArvFrame p_frame_buffers[100]
Definition: comAdptAravis.hpp:130
ccf::protocols::aravis::ComAdptAravis::ReceiveUser
virtual void ReceiveUser(ccf::common::DataFrame &frame, bool &frame_received, const double timeout, bool &timed_out)
Definition: comAdptAravis.cpp:439
ccf::protocols::aravis::ComAdptAravis::m_bytes_per_pixel
int32_t m_bytes_per_pixel
Definition: comAdptAravis.hpp:151
ccf::protocols::aravis::ComAdptAravis::p_term_fr_acq_thr
bool p_term_fr_acq_thr
Definition: comAdptAravis.hpp:127
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_STREAM_BYTES_PER_SECOND
const std::string GIGE_PAR_STREAM_BYTES_PER_SECOND
Definition: comAdptAravis.hpp:58
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_TIMESTAMP_TICK_FREQ
const std::string GIGE_PAR_TIMESTAMP_TICK_FREQ
Definition: comAdptAravis.hpp:59
ccf::protocols::aravis::ComAdptAravis::GetTheoreticFrameRateUser
virtual double GetTheoreticFrameRateUser()
Definition: comAdptAravis.cpp:1151
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_time
double m_cur_expo_time
Definition: comAdptAravis.hpp:156
ccf::protocols::aravis::ComAdptAravis::CONNECT_TIMEOUT
const double CONNECT_TIMEOUT
Definition: comAdptAravis.hpp:32
ccf::protocols::aravis::ComAdptAravis::GetAcqThrExecFlag
bool GetAcqThrExecFlag()
Definition: comAdptAravis.cpp:977
enumWrapper.hpp
ccf::protocols::aravis::ComAdptAravis::p_waiting_for_frame
bool p_waiting_for_frame
Definition: comAdptAravis.hpp:139
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_SENSOR_WIDTH
const std::string GIGE_PAR_SENSOR_WIDTH
Definition: comAdptAravis.hpp:57
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_TRIGGER_SOURCE
const std::string GIGE_PAR_TRIGGER_SOURCE
Definition: comAdptAravis.hpp:62
ccf::protocols::aravis::ComAdptAravis::m_sensor_height
int32_t m_sensor_height
Definition: comAdptAravis.hpp:152
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_ACQUISITION_START
const std::string GIGE_PAR_ACQUISITION_START
Definition: comAdptAravis.hpp:48
ccf::protocols::aravis::ComAdptAravis::p_device
ArvDevice * p_device
Definition: comAdptAravis.hpp:129
ccf::protocols::aravis::ComAdptAravis::m_vendor
std::string m_vendor
Definition: comAdptAravis.hpp:150
ccf::protocols::aravis::ComAdptAravis::p_frame_count
uint32_t p_frame_count
Definition: comAdptAravis.hpp:132
ccf::protocols::aravis::ArvFrame
Image in which to store frames received.
Definition: defines.hpp:18
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_PIXELFORMAT
const std::string GIGE_PAR_PIXELFORMAT
Definition: comAdptAravis.hpp:53
ccf::protocols::aravis::ComAdptAravis::p_frame_buffers_in_use
bool p_frame_buffers_in_use[100]
Definition: comAdptAravis.hpp:131
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_ACQUISITION_ABORT
const std::string GIGE_PAR_ACQUISITION_ABORT
Definition: comAdptAravis.hpp:46
ccf::protocols::aravis::ComAdptAravis::ReadUser
virtual void ReadUser(const std::string &name, ctd::param::Parameter &par)
Definition: comAdptAravis.cpp:365
defines.hpp
ccf::protocols::aravis::ComAdptAravis::~ComAdptAravis
virtual ~ComAdptAravis()
Definition: comAdptAravis.cpp:120
ccf::protocols::aravis::ComAdptAravis::STREAM_BYTES_PER_SECOND_MAX
const uint32_t STREAM_BYTES_PER_SECOND_MAX
Definition: comAdptAravis.hpp:38
ccf::protocols::aravis::ComAdptAravis::p_acq_thr_buf_index
int32_t p_acq_thr_buf_index
Definition: comAdptAravis.hpp:138
ccf::protocols::aravis::ComAdptAravis::ConnectUser
virtual void ConnectUser()
Definition: comAdptAravis.cpp:219
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_ACQUISITION_MODE
const std::string GIGE_PAR_ACQUISITION_MODE
Definition: comAdptAravis.hpp:47
ccf::protocols::aravis::ComAdptAravis::m_sensor_width
int32_t m_sensor_width
Definition: comAdptAravis.hpp:153
ccf::protocols::aravis::ComAdptAravis::p_ignore_frame_skipping
bool p_ignore_frame_skipping
Definition: comAdptAravis.hpp:133
ccf::protocols::aravis::ComAdptAravis::p_last_missing_data_log
double p_last_missing_data_log
Definition: comAdptAravis.hpp:134
nameMapping.hpp
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_PAYLOAD_SIZE
const std::string GIGE_PAR_PAYLOAD_SIZE
Definition: comAdptAravis.hpp:52
ccf::protocols::aravis::ComAdptAravis::_ClearCamHandle
void _ClearCamHandle()
Definition: comAdptAravis.cpp:660
ccf::protocols::aravis::ComAdptAravis::_Reset
void _Reset()
Definition: comAdptAravis.cpp:135
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_PACKET_SIZE
const std::string GIGE_PAR_PACKET_SIZE
Definition: comAdptAravis.hpp:51
ccf::protocols::aravis::ComAdptAravis::p_stream
ArvStream * p_stream
Definition: comAdptAravis.hpp:137
ccf::protocols::aravis::ComAdptAravis::StartUser
virtual void StartUser()
Definition: comAdptAravis.cpp:609
ccf::protocols::aravis::ComAdptAravis::ScanUser
virtual void ScanUser(std::vector< ctd::param::Parameter > &pars)
Definition: comAdptAravis.cpp:577
comAdptBase.hpp
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_win_height
int32_t m_cur_expo_win_height
Definition: comAdptAravis.hpp:163
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_SENSOR_HEIGHT
const std::string GIGE_PAR_SENSOR_HEIGHT
Definition: comAdptAravis.hpp:55
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_SENSOR_TYPE
const std::string GIGE_PAR_SENSOR_TYPE
Definition: comAdptAravis.hpp:56
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_FRAME_TRIGGER_MODE
const std::string GIGE_PAR_FRAME_TRIGGER_MODE
Definition: comAdptAravis.hpp:60
ccf::protocols::aravis::ComAdptAravis::_ReadBasicParsHook
virtual int8_t _ReadBasicParsHook()
Definition: hooks.cpp:40
ccf::protocols::aravis::ComAdptAravis::STREAM_BYTES_PER_SECOND_MIN
const uint32_t STREAM_BYTES_PER_SECOND_MIN
Definition: comAdptAravis.hpp:37
ccf::protocols::aravis::ComAdptAravis::p_expo_mode
ccf::common::ExpoMode p_expo_mode
Definition: comAdptAravis.hpp:125
ccf::protocols::aravis::ComAdptAravis::DEFAULT_PACKET_SIZE
const int32_t DEFAULT_PACKET_SIZE
Definition: comAdptAravis.hpp:36
ccf::protocols::aravis::ComAdptAravis::p_status_map
std::map< ArvBufferStatus, std::string > p_status_map
Definition: comAdptAravis.hpp:136
ccf::protocols::aravis::ComAdptAravis::p_fr_acq_thr_sched_par
struct sched_param p_fr_acq_thr_sched_par
Definition: comAdptAravis.hpp:142
ccf::protocols::aravis::ComAdptAravis::FRAME_REC_THR_SLEEP_TIME
const double FRAME_REC_THR_SLEEP_TIME
Definition: comAdptAravis.hpp:33
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_win_start_y
int32_t m_cur_expo_win_start_y
Definition: comAdptAravis.hpp:161
ccf::protocols::aravis::ComAdptAravis::p_exec_fr_acq_thr
bool p_exec_fr_acq_thr
Definition: comAdptAravis.hpp:126
ccf::protocols::aravis::ComAdptAravis::DisconnectUser
virtual void DisconnectUser()
Definition: comAdptAravis.cpp:335
ccf::protocols::aravis::ComAdptAravis::MAX_NB_OF_RECEP_BUFFERS
const uint16_t MAX_NB_OF_RECEP_BUFFERS
Definition: comAdptAravis.hpp:34
ccf::protocols::aravis::ComAdptAravis::NB_OF_INPUT_BUFFERS
const uint16_t NB_OF_INPUT_BUFFERS
Definition: comAdptAravis.hpp:35
ccf::protocols::aravis::ComAdptAravis::m_cur_expo_win_width
int32_t m_cur_expo_win_width
Definition: comAdptAravis.hpp:162
ccf::protocols::aravis::ComAdptAravis::p_payload_size
int32_t p_payload_size
Definition: comAdptAravis.hpp:135
ccf::protocols::aravis::ComAdptAravis::ARV_BUFFER_STATUS_STRING
const std::map< int, std::string > ARV_BUFFER_STATUS_STRING
Definition: comAdptAravis.hpp:69
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_SENSOR_BITS
const std::string GIGE_PAR_SENSOR_BITS
Definition: comAdptAravis.hpp:54
ccf::common::DataFrame
Frame class used to store the data and metadata for one frames received from the camera.
Definition: dataFrame.hpp:15
ccf::protocols::aravis::ComAdptAravis::ComAdptAravis
ComAdptAravis()
Definition: comAdptAravis.cpp:28
ccf::common::HwStatus
HwStatus
HW status values.
Definition: base.hpp:132
ccf::protocols::aravis::FrameReceptionThread
void FrameReceptionThread(void *com_adapter)
Thread dedicated to receive the image frames to ensure the minimum possible delay in receiving these.
Definition: frameReceptionThread.cpp:15
ccf::protocols::aravis::ComAdptAravis::p_fr_acq_thr
std::thread * p_fr_acq_thr
Definition: comAdptAravis.hpp:141
ccf::protocols::aravis::ComAdptAravis::p_cur_buffer_index
int32_t p_cur_buffer_index
Definition: comAdptAravis.hpp:128
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_TRIGGER_MODE
const std::string GIGE_PAR_TRIGGER_MODE
Definition: comAdptAravis.hpp:61
ccf::protocols::aravis::ComAdptAravis::GIGE_PAR_DEVICE_VENDOR_NAME
const std::string GIGE_PAR_DEVICE_VENDOR_NAME
Definition: comAdptAravis.hpp:50
ccf::protocols::aravis::ComAdptAravis::WriteUser
virtual void WriteUser(const ctd::param::Parameter &par)
Definition: comAdptAravis.cpp:855
ccf::common::ComAdptBase
Class to be used as parent for CCF Communication Adapters.
Definition: comAdptBase.hpp:31