diff --git a/ease.h b/ease.h new file mode 100644 index 0000000..e639e90 --- /dev/null +++ b/ease.h @@ -0,0 +1,123 @@ +/*--------------------------------------------------------------------------- +ease.c + +basics for (ea)sy implementable (s)ample (e)nvironment devices. +handles background activity and connections over rs232. + +Markus Zolliker, March 2005 +---------------------------------------------------------------------------- +*/ + +#ifndef EASE_H +#define EASE_H + +#include +#include "rs232controller.h" +#include "pardef.h" +#include "fsm.h" + +#define EASE_ILL_ANS -3000 +#define EASE_FAULT -3001 +#define EASE_DEV_CHANGED -3002 + +#define EASE_RUN 0 + +typedef enum { EASE_connecting, EASE_notconnected, + EASE_idle, EASE_read, EASE_expect, EASE_lost } EaseState; +typedef enum { EASE_notMonitored, EASE_inTolerance, EASE_outOfTolerance } EaseTolState; + +typedef struct { + ParData p; + FsmHandler handler; + FsmFunc start; + FsmFunc idle; + FsmFunc read; + FsmFunc doit; + FsmFunc todo; + rs232 *ser; + Fsm *task; /* a pointer to the task */ + int errCode; /* error code of last operation. not changed on success */ + EaseState state; + time_t cmdtime; + int syntax; /* not used in ease, may be used by the driver. used by oicom */ + char cmd[32]; + char ans[64]; + char version[64]; + char msg[256]; + int maxflag; + time_t readPeriod; + unsigned long *updateFlags; +} EaseBase; + +typedef struct { + EaseBase b; + IDrivable *drivInt; + EVInterface *evInt; + EVMode eMode; + int stopped; + int hwstate; /* SICS driver state */ + EaseTolState tolState; + float upperLimit; + float lowerLimit; + float tolerance; + int maxwait; + int settle; + float targetValue; + time_t timeout, finish; + int usedSettle; +} EaseDriv; + +ParClass *EaseBaseClass(void); +ParClass *EaseDrivClass(void); + +EaseBase *EaseBaseCast(void *object); +EaseDriv *EaseDrivCast(void *object); + +void EaseWriteError(EaseBase *eab); +void EaseWrite(EaseBase *eab, char *cmd); +int EaseWaitRead(EaseBase *eab); +int EaseHandler(EaseBase *eab); +void EaseBasePar(void *object); +void EaseSendPar(void *object); +void EaseMsgPar(void *object); +void EaseDrivPar(void *object, char *fmt, char *unit); +void EaseParHasChanged(void); +void EaseStop(EaseBase *eab); +int EaseCheckDoit(EaseBase *eab); +int EaseNextFullRead(EaseBase *eab); + +int EaseUpdate(int flag); /* used inside pardef, after ParName and before + the parameter definition. + The specified flag is updated + when the parameter was changed. + returns 1 when changed, 0 when not changed + calls ParAccess(usUser) and ParSave(1), as + this seems to be useful for parameters + that reflect a state of the device. */ +int EaseNextUpdate(void *object); + /* get next update flag and clear it. + return the next set update flag or -1 when no + flag was set. */ +int EaseGetUpdate(void *object, int flag); + /* get update flag. return the state of the + specified flag */ +void EaseSetUpdate(void *object, int flag, int state); + /* set an update flag */ + +void *EaseMakeBase(SConnection *con, void *class, int argc, char *argv[], + int dynamic, int maxflag, + ParDef pardef, + FsmHandler handler, + FsmFunc start, + FsmFunc idle, + FsmFunc read); +void *EaseMakeDriv(SConnection *con, void *class, int argc, char *argv[], + int dynamic, int maxflag, + ParDef pardef, + FsmHandler handler, + FsmFunc start, + FsmFunc idle, + FsmFunc read, + FsmFunc run); + +#endif