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: Changing Asyn Port Driver paramList dynamically |
From: | Lucas Russo via Tech-talk <tech-talk at aps.anl.gov> |
To: | "Paduan Donadio, Marcio" <marcio at slac.stanford.edu> |
Cc: | "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov> |
Date: | Fri, 24 Jul 2020 14:18:17 -0300 |
Hi, Lucas.
After talking with Mark Rivers I figured out that I was following an old R4-12 documentation without noticing. paramList, at that time, was a tiny class with only a few set of methods.
Once I’ve opened the newest version of the paramList Doxigen I could see the createParam() method. (facepalm)
Regarding the interface masks, Mark Rivers confirmed that it is not possible to change them after the constructor, but “the overhead in having an unused interface initialized in the asynPortDriver constructor is very low, so simply setting all standard interfaces in the mask would be a work-around for this”.
Thank you a lot for the answer. I have my IOC now running the way I intended.
My best,
Márcio
From: Lucas Russo <lerwys at gmail.com>
Date: Friday, July 24, 2020 at 9:23 AM
To: "Paduan Donadio, Marcio" <marcio at slac.stanford.edu>
Cc: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Subject: Re: Changing Asyn Port Driver paramList dynamically
Hi Marcio,
From Asyn version 4-31 onwards you don't need to specify the number of parameters in advance (see https://epics-modules.github.io/master/asyn/R4-31/RELEASE_NOTES.html). You can just use createParam() and the c++ std::vector will handle this for you. So, in your child class I believe you can just call createParam() as usual. You just need to call the father class method if the parameter ID does not belong to your class.
Regarding specifying interfaces/masks I'm not sure if you can modify this after the father class has already initialized. Of course you can always pass these interface/interrupt mask parameters via the constructor, but I think that's not what you want.
You can also take a look at the QuadEM module that does more or less what you want, apparently: https://github.com/epics-modules/quadEM/tree/master/quadEMApp/src
drvQuadEM would be your father class and drvTetrAMM, drvNSLS_EM, etc would be your child classes.
Hope this helps,
Cheers,
Lucas
On Thu, Jul 23, 2020 at 12:16 AM Paduan Donadio, Marcio via Tech-talk <tech-talk at aps.anl.gov> wrote:
Hello.
I have this class inheritance scenario:
asynPortDriver <- fatherClass <- childClass
fatherClass constructor is calling asynPortDriver constructor, informing the number of elements of paramList as well as masks for interfaces used.
I’d like childClass to add more parameters to paramList after fatherClass already created this list and, eventually, add interfaces to the Asyn mask.
Is it possible?
Thank you,
Márcio Paduan Donadio
Control Systems Engineer - SLAC