*** empty log message ***

This commit is contained in:
cvs
2000-03-20 07:38:12 +00:00
parent 4dd4d06ba0
commit 72589129c3
12 changed files with 192 additions and 160 deletions

View File

@ -9,7 +9,7 @@ OBJ= tecc.o client.o coc.o buf.o errhdl.o util.o \
#------------ for DigitalUnix #------------ for DigitalUnix
CC=cc CC=cc
CFLAGS= -std1 -g -c -I. CFLAGS= -std1 -g -c -warnprotos -I.
.c.o: .c.o:
$(CC) $(CFLAGS) $*.c $(CC) $(CFLAGS) $*.c

View File

@ -7,21 +7,43 @@
#define TWO28 268435456.0 #define TWO28 268435456.0
#define MAXINT 2147483647 #define MAXINT 2147483647
/* static char *null="\0"; */ int buf_encode_int(char b[4]) {
int i;
i=(unsigned char)b[0];
if (i>=128) i=i-256;
i=i*256+(unsigned char)b[1];
i=i*256+(unsigned char)b[2];
i=i*256+(unsigned char)b[3];
return(i);
}
void buf_decode_int(char b[4], int i) {
if (i<0) {
i+=0x10000000;
b[0]=i/0x01000000+128;
i=i % 0x01000000;
} else {
b[0]=i/0x01000000;
i=i % 0x01000000;
}
b[1]=i/0x10000; i=i % 0x10000;
b[2]=i/0x100;
b[3]=i % 0x100;
}
int buf_get_int(buf_type *buf) int buf_get_int(buf_type *buf)
{ char *b; { char *b;
int *res; int res;
b=buf->buf; b=buf->buf;
if (b==NULL) return(0); if (b==NULL) return(0);
if (b[0]!=1 || buf->size<5) {buf->buf=NULL; return(0); } if (b[0]!=1 || buf->size<5) {buf->buf=NULL; return(0); }
b++; b++;
res=(int *)b; res=buf_encode_int(b);
b+=4; b+=4;
buf->size-=5; buf->size-=5;
buf->buf=b; buf->buf=b;
return(*res); return(res);
} }
char *buf_get_str(buf_type *buf) char *buf_get_str(buf_type *buf)
@ -41,17 +63,17 @@ char *buf_get_str(buf_type *buf)
float buf_get_float(buf_type *buf) float buf_get_float(buf_type *buf)
{ char *b; { char *b;
float res; float res;
int *mant, iexp; int mant, iexp;
b=buf->buf; b=buf->buf;
if (b==NULL) return(0.0); if (b==NULL) return(0.0);
if (b[0]!=2 || buf->size<6) { buf->buf=NULL; return(0.0); } if (b[0]!=2 || buf->size<6) { buf->buf=NULL; return(0.0); }
iexp=b[1]; iexp=b[1];
b+=2; b+=2;
mant=(int *)b; mant=buf_encode_int(b);
b+=4; b+=4;
buf->size-=6; buf->size-=6;
res=(float)ldexp(*mant/TWO28, iexp); res=(float)ldexp(mant/TWO28, iexp);
buf->buf=b; buf->buf=b;
return res; return res;
} }
@ -69,8 +91,8 @@ void buf_put_int(buf_type *buf, int val)
if (b==NULL) return; if (b==NULL) return;
b[0]=1; b[0]=1;
b++; b++;
if (buf->size<=4) {buf->buf=NULL; return; } if (buf->size<=4) { buf->buf=NULL; return; }
*(int *)b=val; buf_decode_int(b, val);
b+=4; b+=4;
buf->size-=5; buf->size-=5;
buf->buf=b; buf->buf=b;
@ -125,7 +147,7 @@ void buf_put_float(buf_type *buf, float val)
b[0]=2; b[0]=2;
b[1]=iexp; b[1]=iexp;
b+=2; b+=2;
*(int *)b=mant; buf_decode_int(b, mant);
b+=4; b+=4;
buf->size-=6; buf->size-=6;
buf->buf=b; buf->buf=b;

View File

