61 Commits
0.0.2 ... 1.0.2

Author SHA1 Message Date
marcofilho
2c951811fc Merge branch 'remove-alarms'
Remove alarms when acquisition is aborted according to request in https://jira.esss.lu.se/browse/ECDC-4185
2024-09-06 14:18:15 +02:00
marcofilho
db6ce72e1d Remove alarm severity when acq aborted.
As discussed in ECDC-4185
2024-09-06 14:04:27 +02:00
Marco Filho
081d5bfdd5 Merge branch 'ICSHWI-19117-fix-false-warning' into 'master'
Fix false alarm problem

Closes ICSHWI-19117

See merge request epics-modules/adorca!21
2024-08-26 15:03:55 +00:00
marcofilho
634c3b12ba Fix false warning raise.
Fix concurrency problem.

Before this commit, if acquisition was aborted by user before the imagetask had
passed through the conditional
`if ((epicsTimeDiffInSeconds(&currentAcqTime, &prevAcqTime) > maxAcqusitionTime)`, condition would evaluate to true
and raise a warning saying that the acquisition timed out, which is not true.

After this, condition evaluates to false and no alarm is raised.
Tested several acquisitions and this does not seem to compromise the control flow.
It seems to work both with internal and with external triggers.
2024-08-26 16:48:24 +02:00
marcofilho
4bc89278fe Update makefile
Makefile was using old e3 directives. I copied the makefile from the recipe.
2024-08-26 16:46:57 +02:00
Jim Larsson
acff3aedc0 Merge branch '0.1.0_fix' into 'master'
Fix OOPT error

See merge request epics-modules/adorca!19
2024-06-20 08:56:06 +00:00
Jim Larsson
bf9dccedc6 Fix OOPT error 2024-06-20 08:54:56 +00:00
Marco Antonio Barra Montevechi Filho
e7c34375ee Merge dev into master
According to this MR:
https://gitlab.esss.lu.se/epics-modules/adorca/-/merge_requests/18 it
seems dev branch has been extensively used in the last few months. The
recipe is using the dev branch:
https://gitlab.esss.lu.se/e3/recipes/adorca-recipe/-/blob/master/recipe/meta.yaml?ref_type=heads
so merging it into master shouldn't break anything. It's just a sync
after some development time.

I initially thought about merging master into dev first to solve the
small conflict in .gitignore but then this would be acessible to the
recipe.

After this maybe we should update the recipe?
2024-06-17 17:44:59 +02:00
Jim Larsson
4f6a5b4d51 Merge branch 'ICSHWI-17419' into 'dev'
(Modify) Logic to #StopAfterCycles for cont. mode

See merge request epics-modules/adorca!17
2024-03-12 13:41:05 +00:00
Jim Larsson
2562f3d732 (Modify) Logic to #StopAfterCycles for cont. mode 2024-02-27 15:44:07 +01:00
Jim Larsson
ed1845acf2 Merge branch 'ICSHWI_17104' into 'dev'
Icshwi 17104

See merge request epics-modules/adhama!16
2024-02-21 09:03:41 +00:00
Jim Larsson
15e0849a58 fix(orca.cpp): timeout msg 2024-02-20 10:47:31 +01:00
Jim Larsson
9bf0389752 ICSHWI-17104: add waiting time until status update -taking too long 2024-02-13 14:32:11 +01:00
Jim Larsson
1a3c91838b add elapsedTotalTime and compare with max acq. 2024-02-13 11:45:02 +01:00
Douglas Araujo
e24c2f68e8 Merge branch 'ICSHWI-15886-Orca-frame-drop' into 'dev'
ICSHWI-15886: Orca frame drop

See merge request epics-modules/adhama!15
2024-01-29 14:27:01 +00:00
Douglas Araujo
81ee3c28a5 Add mechanism to check dropped frames 2024-01-29 08:25:27 +00:00
Douglas Araujo
94c13c6a48 Merge branch 'ICSHWI-15961' into 'dev'
ICSHWI-15961: rename Hama to Orca

See merge request epics-modules/adhama!14
2024-01-29 08:24:31 +00:00
Tomasz Brys
10d88aa479 rename Hama to Orca 2024-01-17 15:14:49 +01:00
Douglas Araujo
d77cb91b15 Merge branch 'ICSHWI-12967' into 'dev'
ICSHWI-12967: Add internal PVs to control when enable and stop EVR sequencer

See merge request epics-modules/adhama!13
2023-09-20 07:02:11 +00:00
Douglas Araujo
a9b6d1c4be Update st.cmd to run with external trigger by EVR 11 and update kafka topic 2023-09-18 11:33:28 +02:00
Douglas Araujo
16bb800227 Add mechanism to check if acquirePeriod is valid 2023-09-18 11:32:01 +02:00
Douglas Araujo
1d07985371 Stop sequencer when Acquire 0 2023-09-18 11:26:30 +02:00
Douglas Araujo
7118ae9186 Add internal PVs to control when enable and stop EVR sequencer instead only to use Acquire 1/0 2023-09-06 14:49:15 +02:00
George Kontogiorgos
dfb2786e54 Merge branch 'ICSHWI-12967' into 'dev'
Set startup script to use Kafka broker's SSL port

See merge request epics-modules/adhama!11
2023-07-03 13:45:59 +00:00
George Nicolas Kontogiorgos
cc537075ab Set startup script to use Kafka broker's SSL port 2023-06-16 16:10:55 +02:00
Douglas Araujo
29163e8bae Merge branch 'ICSHWI-12772_frame_rate' into 'dev'
ICSHWI-12772: Evaluate frame rate

See merge request epics-modules/adhama!10
2023-06-07 06:19:35 +00:00
Douglas Araujo
b3d88868ee Merge branch 'ICSHWI-12773_acquision_refactor' into 'dev'
ICSHWI-12773: Acquision Refactor

See merge request epics-modules/adhama!9
2023-06-07 06:18:23 +00:00
Douglas Araujo
8d4e8ee925 Add logic to prevent always to process the PVs on readParameter function 2023-05-30 09:15:59 +02:00
Douglas Araujo
41d69d3ef1 Refactor sensor size and position definitions 2023-05-30 08:34:47 +02:00
Douglas Araujo
374a84971b Fix trigger_mode value to option start 2023-05-25 15:38:22 +02:00
Douglas Araujo
a66877b354 Update the enable/disable EVR softSequencer logic to work with different kinds of acquisition modes 2023-05-24 17:17:07 +02:00
Douglas Araujo
bfd746ac67 Fix acquireTime blocker logic to external trigger 2023-05-24 17:11:29 +02:00
Douglas Araujo
63fc03a41e Add logic to PV AcquirePeriod controls the EVR pulse period 2023-05-24 15:30:47 +02:00
Douglas Araujo
7b73325de8 Remove dcamwait frame since this is done by acquisition epicsThread 2023-05-23 14:59:29 +02:00
Douglas Araujo
25e346e970 Add logic to start and stop evr sequencer 2023-05-23 11:25:22 +02:00
Douglas Araujo
5751c2b703 Add logic to select the correct timestamp source 2023-05-20 09:27:05 +02:00
Douglas Araujo
11a7e3fe9e Add external (EVR) timestamp 2023-05-17 12:32:19 +02:00
Douglas Araujo
882f277114 Add dcambuf_release() function to release the internal receiving buffer in the DCAM module when stop an acquisition 2023-04-03 10:51:35 +02:00
Douglas Araujo
71a97f8170 Merge branch 'ICSHWI-11597' into 'dev'
Icshwi 11597

See merge request epics-modules/adhama!7
2023-03-31 08:14:12 +00:00
Iocuser
545fb7b0ec Add Tomasz's changes 2023-03-31 10:12:04 +02:00
Iocuser
e2368aa113 just update 2023-03-16 20:29:40 +01:00
Lucas Magalhães
45e223e40c Merge branch 'remove_old_makefile' into 'master'
Removing unused/old Makefiles

See merge request epics-modules/adhama!8
2023-03-15 14:46:13 +00:00
Lucas Magalhães
8003d9f75d Add old makefiles to .gitignore 2023-03-15 14:00:08 +00:00
Lucas Magalhães
e2ccdb9b7e Remove unused ADHama.Makefile 2023-03-15 12:30:33 +00:00
Iocuser
b01e13eb77 small update 2023-02-09 09:20:07 +01:00
Iocuser
27dabf4fdc remove comments and old code 2023-02-08 11:33:44 +01:00
Iocuser
ed7881d93c Merge branch 'ICSHWI-11597' of https://gitlab.esss.lu.se/epics-modules/adhama into ICSHWI-11597 2023-02-06 16:43:55 +01:00
Iocuser
b6de30a144 check and update getParameters 2023-02-06 16:37:54 +01:00
Iocuser
e7d48816d2 Add adpluginkafka 2023-02-06 12:51:02 +00:00
Iocuser
7dc9fd7cb3 add readAtributes, readSensor functions 2023-02-06 12:51:02 +00:00
Iocuser
37607c5f23 Add adpluginkafka 2023-02-06 13:20:07 +01:00
Iocuser
90d571bb43 add readAtributes, readSensor functions 2023-02-02 17:21:27 +01:00
Douglas Araujo
c3634f8157 Merge branch 'ICSHWI-11097_frame_rate' into 'dev'
Add frame rate and control to acquire period PV

