From 31b22fd2535b2ff0c950ac870a956a229679c8bc Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Wed, 10 Jul 2024 23:06:53 -0500 Subject: [PATCH] Add test of jlinkz::putValue() to dbPutLinkTest Add OUTP link field to xRecord xRecord::process() puts VAL to the OUTP link jlinkz writes the output value to the record's own PHAS field Correct the dbFastPutConvertRoutine lookup Test sets OUTP link, processes record and confirms that PHAS was set --- modules/database/test/ioc/db/dbPutLinkTest.c | 6 +++++- modules/database/test/ioc/db/jlinkz.c | 3 ++- modules/database/test/ioc/db/xRecord.c | 1 + modules/database/test/ioc/db/xRecord.dbd | 3 +++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/database/test/ioc/db/dbPutLinkTest.c b/modules/database/test/ioc/db/dbPutLinkTest.c index db947b9eb..2b7d3a518 100644 --- a/modules/database/test/ioc/db/dbPutLinkTest.c +++ b/modules/database/test/ioc/db/dbPutLinkTest.c @@ -597,8 +597,12 @@ void testJLink(void) testNumZ(6); testdbPutFieldOk("j1.INP", DBF_STRING, "{\"z\":{\"good\":4}}"); + testdbPutFieldOk("j1.PHAS", DBF_LONG, 0); + testdbPutFieldOk("j1.OUTP", DBF_STRING, "{z:{good:99}}"); testdbPutFieldOk("j1.PROC", DBF_LONG, 1); testdbGetFieldEqual("j1.VAL", DBF_LONG, 4); + testdbGetFieldEqual("j1.PHAS", DBF_LONG, 4); + testdbPutFieldOk("j1.OUTP", DBF_STRING, ""); testdbPutFieldOk("j2.TSEL", DBF_STRING, "{'z':{good:0}}"); testdbPutFieldOk("j2.PROC", DBF_LONG, 1); @@ -701,7 +705,7 @@ void testTSEL(void) MAIN(dbPutLinkTest) { - testPlan(348); + testPlan(352); testLinkParse(); testLinkFailParse(); testCADBSet(); diff --git a/modules/database/test/ioc/db/jlinkz.c b/modules/database/test/ioc/db/jlinkz.c index fc53a4eb5..968f9f648 100644 --- a/modules/database/test/ioc/db/jlinkz.c +++ b/modules/database/test/ioc/db/jlinkz.c @@ -124,13 +124,14 @@ long z_putval(struct link *plink, short dbrType, if(INVALID_DB_REQ(dbrType)) return S_db_badDbrtype; - pconv = dbFastPutConvertRoutine[DBF_LONG][dbrType]; + pconv = dbFastPutConvertRoutine[dbrType][DBF_LONG]; if(nRequest==0) return 0; epicsMutexLock(priv->lock); ret = pconv(pbuffer, &priv->value, NULL); epicsMutexUnlock(priv->lock); + plink->precord->phas = priv->value; return ret; } diff --git a/modules/database/test/ioc/db/xRecord.c b/modules/database/test/ioc/db/xRecord.c index cd8fa74df..9f934746a 100644 --- a/modules/database/test/ioc/db/xRecord.c +++ b/modules/database/test/ioc/db/xRecord.c @@ -71,6 +71,7 @@ static long process(struct dbCommon *pcommon) ret = (*xset->process)(prec); monitor(prec); recGblGetTimeStamp(prec); + dbPutLink(&prec->outp, DBR_LONG, &prec->val, 1); recGblFwdLink(prec); prec->pact = FALSE; return ret; diff --git a/modules/database/test/ioc/db/xRecord.dbd b/modules/database/test/ioc/db/xRecord.dbd index 620deac61..494ea349a 100644 --- a/modules/database/test/ioc/db/xRecord.dbd +++ b/modules/database/test/ioc/db/xRecord.dbd @@ -49,6 +49,9 @@ recordtype(x) { prompt("Input Link") special(SPC_MOD) } + field(OUTP, DBF_OUTLINK) { + prompt("Output Link") + } field(CLBK, DBF_NOACCESS) { prompt("Processing callback") special(SPC_NOMOD)