Today, Zen presented a talk on asynportdriver. During the discussion, we talked about aai, aao and waveform and Steph suggested a codeathon task to
combine them all into waveform and have a flag to define your own bptr. I mentioned that this can be done in waveform as is, by freeing bptr.
Here is the init routine that does that (in orange)
/* $Id: devWaveformLlrf.c,v 1.20 2009/06/05 00:43:09 dayle Exp $ */
/*=============================================================================
Name: devWaveformLlrf.c
Abs: Device support for saving raw digitizer data into a waveform
(4 channels into a single, row-major array).
Auth: 10-nov-2006, Till Straumann (TSS)
Rev: 2008 Dayle Kotturi: adapt read_waveform contents to LLRF app
-----------------------------------------------------------------------------*/
#if 0
#include "copyright_SLAC.h" /* SLAC copyright comments */
#endif
/*-----------------------------------------------------------------------------
Mod: (see CVS log)
=============================================================================*/
...
static long
init_record(void *record_p)
{
waveformRecord *waveform_ps = record_p;
DevWfRawSigDpvt_tps dpvt_ps;
/* Check DB configuration */
if ( waveform_ps->ftvl != menuFtypeSHORT )
epicsPrintf(DEVSUPNAM": FTVL is SHORT\n");
/* Set NELM to what the driver is configured for */
free(waveform_ps->bptr);
waveform_ps->nelm = 4*drvPadUdpCommGetNsamples(/dpvt_ps->station_type/);
epicsPrintf(DEVSUPNAM": NELM is %d\n", (int) waveform_ps->nelm);
if ( !(waveform_ps->bptr = calloc(waveform_ps->nelm, sizeof(short))) )
if ( VME_IO != waveform_ps->inp.type )
epicsPrintf(DEVSUPNAM": INP is VME_IO\n");
if ( !(dpvt_ps = calloc(1, sizeof(*dpvt_ps))) )
waveform_ps->dpvt = dpvt_ps;
if ( drvPadUdpCommDpvtInit(&dpvt_ps->drvPadUdpCommPart, waveform_ps->inp.value.vmeio.card) )
goto egress;
epicsPrintf(DEVSUPNAM": DPVT initialized\n");
dpvt_ps->station_type = waveform_ps->inp.value.vmeio.card;
#ifdef DEBUG_PRINT
DEBUGPRINT(DP_INFO, devWaveformLlrfFlag,
("init_waveform: Record %s setting station to card #%d\n",
waveform_ps->name, dpvt_ps->station_type));
#endif
return 0;
egress:
waveform_ps->pact = 1;
return -1;
}