/*--------------------------------------------------------------------------- amilevel.c Driver for the AMI 135/136 level meter Markus Zolliker, May 2007 OBSOLETE, replaced by scriptcontext driver, May 2016 ----------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "lscsupport.h" #include "fsm.h" #include "initializer.h" #define PID_FLAG 1 #define RDGRNG_FLAG 2 #define HTRRNG_FLAG 3 typedef struct { EaseBase b; float level; } Ami; static ParClass amiClass = { "AMILEVEL", sizeof(Ami) }; /*----------------------------------------------------------------------------*/ static void AmiParDef(void *object) { Ami *drv = ParCast(&amiClass, object); EaseBase *eab = object; ParName(""); ParTail("cm"); ParFloat(&drv->level, PAR_NAN); EaseBasePar(drv); EaseSendPar(drv); ParStdDef(); EaseMsgPar(drv); } /*----------------------------------------------------------------------------*/ static long AmiRead(long pc, void *object) { Ami *drv = ParCast(&amiClass, object); EaseBase *eab = object; switch (pc) { default: /* FSM BEGIN ****************************** */ EasePchk(drv); EaseWrite(eab, "level"); return __LINE__; case __LINE__: /**********************************/ drv->level = atof(eab->ans); ParLog(drv); fsm_quit:return 0; } /* FSM END ******************************** */ } /*----------------------------------------------------------------------------*/ static long AmiStart(long pc, void *object) { Ami *drv = ParCast(&amiClass, object); EaseBase *eab = object; switch (pc) { default: /* FSM BEGIN ****************************** */ EasePchk(drv); EaseWrite(eab, "cm"); return __LINE__; case __LINE__: /**********************************/ quit: return 0; } /* FSM END ******************************************* */ } /*----------------------------------------------------------------------------*/ static int AmiInit(SConnection * con, int argc, char *argv[], int dynamic) { /* args: MakeObject objectname ami MakeObject objectname ami */ Ami *drv; drv = EaseMakeBase(con, &amiClass, argc, argv, dynamic, 7, AmiParDef, LscHandler, AmiStart, NULL, AmiRead); if (drv == NULL) return 0; setRS232ReplyTerminator(drv->b.ser, "\n"); setRS232SendTerminator(drv->b.ser, "\n"); return 1; } /*----------------------------------------------------------------------------*/ void AmiStartup(void) { ParMakeClass(&amiClass, EaseBaseClass()); MakeDriver("AMILEVEL", AmiInit, 0, "Ami 135/136 level meter"); }