The NvSciEventService library provides the ability to build portable event-driven applications. An event is any significant occurrence or change in the state for system hardware or software. An event notification is a message or notification sent by one software part to another to convey that an event has taken place. An event-driven model consists of an event producer and event consumers. Once an event producer detects an event, it represents the event as a message (or notification). An event is transmitted from an event producer to event consumers through an OS-specific event channel. Event consumers must be informed when an event has occurred. NvSciEventService will execute the correct response (or callback) to an event.
NvSciEventService provides a mandatory abstract interface between other SCI technologies (especially NvSciIpc and NvSciStreams) and the application-provided event loop that services them.
The following common object type(s) are implemented:
Typical call flow with NvSciIpc library
1) Init mode
2) Runtime mode (loop)
3) Deinit mode
Data Structures | |
struct | NvSciLocalEvent |
An OS-agnostic object that sends signal to another thread in the same process. More... | |
struct | NvSciEventService |
An abstract interface for a program's event handling infrastructure. More... | |
struct | NvSciEventNotifier |
An abstract interface to notify event to event consumer and to register event handler of the event consumer client process. More... | |
struct | NvSciEventLoopService |
An abstract interface that event consumer can wait for events using event notifier in event loop. More... | |
Macros | |
#define | NV_SCI_EVENT_INFINITE_WAIT -1 |
Infinite timeout for NvSciEventLoopService::WaitForEvent() or NvSciEventLoopService::WaitForMultipleEvents(). More... | |
#define | NV_SCI_EVENT_PRIORITIES 4 |
Typedefs | |
typedef struct NvSciEventService | NvSciEventService |
typedef struct NvSciEventNotifier | NvSciEventNotifier |
typedef struct NvSciEventLoopService | NvSciEventLoopService |
typedef struct NvSciNativeEvent | NvSciNativeEvent |
typedef struct NvSciLocalEvent | NvSciLocalEvent |
Functions | |
NvSciError | NvSciEventLoopServiceCreate (size_t maxEventLoops, NvSciEventLoopService **newEventLoopService) |
Creates a new event loop service. More... | |
NvSciError | NvSciEventLoopServiceCreateSafe (size_t maxEventLoops, void *config, NvSciEventLoopService **newEventLoopService) |
Creates a new event loop service. More... | |
NvSciError | NvSciEventCheckVersionCompatibility (uint32_t majorVer, uint32_t minorVer, bool *isCompatible) |
#define NV_SCI_EVENT_INFINITE_WAIT -1 |
Infinite timeout for NvSciEventLoopService::WaitForEvent() or NvSciEventLoopService::WaitForMultipleEvents().
Definition at line 165 of file nvscievent.h.
#define NV_SCI_EVENT_PRIORITIES 4 |
Definition at line 166 of file nvscievent.h.
typedef struct NvSciEventLoopService NvSciEventLoopService |
Definition at line 170 of file nvscievent.h.
typedef struct NvSciEventNotifier NvSciEventNotifier |
Definition at line 169 of file nvscievent.h.
typedef struct NvSciEventService NvSciEventService |
Definition at line 168 of file nvscievent.h.
typedef struct NvSciLocalEvent NvSciLocalEvent |
Definition at line 172 of file nvscievent.h.
typedef struct NvSciNativeEvent NvSciNativeEvent |
Definition at line 171 of file nvscievent.h.
NvSciError NvSciEventCheckVersionCompatibility | ( | uint32_t | majorVer, |
uint32_t | minorVer, | ||
bool * | isCompatible | ||
) |
NvSciError NvSciEventLoopServiceCreate | ( | size_t | maxEventLoops, |
NvSciEventLoopService ** | newEventLoopService | ||
) |
Creates a new event loop service.
The number of event loops that can be created in the new event loop service will be limited to at most maxEventLoops.
This function creates a new event loop service newEventLoopService which is a primary instance of event service. An application must call event service functions along with newEventLoopService. The number of event loops that can be created in the new event loop service will be limited to at most maxEventLoops.
[in] | maxEventLoops | The number of event loops, it must be 1. |
[out] | newEventLoopService | NvSciEventNotifier object double pointer. |
Usage considerations
NvSciError NvSciEventLoopServiceCreateSafe | ( | size_t | maxEventLoops, |
void * | config, | ||
NvSciEventLoopService ** | newEventLoopService | ||
) |
Creates a new event loop service.
The number of event loops that can be created in the new event loop service will be limited to at most maxEventLoops.
This function creates a new event loop service newEventLoopService which is a primary instance of event service. An application must call event service functions along with newEventLoopService. The number of event loops that can be created in the new event loop service will be limited to at most maxEventLoops.
struct nto_channel_config { struct sigevent event; // initialize using SIGEV_SEM_INIT() macro unsigned num_pulses; // threshold to trigger semaphore event unsigned rearm_threshold; // 0 ~ num_pulses unsigned options; // _NTO_CHO_CUSTOM_EVENT unsigned reserved[3]; }
If you're experienced pulse pool shortage issue in normal operation, increase num_pulses by double of previous setting.
More information can be found in QNX OS manual page.
In order to detect event storm, user needs to create a separate thread to receive semaphore event which is set in nto_channel_config structure and call sem_wait() in that thread. When the thread is awaken by the semaphore event, it can call NvSciEventInspect() API to handle event storm.
[in] | maxEventLoops | The number of event loops, it must be 1. |
[in] | config | OS-specific configuration parameter. It should NULL in Linux. |
[out] | newEventLoopService | NvSciEventNotifier object double pointer. |
Usage considerations