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