#include #include #include "err_handling.h" #include "str_util.h" #include "tecs_cli.h" static char device[80], command[80], buffer[132]; static int quit, readTemp, configuring; static float tempX, tempP, tempC; pTecsClient TeccInit(char *startcmd, int port) { CocConn *conn; ERR_SP(conn=(CocConn *)malloc(sizeof(*conn))); ERR_I(CocInitClient(conn, "", port, "#rwacs", 0, startcmd)); CocDefFlt(tempC, CocRD); CocDefFlt(tempP, CocRD); CocDefFlt(tempX, CocRD); CocDefStr(device, CocWR); CocDefStr(buffer, CocWR); CocDefInt(configuring, CocRD); CocDefInt(quit, CocWR); CocDefInt(readTemp, CocWR); CocDefCmd(command); return((pTecsClient)conn); OnError: return(NULL); } int TeccSetDev(pTecsClient conn, char *dev) { str_copy(device, dev); ERR_I(CocCmd(conn, "[device]")); return(0); OnError: return(-1); } char *TeccGetDev(pTecsClient conn) { ERR_I(CocCmd(conn, "device")); return(device); OnError: return(NULL); } int TeccGet3(pTecsClient conn, float *tC, float *tX, float *tP) { readTemp=1; ERR_I(CocCmd(conn, "tempC,tempX,tempP,[readTemp],configuring")); *tC=tempC; *tX=tempX; *tP=tempP; return(configuring); OnError: return(-1); } int TeccGet(pTecsClient conn, float *temp) { ERR_I(CocCmd(conn, "tempP,[readTemp],configuring")); *temp=tempP; return(configuring); OnError: return(-1); } int TeccWait(pTecsClient conn) { int last, cnt; last=0; cnt=0; do { CocDelay(100); ERR_I(CocCmd(conn, "configuring")); if (configuring==last || configuring>1000) { cnt++; if (cnt>50) ERR_MSG("configuring timeout"); } else { cnt=0; last=configuring; } } while (configuring>0); return(0); OnError: return(-1); } int TeccSet(pTecsClient conn, float temp) { tempC=temp; ERR_I(CocCmd(conn, "[tempC]")); return(0); OnError: return(-1); } char *TeccGetPar(pTecsClient conn, const char *name) { CocDefVar(name, buffer, sizeof(buffer), &CocWR); ERR_I(CocCmd(conn, name)); return(buffer); OnError: return(NULL); } int TeccSetPar(pTecsClient conn, const char *name, const char *value) { char nbuf[80]; str_copy(buffer, value); CocDefVar(name, buffer, sizeof(buffer), &CocWR); str_copy(nbuf, "["); str_append(nbuf, name); str_append(nbuf, "]"); ERR_I(CocCmd(conn, nbuf)); return(0); OnError: return(-1); } int TeccSend(pTecsClient conn, char *cmd, char *reply, int replyLen) { char *res; int cnt; str_copy(command, cmd); ERR_I(CocCmd(conn, "[$]")); cnt=40; CocDelay(100); while (cnt>0) { ERR_I(CocCmd(conn, "$")); if (command[0]!='\0') { str_ncpy(reply, command, replyLen); return(0); } CocDelay(250); cnt--; } str_ncpy(reply, "", replyLen); return(0); OnError: return(-1); } int TeccQuitServer(pTecsClient conn) { quit=1; ERR_I(CocCmd(conn, "[quit]")); return(0); OnError: return(-1); } void TeccClose(pTecsClient conn) { if (conn!=NULL) { CocCloseClient(conn); free(conn); } } #ifdef __VMS typedef struct { short size, dummy; char *text; } Desc; int TeccSetParVms(pTecsClient conn, Desc *name, Desc *par) { char nbuf[80]; int l; l=par->size; if (l>=sizeof(nbuf)) l=sizeof(nbuf)-3; strcpy(nbuf, "["); strncat(nbuf, par->text, l); while (l>0 && nbuf[l-1]==' ') l--; /* trim */ strcat(nbuf, "]"); CocDefVar(nbuf, buffer, sizeof(buffer), &CocWR); ERR_I(CocCmd(conn, nbuf)); return(0); OnError: return(-1); } int TeccGetParVms(pTecsClient conn, Desc *name, Desc *par) { int l, ld; char nbuf[64]; l=par->size; if (l>=sizeof(nbuf)) l=sizeof(nbuf)-1; strncpy(nbuf, par->text, l); while (l>0 && nbuf[l-1]==' ') l--; /* trim */ CocDefVar(nbuf, buffer, sizeof(buffer), &CocWR); ERR_I(CocCmd(conn, nbuf)); ld=strlen(buffer); l=par->size; if (ld>=l) ld=l; strncpy(par->text, buffer, ld); return(ld); OnError: return(-1); } int TeccSendVms(pTecsClient conn, Desc *cmd, Desc *reply) { int l, lr; char cbuf[80], rbuf[80]; l=cmd->size; if (l>=sizeof(cbuf)) l=sizeof(cbuf)-1; strncpy(cbuf, cmd->text, l); while (l>0 && cbuf[l-1]==' ') l--; /* trim */ cbuf[l]='\0'; ERR_I(TeccSend(conn, cbuf, rbuf, sizeof(rbuf))); lr=strlen(rbuf); l=reply->size; if (lr>=l) lr=l; strncpy(reply->text, rbuf, lr); return(lr); OnError: return(-1); } #endif