SICS-615 You can now update the start and step fields of scan parameters.
NOTE: This also fixes the bug that was crashing SICS. The n was missing in an snprintf().
This commit is contained in:
60
scan.c
60
scan.c
@@ -241,6 +241,31 @@ int AddScanVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*/
|
||||||
|
int ReplaceScanVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
||||||
|
int index, float fStart, float fStep)
|
||||||
|
{
|
||||||
|
pVarEntry pVar = NULL;
|
||||||
|
void *pPtr = NULL;
|
||||||
|
|
||||||
|
if (self->iActive) {
|
||||||
|
SCWrite(pCon, "ERROR: cannot change parameters while scan is running",
|
||||||
|
eError);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
DynarGet(self->pScanVar, index, &pPtr);
|
||||||
|
pVar = (pVarEntry) pPtr;
|
||||||
|
if (pVar == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
pVar->fStart = fStart;
|
||||||
|
pVar->fStep = fStep;
|
||||||
|
|
||||||
|
/* put it away */
|
||||||
|
DynarReplace(self->pScanVar, index, pVar, sizeof(VarEntry));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
int AddLogVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
int AddLogVar(pScanData self, SicsInterp * pSics, SConnection * pCon,
|
||||||
char *name)
|
char *name)
|
||||||
@@ -1619,7 +1644,7 @@ int ScanWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|||||||
char pBueffel[512], varname[512];
|
char pBueffel[512], varname[512];
|
||||||
double fStep, fStart, fPreset;
|
double fStep, fStart, fPreset;
|
||||||
float *fData = NULL;
|
float *fData = NULL;
|
||||||
int lNP;
|
int lNP, foundMatch=0;
|
||||||
int iChannel;
|
int iChannel;
|
||||||
int iRet, iMode, i, varnum;
|
int iRet, iMode, i, varnum;
|
||||||
char *pPtr = NULL, pItem[20];
|
char *pPtr = NULL, pItem[20];
|
||||||
@@ -1860,17 +1885,6 @@ int ScanWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|||||||
SCWrite(pCon, pBueffel, eError);
|
SCWrite(pCon, pBueffel, eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* check for duplicate scanvar */
|
|
||||||
for (varnum = 0; varnum < self->iScanVar; varnum++) {
|
|
||||||
GetScanVarName(self, varnum, varname, 512);
|
|
||||||
if (strcmp(argv[2], varname) == 0) {
|
|
||||||
sprintf(pBueffel, sizeof(pBueffel)-1,
|
|
||||||
"ERROR: Scan variable %s has already been added.",
|
|
||||||
argv[2]);
|
|
||||||
SCWrite(pCon, pBueffel, eError);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* get numbers */
|
/* get numbers */
|
||||||
iRet = Tcl_GetDouble(InterpGetTcl(pSics), argv[3], &fStart);
|
iRet = Tcl_GetDouble(InterpGetTcl(pSics), argv[3], &fStart);
|
||||||
if (iRet != TCL_OK) {
|
if (iRet != TCL_OK) {
|
||||||
@@ -1884,8 +1898,26 @@ int ScanWrapper(SConnection * pCon, SicsInterp * pSics, void *pData,
|
|||||||
SCWrite(pCon, pBueffel, eError);
|
SCWrite(pCon, pBueffel, eError);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
iRet = AddScanVar(self, pSics, pCon, argv[2],
|
if (self->iScanVar == 0) {
|
||||||
(float) fStart, (float) fStep);
|
iRet = AddScanVar(self, pSics, pCon, argv[2], (float) fStart,
|
||||||
|
(float) fStep);
|
||||||
|
} else {
|
||||||
|
foundMatch = 0;
|
||||||
|
for (varnum = 0; varnum < self->iScanVar; varnum++) {
|
||||||
|
GetScanVarName(self, varnum, varname, 512);
|
||||||
|
if (strcmp(argv[2], varname) == 0) {
|
||||||
|
foundMatch = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (foundMatch) {
|
||||||
|
iRet = ReplaceScanVar(self, pSics, pCon, varnum, (float) fStart,
|
||||||
|
(float) fStep);
|
||||||
|
} else {
|
||||||
|
iRet = AddScanVar(self, pSics, pCon, argv[2], (float) fStart,
|
||||||
|
(float) fStep);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (iRet) {
|
if (iRet) {
|
||||||
SCSendOK(pCon);
|
SCSendOK(pCon);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user