- various enhancements

This commit is contained in:
zolliker
2008-01-18 07:35:34 +00:00
parent a3df7d2729
commit 661df39166
11 changed files with 165 additions and 118 deletions

View File

@ -201,7 +201,7 @@ static int ArrayMakeItem(void *object, void *delete, int argc, char *argv[]) {
if (item->unit) item->unit = strdup(item->unit); if (item->unit) item->unit = strdup(item->unit);
if (item->value) item->value = strdup(item->value); if (item->value) item->value = strdup(item->value);
ParInitPar(object, item->name); ParInitPar(object, item->name);
SCparChange(SCLoad(&arr->p.conn)); SCparChange(SCLoad(arr->p.conn));
return 1; return 1;
Usage: Usage:

1
ease.c
View File

@ -170,6 +170,7 @@ void EaseSavePars(void) {
static int EaseRestart(EaseBase *eab) { static int EaseRestart(EaseBase *eab) {
int iRet; int iRet;
eab->errCode = 0;
if (eab->task) { if (eab->task) {
FsmStop(eab->task, eab->idle); FsmStop(eab->task, eab->idle);
FsmRestartTask(eab->task, eab->idle); FsmRestartTask(eab->task, eab->idle);

View File

@ -42,6 +42,7 @@ typedef struct {
int persmode; /* 0: leave switch on, 1: go to persistant mode */ int persmode; /* 0: leave switch on, 1: go to persistant mode */
int perswitch; /* state of switch */ int perswitch; /* state of switch */
int remote; /* 0: local, 1: remote, do not check, 2: remote, check */ int remote; /* 0: local, 1: remote, do not check, 2: remote, check */
int nowait; /* 0: normal, 1: drive finishes immediately, ramp in background */
int heaterFault; int heaterFault;
char *fmt; /* fmt for field */ char *fmt; /* fmt for field */
int force; /* force = 2: put heater switch even when stored field does not match */ int force; /* force = 2: put heater switch even when stored field does not match */
@ -125,6 +126,9 @@ void IpsParDef(void *object) {
ParName("perswitch"); ParEnum(onOff); ParList(0); ParName("perswitch"); ParEnum(onOff); ParList(0);
ParInt(&drv->perswitch, PAR_NAN); ParInt(&drv->perswitch, PAR_NAN);
ParName("nowait"); ParAccess(usUser); ParEnum(onOff); ParList(0);
ParInt(&drv->nowait, 0);
ParName("maxlimit"); ParSave(1); ParFloat(&drv->maxlimit, 0.0); ParName("maxlimit"); ParSave(1); ParFloat(&drv->maxlimit, 0.0);
ParName("limit"); ParAccess(usUser); ParFmt(drv->fmt); ParTail("Tesla"); ParName("limit"); ParAccess(usUser); ParFmt(drv->fmt); ParTail("Tesla");
@ -302,6 +306,10 @@ static long IpsChangeField(long pc, void *object) {
switch (pc) { default: /* FSM BEGIN *******************************/ switch (pc) { default: /* FSM BEGIN *******************************/
EaseSetUpdate(eab, EASE_RUN, 0); EaseSetUpdate(eab, EASE_RUN, 0);
if (drv->nowait) {
drv->d.hwstate = HWIdle;
drv->d.eMode = EVMonitor; /* finish drive, continue in background */
}
EaseWrite(eab, "C3"); EaseWrite(eab, "C3");
drv->remote = 1; drv->remote = 1;
return __LINE__; case __LINE__: /**********************************/ return __LINE__; case __LINE__: /**********************************/

View File

@ -128,7 +128,7 @@ int ParPrintf(void *object, int iOut, const char *fmt, ...) {
if (ctx && pobj == ctx->obj && ctx->con) { if (ctx && pobj == ctx->obj && ctx->con) {
con = ctx->con; con = ctx->con;
} else { } else {
con = SCLoad(&pobj->conn); con = SCLoad(pobj->conn);
} }
} else if (ctx) { } else if (ctx) {
con = ctx->con; con = ctx->con;
@ -278,17 +278,27 @@ int ParLog(void *object) {
ParData *o = ParCheck(&parClass, object); ParData *o = ParCheck(&parClass, object);
int next; int next;
if (o->desc == NULL) {
free(o);
return 0;
}
if (o->logPending == 2) {
o->logPending = 0;
return 0;
}
ParBegin(); ParBegin();
ctx->now = time(NULL); ctx->now = time(NULL);
next = ctx->now - (o->logTime / o->period + 1) * o->period; next = ctx->now - (o->logTime / o->period + 1) * o->period;
if (next >= 0) { if (next < 0) {
showTime = 1; ParEnd();
ParDo(0, o, PAR_LOG, NULL); return 1;
o->logTime = ctx->now;
o->logPending = 0;
} }
showTime = 1;
ParDo(0, o, PAR_LOG, NULL);
o->logTime = ctx->now;
o->logPending = 0;
ParEnd(); ParEnd();
return next; return 0;
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
void ParLogForced(void *object) { void ParLogForced(void *object) {
@ -300,7 +310,9 @@ void ParLogForced(void *object) {
showTime = 1; showTime = 1;
ParDo(0, o, PAR_LOG, NULL); ParDo(0, o, PAR_LOG, NULL);
o->logTime = ctx->now; o->logTime = ctx->now;
o->logPending = 0; if (o->logPending) {
o->logPending = 2; /* tell ParLog that we are done already, but task is still pending */
}
ParEnd(); ParEnd();
} }
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
@ -382,7 +394,7 @@ void ParSaveConn(void *object, SConnection *con) {
rights = SCGetRights(con); rights = SCGetRights(con);
if (rights >= usMugger && rights <= usUser && con->pSock != NULL) { if (rights >= usMugger && rights <= usUser && con->pSock != NULL) {
SCSave(&o->conn, con); o->conn = SCSave(con, o->conn);
} }
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
@ -457,6 +469,10 @@ static int ParExecute(SConnection *con, SicsInterp *sics, void *object, int argc
ctx->enumText = 1; ctx->enumText = 1;
ParDo(con, o, PAR_SHOW, argv[2]); ParDo(con, o, PAR_SHOW, argv[2]);
} }
} else if (strcmp(argv[1],"endinit") == 0) {
initObj = NULL;
ParEnd();
return 1;
} else { } else {
if (strcmp(argv[1], "=") == 0) { if (strcmp(argv[1], "=") == 0) {
ctx->argc = argc - 2; ctx->argc = argc - 2;
@ -1198,13 +1214,7 @@ void *ParObject(void) {
return ctx->obj; return ctx->obj;
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static int ParEndInit(void *object, void *arg, int argc, char *argv[]) {
initObj = NULL;
return 1;
}
/*----------------------------------------------------------------------------*/
void ParStdDef(void) { void ParStdDef(void) {
ParName("endinit"); ParCmd(ParEndInit, NULL);
ParName("verbose"); ParAccess(usUser); ParSave(0); ParLogAs(NULL); ParInt(&ctx->obj->verbose, 1); ParName("verbose"); ParAccess(usUser); ParSave(0); ParLogAs(NULL); ParInt(&ctx->obj->verbose, 1);
ParName("driver"); ParLogAs(NULL); ParStr(&ctx->obj->desc->name, NULL); ParName("driver"); ParLogAs(NULL); ParStr(&ctx->obj->desc->name, NULL);
ParName("creationCmd"); ParLogAs(NULL); ParStr(&ctx->obj->creationCmd, NULL); ParName("creationCmd"); ParLogAs(NULL); ParStr(&ctx->obj->creationCmd, NULL);
@ -1238,6 +1248,7 @@ void ParKill(void *object) {
if (o->creationCmd) free(o->creationCmd); if (o->creationCmd) free(o->creationCmd);
if (o->pCall) DeleteCallBackInterface(o->pCall); if (o->pCall) DeleteCallBackInterface(o->pCall);
if (o->desc) DeleteDescriptor(o->desc); if (o->desc) DeleteDescriptor(o->desc);
if (o->conn) SCStoreFree(o->conn);
p = o->infoList; p = o->infoList;
while (p) { while (p) {
q = p->next; q = p->next;
@ -1246,7 +1257,11 @@ void ParKill(void *object) {
free(p); free(p);
p = q; p = q;
} }
free(o); if (o->logPending) { /* will be free in scheduled ParLog function */
o->desc = NULL;
} else {
free(o);
}
ParEnd(); ParEnd();
if (ctx == NULL && pServ->pSics->iDeleting) { /* finish, no more contexts nested -> free all of them */ if (ctx == NULL && pServ->pSics->iDeleting) { /* finish, no more contexts nested -> free all of them */
while (freeContexts) { while (freeContexts) {
@ -1300,6 +1315,8 @@ void *ParMake(SConnection *con, char *name, ParClass *class, ParDef pardef,
o->period = 5; o->period = 5;
o->infoList = NULL; o->infoList = NULL;
o->verbose = 0; o->verbose = 0;
o->logPending = 0;
o->conn = NULL;
ParSaveConn(o, con); ParSaveConn(o, con);
o->pardef = pardef; o->pardef = pardef;
ParBegin(); ParBegin();

View File

@ -428,7 +428,7 @@ static int TASHeader(pScanData self)
fVal = pDrive->GetValue(pDum,self->pCon); fVal = pDrive->GetValue(pDum,self->pCon);
pTem = (pEVControl)pCom->pData; pTem = (pEVControl)pCom->pData;
EVCGetPar(pTem,"target",&fVal2); EVCGetPar(pTem,"target",&fVal2);
fprintf(self->fd,"PARAM: TT=%8.4f, RT=%8.4f\n",fVal, fVal2); fprintf(self->fd,"PARAM: TEM=%8.4f, RT=%8.4f\n",fVal, fVal2);
} }
} }

View File

@ -494,7 +494,7 @@ int CocShowLog(CocConn *conn, char *loglist, int start, int lines) {
void CocCloseClient(CocConn *conn) { void CocCloseClient(CocConn *conn) {
assert(conn!=NULL); assert(conn!=NULL);
close(conn->fd); if (conn->fd >= 0) close(conn->fd);
conn->fd=-1; conn->fd=-1;
} }

View File

@ -2,6 +2,8 @@ sens=g26550
unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically
!tlim=325 ! setpoint limit (automatic if omitted) !tlim=325 ! setpoint limit (automatic if omitted)
type=Ge ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted) type=Ge ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted)
range=60000
form=loglog
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
51675.31367 1.26557 51675.31367 1.26557
35429.70923 1.40134 35429.70923 1.40134

View File

@ -5,6 +5,7 @@ type=cernox ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cerno
!excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type) !excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type)
!range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type) !range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type)
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
27000 1.1
15213.49 1.407016 15213.49 1.407016
13018.43 1.5035 13018.43 1.5035
11293.78 1.601262 11293.78 1.601262
@ -50,4 +51,5 @@ curv ! curve (sensor,temp/K) follows, must be ordered, but can be inc
57.69399 273.2733 57.69399 273.2733
57.65295 273.5096 57.65295 273.5096
53.45707 300.0828 53.45707 300.0828
49 335

View File

@ -1,92 +1,91 @@
sens=x22644 sens=x22644k
unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically unit=Ohm ! sensor format (mV,V,Ohm), log formats are choosen automatically
!tlim=325 ! setpoint limit (automatic if omitted) !tlim=325 ! setpoint limit (automatic if omitted)
type=cernox ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted) type=cernox ! sensor type (Special,Si,GaAlAs,Pt250,Pt500,Pt2500,RhFe,C,Cernox,RuOx,Ge) (special if omitted)
!excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type) !excit=300uA ! (off,30nA,100nA,300nA,1uA,3uA,10uA,30uA,100uA,300uA,1mA,10mV,1mV) (if omitted: default from sensor type)
!range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type) !range=0 ! range in sensor units (if rang=0: determine range from table, if omitted: default from sensor type)
curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing curv ! curve (sensor,temp/K) follows, must be ordered, but can be increasing or decreasing
16007.79518 1.200721786 15490.92284 1.200721786
13255.8808 1.298891069 12954.34936 1.298891069
11205.15286 1.39943304 11076.20151 1.39943304
8443.928222 1.599937175 8520.068684 1.599937175
6702.327773 1.800442288 6861.930851 1.800442288
5534.122213 2.00019607 5720.174664 2.00019607
4704.584196 2.199969718 4893.450319 2.199969718
4084.913232 2.400603038 4267.228514 2.400603038
3610.312949 2.600633851 3782.811454 2.600633851
3230.256645 2.802896079 3392.064692 2.802896079
2936.389321 2.998094443 3088.314838 2.998094443
2686.653219 3.198715722 2829.143213 3.198715722
2478.1989 3.399484728 2612.128987 3.399484728
2300.553298 3.602485184 2426.727308 3.602485184
2151.36877 3.800490872 2270.720446 3.800490872
2022.540635 3.998439887 2135.786463 3.998439887
1908.79865 4.197156641 2016.497011 4.197156641
1709.313903 4.621681363 1806.950796 4.621681363
1557.368026 5.030523733 1647.078313 5.030523733
1406.421873 5.540281439 1488.052584 5.540281439
1243.706071 6.25898771 1316.419467 6.25898771
1105.603956 7.076289652 1170.596974 7.076289652
977.4489794 8.098257051 1035.166504 8.098257051
880.4428612 9.126725378 932.58957 9.126725378
804.8003471 10.14989046 852.5687804 10.14989046
743.7218062 11.1730348 787.9348812 11.1730348
693.7309884 12.18383727 735.021783 12.18383727
651.4548886 13.19332605 690.2662946 13.19332605
615.7657565 14.18572326 652.4786656 14.18572326
584.5828244 15.17662749 619.4583612 15.17662749
557.2403338 16.16073706 590.5019897 16.16073706
532.9508371 17.14074973 564.7767246 17.14074973
511.1072589 18.11815111 541.6403519 18.11815111
491.3416812 19.09726974 520.7037071 19.09726974
473.3439969 20.07459081 501.6387006 20.07459081
455.2101691 21.15478955 482.4285499 21.15478955
431.4309748 22.73367042 457.2366045 22.73367042
410.1806618 24.3324661 434.7225473 24.3324661
390.407091 26.00456745 413.7720569 26.00456745
373.2423216 27.6242651 395.5849007 27.6242651
357.4650865 29.26937996 378.8673435 29.26937996
341.3901179 31.1270676 361.8337601 31.1270676
324.8832171 33.25128091 344.3419371 33.25128091
304.5451078 36.23921994 322.7895815 36.23921994
287.1316191 39.19190152 304.3358536 39.19190152
271.3027429 42.22413357 287.5609455 42.22413357
257.4885798 45.23979471 272.9208287 45.23979471
245.297921 48.23143543 260.0010408 48.23143543
237.8548894 50.22289595 252.1127299 50.22289595
221.3051609 55.19735291 234.5726345 55.19735291
207.0981627 60.20938313 219.515172 60.20938313
194.8252865 65.20351886 206.5074101 65.20351886
184.1071589 70.19674071 195.1473491 70.19674071
174.6169591 75.18080073 185.0886532 75.18080073
166.126924 80.17225392 176.0899553 80.17225392
158.5229665 85.16939558 168.0303614 85.16939558
151.626774 90.16147891 160.7208948 90.16147891
145.4056367 95.15586553 154.1269009 95.15586553
139.6765896 100.1540934 148.0544602 100.1540934
129.6293513 110.1362537 137.4049343 110.1362537
120.9858687 120.1370202 128.24325 120.1370202
113.5180198 130.13073 120.3276383 130.13073
106.9678656 140.1252385 113.3847137 140.1252385
101.1878636 150.1234354 107.2580994 150.1234354
96.03408894 160.1165839 101.7952486 160.1165839
91.42205476 170.1168663 96.90661397 170.1168663
87.26057763 180.1290119 92.49554787 180.1290119
83.5052218 190.1274068 88.51495284 190.1274068
80.09071577 200.1278156 84.89564499 200.1278156
76.96422711 210.1345051 81.58162485 210.1345051
74.10488591 220.1302898 78.55077213 220.1302898
71.49685195 230.1260865 75.7862976 230.1260865
69.07286887 240.1285934 73.21691146 240.1285934
66.84323633 250.1146862 70.85353186 250.1146862
64.77194872 260.1210378 68.6579939 260.1210378
62.85425529 270.1122296 66.6252623 270.1122296
61.06392683 280.1125128 64.72753475 280.1125128
59.42108067 289.9881766 62.9861357 289.9881766
57.86899725 299.992933 61.34094329 299.992933
56.40163103 310.0918565 59.78554947 310.0918565
55.70314445 315.0849843 59.04516028 315.0849843
55.03104128 320.106081 58.33273711 320.106081
54.25379641 326.0894698 57.5088645 326.0894698
53.76781249 329.9611435 56.9937258 329.9611435

View File

@ -99,7 +99,8 @@ void Usage(int cmds_only) {
" -a or a ask always for username/password, forget passwords\n" " -a or a ask always for username/password, forget passwords\n"
" -c or c use background color instead of # and |\n" " -c or c use background color instead of # and |\n"
" -s or s simulation mode (on some instruments)\n" " -s or s simulation mode (on some instruments)\n"
" <host> connect to a server on a different host\n" " <instr> connect to the server for instr\n"
" -h <host> connect to a server on a different host\n"
" -p <port> connect to a server on a different port\n" " -p <port> connect to a server on a different port\n"
" -n do only a minimal login (no check of instrument)\n" " -n do only a minimal login (no check of instrument)\n"
" no option login with default privilege\n" " no option login with default privilege\n"

View File

@ -58,18 +58,19 @@ typedef struct {
char typ; char typ;
} SensorT; } SensorT;
enum Sensors { A, B, C, D, A1, A2, A3, A4, N_SENSORS }; enum Sensors { A, B, C, D, A0, A1, A2, A3, A4, N_SENSORS };
static SensorT static SensorT
sensA={"A"}, sensA={"A"},
sensB={"B"}, sensB={"B"},
sensC={"C"}, sensC={"C"},
sensD={"D"}, sensD={"D"},
sensA0={"A0", DATA_UNDEF},
sensA1={"A1", DATA_UNDEF}, sensA1={"A1", DATA_UNDEF},
sensA2={"A2", DATA_UNDEF}, sensA2={"A2", DATA_UNDEF},
sensA3={"A3", DATA_UNDEF}, sensA3={"A3", DATA_UNDEF},
sensA4={"A4", DATA_UNDEF}, sensA4={"A4", DATA_UNDEF},
*sensors[N_SENSORS]={&sensA, &sensB, &sensC, &sensD, &sensA1, &sensA2, &sensA3, &sensA4 }, *sensors[N_SENSORS]={&sensA, &sensB, &sensC, &sensD, &sensA0, &sensA1, &sensA2, &sensA3, &sensA4 },
*ctlSens=NULL, /* control sensor */ *ctlSens=NULL, /* control sensor */
*heliumSens=NULL, *heliumSens=NULL,
*auxSens=NULL, *auxSens=NULL,
@ -672,15 +673,15 @@ again:
} }
if (sensA.type[0]>'0' && sensA.type[0]<='4') { if (sensA.type[0]>'0' && sensA.type[0]<='4') {
nScan=sensA.type[0]-'0'; nScan=sensA.type[0]-'0';
for (i=4;i<4+nScan;i++) { for (i=5;i<5+nScan;i++) {
s=sensors[i]; s=sensors[i];
s->present=-1; s->present=-1;
s->band=10; s->band=10;
if (s->scale==0.0) s->scale=1.0; if (s->scale==0.0) s->scale=1.0;
s->typ='1'+i-4; s->typ='1'+i-5;
} }
sensA.type[0]='\0'; sensA.type[0]='\0';
for (i=4+nScan; i<N_SENSORS; i++) { for (i=5+nScan; i<N_SENSORS; i++) {
sensors[i]->t=DATA_UNDEF; sensors[i]->t=DATA_UNDEF;
sensors[i]->present=0; sensors[i]->present=0;
} }
@ -879,7 +880,7 @@ void LogMinMax(int new) {
} else if (nScan==0) { } else if (nScan==0) {
return; return;
} }
for (i=4; i<4+nScan; i++) { for (i=5; i<5+nScan; i++) {
s1=sensors[i]; s1=sensors[i];
if (s1->t!=DATA_UNDEF) { if (s1->t!=DATA_UNDEF) {
sprintf(buf1, " T%c %.5g", s1->ch[1], s1->t); sprintf(buf1, " T%c %.5g", s1->ch[1], s1->t);
@ -1009,7 +1010,7 @@ int ReadTemp(void) {
if (nScan>0) { if (nScan>0) {
while (1) { /* read until a non-selected channel found */ while (1) { /* read until a non-selected channel found */
if (iScan>=nScan) iScan=0; if (iScan>=nScan) iScan=0;
s=sensors[iScan+4]; s=sensors[iScan+5];
if (s->present<1) break; if (s->present<1) break;
str_copy(chan, s->ch); str_copy(chan, s->ch);
ERR_P(LscCmd(ser, "KRDG?[chan]>fbuf;DIOST?>,out1")); ERR_P(LscCmd(ser, "KRDG?[chan]>fbuf;DIOST?>,out1"));
@ -1615,7 +1616,7 @@ int ConfigAlarms(float genLimit) {
ERR_P(LscCmd(ser, "RELAY 1:1;BEEP:0")); ERR_P(LscCmd(ser, "RELAY 1:1;BEEP:0"));
relay=0; relay=0;
k=0; k=0;
for (i=0;i<4+nScan;i++) { for (i=0;i<5+nScan;i++) {
s=sensors[i]; s=sensors[i];
str_copy(buf1, s->ch); str_copy(buf1, s->ch);
if (s->customAlarm==0 && genLimit>0.0) s->alarm=genLimit; if (s->customAlarm==0 && genLimit>0.0) s->alarm=genLimit;
@ -1675,7 +1676,7 @@ void AssignTypes(void) {
auxSens=NULL; auxSens=NULL;
testSens=NULL; testSens=NULL;
test2Sens=NULL; test2Sens=NULL;
for (i=0; i<4+nScan; i++) { for (i=0; i<5+nScan; i++) {
s=sensors[i]; s=sensors[i];
if (s->present==1) { if (s->present==1) {
typ=s->typ; typ=s->typ;
@ -1736,7 +1737,7 @@ int Settings(void) {
} else { } else {
ERR_P(LscCmd(ser, "PID [loop],[prop],[integ],[deriv]")); ERR_P(LscCmd(ser, "PID [loop],[prop],[integ],[deriv]"));
} }
for (i=0; i<4+nScan; i++) { for (i=0; i<5+nScan; i++) {
s=sensors[i]; s=sensors[i];
if (i<4) { if (i<4) {
plug=plugs[i/2]; plug=plugs[i/2];
@ -1796,7 +1797,7 @@ int Settings(void) {
DisplayFmt(auxSens, fields, &k); DisplayFmt(auxSens, fields, &k);
if (nScan>0) { if (nScan>0) {
i=0; i=0;
while (i<nScan && DisplayFmt(sensors[i+4], fields, &k)) { while (i<nScan && DisplayFmt(sensors[i+5], fields, &k)) {
i++; i++;
} }
} }
@ -2491,6 +2492,19 @@ int PeriodicTask(void) {
} }
} }
if ((plug0.code1 & 0x2a) == 0x20) {
sensA0.t = DATA_UNDEF;
sensA1.t = DATA_UNDEF;
sensA2.t = DATA_UNDEF;
sensA3.t = DATA_UNDEF;
switch ((int)scanChan) {
case 0: sensA0.t = te; break;
case 1: sensA1.t = te; break;
case 2: sensA2.t = te; break;
case 3: sensA3.t = te; break;
default: break;
}
}
if (out1==30 && out2==29) { if (out1==30 && out2==29) {
/* code conversion */ /* code conversion */
plug0.code1=3*decod[cod2 % 8] ^ 2*decod[cod1 % 8]; /* ^ is exclusive OR */ plug0.code1=3*decod[cod2 % 8] ^ 2*decod[cod1 % 8]; /* ^ is exclusive OR */
@ -3105,7 +3119,7 @@ int StatusHdl(int mode, void *base, int fd) {
if (test2Sens!=NULL) { if (test2Sens!=NULL) {
ERR_I(ShowSensor(&buf, test2Sens, "T", "K", 0)); ERR_I(ShowSensor(&buf, test2Sens, "T", "K", 0));
} }
for (i=4; i<4+nScan; i++) { for (i=5; i<5+nScan; i++) {
ERR_I(ShowSensor(&buf, sensors[i], "T", "K", 0)); ERR_I(ShowSensor(&buf, sensors[i], "T", "K", 0));
} }
if (auxSens!=NULL) { if (auxSens!=NULL) {
@ -3298,6 +3312,7 @@ int main(int argc, char *argv[]) {
CocDefStruct(sensB, SensorT); CocDefStruct(sensB, SensorT);
CocDefStruct(sensC, SensorT); CocDefStruct(sensC, SensorT);
CocDefStruct(sensD, SensorT); CocDefStruct(sensD, SensorT);
CocDefStruct(sensA0, SensorT);
CocDefStruct(sensA1, SensorT); CocDefStruct(sensA1, SensorT);
CocDefStruct(sensA2, SensorT); CocDefStruct(sensA2, SensorT);
CocDefStruct(sensA3, SensorT); CocDefStruct(sensA3, SensorT);
@ -3438,6 +3453,7 @@ int main(int argc, char *argv[]) {
CocAlias(Tb,sensB.t); CocAlias(Tb,sensB.t);
CocAlias(Tc,sensC.t); CocAlias(Tc,sensC.t);
CocAlias(Td,sensD.t); CocAlias(Td,sensD.t);
CocAlias(T0,sensA0.t);
CocAlias(T1,sensA1.t); CocAlias(T1,sensA1.t);
CocAlias(T2,sensA2.t); CocAlias(T2,sensA2.t);
CocAlias(T3,sensA3.t); CocAlias(T3,sensA3.t);
@ -3561,6 +3577,7 @@ int main(int argc, char *argv[]) {
ERR_P(DataCreateSet(NULL, "Te", &te, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "Te", &te, logPeriod, LOGLIFETIME, tim));
ERR_P(DataCreateSet(NULL, "Tk", &tk, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "Tk", &tk, logPeriod, LOGLIFETIME, tim));
ERR_P(DataCreateSet(NULL, "He", &he, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "He", &he, logPeriod, LOGLIFETIME, tim));
ERR_P(DataCreateSet(NULL, "T0", &sensA0.t, logPeriod, LOGLIFETIME, tim));
ERR_P(DataCreateSet(NULL, "T1", &sensA1.t, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "T1", &sensA1.t, logPeriod, LOGLIFETIME, tim));
ERR_P(DataCreateSet(NULL, "T2", &sensA2.t, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "T2", &sensA2.t, logPeriod, LOGLIFETIME, tim));
ERR_P(DataCreateSet(NULL, "T3", &sensA3.t, logPeriod, LOGLIFETIME, tim)); ERR_P(DataCreateSet(NULL, "T3", &sensA3.t, logPeriod, LOGLIFETIME, tim));