IOCINFRAApp/src/drvAsynKeithley648x.cpp
author Heinz Junkes <junkes@fhi-berlin.mpg.de>
Wed, 15 Jul 2020 08:12:22 +0200
changeset 2 320de4b4c9ee
parent 0 77d8eafe2a07
permissions -rw-r--r--
Add 2nd moxa XGS600 and TPG256
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     1
/*
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     2
 Description
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     3
    This module provides support for a multiple device port driver. To
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     4
    initialize the driver, the method drvAsynKeithley6485() is called from the
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     5
    startup script with the following calling sequence.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     6
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     7
        drvAsynKeithley6485(myport,ioport,ioaddr)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     8
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
     9
        Where:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    10
            myport - Keithley6485 Asyn interface port driver name (i.e. "EP0" )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    11
            ioport - Communication port driver name (i.e. "S0" )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    12
            ioaddr - Communication port device addr
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    13
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    14
    The method dbior can be called from the IOC shell to display the current
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    15
    status of the driver.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    16
*/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    17
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    18
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    19
/* System related include files */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    20
#include <math.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    21
#include <stdio.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    22
#include <stdlib.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    23
#include <string.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    24
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    25
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    26
/* EPICS system related include files */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    27
#include <iocsh.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    28
#include <epicsStdio.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    29
#include <cantProceed.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    30
#include <epicsString.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    31
#include <epicsExport.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    32
#include <errlog.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    33
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    34
/* EPICS synApps/Asyn related include files */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    35
#include <asynDriver.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    36
#include <asynDrvUser.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    37
#include <asynInt32.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    38
#include <asynFloat64.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    39
#include <asynOctet.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    40
#include <asynOctetSyncIO.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    41
#include <asynStandardInterfaces.h>
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    42
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    43
/* Define symbolic constants */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    44
#define TIMEOUT         (5.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    45
#define BUFFER_SIZE     (100)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    46
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    47
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    48
typedef enum {Octet=1, Float64=2, Int32=3} Type;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    49
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    50
static const char *driver = "drvAsynKeithley648x";      /* String for asynPrint */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    51
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    52
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    53
/* Declare port driver structure */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    54
struct Port
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    55
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    56
  int devtype; // 1:6485, 2:6487
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    57
  char* myport;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    58
  char* ioport;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    59
  int ioaddr;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    60
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    61
  int init; // really needed??
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    62
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    63
  char model[BUFFER_SIZE+1], *serial, *dig_rev, *disp_rev, *brd_rev;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    64
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    65
  struct
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    66
  {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    67
    int ioErrors;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    68
    int writeReads;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    69
    int writeOnlys;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    70
  } stats;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    71
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    72
  struct
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    73
  {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    74
    double reading;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    75
    int timestamp;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    76
    union 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    77
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    78
      int raw;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    79
      struct 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    80
      {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    81
        unsigned int overflow             : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    82
        unsigned int filter_enabled       : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    83
        unsigned int math_enabled         : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    84
        unsigned int null_enabled         : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    85
        unsigned int limit_test           : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    86
        unsigned int limit_result         : 2;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    87
        unsigned int overvoltage          : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    88
        unsigned int padding              : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    89
        unsigned int zero_check_enabled   : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    90
        unsigned int zero_correct_enabled : 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    91
      } bits;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    92
    } status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    93
    /* 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    94
       Bits:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    95
       0 (OFLO)   — Set to 1 if measurement performed while in over-range 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    96
                    (overflowed reading).
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    97
       1 (Filter) — Set to 1 when measurement performed with the averaging 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    98
                    filter enabled.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
    99
       2 (Math)   — Set to 1 when measurement performed with CALC1 enabled.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   100
       3 (Null)   — Set to 1 if null for CALC2 is enabled.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   101
       4 (Limits) — Set to 1 if a limit test (CALC2) is enabled.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   102
       5 & 6 (Limit Results) — Provides limit test results:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   103
                Bit 6    Bit 5   
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   104
                  0        0      All limit tests passed
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   105
                  0        1      CALC2:LIM1 test failed
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   106
                  1        0      CALC2:LIM2 test failed
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   107
       7 (Overvoltage)  — Set to 1 if measurement performed with an 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   108
                          overvoltage condition on the input.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   109
       9 (Zero Check)   — Set to 1 when zero check is enabled.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   110
      10 (Zero Correct) — Set to 1 when zero correct is enabled.
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   111
    */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   112
    int eom;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   113
  } data;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   114
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   115
  /* Asyn info */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   116
  asynUser *pasynUser;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   117
  asynUser *pasynUserTrace;  /* asynUser for asynTrace on this port */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   118
  asynStandardInterfaces asynStdInterfaces;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   119
};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   120
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   121
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   122
struct Command
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   123
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   124
  const char *tag;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   125
  int dev;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   126
  int type;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   127
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   128
};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   129
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   130
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   131
/* Declare command structure */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   132
struct GenCommand
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   133
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   134
  asynStatus (*readFunc)(int which, Port *pport, void* data, Type Iface, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   135
                         size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   136
  asynStatus (*writeFunc)(int which, Port *pport, void* data, Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   137
};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   138
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   139
struct SimpleCommand
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   140
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   141
  int type;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   142
  const char *cmd_str;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   143
};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   144
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   145
/* Public interface forward references */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   146
int drvAsynKeithley648x(const char* myport,const char* ioport, int ioaddr);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   147
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   148
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   149
/* Forward references for asynCommon methods */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   150
static void report(void* ppvt,FILE* fp,int details);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   151
static asynStatus connect(void* ppvt,asynUser* pasynUser);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   152
static asynStatus disconnect(void* ppvt,asynUser* pasynUser);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   153
static asynCommon ifaceCommon = {report,connect,disconnect};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   154
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   155
/* Forward references for asynDrvUser methods */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   156
static asynStatus create(void* ppvt,asynUser* pasynUser,const char* drvInfo,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   157
                         const char** pptypeName,size_t* psize);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   158
static asynStatus destroy(void* ppvt,asynUser* pasynUser);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   159
static asynStatus gettype(void* ppvt,asynUser* pasynUser,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   160
                          const char** pptypeName,size_t* psize);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   161
static asynDrvUser ifaceDrvUser = {create,gettype,destroy};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   162
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   163
/* Forward references for asynFloat64 methods */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   164
static asynStatus readFloat64(void* ppvt,asynUser* pasynUser,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   165
                              epicsFloat64* value);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   166