@ -20,6 +20,8 @@ static char ebuf[20000]="";
static char *eptr=&ebuf[0]; static char *eptr=&ebuf[0];
static int lastStamp=0; static int lastStamp=0;
static int notDated=0; static int notDated=0;
static int logMask=0;
static int wrtMask=0;
int ftime (struct timeb *__timeptr); /* for some reason not defined in timeb.h with flag -std1 */ int ftime (struct timeb *__timeptr); /* for some reason not defined in timeb.h with flag -std1 */
@ -30,7 +32,6 @@ void logfileOpen(int first) {
struct tm *tim; struct tm *tim;
struct timeb btim; struct timeb btim;
dirty=1;
if (logfileStd) { if (logfileStd) {
fil=stdout; fil=stdout;
return; return;
@ -72,8 +73,35 @@ void logfileInit(char *path, int nodate) {
logfileOpen(1); logfileOpen(1);
} }
void logfileStamp(char *text) void logfileOut(int mask, const char *fmt, ...)
{ struct tm *tim; { va_list ap;
assert(mask>0 && mask<32);
va_start(ap, fmt);
if (eptr!=NULL) {
if (eptr-ebuf > sizeof(ebuf)-512) {
sprintf(eptr, "... buffer full ... \1\1");
eptr=NULL;
} else {
vsprintf(eptr, fmt, ap);
assert(NULL==strchr(eptr, '\1'));
eptr+=strlen(eptr);
eptr[0]='\1'; /* put \1 as separator between blocks */
eptr[1]=mask;
eptr[2]='\0';
eptr+=2;
}
}
va_end(ap);
wrtMask=wrtMask | mask;
}
void logfileMask(int mask) {
logMask=logMask | mask;
}
void logfileStamp(void) {
struct tm *tim;
struct timeb btim; struct timeb btim;
int stamp; int stamp;
@ -84,23 +112,42 @@ void logfileStamp(char *text)
if (stamp<lastStamp) { /* time smaller than last time -> new day -> new logfile */ if (stamp<lastStamp) { /* time smaller than last time -> new day -> new logfile */
if (fil!=NULL) { fclose(fil); fil=NULL; } if (fil!=NULL) { fclose(fil); fil=NULL; }
logfileOpen(0); logfileOpen(0);
} else { }
if (!dirty) return; lastStamp=stamp;
logfileOut(LOG_MAIN, "--- %02d:%02d ---\n",tim->tm_hour,tim->tm_min);
dirty=0;
}
}
void logfileWrite(int mask) {
char *s, *next;
logMask=logMask | mask;
if (dirty) logfileStamp();
#ifdef __VMS #ifdef __VMS
if (fil==NULL) logfileOpen(0); if (fil==NULL) logfileOpen(0);
#endif #endif
} s=ebuf;
lastStamp=stamp; if (*s!='\0' && wrtMask & logMask) {
fprintf(fil, "%02d:%02d %s\n",tim->tm_hour,tim->tm_min,text); logfileStamp();
dirty=0; dirty=1;
}
#ifdef __VMS
if (!logfileStd) { fclose(fil); fil=NULL; }
#endif
}
void logfileUpd() next=strchr(s, '\1');
{ while (next!=NULL) {
*next='\0';
next++;
if (*next & logMask) {
fprintf(fil, "%s", s);
}
s=next+1;
next=strchr(s, '\1');
}
}
ebuf[0]='\0';
eptr=&ebuf[0];
logMask=0;
wrtMask=0;
#ifdef __VMS #ifdef __VMS
if (!logfileStd) { fclose(fil); fil=NULL; } if (!logfileStd) { fclose(fil); fil=NULL; }
#else #else
@ -108,65 +155,18 @@ void logfileUpd()
#endif #endif
} }
void logfileOutTmp(char *fmt, ...)
{ va_list ap;
va_start(ap, fmt);
if (eptr!=NULL) {
if (eptr-ebuf > sizeof(ebuf)-512) {
sprintf(eptr, "... buffer full ... \n");
eptr=NULL;
} else {
vsprintf(eptr, fmt, ap);
eptr+=strlen(eptr);
}
}
va_end(ap);
}
void logfileOut(char *fmt, ...)
{ va_list ap;
if (!dirty) { dirty=1; logfileStamp(""); }
dirty=1;
#ifdef __VMS
if (fil==NULL) logfileOpen(0);
#endif
va_start(ap, fmt);
vfprintf(fil, fmt, ap);
va_end(ap);
}
void logfilePurge() {
ebuf[0]='\0';
eptr=&ebuf[0];
}
void logfileWriteTmp() {
if (!dirty) { dirty=1; logfileStamp(""); }
dirty=1;
#ifdef __VMS
if (fil==NULL) logfileOpen(0);
#endif
if (ebuf[0]!='\0') fprintf(fil, "%s", ebuf);
ebuf[0]='\0';
eptr=&ebuf[0];
}
void logfileShowErr(char *text) void logfileShowErr(char *text)
{ {
logfileWriteTmp(); logfileWrite(LOG_ALL); /* write all */
ErrWrite(fil, text); ErrWrite(fil, text);
} }
void logfileClose() void logfileClose()
{ if (fil!=NULL) { fclose(fil); fil=NULL; } { logfileWrite(LOG_MAIN);
if (fil!=NULL) { fclose(fil); fil=NULL; }
} }
void logfileOutBuf(buf_type *buf) void logfileOutBuf(int mask, buf_type *buf)
{ char *obuf, *str; { char *obuf, *str;
int osiz; int osiz;
@ -174,17 +174,17 @@ void logfileOutBuf(buf_type *buf)
osiz=buf->size; osiz=buf->size;
while (buf->size>0) { while (buf->size>0) {
if (buf->buf==NULL) { if (buf->buf==NULL) {
logfileOutTmp(" ?"); break; logfileOut(mask, " ?"); break;
} else if (buf->buf[0]==1) { } else if (buf->buf[0]==1) {
logfileOutTmp(" %d", buf_get_int(buf)); logfileOut(mask, " %d", buf_get_int(buf));
} else if (buf->buf[0]==2) { } else if (buf->buf[0]==2) {
logfileOutTmp(" %f", buf_get_float(buf)); logfileOut(mask, " %f", buf_get_float(buf));
} else { } else {
str=buf_get_str(buf); str=buf_get_str(buf);
if (*str=='\0') { if (*str=='\0') {
logfileOutTmp(" ."); logfileOut(mask, " .");
} else { } else {
logfileOutTmp(" %s", str); logfileOut(mask, " %s", str);
} }
} }
} }

View File

@ -1,14 +1,17 @@
#include "buf.h" #include "buf.h"
#define LOG_ALL 31
#define LOG_SER 8
#define LOG_NET 4
#define LOG_WARN 2
#define LOG_MAIN 1
void logfileInit(char *path, int nodate); void logfileInit(char *path, int nodate);
void logfileUpd(void); void logfileOut(int mask, const char *fmt, ...);
void logfileStamp(char *text); void logfileOutBuf(int mask, buf_type *buf);
void logfileOut(char *fmt, ...);
void logfileOutTmp(char *fmt, ...);
void logfileOutBuf(buf_type *buf);
void logfileShowErr(char *text); void logfileShowErr(char *text);
void logfilePurge(void); void logfileMask(int mask);
void logfileWriteTmp(void); void logfileWrite(int mask);
void logfileClose(void); void logfileClose(void);
extern int logfileStd; extern int logfileStd;

View File

@ -31,7 +31,7 @@ int LscEqPar(char *par, char *res) {
i1=sscanf(plist[i], "%f%1s", &f1, &ch1); i1=sscanf(plist[i], "%f%1s", &f1, &ch1);
i2=sscanf(rlist[i], "%f%1s", &f2, &ch2); i2=sscanf(rlist[i], "%f%1s", &f2, &ch2);
if (i1!=1 || i2!=1 || abs(f1-f2)>1e-4+abs(f1)*5e-6) { if (i1!=1 || i2!=1 || abs(f1-f2)>1e-4+abs(f1)*5e-6) {
logfileOut("%s#%s\n", plist[i], rlist[i]); logfileOut(LOG_WARN, "%s#%s\n", plist[i], rlist[i]);
return(0); return(0);
} }
} }
@ -94,7 +94,10 @@ int LscCmdChk(SerChannel *ser, char *cmds) {
r=str_split(res, ';', rlist, &n); r=str_split(res, ';', rlist, &n);
if (r==NULL || n!=j) continue; if (r==NULL || n!=j) continue;
for (i=0; i<n; i++) { /* compare parameters */ for (i=0; i<n; i++) { /* compare parameters */
if (! LscEqPar(plist[i], rlist[i])) { j=0; break; } if (! LscEqPar(plist[i], rlist[i])) {
j=0; break;
logfileMask(LOG_SER);
}
} }
} while (j==0); } while (j==0);
} while (cn!=NULL); } while (cn!=NULL);

