r3812 | jgn | 2012-11-16 14:19:49 +1100 (Fri, 16 Nov 2012) | 1 line

This commit is contained in:
Jing Chen
2012-11-16 14:19:49 +11:00
committed by Douglas Clowes
parent ff6c252e39
commit 6b8ec1e2f3

View File

@ -54,9 +54,12 @@ static int buildStandardCommandPart(TCLDriv *pDriv, char *command,
if(status != 1) { if(status != 1) {
return 0; return 0;
} }
snprintf(tclCommand,commandLen,"%s %s ", tclFunc, pDriv->motName); //snprintf(tclCommand,commandLen,"%s %s ", tclFunc, pDriv->motName);
snprintf(tclCommand,commandLen,"%s", tclFunc);
return 1; return 1;
} }
/*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
static int GetTclPos(void *self, float *fPos){ static int GetTclPos(void *self, float *fPos){
TCLDriv *pDriv; TCLDriv *pDriv;
@ -280,9 +283,6 @@ static int TclSetPar(void *self, SConnection *pCon, char *name, float newValue){
int status; int status;
const char *result = NULL; const char *result = NULL;
char tclCommand[1024];
char tclCommandPara[1024];
TCLDriv *pDriv = (TCLDriv *) self; TCLDriv *pDriv = (TCLDriv *) self;
assert(self); assert(self);
@ -301,27 +301,36 @@ static int TclSetPar(void *self, SConnection *pCon, char *name, float newValue){
strncpy(pDriv->long_name, &newValue, 255); strncpy(pDriv->long_name, &newValue, 255);
return 1; return 1;
} else { } else {
char *tclCommand = (char *)calloc(1024, sizeof(char));
if (StringDictExists(pDriv->mappings, name)) { if (StringDictExists(pDriv->mappings, name)) {
if (!buildStandardCommandPart(pDriv, name, tclCommand, 1023)){ if (!buildStandardCommandPart(pDriv, name, tclCommand, 1023)){
pDriv->errorCode = FUNCNOTFOUND; pDriv->errorCode = FUNCNOTFOUND;
return HWFault; free(tclCommand);
return HWFault;
} }
sscanf(tclCommandPara, "%s %f", tclCommand, &newValue); char *tclCommandPara = (char *)calloc(1024, sizeof(char));
sprintf(tclCommandPara, "%s %f", tclCommand, newValue);
status = Tcl_Eval(pServ->pSics->pTcl,tclCommandPara); status = Tcl_Eval(pServ->pSics->pTcl,tclCommandPara);
result = Tcl_GetStringResult(pServ->pSics->pTcl); result = Tcl_GetStringResult(pServ->pSics->pTcl);
if (result == NULL){ if (result == NULL){
pDriv->errorCode = NOTCLRESULT; pDriv->errorCode = NOTCLRESULT;
return HWFault; free(tclCommand);
free(tclCommandPara);;
return HWFault;
} }
if (status != TCL_OK){ if (status != TCL_OK){
pDriv->errorCode = TCLERROR; pDriv->errorCode = TCLERROR;
strncpy(pDriv->tclError,result,1023); strncpy(pDriv->tclError,result,1023);
return HWFault; free(tclCommand);
free(tclCommandPara);;
return HWFault;
} }
free(tclCommand);
free(tclCommandPara);;
return OKOK; return OKOK;
} else { } else {
pDriv->errorCode = PARANOTFOUND; pDriv->errorCode = PARANOTFOUND;
return HWFault; return 0;
} }
return OKOK; return OKOK;
@ -332,9 +341,7 @@ static int TclListPar(void *self, char *motorname, SConnection *pCon) {
SDE sVal; SDE sVal;
int iRet; int iRet;
char pBueffel[512]; char pBueffel[512];
char *funcText[] = {"getpos", char *funcText[] = {"getpos",
"run", "run",
"status", "status",
@ -342,7 +349,6 @@ static int TclListPar(void *self, char *motorname, SConnection *pCon) {
"geterror", "geterror",
"fixit", "fixit",
NULL}; NULL};
TCLDriv *pDriv = (TCLDriv *)self; TCLDriv *pDriv = (TCLDriv *)self;
iRet = LLDnodePtr2First(pDriv->mappings->iList); iRet = LLDnodePtr2First(pDriv->mappings->iList);
@ -368,7 +374,6 @@ static int TclListPar(void *self, char *motorname, SConnection *pCon) {
int TclGetPar(void *self, char *name, float *value) { int TclGetPar(void *self, char *name, float *value) {
int status; int status;
char tclCommand[1024];
const char *result = NULL; const char *result = NULL;
TCLDriv *pDriv = (TCLDriv *) self; TCLDriv *pDriv = (TCLDriv *) self;
@ -385,27 +390,33 @@ int TclGetPar(void *self, char *name, float *value) {
*value = (float)pDriv->fLower; *value = (float)pDriv->fLower;
return OKOK; return OKOK;
} else { } else {
char *tclCommand = (char *)calloc(1024, sizeof(char));
if (StringDictExists(pDriv->mappings, name)) { if (StringDictExists(pDriv->mappings, name)) {
if(!buildStandardCommandPart(pDriv, name, tclCommand, 1023)){ if(!buildStandardCommandPart(pDriv, name, tclCommand, 1023)){
pDriv->errorCode = FUNCNOTFOUND; pDriv->errorCode = FUNCNOTFOUND;
return HWFault; free(tclCommand);
return HWFault;
} }
status = Tcl_Eval(pServ->pSics->pTcl,tclCommand); status = Tcl_Eval(pServ->pSics->pTcl,tclCommand);
result = Tcl_GetStringResult(pServ->pSics->pTcl); result = Tcl_GetStringResult(pServ->pSics->pTcl);
if(result == NULL){ if(result == NULL){
pDriv->errorCode = NOTCLRESULT; pDriv->errorCode = NOTCLRESULT;
return HWFault; free(tclCommand);
return HWFault;
} }
if(status != TCL_OK){ if(status != TCL_OK){
pDriv->errorCode = TCLERROR; pDriv->errorCode = TCLERROR;
strncpy(pDriv->tclError,result,1023); strncpy(pDriv->tclError,result,1023);
return HWFault; free(tclCommand);
return HWFault;
} }
sscanf(result,"%f", value); sscanf(result,"%f", value);
free(tclCommand);
return OKOK; return OKOK;
} else { } else {
pDriv->errorCode = PARANOTFOUND; pDriv->errorCode = PARANOTFOUND;
return HWFault; free(tclCommand);
return 0;
} }
return OKOK; return OKOK;