- added is_running to driveable ease objects - ighdriv.c: try <maxtry> times when status reply failes - ipsdriv.c: fix trainedTo parameter - reduced SEA version of SICS
130 lines
4.0 KiB
C
130 lines
4.0 KiB
C
/*---------------------------------------------------------------------------
|
|
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 <time.h>
|
|
#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_offline, EASE_notconnected, EASE_connecting,
|
|
EASE_idle, EASE_abort, 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;
|
|
time_t chktime;
|
|
int syntax; /* not used in ease, may be used by the driver. used by oxinst.c */
|
|
char cmd[64];
|
|
char ans[64];
|
|
char version[64];
|
|
char msg[256];
|
|
int maxflag;
|
|
time_t readPeriod;
|
|
unsigned long *updateFlags;
|
|
int startOk;
|
|
char *sendCmd;
|
|
int tmo;
|
|
} 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;
|
|
int is_running;
|
|
} 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 EaseKillDriv(EaseDriv * ead);
|
|
void EaseRunPar(void *object); /* is_running parameter */
|
|
void EaseDrivPar(void *object, char *fmt, char *unit);
|
|
void EasePchk(void *drv);
|
|
void EaseParHasChanged(void);
|
|
void EaseStop(EaseBase * eab, char *reason);
|
|
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 EaseUpdateHwstate(void *object, int drivStatus);
|
|
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
|