/* 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.
***********************************************************************/
#defineDSET_AIdevAiDG645
#defineDSET_AOdevAoDG645
#defineDSET_BIdevBiDG645
#defineDSET_BOdevBoDG645
#defineDSET_LIdevLiDG645
#defineDSET_LOdevLoDG645
#defineDSET_MBBOdevMbboDG645
#defineDSET_MBBIdevMbbiDG645
#defineDSET_MBBODdevMbbodDG645
#defineDSET_MBBIDdevMbbidDG645
#defineDSET_SIdevSiDG645
#defineDSET_SOdevSoDG645
#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 NUMPARAMSsizeof(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); }