- various improvements
This commit is contained in:
39
ilmdriv.c
39
ilmdriv.c
@ -27,14 +27,18 @@ Markus Zolliker, April 2005
|
||||
#include "fsm.h"
|
||||
#include "initializer.h"
|
||||
|
||||
/*
|
||||
typedef enum { ALWAYSNEW, NEW, MEASURING, NOTYETREAD, OLD } ReadState;
|
||||
*/
|
||||
typedef enum { UNUSED, N2, PULSED_HE, CONTINOUS_HE, CHANNEL_ERROR = 9 } Usage;
|
||||
|
||||
typedef struct {
|
||||
EaseBase b;
|
||||
float lev[3];
|
||||
Usage usage[3];
|
||||
/*
|
||||
ReadState readState[3];
|
||||
*/
|
||||
} Ilm;
|
||||
|
||||
static ParClass ilmClass = { "ILM", sizeof(Ilm) };
|
||||
@ -49,23 +53,21 @@ static void IlmParDef(void *object) {
|
||||
if (drv->usage[0]) {
|
||||
ParFmt("%.1f"); ParTail(tails[drv->usage[0]]);
|
||||
}
|
||||
if (drv->readState[0] == NEW) {
|
||||
ParLogReady(PAR_NOW_READY);
|
||||
}
|
||||
/* if (drv->readState[0] == NEW) ParLogReady(PAR_NOW_READY); */
|
||||
ParFloat(&drv->lev[0], PAR_NAN);
|
||||
|
||||
ParName("lev2");
|
||||
if (drv->usage[1]) {
|
||||
ParFmt("%.1f"); ParTail(tails[drv->usage[1]]);
|
||||
};
|
||||
if (drv->readState[1] == NEW) ParLogReady(PAR_NOW_READY);
|
||||
/* if (drv->readState[1] == NEW) ParLogReady(PAR_NOW_READY); */
|
||||
ParFloat(&drv->lev[1], PAR_NAN);
|
||||
|
||||
ParName("lev3");
|
||||
if (drv->usage[2]) {
|
||||
ParFmt("%.1f"); ParTail(tails[drv->usage[2]]);
|
||||
}
|
||||
if (drv->readState[2] == NEW) ParLogReady(PAR_NOW_READY);
|
||||
/* if (drv->readState[2] == NEW) ParLogReady(PAR_NOW_READY); */
|
||||
ParFloat(&drv->lev[2], PAR_NAN);
|
||||
EaseBasePar(drv);
|
||||
EaseSendPar(drv);
|
||||
@ -93,14 +95,18 @@ static void IlmStatus(Ilm *drv) {
|
||||
}
|
||||
drv->usage[i] = ans[i+1] - '0';
|
||||
if (drv->usage[i] == PULSED_HE) {
|
||||
/*
|
||||
sscanf(ans+6+2*i, "%1x", &status);
|
||||
if (status & 1) { /* measuring */
|
||||
if (status & 1) { // measuring
|
||||
drv->readState[i] = MEASURING;
|
||||
} else if (drv->readState[i] == MEASURING) { /* new value */
|
||||
} else if (drv->readState[i] == MEASURING) { // new value
|
||||
drv->readState[i] = NOTYETREAD;
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
/*
|
||||
drv->readState[i] = ALWAYSNEW;
|
||||
*/
|
||||
}
|
||||
}
|
||||
return;
|
||||
@ -117,37 +123,46 @@ static long IlmRead(long pc, void *object) {
|
||||
IlmStatus(drv); /* check for errors */
|
||||
EaseWrite(eab, "R1"); /* read sensor 1 */
|
||||
return __LINE__; case __LINE__: /**********************************/
|
||||
if (drv->readState[0] != MEASURING) {
|
||||
drv->lev[0] = OxiGet(eab, 1, NULL, drv->lev[0]);
|
||||
}
|
||||
/* if (drv->readState[0] != MEASURING) */
|
||||
|
||||
drv->lev[0] = OxiGet(eab, 1, NULL, drv->lev[0]);
|
||||
|
||||
/*
|
||||
if (drv->readState[0] == NOTYETREAD) {
|
||||
drv->readState[0] = NEW;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
if (drv->usage[1] == 0) goto skip2;
|
||||
EaseWrite(eab, "R2"); /* read sensor 2 */
|
||||
return __LINE__; case __LINE__: /**********************************/
|
||||
drv->lev[1] = OxiGet(eab, 1, NULL, drv->lev[1]);
|
||||
/*
|
||||
if (drv->readState[1] == NOTYETREAD) {
|
||||
drv->readState[1] = NEW;
|
||||
}
|
||||
*/
|
||||
skip2:
|
||||
|
||||
if (drv->usage[2] == 0) goto skip3;
|
||||
EaseWrite(eab, "R3"); /* read sensor 3 */
|
||||
return __LINE__; case __LINE__: /**********************************/
|
||||
drv->lev[2] = OxiGet(eab, 1, NULL, drv->lev[2]);
|
||||
/*
|
||||
if (drv->readState[2] == NOTYETREAD) {
|
||||
drv->readState[2] = NEW;
|
||||
}
|
||||
*/
|
||||
skip3:
|
||||
|
||||
|
||||
if (ParLog(drv) >= 0) { /* logging was done */
|
||||
/*
|
||||
for (i=0; i<3; i++) {
|
||||
if (drv->readState[i] == NEW) {
|
||||
drv->readState[i] = OLD;
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
return 0; } /* FSM END ********************************************/
|
||||
|
||||
|
Reference in New Issue
Block a user