On 3/18/20 9:47 AM, Mark Rivers wrote:
>> by analogy waveformRecord has
>>> db_post_events(prec, &prec->val, monitor_mask);
>> note 'val' not 'bptr'.
>
>
> The mca record has worked with no changes in 3.14, 3.15, and 7.0.3 with these lines:
>
>
> mcaRecord.dbd:
> recordtype(mca) {
> include "dbCommon.dbd"
> field(VERS,DBF_DOUBLE) {
> prompt("Code Version")
> special(SPC_NOMOD)
> initial("1")
> }
> field(VAL,DBF_NOACCESS) {
> prompt("Value")
> special(SPC_DBADDR)
> pp(TRUE)
> size(4)
> extra("void *val")
> }
> field(BPTR,DBF_NOACCESS) {
> prompt("Buffer Pointer")
> special(SPC_NOMOD)
> interest(4)
> size(4)
> extra("void *bptr")
> }
>
> mcaRecord.c:
> if (MARKED(M_VAL)) db_post_events(pmca,pmca->bptr,monitor_mask);
>
> So it is posting monitors on the bptr field, not the val field, and it seems to work fine.
>
>
> It looks like Pete is doing what the mca record does, but it is not working. Why?
Ah, there is a second piece to the puzzle.
db_post_events() must be called with whatever address is in DBADDR::pfield
which by default in this case is '&val' but this can be changed in the
cvt_dbaddr callback. Indeed waveformRecord used to do this.
https://github.com/epics-base/epics-base/commit/92d52cc415599b7dffa7df1f23d5ba8227fb4d3a