camcom 1.0.0-pre2
 
Loading...
Searching...
No Matches
adapterBase.hpp
Go to the documentation of this file.
1
8
9#ifndef CAMCOM_COMMON_ADAPTERBASE_HPP
10#define CAMCOM_COMMON_ADAPTERBASE_HPP
11
12#include <string>
13#include <vector>
14#include <span>
15#include <cmath>
16#include <chrono>
17#include <map>
18#include <optional>
19
25
26namespace camcom::common {
27
36
42 std::optional<int64_t> remaining_frames;
43 double current_fps{0.0};
44 };
45
50 std::string content;
51 std::string extension;
52 bool available() const { return !content.empty(); }
53 };
54
63 struct CheckResult {
64 bool ok{false};
65 std::vector<std::string> diagnostics;
66 };
67
68 // Abstract class for CamCom Communication Adapters.
70 public:
72 virtual ~AdapterBase();
73
74 // Connection management.
75 //
76 // Connect opens the link to the device and returns the initial
77 // parameter set read from it (camera-native names). Throws on
78 // failure (timeout, no device, bad credentials, ...).
79 virtual std::map<std::string, Parameter> Connect() = 0;
80 virtual void Disconnect() = 0;
81 virtual CheckResult CheckConnection() const = 0;
82
83 // Adapters own their own connection-state flag (typically inside
84 // their pimpl `Impl`) and report it here. Pure virtual so there
85 // is exactly ONE source of truth per adapter — no dual flags to
86 // keep in sync, no risk of drift between base and impl.
87 virtual bool IsConnected() const = 0;
88
93 virtual std::string GetProtocol() const = 0;
94
100 virtual BasicParams GetBasicParams() const = 0;
101
102 // The address and timeout are mandatory parameters; any other required properties should
103 // be included via the receiveCfg argument.
104 virtual void Initialise(const ReceiveCfg& cfg);
105
106 // Resolve a device address to an IP for transports that cannot do DNS
107 // themselves (e.g. Aravis). Precedence: a literal IP is returned
108 // unchanged; otherwise the address is resolved via DNS (IPv4 preferred,
109 // then IPv6) and the resolved IP returned. If `allow_device_id` is true,
110 // a non-IP that does not resolve is returned unchanged (so a GenICam
111 // device id passes through to the SDK); if false, a non-IP that does not
112 // resolve throws. An empty address is returned unchanged (auto-discovery).
113 static std::string ResolveAddress(const std::string& address,
114 bool allow_device_id = false);
115
116 // Method to receive a frame.
117 virtual void ReceiveFrame(bool& received_frame,
118 uint64_t max_size,
119 std::span<uint8_t>& data,
120 FrameInfo& frame_info) = 0;
121
128 virtual Parameter Read(const std::string& name) = 0;
129
136 virtual std::vector<Parameter> Read(const std::vector<std::string>& names) = 0;
137
143 virtual void Write(const Parameter& parameter) = 0;
144
150 virtual void Write(const std::vector<Parameter>& parameters) = 0;
151
158 virtual std::vector<Parameter> Scan() = 0;
159
166 virtual NativeDocument GetNativeParameterDocument() const { return {}; }
167
168 // Acquisition control
169
175
182 virtual void StartAcquisition(std::optional<int64_t> frame_count = std::nullopt) = 0;
183
187 virtual void StopAcquisition() = 0;
188
193 void SetAddress(const std::string& address) { m_cam_address = address; }
194
199 void SetTimeout(double timeout_seconds) {
200 m_timeout = std::chrono::duration<double_t>(timeout_seconds);
201 }
202
203 protected:
204 const std::chrono::duration<double_t> m_connect_timeout{std::chrono::seconds(10)};
205
206 std::string m_cam_address;
207 std::chrono::duration<double_t> m_timeout;
208 bool m_initialised{false};
209 std::chrono::time_point<std::chrono::system_clock>
213 };
214
215} // namespace camcom::common
216
217#endif
Header file for the CamCom Common Library.
virtual std::vector< Parameter > Read(const std::vector< std::string > &names)=0
Read multiple parameters from the camera.
virtual void Disconnect()=0
std::chrono::duration< double_t > m_timeout
Definition adapterBase.hpp:207
virtual NativeDocument GetNativeParameterDocument() const
Get native parameter document from camera (protocol-specific) For GenICam cameras,...
Definition adapterBase.hpp:166
std::string m_cam_address
Definition adapterBase.hpp:206
virtual CheckResult CheckConnection() const =0
virtual ~AdapterBase()
Definition adapterBase.cpp:58
virtual Parameter Read(const std::string &name)=0
Read a single parameter from the camera.
virtual AcquisitionState GetAcquisitionState() const =0
Get the current acquisition state.
virtual std::string GetProtocol() const =0
Get the protocol name used by this adapter.
bool m_initialised
Definition adapterBase.hpp:208
const std::chrono::duration< double_t > m_connect_timeout
Definition adapterBase.hpp:204
std::chrono::time_point< std::chrono::system_clock > m_time_last_frame_recv
Definition adapterBase.hpp:211
virtual void ReceiveFrame(bool &received_frame, uint64_t max_size, std::span< uint8_t > &data, FrameInfo &frame_info)=0
AdapterBase()
Definition adapterBase.cpp:56
virtual void Initialise(const ReceiveCfg &cfg)
Definition adapterBase.cpp:87
bool m_waiting_for_frame
Definition adapterBase.hpp:212
virtual void Write(const Parameter &parameter)=0
Write a single parameter to the camera.
virtual std::map< std::string, Parameter > Connect()=0
static std::string ResolveAddress(const std::string &address, bool allow_device_id=false)
Definition adapterBase.cpp:60
virtual void Write(const std::vector< Parameter > &parameters)=0
Write multiple parameters to the camera.
virtual bool IsConnected() const =0
void SetTimeout(double timeout_seconds)
Set the connection timeout.
Definition adapterBase.hpp:199
std::chrono::time_point< std::chrono::system_clock > m_time_last_stop
Definition adapterBase.hpp:210
void SetAddress(const std::string &address)
Set the camera address/URI for connection.
Definition adapterBase.hpp:193
virtual std::vector< Parameter > Scan()=0
Scan all available parameters from the camera Re-scans the device parameter space,...
virtual void StartAcquisition(std::optional< int64_t > frame_count=std::nullopt)=0
Start frame acquisition.
virtual BasicParams GetBasicParams() const =0
Get basic camera parameters in standardized units. Adapters read their native parameters and convert ...
virtual void StopAcquisition()=0
Stop frame acquisition.
Definition frameInfo.hpp:23
Definition parameter.hpp:24
Definition receiveCfg.hpp:22
Header file for the CamCom Common Library.
Definition adapterBase.cpp:18
AcqMode
Acquisition mode states.
Definition adapterBase.hpp:31
@ Inactive
No acquisition in progress.
Definition adapterBase.hpp:32
@ Finite
Finite acquisition (specific frame count)
Definition adapterBase.hpp:34
@ Continuous
Continuous acquisition (no frame limit)
Definition adapterBase.hpp:33
std::chrono::time_point< std::chrono::system_clock > TimeNow()
Definition tools.cpp:19
Header file for the CamCom Common Library.
Header file for the CamCom Common Library.
Current acquisition state information.
Definition adapterBase.hpp:40
AcqMode mode
Definition adapterBase.hpp:41
std::optional< int64_t > remaining_frames
Set only if mode == Finite.
Definition adapterBase.hpp:42
double current_fps
Measured frame rate, 0 if unknown.
Definition adapterBase.hpp:43
Standardized basic camera parameters in common units.
Definition basicParams.hpp:38
Connection health check result.
Definition adapterBase.hpp:63
bool ok
Definition adapterBase.hpp:64
std::vector< std::string > diagnostics
Definition adapterBase.hpp:65
Native parameter document from camera (protocol-specific)
Definition adapterBase.hpp:49
std::string content
Document content (e.g., GenICam XML)
Definition adapterBase.hpp:50
std::string extension
File extension including dot (e.g., ".xml")
Definition adapterBase.hpp:51
bool available() const
Definition adapterBase.hpp:52
Header file for the CamCom Common Library Tools.