Dear all,
I’m looking at `asynPortDriver::setInterruptUInt32Digital()' which is documented
to be “called when asyn clients call `pasynUInt32Digital->setInterrupt()'”.
However, EPICS device support (`devAsynUInt32Digital.c') does not contain such a
call.
It’s not clear to me how this interface is meant to be used. I’d expect, from
the driver point of view, to be able to use
`asynPortDriver::getInterruptUInt32Digital()' to learn which bits records are
interested in. However, this does not work with EPICS, I don’t see how it could
be set to logical-or of masks for all `IO Intr' records, and I don’t see a use
case for anything else. I don’t have a use case myself; I’m just wondering how
the interface works and what it is meant for, presuming that it was implemented
with some purpose in mind.
Actually, I feel a bit unsure as to how the mask in the UInt32Digital interface
really works. The documentation appears to be quite sparse on this topic. My
understanding is the following:
• `asynInt32' deals with the mask in EPICS device support layer support while
`asynUInt32Digital' delegates that to the driver.
• On read or write, `asynUInt32Digital' passes the mask and the value to/from
the driver unmodified. It’s up to the driver to apply the mask to the value
in the way appropriate for the device.
• For interrupts, `asynPortDriver' will consider the mask given to
`setUIntDigitalParam()' and figure out which `IO Intr' records to process
based on both the mask and which bits in the value have changed.
If the last point is true, then I guess
`asynPortDriver::setInterruptUInt32Digital()' really doesn’t seem useful for
EPICS. I hope now you see why I’m wondering what it’s about :)
Best regards,
Jure Varlec
Senior Software Developer
Cosylab d.d.
www.cosylab.com