- various improvements

This commit is contained in:
zolliker
2008-03-03 14:51:36 +00:00
parent 41b4230d76
commit 131f1144d8
6 changed files with 50 additions and 26 deletions

View File

@ -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 ********************************************/