See merge request epics-modules/adhama!6
2023-02-01 15:16:27 +00:00
Douglas Araujo
4f8962f9e1 Add conditional to not process time parameters when external trigger is activate 2023-01-02 11:56:11 +01:00
Douglas Araujo
ee066ef720 Add frame rate and control to acquire period PV 2022-12-30 17:22:13 +01:00
Douglas Araujo
e15fafea4b Add shared libraries 2022-12-23 11:39:58 +01:00
Iocuser
58aefc799d small fix in trigger out implementation 2022-12-20 14:24:21 +01:00
Iocuser
a4cbf7e909 fix in trigger output, not ready yet... 2022-12-20 10:27:02 +01:00
Iocuser
f62b2102bc implement trigger out 2022-12-20 09:30:57 +01:00
Iocuser
97fd6f7c46 refactoring 2022-12-16 07:50:26 +01:00
Iocuser
0d44d0bbf2 implement virtual void report(FILE *, int) function 2022-12-15 11:55:21 +01:00
18 changed files with 1659 additions and 1172 deletions

5
.gitignore vendored
View File

@@ -7,4 +7,7 @@ O.*
*.db.*
pv.list
core.*
.vscode
.vscode
list.txt
kafka.conf
ecdc-kafka-ca.crt

View File

@@ -1,23 +0,0 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/ADHamaApp/src/**",
"${workspaceFolder}/ADHamaApp/src/",
"/home/iocuser/.conda/envs/hama/epics/include/**",
"/home/iocuser/.conda/envs/hama/epics/include/",
"/home/iocuser/.conda/envs/hama/modules/adcore/3.10.0/include/",
"/home/iocuser/.conda/envs/hama/modules/**",
"/home/iocuser/.conda/envs/hama/epics/include/os/Linux"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c89",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}

View File

@@ -1,158 +0,0 @@
#
# Copyright (c) 2019 - 2022, European Spallation Source ERIC
#
# The program is free software: you can redistribute it and/or modify it
# under the terms of the BSD 3-Clause license.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.
#
# Author : Tomasz Brys
# email : tomasz.brys@ess.eu
# Date : 2022-03-16
# version : 0.0.0
#
# This template file is based on one generated by e3TemplateGenerator.bash.
# Please look at many other module_name.Makefile in the https://gitlab.esss.lu.se/epics-modules/
# repositories.
#
## The following lines are mandatory, please don't change them.
where_am_I := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
include $(E3_REQUIRE_TOOLS)/driver.makefile
ifneq ($(strip $(ADCORE_DEP_VERSION)),)
adcore_VERSION=$(ADCORE_DEP_VERSION)
endif
ifneq ($(strip $(BUSY_DEP_VERSION)),)
busy_VERSION=$(BUSY_DEP_VERSION)
endif
############################################################################
#
# Add any required modules here that come from startup scripts, etc.
#
############################################################################
REQUIRED += adcore
REQUIRED += busy
############################################################################
#
# If you want to exclude any architectures:
#
############################################################################
EXCLUDE_ARCHS += linux-ppc64e6500
############################################################################
#
# Relevant directories to point to files
#
############################################################################
APP := ADHamaApp
APPDB := $(APP)/Db
APPSRC := $(APP)/src
APPCMDS := $(APP)/cmds
############################################################################
#
# Add any files that should be copied to $(module)/Db
#
############################################################################
TEMPLATES += $(wildcard $(APPDB)/*.db)
TEMPLATES += $(wildcard $(ADCORE_DIR)/*.db)
# TEMPLATES += $(wildcard $(APPDB)/*.proto)
TEMPLATES += $(wildcard $(APPDB)/*.template)
# USR_INCLUDES += -I$(where_am_I)$(APPSRC)
# USR_INCLUDES += -I $(E3_ADCORE_LOCATION)/ADCore/ADApp/ADSrc
# USR_INCLUDES += -I $(E3_ASYN_LOCATION)/asyn/interfaces
# USR_INCLUDES += -I $(E3_ASYN_LOCATION)/asyn/asynDriver
# USR_INCLUDES += -I $(E3_ASYN_LOCATION)/asyn/asynPortDriver
# USR_INCLUDES += -DLINUX -I/home/iocuser/dcamsdk4/inc/
USR_INCLUDES += -DLINUX -I ../support/dcamsdk4/inc/
# USR_INCLUDES += -I ../support/dcamsdk4/misc/
############################################################################
#
# Add any files that need to be compiled (e.g. .c, .cpp, .st, .stt)
#
############################################################################
# SOURCES += $(APPSRC)/ADHamaMain.cpp
SOURCES += $(APPSRC)/hama.cpp
# SOURCES += support/dcamsdk4/misc/common.cpp
############################################################################
#
# Add any .dbd files that should be included (e.g. from user-defined functions, etc.)
#
############################################################################
DBDS += $(APPSRC)/hama.dbd
############################################################################
#
# Add any header files that should be included in the install (e.g.
# StreamDevice or asyn header files that are used by other modules)
#
############################################################################
# HEADERS += /home/iocuser/dcamsdk4/inc
############################################################################
#
# Add any startup scripts that should be installed in the base directory
#
############################################################################
SCRIPTS += $(wildcard iocsh/*.iocsh)
############################################################################
#
# If you have any .substitution files, and template files, add them here.
#
############################################################################
# SUBS=$(wildcard $(APPDB)/*.substitutions)
TMPS=$(wildcard $(APPDB)/*.template)
USR_DBFLAGS += -I . -I ..
USR_DBFLAGS += -I $(E3_ADCORE_LOCATION)/db
USR_DBFLAGS += -I $(EPICS_BASE)/db
USR_DBFLAGS += -I $(APPDB)
USR_LDFLAGS += -L$(PWD)/support/dcamsdk4/lib/linux -ldcamapi
#USR_LDFLAGS += -L/usr/local/lib -ldcamapi
db: $(SUBS) $(TMPS)
$(SUBS):
@printf "Inflating database ... %44s >>> %40s \n" "$@" "$(basename $(@)).db"
@rm -f $(basename $(@)).db.d $(basename $(@)).db
@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db -S $@ > $(basename $(@)).db.d
@$(MSI) $(USR_DBFLAGS) -o $(basename $(@)).db -S $@
$(TMPS):
@printf "Inflating database ... %44s >>> %40s \n" "$@" "$(basename $(@)).db"
@rm -f $(basename $(@)).db.d $(basename $(@)).db
@$(MSI) -D $(USR_DBFLAGS) -o $(basename $(@)).db $@ > $(basename $(@)).db.d
@$(MSI) $(USR_DBFLAGS) -o $(basename $(@)).db $@
.PHONY: db $(SUBS) $(TMPS)
vlibs:
.PHONY: vlibs

BIN
ADHamaApp/Db/.DS_Store vendored

Binary file not shown.

View File

@@ -1 +0,0 @@
registrar("hamaRegister")

67
ADOrca.Makefile Normal file
View File

@@ -0,0 +1,67 @@
#
# Copyright (c) 2019 - 2022, European Spallation Source ERIC
#
# The program is free software: you can redistribute it and/or modify it
# under the terms of the BSD 3-Clause license.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.
#
# Author : Tomasz Brys
# email : tomasz.brys@ess.eu
# Date : 2022-03-16
# version : 0.0.0
#
# This template file is based on one generated by e3TemplateGenerator.bash.
# Please look at many other module_name.Makefile in the https://gitlab.esss.lu.se/epics-modules/
# repositories.
#
## The following lines are mandatory, please don't change them.
where_am_I := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
include $(E3_REQUIRE_TOOLS)/driver.makefile
REQUIRED += adcore
REQUIRED += busy
EXCLUDE_ARCHS += linux-ppc64e6500
APP := ADOrcaApp
APPDB := $(APP)/Db
APPSRC := $(APP)/src
APPCMDS := $(APP)/cmds
SUPPORT:= support/dcamsdk4/lib/linux-x86_64
TEMPLATES += $(wildcard $(APPDB)/*.db)
TEMPLATES += $(wildcard $(ADCORE_DIR)/*.db)
TEMPLATES += $(wildcard $(APPDB)/*.template)
USR_INCLUDES += -DLINUX -I ../support/dcamsdk4/inc/
SOURCES += $(APPSRC)/orca.cpp
DBDS += $(APPSRC)/orca.dbd
SCRIPTS += $(wildcard iocsh/*.iocsh)
TMPS=$(wildcard $(APPDB)/*.template)
USR_LDFLAGS += -L$(PREFIX)/lib/ -ldcamapi
LIB_SYS_LIBS += dcamapi
VENDOR_LIBS += $(SUPPORT)/libdcamapi.so.4
VENDOR_LIBS += $(SUPPORT)/libdcamapi.so.4.0.6269
VENDOR_LIBS += $(SUPPORT)/libdcamapi.so
USR_DBFLAGS += -I . -I ..
USR_DBFLAGS += -I $(E3_ADCORE_LOCATION)/db
USR_DBFLAGS += -I $(EPICS_BASE)/db
USR_DBFLAGS += -I $(APPDB)
vlibs: $(VENDOR_LIBS)
$(VENDOR_LIBS):
$(QUIET) install -m 755 $@ $(PREFIX)/lib/
.PHONY: $(VENDOR_LIBS) vlibs

View File

@@ -0,0 +1,4 @@
# Removing undesired alarms from aborted state
record(mbbi, "$(P)$(R)DetectorState_RBV") {
field(TESV, "NO_ALARM")
}

View File

@@ -1,6 +1,8 @@
# Database for the records specific to the Hamamatsu Orca Flash4.0 cameras
#
include "ADBase.template"
include "AlarmsOverride.template"
###############################################################################
# Note: The following are records defined in ADBase.template. #
@@ -90,32 +92,178 @@ record(mbbi, "$(P)$(R)ColorMode_RBV") {
field(SVVL, "")
}
record(longin, "$(P)$(R)ArrayCounter_RBV")
record("*", "$(P)$(R)SizeX")
{
field(FLNK, "$(P)$(R)#EVRTimeProc.PROC")
field(DRVH, "2048")
field(DRVL, "4")
}
record(ai, "$(P)$(R)#EVRTimeProc") {
record("*", "$(P)$(R)SizeY")
{
field(DRVH, "2048")
field(DRVL, "4")
}
record("*", "$(P)$(R)MinX")
{
field(DRVH, "2044")
field(DRVL, "0")
}
record("*", "$(P)$(R)MinY")
{
field(DRVH, "2044")
field(DRVL, "0")
}
record("*", "$(P)$(R)AcquirePeriod_RBV")
{
field(FLNK, "$(P)$(R)#EVRAcquireTime-S.PROC PP MS")
}
record(calcout, "$(P)$(R)#EVRAcquireTime-S") {
field(DESC, "Set EVR acquire time in seconds")
field(CALC, "A=0?B:A*B")
field(INPA, "$(P)$(R)AcquirePeriod_RBV")
field(INPB, "88052500")
field(OUT, "$(EVR):PS-1-Div-SP PP")
}
record(stringin, "$(P)$(R)#EVRTimeProc") {
field(DESC, "Start proce the EVRTime record")
field(TSEL, "$(EVR):Evt$(E)Cnt-I.TIME")
field(DTYP, "Soft Timestamp")
field(FLNK, "$(P)$(R)EVRTime-R.PROC")
field(SDIS, "$(EVR):Evt$(E)Cnt-I CP MS")
field(DISV, "-1")
field(TSEL, "$(EVR):Evt$(E)Cnt-I.TIME")
field(INP, "@%s.%f")
field(FLNK, "$(P)$(R)EVRTime-R.PROC PP MS")
}
record(calc, "$(P)$(R)EVRTime-R") {
# holds TS value in 'sec.nsec' format
record(stringout, "$(P)$(R)EVRTime-R") {
field(DESC, "EPICS epoch EVRTime timestamp")
field(CALC, "a+b")
field(INPA, "631152000")
field(INPB, "$(P)$(R)#EVRTimeProc")
field(DOL, "$(P)$(R)#EVRTimeProc MS")
field(OMSL, "closed_loop")
field(DTYP, "asynOctetWrite")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))EVR_TIMESTAMP")
}
record(ai, "$(P)$(R)TimeStamp-RB") {
field(DESC, "DCAM Timestamp when trigger received")
record(ai, "$(P)$(R)FrameRate-R") {
field(DESC, "Acquisition frame rate")
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TIMESTAMP")
field(PREC, "3")
field(SCAN, "I/O Intr")
field(PINI, "YES")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_FRAMERATE")
field(PREC, "2")
field(SCAN, "I/O Intr")
}
record(seq, "$(P)$(R)#SoftSeqDisable") {
field(SELM, "All")
# Disable sequencer 0
field(DOL1, "1")
field(LNK1, "$(EVR):SoftSeq-0-Disable-Cmd CP")
}
record(seq, "$(P)$(R)#SoftSeqEnable") {
field(SELM, "All")
# reset prescaler
field(DOL1, "123")
field(LNK1, "$(EVR):Evt-ResetPS-SP PP")
field(DOL2, "123")
field(LNK2, "$(EVR):EvtCode-SP PP")
# Enable sequencer 0
field(LNK3, "$(EVR):SoftSeq-0-Enable-Cmd.PROC PP")
}
record(longin, "$(P)$(R)#AcquireCtrl") {
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_ACQ_CONTROL")
field(FLNK, "$(P)$(R)#SeqAcquire PP MS")
field(SCAN, "I/O Intr")
}
record(seq, "$(P)$(R)#SeqAcquire") {
field(SELM, "All")
# Save current number of cycles
field(DOL1, "$(P)$(R)Cycle-Cnt")
field(LNK1, "$(P)$(R)#NCyclesPartial PP")
# Process CalcSoftSeqCtrl
field(DOL2, "1")
field(LNK2, "$(P)$(R)#CalcSoftSeqCtrl.PROC PP")
}
record(calcout, "$(P)$(R)#CalcSoftSeqCtrl") {
field(DESC, "Calc software sequencer control")
field(CALC, "(A = 1 && B = 1) ? 1 : 0")
field(INPA, "$(P)$(R)Acquire")
field(INPB, "$(P)$(R)TriggerSource-RB")
field(OOPT, "Transition To Non-zero")
field(OUT, "$(P)$(R)#SoftSeqEnable PP")
}
record(longin, "$(P)$(R)Cycle-Cnt") {
field(DESC, "Cycle Counter")
field(SCAN, "Passive")
field(INP, "$(EVR):SoftSeq-0-NumOfStarts-I CPP")
}
# Acts as a variable to store num. cycles before burst
record(ai, "$(P)$(R)#NCyclesPartial") {
field(DESC, "Num. cycles before burst")
field(DTYP, "Soft Channel")
field(SCAN, "Passive")
}
## Stop sequence after N cycles
record(calcout, "$(P)$(R)#StopAfterCycles") {
field(DESC, "StopAfterCycles")
field(CALC, "(C < (A + B)) || (D=2)")
field(INPA, "$(P)$(R)#NCyclesPartial NPP")
field(INPB, "$(P)$(R)NumImages_RBV NPP")
field(INPC, "$(P)$(R)Cycle-Cnt CPP")
field(INPD, "$(P)$(R)ImageMode_RBV NPP")
field(OOPT, "When Zero")
field(OUT, "$(P)$(R)#SoftSeqDisable PP")
}
record(calcout, "$(P)$(R)#StopAfterAcq0") {
field(DESC, "Stop seq when acquire 0")
field(CALC, "A = 0")
field(INPA, "$(P)$(R)Acquire CPP")
field(OOPT, "When Non-zero")
field(OUT, "$(P)$(R)#SoftSeqDisable PP")
}
record(longin, "$(P)$(R)#Cycle-Cnt") {
field(DESC, "Cycle Counter")
field(SCAN, "Passive")
field(INP, "$(EVR):SoftSeq-0-NumOfStarts-I CPP")
field(FLNK, "$(P)$(R)#CountSeq")
}
record(seq, "$(P)$(R)#CountSeq") {
field(SELM, "All")
field(DOL1, "$(P)$(R)#Cycle-Cnt")
field(LNK1, "$(P)$(R)#EVRCounts PP")
}
record(ao, "$(P)$(R)#EVRCounts") {
field(DTYP, "asynInt32")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))EVR_COUNTS")
}
record(longin, "$(P)$(R)#TriggerSinceStart") {
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))EVR_TRIGGERS_SINCE_ACQ_START")
field(SCAN, "I/O Intr")
}
record(longin, "$(P)$(R)TriggerDropped-RB") {
field(DESC, "Counter with EVR trigger dropped")
field(DTYP, "asynInt32")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))EVR_TRIGGER_DROPPED")
field(SCAN, "I/O Intr")
}
##########################################################################
@@ -306,21 +454,20 @@ record(mbbi, "$(P)$(R)BitPerChannel-RB") {
##########################################################################
# Trigger source (mode 4)
record(mbbo, "$(P)$(R)TriggerSource-S") {
field(DESC,"")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Internal")
field(ONVL, "2")
field(ONST, "External")
field(TWVL, "3")
field(TWST, "Software")
field(THVL, "4")
field(THST, "Master Pulse")
# field(DRVL, "1")
# field(DRVH, "4")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_SOURCE")
field(VAL, "1")
field(DESC,"")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Internal")
field(ONVL, "2")
field(ONST, "External")
field(TWVL, "3")
field(TWST, "Software")
field(THVL, "4")
field(THST, "Master Pulse")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_SOURCE")
field(VAL, "1")
field(FLNK, "$(P)$(R)AcquirePeriod.PROC PP MS")
}
record(mbbi, "$(P)$(R)TriggerSource-RB") {
@@ -345,10 +492,8 @@ record(mbbo, "$(P)$(R)TriggerMode-S") {
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Normal")
field(ONVL, "2")
field(ONVL, "6")
field(ONST, "Start")
# field(DRVL, "1")
# field(DRVH, "2")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TRIGGER_MODE")
field(VAL, "1")
}
@@ -602,7 +747,7 @@ record(mbbo, "$(P)$(R)Binning-S") {
field(ZRST, "1x1")
field(ONVL, "2")
field(ONST, "2x2")
field(TWVL, "3")
field(TWVL, "4")
field(TWST, "4x4")
# field(DRVL, "1")
# field(DRVH, "3")
@@ -617,7 +762,7 @@ record(mbbi, "$(P)$(R)Binning-RB") {
field(ZRST, "1x1")
field(ONVL, "2")
field(ONST, "2x2")
field(TWVL, "3")
field(TWVL, "4")
field(TWST, "4x4")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_BINNING")
field(SCAN, "I/O Intr")
@@ -653,26 +798,6 @@ record(mbbi, "$(P)$(R)SubarrayMode-RB") {
}
##########################################################################
# Feature #
##########################################################################
record(ao, "$(P)$(R)ExposureTime-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0.001004")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXPOSURE_TIME")
field(VAL, "0.009998")
}
record(ai, "$(P)$(R)ExposureTime-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_EXPOSURE_TIME")
field(SCAN, "I/O Intr")
}
##########################################################################
# ALU #
##########################################################################
@@ -801,13 +926,13 @@ record(mbbo, "$(P)$(R)OutputTriggerSource0-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "2")
field(ZRVL, "0")
field(ZRST, "Read Out End")
field(ONVL, "3")
field(ONVL, "1")
field(ONST, "VSync")
field(TWVL, "4")
field(TWVL, "2")
field(TWST, "HSync")
field(THVL, "6")
field(THVL, "3")
field(THST, "Trigger")
# field(DRVL, "2")
# field(DRVH, "6")
@@ -816,6 +941,40 @@ record(mbbo, "$(P)$(R)OutputTriggerSource0-S") {
}
record(mbbi, "$(P)$(R)OutputTriggerSource0-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "0")
field(ZRST, "Read Out End")
field(ONVL, "1")
field(ONST, "VSync")
field(TWVL, "2")
field(THST, "HSync")
field(THVL, "3")
field(THST, "Trigger")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_SOURCE0")
field(SCAN, "I/O Intr")
}
##########################################################################
# Output Trigger Source 1 (mode 4)
record(mbbo, "$(P)$(R)OutputTriggerSource1-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "2")
field(ZRST, "Read Out End")
field(ONVL, "3")
field(ONST, "VSync")
field(TWVL, "4")
field(TWST, "HSync")
field(THVL, "6")
field(THST, "Trigger")
# field(DRVL, "2")
# field(DRVH, "6")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_SOURCE1")
field(VAL, "0")
}
record(mbbi, "$(P)$(R)OutputTriggerSource1-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "2")
@@ -826,7 +985,41 @@ record(mbbi, "$(P)$(R)OutputTriggerSource0-RB") {
field(THST, "HSync")
field(THVL, "6")
field(THST, "Trigger")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_SOURCE0")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_SOURCE1")
field(SCAN, "I/O Intr")
}
# Output Trigger Source 2 (mode 4)
record(mbbo, "$(P)$(R)OutputTriggerSource2-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "2")
field(ZRST, "Read Out End")
field(ONVL, "3")
field(ONST, "VSync")
field(TWVL, "4")
field(TWST, "HSync")
field(THVL, "6")
field(THST, "Trigger")
# field(DRVL, "2")
# field(DRVH, "6")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_SOURCE2")
field(VAL, "0")
}
record(mbbi, "$(P)$(R)OutputTriggerSource2-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "2")
field(ZRST, "Read Out End")
field(ONVL, "3")
field(ONST, "VSync")
field(TWVL, "4")
field(THST, "HSync")
field(THVL, "6")
field(THST, "Trigger")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_SOURCE2")
field(SCAN, "I/O Intr")
}
@@ -856,20 +1049,61 @@ record(mbbi, "$(P)$(R)OutputTriggerPolarity0-RB") {
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_POLARITY0")
field(SCAN, "I/O Intr")
}
##########################################################################
# Internal Trigger Active (mode 1)
record(mbbo, "$(P)$(R)OutputTriggerActive0-S") {
# Output Trigger Polarity 1 (mode 2)
record(mbbo, "$(P)$(R)OutputTriggerPolarity1-S") {
field(DESC, "")
field(DTYP, "asynInt32")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Edge")
field(ZRST, "Negative")
field(ONVL, "2")
field(ONST, "Positive")
# field(DRVL, "1")
# field(DRVH, "1")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_ACTIVE0")
# field(DRVH, "2")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_POLARITY1")
field(VAL, "1")
}
record(mbbi, "$(P)$(R)OutputTriggerPolarity1-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Negative")
field(ONVL, "2")
field(ONST, "Positive")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_POLARITY1")
field(SCAN, "I/O Intr")
}
# Output Trigger Polarity 2 (mode 2)
record(mbbo, "$(P)$(R)OutputTriggerPolarity2-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Negative")
field(ONVL, "2")
field(ONST, "Positive")
# field(DRVL, "1")
# field(DRVH, "2")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_POLARITY2")
field(VAL, "1")
}
record(mbbi, "$(P)$(R)OutputTriggerPolarity2-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Negative")
field(ONVL, "2")
field(ONST, "Positive")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_POLARITY2")
field(SCAN, "I/O Intr")
}
##########################################################################
# Internal Trigger Active (mode 1)
record(mbbi, "$(P)$(R)OutputTriggerActive0-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
@@ -879,6 +1113,26 @@ record(mbbi, "$(P)$(R)OutputTriggerActive0-RB") {
field(SCAN, "I/O Intr")
}
# Internal Trigger Active (mode 1)
record(mbbi, "$(P)$(R)OutputTriggerActive1-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Edge")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_ACTIVE1")
field(SCAN, "I/O Intr")
}
# Internal Trigger Active (mode 1)
record(mbbi, "$(P)$(R)OutputTriggerActive2-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Edge")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_ACTIVE2")
field(SCAN, "I/O Intr")
}
##########################################################################
# Output Trigger Delay 0
record(ao, "$(P)$(R)OutputTriggerDelay0-S") {
@@ -890,7 +1144,6 @@ record(ao, "$(P)$(R)OutputTriggerDelay0-S") {
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_DELAY0")
field(VAL, "0")
}
record(ai, "$(P)$(R)OutputTriggerDelay0-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
@@ -898,6 +1151,41 @@ record(ai, "$(P)$(R)OutputTriggerDelay0-RB") {
field(SCAN, "I/O Intr")
}
# Output Trigger Delay 1
record(ao, "$(P)$(R)OutputTriggerDelay1-1") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_DELAY1")
field(VAL, "0")
}
record(ai, "$(P)$(R)OutputTriggerDelay1-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_DELAY1")
field(SCAN, "I/O Intr")
}
# Output Trigger Delay 2
record(ao, "$(P)$(R)OutputTriggerDelay2-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_DELAY2")
field(VAL, "0")
}
record(ai, "$(P)$(R)OutputTriggerDelay2-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_DELAY2")
field(SCAN, "I/O Intr")
}
##########################################################################
# Output Trigger Period 0
record(ao, "$(P)$(R)OutputTriggerPeriod0-S") {
@@ -907,9 +1195,8 @@ record(ao, "$(P)$(R)OutputTriggerPeriod0-S") {
field(DRVL, "0.000001")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_PERIOD0")
field(VAL, "0")
field(VAL, "0.000001")
}
record(ai, "$(P)$(R)OutputTriggerPeriod0-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
@@ -917,6 +1204,41 @@ record(ai, "$(P)$(R)OutputTriggerPeriod0-RB") {
field(SCAN, "I/O Intr")
}
# Output Trigger Period 1
record(ao, "$(P)$(R)OutputTriggerPeriod1-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0.000001")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_PERIOD1")
field(VAL, "0.000001")
}
record(ai, "$(P)$(R)OutputTriggerPeriod1-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_PERIOD1")
field(SCAN, "I/O Intr")
}
# Output Trigger Period 2
record(ao, "$(P)$(R)OutputTriggerPeriod2-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0.000001")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_PERIOD2")
field(VAL, "0.000001")
}
record(ai, "$(P)$(R)OutputTriggerPeriod2-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_PERIOD2")
field(SCAN, "I/O Intr")
}
##########################################################################
# Output Trigger Kind 0 (mode 5)
record(mbbo, "$(P)$(R)OutputTriggerKind0-S") {
@@ -935,8 +1257,6 @@ record(mbbo, "$(P)$(R)OutputTriggerKind0-S") {
field(FRST, "High")
field(FVVL, "6")
field(FVST, "Any Row Exposure")
# field(DRVL, "1")
# field(DRVH, "6")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_KIND0")
field(VAL, "1")
}
@@ -960,6 +1280,86 @@ record(mbbi, "$(P)$(R)OutputTriggerKind0-RB") {
field(SCAN, "I/O Intr")
}
# Output Trigger Kind 1 (mode 5)
record(mbbo, "$(P)$(R)OutputTriggerKind1-S") {
field(DESC, "")
field(DTYP, "asynInt32")
field(PINI, "YES")
field(ZRVL, "1")
field(ZRST, "Low")
field(ONVL, "2")
field(ONST, "Global Exposure")
field(TWVL, "3")
field(TWST, "Programable")
field(THVL, "4")
field(THST, "Trigger Ready")
field(FRVL, "5")
field(FRST, "High")
field(FVVL, "6")
field(FVST, "Any Row Exposure")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_KIND1")
field(VAL, "1")
}
record(mbbi, "$(P)$(R)OutputTriggerKind1-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Low")
field(ONVL, "2")
field(ONST, "Global Exposure")
field(TWVL, "3")
field(TWST, "Programable")
field(THVL, "4")
field(THST, "Trigger Ready")
field(FRVL, "5")
field(FRST, "High")
field(FVVL, "6")
field(FVST, "Any Row Exposure")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_KIND1")
field(SCAN, "I/O Intr")
}
# Output Trigger Kind 2 (mode 5)
record(mbbo, "$(P)$(R)OutputTriggerKind2-S") {
field(DESC, "")
field(DTYP, "asynInt32")
field(PINI, "YES")
field(ZRVL, "1")
field(ZRST, "Low")
field(ONVL, "2")
field(ONST, "Global Exposure")
field(TWVL, "3")
field(TWST, "Programable")
field(THVL, "4")
field(THST, "Trigger Ready")
field(FRVL, "5")
field(FRST, "High")
field(FVVL, "6")
field(FVST, "Any Row Exposure")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_KIND2")
field(VAL, "1")
}
record(mbbi, "$(P)$(R)OutputTriggerKind2-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "Low")
field(ONVL, "2")
field(ONST, "Global Exposure")
field(TWVL, "3")
field(TWST, "Programable")
field(THVL, "4")
field(THST, "Trigger Ready")
field(FRVL, "5")
field(FRST, "High")
field(FVVL, "6")
field(FVST, "Any Row Exposure")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_KIND2")
field(SCAN, "I/O Intr")
}
##########################################################################
# Output Trigger PreHsyncCount0
record(ao, "$(P)$(R)OutputTriggerPreHsyncCount-S") {
@@ -1014,6 +1414,75 @@ record(mbbi, "$(P)$(R)OutputTriggerBaseSensor0-RB") {
field(SCAN, "I/O Intr")
}
# Output Trigger Base Sensor 1 (mode 4)
record(mbbo, "$(P)$(R)OutputTriggerBaseSensor1-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "View 1")
field(ONVL, "2")
field(ONST, "View 2")
field(TWVL, "15")
field(TWST, "Any View")
field(THVL, "16")
field(THST, "All Views")
# field(DRVL, "1")
# field(DRVH, "4")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_BASE_SENSOR1")
field(VAL, "1")
}
record(mbbi, "$(P)$(R)OutputTriggerBaseSensor1-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "View 1")
field(ONVL, "2")
field(ONST, "View 2")
field(TWVL, "15")
field(TWST, "Any View")
field(THVL, "16")
field(THST, "All Views")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_BASE_SENSOR1")
field(SCAN, "I/O Intr")
}
# Output Trigger Base Sensor 2 (mode 4)
record(mbbo, "$(P)$(R)OutputTriggerBaseSensor2-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "View 1")
field(ONVL, "2")
field(ONST, "View 2")
field(TWVL, "15")
field(TWST, "Any View")
field(THVL, "16")
field(THST, "All Views")
# field(DRVL, "1")
# field(DRVH, "4")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_BASE_SENSOR2")
field(VAL, "1")
}
record(mbbi, "$(P)$(R)OutputTriggerBaseSensor2-RB") {
field(DESC, "")
field(DTYP, "asynInt32")
field(ZRVL, "1")
field(ZRST, "View 1")
field(ONVL, "2")
field(ONST, "View 2")
field(TWVL, "15")
field(TWST, "Any View")
field(THVL, "16")
field(THST, "All Views")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_OUTPUT_TRIGGER_BASE_SENSOR2")
field(SCAN, "I/O Intr")
}
##########################################################################
# Master Pulse #
##########################################################################
@@ -1028,10 +1497,8 @@ record(mbbo, "$(P)$(R)MasterPulseMode-S") {
field(ONST, "Start")
field(TWVL, "3")
field(THST, "Burst")
# field(DRVL, "1")
# field(DRVH, "3")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_MODE")
field(VAL, "1")
field(VAL, "0")
}
record(mbbi, "$(P)$(R)MasterPulseMode-RB") {
@@ -1080,6 +1547,7 @@ record(ao, "$(P)$(R)MasterPulseInterval-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(PREC, "6")
field(DRVL, "0.00001")
field(DRVH, "10")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_INTERVAL")
@@ -1089,6 +1557,7 @@ record(ao, "$(P)$(R)MasterPulseInterval-S") {
record(ai, "$(P)$(R)MasterPulseInterval-RB") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(PREC, "6")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_MASTERPULSE_INTERVAL")
field(SCAN, "I/O Intr")
}
@@ -1121,6 +1590,7 @@ record(ai, "$(P)$(R)TimingReadoutTime-RB") {
field(DTYP, "asynFloat64")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_TIMING_READOUT_TIME")
field(EGU, "Sec")
field(PREC, "9")
field(SCAN, "I/O Intr")
}
@@ -1190,8 +1660,6 @@ record(ai, "$(P)$(R)TimingInvalidExposurePeriod-RB") {
record(ao, "$(P)$(R)InternalFrameRate-S") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(DRVL, "0.1")
field(DRVH, "100.022862")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTERNAL_FRAME_RATE")
field(EGU, "Hz")
}
@@ -1209,8 +1677,6 @@ record(ai, "$(P)$(R)InternalFrameRate-RB") {
record(ao, "$(P)$(R)InternalFrameInternal-S") {
field(DESC, "")
field(DTYP, "asynFloat64")
field(DRVL, "0.00998")
field(DRVH, "10.0")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTERNAL_FRAME_INTERVAL")
field(EGU, "Sec")
}
@@ -1227,9 +1693,8 @@ record(ai, "$(P)$(R)InternalFrameInternal-RB") {
# Internal Line Speed
record(ao, "$(P)$(R)InternalLineSpeed-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0.667052")
field(DRVH, "0.667052")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTERNAL_LINE_SPEED")
field(EGU, "m/s")
}
@@ -1246,9 +1711,8 @@ record(ai, "$(P)$(R)InternalLineSpeed-RB") {
# Internal Line Interval
record(ao, "$(P)$(R)InternalLineInterval-S") {
field(DESC, "")
field(PINI, "YES")
field(DTYP, "asynFloat64")
field(DRVL, "0.00001")
field(DRVH, "0.00001")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_INTERNAL_LINE_INTERVAL")
field(EGU, "Sec")
}
@@ -1268,8 +1732,8 @@ record(ai, "$(P)$(R)InternalLineInterval-RB") {
record(mbbi, "$(P)$(R)ColorType-R") {
field(DESC,"")
field(DTYP, "asynInt32")
field(ZRVL, "0")
field(ZRST, "BW")
field(ZRVL, "1")
field(ZRST, "B & W")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_COLOR_TYPE")
field(SCAN, "I/O Intr")
}

View File

@@ -1,4 +1,4 @@
/* ADHamaMain.cpp */
/* ADOrcaMain.cpp */
/* Author: Tomasz Brys */
/* Date: 2022-03-16 */

