From 3e660a33ec3e752a0b85cfec475a92c53823814a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Nogueira?= Date: Mon, 4 May 2026 13:35:55 -0300 Subject: [PATCH] Make QSRV aware of waveforms which are strings This is necessary so these records are served as NTScalar with string value, instead of NTScalarArray with char[] value. This also simplifies clients, since they won't have to convert char[] into strings themselves. --- ADApp/Db/ADBase.template | 3 +++ ADApp/Db/ADPrefixes.template | 1 + ADApp/Db/NDArrayBase.template | 2 ++ ADApp/Db/NDAttributeN.template | 2 ++ ADApp/Db/NDBadPixel.template | 1 + ADApp/Db/NDCircularBuff.template | 2 ++ ADApp/Db/NDCodec.template | 1 + ADApp/Db/NDFile.template | 8 ++++++++ ADApp/Db/NDFileHDF5.template | 3 +++ ADApp/Db/NDFileNexus.template | 4 ++++ ADApp/Db/NDOverlayN.template | 2 ++ ADApp/Db/NDPosPlugin.template | 2 ++ ADApp/Db/NDPva.template | 1 + 13 files changed, 32 insertions(+) diff --git a/ADApp/Db/ADBase.template b/ADApp/Db/ADBase.template index de61ea692..417502d5c 100644 --- a/ADApp/Db/ADBase.template +++ b/ADApp/Db/ADBase.template @@ -433,6 +433,7 @@ record(waveform, "$(P)$(R)StatusMessage_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(waveform, "$(P)$(R)StringToServer_RBV") @@ -442,6 +443,7 @@ record(waveform, "$(P)$(R)StringToServer_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(waveform, "$(P)$(R)StringFromServer_RBV") @@ -451,6 +453,7 @@ record(waveform, "$(P)$(R)StringFromServer_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } ################################################################@### diff --git a/ADApp/Db/ADPrefixes.template b/ADApp/Db/ADPrefixes.template index 2fd388876..7f86ea1f1 100644 --- a/ADApp/Db/ADPrefixes.template +++ b/ADApp/Db/ADPrefixes.template @@ -7,5 +7,6 @@ record(waveform, "$(P)$(R)ChannelPrefixes") { field(FTVL, "CHAR") field(NELM, "$(NELEMENTS)") + info(Q:form, "String") } diff --git a/ADApp/Db/NDArrayBase.template b/ADApp/Db/NDArrayBase.template index bc20ba8ca..9c9332e5d 100755 --- a/ADApp/Db/NDArrayBase.template +++ b/ADApp/Db/NDArrayBase.template @@ -782,6 +782,7 @@ record(waveform, "$(P)$(R)NDAttributesMacros") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } ################################################################### @@ -796,6 +797,7 @@ record(waveform, "$(P)$(R)NDAttributesFile") field(FTVL, "CHAR") field(NELM, "$(XMLSIZE=256)") info(autosaveFields, "VAL") + info(Q:form, "String") } ################################################################### diff --git a/ADApp/Db/NDAttributeN.template b/ADApp/Db/NDAttributeN.template index 1efab5471..3b97a9e32 100644 --- a/ADApp/Db/NDAttributeN.template +++ b/ADApp/Db/NDAttributeN.template @@ -32,6 +32,7 @@ record(waveform, "$(P)$(R)AttrName") field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))ATTR_ATTRNAME") field(FTVL, "CHAR") field(NELM, "256") + info(Q:form, "String") } record(waveform, "$(P)$(R)AttrName_RBV") @@ -41,6 +42,7 @@ record(waveform, "$(P)$(R)AttrName_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } ################################################################### diff --git a/ADApp/Db/NDBadPixel.template b/ADApp/Db/NDBadPixel.template index c8211a4b7..400df4988 100644 --- a/ADApp/Db/NDBadPixel.template +++ b/ADApp/Db/NDBadPixel.template @@ -14,4 +14,5 @@ record(waveform, "$(P)$(R)FileName") field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))BAD_PIXEL_FILE_NAME") field(FTVL, "CHAR") field(NELM, "256") + info(Q:form, "String") } diff --git a/ADApp/Db/NDCircularBuff.template b/ADApp/Db/NDCircularBuff.template index 50c84693a..4da04b079 100644 --- a/ADApp/Db/NDCircularBuff.template +++ b/ADApp/Db/NDCircularBuff.template @@ -91,6 +91,7 @@ record(waveform, "$(P)$(R)TriggerCalc") { field(FTVL, "CHAR") field(NELM, "256") field(PINI, "1") + info(Q:form, "String") } # # Trigger calculation readback @@ -100,6 +101,7 @@ record(waveform, "$(P)$(R)TriggerCalc_RBV") { field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } # # Trigger calculation value diff --git a/ADApp/Db/NDCodec.template b/ADApp/Db/NDCodec.template index 03c4dd503..d10090a17 100644 --- a/ADApp/Db/NDCodec.template +++ b/ADApp/Db/NDCodec.template @@ -259,4 +259,5 @@ record(waveform, "$(P)$(R)CodecError") field(SCAN, "I/O Intr") field(FTVL, "CHAR") field(NELM, "256") + info(Q:form, "String") } diff --git a/ADApp/Db/NDFile.template b/ADApp/Db/NDFile.template index 579f3bc21..e643226ad 100644 --- a/ADApp/Db/NDFile.template +++ b/ADApp/Db/NDFile.template @@ -17,6 +17,7 @@ record(waveform, "$(P)$(R)FilePath") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)FilePath_RBV") @@ -26,6 +27,7 @@ record(waveform, "$(P)$(R)FilePath_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(bi, "$(P)$(R)FilePathExists_RBV") @@ -65,6 +67,7 @@ record(waveform, "$(P)$(R)FileName") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)FileName_RBV") @@ -74,6 +77,7 @@ record(waveform, "$(P)$(R)FileName_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(longout, "$(P)$(R)FileNumber") @@ -123,6 +127,7 @@ record(waveform, "$(P)$(R)FileTemplate") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)FileTemplate_RBV") @@ -132,6 +137,7 @@ record(waveform, "$(P)$(R)FileTemplate_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } # Full filename, including path @@ -142,6 +148,7 @@ record(waveform, "$(P)$(R)FullFileName_RBV") field(FTVL, "CHAR") field(NELM, "512") field(SCAN, "I/O Intr") + info(Q:form, "String") } # Autosave flag @@ -350,6 +357,7 @@ record(waveform, "$(P)$(R)WriteMessage") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(bo, "$(P)$(R)LazyOpen") diff --git a/ADApp/Db/NDFileHDF5.template b/ADApp/Db/NDFileHDF5.template index dcf4fb083..99e168b85 100644 --- a/ADApp/Db/NDFileHDF5.template +++ b/ADApp/Db/NDFileHDF5.template @@ -820,6 +820,7 @@ record(waveform, "$(P)$(R)XMLErrorMsg_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(bi, "$(P)$(R)XMLValid_RBV") @@ -843,6 +844,7 @@ record(waveform, "$(P)$(R)XMLFileName") field(FTVL, "CHAR") field(NELM, "$(XMLSIZE=2048)") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)XMLFileName_RBV") @@ -852,6 +854,7 @@ record(waveform, "$(P)$(R)XMLFileName_RBV") field(FTVL, "CHAR") field(NELM, "$(XMLSIZE=2048)") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(bi, "$(P)$(R)SWMRSupported_RBV") diff --git a/ADApp/Db/NDFileNexus.template b/ADApp/Db/NDFileNexus.template index 85e8b3797..c2cdc2f2d 100644 --- a/ADApp/Db/NDFileNexus.template +++ b/ADApp/Db/NDFileNexus.template @@ -34,6 +34,7 @@ record(waveform, "$(P)$(R)TemplateFilePath") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)TemplateFilePath_RBV") @@ -43,6 +44,7 @@ record(waveform, "$(P)$(R)TemplateFilePath_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } # Template Filename @@ -54,6 +56,7 @@ record(waveform, "$(P)$(R)TemplateFileName") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)TemplateFileName_RBV") @@ -63,6 +66,7 @@ record(waveform, "$(P)$(R)TemplateFileName_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(bi, "$(P)$(R)FileTemplateValid") diff --git a/ADApp/Db/NDOverlayN.template b/ADApp/Db/NDOverlayN.template index 62ccbf5f1..a268b09c7 100644 --- a/ADApp/Db/NDOverlayN.template +++ b/ADApp/Db/NDOverlayN.template @@ -392,6 +392,7 @@ record(waveform, "$(P)$(R)DisplayText") field(FTVL, "CHAR") field(NELM, "256") info(autosaveFields, "VAL") + info(Q:form, "String") } record(waveform, "$(P)$(R)DisplayText_RBV") @@ -401,6 +402,7 @@ record(waveform, "$(P)$(R)DisplayText_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(stringout, "$(P)$(R)TimeStampFormat") diff --git a/ADApp/Db/NDPosPlugin.template b/ADApp/Db/NDPosPlugin.template index f1edfc60d..689473f7d 100644 --- a/ADApp/Db/NDPosPlugin.template +++ b/ADApp/Db/NDPosPlugin.template @@ -17,6 +17,7 @@ record(waveform, "$(P)$(R)Filename") field(INP, "@asyn($(PORT),$(ADDR=0),$(TIMEOUT=1))NDPos_Filename") field(FTVL, "CHAR") field(NELM, "1000000") + info(Q:form, "String") } record(waveform, "$(P)$(R)Filename_RBV") @@ -26,6 +27,7 @@ record(waveform, "$(P)$(R)Filename_RBV") field(FTVL, "CHAR") field(NELM, "1000000") field(SCAN, "I/O Intr") + info(Q:form, "String") } record(bi, "$(P)$(R)FileValid_RBV") diff --git a/ADApp/Db/NDPva.template b/ADApp/Db/NDPva.template index 10fe88451..19ed5ff60 100644 --- a/ADApp/Db/NDPva.template +++ b/ADApp/Db/NDPva.template @@ -15,4 +15,5 @@ record(waveform, "$(P)$(R)PvName_RBV") field(FTVL, "CHAR") field(NELM, "256") field(SCAN, "I/O Intr") + info(Q:form, "String") }