/* Devdg645.c */
/*
* Author: Makoto Tobiyama
* Date: 9/Mar/2017
*/
#include <epicsStdio.h>
#include <devCommonGpib.h>
#include <string.h>
#include <strings.h>
/***********************************************************************
* asynDriver is distributed subject to a Software License Agreement
* found in file LICENSE that is included with this distribution.
***********************************************************************/
| #define | DSET_AI | | devAiDG645 |
| #define | DSET_AO | | devAoDG645 |
| #define | DSET_BI | | devBiDG645 |
| #define | DSET_BO | | devBoDG645 |
| #define | DSET_LI | | devLiDG645 |
| #define | DSET_LO | | devLoDG645 |
| #define | DSET_MBBO | devMbboDG645 |
| #define | DSET_MBBI | devMbbiDG645 |
| #define | DSET_MBBOD | devMbbodDG645 |
| #define | DSET_MBBID | devMbbidDG645 |
| #define | DSET_SI | | devSiDG645 |
| #define | DSET_SO | | devSoDG645 |
#include <devGpib.h> /* must be included after DSET defines */
#define TIMEOUT 0.01 /* I/O must complete within this time */
#define TIMEWINDOW 0.001 /* Wait this long after device timeout */
/*
* Define end-of-string character(s) here to allow
* easier changes when testing the driver.
*/
#define EOSNL NULL
static struct gpibCmd gpibCmds[] = {
/* Command 0 Remote mode */
/* Command 0 Initiate Trigger */
{&DSET_BO, GPIBWRITE, IB_Q_LOW, NULL, "*TRG\n", 0, 2047, NULL, 0, 0, NULL, NULL, EOSNL },
/* Command 1 Trigger source */
{&DSET_LO, GPIBWRITE, IB_Q_LOW, NULL, "TSRC %d\n", 0, 2047, NULL, 0, 0, NULL, NULL, EOSNL },
/* Command 2 Triiger source read */
{&DSET_LI, GPIBREAD, IB_Q_LOW, "TSRC?\n", "%d\n", 0, 2047, NULL, 0, 0, NULL, NULL, EOSNL },
/* Command 3 AB Delay set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 2,0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 4 AB Width set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 3,2,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 5 AB Delay read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?2\n","0,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 6 AB Width read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?3\n","2,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 7 AB Level Amplitude set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LAMP 1,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 8 AB Level Offset set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LOFF 1,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 9 AB Level Polarity set */
{&DSET_BO, GPIBWRITE,IB_Q_LOW,NULL,"LPOL 1,%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 10 AB Level Amplitude read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LAMP?1\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 11 AB Level Offset read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LOFF?1\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 12 AB Level Polarity read */
{&DSET_BI, GPIBREAD,IB_Q_LOW,"LPOL?1\n","%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 13 CD Delay set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 4,0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 14 CD Width set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 5,4,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 15 CD Delay read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?4\n","0,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 16 CD Width read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?5\n","4,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 17 CD Level Amplitude set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LAMP 2,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 18 CD Level Offset set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LOFF 2,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 19 CD Level Polarity set */
{&DSET_BO, GPIBWRITE,IB_Q_LOW,NULL,"LPOL 2,%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 20 CD Level Amplitude read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LAMP?2\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 21 CD Level Offset read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LOFF?2\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 22 CD Level Polarity read */
{&DSET_BI, GPIBREAD,IB_Q_LOW,"LPOL?2\n","%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 23 EF Delay set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 6,0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 24 EF Width set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 7,6,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 25 EF Delay read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?6\n","0,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 26 EF Width read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?7\n","6,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 27 EF Level Amplitude set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LAMP 3,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 28 EF Level Offset set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LOFF 3,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 29 EF Level Polarity set */
{&DSET_BO, GPIBWRITE,IB_Q_LOW,NULL,"LPOL 3,%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 30 EF Level Amplitude read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LAMP?3\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 31 EF Level Offset read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LOFF?3\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 32 EF Level Polarity read */
{&DSET_BI, GPIBREAD,IB_Q_LOW,"LPOL?3\n","%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 33 GH Delay set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 8,0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 34 GH Width set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 9,8,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 35 GH Delay read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?8\n","0,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 36 GH Width read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?9\n","8,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 37 GH Level Amplitude set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LAMP 4,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 38 GH Level Offset set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LOFF 4,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 39 GH Level Polarity set */
{&DSET_BO, GPIBWRITE,IB_Q_LOW,NULL,"LPOL 4,%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 40 GH Level Amplitude read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LAMP?4\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 41 GH Level Offset read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LOFF?4\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 42 GH Level Polarity read */
{&DSET_BI, GPIBREAD,IB_Q_LOW,"LPOL?4\n","%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 43 T0 Delay set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 0,0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 44 T0 Width set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"DLAY 1,0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 45 T0 Delay read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?0\n","0,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 46 T0 Width read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"DLAY?1\n","0,%le\n",0,2047,NULL,0,0,NULL,NULL, EOSNL},
/* Command 47 T0 Level Amplitude set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LAMP 0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 48 T0 Level Offset set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW,NULL,"LOFF 0,%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 49 T0 Level Polarity set */
{&DSET_BO, GPIBWRITE,IB_Q_LOW,NULL,"LPOL 0,%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 50 T0 Level Amplitude read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LAMP?0\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 51 T0 Level Offset read */
{&DSET_AI, GPIBREAD,IB_Q_LOW,"LOFF?0\n","%le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 52 T0 Level Polarity read */
{&DSET_BI, GPIBREAD,IB_Q_LOW,"LPOL?0\n","%d\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 53 Inhibit set */
{&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"INHB %ld\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 54 Inhibit read */
{&DSET_LI,GPIBREAD,IB_Q_LOW,"INHB?\n","%ld\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 55 Holdoff set */
{&DSET_AO,GPIBWRITE,IB_Q_LOW,NULL,"HOLD %le\n",0,2047,NULL,0,0,NULL,NULL,EOSNL},
/* Command 56 Holdoff read */
{&DSET_AI,GPIBREAD,IB_Q_LOW,"HOLD?\n","%le\n",0,2047,NULL, 0, 0, NULL, NULL, EOSNL},
/* Command 57 Trigger level set */
{&DSET_AO, GPIBWRITE,IB_Q_LOW, NULL, "TLVL %le\n", 0, 2047, NULL, 0, 0, NULL, NULL, EOSNL},
/* Command 58 Triiger level read */
{&DSET_AI, GPIBREAD, IB_Q_LOW, "TLVL?\n", "%le\n", 0, 2047, NULL, 0, 0, NULL, NULL, EOSNL}
};
/* The following is the number of elements in the command array above. */
| #define NUMPARAMS | sizeof(gpibCmds)/sizeof(struct gpibCmd) |
/******************************************************************************
*
* Initialization for device support
* This is called one time before any records are initialized with a parm
* value of 0. And then again AFTER all record-level init is complete
* with a param value of 1.
*
******************************************************************************/
static long init_ai(int parm)
{
if(parm==0) {
devSupParms.name = "devDG645";
devSupParms.gpibCmds = gpibCmds;
devSupParms.numparams = NUMPARAMS;
devSupParms.timeout = TIMEOUT;
devSupParms.timeWindow = TIMEWINDOW;
devSupParms.respond2Writes = -1.0;
}
return(0);
}