/*
 * Tsuji-denshi T2917 I/O module device support
 */

#include <epicsStdio.h>
#include <devCommonGpib.h>
#include <string.h>
#include <strings.h>

/******************************************************************************
 *
 * The following define statements are used to declare the names to be used
 * for the dset tables.   
 *
 * A DSET_AI entry must be declared here and referenced in an application
 * database description file even if the device provides no AI records.
 *
 ******************************************************************************/
#define DSET_AI     devAiT2917
#define DSET_AO     devAoT2917
#define DSET_BI     devBiT2917
#define DSET_BO     devBoT2917
#define DSET_EV     devEvT2917
#define DSET_LI     devLiT2917
#define DSET_LO     devLoT2917
#define DSET_MBBI   devMbbiT2917
#define DSET_MBBID  devMbbidT2917
#define DSET_MBBO   devMbboT2917
#define DSET_MBBOD  devMbbodT2917
#define DSET_SI     devSiT2917
#define DSET_SO     devSoT2917
#define DSET_WF     devWfT2917

#include <devGpib.h> /* must be included after DSET defines */

#define TIMEOUT     1.0    /* I/O must complete within this time */
#define TIMEWINDOW  2.0    /* Wait this long after device timeout */

# line 2 "devT2917.gt"

/* static short get_onedata(char wa1[]);
static int rd_data(char wav[], short temp[]);
static int rd_wf_data(struct gpibDpvt *pdpvt,  int p1, int p2, char **p3);
*/
/*static int rd_efast_data(struct gpibDpvt *pdpvt,  int p1, int p2, char **p3);
 */

/******************************************************************************
 * Strings used by the init routines to fill in the znam,onam,...
 * fields in BI and BO record types.
 ******************************************************************************/
/*static char                *AcqStateList[] = { "STOP", "RUN" };
static struct devGpibNames AcqState = { 2, AcqStateList, 0, 1 };
*/


/******************************************************************************
 * Structures used by the init routines to fill in the onst,twst,... and the
 * onvl,twvl,... fields in MBBI and MBBO record types.
 *
 * Note that the intExtSsBm and intExtSsBmStop structures use the same
 * intExtSsBmStopList and intExtSsBmStopVal lists but have a different number
 * of elements in them that they use... The intExtSsBm structure only represents
 * 4 elements,while the intExtSsBmStop structure represents 5.
 ******************************************************************************/


/******************************************************************************
 * String arrays for EFAST operations. The last entry must be 0.
 *
 * On input operations,only as many bytes as are found in the string array
 * elements are compared.  Additional bytes are ignored.
 * The first matching string  will be used as a match.
 *
 * For the input operations,the strings are compared literally!  This
 * can cause problems if the instrument is returning things like \r and \n
 * characters.  When defining input strings so you include them as well.
 ******************************************************************************/

/******************************************************************************
 * Array of structures that define all GPIB messages
 * supported for this type of instrument.
 ******************************************************************************/

static struct gpibCmd gpibCmds[] = { 
  /* Command 0 out ch1 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out1 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 1 out ch2 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out2 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 2 out ch3 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out3 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 3 out ch4 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out4 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 4 out ch5 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out5 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 5 out ch6 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out6 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 6 out ch7 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out7 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 7 out ch8 */
  {&DSET_BO,GPIBWRITE,IB_Q_LOW,NULL,"out8 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 8 inp ch1 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in1\r\n","IN1 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 9 inp ch2 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in2\r\n","IN2 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 10 inp ch3 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in3\r\n","IN3 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 11 inp ch4 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in4\r\n","IN4 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 12 inp ch5 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in5\r\n","IN5 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 13 inp ch6 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in6\r\n","IN6 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 14 inp ch7 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in7\r\n","IN7 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 15 inp ch8 */
  {&DSET_BI,GPIBREAD,IB_Q_LOW,"in8\r\n","IN8 %d\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 16 out all */
  {&DSET_MBBOD,GPIBWRITE,IB_Q_LOW,NULL,"out %2X\r\n",0,127,NULL,0,0,NULL,NULL,NULL},
  /* Command 17 in all */  
  {&DSET_MBBID,GPIBREAD,IB_Q_LOW,"in\r\n","IN %X\r\n",0,127,NULL,0,0,NULL,NULL,NULL}


  
};




/* The following is the number of elements in the command array above.  */
#define NUMPARAMS sizeof(gpibCmds)/sizeof(struct gpibCmd)

/******************************************************************************
 * Initialize device support parameters
 *
 *****************************************************************************/
static long init_ai(int parm)
{
    if(parm==0) {
        devSupParms.name = "devT2917";
        devSupParms.gpibCmds = gpibCmds;
        devSupParms.numparams = NUMPARAMS;
        devSupParms.timeout = TIMEOUT;
        devSupParms.timeWindow = TIMEWINDOW;
        devSupParms.respond2Writes = 0;
    }
    return(0);
}

/******************************************************************************
 *
 * c code
 *
 *****************************************************************************/
# line 60 "devT2917.gt"