Added raw reading capability to the waveform record support.

This commit is contained in:
John Winans
1995-11-27 22:13:22 +00:00
parent b2ad0b6e1d
commit ef13c2bb75

View File

@@ -3,6 +3,10 @@
/*
* $Log$
* Revision 1.25 1995/07/31 19:44:08 winans
* Changed the parameter table and associated support routines to support
* buffer length specifications of size long instead of short.
*
* Revision 1.24 1995/03/10 16:55:40 winans
* Added waveform writing support
*
@@ -2351,7 +2355,8 @@ void (*process)();
if (parmBlock->gpibCmds[((struct gpibDpvt *)pwf->dpvt)->parm].type != GPIBREAD &&
parmBlock->gpibCmds[((struct gpibDpvt *)pwf->dpvt)->parm].type != GPIBWRITE &&
parmBlock->gpibCmds[((struct gpibDpvt *)pwf->dpvt)->parm].type != GPIBSOFT &&
parmBlock->gpibCmds[((struct gpibDpvt *)pwf->dpvt)->parm].type != GPIBREADW)
parmBlock->gpibCmds[((struct gpibDpvt *)pwf->dpvt)->parm].type != GPIBREADW &&
parmBlock->gpibCmds[((struct gpibDpvt *)pwf->dpvt)->parm].type != GPIBRAWREAD)
{
sprintf(message, "%s: devGpibLib_initWf: invalid command type for an WF record in param %d\n", pwf->name, ((struct gpibDpvt *)pwf->dpvt)->parm);
errMessage(S_db_badField, message);
@@ -2445,9 +2450,6 @@ struct gpibDpvt *pdpvt;
/**** Handle writes internally... the generic routine will not work ****/
if (pCmd->type == GPIBWRITE)
{
/*
* check to see if this node has timed out within last 10 sec
*/
if(tickGet() < (pdpvt->phwpvt->tmoVal + parmBlock->timeWindow) )
{
if (*parmBlock->debugFlag)
@@ -2455,21 +2457,31 @@ struct gpibDpvt *pdpvt;
OperationStatus = ERROR;
}
else if (pCmd->convert == NULL)
{
if (*parmBlock->debugFlag)
printf("devGpibLib_xxGpibWork(): Waveform write command w/o conversion routine spec'd\n");
OperationStatus = ERROR;
}
else
{
if(*parmBlock->debugFlag)
printf("devGpibLib_wfGpibWork: calling convert ...\n");
(*(pCmd->convert))(pdpvt,pCmd->P1,pCmd->P2, pCmd->P3);
OperationStatus = (*(drvGpib.writeIb))(pdpvt->head.pibLink,
ibnode, pdpvt->msg, pCmd->msgLen, pdpvt->head.dmaTimeout);
ibnode, pdpvt->msg, pwf->nord, pdpvt->head.dmaTimeout);
if(*parmBlock->debugFlag)
printf("devGpibLib_xxGpibWork : done, status = %d\n",OperationStatus);
/* if error occurrs then mark it with time */
if(OperationStatus == ERROR)
{
(pdpvt->phwpvt->tmoCount)++; /* count timeouts */
pdpvt->phwpvt->tmoVal = tickGet(); /* set last timeout time */
}
}
/* if error occurrs then mark it with time */
if(OperationStatus == ERROR)
{
(pdpvt->phwpvt->tmoCount)++; /* count timeouts */
pdpvt->phwpvt->tmoVal = tickGet(); /* set last timeout time */
}
}
else
@@ -2542,26 +2554,29 @@ int
devGpibLib_wfGpibFinish(pdpvt)
struct gpibDpvt *pdpvt;
{
double value;
struct waveformRecord *pwf = ((struct waveformRecord *)(pdpvt->precord));
struct devGpibParmBlock *parmBlock;
struct gpibCmd *pCmd;
double value;
struct waveformRecord *pwf = ((struct waveformRecord *)(pdpvt->precord));
struct devGpibParmBlock *parmBlock;
struct gpibCmd *pCmd;
parmBlock = (struct devGpibParmBlock *)(((gDset*)(pwf->dset))->funPtr[pwf->dset->number]);
pCmd = &(parmBlock->gpibCmds[pdpvt->parm]);
parmBlock = (struct devGpibParmBlock *)(((gDset*)(pwf->dset))->funPtr[pwf->dset->number]);
pCmd = &(parmBlock->gpibCmds[pdpvt->parm]);
if (pCmd->convert != NULL)
{
if(*parmBlock->debugFlag)
printf("devGpibLib_wfGpibWork: calling convert ...\n");
if (pCmd->type != GPIBWRITE)
{
if (pCmd->convert != NULL)
{
if(*parmBlock->debugFlag)
printf("devGpibLib_wfGpibWork: calling convert ...\n");
(*(pCmd->convert))(pdpvt,pCmd->P1,pCmd->P2, pCmd->P3);
}
else /* for waveforms no standard conversion is supplied */
{
devGpibLib_setPvSevr(pwf,READ_ALARM,VALID_ALARM);
}
(*(pCmd->convert))(pdpvt,pCmd->P1,pCmd->P2, pCmd->P3);
}
else /* for waveforms no standard conversion is supplied */
{
devGpibLib_setPvSevr(pwf,READ_ALARM,VALID_ALARM);
}
}
RegisterProcessCallback(&pdpvt->head.callback, priorityLow, pdpvt);
return(0);
}