This commit is contained in:
2024-03-04 21:30:23 +01:00
parent e7d90c550a
commit 16f1795e32
9 changed files with 160 additions and 47 deletions

View File

@@ -23,13 +23,30 @@
#include <epicsExport.h>
#include <iocsh.h>
#define ECMC_PLUGIN_PORTNAME_PREFIX "PLUGIN.DAQ"
#define ECMC_PLUGIN_DAQ_ERROR_CODE 1
static std::vector<ecmcDAQDataArray*> arrays;
static int arrayCounter = 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 createDAQArray(const char* name, const char* portName ) {
// Check if already exists
ecmcDAQDataArray array = getDAQArrayFromName(name);
if(array){
printf("Error: DAQ-Array %s already defined.\n",name);
return ECMC_PLUGIN_DAQ_ERROR_CODE;
}
// create new ecmcFFT object
ecmcDAQDataArray* array = NULL;
@@ -51,21 +68,10 @@ 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){
printf("Error: DAQ-Array %s not found.\n",name);
return -1;
}
return array->getArraySize();
@@ -119,6 +125,20 @@ int linkDataToDAQs() {
return 0;
}
int validateDAQs() {
for(std::vector<ecmcDAQDataArray*>::iterator pDAQArray = arrays.begin(); pDAQArray != arrays.end(); ++pDAQArray) {
if(*pDAQArray) {
try {
(*pDAQArray)->validate();
}
catch(std::exception& e) {
printf("Exception: %s. Plugin will unload.\n",e.what());
return ECMC_PLUGIN_DAQ_ERROR_CODE;
}
}
}
return 0;
}
//int enableDAQ(int scopeIndex, int enable) {
// try {
// arrays.at(scopeIndex)->setEnable(enable);
@@ -283,11 +303,11 @@ static void initCallFunc_2(const iocshArgBuf *args) {
/**
* EPICS iocsh shell command: ecmcAddDAQItem
* EPICS iocsh shell command: ecmcDAQReadNelm
*/
void ecmcDAQReadNelmHelp() {
printf("\n");
printf(" Use ecmcDAQReadNELM(<name>,<result_var_name>)\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");
@@ -337,12 +357,42 @@ static const iocshFuncDef initFuncDef_3 = { "ecmcDAQReadNelm", 2, initArgs_3}
static void initCallFunc_3(const iocshArgBuf *args) {
ecmcDAQReadNelm(args[0].sval,args[1].sval);
}
/**
* EPICS iocsh shell command: ecmcDAQConnectToDataSource
*/
int ecmcDAQConnectToDataSource() {
try {
linkDataToDAQs();
}
catch(std::exception& e) {
printf("Exception: %s. Connect data sources failed.\n",e.what());
exit(EXIT_FAILURE);
}
return asynSuccess;
}
static const iocshArg initArg0_4 =
{ "dummy", iocshArgInt };
static const iocshArg *const initArgs_4[] = { &initArg0_4};
static const iocshFuncDef initFuncDef_4 = { "ecmcDAQConnectToDataSource", 1, initArgs_4};
static void initCallFunc_4(const iocshArgBuf *args) {
ecmcDAQConnectToDataSource(args[0].ival);
}
// Register
void ecmcDAQPlgRegister(void) {
iocshRegister(&initFuncDef_0, initCallFunc_0);
iocshRegister(&initFuncDef_1, initCallFunc_1);
iocshRegister(&initFuncDef_2, initCallFunc_2);
iocshRegister(&initFuncDef_3, initCallFunc_3);
iocshRegister(&initFuncDef_3, initCallFunc_4);
}
epicsExportRegistrar(ecmcDAQPlgRegister);