This commit is contained in:
2024-03-04 20:58:33 +01:00
parent 317adbc98e
commit e7d90c550a
8 changed files with 182 additions and 2 deletions

View File

@@ -51,6 +51,26 @@ int createDAQArray(const char* name, const char* portName ) {
return 0;
}
ecmcDAQDataArray* getDAQArrayFromName(const char *name) {
// Find group by name
for(std::vector<ecmcDAQDataArray*>::iterator array = arrays.begin(); array != arrays.end(); ++array) {
bool found = strcmp(name, (*array)->getName().c_str()) == 0;
if(found) {
return (*array);
}
}
return NULL;
}
int getDAQDataArrayNelm(const char *name){
ecmcDAQDataArray array = getDAQArrayFromName(name);
if(!array){
return -1;
}
return array->getArraySize();
}
int createDAQChannel(int type) {
try {
@@ -261,11 +281,68 @@ static void initCallFunc_2(const iocshArgBuf *args) {
ecmcAddDAQItem(args[0].sval,args[1].ival);
}
/**
* EPICS iocsh shell command: ecmcAddDAQItem
*/
void ecmcDAQReadNelmHelp() {
printf("\n");
printf(" Use ecmcDAQReadNELM(<name>,<result_var_name>)\n");
printf(" <name> : Name of DAQ array object.\n");
printf(" <result_var_name> : Variable for return value.\n");
printf("\n");
}
nelmBuffer[100];
int ecmcDAQReadNelm(const char* name, const char* result_var) {
if(!name) {
ecmcAddDAQArrayHelp();
return asynError;
}
if(!result_var) {
ecmcAddDAQArrayHelp();
return asynError;
}
if(strcmp(name,"-h") == 0 || strcmp(name,"--help") == 0 ) {
ecmcDAQReadNelmHelp();
return asynSuccess;
}
memset(&nelmBuffer[0],0,100);
int nelm = 0;
try {
nelm = getDAQDataArrayNelm(name);
sprintf(nelmBuffer, "%zu", nelm);
epicsEnvSet(result_var, nelmBuffer);
}
catch(std::exception& e) {
printf("Exception: %s. Find DAQ item failed.\n",e.what());
exit(EXIT_FAILURE);
}
return asynSuccess;
}
static const iocshArg initArg0_3 =
{ "name", iocshArgString };
static const iocshArg initArg1_3 =
{ "Return value variable", iocshArgString };
static const iocshArg *const initArgs_3[] = { &initArg0_3,
&initArg1_3};
static const iocshFuncDef initFuncDef_3 = { "ecmcDAQReadNelm", 2, initArgs_3};
static void initCallFunc_3(const iocshArgBuf *args) {
ecmcDAQReadNelm(args[0].sval,args[1].sval);
}
// Register
void ecmcDAQPlgRegister(void) {
iocshRegister(&initFuncDef_0, initCallFunc_0);
iocshRegister(&initFuncDef_1, initCallFunc_1);
iocshRegister(&initFuncDef_2, initCallFunc_2);
iocshRegister(&initFuncDef_3, initCallFunc_3);
}
epicsExportRegistrar(ecmcDAQPlgRegister);