97 lines
2.9 KiB
C
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
|