1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 <2020> 2021 2022 2023 2024 2025 | Index | 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 <2020> 2021 2022 2023 2024 2025 |
<== Date ==> | <== Thread ==> |
---|
Subject: | Re: monitors on array variables |
From: | "Siddons, David via Tech-talk" <tech-talk at aps.anl.gov> |
To: | Michael Davidsaver <mdavidsaver at gmail.com>, Mark Rivers <rivers at cars.uchicago.edu> |
Cc: | EPICS Tech-Talk <tech-talk at aps.anl.gov> |
Date: | Wed, 18 Mar 2020 18:09:03 +0000 |
.....and I have, in cvt_dbaddr():
case zDDMRecordSPCT:{
paddr->pfield = (void *)(pzDDM->pspct);
paddr->no_elements = 4096; /* One spectrum for real-time display */
paddr->field_type = DBF_LONG;
paddr->field_size = sizeof(int);
paddr->dbr_field_type = DBR_LONG;
break;
Pete.
From: Michael Davidsaver <mdavidsaver at gmail.com>
Sent: Wednesday, March 18, 2020 12:54 PM To: Mark Rivers <rivers at cars.uchicago.edu>; Siddons, David <siddons at bnl.gov> Cc: EPICS Tech-Talk <tech-talk at aps.anl.gov> Subject: Re: monitors on array variables 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 |