diff --git a/README.md b/README.md index 6f8a64d..cfcfe4a 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ Example: Rate = 100Hz #### BREAKTABLE (default: no break table) -Note: The break table must be added in EPICS and to "menuConvert" +Note: The break table must be added in EPICS Example: Apply BREAKTABLE=typeTelemess33020_21877 to raw value ``` @@ -187,7 +187,6 @@ Example: Apply BREAKTABLE=typeTelemess33020_21877 to raw value Example: Load custom breaktable in EPICS ``` dbLoadRecords ./bptBreakTable.dbd -updateMenuConvert ``` Example: breaktable (in a bptBreakTable.dbd) diff --git a/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.cpp b/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.cpp index aa3dc21..c6b5621 100644 --- a/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.cpp +++ b/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.cpp @@ -119,10 +119,8 @@ ecmcFFT::ecmcFFT(int fftIndex, // index of this object (if several is cr cycleCounter_ = 0; ignoreCycles_ = 0; dataSourceLinked_ = 0; - breakTableIndex_ = -1; - breakTable_ = 0; + breakTable_ = NULL; lastBreakPoint_ = 0; - breakInit_ = 1; // Asyn asynEnableId_ = -1; // Enable/disable acq./calcs @@ -457,13 +455,13 @@ void ecmcFFT::addDataToBuffer(double data) { if(rawDataBuffer_ && (elementsInBuffer_ < cfgNfft_) ) { - if(breakTableIndex_>=0 && cfgBreakTableStr_ && interruptAccept) { - double breakData = data; - if (cvtRawToEngBpt(&breakData, breakTableIndex_, breakInit_, &breakTable_, &lastBreakPoint_)!=0) { + if( cfgBreakTableStr_ && interruptAccept ) { + double breakData = data; + // Supply a breaktable (init=0, LINR must be > 1 but only used if init > 0) + if (cvtRawToEngBpt(&breakData, 2, 0, &breakTable_, &lastBreakPoint_)!=0) { //TODO: What does status here mean.. //throw std::runtime_error("Breaktable conversion failed.\n"); } - breakInit_ = 0; // Breack pointer should now be assigned //printf("Index %d: Before %lf, after %lf\n",objectId_,data,breakData); data = breakData * cfgScale_; } else { @@ -1102,23 +1100,25 @@ int ecmcFFT::leastSquare(int n, const double y[], double* k, double* m){ } bool ecmcFFT::verifyBreakTable() { - breakTableIndex_ = -1; - dbMenu *menuConvert; - ELLLIST missing; - int i; + brkTable *pbrkTable; + bool found = false; - menuConvert = dbFindMenu(pdbbase,"menuConvert"); - ellInit(&missing); - for(i=0; inChoice; i++) - { - // printf("menuConvertItem[%d] %s (looking for %s))\n",i,menuConvert->papChoiceValue[i], cfgBreakTableStr_); - if (strcmp(menuConvert->papChoiceValue[i],cfgBreakTableStr_)==0) - { - breakTableIndex_ = i; - printf("breakTable %s found as menuItem %d\n",cfgBreakTableStr_, breakTableIndex_); - break; - } + for(pbrkTable = (brkTable *)ellFirst(&pdbbase->bptList); + pbrkTable; + pbrkTable = (brkTable *)ellNext(&pbrkTable->node)){ + if (strcmp(cfgBreakTableStr_,pbrkTable->name)==0) + { + found = true; + breakTable_ = pbrkTable; + break; + } } - return breakTableIndex_>=0; + if(!found) { + breakTable_ = NULL; + throw std::out_of_range("Breaktable not found..."); + } + + return found; } + diff --git a/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.h b/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.h index 6f4e0d2..509d282 100644 --- a/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.h +++ b/ecmc_plugin_fft/ecmc_plugin_fftApp/src/ecmcFFT.h @@ -92,10 +92,8 @@ class ecmcFFT : public asynPortDriver { int triggOnce_; int cycleCounter_; int ignoreCycles_; - int breakTableIndex_; void *breakTable_; short lastBreakPoint_; - short breakInit_; double scale_; // Config: Data set size FFT_STATUS status_; // Status/state (NO_STAT, IDLE, ACQ, CALC)