From 2fc7122b71fc0460e0ff4c558ee80ab11dd3dc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Sandstr=C3=B6m?= Date: Fri, 1 Mar 2024 21:47:02 +0100 Subject: [PATCH] WIP --- Db/.keep | 0 Db/ecmcPluginScope.template | 90 +++++++++++++++++++++++++++++++++++++ src/ecmcDAQDataArray.cpp | 5 +++ 3 files changed, 95 insertions(+) create mode 100644 Db/.keep create mode 100644 Db/ecmcPluginScope.template diff --git a/Db/.keep b/Db/.keep new file mode 100644 index 0000000..e69de29 diff --git a/Db/ecmcPluginScope.template b/Db/ecmcPluginScope.template new file mode 100644 index 0000000..096487e --- /dev/null +++ b/Db/ecmcPluginScope.template @@ -0,0 +1,90 @@ +# Data source +record(waveform,"$(P)Plugin-Scope${INDEX}-DataSource"){ + field(DESC, "Data source name") + field(PINI, "1") + field(DTYP, "asynInt8ArrayIn") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt8ArrayIn/plugin.scope${INDEX}.source?") + field(FTVL, "CHAR") + field(NELM, "1024") + field(SCAN, "I/O Intr") + field(TSE, "0") +} + +record(waveform,"$(P)Plugin-Scope${INDEX}-TriggSource"){ + field(DESC, "Trigger source name") + field(PINI, "1") + field(DTYP, "asynInt8ArrayIn") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt8ArrayIn/plugin.scope${INDEX}.trigg?") + field(FTVL, "CHAR") + field(NELM, "1024") + field(SCAN, "I/O Intr") + field(TSE, "0") +} + +record(waveform,"$(P)Plugin-Scope${INDEX}-NextTimeSource"){ + field(DESC, "Trigger source name") + field(PINI, "1") + field(DTYP, "asynInt8ArrayIn") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt8ArrayIn/plugin.scope${INDEX}.nexttime?") + field(FTVL, "CHAR") + field(NELM, "1024") + field(SCAN, "I/O Intr") + field(TSE, "0") +} + +# result +record(waveform,"$(P)Plugin-Scope${INDEX}-Data-Act"){ + info(asyn:FIFO, "1000") + field(DESC, "Result data") + field(PINI, "1") + field(DTYP, "${RESULT_DTYP}") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=-1)/TYPE=${RESULT_DTYP}/plugin.scope${INDEX}.resultdata?") + field(FTVL, "${RESULT_FTVL}") + field(NELM, "${RESULT_NELM}") + field(SCAN, "I/O Intr") + field(TSE, "0") +} + +record(bo,"$(P)Plugin-Scope${INDEX}-Enable"){ + field(DESC, "FFT Enable") + field(DTYP,"asynInt32") + field(OUT, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.scope${INDEX}.enable=") + field(ZNAM,"FALSE") + field(ONAM,"TRUE") + field(DOL, "0") + field(VAL, "0") +} + +record(ai,"$(P)Plugin-Scope${INDEX}-MissTriggCntAct"){ + field(PINI, "1") + field(DESC, "Missed trigger counter") + field(DTYP,"asynInt32") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.scope${INDEX}.missed?") + field(SCAN, "I/O Intr") +} + +record(ai,"$(P)Plugin-Scope${INDEX}-ScanToTriggSamples"){ + field(PINI, "1") + field(DESC, "Samples between now and trigger []") + field(DTYP,"asynFloat64") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynFloat64/plugin.scope${INDEX}.scantotrigg?") + field(SCAN, "I/O Intr") +} + +record(ai,"$(P)Plugin-Scope${INDEX}-TriggCntAct"){ + field(PINI, "1") + field(DESC, "Trigger counter") + field(DTYP,"asynInt32") + field(INP, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.scope${INDEX}.count?") + field(SCAN, "I/O Intr") +} + +#record(bo,"$(P)Plugin-Scope${INDEX}-Trigg"){ +# field(DESC, "FFT Trigg measurement") +# field(DTYP,"asynInt32") +# field(OUT, "@asyn(${PORT},$(ADDR=0),$(TIMEOUT=1000))T_SMP_MS=$(T_SMP_MS=1000)/TYPE=asynInt32/plugin.scope${INDEX}.trigg") +# field(ZNAM,"FALSE") +# field(ONAM,"TRUE") +# field(DOL, "0") +# field(VAL, "0") +#} diff --git a/src/ecmcDAQDataArray.cpp b/src/ecmcDAQDataArray.cpp index a89530f..fe011a9 100644 --- a/src/ecmcDAQDataArray.cpp +++ b/src/ecmcDAQDataArray.cpp @@ -69,6 +69,11 @@ void ecmcDAQDataArray::connectToDataSources() { void ecmcDAQDataArray::buildArrayHeader(){ // 4 elements plus first timestamp to first data element size_t dataStartOffset = channelCounter_* 4 + 1; + + if( nelm_ < dataStartOffset) { + throw std::runtime_error( "Array to small, header will not fit (array size must be bigger than total data size plus 4*data_channel_count+1).."); + } + size_t index = 0; buffer_[index] = 0; // Timestamp, will be set in each loop in execute index++;