IDS peak genericC++  v1.7.0
peak_event_controller.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 
13 
17 #include <peak/dll_interface/peak_dll_interface_util.hpp>
19 
20 #include <cstddef>
21 #include <cstdint>
22 #include <memory>
23 
24 
25 namespace peak
26 {
27 namespace core
28 {
29 
38 {
39 public:
40  EventController() = delete;
42  EventController(const EventController& other) = delete;
43  EventController& operator=(const EventController& other) = delete;
44  EventController(EventController&& other) = delete;
45  EventController& operator=(EventController&& other) = delete;
46 
48  RawInformation Info(int32_t infoCommand) const;
49 
59  size_t NumEventsInQueue() const;
60 
70  uint64_t NumEventsFired() const;
71 
81  size_t EventMaxSize() const;
82 
92  size_t EventDataMaxSize() const;
93 
109  std::unique_ptr<Event> WaitForEvent(Timeout timeout_ms);
110 
118  void KillWait();
119 
127  void FlushEvents();
128 
137 
138 private:
139  friend ClassCreator<EventController>;
140  explicit EventController(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle);
141  PEAK_EVENT_CONTROLLER_HANDLE m_backendHandle;
142 };
143 
144 } /* namespace core */
145 } /* namespace peak */
146 
147 /* Implementation */
148 namespace peak
149 {
150 namespace core
151 {
152 
154  : m_backendHandle(eventControllerHandle)
155 {}
156 
158 {
159  (void)PEAK_C_ABI_PREFIX PEAK_EventController_Destruct(m_backendHandle);
160 }
161 
162 inline RawInformation EventController::Info(int32_t infoCommand) const
163 {
164  return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
166  m_backendHandle, infoCommand, dataType, buffer, bufferSize);
167  });
168 }
169 
171 {
172  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numEventsInQueue) {
173  return PEAK_C_ABI_PREFIX PEAK_EventController_GetNumEventsInQueue(m_backendHandle, numEventsInQueue);
174  });
175 }
176 
177 inline uint64_t EventController::NumEventsFired() const
178 {
179  return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numEventsFired) {
180  return PEAK_C_ABI_PREFIX PEAK_EventController_GetNumEventsFired(m_backendHandle, numEventsFired);
181  });
182 }
183 
184 inline size_t EventController::EventMaxSize() const
185 {
186  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* eventMaxSize) {
187  return PEAK_C_ABI_PREFIX PEAK_EventController_GetEventMaxSize(m_backendHandle, eventMaxSize);
188  });
189 }
190 
192 {
193  return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* eventDataMaxSize) {
194  return PEAK_C_ABI_PREFIX PEAK_EventController_GetEventDataMaxSize(m_backendHandle, eventDataMaxSize);
195  });
196 }
197 
198 inline std::unique_ptr<Event> EventController::WaitForEvent(Timeout timeout_ms)
199 {
200  auto eventHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_HANDLE>(
201  [&](PEAK_EVENT_HANDLE* _eventHandle) {
202  return PEAK_C_ABI_PREFIX PEAK_EventController_WaitForEvent(m_backendHandle, timeout_ms, _eventHandle);
203  });
204 
205  return std::make_unique<ClassCreator<Event>>(eventHandle);
206 }
207 
209 {
210  CallAndCheckCInterfaceFunction(
211  [&] { return PEAK_C_ABI_PREFIX PEAK_EventController_KillWait(m_backendHandle); });
212 }
213 
215 {
216  CallAndCheckCInterfaceFunction(
217  [&] { return PEAK_C_ABI_PREFIX PEAK_EventController_FlushEvents(m_backendHandle); });
218 }
219 
221 {
222  return static_cast<EventType>(
223  QueryNumericFromCInterfaceFunction<PEAK_EVENT_TYPE>([&](PEAK_EVENT_TYPE* controlledEventType) {
225  m_backendHandle, controlledEventType);
226  }));
227 }
228 
229 } /* namespace core */
230 } /* namespace peak */
PEAK_C_API PEAK_EventController_WaitForEvent(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, uint64_t timeout_ms, PEAK_EVENT_HANDLE *eventHandle)
Tells the given event controller to wait for an event with the given timeout.
EventType
Different types of events.
Definition: peak_event.hpp:34
The "peak" namespace directly contains convenience functionality like the DeviceManager as well as th...
Definition: peak_dynamic_loader.h:32
PEAK_C_API PEAK_EventController_GetEventMaxSize(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, size_t *eventMaxSize)
Asks the event controller for the maximum size of an event.
std::unique_ptr< Event > WaitForEvent(Timeout timeout_ms)
Blocking wait for an event.
Definition: peak_event_controller.hpp:198
RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition: peak_event_controller.hpp:162
struct PEAK_EVENT_CONTROLLER * PEAK_EVENT_CONTROLLER_HANDLE
Definition: peak_backend.h:463
Encapsulates the GenTL event functionality associated with one GenTL Event handle.
Definition: peak_event_controller.hpp:37
PEAK_C_API PEAK_EventController_FlushEvents(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Tells the given event controller to flush all events in queue.
int32_t PEAK_EVENT_TYPE
Definition: peak_backend.h:168
PEAK_C_API PEAK_EventController_GetInfo(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, int32_t infoCommand, int32_t *infoDataType, uint8_t *info, size_t *infoSize)
Asks the given event controller for an information based on a specific command.
void KillWait()
Terminates a wait for an event.
Definition: peak_event_controller.hpp:208
struct PEAK_EVENT * PEAK_EVENT_HANDLE
Definition: peak_backend.h:467
PEAK_C_API PEAK_EventController_Destruct(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Destroys the given event controller.
Represents a timeout value in milliseconds.
Definition: peak_timeout.hpp:30
size_t EventDataMaxSize() const
Returns the maximum size of the data of an event in bytes.
Definition: peak_event_controller.hpp:191
void FlushEvents()
Discards all events in queue.
Definition: peak_event_controller.hpp:214
PEAK_C_API PEAK_EventController_GetEventDataMaxSize(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, size_t *eventDataMaxSize)
Asks the event controller for the maximum size of an event&#39;s data.
size_t EventMaxSize() const
Returns the maximum size of an event in bytes.
Definition: peak_event_controller.hpp:184
#define PEAK_C_ABI_PREFIX
Definition: peak_dll_defines.h:16
PEAK_C_API PEAK_EventController_GetNumEventsInQueue(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, size_t *numEventsInQueue)
Asks the event controller for its number of events in queue.
uint64_t NumEventsFired() const
Returns the number of fired events.
Definition: peak_event_controller.hpp:177
size_t NumEventsInQueue() const
Returns the number of events in queue.
Definition: peak_event_controller.hpp:170
The struct returned by all raw information functions.
Definition: peak_common_structs.hpp:24
PEAK_C_API PEAK_EventController_GetNumEventsFired(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, uint64_t *numEventsFired)
Asks the event controller for its number of fired events.
EventType ControlledEventType() const
Returns the controlled event type.
Definition: peak_event_controller.hpp:220
PEAK_C_API PEAK_EventController_GetControlledEventType(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, PEAK_EVENT_TYPE *controlledEventType)
Asks the event controller for its controlled event type.
EventController & operator=(const EventController &other)=delete
~EventController()
Definition: peak_event_controller.hpp:157
PEAK_C_API PEAK_EventController_KillWait(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Tells the given event controller to kill a wait for an event.