devi_register_interrupt
![]() |
![]() |
![]() |
![]() |
devi_register_interrupt()
Attach to an interrupt
Synopsis:
int devi_register_interrupt( int intr,
int prio,
int *pc,
input_module_t *module,
struct sigevent *evp,
unsigned flags );
Description:
This function lets you attach to an interrupt. The default method of attachment is to use InterruptAttachEvent() and send back a pulse when the IRQ triggers. But you can override this behavior by passing in your own event structure in the fifth parameter (evp).
For example if you wanted to spawn a separate interrupt-handling thread and process interrupts within it, you could set up the event structure to send back SIGEV_INTR.
The arguments are:
- intr
- Interrupt number (IRQ) you're going to register.
- prio
- Dispatch priority that will be assigned to the callback function that processes a pulse. The priority is generated by an interrupt handler.
- pc
- Pulse code. If the pc argument isn't NULL and isn't equal to DEVI_PULSE_ALLOC, then it will be used as the pulse code to associate the pulse() callback.
- module
- Name of module data block.
- evp
- Pointer to sigevent structure. If
provided, evp is attached to the interrupt (see
InterruptAttachEvent()
in the QNX Neutrino Library Reference.)
If evp is NULL, a pulse will be allocated and the module's pulse() callback will be associated with it.
- flags
- Can be 0 or DEVI_SHARE_RSRC. If the flags argument is set to DEVI_SHARE_RSRC, this will tell the resource database manager to allow this interrupt to be shared. If the pc parameter wasn't NULL, then the allocated pulse code will be returned in it.
Returns:
A valid interrupt ID, or -1 on error.
Classification:
QNX
| Safety: | |
|---|---|
| Interrupt handler | Not applicable |
| Signal handler | Not applicable |
| Thread | Not applicable |
![]() |
![]() |
![]() |
![]() |
![[Previous]](../prev.gif)
![[Contents]](../contents.gif)
![[Index]](../keyword_index.gif)
![[Next]](../next.gif)