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 | NvSciEventLoopServiceCreateSafeX (size_t maxEventLoops, void *config, NvSciEventLoopService **newEventLoopService) |
Creates a new event loop service that has the same properties as created by NvSciEventLoopServiceCreateSafe(), but supports faster local event. More... | |
NvSciError | NvSciEventMoveNotifier (NvSciEventService *oldEventService, NvSciEventService *newEventService, NvSciEventNotifier *eventNotifier) |
Move event notifier. More... | |
NvSciError | NvSciEventCheckVersionCompatibility (uint32_t majorVer, uint32_t minorVer, bool *isCompatible) |
Check NvSciEventSerivice library version compatibility. More... | |
#define NV_SCI_EVENT_INFINITE_WAIT -1 |
Infinite timeout for NvSciEventLoopService::WaitForEvent() or NvSciEventLoopService::WaitForMultipleEvents().
Definition at line 168 of file nvscievent.h.
#define NV_SCI_EVENT_PRIORITIES 4 |
Definition at line 169 of file nvscievent.h.
typedef struct NvSciEventLoopService NvSciEventLoopService |
Definition at line 173 of file nvscievent.h.
typedef struct NvSciEventNotifier NvSciEventNotifier |
Definition at line 172 of file nvscievent.h.
typedef struct NvSciEventService NvSciEventService |
Definition at line 171 of file nvscievent.h.
typedef struct NvSciLocalEvent NvSciLocalEvent |
Definition at line 175 of file nvscievent.h.
typedef struct NvSciNativeEvent NvSciNativeEvent |
Definition at line 174 of file nvscievent.h.
NvSciError NvSciEventCheckVersionCompatibility | ( | uint32_t | majorVer, |
uint32_t | minorVer, | ||
bool * | isCompatible | ||
) |
Check NvSciEventSerivice library version compatibility.
Checks if loaded NvSciEvent library version is compatible with the version the application was compiled against. This function checks loaded NvSciEvent library version with input NvSciEvent library version and sets output variable true provided major version of the loaded library is same as majorVer and minor version of the loaded library is not less than minorVer, else sets output to false
[in] | majorVer | build major version. |
[in] | minorVer | build minor version. |
[out] | isCompatible | boolean value stating if loaded NvSciEvent library is compatible or not. |
Usage considerations
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
NvSciError NvSciEventLoopServiceCreateSafeX | ( | size_t | maxEventLoops, |
void * | config, | ||
NvSciEventLoopService ** | newEventLoopService | ||
) |
Creates a new event loop service that has the same properties as created by NvSciEventLoopServiceCreateSafe(), but supports faster local event.
For a detailed description of the API, see NvSciEventLoopServiceCreateSafe().
[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
NvSciError NvSciEventMoveNotifier | ( | NvSciEventService * | oldEventService, |
NvSciEventService * | newEventService, | ||
NvSciEventNotifier * | eventNotifier | ||
) |
Move event notifier.
This API exports event Notifier from old EventService and import the Notifier to new EventService. After the event notifier is migrated, the old EventService can not wait the event associated with the notifier. Instead, use the new EventService waits for the event.
[in] | oldEventService | NvSciEventService object pointer to export event notifier |
[in] | newEventService | NvSciEventService object pointer to import event notifier |
[in] | eventNotifier | Event notifier object pointer. |
Usage considerations