Files
sics/countdriv.h
2012-11-28 13:13:20 +11:00

97 lines
2.9 KiB
C

/*---------------------------------------------------------------------------
C O U N T E R D R I V E R
This is the interface to a Sics-Counter driver. This means a
single counter managing possibly several monitors in one go.
A counter can run for a predefined time or until a predefined
monitor count has been reached.
Mark Koennecke, January 1996
General parameter setting added:
Mark Koennecke, April 1999
copyright: see implementation file.
---------------------------------------------------------------------------*/
#ifndef SICSCOUNTERDRIVER
#define SICSCOUNTERDRIVER
#define COTERM 0
#define COREDO 1
#define MAXCOUNT 9 /* No of monitors + actual counter */
/* Parameter codes for the Set/Get pair of routines */
/*-------- threshold */
#define PARTHRESHOLD 1
/* counter driver additional error codes*/
#define UNKNOWNPAR -5000
#define BADCOUNTER -5001
typedef struct __COUNTER {
/* variables */
char *name;
char *type;
CounterMode eMode;
float fPreset;
float fLastCurrent;
float fTime;
int iNoOfMonitors;
int iControlMonitor;
long lCounts[MAXCOUNT];
int iPause;
int iErrorCode;
/* functions */
int (*GetStatus) (struct __COUNTER * self, float *fControl);
int (*Start) (struct __COUNTER * self);
int (*Pause) (struct __COUNTER * self);
int (*Continue) (struct __COUNTER * self);
int (*Halt) (struct __COUNTER * self);
int (*ReadValues) (struct __COUNTER * self);
int (*GetError) (struct __COUNTER * self, int *iCode,
char *error, int iErrLen);
int (*TryAndFixIt) (struct __COUNTER * self, int iCode);
int (*Set) (struct __COUNTER * self, char *name, int iCter, float fVal);
int (*Get) (struct __COUNTER * self, char *name, int iCter, float *fVal);
int (*Send) (struct __COUNTER * self, char *pText,
char *pReply, int iReplyLen);
void (*KillPrivate) (struct __COUNTER * self);
void *pData; /* counter specific data goes here, ONLY for
internal driver use!
*/
} CounterDriver, *pCounterDriver;
/*------------------------------------------------------------------------*/
/* countdriv.c */
pCounterDriver CreateCounterDriver(char *name, char *type);
void DeleteCounterDriver(pCounterDriver self);
/* PSI EL737 Counter */
pCounterDriver NewEL737Counter(char *name, char *host, int iPort,
int iChannel);
void KillEL737Counter(pCounterDriver self);
/* PSI Simulation counter, if you have no hardware */
/* simcter.c */
pCounterDriver NewSIMCounter(char *name, float fVal);
void KillSIMCounter(pCounterDriver self);
/*
* McStas simulation counter driver
* file: mcstascounter.c
*/
pCounterDriver NewMcStasCounter(char *name);
/*
* for regression testing
* file: regresscter.c
*/
pCounterDriver NewRegressCounter(char *name);
#endif