record(ai, "my:name:is") {}
record(ai, "my:name:XXXXXXXXXXXXXXXXXXXXXXXXXX:is:realllllllylongggggggx") {}
record(stringin, "short:name") {
field(INP , "my:name:is.NAME NPP")
field(PINI, "YES")
}
record(aai, "long:name") {
field(FTVL, "CHAR")
field(NELM, "128")
field(INP , "my:name:XXXXXXXXXXXXXXXXXXXXXXXXXX:is:realllllllylongggggggx.NAME$ NPP")
field(PINI, "YES")
}
Yeah, so the reason I am doing this is because I am interested in using the streamReload function from StreamDevice for certain records. I didn't want to hard code the record name for the streamReload function and would rather use the record name specified in the input links.
For instance, in my aSub function, I wanted to steer away from doing this:
record(aSub, "reload_rec_for_setting_voltage")
{
field(SNAM, "reload")
}
static long reload(aSubRecord *prec)
{
streamReload("voltage_rec")
return 0;
}
My aim was to do this instead:
record(aSub, "reload_rec_for_setting_voltage")
{
field(SNAM, "reload")
field(INPA, "voltage_rec")
}
static long reload(aSubRecord *prec)
{
DBLINK inpa = prec->inpa;
if (inpa.type == DB_LINK)
{
char *rec_name = inpa.value.pv_link.pvname;
streamReload(rec_name);
}
}
This will allow me to use the aSub record for other records I want to apply streamReload to. I didn't want to create 10+ individual functions for each record I wanted to use streamReload on.
Thanks,
Andy
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*From:* Michael Davidsaver <mdavidsaver at gmail.com>
*Sent:* Wednesday, July 27, 2022 8:30 AM
*To:* Wang, Andrew <wang126 at llnl.gov>
*Cc:* EPICS tech-talk <tech-talk at aps.anl.gov>
*Subject:* Re: Retrieving record name from aSub input/output fields
On 7/26/22 16:53, Wang, Andrew via Tech-talk wrote:
Update. I think I got it. I had to do the following.
static long func(aSubRecord *prec)
{
DBLINK inpa = prec->inpa;
Be aware that 'inpa.value' is a C union.
So it is strongly recommended to test 'prec->inp.type' before accessing.
In this case you are assuming that 'prec->inp.type==DB_LINK'.
char *rec_name = inpa.value.pv_link.pvname;
printf(“Record name in INPA is %s\n”, rec_name);
Also, what motivates this? Have you found an operation that
isn't covered by the link abstraction?
return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*From:* Wang, Andrew
*Sent:* Tuesday, July 26, 2022 4:17 PM
*To:* EPICS tech-talk <tech-talk at aps.anl.gov>
*Subject:* Retrieving record name from aSub input/output fields
Hi all,
Quick question this time. I was wondering if there was a way to retrieve the name of the record referenced in an OUTLINK/INLINK field such as INPA, OUTA, etc. in the aSub routine.
For instance, suppose I had an aSub record such as the following.
record(aSub, “example”)
{
field(SNAM, “func”)
field(INPA, “rec_in_inpa”)
}
I would like to be able to print the name of the record in INPA within “func”.
static long func(aSubRecord *prec)
{
char *rec_name = prec->____;
printf(“Record name in INPA is %s\n”, rec_name);
return 0;
}
Thanks,
Andy
Purple ribbon awareness <https://urldefense.us/v3/__https://www.disabled-world.com/disability/awareness/ribbons.php*purple__;Iw!!G2kpM7uM-TzIFchu!inuIyxNM2XJXWKnvIjTejbSyl70ULfXoS2SJBJ1rrGgMtiBGic7GoQpea6to21OpaNc$ >