IDS peak genericC++ v1.17.0
Loading...
Searching...
No Matches
peak_event_controller.hpp
Go to the documentation of this file.
1
6
7#pragma once
8
10
14#include <peak/dll_interface/peak_dll_interface_util.hpp>
16
17#include <cstddef>
18#include <cstdint>
19#include <memory>
20
21
22namespace peak
23{
24namespace core
25{
26
40{
41public:
45 EventController() = delete;
54 EventController(const EventController& other) = delete;
55 EventController& operator=(const EventController& other) = delete;
58
60 PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const;
61
72
83
94
105
125 PEAK_COMMON_NO_DISCARD std::unique_ptr<Event> WaitForEvent(Timeout timeout_ms);
126
148 void KillWait();
149
168
176 void FlushEvents();
177
186
187private:
188 friend ClassCreator<EventController>;
189 explicit EventController(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle);
190 PEAK_EVENT_CONTROLLER_HANDLE m_backendHandle;
191};
192
193} /* namespace core */
194} /* namespace peak */
195
196/* Implementation */
197namespace peak
198{
199namespace core
200{
201
203 : m_backendHandle(eventControllerHandle)
204{}
205
210
211inline RawInformation EventController::Info(int32_t infoCommand) const
212{
213 return QueryRawInformationFromCInterfaceFunction([&](int32_t* dataType, uint8_t* buffer, size_t* bufferSize) {
215 m_backendHandle, infoCommand, dataType, buffer, bufferSize);
216 });
217}
218
220{
221 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* numEventsInQueue) {
222 return PEAK_C_ABI_PREFIX PEAK_EventController_GetNumEventsInQueue(m_backendHandle, numEventsInQueue);
223 });
224}
225
226inline uint64_t EventController::NumEventsFired() const
227{
228 return QueryNumericFromCInterfaceFunction<uint64_t>([&](uint64_t* numEventsFired) {
229 return PEAK_C_ABI_PREFIX PEAK_EventController_GetNumEventsFired(m_backendHandle, numEventsFired);
230 });
231}
232
233inline size_t EventController::EventMaxSize() const
234{
235 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* eventMaxSize) {
236 return PEAK_C_ABI_PREFIX PEAK_EventController_GetEventMaxSize(m_backendHandle, eventMaxSize);
237 });
238}
239
241{
242 return QueryNumericFromCInterfaceFunction<size_t>([&](size_t* eventDataMaxSize) {
243 return PEAK_C_ABI_PREFIX PEAK_EventController_GetEventDataMaxSize(m_backendHandle, eventDataMaxSize);
244 });
245}
246
247inline std::unique_ptr<Event> EventController::WaitForEvent(Timeout timeout_ms)
248{
249 auto eventHandle = QueryNumericFromCInterfaceFunction<PEAK_EVENT_HANDLE>(
250 [&](PEAK_EVENT_HANDLE* _eventHandle) {
251 return PEAK_C_ABI_PREFIX PEAK_EventController_WaitForEvent(m_backendHandle, timeout_ms, _eventHandle);
252 });
253
254 return std::make_unique<ClassCreator<Event>>(eventHandle);
255}
256
258{
259 CallAndCheckCInterfaceFunction(
260 [&] { return PEAK_C_ABI_PREFIX PEAK_EventController_KillWait(m_backendHandle); });
261}
262
264{
265 CallAndCheckCInterfaceFunction(
266 [&] { return PEAK_C_ABI_PREFIX PEAK_EventController_FlushPendingKillWaits(m_backendHandle); });
267}
268
270{
271 CallAndCheckCInterfaceFunction(
272 [&] { return PEAK_C_ABI_PREFIX PEAK_EventController_FlushEvents(m_backendHandle); });
273}
274
276{
277 return static_cast<EventType>(
278 QueryNumericFromCInterfaceFunction<PEAK_EVENT_TYPE>([&](PEAK_EVENT_TYPE* controlledEventType) {
280 m_backendHandle, controlledEventType);
281 }));
282}
283
284} /* namespace core */
285} /* namespace peak */
void FlushEvents()
Discards all events in queue.
Definition peak_event_controller.hpp:269
PEAK_COMMON_NO_DISCARD EventType ControlledEventType() const
Returns the controlled event type.
Definition peak_event_controller.hpp:275
PEAK_COMMON_NO_DISCARD std::unique_ptr< Event > WaitForEvent(Timeout timeout_ms)
Blocking wait for an event.
Definition peak_event_controller.hpp:247
PEAK_COMMON_NO_DISCARD RawInformation Info(int32_t infoCommand) const
Delivers information based on the given GenTL info command.
Definition peak_event_controller.hpp:211
EventController()=delete
Can not be created on its own, instead use EnableEvents.
EventController & operator=(const EventController &other)=delete
void FlushPendingKillWaits()
Flushes the KillWait queue.
Definition peak_event_controller.hpp:263
PEAK_COMMON_NO_DISCARD size_t EventDataMaxSize() const
Returns the maximum size of the data of an event in bytes.
Definition peak_event_controller.hpp:240
~EventController()
Destroys the EventController and unregisters the event.
Definition peak_event_controller.hpp:206
void KillWait()
Cancels a pending WaitForEvent call.
Definition peak_event_controller.hpp:257
PEAK_COMMON_NO_DISCARD size_t NumEventsInQueue() const
Returns the number of events in queue.
Definition peak_event_controller.hpp:219
EventController(const EventController &other)=delete
EventController & operator=(EventController &&other)=delete
PEAK_COMMON_NO_DISCARD size_t EventMaxSize() const
Returns the maximum size of an event in bytes.
Definition peak_event_controller.hpp:233
PEAK_COMMON_NO_DISCARD uint64_t NumEventsFired() const
Returns the number of fired events.
Definition peak_event_controller.hpp:226
EventController(EventController &&other)=delete
Represents a timeout value in milliseconds.
Definition peak_timeout.hpp:28
EventType
Different types of events.
Definition peak_event.hpp:33
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_EventController_FlushEvents(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Tells the given event controller to flush all events in queue.
struct PEAK_EVENT * PEAK_EVENT_HANDLE
Definition peak_backend.h:483
int32_t PEAK_EVENT_TYPE
Definition peak_backend.h:183
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.
struct PEAK_EVENT_CONTROLLER * PEAK_EVENT_CONTROLLER_HANDLE
Definition peak_backend.h:479
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's data.
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.
PEAK_C_API PEAK_EventController_FlushPendingKillWaits(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Flushes the KillWait queue.
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.
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.
PEAK_C_API PEAK_EventController_GetNumEventsFired(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, uint64_t *numEventsFired)
Asks the event controller for its number of fired events.
PEAK_C_API PEAK_EventController_GetControlledEventType(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle, PEAK_EVENT_TYPE *controlledEventType)
Asks the event controller for its controlled event type.
PEAK_C_API PEAK_EventController_KillWait(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Cancels a pending PEAK_EventController_WaitForEvent call.
PEAK_C_API PEAK_EventController_Destruct(PEAK_EVENT_CONTROLLER_HANDLE eventControllerHandle)
Destroys the given event controller.
#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