IDS peak genericC++  v1.5.0
peak_remote_device.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
13 
16 #include <peak/dll_interface/peak_dll_interface_util.hpp>
17 
18 #include <memory>
19 
20 
21 namespace peak
22 {
23 namespace core
24 {
25 
26 class Device;
27 
36 class RemoteDevice : public Module
37 {
38 public:
39  RemoteDevice() = delete;
40  ~RemoteDevice() override = default;
41  RemoteDevice(const class RemoteDevice& other) = delete;
42  RemoteDevice& operator=(const class RemoteDevice& other) = delete;
43  RemoteDevice(class RemoteDevice&& other) = delete;
44  RemoteDevice& operator=(class RemoteDevice&& other) = delete;
45 
55  std::shared_ptr<Device> LocalDevice() const;
56 
57 private:
58  friend ClassCreator<RemoteDevice>;
59  RemoteDevice(PEAK_REMOTE_DEVICE_HANDLE remoteDeviceHandle, const std::weak_ptr<Device>& localDevice);
60  PEAK_MODULE_HANDLE ModuleHandle() const override;
61 
62  PEAK_REMOTE_DEVICE_HANDLE m_backendHandle;
63 
64  std::weak_ptr<Device> m_localDevice;
65 };
66 
67 } /* namespace core */
68 } /* namespace peak */
69 
70 /* Implementation */
71 namespace peak
72 {
73 namespace core
74 {
75 
77  PEAK_REMOTE_DEVICE_HANDLE remoteDeviceHandle, const std::weak_ptr<Device>& localDevice)
78  : m_backendHandle(remoteDeviceHandle)
79  , m_localDevice(localDevice)
80 {}
81 
82 inline std::shared_ptr<Device> RemoteDevice::LocalDevice() const
83 {
84  return LockOrThrow(m_localDevice);
85 }
86 
87 inline PEAK_MODULE_HANDLE RemoteDevice::ModuleHandle() const
88 {
89  auto moduleHandle = QueryNumericFromCInterfaceFunction<PEAK_MODULE_HANDLE>(
90  [&](PEAK_MODULE_HANDLE* _moduleHandle) {
91  return PEAK_C_ABI_PREFIX PEAK_RemoteDevice_ToModule(m_backendHandle, _moduleHandle);
92  });
93 
94  return moduleHandle;
95 }
96 
97 } /* namespace core */
98 } /* namespace peak */
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition: peak_dynamic_loader.h:32
struct PEAK_REMOTE_DEVICE * PEAK_REMOTE_DEVICE_HANDLE
Definition: peak_backend.h:373
RemoteDevice & operator=(const class RemoteDevice &other)=delete
~RemoteDevice() override=default
std::shared_ptr< Device > LocalDevice() const
Returns the local device (device proxy) of the remote device.
Definition: peak_remote_device.hpp:82
Represents an extended GenTL port.
Definition: peak_module.hpp:37
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
PEAK_C_API PEAK_RemoteDevice_ToModule(PEAK_REMOTE_DEVICE_HANDLE remoteDeviceHandle, PEAK_MODULE_HANDLE *moduleHandle)
Casts the given remote device to a module.
struct PEAK_MODULE * PEAK_MODULE_HANDLE
Definition: peak_backend.h:401
Allows to access the physical Device.
Definition: peak_remote_device.hpp:36