IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_device.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
10
17#include <peak/dll_interface/peak_dll_interface_util.hpp>
18
19#include <cstddef>
20#include <cstdint>
21#include <memory>
22#include <string>
23#include <vector>
24
25
26namespace peak
27{
28namespace core
29{
30
31class Interface;
32
50class Device
52 , public std::enable_shared_from_this<Device>
53{
54public:
55 Device() = delete;
56 ~Device() override;
57 Device(const Device& other) = delete;
58 Device& operator=(const Device& other) = delete;
59 Device(Device&& other) = delete;
60 Device& operator=(Device&& other) = delete;
61
63 PEAK_COMMON_NO_DISCARD std::string Key() const;
64
66 PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const;
67
69 PEAK_COMMON_NO_DISCARD std::string ID() const;
70
72 PEAK_COMMON_NO_DISCARD std::string DisplayName() const;
73
75 PEAK_COMMON_NO_DISCARD std::string VendorName() const;
76
78 PEAK_COMMON_NO_DISCARD std::string ModelName() const;
79
81 PEAK_COMMON_NO_DISCARD std::string Version() const;
82
84 PEAK_COMMON_NO_DISCARD std::string TLType() const;
85
87 PEAK_COMMON_NO_DISCARD std::string UserDefinedName() const;
88
90 PEAK_COMMON_NO_DISCARD std::string SerialNumber() const;
91
94
97
110 PEAK_COMMON_NO_DISCARD std::shared_ptr<class RemoteDevice> RemoteDevice() const;
111
121 PEAK_COMMON_NO_DISCARD std::vector<std::shared_ptr<DataStreamDescriptor>> DataStreams() const;
122
124 PEAK_COMMON_NO_DISCARD std::shared_ptr<Interface> ParentInterface() const;
125
136 {
137 return m_backendHandle;
138 }
139
140private:
141 PEAK_MODULE_HANDLE ModuleHandle() const override;
143
144 friend ClassCreator<Device>;
145 Device(PEAK_DEVICE_HANDLE deviceHandle, const std::weak_ptr<Interface>& parentInterface);
146 PEAK_DEVICE_HANDLE m_backendHandle;
147
148 std::weak_ptr<Interface> m_parentInterface;
149
150 void Initialize() const override;
151 mutable std::vector<std::shared_ptr<DataStreamDescriptor>> m_dataStreams;
152 mutable std::shared_ptr<class RemoteDevice> m_remoteDevice;
153
154 std::string m_key;
155};
156
157} /* namespace core */
158} /* namespace peak */
159
160/* Implementation */
161namespace peak
162{
163namespace core
164{
165
166inline Device::Device(PEAK_DEVICE_HANDLE deviceHandle, const std::weak_ptr<Interface>& parentInterface)
167 : m_backendHandle(deviceHandle)
168 , m_parentInterface(parentInterface)
169 , m_key(QueryStringFromCInterfaceFunction([&](char* key, size_t* keySize) {
170 return PEAK_C_ABI_PREFIX PEAK_Device_GetKey(deviceHandle, key, keySize);
171 }))
172{}
173
175{
176 (void)PEAK_C_ABI_PREFIX PEAK_Device_Destruct(m_backendHandle);
177}
178
179inline std::string Device::Key() const
180{
181 return m_key;
182}
183
184inline RawInformation Device::Info(int32_t infoCommand) const
185{
186 return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
187 return PEAK_C_ABI_PREFIX PEAK_Device_GetInfo(m_backendHandle, infoCommand, dataType, buffer, bufferSize);
188 });
189}
190
191inline std::string Device::ID() const
192{
193 return QueryStringFromCInterfaceFunction([&](char* id, size_t* idSize) {
194 return PEAK_C_ABI_PREFIX PEAK_Device_GetID(m_backendHandle, id, idSize);
195 });
196}
197
198inline std::string Device::DisplayName() const
199{
200 return QueryStringFromCInterfaceFunction([&](char* displayName, size_t* displayNameSize) {
201 return PEAK_C_ABI_PREFIX PEAK_Device_GetDisplayName(m_backendHandle, displayName, displayNameSize);
202 });
203}
204
205inline std::string Device::VendorName() const
206{
207 return QueryStringFromCInterfaceFunction([&](char* vendorName, size_t* vendorNameSize) {
208 return PEAK_C_ABI_PREFIX PEAK_Device_GetVendorName(m_backendHandle, vendorName, vendorNameSize);
209 });
210}
211
212inline std::string Device::ModelName() const
213{
214 return QueryStringFromCInterfaceFunction([&](char* modelName, size_t* modelNameSize) {
215 return PEAK_C_ABI_PREFIX PEAK_Device_GetModelName(m_backendHandle, modelName, modelNameSize);
216 });
217}
218
219inline std::string Device::Version() const
220{
221 return QueryStringFromCInterfaceFunction([&](char* version, size_t* versionSize) {
222 return PEAK_C_ABI_PREFIX PEAK_Device_GetVersion(m_backendHandle, version, versionSize);
223 });
224}
225
226inline std::string Device::TLType() const
227{
228 return QueryStringFromCInterfaceFunction([&](char* tlType, size_t* tlTypeSize) {
229 return PEAK_C_ABI_PREFIX PEAK_Device_GetTLType(m_backendHandle, tlType, tlTypeSize);
230 });
231}
232
233inline std::string Device::UserDefinedName() const
234{
235 return QueryStringFromCInterfaceFunction([&](char* userDefinedName, size_t* userDefinedNameSize) {
237 m_backendHandle, userDefinedName, userDefinedNameSize);
238 });
239}
240
241inline std::string Device::SerialNumber() const
242{
243 return QueryStringFromCInterfaceFunction([&](char* serialNumber, size_t* serialNumberSize) {
244 return PEAK_C_ABI_PREFIX PEAK_Device_GetSerialNumber(m_backendHandle, serialNumber, serialNumberSize);
245 });
246}
247
249{
250 return static_cast<DeviceAccessStatus>(QueryNumericFromCInterfaceFunction<PEAK_DEVICE_ACCESS_STATUS>(
251 [&](PEAK_DEVICE_ACCESS_STATUS* accessStatus) {
252 return PEAK_C_ABI_PREFIX PEAK_Device_GetAccessStatus(m_backendHandle, accessStatus);
253 }));
254}
255
256inline uint64_t Device::TimestampTickFrequency() const
257{
258 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* timestampTickFrequency) {
259 return PEAK_C_ABI_PREFIX PEAK_Device_GetTimestampTickFrequency(m_backendHandle, timestampTickFrequency);
260 });
261}
262
263inline std::shared_ptr<class RemoteDevice> Device::RemoteDevice() const
264{
265 InitializeIfNecessary();
266
267 return m_remoteDevice;
268}
269
270inline std::vector<std::shared_ptr<DataStreamDescriptor>> Device::DataStreams() const
271{
272 InitializeIfNecessary();
273
274 return m_dataStreams;
275}
276
277inline std::shared_ptr<Interface> Device::ParentInterface() const
278{
279 return LockOrThrow(m_parentInterface);
280}
281
283{
284 auto moduleHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_HANDLE>(
285 [&](PEAK_MODULE_HANDLE* _moduleHandle) {
286 return PEAK_C_ABI_PREFIX PEAK_Device_ToModule(m_backendHandle, _moduleHandle);
287 });
288
289 return moduleHandle;
290}
291
293{
294 auto eventSupportingModuleHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_SUPPORTING_MODULE_HANDLE>(
295 [&](PEAK_EVENT_SUPPORTING_MODULE_HANDLE* _eventSupportingModuleHandle) {
297 m_backendHandle, _eventSupportingModuleHandle);
298 });
299
300 return eventSupportingModuleHandle;
301}
302
303inline void Device::Initialize() const
304{
305 EventSupportingModule::Initialize(); // init data of parent classes (i.e. Module) as well
306
307 // init data streams
308 auto numDataStreams = QueryNumericFromCInterfaceFunction<size_t>([&](size_t* _numDataStreams) {
309 return PEAK_C_ABI_PREFIX PEAK_Device_GetNumDataStreams(m_backendHandle, _numDataStreams);
310 });
311
312 std::vector<std::shared_ptr<DataStreamDescriptor>> dataStreams;
313 for (size_t x = 0; x < numDataStreams; ++x)
314 {
315 auto dataStreamDescriptorHandle = QueryNumericFromCInterfaceFunction<PEAK_DATA_STREAM_DESCRIPTOR_HANDLE>(
316 [&](PEAK_DATA_STREAM_DESCRIPTOR_HANDLE* _dataStreamDescriptorHandle) {
318 m_backendHandle, x, _dataStreamDescriptorHandle);
319 });
320
321 dataStreams.emplace_back(std::make_shared<ClassCreator<DataStreamDescriptor>>(
322 dataStreamDescriptorHandle, std::const_pointer_cast<Device>(shared_from_this())));
323 }
324
325 m_dataStreams = dataStreams;
326
327 // init remote device
328 auto remoteDeviceHandle = QueryNumericFromCInterfaceFunction<PEAK_REMOTE_DEVICE_HANDLE>(
329 [&](PEAK_REMOTE_DEVICE_HANDLE* _remoteDeviceHandle) {
330 return PEAK_C_ABI_PREFIX PEAK_Device_GetRemoteDevice(m_backendHandle, _remoteDeviceHandle);
331 });
332
333 m_remoteDevice = std::make_shared<ClassCreator<peak::core::RemoteDevice>>(
334 remoteDeviceHandle, std::const_pointer_cast<Device>(shared_from_this()));
335}
336
337} /* namespace core */
338} /* namespace peak */
PEAK_COMMON_NO_DISCARD std::string DisplayName() const
Returns the display name.
Definition peak_device.hpp:198
~Device() override
Definition peak_device.hpp:174
PEAK_COMMON_NO_DISCARD std::string VendorName() const
Returns the vendor name.
Definition peak_device.hpp:205
PEAK_COMMON_NO_DISCARD uint64_t TimestampTickFrequency() const
Returns the timestamp tick frequency.
Definition peak_device.hpp:256
PEAK_COMMON_NO_DISCARD std::string SerialNumber() const
Returns the serial number.
Definition peak_device.hpp:241
PEAK_COMMON_NO_DISCARD std::string Version() const
Returns the version.
Definition peak_device.hpp:219
Device(Device &&other)=delete
PEAK_COMMON_NO_DISCARD std::vector< std::shared_ptr< DataStreamDescriptor > > DataStreams() const
Returns the data stream list of the device.
Definition peak_device.hpp:270
PEAK_COMMON_NO_DISCARD std::string TLType() const
Returns the TL (transport layer) type.
Definition peak_device.hpp:226
PEAK_COMMON_NO_DISCARD std::shared_ptr< Interface > ParentInterface() const
Returns the parent interface.
Definition peak_device.hpp:277
Device & operator=(const Device &other)=delete
PEAK_COMMON_NO_DISCARD std::string Key() const
Returns the unique key.
Definition peak_device.hpp:179
PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition peak_device.hpp:184
PEAK_COMMON_NO_DISCARD DeviceAccessStatus AccessStatus() const
Returns the access status.
Definition peak_device.hpp:248
PEAK_COMMON_NO_DISCARD std::string UserDefinedName() const
Returns the user defined name.
Definition peak_device.hpp:233
Device(const Device &other)=delete
Device & operator=(Device &&other)=delete
PEAK_COMMON_NO_DISCARD std::string ID() const
Returns the ID.
Definition peak_device.hpp:191
PEAK_COMMON_NO_DISCARD PEAK_DEVICE_HANDLE Handle() const
Get the backend handle.
Definition peak_device.hpp:135
PEAK_COMMON_NO_DISCARD std::string ModelName() const
Returns the model name.
Definition peak_device.hpp:212
PEAK_COMMON_NO_DISCARD std::shared_ptr< class RemoteDevice > RemoteDevice() const
Returns the remote device of the device.
Definition peak_device.hpp:263
virtual PEAK_EVENT_SUPPORTING_MODULE_HANDLE EventSupportingModuleHandle() const =0
Represents a GenTL Interface module.
Definition peak_interface.hpp:48
virtual PEAK_MODULE_HANDLE ModuleHandle() const =0
DeviceAccessStatus
Current accessibility of the device.
Definition peak_common_device_enums.hpp:23
The "core" namespace contains the direct GenAPI and GenTL wrapper.
Definition peak_buffer.hpp:32
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition peak_buffer.hpp:29
PEAK_C_API PEAK_Device_ToModule(PEAK_DEVICE_HANDLE deviceHandle, PEAK_MODULE_HANDLE *moduleHandle)
Casts the given device to a module.
PEAK_C_API PEAK_Device_GetKey(PEAK_DEVICE_HANDLE deviceHandle, char *key, size_t *keySize)
Asks the given device for its key.
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition peak_backend.h:419
PEAK_C_API PEAK_Device_GetVendorName(PEAK_DEVICE_HANDLE deviceHandle, char *vendorName, size_t *vendorNameSize)
Asks the given device for its vendor name.
struct PEAK_DATA_STREAM_DESCRIPTOR * PEAK_DATA_STREAM_DESCRIPTOR_HANDLE
Definition peak_backend.h:395
PEAK_C_API PEAK_Device_GetSerialNumber(PEAK_DEVICE_HANDLE deviceHandle, char *serialNumber, size_t *serialNumberSize)
Asks the given device for its serial number.
PEAK_C_API PEAK_Device_GetDisplayName(PEAK_DEVICE_HANDLE deviceHandle, char *displayName, size_t *displayNameSize)
Asks the given device for its display name.
PEAK_C_API PEAK_Device_GetModelName(PEAK_DEVICE_HANDLE deviceHandle, char *modelName, size_t *modelNameSize)
Asks the given device for its model name.
PEAK_C_API PEAK_Device_GetTimestampTickFrequency(PEAK_DEVICE_HANDLE deviceHandle, uint64_t *timestampTickFrequency)
Asks the given device for its timestamp tick frequency.
struct PEAK_EVENT_SUPPORTING_MODULE * PEAK_EVENT_SUPPORTING_MODULE_HANDLE
Definition peak_backend.h:475
struct PEAK_REMOTE_DEVICE * PEAK_REMOTE_DEVICE_HANDLE
Definition peak_backend.h:391
PEAK_C_API PEAK_Device_GetRemoteDevice(PEAK_DEVICE_HANDLE deviceHandle, PEAK_REMOTE_DEVICE_HANDLE *remoteDeviceHandle)
Asks the given device for its remote device.
PEAK_C_API PEAK_Device_GetNumDataStreams(PEAK_DEVICE_HANDLE deviceHandle, size_t *numDataStreams)
Asks the given device for its number of data streams.
PEAK_C_API PEAK_Device_Destruct(PEAK_DEVICE_HANDLE deviceHandle)
Delete the given device.
PEAK_C_API PEAK_Device_GetUserDefinedName(PEAK_DEVICE_HANDLE deviceHandle, char *userDefinedName, size_t *userDefinedNameSize)
Asks the given device for its user-defined name.
PEAK_C_API PEAK_Device_GetAccessStatus(PEAK_DEVICE_HANDLE deviceHandle, PEAK_DEVICE_ACCESS_STATUS *accessStatus)
Asks the given device for its access status.
PEAK_C_API PEAK_Device_GetInfo(PEAK_DEVICE_HANDLE deviceHandle, int32_t infoCommand, int32_t *infoDataType, uint8_t *info, size_t *infoSize)
Asks the given device for an information based on a specific command.
PEAK_C_API PEAK_Device_ToEventSupportingModule(PEAK_DEVICE_HANDLE deviceHandle, PEAK_EVENT_SUPPORTING_MODULE_HANDLE *eventSupportingModuleHandle)
Casts the given device to an event-supporting module.
PEAK_C_API PEAK_Device_GetDataStream(PEAK_DEVICE_HANDLE deviceHandle, size_t index, PEAK_DATA_STREAM_DESCRIPTOR_HANDLE *dataStreamDescriptorHandle)
Asks the given device for the data stream descriptor with the given index.
PEAK_C_API PEAK_Device_GetVersion(PEAK_DEVICE_HANDLE deviceHandle, char *version, size_t *versionSize)
Asks the given device for its version.
PEAK_C_API PEAK_Device_GetTLType(PEAK_DEVICE_HANDLE deviceHandle, char *tlType, size_t *tlTypeSize)
Asks the given device for its TL type.
struct PEAK_DEVICE * PEAK_DEVICE_HANDLE
Definition peak_backend.h:387
int32_t PEAK_DEVICE_ACCESS_STATUS
Definition peak_backend.h:132
PEAK_C_API PEAK_Device_GetID(PEAK_DEVICE_HANDLE deviceHandle, char *id, size_t *idSize)
Asks the given device for its ID.
#define PEAK_COMMON_NO_DISCARD
Definition peak_common_defines.h:89
#define PEAK_C_ABI_PREFIX
Definition peak_dll_defines.h:13
The struct returned by all raw information functions.
Definition peak_common_structs.hpp:21