countdriv.h CounterDriver: iControlMonitor id (default=0) countdriv.c CreateCounterDriver: set the default control monitor to channel zero counter.h counter.c Commands to get and set the control monitor GetCounts return the counts from the current control monitor, ie iControlMonitor TODO loadCountData, get time from controlling monitor. scan.c Set control monitor on counter when setting scan channel multicounter.c MMCStart, set slave monitors with a timer preset of about a year to make sure that they don't stop before the controlling monitor. r2642 | ffr | 2008-07-10 15:21:21 +1000 (Thu, 10 Jul 2008) | 20 lines
80 lines
2.8 KiB
C
80 lines
2.8 KiB
C
/*-------------------------------------------------------------------------
|
|
|
|
C O U N T E R
|
|
|
|
The SICS Interface to a single detector and his associated
|
|
monitors.
|
|
|
|
Mark Koennecke, January 1996
|
|
|
|
copyright: see implementation file.
|
|
|
|
Massively reworked to accomodate second generation counter objects.
|
|
|
|
Mark Koennecke, January 2009
|
|
----------------------------------------------------------------------------*/
|
|
#ifndef SICSCOUNTER
|
|
#define SICSCOUNTER
|
|
#include "countdriv.h"
|
|
|
|
typedef struct __Counter{
|
|
pObjectDescriptor pDes;
|
|
pHdb objectNode;
|
|
char *name;
|
|
int isUpToDate;
|
|
int iExponent;
|
|
pICountable pCountInt;
|
|
pCounterDriver pDriv;
|
|
pICallBack pCall;
|
|
unsigned long tStart;
|
|
int iCallbackCounter;
|
|
int badStatusCount;
|
|
int haltFixFlag; /* solely here to prevent multiple calls to the halt function on overrun timers in countersec.c*/
|
|
int (*setMode)(struct __Counter *self, CounterMode eMode);
|
|
CounterMode (*getMode)(struct __Counter *self);
|
|
int (*getNMonitor)(struct __Counter *self);
|
|
int (*setPreset)(struct __Counter *self, float val);
|
|
float (*getPreset)(struct __Counter *self);
|
|
float (*getControlValue)(struct __Counter *self);
|
|
long (*getCounts)(struct __Counter *self, SConnection *pCon);
|
|
long (*getMonitor)(struct __Counter *self, int iNum, SConnection *pCon);
|
|
void (*setMonitor)(struct __Counter *self, int iNum, long val);
|
|
float (*getTime)(struct __Counter *self, SConnection *pCon);
|
|
} Counter, *pCounter;
|
|
|
|
/*----------------------------- birth & death -----------------------------*/
|
|
|
|
pCounter CreateSecCounter(SConnection *pCon, char *type, char *name, int length);
|
|
pCounter CreateCounter(char *name, pCounterDriver pDriv);
|
|
void DeleteCounter(void *self);
|
|
int MakeCounter(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|
int argc, char *argv[]);
|
|
/* in countersec.c */
|
|
int MakeSecCter(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|
int argc, char *argv[]);
|
|
/*------------------------- set/get Parameters ----------------------------*/
|
|
int SetCounterMode(pCounter self, CounterMode eNew);
|
|
CounterMode GetCounterMode(pCounter self);
|
|
|
|
int SetCounterPreset(pCounter self, float fVal);
|
|
float GetCounterPreset(pCounter self);
|
|
float GetControlValue(pCounter self);
|
|
|
|
long GetCounts(pCounter self, SConnection * pCon);
|
|
long GetMonitor(pCounter self, int iNum, SConnection * pCon);
|
|
int GetNMonitor(pCounter self);
|
|
void SetMonitorValue(pCounter self, int index, long value);
|
|
float GetCountTime(pCounter self, SConnection * pCon);
|
|
|
|
int DoCount(pCounter self, float fPreset, SConnection * pCon, int iBlock);
|
|
|
|
/*-------------------------------------------------------------------------
|
|
the real action: starting and checking is packaged with the
|
|
ObjectDescriptor.
|
|
*/
|
|
|
|
int CountAction(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|
int argc, char *argv[]);
|
|
|
|
#endif
|