/* 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.
***********************************************************************/
| #define | DSET_AI | | devAiDAC16 |
| #define | DSET_AO | | devAoDAC16 |
| #define | DSET_BI | | devBiDAC16 |
| #define | DSET_BO | | devBoDAC16 |
| #define | DSET_LI | | devLiDAC16 |
| #define | DSET_LO | | devLoDAC16 |
| #define | DSET_MBBO | devMbboDAC16 |
| #define | DSET_MBBI | devMbbiDAC16 |
| #define | DSET_MBBOD | devMbbodDAC16 |
| #define | DSET_MBBID | devMbbidDAC16 |
| #define | DSET_SI | | devSiDAC16 |
| #define | DSET_SO | | devSoDAC16 |
#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 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 = "devDAC16";
devSupParms.gpibCmds = gpibCmds;
devSupParms.numparams = NUMPARAMS;
devSupParms.timeout = TIMEOUT;
devSupParms.timeWindow = TIMEWINDOW;
devSupParms.respond2Writes = -1.0;
}
return(0);
}