Files
pcas/src/sequencer/seqCom.h
1996-08-13 15:39:22 +00:00

159 lines
6.1 KiB
C
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* * base/include seqCom.h,v 1.3 1995/10/10 01:25:08 wright Exp
*
* DESCRIPTION: Common definitions for state programs and run-time sequencer.
*
* Author: Andy Kozubal
* Date: 01mar94
*
* Experimental Physics and Industrial Control System (EPICS)
*
* Copyright 1993 the Regents of the University of California,
* and the University of Chicago Board of Governors.
*
* This software was produced under U.S. Government contracts:
* (W-7405-ENG-36) at the Los Alamos National Laboratory,
* and (W-31-109-ENG-38) at Argonne National Laboratory.
*
* Initial development by:
* The Controls and Automation Group (AT-8)
* Ground Test Accelerator
* Accelerator Technology Division
* Los Alamos National Laboratory
* Modification Log:
* -----------------
* 11jul96,ajk Changed all int types to long.
* 22jul96,ajk Changed PFUNC to ACTION_FUNC, EVENT_FUNC, DELAY_FUNC, & EXIT_FUNC.
*
*/
#ifndef INCLseqComh
#define INCLseqComh
#define MAGIC 940501 /* current magic number for SPROG */
#include "tsDefs.h" /* time stamp defs */
#include "stdio.h" /* standard i/o defs */
/* Bit encoding for run-time options */
#define OPT_DEBUG (1<<0) /* turn on debugging */
#define OPT_ASYNC (1<<1) /* use async. gets */
#define OPT_CONN (1<<2) /* wait for all connections */
#define OPT_REENT (1<<3) /* generate reentrant code */
#define OPT_NEWEF (1<<4) /* new event flag mode */
#define OPT_TIME (1<<5) /* get time stamps */
#define OPT_VXWORKS (1<<6) /* include VxWorks files */
/* Macros to handle set & clear event bits */
#define NBITS 32 /* # bits in bitMask word */
typedef long bitMask;
#define bitSet(word, bitnum) (word[(bitnum)/NBITS] |= (1<<((bitnum)%NBITS)))
#define bitClear(word, bitnum) (word[(bitnum)/NBITS] &= ~(1<<((bitnum)%NBITS)))
#define bitTest(word, bitnum) ((word[(bitnum)/NBITS] & (1<<((bitnum)%NBITS))) != 0)
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif /*TRUE*/
typedef long SS_ID; /* state set id */
/* Prototype for action, event, delay, and exit functions */
typedef long (*PFUNC)();
typedef void (*ACTION_FUNC)();
typedef long (*EVENT_FUNC)();
typedef void (*DELAY_FUNC)();
typedef void (*EXIT_FUNC)();
#ifdef OFFSET
#undef OFFSET
#endif
/* The OFFSET macro calculates the byte offset of a structure member
* from the start of a structure */
#define OFFSET(structure, member) ((long) &(((structure *) 0) -> member))
/* Structure to hold information about database channels */
struct seqChan
{
char *dbAsName; /* assigned channel name */
void *pVar; /* ptr to variable (-r option)
* or structure offset (+r option) */
char *pVarName; /* variable name, including subscripts */
char *pVarType; /* variable type, e.g. "int" */
long count; /* element count for arrays */
long eventNum; /* event number for this channel */
long efId; /* event flag id if synced */
long monFlag; /* TRUE if channel is to be monitored */
};
/* Structure to hold information about a state */
struct seqState
{
char *pStateName; /* state name */
ACTION_FUNC actionFunc; /* action routine for this state */
EVENT_FUNC eventFunc; /* event routine for this state */
DELAY_FUNC delayFunc; /* delay setup routine for this state */
bitMask *pEventMask; /* event mask for this state */
};
/* Structure to hold information about a State Set */
struct seqSS
{
char *pSSName; /* state set name */
struct seqState *pStates; /* array of state blocks */
long numStates; /* number of states in this state set */
long errorState; /* error state index (-1 if none defined) */
};
/* All information about a state program */
struct seqProgram
{
long magic; /* magic number */
char *pProgName; /* program name (for debugging) */
struct seqChan *pChan; /* table of channels */
long numChans; /* number of db channels */
struct seqSS *pSS; /* array of state set info structs */
long numSS; /* number of state sets */
long varSize; /* # bytes in user variable area */
char *pParams; /* program paramters */
long numEvents; /* number of event flags */
long options; /* options (bit-encoded) */
EXIT_FUNC exitFunc; /* exit function */
};
/*
* Function declarations for interface between state program & sequencer.
* Notes:
* "seq_" is added by SNC to guarantee global uniqueness.
* These functions appear in the module seq_if.c.
* The SNC must generate these modules--see gen_ss_code.c.
*/
void seq_efSet(SS_ID, long); /* set an event flag */
long seq_efTest(SS_ID, long); /* test an event flag */
long seq_efClear(SS_ID, long); /* clear an event flag */
long seq_efTestAndClear(SS_ID, long);/* test & clear an event flag */
long seq_pvGet(SS_ID, long); /* get pv value */
long seq_pvPut(SS_ID, long); /* put pv value */
TS_STAMP seq_pvTimeStamp(SS_ID, long); /* get time stamp value */
long seq_pvAssign(SS_ID, long, char *);/* assign/connect to a pv */
long seq_pvMonitor(SS_ID, long); /* enable monitoring on pv */
long seq_pvStopMonitor(SS_ID, long); /* disable monitoring on pv */
long seq_pvStatus(SS_ID, long); /* returns pv alarm status code */
long seq_pvSeverity(SS_ID, long); /* returns pv alarm severity */
long seq_pvAssigned(SS_ID, long); /* returns TRUE if assigned */
long seq_pvConnected(SS_ID, long); /* TRUE if connected */
long seq_pvGetComplete(SS_ID, long); /* TRUE if last get completed */
long seq_pvChannelCount(SS_ID); /* returns number of channels */
long seq_pvConnectCount(SS_ID); /* returns number of channels connected */
long seq_pvAssignCount(SS_ID); /* returns number of channels assigned */
long seq_pvCount(SS_ID, long); /* returns number of elements in array */
void seq_pvFlush(); /* flush put/get requests */
long seq_pvIndex(SS_ID, long); /* returns index of pv */
long seq_seqLog(); /* Logging: variable number of parameters */
void seq_delayInit(SS_ID, long, float);/* initialize a delay entry */
long seq_delay(SS_ID, long); /* test a delay entry */
char *seq_macValueGet(SS_ID, char *); /* Given macro name, return ptr to value */
long seq_optGet (SS_ID ssId, char *opt); /* check an option for TRUE/FALSE */
#endif /*INCLseqComh*/