207 lines
5.7 KiB
C
207 lines
5.7 KiB
C
/*************************************************************************\
|
|
* Copyright (c) 2010 UChicago Argonne LLC, as Operator of Argonne
|
|
* National Laboratory.
|
|
* Copyright (c) 2002 The Regents of the University of California, as
|
|
* Operator of Los Alamos National Laboratory.
|
|
* EPICS BASE is distributed subject to a Software License Agreement found
|
|
* in file LICENSE that is included with this distribution.
|
|
\*************************************************************************/
|
|
/* link.h */
|
|
|
|
/*
|
|
* Original Authors: Bob Dalesio, Marty Kraimer
|
|
*/
|
|
|
|
#ifndef INC_link_H
|
|
#define INC_link_H
|
|
|
|
#include "dbDefs.h"
|
|
#include "ellLib.h"
|
|
#include "shareLib.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* link types */
|
|
#define CONSTANT 0
|
|
#define PV_LINK 1
|
|
#define VME_IO 2
|
|
#define CAMAC_IO 3
|
|
#define AB_IO 4
|
|
#define GPIB_IO 5
|
|
#define BITBUS_IO 6
|
|
#define MACRO_LINK 7
|
|
#define JSON_LINK 8
|
|
#define PN_LINK 9
|
|
#define DB_LINK 10
|
|
#define CA_LINK 11
|
|
#define INST_IO 12 /* instrument */
|
|
#define BBGPIB_IO 13 /* bitbus -> gpib */
|
|
#define RF_IO 14
|
|
#define VXI_IO 15
|
|
#define LINK_NTYPES 16
|
|
typedef struct maplinkType {
|
|
char *strvalue;
|
|
int value;
|
|
} maplinkType;
|
|
|
|
epicsShareExtern maplinkType pamaplinkType[];
|
|
|
|
#define VXIDYNAMIC 0
|
|
#define VXISTATIC 1
|
|
|
|
/* structure of a PV_LINK DB_LINK and a CA_LINK */
|
|
/*Options defined by pvlMask */
|
|
#define pvlOptMsMode 0x3 /*Maximize Severity mode selection*/
|
|
#define pvlOptNMS 0 /*Don't Maximize Severity*/
|
|
#define pvlOptMS 1 /*Maximize Severity always*/
|
|
#define pvlOptMSI 2 /*Maximize Severity if INVALID*/
|
|
#define pvlOptMSS 3 /*Maximize Severity and copy Status*/
|
|
#define pvlOptPP 0x4 /*Process Passive*/
|
|
#define pvlOptCA 0x8 /*Always make it a CA link*/
|
|
#define pvlOptCP 0x10 /*CA + process on monitor*/
|
|
#define pvlOptCPP 0x20 /*CA + process passive record on monitor*/
|
|
#define pvlOptFWD 0x40 /*Generate ca_put for forward link*/
|
|
#define pvlOptInpNative 0x80 /*Input native*/
|
|
#define pvlOptInpString 0x100 /*Input as string*/
|
|
#define pvlOptOutNative 0x200 /*Output native*/
|
|
#define pvlOptOutString 0x400 /*Output as string*/
|
|
|
|
/* DBLINK Flag bits */
|
|
#define DBLINK_FLAG_INITIALIZED 1 /* dbInitLink() called */
|
|
#define DBLINK_FLAG_TSELisTIME 2 /* Use TSEL to get timeStamp */
|
|
|
|
struct macro_link {
|
|
char *macroStr;
|
|
};
|
|
|
|
struct dbCommon;
|
|
typedef long (*LINKCVT)();
|
|
|
|
struct pv_link {
|
|
ELLNODE backlinknode;
|
|
char *pvname; /* pvname link points to */
|
|
void *pvt; /* CA or DB private */
|
|
LINKCVT getCvt; /* input conversion function */
|
|
short pvlMask; /* Options mask */
|
|
short lastGetdbrType; /* last dbrType for DB or CA get */
|
|
};
|
|
|
|
struct jlink;
|
|
struct json_link {
|
|
char *string;
|
|
struct jlink *jlink;
|
|
};
|
|
|
|
/* structure of a VME io channel */
|
|
struct vmeio {
|
|
short card;
|
|
short signal;
|
|
char *parm;
|
|
};
|
|
|
|
/* structure of a CAMAC io channel */
|
|
struct camacio {
|
|
short b;
|
|
short c;
|
|
short n;
|
|
short a;
|
|
short f;
|
|
char *parm;
|
|
};
|
|
|
|
/* structure of a RF io channel */
|
|
struct rfio {
|
|
short branch;
|
|
short cryo;
|
|
short micro;
|
|
short dataset;
|
|
short element;
|
|
long ext;
|
|
};
|
|
|
|
/* structure of a Allen-Bradley io channel */
|
|
struct abio {
|
|
short link;
|
|
short adapter;
|
|
short card;
|
|
short signal;
|
|
char *parm;
|
|
};
|
|
|
|
/* structure of a gpib io channel */
|
|
struct gpibio {
|
|
short link;
|
|
short addr; /* device address */
|
|
char *parm;
|
|
};
|
|
|
|
/* structure of a bitbus io channel */
|
|
struct bitbusio {
|
|
unsigned char link;
|
|
unsigned char node;
|
|
unsigned char port;
|
|
unsigned char signal;
|
|
char *parm;
|
|
};
|
|
|
|
/* structure of a bitbus to gpib io channel */
|
|
struct bbgpibio {
|
|
unsigned char link;
|
|
unsigned char bbaddr;
|
|
unsigned char gpibaddr;
|
|
unsigned char pad;
|
|
char *parm;
|
|
};
|
|
|
|
/* structure of an instrument io link */
|
|
struct instio {
|
|
char *string;
|
|
};
|
|
|
|
/* structure of a vxi link */
|
|
struct vxiio {
|
|
short flag; /* 0 = frame/slot, 1 = SA */
|
|
short frame;
|
|
short slot;
|
|
short la; /* logical address if flag =1 */
|
|
short signal;
|
|
char *parm;
|
|
};
|
|
|
|
/* union of possible address structures */
|
|
union value {
|
|
char *constantStr; /*constant string*/
|
|
struct macro_link macro_link; /* link containing macro substitution*/
|
|
struct json_link json; /* JSON-encoded link */
|
|
struct pv_link pv_link; /* link to process variable*/
|
|
struct vmeio vmeio; /* vme io point */
|
|
struct camacio camacio; /* camac io point */
|
|
struct rfio rfio; /* CEBAF RF buffer interface */
|
|
struct abio abio; /* allen-bradley io point */
|
|
struct gpibio gpibio;
|
|
struct bitbusio bitbusio;
|
|
struct instio instio; /* instrument io link */
|
|
struct bbgpibio bbgpibio; /* bitbus to gpib io link */
|
|
struct vxiio vxiio; /* vxi io */
|
|
};
|
|
|
|
struct lset;
|
|
|
|
struct link {
|
|
struct dbCommon *precord; /* Pointer to record owning link */
|
|
short type;
|
|
short flags;
|
|
struct lset *lset;
|
|
char *text; /* Raw link text */
|
|
union value value;
|
|
};
|
|
|
|
typedef struct link DBLINK;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* INC_link_H */
|