/*************************************************************************\ * 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 */