From 35f0be8ea0cefd0a9534e7f0b74d313d9a5e787d Mon Sep 17 00:00:00 2001 From: "Janet B. Anderson" Date: Fri, 28 Feb 1992 17:38:13 +0000 Subject: [PATCH] Changed callback handling, ANSI C changes --- src/dev/devWfJoergerVtr1.c | 29 ++++++----------------------- src/dev/devWfXy566Sc.c | 33 +++++++++------------------------ 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/src/dev/devWfJoergerVtr1.c b/src/dev/devWfJoergerVtr1.c index 7a15ed11b..635468205 100644 --- a/src/dev/devWfJoergerVtr1.c +++ b/src/dev/devWfJoergerVtr1.c @@ -34,6 +34,7 @@ * .02 12-02-91 jba Added cmd control to io-interrupt processing * .03 12-12-91 jba Set cmd to zero in io-interrupt processing * .04 02-05-92 jba Changed function arguments from paddr to precord + * .05 02-28-92 jba Changed callback handling, ANSI C changes * ... */ @@ -71,20 +72,14 @@ struct { init_record, get_ioint_info, read_wf}; -/* control block for callback */ -struct callback{ - struct dbAddr dbAddr; - void (*process)(); -}; -static void myCallback(pcallback,no_read,pdata) - struct callback *pcallback; +static void myCallback(pwf,no_read,pdata) + struct waveformRecord *pwf; int no_read; unsigned short *pdata; { - struct waveformRecord *pwf= - (struct waveformRecord *)(pcallback->dbAddr.precord); + struct rset *prset=(struct rset *)(pwf->rset); short ftvl = pwf->ftvl; long i; @@ -111,7 +106,7 @@ static void myCallback(pcallback,no_read,pdata) "read_wf - illegal ftvl"); recGblSetSevr(pwf,READ_ALARM,VALID_ALARM); } - (pcallback->process)(pwf); + (*prset->process)(pwf); dbScanUnlock((struct dbCommon *)pwf); } @@ -136,18 +131,10 @@ static long init_record(pwf,process) void (*process)(); { char message[100]; - struct callback *pcallback; /* wf.inp must be an VME_IO */ switch (pwf->inp.type) { case (VME_IO) : - pcallback = (struct callback *)(calloc(1,sizeof(struct callback))); - pwf->dpvt = (caddr_t)pcallback; - if(dbNameToAddr(pwf->name,&(pcallback->dbAddr))) { - logMsg("dbNameToAddr failed in init_record for devWfJoergerVtr1\n"); - exit(1); - } - pcallback->process = process; break; default : strcpy(message,pwf->name); @@ -161,10 +148,6 @@ static long init_record(pwf,process) static long read_wf(pwf) struct waveformRecord *pwf; { - char message[100]; - struct callback *pcallback=(struct callback *)(pwf->dpvt); - unsigned short value; - struct vmeio *pvmeio; long status; @@ -186,7 +169,7 @@ struct waveformRecord *pwf; struct vmeio *pvmeio = (struct vmeio *)&(pwf->inp.value); pwf->busy = TRUE; - if(wf_driver(JGVTR1,pvmeio->card,myCallback,pwf->dpvt)<0){ + if(wf_driver(JGVTR1,pvmeio->card,myCallback,pwf)<0){ recGblSetSevr(pwf,READ_ALARM,VALID_ALARM); pwf->busy = FALSE; return(0); diff --git a/src/dev/devWfXy566Sc.c b/src/dev/devWfXy566Sc.c index 8e771946b..40f2f17c9 100644 --- a/src/dev/devWfXy566Sc.c +++ b/src/dev/devWfXy566Sc.c @@ -32,6 +32,7 @@ * ----------------- * .01 11-11-91 jba Moved set of alarm stat and sevr to macros * .02 02-05-92 jba Changed function arguments from paddr to precord + * .03 02-28-92 jba Changed callback handling, ANSI C changes * ... */ @@ -39,6 +40,8 @@ #include #include #include +#include +#include #include #include @@ -68,34 +71,28 @@ struct { init_record, NULL, read_wf}; -/* control block for callback */ -struct callback{ - struct dbAddr dbAddr; - void (*process)(); -}; -static void myCallback(pcallback,no_read,pdata) - struct callback *pcallback; +static void myCallback(pwf,no_read,pdata) + struct waveformRecord *pwf; int no_read; unsigned char *pdata; { - struct waveformRecord *pwf= - (struct waveformRecord *)(pcallback->dbAddr.precord); + struct rset *prset=(struct rset *)(pwf->rset); short ftvl = pwf->ftvl; if(!pwf->busy) return; dbScanLock((struct dbCommon *)pwf); pwf->busy = FALSE; if(ftvl==DBF_SHORT || ftvl==DBF_USHORT) { - bcopy(pdata,pwf->bptr,no_read*2); + memcpy(pdata,pwf->bptr,no_read*2); pwf->nord = no_read; /* number of values read */ } else { recGblRecordError(S_db_badField,pwf, "read_wf - illegal ftvl"); recGblSetSevr(pwf,READ_ALARM,VALID_ALARM); } - (pcallback->process)(pwf); + (*prset->process)(pwf); dbScanUnlock((struct dbCommon *)pwf); } @@ -104,18 +101,10 @@ static long init_record(pwf,process) void (*process)(); { char message[100]; - struct callback *pcallback; /* wf.inp must be an VME_IO */ switch (pwf->inp.type) { case (VME_IO) : - pcallback = (struct callback *)(calloc(1,sizeof(struct callback))); - pwf->dpvt = (caddr_t)pcallback; - if(dbNameToAddr(pwf->name,&(pcallback->dbAddr))) { - logMsg("dbNameToAddr failed in init_record for devWfXy566Sc\n"); - exit(1); - } - pcallback->process = process; break; default : strcpy(message,pwf->name); @@ -129,10 +118,6 @@ static long init_record(pwf,process) static long read_wf(pwf) struct waveformRecord *pwf; { - char message[100]; - struct callback *pcallback=(struct callback *)(pwf->dpvt); - unsigned short value; - struct vmeio *pvmeio; long status; @@ -155,7 +140,7 @@ struct waveformRecord *pwf; struct vmeio *pvmeio = (struct vmeio *)&(pwf->inp.value); pwf->busy = TRUE; - if(wf_driver(XY566WF,pvmeio->card,myCallback,pwf->dpvt)<0) { + if(wf_driver(XY566WF,pvmeio->card,myCallback,pwf)<0) { recGblSetSevr(pwf,READ_ALARM,VALID_ALARM); pwf->busy = FALSE; return(0);