View File

@ -17,7 +17,6 @@ struct SerChan {
struct AsynSrv__info asyn_info; /* Contains skt, host, port & chan */ struct AsynSrv__info asyn_info; /* Contains skt, host, port & chan */
struct RS__MsgStruct to_host; struct RS__MsgStruct to_host;
struct RS__RespStruct from_host; struct RS__RespStruct from_host;
int logIt;
char cmd[SER_BUF_LEN]; char cmd[SER_BUF_LEN];
}; };
@ -29,7 +28,7 @@ void SerA_error(void) {
ErrMsg("asynsrv error"); ErrTxt(a_txt,0); ErrMsg("asynsrv error"); ErrTxt(a_txt,0);
} }
SerChannel *SerOpen(const char *host, int logIt, int msecTmo, void (*idleHdl)(int,int)) { SerChannel *SerOpen(const char *host, int msecTmo, void (*idleHdl)(int,int)) {
struct SerChan *ser; struct SerChan *ser;
char hbuf[64]; char hbuf[64];
char *p, *c; char *p, *c;
@ -49,7 +48,6 @@ SerChannel *SerOpen(const char *host, int logIt, int msecTmo, void (*idleHdl)(in
} }
ser->asyn_info.port=port; ser->asyn_info.port=port;
ser->asyn_info.chan=chan; ser->asyn_info.chan=chan;
ser->logIt=logIt;
A_CHK(AsynSrv_Open(&ser->asyn_info)); A_CHK(AsynSrv_Open(&ser->asyn_info));
if (msecTmo==0) msecTmo=5000; if (msecTmo==0) msecTmo=5000;
A_CHK(AsynSrv_Config(&ser->asyn_info, "msecTmo", msecTmo, "idleHdl", idleHdl, NULL)); A_CHK(AsynSrv_Config(&ser->asyn_info, "msecTmo", msecTmo, "idleHdl", idleHdl, NULL));
@ -86,14 +84,14 @@ char *SerCmd(SerChannel *serch, char *cmnd) {
if (l>=SER_BUF_LEN-1) ERR_COD(ENOBUFS); if (l>=SER_BUF_LEN-1) ERR_COD(ENOBUFS);
ser=(struct SerChan *)serch; ser=(struct SerChan *)serch;
if (ser->logIt) logfileOutTmp(">%s\n", cmnd); logfileOut(LOG_SER, ">%s\n", cmnd);
cmnd[l]=ser->asyn_info.eot[1]; cmnd[l]=ser->asyn_info.eot[1];
cmnd[l+1]='\0'; cmnd[l+1]='\0';
A_CHK(AsynSrv_SendCmnds(&ser->asyn_info, &ser->to_host, &ser->from_host, cmnd, NULL)); A_CHK(AsynSrv_SendCmnds(&ser->asyn_info, &ser->to_host, &ser->from_host, cmnd, NULL));
result=AsynSrv_GetReply(&ser->asyn_info, &ser->from_host, NULL); result=AsynSrv_GetReply(&ser->asyn_info, &ser->from_host, NULL);
if (result==NULL) ERR_MSG("empty result"); if (result==NULL) ERR_MSG("empty result");
/* if (idleHandler!=NULL) idleHandler(50,0); */ /* if (idleHandler!=NULL) idleHandler(50,0); */
if (ser->logIt) logfileOutTmp("<%s\n", result); logfileOut(LOG_SER, "<%s\n", result);
return(result); return(result);
OnError: return(NULL); OnError: return(NULL);
} }

View File

@ -2,7 +2,7 @@
typedef struct { int private; } SerChannel; typedef struct { int private; } SerChannel;
SerChannel *SerOpen(const char *host, int logIt, int msecTmo, void (*idleHdl)(int,int)); SerChannel *SerOpen(const char *host, int msecTmo, void (*idleHdl)(int,int));
char *SerCmdC(SerChannel *ser, const char *cmnd); char *SerCmdC(SerChannel *ser, const char *cmnd);
char *SerCmd(SerChannel *ser, char *cmnd); char *SerCmd(SerChannel *ser, char *cmnd);
int SerClose(SerChannel *ser); int SerClose(SerChannel *ser);

View File

@ -29,19 +29,16 @@ int CocInitServer(int bufsize, int port) {
/* first try to connect to an existing server */ /* first try to connect to an existing server */
logfileStamp("start server");
ERR_SI(mainFd=socket(AF_INET, SOCK_STREAM, 0)); ERR_SI(mainFd=socket(AF_INET, SOCK_STREAM, 0));
i = 1; i = 1;
ERR_SI(setsockopt(mainFd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(int))); /* allow quick port reuse */ ERR_SI(setsockopt(mainFd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(int))); /* allow quick port reuse */
ERR_I(CocCreateSockAdr(&sadr, NULL, port)); ERR_I(CocCreateSockAdr(&sadr, NULL, port));
ERR_SI(bind(mainFd, (struct sockaddr *)&sadr, sizeof(sadr))); ERR_SI(bind(mainFd, (struct sockaddr *)&sadr, sizeof(sadr)));
logfileOut("created server on port %d\n", port); logfileOut(LOG_MAIN, "created server on port %d\n", port);
ERR_SI(listen(mainFd, 8)); ERR_SI(listen(mainFd, 8));
FD_ZERO(&mask); FD_ZERO(&mask);
FD_SET(mainFd, &mask); FD_SET(mainFd, &mask);
maxfd=mainFd+1; maxfd=mainFd+1;
logfileUpd();
return(0); return(0);
OnError: return(-1); OnError: return(-1);
} }
@ -64,7 +61,6 @@ int CocHandle1Request(int tmo_msec, int fd) {
ERR_SI(i=select(maxfd,&rmask,NULL,NULL,&tmo)); ERR_SI(i=select(maxfd,&rmask,NULL,NULL,&tmo));
if (fd>0 && FD_ISSET(fd, &rmask)) return(1); if (fd>0 && FD_ISSET(fd, &rmask)) return(1);
logfileStamp("");
if (FD_ISSET(mainFd, &rmask)) { if (FD_ISSET(mainFd, &rmask)) {
ERR_SI(newfd=accept(mainFd, (struct sockaddr *)&cadr, &cadrlen)); ERR_SI(newfd=accept(mainFd, (struct sockaddr *)&cadr, &cadrlen));
FD_SET(newfd, &mask); FD_SET(newfd, &mask);
@ -78,18 +74,17 @@ int CocHandle1Request(int tmo_msec, int fd) {
cList->next=cl; cList->next=cl;
h=gethostbyaddr(&cadr.sin_addr, 4, AF_INET); h=gethostbyaddr(&cadr.sin_addr, 4, AF_INET);
if (h==NULL) { if (h==NULL) {
logfileOut("(%d) open from %s\n", newfd, "local"); logfileOut(LOG_MAIN, "(%d) open from %s\n", newfd, "local");
} else { } else {
logfileOut("(%d) open from %s\n", newfd, h->h_name); logfileOut(LOG_MAIN, "(%d) open from %s\n", newfd, h->h_name);
} }
logfileUpd();
} else { } else {
cl0=cList; cl=cl0->next; cl0=cList; cl=cl0->next;
while (cl!=NULL) { while (cl!=NULL) {
if (FD_ISSET(cl->fd, &rmask)) { if (FD_ISSET(cl->fd, &rmask)) {
buf->usize=recv(cl->fd, buf->start, buf->isize, 0); buf->usize=recv(cl->fd, buf->start, buf->isize, 0);
if (buf->usize<=0) { if (buf->usize<=0) {
logfileOut("(%d) disconnected\n",cl->fd); logfileOut(LOG_MAIN, "(%d) disconnected\n",cl->fd);
close(cl->fd); close(cl->fd);
FD_CLR(cl->fd, &mask); FD_CLR(cl->fd, &mask);
cl0->next=cl->next; cl0->next=cl->next;
@ -104,19 +99,21 @@ int CocHandle1Request(int tmo_msec, int fd) {
buf_reset(buf); buf_reset(buf);
err=NULL; err=NULL;
varname=buf_get_str(buf); varname=buf_get_str(buf);
logfileOutTmp("(%d) ", cl->fd); logfileOut(LOG_NET, "(%d) ", cl->fd);
if (varname[0]=='#') { /* access code */ if (varname[0]=='#') { /* access code */
if (0==strcmp(varname,"#rdacc")) { if (0==strcmp(varname,"#rdacc")) {
logfileOutTmp(" set read mode"); logfileOut(LOG_MAIN, " set read mode\n");
cl->mode=1; cl->mode=1;
} else if (0==strcmp(varname,"#rwacs")) { } else if (0==strcmp(varname,"#rwacs")) {
logfileOutTmp(" set write mode"); logfileOut(LOG_MAIN, " set write mode\n");
cl->mode=2; cl->mode=2;
} else { } else {
err="bad access code"; err="bad access code";
} }
buf_put_end(bufo);
} else if (cl->mode==0) { } else if (cl->mode==0) {
err="no access"; err="no access";
buf_put_end(bufo);
} else { } else {
while (1) { while (1) {
if (varname[0]=='[') { if (varname[0]=='[') {
@ -151,25 +148,25 @@ int CocHandle1Request(int tmo_msec, int fd) {
if (buf_size(buf)<0) { err="syntax error"; break; } if (buf_size(buf)<0) { err="syntax error"; break; }
} }
buf_reset(buf); buf_reset(buf);
logfileOutBuf(buf); logfileOutBuf(LOG_NET, buf);
}
buf_put_end(bufo); buf_put_end(bufo);
logfileOutTmp(" |"); logfileOut(LOG_NET, " |");
logfileOutBuf(bufo); logfileOutBuf(LOG_NET, bufo);
}
if (err==NULL) { if (err==NULL) {
logfileOutTmp("\n"); logfileOut(LOG_NET, "\n");
} else { } else {
buf_put_start(bufo); /* reset output */ buf_put_start(bufo); /* reset output */
buf_put_str(bufo, err); /* put error message */ buf_put_str(bufo, err); /* put error message */
buf_put_end(bufo); buf_put_end(bufo);
logfileOutTmp(" (%s)\n", err); logfileOut(LOG_NET, " (%s)\n", err);
logfileMask(LOG_NET);
} }
ERR_SI(send(cl->fd, bufo->buf, bufo->size, 0)); ERR_SI(send(cl->fd, bufo->buf, bufo->size, 0));
} }
} }
cl0=cl; cl=cl->next; cl0=cl; cl=cl->next;
} }
logfileUpd();
} }
return(status); return(status);
OnError: return(-1); OnError: return(-1);

View File

@ -23,19 +23,19 @@ pTecsClient TeccInit(char *startcmd, int port) {
int TeccSetDev(pTecsClient conn, char *dev) { int TeccSetDev(pTecsClient conn, char *dev) {
str_copy(device, dev); str_copy(device, dev);
ERR_I(CocCmd((CocConn *)conn, "[device]")); ERR_I(CocCmd(conn, "[device]"));
return(0); return(0);
OnError: return(-1); OnError: return(-1);
} }
char *TeccGetDev(pTecsClient conn) { char *TeccGetDev(pTecsClient conn) {
ERR_I(CocCmd((CocConn *)conn, "device")); ERR_I(CocCmd(conn, "device"));
return(device); return(device);
OnError: return(NULL); OnError: return(NULL);
} }
int TeccGet3(pTecsClient conn, float temp[3]) { int TeccGet3(pTecsClient conn, float temp[3]) {
ERR_I(CocCmd((CocConn *)conn, "tempC,tempX,tempP")); ERR_I(CocCmd(conn, "tempC,tempX,tempP"));
temp[0]=tempC; temp[0]=tempC;
temp[1]=tempX; temp[1]=tempX;
temp[2]=tempP; temp[2]=tempP;
@ -53,7 +53,7 @@ int TeccGet(pTecsClient conn, float *temp) {
int TeccSet(pTecsClient conn, float temp) { int TeccSet(pTecsClient conn, float temp) {
tempC=temp; tempC=temp;
ERR_I(CocCmd((CocConn *)conn, "[tempC]")); ERR_I(CocCmd(conn, "[tempC]"));
return(0); return(0);
OnError: return(-1); OnError: return(-1);
} }
@ -63,11 +63,11 @@ int TeccSend(pTecsClient conn, char *cmd, char *reply, int replyLen) {
int cnt; int cnt;
str_copy(command, cmd); str_copy(command, cmd);
ERR_I(CocCmd((CocConn *)conn, "[$]")); ERR_I(CocCmd(conn, "[$]"));
cnt=40; cnt=40;
util_delay(100); util_delay(100);
while (cnt>0) { while (cnt>0) {
ERR_I(CocCmd((CocConn *)conn, "$")); ERR_I(CocCmd(conn, "$"));
if (command[0]!='\0') { if (command[0]!='\0') {
str_ncpy(reply, command, replyLen); str_ncpy(reply, command, replyLen);
return(0); return(0);
@ -82,14 +82,16 @@ int TeccSend(pTecsClient conn, char *cmd, char *reply, int replyLen) {
int TeccQuitServer(pTecsClient conn) { int TeccQuitServer(pTecsClient conn) {
quit=1; quit=1;
ERR_I(CocCmd((CocConn *)conn, "quit")); ERR_I(CocCmd(conn, "quit"));
return(0); return(0);
OnError: return(-1); OnError: return(-1);
} }
void TeccClose(pTecsClient conn) { void TeccClose(pTecsClient conn) {
CocCloseClient((CocConn *)conn); if (conn!=NULL) {
CocCloseClient(conn);
free(conn); free(conn);
}
} }
#ifdef __VMS #ifdef __VMS
@ -102,7 +104,7 @@ int TeccSetDevVms(pTecsClient conn, char **dev) {
strncpy(device, dev[1], l); strncpy(device, dev[1], l);
while (l>0 && device[l-1]==' ') l--; /* trim */ while (l>0 && device[l-1]==' ') l--; /* trim */
device[l]='\0'; device[l]='\0';
ERR_I(CocCmd((CocConn *)conn, "[device]")); ERR_I(CocCmd(conn, "[device]"));
return(0); return(0);
OnError: return(-1); OnError: return(-1);
} }
@ -110,7 +112,7 @@ int TeccSetDevVms(pTecsClient conn, char **dev) {
int TeccGetDevVms(pTecsClient conn, char **dev) { int TeccGetDevVms(pTecsClient conn, char **dev) {
int l, ld; int l, ld;
ERR_I(CocCmd((CocConn *)conn, "device")); ERR_I(CocCmd(conn, "device"));
ld=strlen(device); ld=strlen(device);
l=*(short *)dev; l=*(short *)dev;
if (ld>=l) ld=l; if (ld>=l) ld=l;

View File

@ -6,9 +6,7 @@
------------------------------------------------------------------------*/ ------------------------------------------------------------------------*/
typedef CocConn *pTecsClient; typedef CocConn *pTecsClient;
/* typedef struct { int tecc_private; } *pTecsClient; */
/* hidden structure for a tecs client
------------------------------------------------------------------------*/
pTecsClient TeccInit(char *server, int port); pTecsClient TeccInit(char *server, int port);
/* init tecs client (connect to server) /* init tecs client (connect to server)

View File

@ -90,7 +90,7 @@ int instCurve(char *nam, char chan) {
FILE *fil; FILE *fil;
int retstat; int retstat;
logfileOut("install curve %s\n", nam); logfileOut(LOG_MAIN, "install curve %s\n", nam);
retstat=-2; /* errors in following section are severe */ retstat=-2; /* errors in following section are severe */
fil=NULL; fil=NULL;
crv=NULL; crv=NULL;
@ -165,10 +165,10 @@ int instCurve(char *nam, char chan) {
sprintf(buf, "INTYPE %c:%s;INCRV %c:%d;DISPFLD %d:%c,1;DISPLAY:%d" sprintf(buf, "INTYPE %c:%s;INCRV %c:%d;DISPFLD %d:%c,1;DISPLAY:%d"
, chan, intype, chan, num, fld, chan, maxfld); , chan, intype, chan, num, fld, chan, maxfld);
ERR_I(LscCmdChk(ser, buf)); ERR_I(LscCmdChk(ser, buf));
logfileOut("curve %d on channel %c selected\n", num, chan); logfileOut(LOG_MAIN, "curve %d on channel %c selected\n", num, chan);
} else { /* header does not match -> download */ } else { /* header does not match -> download */
if (busy) ERR_MSG("busy"); if (busy) ERR_MSG("busy");
logfileOut("download curve %d\n", num); logfileOut(LOG_MAIN, "download curve %d\n", num);
sprintf(buf, "INTYPE %c:%s;DISPFLD %d:%c,3;DISPLAY:%d" sprintf(buf, "INTYPE %c:%s;DISPFLD %d:%c,3;DISPLAY:%d"
, chan, intype, fld, chan, maxfld); /* select sensor type first to display sensor units */ , chan, intype, fld, chan, maxfld); /* select sensor type first to display sensor units */
ERR_I(LscCmdChk(ser, buf)); ERR_I(LscCmdChk(ser, buf));
@ -188,7 +188,7 @@ int instCurve(char *nam, char chan) {
} while (t!=NULL); } while (t!=NULL);
sprintf(buf, "CRVHDR %d:%s;INCRV %c:%d;DISPFLD %d:%c,1", num, crv, chan, num, fld, chan); /* write header, select curve */ sprintf(buf, "CRVHDR %d:%s;INCRV %c:%d;DISPFLD %d:%c,1", num, crv, chan, num, fld, chan); /* write header, select curve */
ERR_I(LscCmdChk(ser, buf)); ERR_I(LscCmdChk(ser, buf));
logfileOut("curve selected on channel %c\n", chan); logfileOut(LOG_MAIN, "curve selected on channel %c\n", chan);
str_copy(head, crv); str_copy(head, crv);
str_upcase(head); str_upcase(head);
saveIt=1; saveIt=1;
@ -403,7 +403,7 @@ int ReadTemp() {
ERR_P(res=SerCmdC(ser, "DIOST?;HTR?;BUSY?;DOUT 3,29")); ERR_P(res=SerCmdC(ser, "DIOST?;HTR?;BUSY?;DOUT 3,29"));
if (0==strcmp(res, "?TMO")) { if (0==strcmp(res, "?TMO")) {
if (0==noResp) logfileOut("no response\n"); if (0==noResp) logfileOut(LOG_MAIN ,"no response\n");
noResp=1; noResp=1;
return(0); return(0);
} }
@ -450,10 +450,14 @@ int ReadTemp() {
DlogPut(&dset, tim, 2, t2); DlogUpd(&dset); DlogPut(&dset, tim, 2, t2); DlogUpd(&dset);
logTime=(tim/logPeriod+1)*logPeriod; logTime=(tim/logPeriod+1)*logPeriod;
} }
if (nP>0 && nX>0 && controlMode==2) { if (nP>0 && nX>0 && controlMode==2 && tempC!=0) {
d=tempH-tempX; d=exp(-d*d); /* if d is small, we are far from setpoint */ d=tempH-tempX; d=exp(-d*d); /* if d is small, we are far from setpoint */
if (tInt<60000/period) tInt+=d; /* increase integral time until 60 sec. */ if (tInt<60000/period) tInt+=d; /* increase integral time until 60 sec. */
if (tInt>d) {
p=d/tInt; p=d/tInt;
} else {
p=1.0;
}
tShift=tShift*(1.0-p)+p*(tempX-tempP); tShift=tShift*(1.0-p)+p*(tempX-tempP);
ERR_I(SetTemp(0)); ERR_I(SetTemp(0));
} }
@ -492,7 +496,7 @@ int ReadTemp() {
if (key!=0) { if (key!=0) {
auto_remote_time=tim+600; auto_remote_time=tim+600;
if (!(dirtyX || dirtyP)) { if (!(dirtyX || dirtyP)) {
logfileOut("user touched keys\n"); logfileOut(LOG_MAIN ,"user touched keys\n");
} }
dirtyX=1; dirtyP=1; dirtyX=1; dirtyP=1;
ERR_P(res=SerCmdC(ser, "MODE?")); ERR_P(res=SerCmdC(ser, "MODE?"));
@ -512,10 +516,16 @@ int Settings() {
if (dirtyX || dirtyP) { if (dirtyX || dirtyP) {
if (busy==0 || dirtyX>=0 && dirtyP>=0) { /* do not enter when busy and dirtyX/P indicates error on last time */ if (busy==0 || dirtyX>=0 && dirtyP>=0) { /* do not enter when busy and dirtyX/P indicates error on last time */
if (device[0]=='\0') { logfileOut(LOG_MAIN ,"configure inputs for ");
logfileOut("configure inputs for codes %d %d\n", codX, codP); if (manualX) {
logfileOut(LOG_MAIN ,"%s ", deviceX);
} else { } else {
logfileOut("configure inputs for %s\n", device); logfileOut(LOG_MAIN ,"%+d ", codX);
}
if (manualP) {
logfileOut(LOG_MAIN ,"%s\n", deviceP);
} else {
logfileOut(LOG_MAIN ,"%+d\n", codP);
} }
if (dirtyP) { if (dirtyP) {
sprintf(buf, "DISPFLD 2:%c,1;DISPFLD 4:%c,1", channel[1], channel[3]); sprintf(buf, "DISPFLD 2:%c,1;DISPFLD 4:%c,1", channel[1], channel[3]);
@ -620,12 +630,12 @@ int ExecuteRequest() {
if (tim>auto_remote_time || setFlag) ERR_I(Settings()); if (tim>auto_remote_time || setFlag) ERR_I(Settings());
if (setFlag) { if (setFlag) {
if (nX>0) { if (nX>0 && tempC!=0) {
tInt=0; /* reset integral time */ tInt=0; /* reset integral time */
ERR_I(SetTemp(1)); ERR_I(SetTemp(1));
logfileOut("set point\n"); logfileOut(LOG_MAIN ,"set point\n");
} else { } else {
logfileOut("flag reset\n"); logfileOut(LOG_MAIN ,"flag reset\n");
} }
setFlag=0; setFlag=0;
} }
@ -682,14 +692,16 @@ int main(int argc, char *argv[])
char *host; char *host;
char buf[256], opt; char buf[256], opt;
int port, msecTmo; int port, msecTmo;
int logMask;
logMask=LOG_MAIN;
binDir=""; binDir="";
logDir=""; logDir="";
serverId="tecs"; serverId="tecs";
host="lnsp26"; host="lnsp26";
port=0; port=0;
msecTmo=0; msecTmo=0;
logfileOutTmp("%s ", argv[0]); logfileOut(LOG_MAIN ,"%s ", argv[0]);
for (i=1;i<argc;i++) { for (i=1;i<argc;i++) {
if (argv[i]!=NULL) { if (argv[i]!=NULL) {
if (argv[i][0]=='-') { if (argv[i][0]=='-') {
@ -699,6 +711,7 @@ int main(int argc, char *argv[])
} }
if ('l'==opt) { if ('l'==opt) {
logIt=1; logIt=1;
logMask=LOG_ALL;
period=5000; period=5000;
opt=' '; opt=' ';
} else if ('s'==opt) { } else if ('s'==opt) {
@ -723,10 +736,10 @@ int main(int argc, char *argv[])
i++; i++;
port=atoi(argv[i]); port=atoi(argv[i]);
} else { } else {
logfileOutTmp("?"); logfileOut(LOG_MAIN ,"?");
} }
if (opt!=' ') logfileOutTmp("-%c ", opt); if (opt!=' ') logfileOut(LOG_MAIN ,"-%c ", opt);
logfileOutTmp("%s ", argv[i]); logfileOut(LOG_MAIN ,"%s ", argv[i]);
} }
} }
if (port==0) port=9753; if (port==0) port=9753;
@ -736,8 +749,8 @@ int main(int argc, char *argv[])
str_append(buf, serverId); str_append(buf, serverId);
logfileInit(buf, logIt); logfileInit(buf, logIt);
logfileOutTmp("\n"); logfileOut(LOG_MAIN ,"\n");
logfileWriteTmp(); logfileWrite(logMask);
ERR_I(CocInitServer(1024, port)); ERR_I(CocInitServer(1024, port));
@ -749,7 +762,7 @@ int main(int argc, char *argv[])
CocDefInt(controlMode, CocWR); CocDefInt(controlMode, CocWR);
CocDefInt(quit, CocWR); CocDefInt(quit, CocWR);
ERR_P(ser=SerOpen(host, logIt, msecTmo, idleHdl)); ERR_P(ser=SerOpen(host, msecTmo, idleHdl));
ERR_I(CocHandleRequests(100, 0)); ERR_I(CocHandleRequests(100, 0));
ftime(&tim0); ftime(&tim0);
str_copy(buf, logDir); str_copy(buf, logDir);
@ -760,12 +773,6 @@ int main(int argc, char *argv[])
ERR_I(DlogCreate(&dset, buf, tim0.time, 2, 24*60*60/logPeriod, logPeriod, 0.0)); ERR_I(DlogCreate(&dset, buf, tim0.time, 2, 24*60*60/logPeriod, logPeriod, 0.0));
} }
while (!quit) { while (!quit) {
logfileStamp("");
if (logIt) {
logfileWriteTmp();
} else {
logfilePurge();
}
/* read & control temp */ /* read & control temp */
iret=ReadTemp(); iret=ReadTemp();
if (iret<0) logfileShowErr("ReadTemp"); if (iret<0) logfileShowErr("ReadTemp");
@ -773,6 +780,7 @@ int main(int argc, char *argv[])
iret=Settings(); iret=Settings();
if (iret<0) logfileShowErr("Settings"); if (iret<0) logfileShowErr("Settings");
} }
logfileWrite(logMask);
while (!quit) { while (!quit) {
ftime(&tim1); ftime(&tim1);
@ -784,6 +792,7 @@ int main(int argc, char *argv[])
tim=tim1.time; tim=tim1.time;
iret=ExecuteRequest(); iret=ExecuteRequest();
if (iret<0) logfileShowErr("ExecuteRequest"); if (iret<0) logfileShowErr("ExecuteRequest");
logfileWrite(logMask);
} }
ftime(&tim1); ftime(&tim1);
tdif=((tim1.time-tim0.time)*1000+tim1.millitm-tim0.millitm)/period; tdif=((tim1.time-tim0.time)*1000+tim1.millitm-tim0.millitm)/period;
@ -791,10 +800,10 @@ int main(int argc, char *argv[])
tim0.time+=i / 1000; tim0.time+=i / 1000;
tim0.millitm=i % 1000; tim0.millitm=i % 1000;
if (tdif>1) { if (tdif>1) {
logfileOut("%d cycles lost\n", tdif-1); logfileOut(LOG_MAIN ,"%d cycles lost\n", tdif-1);
} }
} }
logfileOut("%s got quit command\n", serverId); logfileOut(LOG_MAIN ,"%s got quit command\n", serverId);
DlogClose(&dset); DlogClose(&dset);
return(1); return(1);
OnError: OnError:

View File

@ -27,7 +27,7 @@ ServerOption ReadUserPasswdTimeout 7000
# time to wiat for a user/passwd to be sent from a client. Increase this # time to wiat for a user/passwd to be sent from a client. Increase this
# if there is a problem connecting to a server due to network overload\ # if there is a problem connecting to a server due to network overload\
ServerOption LogFileDir $shome/sics/log ServerOption LogFileDir $shome/log
#LogFileDir is the directory where the command log is going #LogFileDir is the directory where the command log is going
ServerOption LogFileBaseName $shome/sics/tmp/server ServerOption LogFileBaseName $shome/sics/tmp/server