File diff suppressed because it is too large Load Diff

1
ADOrcaApp/src/orca.dbd Normal file
View File

@@ -0,0 +1 @@
registrar("orcaRegister")

View File

@@ -1,13 +1,17 @@
#ifndef DRV_HAMA_H
#define DRV_HAMA_H
#include "ADDriver.h"
#include "dcamapi4.h"
#define MAX_FEATURE_NAME_LEN 64
#define hFrameRateString "H_FRAME_RATE" /* asynOctet ro */
#define hHamaNameString "H_HAMA_NAME" /* asynOctet ro */
#define MAX_H_SENSOR_SIZE 2048
#define MAX_V_SENSOR_SIZE 2048
#define hFrameRateString "H_FRAMERATE"
#define hOrcaNameString "H_HAMA_NAME" /* asynOctet ro */
#define hVendorString "H_VENDOR" /* asynOctet ro */
#define hModelString "H_MODEL" /* asynOctet ro */
#define hCameraIDString "H_CAMERAID" /* asynOctet ro */
@@ -17,143 +21,147 @@
#define hModuleVersionString "H_MODULE_VERSION" /* asynOctet ro */
#define hDcamApiVersionString "H_DCAM_API_VERSION" /* asynOctet ro */
// Sensor mode and speed
#define hSensorModeString "H_SENSOR_MODE" /* asynint32 rw */
#define hReadoutSpeedString "H_READOUT_SPEED" /* asynInt32 rw */
#define hReadoutDirectionString "H_READOUT_DIRECTION" /* asynIekt32 rw */
// Sensor mode and speed
#define hSensorModeString "H_SENSOR_MODE" /* asynint32 rw */
#define hReadoutSpeedString "H_READOUT_SPEED" /* asynInt32 rw */
#define hReadoutDirectionString "H_READOUT_DIRECTION" /* asynIekt32 rw */
// Trigger
#define hTriggerSourceString "H_TRIGGER_SOURCE" /* asynInt32 rw */
#define hTriggerModeString "H_TRIGGER_MODE" /* asynInt32 rw */
#define hTriggerActiveString "H_TRIGGER_ACTIVE" /* asynInt32 rw */
#define hTriggerSourceString "H_TRIGGER_SOURCE" /* asynInt32 rw */
#define hTriggerModeString "H_TRIGGER_MODE" /* asynInt32 rw */
#define hTriggerActiveString "H_TRIGGER_ACTIVE" /* asynInt32 rw */
#define hTriggerGlobalExposureString "H_TRIGGER_GLOBAL_EXPOSURE" /* asynInt32 rw */
#define hTriggerPolarityString "H_TRIGGER_POLARITY" /* asynInt32 rw */
#define hTriggerPolarityString "H_TRIGGER_POLARITY" /* asynInt32 rw */
#define hTriggerConnectorString "H_TRIGGER_CONNECTOR" /* asynInt32 rw */
#define hTriggerTimesString "H_TRIGGER_TIMES" /* asynInt32 rw */
#define hTriggerDelayString "H_TRIGGER_DELAY" /* asynFloat64 rw */
#define hTriggerTimesString "H_TRIGGER_TIMES" /* asynInt32 rw */
#define hTriggerDelayString "H_TRIGGER_DELAY" /* asynFloat64 rw */
#define hInternalTriggerHandlingString "H_INTERNAL_TRIGGER_HANDLING" /* asynInt32 rw */
// Sensor cooler
#define hSensorTemperatureString "H_SENSOR_TEMPERATURE" /* asynFloat64 ro */
#define hSensorCoolerString "H_SENSOR_COOLER" /* asynInt32 rw */
#define hSensorCoolerStatusString "H_SENSOR_COOLER_STATUS" /* asynInt32 ro */
#define hSensorTemperatureString "H_SENSOR_TEMPERATURE" /* asynFloat64 ro */
#define hSensorCoolerString "H_SENSOR_COOLER" /* asynInt32 rw */
#define hSensorCoolerStatusString "H_SENSOR_COOLER_STATUS" /* asynInt32 ro */
// Binning and ROI
#define hBinningString "H_BINNING" /* asynInt32 rw */
#define hSubarrayHPosString "H_SUBARRAY_HPOST" /* asynInt32 rw */
#define hSubarrayHSizeString "H_SUBARRAY_HSIZE" /* asynInt32 rw */
#define hSubarrayVPosString "H_SUBARRAY_VPOS" /* asynInt32 rw */
#define hSubarrayVSizeString "H_SUBARRAY_VSIZE" /* asynInt32 rw */
#define hSubarrayModeString "H_SUBARRAY_MODE" /* asynInt32 rw */
#define hBinningString "H_BINNING" /* asynInt32 rw */
#define hSubarrayHPosString "H_SUBARRAY_HPOST" /* asynInt32 rw */
#define hSubarrayHSizeString "H_SUBARRAY_HSIZE" /* asynInt32 rw */
#define hSubarrayVPosString "H_SUBARRAY_VPOS" /* asynInt32 rw */
#define hSubarrayVSizeString "H_SUBARRAY_VSIZE" /* asynInt32 rw */
#define hSubarrayModeString "H_SUBARRAY_MODE" /* asynInt32 rw */
// #define hFrameBundleMode (usb3 only not implemented)
// #define hFrameBundleNumber (usb3 only not implemented)
// Feature
#define hExposureTimeString "H_EXPOSURE_TIME" /* asynFloat64 rw */
// ALU
#define hDefectCorrectModeString "H_DEFECTCORRECT_MODE" /* asynInt32 rw */
#define hHotPixelCorrectLevelString "H_HOT_PIXEL_CORRECT_LEVEL" /* asynInt32 rw */
#define hIntensityLutModeString "H_INTENSITY_LUT_MODE" /* asynInt32 rw */
#define hIntensityLutPageString "H_INTENSITY_LUT_PAGE" /* asynInt32 ro */
#define hExtractionModeString "H_EXTRACTION_MODE" /* asynInt32 ro */
#define hDefectCorrectModeString "H_DEFECTCORRECT_MODE" /* asynInt32 rw */
#define hHotPixelCorrectLevelString "H_HOT_PIXEL_CORRECT_LEVEL" /* asynInt32 rw */
#define hIntensityLutModeString "H_INTENSITY_LUT_MODE" /* asynInt32 rw */
#define hIntensityLutPageString "H_INTENSITY_LUT_PAGE" /* asynInt32 ro */
#define hExtractionModeString "H_EXTRACTION_MODE" /* asynInt32 ro */
// output trigger
#define hNumberOfOutputTriggerConnectorString "H_NUMBEROF_OUTPUTTRIGGERCONNECTOR" /* asynInt32 ro */
#define hOutputTriggerSource0String "H_OUTPUT_TRIGGER_SOURCE0" /* asynInt32 rw */
#define hOutputTriggerSource1String "H_OUTPUT_TRIGGER_SOURCE1" /* asynInt32 rw */
#define hOutputTriggerSource2String "H_OUTPUT_TRIGGER_SOURCE2" /* asynInt32 rw */
#define hOutputTriggerSource0String "H_OUTPUT_TRIGGER_SOURCE0" /* asynInt32 rw */
#define hOutputTriggerSource1String "H_OUTPUT_TRIGGER_SOURCE1" /* asynInt32 rw */
#define hOutputTriggerSource2String "H_OUTPUT_TRIGGER_SOURCE2" /* asynInt32 rw */
#define hOutputTriggerPolarity0String "H_OUTPUT_TRIGGER_POLARITY0" /* asynInt32 rw */
#define hOutputTriggerPolarity1String "H_OUTPUT_TRIGGER_POLARITY1" /* asynInt32 rw */
#define hOutputTriggerPolarity2String "H_OUTPUT_TRIGGER_POLARITY2" /* asynInt32 rw */
#define hOutputTriggerActive0String "H_OUTPUT_TRIGGER_ACTIVE0" /* asynInt32 ro */
#define hOutputTriggerActive1String "H_OUTPUT_TRIGGER_ACTIVE1" /* asynInt32 ro */
#define hOutputTriggerActive2String "H_OUTPUT_TRIGGER_ACTIVE2" /* asynInt32 ro */
#define hOutputTriggerDelay0String "H_OUTPUT_TRIGGER_DELAY0" /* asynFloat64 rw */
#define hOutputTriggerDelay1String "H_OUTPUT_TRIGGER_DELAY1" /* asynFloat64 rw */
#define hOutputTriggerDelay2String "H_OUTPUT_TRIGGER_DELAY2" /* asynFloat64 rw */
#define hOutputTriggerPeriod0String "H_OUTPUT_TRIGGER_PERIOD0" /* asynFloat64 rw */
#define hOutputTriggerPeriod1String "H_OUTPUT_TRIGGER_PERIOD1" /* asynFloat64 rw */
#define hOutputTriggerPeriod2String "H_OUTPUT_TRIGGER_PERIOD2" /* asynFloat64 rw */
#define hOutputTriggerKind0String "H_OUTPUT_TRIGGER_KIND0" /* asynInt32 rw */
#define hOutputTriggerKind1String "H_OUTPUT_TRIGGER_KIND1" /* asynInt32 rw */
#define hOutputTriggerKind2String "H_OUTPUT_TRIGGER_KIND2" /* asynInt32 rw */
#define hOutputTriggerActive0String "H_OUTPUT_TRIGGER_ACTIVE0" /* asynInt32 ro */
#define hOutputTriggerActive1String "H_OUTPUT_TRIGGER_ACTIVE1" /* asynInt32 ro */
#define hOutputTriggerActive2String "H_OUTPUT_TRIGGER_ACTIVE2" /* asynInt32 ro */
#define hOutputTriggerDelay0String "H_OUTPUT_TRIGGER_DELAY0" /* asynFloat64 rw */
#define hOutputTriggerDelay1String "H_OUTPUT_TRIGGER_DELAY1" /* asynFloat64 rw */
#define hOutputTriggerDelay2String "H_OUTPUT_TRIGGER_DELAY2" /* asynFloat64 rw */
#define hOutputTriggerPeriod0String "H_OUTPUT_TRIGGER_PERIOD0" /* asynFloat64 rw */
#define hOutputTriggerPeriod1String "H_OUTPUT_TRIGGER_PERIOD1" /* asynFloat64 rw */
#define hOutputTriggerPeriod2String "H_OUTPUT_TRIGGER_PERIOD2" /* asynFloat64 rw */
#define hOutputTriggerKind0String "H_OUTPUT_TRIGGER_KIND0" /* asynInt32 rw */
#define hOutputTriggerKind1String "H_OUTPUT_TRIGGER_KIND1" /* asynInt32 rw */
#define hOutputTriggerKind2String "H_OUTPUT_TRIGGER_KIND2" /* asynInt32 rw */
#define hOutputTriggerBaseSensor0String "H_OUTPUT_TRIGGER_BASE_SENSOR0" /* asynInt32 rw */
#define hOutputTriggerBaseSensor1String "H_OUTPUT_TRIGGER_BASE_SENSOR1" /* asynInt32 rw */
#define hOutputTriggerBaseSensor2String "H_OUTPUT_TRIGGER_BASE_SENSOR2" /* asynInt32 rw */
#define hOutputTriggerPreHsyncCountString "H_OUTPUT_TRIGGER_PRE_HSYNC_COUNT" /* asynInt32 rw */
// Master Puls
#define hMasterPulseModeString "H_MASTERPULSE_MODE" /* asynInt32 rw */
#define hMasterPulseModeString "H_MASTERPULSE_MODE" /* asynInt32 rw */
#define hMasterPulseTriggerSourceString "H_MASTERPULSE_TRIGGER_SOURCE" /* asynInt32 rw */
#define hMasterPulseIntervalString "H_MASTERPULSE_INTERVAL" /* asynFloat64 rw */
#define hMasterPulseIntervalString "H_MASTERPULSE_INTERVAL" /* asynFloat64 rw */
#define hMasterPulseBurstTimesString "H_MASTERPULSE_BURST_TIMES" /* asynInt32 rw */
// Synchronious Timing
#define hTimingReadoutTimeString "H_TIMING_READOUT_TIME" /* asynFloat64 ro */
#define hTimingReadoutTimeString "H_TIMING_READOUT_TIME" /* asynFloat64 ro */
#define hTimingCyclicTriggerPeriodString "H_TIMING_CYCLICTRIGGERPERIOD" /* asynFloat64 ro */
#define hTimingMinTriggerBlankingString "H_TIMING_MIN_TRIGGER_BLANKING" /* asynFloat64 ro */
#define hTimingMinTriggerIntervalString "H_TIMING_MIN_TRIGGER_INTERVAL" /* asynFloat64 ro */
#define hTimingGlobalExposureDelayString "H_TIMING_GLOBAL_EXPOSURE_DELAY" /* asynFloat64 ro */
#define hTimingExposureString "H_TIMING_EXPOSURE" /* asynInt32 ro */
#define hTimingExposureString "H_TIMING_EXPOSURE" /* asynInt32 ro */
#define hTimingInvalidExposurePeriodString "H_TIMING_INVALID_EXPOSURE_PERIOD" /* asynFloat64 ro */
#define hInternalFrameRateString "H_INTERNAL_FRAME_RATE" /* asynFloat64 rw */
#define hInternalFrameRateString "H_INTERNAL_FRAME_RATE" /* asynFloat64 rw */
#define hInternalFrameIntervalString "H_INTERNAL_FRAME_INTERVAL" /* asynFloat64 rw */
#define hInternalLineSpeedString "H_INTERNAL_LINE_SPEED" /* asynFloat64 rw */
#define hInternalLineIntervalString "H_INTERNAL_LINE_INTERVAL" /* asynFloat64 rw */
#define hInternalLineSpeedString "H_INTERNAL_LINE_SPEED" /* asynFloat64 rw */
#define hInternalLineIntervalString "H_INTERNAL_LINE_INTERVAL" /* asynFloat64 rw */
// System information
#define hColorTypeString "H_COLOR_TYPE" /* asynInt32 ro */
#define hBitPerChannelString "H_BIT_PER_CHANNEL" /* asynInt32 rw */
//#define hImageWidthString "H_IMAGE_WIDTH" /* asynInt32 ro */
//#define hImageHeightString "H_IMAGE_HEIGHT" /* asynInt32 ro */
#define hImageRowBytesString "H_IMAGE_ROWBYTES" /* asynInt32 ro */
#define hImageFrameBytesString "H_IMAGE_FRAMEBYTES" /* asynInt32 ro */
#define hImageTopOffsetBytesString "H_IMAGE_TOP_OFFSETBYTES" /* asynInt32 ro */
#define hImagePixelTypeString "H_IMAGE_PIXEL_TYPE" /* asynInt32 rw */
#define hBufferRowbytesString "H_BUFFER_ROWBYTES" /* asynInt32 ro */
#define hBufferFramebytesString "H_BUFFER_FRAMEBYTES" /* asynInt32 ro */
#define hBufferTopOffsetBytesString "H_BUFFER_TOP_OFFSETBYTES" /* asynInt32 ro */
#define hBufferPixelTypeString "H_BUFFER_PIXEL_TYPE" /* asynInt32 ro */
#define hColorTypeString "H_COLOR_TYPE" /* asynInt32 ro */
#define hBitPerChannelString "H_BIT_PER_CHANNEL" /* asynInt32 rw */
//#define hImageWidthString "H_IMAGE_WIDTH" /* asynInt32 ro */
//#define hImageHeightString "H_IMAGE_HEIGHT" /* asynInt32 ro */
#define hImageRowBytesString "H_IMAGE_ROWBYTES" /* asynInt32 ro */
#define hImageFrameBytesString "H_IMAGE_FRAMEBYTES" /* asynInt32 ro */
#define hImageTopOffsetBytesString "H_IMAGE_TOP_OFFSETBYTES" /* asynInt32 ro */
#define hImagePixelTypeString "H_IMAGE_PIXEL_TYPE" /* asynInt32 rw */
#define hBufferRowbytesString "H_BUFFER_ROWBYTES" /* asynInt32 ro */
#define hBufferFramebytesString "H_BUFFER_FRAMEBYTES" /* asynInt32 ro */
#define hBufferTopOffsetBytesString "H_BUFFER_TOP_OFFSETBYTES" /* asynInt32 ro */
#define hBufferPixelTypeString "H_BUFFER_PIXEL_TYPE" /* asynInt32 ro */
#define hRecordFixedBytesPerFileString "H_RECORD_FIXED_BYTES_PER_FILE" /* asynInt32 ro */
#define hRecordFixedBytesPerSessionString "H_RECORD_FIXED_BYTES_PER_SESION" /* asynInt32 ro */
#define hRecordFixedBytesPerFrameString "H_RECORD_FIXED_BYTES_PER_FRAME" /* asynInt32 ro */
#define hSystemAliveString "H_SYSTEM_ALIVE" /* asynInt32 ro */
#define hSystemAliveString "H_SYSTEM_ALIVE" /* asynInt32 ro */
#define hConversionFactorCoeffString "H_CONVERSIONFACTOR_COEFF" /* asynFloat64 ro */
#define hConversionFactorOffsetString "H_CONVERSIONFACTOR_OFFSET" /* asynFloat64 ro */
#define hNumberOfViewString "H_NUMBER_OF_VIEW" /* asynInt32 ro */
#define hNumberOfViewString "H_NUMBER_OF_VIEW" /* asynInt32 ro */
#define hImageDetectorPixelWidthString "H_IMAGE_DETECTOR_PIXEL_WIDTH" /* asynFloat64 ro */
#define hImageDetectorPixelHeightString "H_IMAGE_DETECTOR_PIXEL_HEIGHT" /* asynFloat64 ro */
#define hImageDetectorPixelNumHorzString "H_IMAGE_DETECTOR_PIXEL_NUM_HORZ" /* asynInt32 ro */
#define hImageDetectorPixelNumVertString "H_IMAGE_DETECTOR_PIXEL_NUM_VERT" /* asynInt32 ro */
#define hTimeStampProducerString "H_TIMESTAMP_PRODUCER" /* asynInt32 ro */
#define hFrameStampProducerString "H_FRAMESTAMP_PRODUCER" /* asynInt32 ro */
#define hTimeStampString "H_TIMESTAMP" /* asynFloat64 ro */
#define evrTimeStampString "EVR_TIMESTAMP"
#define evrCountString "EVR_COUNTS"
#define evrCountSinceAcqStartString "EVR_TRIGGERS_SINCE_ACQ_START"
#define evrTriggerDroppedString "EVR_TRIGGER_DROPPED"
#define hAcqControlString "H_ACQ_CONTROL"
// For some reason these two addresses are not defined in the dcamapi4 neither in dcamprop.h
#define DETECTOR_PIXEL_NUM_HORZ 0x00420830
#define DETECTOR_PIXEL_NUM_VERT 0x00420840
class epicsShareClass Hama : public ADDriver {
class epicsShareClass Orca : public ADDriver {
public:
Hama(const char*, int, int, size_t, int, int, int);
// ~Hama();
Orca(const char*, int, int, size_t, int, int, int);
// ~Orca();
/* override ADDriver methods */
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
// virtual asynStatus getBounds(asynUser *, epicsInt32 *low, epicsInt32 *high);
//virtual asynStatus readEnum(asynUser *pasynUser, char *strings[], int values[],
// int severities[], size_t nElements, size_t *nIn);
virtual void report(FILE *fp, int details);
int readParameter(int propertyID, bool processPV = true);
int readParameterStr(int paramIndex);
epicsUInt32 mTimeStampSec;
epicsUInt32 mTimeStampNsec;
void imageTask();
void temperatureTask();
protected:
int hFrameRate;
#define FIRST_HAMA_PARAM hFrameRate
int hHamaName;
int hOrcaName;
int hVendor;
int hModel;
int hCameraID;
@@ -260,9 +268,13 @@ protected:
int hImageDetectorPixelNumVert;
int hTimeStampProducer;
int hFrameStampProducer;
int evrCounts;
int evrCountsSinceAcqStart;
int evrTriggerDropped;
int hAcqControl;
int evrTimeStamp;
//----
int hTimeStamp;
//#define LAST_HAMA_PARAM hTimeStamp
//#define LAST_HAMA_PARAM evrTimeStamp
private:
@@ -279,31 +291,32 @@ private:
epicsEventId startEvent_;
// Helper functions
asynStatus startAcquire(void);
asynStatus stopAcquire(void);
void getImageInformation(HDCAM hdcam, int32& pixeltype, int32& width, int32& rowbytes, int32& height, int32& framebytes);
asynStatus accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy, int32& ts_sec, int32& ts_microsec);
asynStatus accessCapturedImage(HDCAM hdcam, int32 iFrame, void* buf, int32 rowbytes, int32 cx, int32 cy, epicsUInt32& ts_sec, epicsUInt32& ts_microsec);
asynStatus imageTransferStatus(HDCAM hdcam, DCAMCAP_TRANSFERINFO &captransferinfo);
// wrapper functions for dcamapi
int allocateBuffers(unsigned int);
int freeBuffers();
// These function will be read only once
int connectCamera();
int disconnectCamera();
int initCamera();
asynStatus updateSensorSize();
asynStatus getParameter(int paramIndex);
// helper functions for dcamapi
void printError(HDCAM hdcam, DCAMERR errid, const char* apiname, const char* fmt=NULL, ...);
void printInfo(HDCAM hdcam);
int dcamdev_string( DCAMERR& err, HDCAM hdcam, int32 idStr, char* text, int32 textbytes );
int setParameter(int paramIndex);
int getParameterStr(int paramIndex);
int getProperties();
int setFeature(int featureIndex, double value);
int roundToNearestMultipleOfFour(int value);
asynStatus setFeature(int featureIndex, double value);
};
#endif

