image demo
This commit is contained in:
5
iocBoot/iocimagedemo/Makefile
Normal file
5
iocBoot/iocimagedemo/Makefile
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
TOP = ../..
|
||||||
|
include $(TOP)/configure/CONFIG
|
||||||
|
ARCH = linux-x86_64-debug
|
||||||
|
TARGETS = envPaths
|
||||||
|
include $(TOP)/configure/RULES.ioc
|
40
iocBoot/iocimagedemo/image.db
Normal file
40
iocBoot/iocimagedemo/image.db
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
|
||||||
|
record(longout, "$(N):ArraySize0_RBV") {
|
||||||
|
info(Q:group, {
|
||||||
|
"$(N):Array":{
|
||||||
|
"foo.dimension[0].size":{+channel:"VAL", +type:"existing"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
field(FLNK, "$(N):ArraySize1_RBV")
|
||||||
|
}
|
||||||
|
|
||||||
|
record(longout, "$(N):ArraySize1_RBV") {
|
||||||
|
info(Q:group, {
|
||||||
|
"$(N):Array":{
|
||||||
|
"foo.dimension[1].size":{+channel:"VAL", +type:"existing"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
field(FLNK, "$(N):ArrayData_")
|
||||||
|
}
|
||||||
|
|
||||||
|
record(aSub, "$(N):ArrayData_") {
|
||||||
|
field(SNAM, "QSRV_image_demo")
|
||||||
|
field(FTA, "ULONG")
|
||||||
|
field(FTB, "ULONG")
|
||||||
|
field(FTVA, "USHORT")
|
||||||
|
field(NOVA, "262144") # eg. 512x512
|
||||||
|
field(INPA, "$(N):ArraySize0_RBV NPP MSI")
|
||||||
|
field(INPB, "$(N):ArraySize1_RBV NPP MSI")
|
||||||
|
field(OUTA, "$(N):ArrayData PP MSI")
|
||||||
|
}
|
||||||
|
|
||||||
|
record(waveform, "$(N):ArrayData") {
|
||||||
|
field(FTVL, "UCHAR")
|
||||||
|
field(NELM, "256")
|
||||||
|
info(Q:group, {
|
||||||
|
"$(N):Array":{
|
||||||
|
"foo":{+type:"NTNDArray", +channel:"VAL", +trigger:"*"}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
5
iocBoot/iocimagedemo/st.cmd
Executable file
5
iocBoot/iocimagedemo/st.cmd
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!../../bin/linux-x86_64-debug/softIocPVA
|
||||||
|
|
||||||
|
dbLoadRecords("image.db","N=TST:image1")
|
||||||
|
|
||||||
|
iocInit()
|
@ -38,7 +38,7 @@ record(calc, "$(N)Phase:Q") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
record(waveform, "$(N)I") {
|
record(waveform, "$(N)I") {
|
||||||
field(DTYP, "PDB Demo")
|
field(DTYP, "QSRV Demo")
|
||||||
field( INP, "$(N)Phase:I")
|
field( INP, "$(N)Phase:I")
|
||||||
field(FTVL, "DOUBLE")
|
field(FTVL, "DOUBLE")
|
||||||
field(NELM, "500")
|
field(NELM, "500")
|
||||||
@ -49,7 +49,7 @@ record(waveform, "$(N)I") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
record(waveform, "$(N)Q") {
|
record(waveform, "$(N)Q") {
|
||||||
field(DTYP, "PDB Demo")
|
field(DTYP, "QSRV Demo")
|
||||||
field( INP, "$(N)Phase:Q")
|
field( INP, "$(N)Phase:Q")
|
||||||
field(FTVL, "DOUBLE")
|
field(FTVL, "DOUBLE")
|
||||||
field(NELM, "500")
|
field(NELM, "500")
|
||||||
|
@ -15,6 +15,7 @@ qsrv_SRCS += pdb.cpp
|
|||||||
qsrv_SRCS += pdbsingle.cpp
|
qsrv_SRCS += pdbsingle.cpp
|
||||||
#qsrv_SRCS += pvalink.cpp
|
#qsrv_SRCS += pvalink.cpp
|
||||||
qsrv_SRCS += demo.cpp
|
qsrv_SRCS += demo.cpp
|
||||||
|
qsrv_SRCS += imagedemo.c
|
||||||
|
|
||||||
ifdef BASE_3_16
|
ifdef BASE_3_16
|
||||||
qsrv_SRCS += pdbgroup.cpp
|
qsrv_SRCS += pdbgroup.cpp
|
||||||
|
@ -26,6 +26,11 @@ long init_spin(waveformRecord *prec)
|
|||||||
|
|
||||||
long process_spin(waveformRecord *prec)
|
long process_spin(waveformRecord *prec)
|
||||||
{
|
{
|
||||||
|
if(prec->dpvt != &dummy) {
|
||||||
|
(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const double freq = 360.0*pi_180/100; // rad/sample
|
const double freq = 360.0*pi_180/100; // rad/sample
|
||||||
double phase = 0;
|
double phase = 0;
|
||||||
double *val = static_cast<double*>(prec->bptr);
|
double *val = static_cast<double*>(prec->bptr);
|
||||||
|
50
pdbApp/imagedemo.c
Normal file
50
pdbApp/imagedemo.c
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include <epicsMath.h>
|
||||||
|
#include <dbAccess.h>
|
||||||
|
#include <dbScan.h>
|
||||||
|
#include <recGbl.h>
|
||||||
|
#include <alarm.h>
|
||||||
|
#include <registryFunction.h>
|
||||||
|
|
||||||
|
#include <aSubRecord.h>
|
||||||
|
|
||||||
|
#include <epicsExport.h>
|
||||||
|
|
||||||
|
/** Generate a test pattern
|
||||||
|
*
|
||||||
|
* A - width (ULONG)
|
||||||
|
* B - height (ULONG)
|
||||||
|
* VALA - pixel array (USHORT)
|
||||||
|
*/
|
||||||
|
static
|
||||||
|
long QSRV_image_demo(aSubRecord *prec)
|
||||||
|
{
|
||||||
|
epicsUInt32 W = *(epicsUInt32*)prec->a,
|
||||||
|
H = *(epicsUInt32*)prec->b;
|
||||||
|
epicsUInt16 *I = (epicsUInt16*)prec->vala;
|
||||||
|
epicsUInt32 i, j;
|
||||||
|
epicsUInt16 phase;
|
||||||
|
|
||||||
|
if(W*H>prec->nova) {
|
||||||
|
(void)recGblSetSevr(prec, READ_ALARM, INVALID_ALARM);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i=0; i<W; i++) {
|
||||||
|
phase = 0;
|
||||||
|
for(j=0; j<H; j++) {
|
||||||
|
if(i%50==49 || j%50==49)
|
||||||
|
I[i*H+j] = 65535;
|
||||||
|
else
|
||||||
|
I[i*H+j] = phase;
|
||||||
|
phase += 65535/W;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
prec->neva = W*H;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
epicsRegisterFunction(QSRV_image_demo);
|
@ -3,4 +3,6 @@ registrar(QSRVRegistrar)
|
|||||||
#link("pva", "lsetPVA")
|
#link("pva", "lsetPVA")
|
||||||
|
|
||||||
# from demo.cpp
|
# from demo.cpp
|
||||||
device(waveform, CONSTANT, devWfPDBDemo, "PDB Demo")
|
device(waveform, CONSTANT, devWfPDBDemo, "QSRV Demo")
|
||||||
|
# from imagedemo.c
|
||||||
|
function(QSRV_image_demo)
|
||||||
|
Reference in New Issue
Block a user