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