WIP'
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user