After you successfully mapped your devices memory, you can access it like an ordinary array. Usually, you will perform some initialization. After that, your hardware starts working and will generate an interrupt as soon as it's finished, has some data available, or needs your attention because an error occurred.
/dev/uioX
is a read-only file. A
read()
will always block until an
interrupt occurs. There is only one legal value for the
count
parameter of
read()
, and that is the size of a
signed 32 bit integer (4). Any other value for
count
causes read()
to fail. The signed 32 bit integer read is the interrupt
count of your device. If the value is one more than the value
you read the last time, everything is OK. If the difference
is greater than one, you missed interrupts.
You can also use select()
on
/dev/uioX
.