/* devDAC16.c */
/*
 *      Author: Makoto Tobiyama
 *      Date:   22/Ma6/2018
 */
#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_AIdevAiDAC16
#defineDSET_AOdevAoDAC16
#defineDSET_BIdevBiDAC16
#defineDSET_BOdevBoDAC16
#defineDSET_LIdevLiDAC16
#defineDSET_LOdevLoDAC16
#defineDSET_MBBOdevMbboDAC16
#defineDSET_MBBIdevMbbiDAC16
#defineDSET_MBBODdevMbbodDAC16
#defineDSET_MBBIDdevMbbidDAC16
#defineDSET_SIdevSiDAC16
#defineDSET_SOdevSoDAC16
#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. */ static char *OnOffList[] = {"ON","OFF"}; static struct devGpibNames OnOffState = {2,OnOffList, 0, 1}; static char *(P01OnOffState1[])={"C01 ON\n","C01 OFF\n",0}; static char *(P02OnOffState1[])={"C02 ON\n","C02 OFF\n",0}; static char *(P03OnOffState1[])={"C03 ON\n","C03 OFF\n",0}; static char *(P04OnOffState1[])={"C04 ON\n","C04 OFF\n",0}; static char *(P05OnOffState1[])={"C05 ON\n","C05 OFF\n",0}; static char *(P06OnOffState1[])={"C06 ON\n","C06 OFF\n",0}; static char *(P07OnOffState1[])={"C07 ON\n","C07 OFF\n",0}; static char *(P08OnOffState1[])={"C08 ON\n","C08 OFF\n",0}; static char *(P09OnOffState1[])={"C09 ON\n","C09 OFF\n",0}; static char *(P10OnOffState1[])={"C10 ON\n","C10 OFF\n",0}; static char *(P11OnOffState1[])={"C11 ON\n","C11 OFF\n",0}; static char *(P12OnOffState1[])={"C12 ON\n","C12 OFF\n",0}; static char *(P13OnOffState1[])={"C13 ON\n","C13 OFF\n",0}; static char *(P14OnOffState1[])={"C14 ON\n","C14 OFF\n",0}; static char *(P15OnOffState1[])={"C15 ON\n","C15 OFF\n",0}; static char *(P16OnOffState1[])={"C16 ON\n","C16 OFF\n",0}; static char *(ROnOffState[])={"ON","OF",0}; #define EOSNL NULL static struct gpibCmd gpibCmds[] = { /* Command 0 CH01 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C01 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 1 CH02 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C02 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 2 CH03 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C03 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 3 CH04 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C04 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 4 CH05 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C05 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 5 CH06 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C06 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 6 CH07 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C07 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 7 CH08 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C08 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 8 CH09 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C09 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 9 CH10 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C10 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 10 CH11 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C11 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 11 CH12 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C12 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 12 CH13 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C13 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 13 CH14 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C14 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 14 CH15 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C15 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 15 CH16 write */ {&DSET_LO,GPIBWRITE,IB_Q_LOW,NULL,"C16 %ld\n",0, 2047, NULL, 0,0,NULL,NULL, EOSNL}, /* Command 16 CH01 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P01OnOffState1, &OnOffState, EOSNL}, /* Command 17 CH01 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C01E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 18 CH02 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P02OnOffState1, &OnOffState, EOSNL}, /* Command 19 CH02 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C02E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 20 CH03 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P03OnOffState1, &OnOffState, EOSNL}, /* Command 21 CH03 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C03E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 22 CH04 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P04OnOffState1, &OnOffState, EOSNL}, /* Command 23 CH04 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C04E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 24 CH05 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P05OnOffState1, &OnOffState, EOSNL}, /* Command 25 CH05 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C05E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 26 CH06 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P06OnOffState1, &OnOffState, EOSNL}, /* Command 27 CH06 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C06E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 28 CH07 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P07OnOffState1, &OnOffState, EOSNL}, /* Command 29 CH07 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C07E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 30 CH08 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P08OnOffState1, &OnOffState, EOSNL}, /* Command 31 CH08 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C08E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 32 CH09 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P09OnOffState1, &OnOffState, EOSNL}, /* Command 33 CH09 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C09E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 34 CH10 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P10OnOffState1, &OnOffState, EOSNL}, /* Command 35 CH10 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C10E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 36 CH11 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P11OnOffState1, &OnOffState, EOSNL}, /* Command 37 CH11 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C11E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 38 CH12 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P12OnOffState1, &OnOffState, EOSNL}, /* Command 39 CH12 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C12E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 40 CH13 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P13OnOffState1, &OnOffState, EOSNL}, /* Command 41 CH13 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C13E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 42 CH14 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P14OnOffState1, &OnOffState, EOSNL}, /* Command 43 CH14 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C14E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 44 CH15 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P15OnOffState1, &OnOffState, EOSNL}, /* Command 45 CH15 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C15E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 46 CH16 off/on off = 0 */ {&DSET_BO,GPIBEFASTO,IB_Q_LOW,NULL,NULL,0,2047,NULL,0,0, P16OnOffState1, &OnOffState, EOSNL}, /* Command 47 CH16 off/on read */ {&DSET_BI,GPIBEFASTI,IB_Q_LOW,"C16E?\n",NULL,0,2047,NULL,0,0, ROnOffState, &OnOffState, EOSNL}, /* Command 48 CH01 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C01?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 49 CH02 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C02?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 50 CH03 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C03?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 51 CH04 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C04?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 52 CH05 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C05?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 53 CH06 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C06?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 54 CH07 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C07?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 55 CH08 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C08?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 56 CH09 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C09?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 57 CH10 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C10?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 58 CH11 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C11?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 59 CH12 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C12?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 60 CH13 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C13?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 61 CH14 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C14?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 62 CH15 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C15?\n","%ld\n", 0, 2047, NULL, 0, 0, NULL,NULL, EOSNL}, /* Command 63 CH16 read */ {&DSET_LI,GPIBREAD,IB_Q_LOW,"C16?\n","%ld\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 = "devDAC16"; devSupParms.gpibCmds = gpibCmds; devSupParms.numparams = NUMPARAMS; devSupParms.timeout = TIMEOUT; devSupParms.timeWindow = TIMEWINDOW; devSupParms.respond2Writes = -1.0; } return(0); }