ifw-ccf  3.0.0-pre2
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 
27  public:
29  // Constants
32  // @{
33  const double CONNECT_TIMEOUT = 10.0;
34  const double FRAME_REC_THR_SLEEP_TIME = 0.0005;
35  const uint16_t MAX_NB_OF_RECEP_BUFFERS = 100;
36  const uint16_t NB_OF_INPUT_BUFFERS = 5;
37  const int32_t DEFAULT_PACKET_SIZE = 1500;
38  const uint32_t STREAM_BYTES_PER_SECOND_MIN = 1000000;
39  const uint32_t STREAM_BYTES_PER_SECOND_MAX = 248000000; // 12400000;
40  // @}
41 
43  // GigE Vision com. parameter names
46  // @{
47  const std::string GIGE_PAR_ACQUISITION_ABORT = "AcquisitionAbort";
48  const std::string GIGE_PAR_ACQUISITION_MODE = "AcquisitionMode";
49  const std::string GIGE_PAR_ACQUISITION_START = "AcquisitionStart";
50  const std::string GIGE_PAR_ACQUISITION_STOP = "AcquisitionStop";
51  const std::string GIGE_PAR_DEVICE_VENDOR_NAME = "DeviceVendorName";
52  const std::string GIGE_PAR_PACKET_SIZE = "PacketSize";
53  const std::string GIGE_PAR_PAYLOAD_SIZE = "PayloadSize";
54  const std::string GIGE_PAR_PIXELFORMAT = "PixelFormat";
55  const std::string GIGE_PAR_SENSOR_BITS = "SensorBits";
56  const std::string GIGE_PAR_SENSOR_HEIGHT = "SensorHeight";
57  const std::string GIGE_PAR_SENSOR_TYPE = "SensorType";
58  const std::string GIGE_PAR_SENSOR_WIDTH = "SensorWidth";
59  const std::string GIGE_PAR_STREAM_BYTES_PER_SECOND = "StreamBytesPerSecond";
60  const std::string GIGE_PAR_TIMESTAMP_TICK_FREQ = "TimestampTickFreq";
61  const std::string GIGE_PAR_FRAME_TRIGGER_MODE = "FrameStartTriggerMode";
62  const std::string GIGE_PAR_TRIGGER_MODE = "TriggerMode";
63  const std::string GIGE_PAR_TRIGGER_SOURCE = "TriggerSource";
64  // @}
66 
68  // Status code lookup
70  const std::map<int, std::string> ARV_BUFFER_STATUS_STRING =
71  {
72  {ARV_BUFFER_STATUS_UNKNOWN, "Unknown error"},
73  {ARV_BUFFER_STATUS_SUCCESS, "Success"},
74  {ARV_BUFFER_STATUS_CLEARED, "Buffer cleared"},
75  {ARV_BUFFER_STATUS_TIMEOUT, "Timeout"},
76  {ARV_BUFFER_STATUS_MISSING_PACKETS, "Missing packets"},
77  {ARV_BUFFER_STATUS_WRONG_PACKET_ID, "Wrong packet ID"},
78  {ARV_BUFFER_STATUS_SIZE_MISMATCH, "Size mismatch"},
79  {ARV_BUFFER_STATUS_FILLING, "Buffer filling"},
80  {ARV_BUFFER_STATUS_ABORTED, "Aborted"}
81  };
83 
84  ComAdptAravis();
85  virtual ~ComAdptAravis();
86 
87  virtual void InitialiseUser();
88 
89  virtual void CheckConnectionUser(bool& connected);
90 
91  virtual void CheckStatusUser(ccf::HwStatus& status,
92  std::string& message);
93  virtual void ConnectUser();
94 
95  virtual void DisconnectUser();
96 
97  virtual bool IsConnectedUser() const;
98 
99  virtual void ReadUser(const std::string& name,
100  core::utils::param::Parameter& par);
101 
102  virtual void ReceiveUser(ccf::common::DataFrame& frame,
103  bool& frame_received,
104  const double timeout,
105  bool& timed_out);
106 
107  virtual void ScanUser(std::vector<core::utils::param::Parameter>& pars);
108 
109  virtual void StartUser();
110 
111  virtual void StopUser();
112 
113  virtual void WriteUser(const core::utils::param::Parameter& par);
114 
115  virtual double GetTheoreticFrameRateUser();
116 
117  virtual void _AdjustStreamBytesPerSecHook();
118 
119  virtual int8_t _ReadBasicParsHook();
120 
121  // TODO: Check if support via aravisComAdpt::HandleParsPreWrite()
122  virtual int8_t _WriteParHook(core::utils::param::Parameter& par,
123  bool& ignore_unknown);
124 
125  // Public member variables to allow FrameReceptionThread to access them.
127  bool p_exec_fr_acq_thr; // p_acq_thr_running;
130  ArvDevice* p_device;
131  ArvFrame p_frame_buffers[100]; // TODO: Allocate from cfg?
133  uint32_t p_frame_count;
136  int32_t p_payload_size;
137  std::map<ArvBufferStatus, std::string> p_status_map;
138  ArvStream* p_stream;
142  std::thread* p_fr_acq_thr;
143  struct sched_param p_fr_acq_thr_sched_par;
144 
145  bool GetAcqThrExecFlag();
146 
147  protected:
148  virtual void _Reset();
149  virtual void _ClearCamHandle();
150 
152 
153  // Current setup installed.
154  //std::map<std::string, core::utils::param::Parameter> m_setup;
159 
160  std::map<std::string, ArvAttributeInfo> m_attributes;
161 
162  virtual void _Write(core::utils::param::Parameter& par);
163 
164  virtual void _StartAcq();
165  virtual void _StartAcqThr();
166  virtual void _PauseAcqThr();
167  virtual void _GetIntEnumValue(const std::string& name,
168  core::utils::param::Parameter& par);
169 
170  private:
171  void _GetCameraAttributesList(ArvGc* gen_i_cam);
172  void _GetFlags(ArvGc* gen_i_cam, const std::string& name);
173  void _GetNode(const std::string& name, ArvGc* gen_i_cam, ArvGcNode** node);
174  int16_t _MonoPixelFormatToBits(std::string par_value);
175  int16_t _MonoPixelFormatToBits(core::utils::param::Parameter& par);
176  bool _PackedPixelFormat(ArvPixelFormat pixel_format);
177 
178  std::map<ccf::protocols::aravis::ArvDatatype, std::vector<std::string>> m_data_type_map;
179 
180  double m_delay_start_after_stop;
181  double m_last_frame_recv;
182  gulong m_sig_handler_id;
183  uint32_t m_stream_bytes_max;
184  double m_time_last_stop;
185  std::string m_host_address;
186  };
187 
188  }
189 
190  #endif // CCF_PROTOCOLS_ARAVIS_LIB_COM_ADPT_HPP_H_
Class to be used as parent for CCF Communication Adapters.
Definition: comAdptBase.hpp:31
Frame class used to store the data and metadata for one frames received from the camera.
Definition: dataFrame.hpp:17
CCF Com. Int. implementing communication based on the Aravis open-source glib/gobject-based library f...
Definition: comAdptAravis.hpp:26
bool p_ignore_lost_frames
Definition: comAdptAravis.hpp:134
const std::map< int, std::string > ARV_BUFFER_STATUS_STRING
Definition: comAdptAravis.hpp:70
virtual void _Write(core::utils::param::Parameter &par)
Definition: comAdptAravis.cpp:674
ArvStream * p_stream
Definition: comAdptAravis.hpp:138
std::thread * p_fr_acq_thr
Definition: comAdptAravis.hpp:142
virtual bool IsConnectedUser() const
Definition: comAdptAravis.cpp:195
const std::string GIGE_PAR_SENSOR_BITS
Definition: comAdptAravis.hpp:55
virtual void DisconnectUser()
Definition: comAdptAravis.cpp:329
const std::string GIGE_PAR_SENSOR_WIDTH
Definition: comAdptAravis.hpp:58
const std::string GIGE_PAR_SENSOR_TYPE
Definition: comAdptAravis.hpp:57
int m_setup_expo_bin_x
Definition: comAdptAravis.hpp:157
std::map< std::string, ArvAttributeInfo > m_attributes
Definition: comAdptAravis.hpp:160
const std::string GIGE_PAR_FRAME_TRIGGER_MODE
Definition: comAdptAravis.hpp:61
virtual void _PauseAcqThr()
Definition: comAdptAravis.cpp:1003
const std::string GIGE_PAR_ACQUISITION_START
Definition: comAdptAravis.hpp:49
const std::string GIGE_PAR_ACQUISITION_STOP
Definition: comAdptAravis.hpp:50
virtual void ScanUser(std::vector< core::utils::param::Parameter > &pars)
Definition: comAdptAravis.cpp:579
int32_t p_cur_buffer_index
Definition: comAdptAravis.hpp:129
const uint32_t STREAM_BYTES_PER_SECOND_MAX
Definition: comAdptAravis.hpp:39
bool GetAcqThrExecFlag()
Definition: comAdptAravis.cpp:1015
const std::string GIGE_PAR_PIXELFORMAT
Definition: comAdptAravis.hpp:54
ComAdptAravis()
Definition: comAdptAravis.cpp:28
const std::string GIGE_PAR_PAYLOAD_SIZE
Definition: comAdptAravis.hpp:53
uint32_t p_frame_count
Definition: comAdptAravis.hpp:133
const std::string GIGE_PAR_TRIGGER_MODE
Definition: comAdptAravis.hpp:62
bool p_term_fr_acq_thr
Definition: comAdptAravis.hpp:128
ccf::ExpoMode p_expo_mode
Definition: comAdptAravis.hpp:126
const std::string GIGE_PAR_TRIGGER_SOURCE
Definition: comAdptAravis.hpp:63
const std::string GIGE_PAR_ACQUISITION_ABORT
Definition: comAdptAravis.hpp:47
virtual void _StartAcqThr()
Definition: comAdptAravis.cpp:991
const std::string GIGE_PAR_PACKET_SIZE
Definition: comAdptAravis.hpp:52
virtual void StartUser()
Definition: comAdptAravis.cpp:615
struct sched_param p_fr_acq_thr_sched_par
Definition: comAdptAravis.hpp:143
virtual void _ClearCamHandle()
Definition: comAdptAravis.cpp:666
const std::string GIGE_PAR_ACQUISITION_MODE
Definition: comAdptAravis.hpp:48
const std::string GIGE_PAR_DEVICE_VENDOR_NAME
Definition: comAdptAravis.hpp:51
const uint16_t NB_OF_INPUT_BUFFERS
Definition: comAdptAravis.hpp:36
virtual void _Reset()
Definition: comAdptAravis.cpp:126
int32_t p_payload_size
Definition: comAdptAravis.hpp:136
const std::string GIGE_PAR_SENSOR_HEIGHT
Definition: comAdptAravis.hpp:56
const std::string GIGE_PAR_TIMESTAMP_TICK_FREQ
Definition: comAdptAravis.hpp:60
virtual void CheckStatusUser(ccf::HwStatus &status, std::string &message)
Definition: comAdptAravis.cpp:179
bool p_waiting_for_frame
Definition: comAdptAravis.hpp:140
const double CONNECT_TIMEOUT
Definition: comAdptAravis.hpp:33
virtual void CheckConnectionUser(bool &connected)
Definition: comAdptAravis.cpp:148
double p_last_missing_data_log
Definition: comAdptAravis.hpp:135
virtual int8_t _ReadBasicParsHook()
Definition: hooks.cpp:54
ArvDevice * p_device
Definition: comAdptAravis.hpp:130
const std::string GIGE_PAR_STREAM_BYTES_PER_SECOND
Definition: comAdptAravis.hpp:59
virtual void _AdjustStreamBytesPerSecHook()
Definition: hooks.cpp:14
const int32_t DEFAULT_PACKET_SIZE
Definition: comAdptAravis.hpp:37
virtual double GetTheoreticFrameRateUser()
Definition: comAdptAravis.cpp:1200
std::map< ArvBufferStatus, std::string > p_status_map
Definition: comAdptAravis.hpp:137
int m_setup_expo_bin_y
Definition: comAdptAravis.hpp:158
double m_setup_expo_time
Definition: comAdptAravis.hpp:155
virtual void InitialiseUser()
Definition: comAdptAravis.cpp:90
virtual void ReadUser(const std::string &name, core::utils::param::Parameter &par)
Definition: comAdptAravis.cpp:359
virtual int8_t _WriteParHook(core::utils::param::Parameter &par, bool &ignore_unknown)
Definition: hooks.cpp:68
const double FRAME_REC_THR_SLEEP_TIME
Definition: comAdptAravis.hpp:34
double m_stat_expo_time
Definition: comAdptAravis.hpp:156
virtual void ConnectUser()
Definition: comAdptAravis.cpp:211
const uint32_t STREAM_BYTES_PER_SECOND_MIN
Definition: comAdptAravis.hpp:38
int32_t p_acq_thr_buf_index
Definition: comAdptAravis.hpp:139
bool p_frame_buffers_in_use[100]
Definition: comAdptAravis.hpp:132
virtual void WriteUser(const core::utils::param::Parameter &par)
Definition: comAdptAravis.cpp:890
ArvFrame p_frame_buffers[100]
Definition: comAdptAravis.hpp:131
bool p_exec_fr_acq_thr
Definition: comAdptAravis.hpp:127
double p_timestamp_frequency
Definition: comAdptAravis.hpp:141
virtual void ReceiveUser(ccf::common::DataFrame &frame, bool &frame_received, const double timeout, bool &timed_out)
Definition: comAdptAravis.cpp:437
int32_t m_bytes_per_pixel
Definition: comAdptAravis.hpp:151
virtual void _StartAcq()
Definition: comAdptAravis.cpp:592
virtual void _GetIntEnumValue(const std::string &name, core::utils::param::Parameter &par)
Definition: comAdptAravis.cpp:340
virtual ~ComAdptAravis()
Definition: comAdptAravis.cpp:111
const uint16_t MAX_NB_OF_RECEP_BUFFERS
Definition: comAdptAravis.hpp:35
virtual void StopUser()
Definition: comAdptAravis.cpp:652
Definition: comAdptAravis.cpp:26
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
HwStatus
HW status values.
Definition: base.hpp:195
ExpoMode
Exposure modes.
Definition: base.hpp:299
Image in which to store frames received.
Definition: defines.hpp:38