From f3cf369071176f16e9f01fc672ce121718caaf09 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Wed, 30 Aug 1995 21:18:29 +0000 Subject: [PATCH] made separate from recDynLink --- src/rec/recDynLinkTest.c | 180 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 src/rec/recDynLinkTest.c diff --git a/src/rec/recDynLinkTest.c b/src/rec/recDynLinkTest.c new file mode 100644 index 000000000..26fab36e1 --- /dev/null +++ b/src/rec/recDynLinkTest.c @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/*The remainder of this source module is test code */ +typedef struct userPvt { + char *pvname; + double *pbuffer; + size_t nRequest; +}userPvt; + +LOCAL void mymonitorCallback(recDynLink *precDynLink) +{ + userPvt *puserPvt; + long status; + size_t nRequest; + TS_STAMP timestamp; + short AlarmStatus,AlarmSeverity; + int i; + char timeStr[40]; + + puserPvt = (userPvt *)precDynLink->puserPvt; + printf("mymonitorCallback: %s\n",puserPvt->pvname); + if(recDynLinkConnectionStatus(precDynLink)!=0) { + printf(" not connected\n"); + return; + } + nRequest = puserPvt->nRequest; + status = recDynLinkGet(precDynLink,puserPvt->pbuffer,&nRequest, + ×tamp,&AlarmStatus,&AlarmSeverity); + if(status) { + printf("recDynLinkGet returned illegal status\n"); + return; + } + tsStampToText(×tamp,TS_TEXT_MMDDYY,timeStr); + printf("date %s status %hd severity %hd ", + timeStr,AlarmStatus,AlarmSeverity); + for(i=0; inRequest; i++) { + printf(" %f",puserPvt->pbuffer[i]); + } + printf("\n"); +} + +LOCAL void mysearchCallback(recDynLink *precDynLink) +{ + userPvt *puserPvt; + size_t nelem; + double controlLow,controlHigh; + double graphicLow,graphicHigh; + int prec; + char units[20]; + long status; + + puserPvt = (userPvt *)precDynLink->puserPvt; + printf("mysearchCallback: %s ",puserPvt->pvname); + if(recDynLinkConnectionStatus(precDynLink)==0) { + printf("connected\n"); + status = recDynLinkGetNelem(precDynLink,&nelem); + if(status) { + printf("recDynLinkGetNelem failed\n"); + }else{ + printf("nelem = %u\n",nelem); + } + status=recDynLinkGetControlLimits(precDynLink,&controlLow,&controlHigh); + if(status) { + printf("recDynLinkGetControlLimits failed\n"); + }else{ + printf("controlLow %f controlHigh %f\n",controlLow,controlHigh); + } + status=recDynLinkGetGraphicLimits(precDynLink,&graphicLow,&graphicHigh); + if(status) { + printf("recDynLinkGetGraphicLimits failed\n"); + }else{ + printf("graphicLow %f graphicHigh %f\n",graphicLow,graphicHigh); + } + status = recDynLinkGetPrecision(precDynLink,&prec); + if(status) { + printf("recDynLinkGetPrecision failed\n"); + }else{ + printf("prec = %d\n",prec); + } + status = recDynLinkGetUnits(precDynLink,units,20); + if(status) { + printf("recDynLinkGetUnits failed\n"); + }else{ + printf("units = %s\n",units); + } + } else { + printf(" not connected\n"); + } +} + +LOCAL recDynLink getDynlink = {NULL,NULL}; +LOCAL recDynLink putDynlink = {NULL,NULL}; + +int recDynTestInput(char *pvname,int nRequest) +{ + userPvt *puserPvt= getDynlink.puserPvt; + long status; + int options=0; + + if(puserPvt) { + free(puserPvt->pbuffer); + free(getDynlink.puserPvt); + getDynlink.puserPvt = NULL; + recDynLinkClear(&getDynlink); + } + getDynlink.puserPvt = puserPvt = (userPvt *)calloc(1,sizeof(userPvt)); + puserPvt->pbuffer = calloc(nRequest,sizeof(double)); + puserPvt->nRequest = nRequest; + puserPvt->pvname = pvname; + if(nRequest==1) options=rdlSCALAR;; + status = recDynLinkAddInput(&getDynlink,pvname, + DBR_DOUBLE,options, + mysearchCallback,mymonitorCallback); + if(status) return(status); + return(status); +} + +int recDynTestNewOutput(char *pvname,int nRequest) +{ + userPvt *puserPvt= putDynlink.puserPvt; + long status; + int options=0; + + if(puserPvt) { + free(puserPvt->pbuffer); + free(putDynlink.puserPvt); + putDynlink.puserPvt = NULL; + recDynLinkClear(&putDynlink); + } + putDynlink.puserPvt = puserPvt = (userPvt *)calloc(1,sizeof(userPvt)); + puserPvt->pbuffer = calloc(nRequest,sizeof(double)); + puserPvt->nRequest = nRequest; + puserPvt->pvname = pvname; + if(nRequest==1) options=rdlSCALAR;; + status = recDynLinkAddOutput(&putDynlink,pvname, + DBR_DOUBLE,options,mysearchCallback); + return(status); +} + +int recDynTestOutput(int startValue) +{ + userPvt *puserPvt= putDynlink.puserPvt; + long status; + int i; + + for(i=0; inRequest; i++) puserPvt->pbuffer[i] = startValue + i; + status = recDynLinkPut(&putDynlink,puserPvt->pbuffer,puserPvt->nRequest); + return(status); +} + +int recDynTestClearInput(void) +{ + userPvt *puserPvt= getDynlink.puserPvt; + + free(puserPvt->pbuffer); + free(getDynlink.puserPvt); + getDynlink.puserPvt = NULL; + recDynLinkClear(&getDynlink); + return(0); +} + +int recDynTestClearOutput(void) +{ + userPvt *puserPvt= putDynlink.puserPvt; + + free(puserPvt->pbuffer); + free(putDynlink.puserPvt); + putDynlink.puserPvt = NULL; + recDynLinkClear(&putDynlink); + return(0); +}