static asynStatus writeFloat64(void* ppvt,asynUser* pasynUser,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   167
                               epicsFloat64 value);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   168
static asynFloat64 ifaceFloat64 = {writeFloat64, readFloat64};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   169
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   170
/* Forward references for asynInt32 methods */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   171
static asynStatus readInt32(void* ppvt,asynUser* pasynUser,epicsInt32* value);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   172
static asynStatus writeInt32(void* ppvt,asynUser* pasynUser,epicsInt32 value);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   173
static asynInt32 ifaceInt32 =  {writeInt32, readInt32};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   174
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   175
/* Forward references for asynOctet methods */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   176
static asynStatus flushOctet( void* ppvt, asynUser* pasynUser);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   177
static asynStatus writeOctet( void* ppvt, asynUser* pasynUser, const char *data,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   178
                              size_t numchars, size_t* nbytes);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   179
static asynStatus readOctet( void* ppvt, asynUser* pasynUser, char* data,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   180
                             size_t maxchars, size_t *nbytes, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   181
static asynOctet ifaceOctet = { writeOctet, readOctet, flushOctet};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   182
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   183
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   184
/* Forward references for external asynOctet interface */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   185
static asynStatus writeOnly(Port* pport, const char* outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   186
static asynStatus writeRead(Port* pport, const char* outBuf, char* inpBuf,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   187
                            int inputSize, int *eomReason);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   188
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   189
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   190
static asynStatus readDummy(int which, Port *pport, void *data, Type Iface, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   191
                            size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   192
static asynStatus writeDummy(int which, Port *pport, void* data, Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   193
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   194
static asynStatus readSimpleData( int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   195
                                  Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   196
static asynStatus writeSimpleData( int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   197
                                   Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   198
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   199
static asynStatus readCache(int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   200
                            Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   201
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   202
static asynStatus readSensorReading(int which, Port *pport, void* data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   203
                                    Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   204
static asynStatus readRange(int which, Port *pport, void* data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   205
                            Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   206
static asynStatus writeRange(int which, Port *pport, void* data, Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   207
static asynStatus readRate(int which, Port *pport, void* data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   208
                           Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   209
static asynStatus writeRate(int which, Port *pport, void* data, Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   210
static asynStatus readVoltageSettings(int which, Port *pport, void* data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   211
                                            Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   212
static asynStatus writeVoltageSettings(int which, Port *pport, void* data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   213
                                              Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   214
static asynStatus readCommon(int which, Port *pport, void* data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   215
                             Type Iface, size_t *length, int *eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   216
static asynStatus writeCommon(int which, Port *pport, void* data, Type Iface);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   217
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   218
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   219
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   220
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   221
// General commands that need special attention go here
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   222
enum { VOID_CMD, READ_CMD, RANGE_CMD, RANGE_AUTO_ULIMIT_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   223
       RANGE_AUTO_LLIMIT_CMD, RATE_CMD, DIGITAL_FILTER_CONTROL_CMD,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   224
       VOLTAGE_RANGE_CMD, VOLTAGE_CURRENT_LIMIT_CMD,      GEN_CMD_NUMBER };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   225
static GenCommand genCommandTable[GEN_CMD_NUMBER] = 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   226
  {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   227
    { readDummy,           writeDummy},     // VOID
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   228
    { readSensorReading,   writeDummy},     // READ
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   229
    { readRange,           writeRange},     // RANGE
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   230
    { readRange,           writeRange},     // RANGE_AUTO_ULIMIT
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   231
    { readRange,           writeRange},     // RANGE_AUTO_LLIMIT
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   232
    { readRate,            writeRate},      // RATE
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   233
    { readCommon,          writeCommon},    // DIGITAL_FILTER_CONTROL
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   234
    { readVoltageSettings, writeVoltageSettings}, // VOLTAGE_RANGE_COMMAND
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   235
    { readVoltageSettings, writeVoltageSettings}, // VOLTAGE_CURRENT_LIMIT_COMMAND
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   236
  };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   237
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   238
// commands that are very simple-minded go here
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   239
enum { RESET_CMD, RANGE_AUTO_CMD,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   240
       ZERO_CHECK_CMD, ZERO_CORRECT_CMD, ZERO_CORRECT_ACQUIRE_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   241
       MEDIAN_FILTER_CMD, MEDIAN_FILTER_RANK_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   242
       DIGITAL_FILTER_CMD, DIGITAL_FILTER_COUNT_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   243
       VOLTAGE_CMD, VOLTAGE_STATE_CMD, VOLTAGE_10V_INTERLOCK_CMD, VOLTAGE_INTERLOCK_STATUS_CMD,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   244
       SIMPLE_CMD_NUMBER};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   245
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   246
enum { SIMPLE_TRIGGER=0, SIMPLE_OCTET=Octet, SIMPLE_FLOAT64=Float64, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   247
       SIMPLE_INT32=Int32 };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   248
static SimpleCommand simpleCommandTable[SIMPLE_CMD_NUMBER] = 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   249
  {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   250
    { SIMPLE_TRIGGER, "*RST"},                // RESET DEVICE
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   251
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   252
    { SIMPLE_INT32,   ":RANGE:AUTO"},         // RANGE_AUTO
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   253
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   254
    { SIMPLE_INT32,   "SYST:ZCH"},            // ZERO CHECK
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   255
    { SIMPLE_INT32,   "SYST:ZCOR"},           // ZERO CORRECT
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   256
    { SIMPLE_TRIGGER, "SYST:ZCOR:ACQ"},       // ZERO CORRECT ACQUIRE
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   257
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   258
    { SIMPLE_INT32,   "MED"},                 // MEDIAN FILTER
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   259
    { SIMPLE_INT32,   "MED:RANK"},            // MEDIAN FILTER RANK
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   260
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   261
    { SIMPLE_INT32,   "AVER"},                // DIGITAL FILTER
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   262
    { SIMPLE_INT32,   "AVER:COUN"},           // DIGITAL FILTER COUNT
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   263
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   264
    { SIMPLE_FLOAT64, "SOUR:VOLT"},           // VOLTAGE
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   265
    { SIMPLE_INT32,   "SOUR:VOLT:STAT"},      // VOLTAGE STATE
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   266
    { SIMPLE_INT32,   "SOUR:VOLT:INT"},       // VOLTAGE 10V INTERLOCK
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   267
    { SIMPLE_INT32,   "SOUR:VOLT:INT:FAIL"},  // VOLTAGE INTERLOCK STATUS
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   268
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   269
    // { SIMPLE_INT32,   "AVER:"},      // 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   270
    // { SIMPLE_INT32,   "AVER:"},      // 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   271
  };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   272
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   273
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   274
enum { TIMESTAMP_CMD, STATUS_RAW_CMD, STATUS_OVERFLOW_CMD, STATUS_FILTER_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   275
       STATUS_MATH_CMD, STATUS_NULL_CMD, STATUS_LIMITS_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   276
       STATUS_OVERVOLTAGE_CMD, STATUS_ZERO_CHECK_CMD, STATUS_ZERO_CORRECT_CMD,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   277
       MODEL_CMD, SERIAL_CMD, DIG_REV_CMD, DISP_REV_CMD, BRD_REV_CMD, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   278
       CACHE_CMD_NUMBER };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   279
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   280
#define COMMAND_NUMBER (GEN_CMD_NUMBER + SIMPLE_CMD_NUMBER + CACHE_CMD_NUMBER)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   281
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   282
enum { CMD_GEN, CMD_SIMPLE, CMD_CACHE };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   283
enum { DEV_ALL, DEV_6485, DEV_6487};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   284
static Command commandTable[ COMMAND_NUMBER ] = 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   285
  {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   286
    { "VOID",                     DEV_ALL,  CMD_GEN,    VOID_CMD                     },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   287
    { "READ",                     DEV_ALL,  CMD_GEN,    READ_CMD                     },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   288
    { "RANGE",                    DEV_ALL,  CMD_GEN,    RANGE_CMD                    },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   289
    { "RANGE_AUTO_ULIMIT",        DEV_ALL,  CMD_GEN,    RANGE_AUTO_ULIMIT_CMD        },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   290
    { "RANGE_AUTO_LLIMIT",        DEV_ALL,  CMD_GEN,    RANGE_AUTO_LLIMIT_CMD        },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   291
    { "RATE",                     DEV_ALL,  CMD_GEN,    RATE_CMD                     },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   292
    { "DIGITAL_FILTER_CONTROL",   DEV_ALL,  CMD_GEN,    DIGITAL_FILTER_CONTROL_CMD   },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   293
    { "VOLTAGE_RANGE",            DEV_6487, CMD_GEN,    VOLTAGE_RANGE_CMD            },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   294
    { "VOLTAGE_CURRENT_LIMIT",    DEV_6487, CMD_GEN,    VOLTAGE_CURRENT_LIMIT_CMD    },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   295
    { "RESET",                    DEV_ALL,  CMD_SIMPLE, RESET_CMD                    },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   296
    { "RANGE_AUTO",               DEV_ALL,  CMD_SIMPLE, RANGE_AUTO_CMD               },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   297
    { "ZERO_CHECK",               DEV_ALL,  CMD_SIMPLE, ZERO_CHECK_CMD               },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   298
    { "ZERO_CORRECT",             DEV_ALL,  CMD_SIMPLE, ZERO_CORRECT_CMD             },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   299
    { "ZERO_CORRECT_ACQUIRE",     DEV_ALL,  CMD_SIMPLE, ZERO_CORRECT_ACQUIRE_CMD     },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   300
    { "MEDIAN_FILTER",            DEV_ALL,  CMD_SIMPLE, MEDIAN_FILTER_CMD            },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   301
    { "MEDIAN_FILTER_RANK",       DEV_ALL,  CMD_SIMPLE, MEDIAN_FILTER_RANK_CMD       },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   302
    { "DIGITAL_FILTER",           DEV_ALL,  CMD_SIMPLE, DIGITAL_FILTER_CMD           },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   303
    { "DIGITAL_FILTER_COUNT",     DEV_ALL,  CMD_SIMPLE, DIGITAL_FILTER_COUNT_CMD     },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   304
    { "VOLTAGE",                  DEV_6487, CMD_SIMPLE, VOLTAGE_CMD                  },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   305
    { "VOLTAGE_STATE",            DEV_6487, CMD_SIMPLE, VOLTAGE_STATE_CMD            },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   306
    { "VOLTAGE_TENV_INTERLOCK",   DEV_6487, CMD_SIMPLE, VOLTAGE_10V_INTERLOCK_CMD    },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   307
    { "VOLTAGE_INTERLOCK_STATUS", DEV_6487, CMD_SIMPLE, VOLTAGE_INTERLOCK_STATUS_CMD },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   308
    { "MODEL",                    DEV_ALL,  CMD_CACHE,  MODEL_CMD                    },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   309
    { "SERIAL",                   DEV_ALL,  CMD_CACHE,  SERIAL_CMD                   },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   310
    { "DIG_REV",                  DEV_ALL,  CMD_CACHE,  DIG_REV_CMD                  },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   311
    { "DISP_REV",                 DEV_ALL,  CMD_CACHE,  DISP_REV_CMD                 },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   312
    { "BRD_REV",                  DEV_ALL,  CMD_CACHE,  BRD_REV_CMD                  },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   313
    { "TIMESTAMP",                DEV_ALL,  CMD_CACHE,  TIMESTAMP_CMD                },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   314
    { "STATUS_RAW",               DEV_ALL,  CMD_CACHE,  STATUS_RAW_CMD               },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   315
    { "STATUS_OVERFLOW",          DEV_ALL,  CMD_CACHE,  STATUS_OVERFLOW_CMD          },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   316
    { "STATUS_FILTER",            DEV_ALL,  CMD_CACHE,  STATUS_FILTER_CMD            },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   317
    { "STATUS_MATH",              DEV_ALL,  CMD_CACHE,  STATUS_MATH_CMD              },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   318
    { "STATUS_NULL",              DEV_ALL,  CMD_CACHE,  STATUS_NULL_CMD              },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   319
    { "STATUS_LIMITS",            DEV_ALL,  CMD_CACHE,  STATUS_LIMITS_CMD            },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   320
    { "STATUS_OVERVOLTAGE",       DEV_ALL,  CMD_CACHE,  STATUS_OVERVOLTAGE_CMD       },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   321
    { "STATUS_ZERO_CHECK",        DEV_ALL,  CMD_CACHE,  STATUS_ZERO_CHECK_CMD        },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   322
    { "STATUS_ZERO_CORRECT",      DEV_ALL,  CMD_CACHE,  STATUS_ZERO_CORRECT_CMD      },
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   323
  };
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   324
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   325
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   326
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   327
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   328
 * Define public interface methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   329
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   330
int drvAsynKeithley648x(const char *type, const char *myport,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   331
                        const char *ioport, int ioaddr)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   332
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   333
  int status = asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   334
  Port* pport;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   335
  //  int i;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   336
  asynStandardInterfaces *pInterfaces;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   337
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   338
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   339
  int eomReason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   340
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   341
  pport = (Port*)callocMustSucceed(1,sizeof(Port),"drvAsynKeithley6485");
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   342
  pport->myport = epicsStrDup(myport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   343
  pport->ioport = epicsStrDup(ioport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   344
  pport->ioaddr = ioaddr;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   345
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   346
  pport->devtype = DEV_ALL;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   347
  if( !strcmp("6485", type))
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   348
    pport->devtype = DEV_6485;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   349
  if( !strcmp("6487", type))
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   350
    pport->devtype = DEV_6487;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   351
  if(pport->devtype == DEV_ALL) // DEV_ALL is not a real device
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   352
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   353
      errlogPrintf("%s::drvAsynKeithley6485 type has to be "
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   354
                   "either \'6485\' or \'6487\'.\n", driver);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   355
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   356
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   357
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   358
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   359
  status = pasynOctetSyncIO->connect(ioport,ioaddr,&pport->pasynUser,NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   360
  if (status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   361
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   362
      errlogPrintf("%s::drvAsynKeithley6485 port %s can't connect "
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   363
                   "to asynCommon on Octet server %s address %d.\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   364
                   driver, myport, ioport, ioaddr);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   365
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   366
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   367
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   368
  /* Create asynUser for asynTrace */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   369
  pport->pasynUserTrace = pasynManager->createAsynUser(0, 0);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   370
  pport->pasynUserTrace->userPvt = pport;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   371
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   372
  status = pasynManager->registerPort(myport,ASYN_CANBLOCK,1,0,0);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   373
  if( status != asynSuccess) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   374
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   375
      errlogPrintf("%s::drvAsynKeithley6485 port %s can't register port\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   376
                   driver, myport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   377
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   378
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   379
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   380
  pInterfaces = &pport->asynStdInterfaces;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   381
    
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   382
  /* Initialize interface pointers */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   383
  pInterfaces->common.pinterface    = (void *)&ifaceCommon;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   384
  pInterfaces->drvUser.pinterface   = (void *)&ifaceDrvUser;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   385
  pInterfaces->octet.pinterface     = (void *)&ifaceOctet;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   386
  pInterfaces->int32.pinterface     = (void *)&ifaceInt32;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   387
  pInterfaces->float64.pinterface   = (void *)&ifaceFloat64;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   388
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   389
  status = pasynStandardInterfacesBase->initialize(myport, pInterfaces,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   390
                                                   pport->pasynUserTrace, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   391
                                                   pport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   392
  if (status != asynSuccess) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   393
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   394
      errlogPrintf("%s::drvAsynKeithley6485 port %s"
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   395
                   " can't register standard interfaces: %s\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   396
                   driver, myport, pport->pasynUserTrace->errorMessage);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   397
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   398
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   399
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   400
#ifdef vxWorks
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   401
  /* Send a sacrificial clear status to vxworks device (i.e. VME)*/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   402
  /* This fixes a problem with *IDN? call when starting from a cold boot */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   403
  /* with the SBS IP-Octal hardware. */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   404
  if( writeOnly(pport,"") )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   405
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   406
      errlogPrintf("%s::drvAsynKeithley6485 port %s failed to write\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   407
                   driver, myport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   408
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   409
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   410
#endif
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   411
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   412
  /* Reset device */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   413
  if( writeOnly(pport,"*CLS") )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   414
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   415
      errlogPrintf("%s::drvAsynKeithley6485 port %s failed to clear\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   416
                   driver, myport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   417
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   418
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   419
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   420
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   421
  /* Identification query */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   422
  if( writeRead(pport,"*IDN?",inpBuf,sizeof(inpBuf),&eomReason) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   423
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   424
      errlogPrintf("%s::drvAsynKeithley6485 port %s failed to "
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   425
                   "acquire identification\n", driver, myport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   426
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   427
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   428
  strcpy(pport->model,inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   429
  // char *model, *serial, *dig_rev, *disp_rev, *brd_rev;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   430
  pport->serial = strchr( pport->model, ',');
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   431
  pport->serial = strchr( pport->serial + 1, ',');
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   432
  *(pport->serial) = '\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   433
  pport->serial++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   434
  pport->dig_rev = strchr( pport->serial, ',');
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   435
  *(pport->dig_rev) = '\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   436
  pport->dig_rev++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   437
  pport->disp_rev = strchr( pport->dig_rev, '/');
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   438
  *(pport->disp_rev) = '\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   439
  pport->disp_rev++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   440
  pport->brd_rev = strchr( pport->disp_rev, '/');
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   441
  *(pport->brd_rev) = '\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   442
  pport->brd_rev++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   443
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   444
  /* Complete initialization */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   445
  pport->init=1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   446
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   447
  pport->data.reading = 0.0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   448
  pport->data.timestamp = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   449
  pport->data.status.raw = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   450
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   451
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   452
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   453
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   454
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   455
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   456
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   457
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   458
 * Define private read and write parameter methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   459
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   460
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   461
static asynStatus readDummy(int which, Port *pport, void *data, Type Iface, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   462
                            size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   463
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   464
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   465
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   466
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   467
static asynStatus writeDummy(int which, Port *pport, void *data, Type Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   468
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   469
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   470
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   471
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   472
///
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   473
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   474
static asynStatus readSimpleData( int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   475
                                  Type Iface, size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   476
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   477
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   478
  char outBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   479
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   480
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   481
  int len;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   482
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   483
  // Trigger will automatically not work
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   484
  if( simpleCommandTable[which].type != Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   485
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   486
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   487
  sprintf( outBuf, "%s?", simpleCommandTable[which].cmd_str);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   488
    
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   489
  status = writeRead( pport, outBuf, inpBuf, BUFFER_SIZE, &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   490
  if( status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   491
    return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   492
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   493
  switch( Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   494
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   495
    case Float64:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   496
      *((epicsFloat64 *) data) = atof(inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   497
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   498
    case Int32:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   499
      *((epicsInt32 *) data) = atoi(inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   500
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   501
    case Octet:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   502
      len = strlen( inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   503
      if( len > 39)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   504
        inpBuf[39] = '\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   505
      strcpy( (char *) data, inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   506
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   507
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   508
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   509
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   510
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   511
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   512
static asynStatus writeSimpleData( int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   513
                                    Type Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   514
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   515
  char outBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   516
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   517
  if( simpleCommandTable[which].type == SIMPLE_TRIGGER )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   518
    sprintf( outBuf, "%s", simpleCommandTable[which].cmd_str);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   519
  else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   520
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   521
      if( simpleCommandTable[which].type != Iface )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   522
        return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   523
      
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   524
      switch( simpleCommandTable[which].type & Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   525
        {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   526
        case Float64:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   527
          sprintf( outBuf, "%s %g", simpleCommandTable[which].cmd_str, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   528
                   *((epicsFloat64*) data) );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   529
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   530
        case Int32:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   531
          sprintf( outBuf, "%s %d", simpleCommandTable[which].cmd_str, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   532
                   *((epicsInt32*) data) );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   533
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   534
        case Octet:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   535
          sprintf( outBuf, "%s %s", simpleCommandTable[which].cmd_str, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   536
                   ((char *) data) );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   537
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   538
        }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   539
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   540
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   541
  return writeOnly( pport, outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   542
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   543
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   544
////
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   545
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   546
static asynStatus readCache(int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   547
                            Type Iface, size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   548
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   549
  char *char_cache = NULL;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   550
  int len;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   551
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   552
  switch( Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   553
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   554
    case Octet:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   555
      switch(which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   556
        {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   557
        case MODEL_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   558
          char_cache = pport->model;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   559
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   560
        case SERIAL_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   561
          char_cache = pport->serial;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   562
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   563
        case DIG_REV_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   564
          char_cache = pport->dig_rev;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   565
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   566
        case DISP_REV_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   567
          char_cache = pport->disp_rev;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   568
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   569
        case BRD_REV_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   570
          char_cache = pport->brd_rev;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   571
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   572
        }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   573
      len = strlen(char_cache);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   574
      if( len < 40)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   575
        strcpy( (char *) data, char_cache);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   576
      else // just in case string will overflow the EPICS string size of 40
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   577
        {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   578
          len = 39;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   579
          memcpy( (char *) data, char_cache, len);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   580
          ((char *) data)[len] = '\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   581
        }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   582
      *length = len;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   583
      *eom = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   584
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   585
    case Float64:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   586
    //   switch( which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   587
    //     {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   588
    //     }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   589
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   590
    case Int32:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   591
      switch( which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   592
        {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   593
        case TIMESTAMP_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   594
          *(epicsInt32*)data = pport->data.timestamp;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   595
          break;  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   596
        case STATUS_RAW_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   597
          *(epicsInt32*) data = pport->data.status.raw;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   598
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   599
        case STATUS_OVERFLOW_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   600
          *(epicsInt32*) data = pport->data.status.bits.overflow;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   601
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   602
        case STATUS_FILTER_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   603
          *(epicsInt32*) data = pport->data.status.bits.filter_enabled;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   604
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   605
        case STATUS_MATH_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   606
          *(epicsInt32*) data = pport->data.status.bits.math_enabled;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   607
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   608
        case STATUS_NULL_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   609
          *(epicsInt32*) data = pport->data.status.bits.null_enabled;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   610
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   611
        case STATUS_LIMITS_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   612
          if( pport->data.status.bits.limit_test)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   613
            *(epicsInt32*) data = pport->data.status.bits.limit_result;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   614
          else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   615
            *(epicsInt32*) data = 3;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   616
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   617
        case STATUS_OVERVOLTAGE_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   618
          *(epicsInt32*) data = pport->data.status.bits.overvoltage;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   619
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   620
        case STATUS_ZERO_CHECK_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   621
          *(epicsInt32*) data = pport->data.status.bits.zero_check_enabled;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   622
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   623
        case STATUS_ZERO_CORRECT_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   624
          *(epicsInt32*) data = pport->data.status.bits.zero_correct_enabled;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   625
          break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   626
        }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   627
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   628
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   629
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   630
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   631
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   632
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   633
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   634
static asynStatus readSensorReading(int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   635
                                    Type Iface, size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   636
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   637
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   638
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   639
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   640
  char *str, *token[3], *saveptr;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   641
  int pass;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   642
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   643
  status = writeRead( pport, "READ?", inpBuf, BUFFER_SIZE, &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   644
  if( status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   645
    return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   646
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   647
  str = inpBuf;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   648
  for( pass = 0; pass < 3; pass++, str = NULL)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   649
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   650
      token[pass] = epicsStrtok_r(str, ",", &saveptr);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   651
      if (token == NULL)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   652
        break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   653
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   654
  if( pass != 3)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   655
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   656
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   657
  pport->data.reading = atof( token[0]);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   658
  pport->data.timestamp = (int) atof( token[1]);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   659
  pport->data.status.raw = (int) atof( token[2]);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   660
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   661
  switch( Iface )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   662
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   663
    case Octet:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   664
      // only print current value
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   665
      *length = sprintf( (char *) data, "%s", token[0]);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   666
      *eom = pport->data.eom;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   667
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   668
    case Float64:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   669
      *(epicsFloat64*)data = pport->data.reading;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   670
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   671
    case Int32:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   672
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   673
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   674
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   675
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   676
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   677
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   678
static asynStatus readRange(int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   679
                            Type Iface, size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   680
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   681
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   682
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   683
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   684
  if( Iface == Octet)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   685
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   686
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   687
  switch( which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   688
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   689
    case RANGE_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   690
      status = writeRead( pport, ":RANGE?", inpBuf, BUFFER_SIZE, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   691
                          &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   692
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   693
    case RANGE_AUTO_ULIMIT_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   694
      status = writeRead( pport, ":RANGE:AUTO:ULIM?", inpBuf, BUFFER_SIZE, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   695
                          &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   696
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   697
    case RANGE_AUTO_LLIMIT_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   698
      status = writeRead( pport, ":RANGE:AUTO:LLIM?", inpBuf, BUFFER_SIZE, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   699
                          &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   700
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   701
    default:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   702
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   703
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   704
  if( status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   705
    return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   706
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   707
  if( Iface == Float64)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   708
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   709
      double val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   710
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   711
      val = atof( inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   712
      if( val == 0.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   713
        return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   714
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   715
      *(epicsFloat64*) data = val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   716
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   717
  else if( Iface == Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   718
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   719
      char *p;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   720
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   721
      p = strchr( inpBuf, 'E');
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   722
      if(p == NULL)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   723
        return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   724
      p++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   725
      *(epicsInt32*) data = 9 + atoi(p) ;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   726
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   727
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   728
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   729
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   730
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   731
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   732
static asynStatus writeRange( int which, Port *pport, void *data, Type Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   733
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   734
  char outBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   735
  int value;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   736
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   737
  if( Iface != Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   738
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   739
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   740
  value = *((epicsInt32*) data);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   741
  if( (value < 0) || (value > 7) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   742
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   743
    
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   744
  switch( which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   745
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   746
    case RANGE_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   747
      sprintf( outBuf, ":RANGE 2.0e%d", -9 + value );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   748
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   749
    case RANGE_AUTO_ULIMIT_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   750
      sprintf( outBuf, ":RANGE:AUTO:ULIM 2.0e%d", -9 + value );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   751
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   752
    case RANGE_AUTO_LLIMIT_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   753
      sprintf( outBuf, ":RANGE:AUTO:LLIM 2.0e%d", -9 + value );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   754
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   755
    default:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   756
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   757
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   758
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   759
  return writeOnly( pport, outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   760
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   761
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   762
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   763
static asynStatus readRate(int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   764
                           Type Iface, size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   765
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   766
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   767
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   768
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   769
  double val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   770
  int rate;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   771
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   772
  if( Iface != Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   773
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   774
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   775
  status = writeRead( pport, ":NPLC?", inpBuf, BUFFER_SIZE, &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   776
  if( status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   777
    return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   778
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   779
  val = atof( inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   780
  if( val > 1.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   781
    rate = 0; // SLOW
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   782
  else if( val > 0.1)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   783
    rate = 1; // MEDIUM
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   784
  else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   785
    rate = 2; // FAST
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   786
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   787
  *((epicsInt32*) data) = rate;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   788
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   789
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   790
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   791
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   792
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   793
static asynStatus writeRate( int which, Port *pport, void *data, Type Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   794
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   795
  char outBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   796
  int rate;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   797
  double val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   798
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   799
  if( Iface != Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   800
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   801
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   802
  rate = *((epicsInt32*) data);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   803
  if( (rate < 0) || (rate > 2) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   804
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   805
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   806
  switch( rate)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   807
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   808
    case 0:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   809
      val = 6.0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   810
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   811
    case 1:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   812
      val = 1.0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   813
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   814
    case 2:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   815
      val = 0.1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   816
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   817
    default:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   818
      val = 1.0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   819
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   820
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   821
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   822
  sprintf( outBuf, ":NPLC %g", val );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   823
  return writeOnly( pport, outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   824
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   825
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   826
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   827
static asynStatus readVoltageSettings(int which, Port *pport, void *data, Type Iface, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   828
                                      size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   829
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   830
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   831
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   832
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   833
  double val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   834
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   835
  if(( which != VOLTAGE_RANGE_CMD) && ( which != VOLTAGE_CURRENT_LIMIT_CMD))
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   836
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   837
  if( Iface == Octet)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   838
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   839
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   840
  if( which == VOLTAGE_RANGE_CMD)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   841
    status = writeRead( pport, "SOUR:VOLT:RANGE?", inpBuf, BUFFER_SIZE, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   842
                        &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   843
  else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   844
    status = writeRead( pport, "SOUR:VOLT:ILIM?", inpBuf, BUFFER_SIZE, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   845
                        &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   846
  if( status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   847
    return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   848
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   849
  val = atof( inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   850
  if( val == 0.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   851
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   852
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   853
  if( Iface == Float64)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   854
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   855
      *((epicsFloat64*) data) = val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   856
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   857
  else if( Iface == Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   858
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   859
      if( which == VOLTAGE_RANGE_CMD)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   860
        {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   861
          if( val == 10.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   862
            *((epicsInt32*) data) = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   863
          else if( val == 50.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   864
            *((epicsInt32*) data) = 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   865
          else if( val == 500.0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   866
            *((epicsInt32*) data) = 2;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   867
        }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   868
      else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   869
        {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   870
          if( val == 2.5e-5)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   871
            *((epicsInt32*) data) = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   872
          else if( val == 2.5e-4)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   873
            *((epicsInt32*) data) = 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   874
          else if( val == 2.5e-3)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   875
            *((epicsInt32*) data) = 2;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   876
          else if( val == 2.5e-2)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   877
            *((epicsInt32*) data) = 3;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   878
        }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   879
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   880
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   881
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   882
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   883
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   884
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   885
static asynStatus writeVoltageSettings( int which, Port *pport, void *data, Type Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   886
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   887
  char outBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   888
  int value;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   889
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   890
  if(( which != VOLTAGE_RANGE_CMD) && ( which != VOLTAGE_CURRENT_LIMIT_CMD))
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   891
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   892
  if( Iface != Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   893
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   894
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   895
  value = *((epicsInt32*) data);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   896
  if( which == VOLTAGE_RANGE_CMD) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   897
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   898
      if( (value < 0) || (value > 2) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   899
        return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   900
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   901
      if( value == 0)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   902
        value = 10;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   903
      else if( value == 1)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   904
        value = 50;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   905
      else 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   906
        value = 500;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   907
   
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   908
      sprintf( outBuf, "SOUR:VOLT:RANGE %d", value );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   909
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   910
  else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   911
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   912
      if( (value < 0) || (value > 3) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   913
        return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   914
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   915
      sprintf( outBuf, "SOUR:VOLT:ILIM 2.5e%d", value - 5 );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   916
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   917
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   918
  return writeOnly( pport, outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   919
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   920
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   921
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   922
static asynStatus readCommon(int which, Port *pport, void *data, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   923
                             Type Iface, size_t *length, int *eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   924
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   925
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   926
  char inpBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   927
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   928
  int val = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   929
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   930
  if( Iface != Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   931
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   932
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   933
  switch(which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   934
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   935
    case DIGITAL_FILTER_CONTROL_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   936
      status = writeRead( pport, "AVER:TCON?", inpBuf, BUFFER_SIZE, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   937
                          &pport->data.eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   938
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   939
      if( status != asynSuccess)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   940
        return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   941
      if( !strcmp( "MOV", inpBuf) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   942
        val = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   943
      else if( !strcmp( "REP", inpBuf) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   944
        val = 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   945
      else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   946
        return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   947
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   948
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   949
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   950
  *((epicsInt32*) data) = val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   951
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   952
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   953
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   954
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   955
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   956
static asynStatus writeCommon( int which, Port *pport, void *data, Type Iface)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   957
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   958
  char outBuf[BUFFER_SIZE];
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   959
  int val;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   960
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   961
  if( Iface != Int32)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   962
    return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   963
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   964
  val = *((epicsInt32*) data);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   965
  switch( which)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   966
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   967
    case DIGITAL_FILTER_CONTROL_CMD:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   968
      if( !val)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   969
        sprintf( outBuf, "AVER:TCON MOV" );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   970
      else if(val == 1)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   971
        sprintf( outBuf, "AVER:TCON REP" );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   972
      else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   973
        return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   974
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   975
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   976
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   977
  return writeOnly( pport, outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   978
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   979
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   980
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   981
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   982
 * Define private interface asynCommon methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   983
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   984
static void report(void* ppvt,FILE* fp,int details)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   985
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   986
  //  int i;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   987
  Port* pport = (Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   988
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   989
  fprintf( fp, "Keithley648x port: %s\n", pport->myport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   990
  if( details)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   991
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   992
      fprintf( fp, "    server:     %s\n", pport->ioport);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   993
      fprintf( fp, "    address:    %d\n", pport->ioaddr);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   994
      fprintf( fp, "    ioErrors:   %d\n", pport->stats.ioErrors);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   995
      fprintf( fp, "    writeReads: %d\n", pport->stats.writeReads);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   996
      fprintf( fp, "    writeOnlys: %d\n", pport->stats.writeOnlys);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   997
      fprintf( fp, "    support %s initialized\n",(pport->init)?"IS":"IS NOT");
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   998
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
   999
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1000
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1001
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1002
static asynStatus connect(void* ppvt,asynUser* pasynUser)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1003
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1004
  pasynManager->exceptionConnect(pasynUser);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1005
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1006
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1007
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1008
static asynStatus disconnect(void* ppvt,asynUser* pasynUser)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1009
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1010
  pasynManager->exceptionDisconnect(pasynUser);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1011
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1012
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1013
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1014
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1015
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1016
 * Define private interface asynDrvUser methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1017
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1018
static asynStatus create(void* ppvt, asynUser *pasynUser, const char *drvInfo, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1019
                         const char **pptypeName, size_t *psize)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1020
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1021
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1022
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1023
  int i;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1024
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1025
  for(i = 0; i < COMMAND_NUMBER; i++) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1026
    if( !epicsStrCaseCmp( drvInfo, commandTable[i].tag) ) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1027
      {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1028
        if( (commandTable[i].dev != DEV_ALL) && 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1029
            (commandTable[i].dev != pport->devtype) )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1030
          {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1031
            errlogPrintf("%s::create port %s failed as tag %s is for different "
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1032
                         "device\n", driver, pport->myport, drvInfo);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1033
            pasynUser->reason = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1034
            return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1035
          }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1036
        pasynUser->reason = i;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1037
        break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1038
      }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1039
  if( i == COMMAND_NUMBER ) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1040
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1041
      errlogPrintf("%s::create port %s failed to find tag %s\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1042
                   driver, pport->myport, drvInfo);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1043
      pasynUser->reason = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1044
      return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1045
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1046
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1047
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1048
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1049
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1050
static asynStatus gettype(void* ppvt,asynUser* pasynUser,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1051
                          const char** pptypeName,size_t* psize)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1052
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1053
  if( pptypeName ) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1054
    *pptypeName = NULL;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1055
  if( psize ) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1056
    *psize = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1057
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1058
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1059
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1060
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1061
static asynStatus destroy(void* ppvt,asynUser* pasynUser)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1062
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1063
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1064
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1065
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1066
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1067
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1068
 * Define private interface asynFloat64 methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1069
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1070
static asynStatus writeFloat64(void* ppvt,asynUser* pasynUser,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1071
                               epicsFloat64 value)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1072
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1073
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1074
  int which = pasynUser->reason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1075
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1076
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1077
  id = commandTable[which].id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1078
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1079
  if( pport->init == 0) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1080
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1081
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1082
   switch( commandTable[which].type )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1083
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1084
    case CMD_GEN:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1085
      return genCommandTable[id].writeFunc(id, pport, &value, Float64);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1086
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1087
    case CMD_SIMPLE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1088
      return writeSimpleData( id, pport, &value, Float64);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1089
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1090
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1091
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1092
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1093
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1094
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1095
static asynStatus readFloat64(void* ppvt,asynUser* pasynUser,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1096
                              epicsFloat64* value)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1097
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1098
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1099
  int which = pasynUser->reason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1100
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1101
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1102
  id = commandTable[which].id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1103
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1104
  if( pport->init == 0) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1105
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1106
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1107
  switch( commandTable[which].type )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1108
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1109
    case CMD_GEN:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1110
      return genCommandTable[id].readFunc(id, pport, value, Float64, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1111
                                          NULL, NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1112
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1113
    case CMD_SIMPLE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1114
      return readSimpleData( id, pport, value, Float64, NULL, NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1115
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1116
    case CMD_CACHE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1117
      return readCache(id, pport, value, Float64, NULL, NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1118
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1119
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1120
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1121
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1122
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1123
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1124
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1125
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1126
 * Define private interface asynInt32 methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1127
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1128
static asynStatus writeInt32(void *ppvt, asynUser *pasynUser, epicsInt32 value)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1129
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1130
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1131
  int which = pasynUser->reason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1132
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1133
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1134
  id = commandTable[which].id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1135
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1136
  if( pport->init == 0) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1137
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1138
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1139
  switch( commandTable[which].type )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1140
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1141
    case CMD_GEN:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1142
      return genCommandTable[id].writeFunc(id, pport, &value, Int32);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1143
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1144
    case CMD_SIMPLE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1145
      return writeSimpleData( id, pport, (void *) &value, Int32);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1146
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1147
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1148
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1149
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1150
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1151
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1152
static asynStatus readInt32(void *ppvt, asynUser *pasynUser, epicsInt32 *value)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1153
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1154
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1155
  int which = pasynUser->reason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1156
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1157
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1158
  id = commandTable[which].id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1159
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1160
  if( pport->init == 0) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1161
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1162
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1163
  switch( commandTable[which].type )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1164
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1165
    case CMD_GEN:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1166
      return genCommandTable[id].readFunc(id, pport, value, Int32, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1167
                                          NULL, NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1168
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1169
    case CMD_SIMPLE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1170
      return readSimpleData( id, pport, value, Int32, NULL, NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1171
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1172
    case CMD_CACHE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1173
      return readCache(id, pport, value, Int32, NULL, NULL);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1174
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1175
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1176
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1177
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1178
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1179
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1180
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1181
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1182
 * Define private interface asynOctet methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1183
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1184
static asynStatus flushOctet(void *ppvt, asynUser* pasynUser)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1185
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1186
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1187
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1188
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1189
static asynStatus writeOctet(void *ppvt, asynUser *pasynUser, const char *data,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1190
                             size_t numchars, size_t *nbytes)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1191
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1192
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1193
  int which = pasynUser->reason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1194
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1195
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1196
  id = commandTable[which].id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1197
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1198
  if( pport->init == 0) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1199
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1200
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1201
  switch( commandTable[which].type )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1202
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1203
    case CMD_GEN:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1204
      *nbytes=strlen(data);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1205
      return genCommandTable[id].writeFunc(id, pport, (void *) data, Octet);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1206
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1207
    case CMD_SIMPLE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1208
      *nbytes=strlen(data);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1209
      return writeSimpleData( id, pport, &data, Octet);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1210
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1211
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1212
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1213
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1214
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1215
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1216
static asynStatus readOctet(void* ppvt, asynUser* pasynUser, char* data,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1217
                            size_t maxchars,size_t* nbytes,int* eom)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1218
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1219
  Port* pport=(Port*)ppvt;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1220
  int which = pasynUser->reason;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1221
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1222
  int id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1223
  id = commandTable[which].id;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1224
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1225
  if( pport->init == 0) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1226
    return asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1227
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1228
  switch( commandTable[which].type )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1229
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1230
    case CMD_GEN:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1231
      return genCommandTable[id].readFunc(id, pport, (void *) data, Octet, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1232
                                          nbytes, eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1233
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1234
    case CMD_SIMPLE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1235
      return readSimpleData( id, pport, data, Octet, nbytes, eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1236
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1237
    case CMD_CACHE:
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1238
      return readCache(id, pport, (void *) data, Octet, nbytes, eom);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1239
      break;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1240
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1241
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1242
  return asynSuccess;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1243
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1244
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1245
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1246
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1247
 * Define private Keithley648x external interface asynOctet methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1248
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1249
static asynStatus writeOnly(Port *pport, const char *outBuf)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1250
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1251
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1252
  size_t nActual, nRequested;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1253
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1254
  nRequested=strlen(outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1255
  status = 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1256
    pasynOctetSyncIO->write(pport->pasynUser,outBuf,nRequested,TIMEOUT,&nActual);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1257
  if( nActual!=nRequested ) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1258
    status = asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1259
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1260
  if( status!=asynSuccess )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1261
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1262
      pport->stats.ioErrors++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1263
      asynPrint(pport->pasynUserTrace,ASYN_TRACE_ERROR, 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1264
                "%s writeOnly: error %d wrote \"%s\"\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1265
                pport->myport,status,outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1266
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1267
  else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1268
    pport->stats.writeOnlys++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1269
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1270
  asynPrint(pport->pasynUserTrace, ASYN_TRACEIO_FILTER,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1271
            "%s writeOnly: wrote \"%s\"\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1272
            pport->myport,outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1273
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1274
  return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1275
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1276
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1277
static asynStatus writeRead(Port *pport, const char *outBuf, char *inpBuf,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1278
                            int inputSize, int *eomReason)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1279
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1280
  asynStatus status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1281
  size_t nWrite, nRead, nWriteRequested;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1282
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1283
  nWriteRequested=strlen(outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1284
  status = pasynOctetSyncIO->writeRead(pport->pasynUser,outBuf,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1285
                                       nWriteRequested,inpBuf,inputSize-1,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1286
                                       TIMEOUT,&nWrite,&nRead,eomReason);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1287
  if( nWrite!=nWriteRequested ) 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1288
    status = asynError;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1289
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1290
  if( status!=asynSuccess )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1291
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1292
      pport->stats.ioErrors++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1293
      asynPrint(pport->pasynUserTrace,ASYN_TRACE_ERROR,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1294
                "%s writeRead: error %d wrote \"%s\"\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1295
                pport->myport,status,outBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1296
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1297
  else
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1298
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1299
      inpBuf[nRead]='\0';
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1300
      pport->stats.writeReads++;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1301
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1302
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1303
  asynPrint(pport->pasynUserTrace,ASYN_TRACEIO_FILTER,
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1304
            "%s writeRead: wrote \"%s\" read \"%s\"\n",
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1305
            pport->myport,outBuf,inpBuf);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1306
  
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1307
  return status;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1308
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1309
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1310
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1311
/****************************************************************************
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1312
 * Register public methods
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1313
 ****************************************************************************/
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1314
 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1315
/* Initialization method definitions */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1316
static const iocshArg arg0 = {"type",iocshArgString};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1317
static const iocshArg arg1 = {"myport",iocshArgString};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1318
static const iocshArg arg2 = {"ioport",iocshArgString};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1319
static const iocshArg arg3 = {"ioaddr",iocshArgInt};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1320
static const iocshArg* args[]= {&arg0,&arg1,&arg2,&arg3};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1321
static const iocshFuncDef drvAsynKeithley648xFuncDef = 
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1322
  {"drvAsynKeithley648x",4,args};
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1323
static void drvAsynKeithley648xCallFunc(const iocshArgBuf* args)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1324
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1325
  drvAsynKeithley648x(args[0].sval,args[1].sval,args[2].sval,args[3].ival);
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1326
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1327
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1328
/* Registration method */
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1329
static void drvAsynKeithley648xRegister(void)
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1330
{
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1331
  static int firstTime = 1;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1332
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1333
  if( firstTime )
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1334
    {
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1335
      firstTime = 0;
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1336
      iocshRegister( &drvAsynKeithley648xFuncDef,drvAsynKeithley648xCallFunc );
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1337
    }
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1338
}
77d8eafe2a07 Initial repo
Heinz Junkes <junkes@fhi-berlin.mpg.de>
parents:
diff changeset
  1339
epicsExportRegistrar( drvAsynKeithley648xRegister );