203 lines
4.3 KiB
C
203 lines
4.3 KiB
C
#include <stdlib.h>
|
|
#include <string.h>
|
|
#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, "<no response>", 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
|