View File

@@ -15,15 +15,15 @@ conda create -n hama epics-base require tclx make compilers adcore busy
To activate env:
conda activate hama
conda activate orca
git clone ...
cd git/ADHama
cd git/ADOrca
compilation:
make -f ADHama.Makefile LIBVERSION=0.1 clean uninstall build db install
make -f ADOrca.Makefile LIBVERSION=0.1 clean uninstall build db install
execution:

View File

@@ -1,23 +1,28 @@
# This should be a test startup script
require adhama
require adorca
require adpluginkafka
epicsEnvSet("PREFIX", "Hama:")
epicsEnvSet("PORT", "HAMA")
epicsEnvSet("PREFIX", "Orca:")
epicsEnvSet("PORT", "ORCA")
epicsEnvSet("CAMERA", "0")
epicsEnvSet("QSIZE", "21")
epicsEnvSet("XSIZE", "10")
epicsEnvSet("YSIZE", "10")
epicsEnvSet("XSIZE", "2048")
epicsEnvSet("YSIZE", "2048")
epicsEnvSet("NCHANS", "2048")
# Number of Elements
epicsEnvSet("NELEMENTS", "4194304")
epicsEnvSet("EPICS_CA_MAX_ARRAY_BYTES", "64000000")
# iocshLoad("$(adhama_DIR)ADHama.iocsh")
#EVR settings
#epicsEnvSet("EVR", "LabS-NIDO:Ctrl-EVR-01")
epicsEnvSet("EVR", "Labs-ECDC:TS-EVR-11")
epicsEnvSet("EVR_EVENT", "B")
devHamamatsuConfig("$(PORT)", $(CAMERA), 0, 0, 0, 0, 10)
# iocshLoad("$(adorca_DIR)ADOrca.iocsh")
dbLoadRecords("$(adhama_DIR)db/hama.db","P=$(PREFIX),R=cam1:,EVR=LabS-Utgard-VIP:TS-EVR-3,E=F,PORT=$(PORT),ADDR=0,TIMEOUT=1")
devOrcamatsuConfig("$(PORT)", $(CAMERA), 0, 0, 0, 0, 10)
dbLoadRecords("$(adorca_DIR)db/orca.db","P=$(PREFIX),R=cam1:,EVR=$(EVR),E=$(EVR_EVENT),PORT=$(PORT),ADDR=0,TIMEOUT=1")
#asynSetTraceMask("$(PORT)",-1,0x9)
#asynSetTraceIOMask("$(PORT)",-1,0x2)
@@ -32,27 +37,35 @@ NDPvaConfigure("PVA1", $(QSIZE), 0, "$(PORT)", 0, "$(PREFIX)Pva1:Image", 0, 0, 0
dbLoadRecords("$(adcore_DIR)/db/NDPva.template", "P=$(PREFIX),R=Pva1:, PORT=PVA1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT)")
#
# Create a standard arrays plugin, set it to get data from hama driver.
# Create a standard arrays plugin, set it to get data from orca driver.
NDStdArraysConfigure("Image1", "$(QSIZE)", 0, "$(PORT)", 0, 0)
dbLoadRecords("NDStdArrays.template", "P=$(PREFIX),R=image1:,PORT=Image1,ADDR=0,TIMEOUT=1,NDARRAY_PORT=$(PORT),TYPE=Int32,FTVL=LONG,NELEMENTS=$(NELEMENTS)")
# Create a kafka plugin, set it to get data from orca driver.
#epicsEnvSet("KFK_TOPIC", "ymir_camera")
epicsEnvSet("KFK_TOPIC", "nido_camera")
# Kafka plugin
epicsEnvSet("KFK_CONFIG_FILE_PATH", "/home/iocuser/git/adhama/cmds/kafka.conf")
KafkaPluginConfigure("KFK1", 3, 1, "$(PORT)", 0, -1, "$(KFK_TOPIC)", "hama_kfk1","$(KFK_CONFIG_FILE_PATH)")
dbLoadRecords("$(adpluginkafka_DIR)db/adpluginkafka.db", "P=$(PREFIX), R=Kfk1:, PORT=KFK1, ADDR=0, TIMEOUT=1, NDARRAY_PORT=$(PORT)")
startPVAServer
#
#
# Start iocInit function===================================================================================
#
iocInit()
#
# End iocInit function ====================================================================================
#
dbpf Hama:cam1:PoolUsedMem.SCAN 0
dbpf Hama:image1:EnableCallbacks 1
dbpf Orca:cam1:PoolUsedMem.SCAN 0
dbpf Orca:image1:EnableCallbacks 1
dbpf Orca:Kfk1:EnableCallbacks 1
dbpf Orca:cam1:AcquireTime .001
dbpf Orca:cam1:AcquirePeriod .02
dbpf Orca:cam1:TriggerSource-S 1 # external
dbpf Orca:cam1:NumImages 10
dbpf Orca:cam1:ImageMode 1
#dbpf Orca:cam1:TriggerPolarity-S # 2-positive, 1-negative
epicsThreadSleep(1.0)
dbl > pv.list
#
# END of st.cmd
#

View File

@@ -1,3 +1,3 @@
# This should be the included snippet to configure and run the deployed IOC. It should be loaded with
#
# iocshLoad("$(ADHama_DIR)/ADHama.iocsh")
# iocshLoad("$(ADOrca_DIR)/ADOrca.iocsh")

View File

@@ -0,0 +1 @@
libdcamapi.so.4.0.6269

View File

@@ -0,0 +1 @@
libdcamapi.so.4.0.6269