Compare commits

...

21 Commits

Author SHA1 Message Date
84f2560f13 eiger server 2021-03-15 15:16:18 +01:00
bdeb030fea Better way of finding libzmq (#235)
* new strategy for finding zmq based on cppzmq
2021-03-15 15:03:45 +01:00
435146ca9c notes 2021-03-09 13:35:17 +01:00
39926497b2 bugfix for bottom when setting quad 2021-03-09 08:00:21 +01:00
14cd8c5d4a version 2021-03-01 21:21:40 +01:00
09bd91028c m3 server 2021-03-01 21:00:29 +01:00
209a228f74 m3 fw version 2021-03-01 20:57:43 +01:00
d500f62852 fix for m3 scan with single module 2021-03-01 20:51:32 +01:00
e5c33cf04f servers in 2021-02-26 19:46:32 +01:00
5612eabfb1 gotthard 2021-02-26 16:12:26 +01:00
6fc93beee1 gotthard2 2021-02-26 16:10:41 +01:00
638ef57082 eiger server 2021-02-26 16:06:34 +01:00
da8bbc97d4 m3 server 2021-02-26 15:19:38 +01:00
1ae8c5e464 version and jf server added 2021-02-26 15:11:58 +01:00
e8fe203940 New server for JF to go with the new FW (#232)
* Modified Jungfrau speed settings for HW1.0 - FW fix version 1.1.1, compilation date 210218

* Corrected bug. DBIT clk phase is implemented in both HW version 1.0 and 2.0. Previous version did not update the DBIT phase shift on the configuration of a speed.

The new server has been compiled

Co-authored-by: lopez_c <carlos.lopez-cuenca@psi.ch>
2021-02-25 10:26:39 +01:00
10b315c2bd Mythen3 improved synchronization (#231)
Disabling scans for multi module Mythen3, since there is no feedback of the detectors being ready
startDetector first starts the slaves then the master
acquire firs calls startDetector for the slaves then acquire on the master
getMaster to read back from hardware which one is master
2021-02-08 13:28:37 +01:00
f35de3bc2b updated pybind11 to 2.6.2 2021-02-02 14:38:16 +01:00
4caf4cced2 replacing dac values that are out of range after interpolation 2021-01-26 18:11:18 +01:00
1eb70f63ad replacing out of range trimbits with edge values 2021-01-26 17:04:09 +01:00
997e5dd96c fixed buffer overflow but caused by using global instead of local enum 2021-01-26 16:15:40 +01:00
7aeb394514 Pattern.h as a public header files (#229)
It is used in Detector.h.
2021-01-18 08:30:34 +01:00
54 changed files with 974 additions and 260 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.12)
project(slsDetectorPackage)
set(PROJECT_VERSION 5.0.0)
set(PROJECT_VERSION 5.1.0)
include(CheckIPOSupported)
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
@ -158,7 +158,26 @@ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
find_package(ZeroMQ 4 REQUIRED)
#From: https://github.com/zeromq/cppzmq/
if (NOT TARGET libzmq)
find_package(ZeroMQ 4 QUIET)
# libzmq autotools install: fallback to pkg-config
if(NOT ZeroMQ_FOUND)
message(STATUS "CMake libzmq package not found, trying again with pkg-config (normal install of zeromq)")
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/libzmq-pkg-config)
find_package(ZeroMQ 4 REQUIRED)
endif()
# TODO "REQUIRED" above should already cause a fatal failure if not found, but this doesn't seem to work
if(NOT ZeroMQ_FOUND)
message(FATAL_ERROR "ZeroMQ was not found, neither as a CMake package nor via pkg-config")
endif()
if (ZeroMQ_FOUND AND NOT TARGET libzmq)
message(FATAL_ERROR "ZeroMQ version not supported!")
endif()
endif()
if (SLS_USE_TESTS)
enable_testing()

View File

@ -32,6 +32,15 @@ This document describes the differences between 5.1.0 and 5.x.x releases.
------
1. Aded settings and threshold features for Mythen3.
2. Internal modification of acquire for Mythen3.
3. Added getMaster for Mythen3
4. Mythen3, API function to set pattern from memory
Mythen3 server
-----------------
1. Setting timing to auto, sets timing to trigger for slaves
3. Resolved Issues
@ -44,6 +53,7 @@ This document describes the differences between 5.1.0 and 5.x.x releases.
1. Current code only calls Implementation::setDetectorType from constructor,
but potential memory leak if called out of constructor context. Fixed.
Client
------
@ -51,6 +61,11 @@ This document describes the differences between 5.1.0 and 5.x.x releases.
2. cmk.sh refactored to have better option handling
Server
--------
1. Bottom port not mirrored correctly for Eiger quad
@ -58,7 +73,11 @@ This document describes the differences between 5.1.0 and 5.x.x releases.
4. Firmware Requirements
========================
No updates from 5.0.0
Mythen3: 0x210201
Jungfrau: 0x210218 (1.0 pcb)
0x200721 (2.0 pcb, not changed)
Other detectors no updates from 5.0.0

View File

@ -1,112 +0,0 @@
# This file is originally from https://github.com/zeromq/azmq and distributed
# under Boost Software Lincese 1.0
# Boost Software License - Version 1.0 - August 17th, 2003
# Permission is hereby granted, free of charge, to any person or organization
# obtaining a copy of the software and accompanying documentation covered by
# this license (the "Software") to use, reproduce, display, distribute,
# execute, and transmit the Software, and to prepare derivative works of the
# Software, and to permit third-parties to whom the Software is furnished to
# do so, all subject to the following:
# The copyright notices in the Software and this entire statement, including
# the above license grant, this restriction and the following disclaimer,
# must be included in all copies of the Software, in whole or in part, and
# all derivative works of the Software, unless such copies or derivative
# works are solely in the form of machine-executable object code generated by
# a source language processor.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
# SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
# FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
# --------------------------------------------------------------------------------
# Find ZeroMQ Headers/Libs
# Variables
# ZMQ_ROOT - set this to a location where ZeroMQ may be found
#
# ZeroMQ_FOUND - True of ZeroMQ found
# ZeroMQ_INCLUDE_DIRS - Location of ZeroMQ includes
# ZeroMQ_LIBRARIES - ZeroMQ libraries
include(FindPackageHandleStandardArgs)
if (NOT ZMQ_ROOT)
set(ZMQ_ROOT "$ENV{ZMQ_ROOT}")
endif()
if (NOT ZMQ_ROOT)
find_path(_ZeroMQ_ROOT NAMES include/zmq.h)
else()
set(_ZeroMQ_ROOT "${ZMQ_ROOT}")
endif()
find_path(ZeroMQ_INCLUDE_DIRS NAMES zmq.h HINTS ${_ZeroMQ_ROOT}/include)
if (ZeroMQ_INCLUDE_DIRS)
set(_ZeroMQ_H ${ZeroMQ_INCLUDE_DIRS}/zmq.h)
function(_zmqver_EXTRACT _ZeroMQ_VER_COMPONENT _ZeroMQ_VER_OUTPUT)
set(CMAKE_MATCH_1 "0")
set(_ZeroMQ_expr "^[ \\t]*#define[ \\t]+${_ZeroMQ_VER_COMPONENT}[ \\t]+([0-9]+)$")
file(STRINGS "${_ZeroMQ_H}" _ZeroMQ_ver REGEX "${_ZeroMQ_expr}")
string(REGEX MATCH "${_ZeroMQ_expr}" ZeroMQ_ver "${_ZeroMQ_ver}")
set(${_ZeroMQ_VER_OUTPUT} "${CMAKE_MATCH_1}" PARENT_SCOPE)
endfunction()
_zmqver_EXTRACT("ZMQ_VERSION_MAJOR" ZeroMQ_VERSION_MAJOR)
_zmqver_EXTRACT("ZMQ_VERSION_MINOR" ZeroMQ_VERSION_MINOR)
_zmqver_EXTRACT("ZMQ_VERSION_PATCH" ZeroMQ_VERSION_PATCH)
message(STATUS "ZeroMQ version: ${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}.${ZeroMQ_VERSION_PATCH}")
# We should provide version to find_package_handle_standard_args in the same format as it was requested,
# otherwise it can't check whether version matches exactly.
if (ZeroMQ_FIND_VERSION_COUNT GREATER 2)
set(ZeroMQ_VERSION "${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}.${ZeroMQ_VERSION_PATCH}")
else()
# User has requested ZeroMQ version without patch part => user is not interested in specific patch =>
# any patch should be an exact match.
set(ZeroMQ_VERSION "${ZeroMQ_VERSION_MAJOR}.${ZeroMQ_VERSION_MINOR}")
endif()
if (NOT ${CMAKE_CXX_PLATFORM_ID} STREQUAL "Windows")
find_library(ZeroMQ_LIBRARIES NAMES zmq HINTS ${_ZeroMQ_ROOT}/lib)
else()
find_library(
ZeroMQ_LIBRARY_RELEASE
NAMES
libzmq
"libzmq-${CMAKE_VS_PLATFORM_TOOLSET}-mt-${ZeroMQ_VERSION_MAJOR}_${ZeroMQ_VERSION_MINOR}_${ZeroMQ_VERSION_PATCH}"
HINTS
${_ZeroMQ_ROOT}/lib
)
find_library(
ZeroMQ_LIBRARY_DEBUG
NAMES
libzmq_d
"libzmq-${CMAKE_VS_PLATFORM_TOOLSET}-mt-gd-${ZeroMQ_VERSION_MAJOR}_${ZeroMQ_VERSION_MINOR}_${ZeroMQ_VERSION_PATCH}"
HINTS
${_ZeroMQ_ROOT}/lib)
# On Windows we have to use corresponding version (i.e. Release or Debug) of ZeroMQ because of `errno` CRT global variable
# See more at http://www.drdobbs.com/avoiding-the-visual-c-runtime-library/184416623
set(ZeroMQ_LIBRARIES optimized "${ZeroMQ_LIBRARY_RELEASE}" debug "${ZeroMQ_LIBRARY_DEBUG}")
endif()
endif()
find_package_handle_standard_args(ZeroMQ FOUND_VAR ZeroMQ_FOUND
REQUIRED_VARS ZeroMQ_INCLUDE_DIRS ZeroMQ_LIBRARIES
VERSION_VAR ZeroMQ_VERSION)
if (ZeroMQ_FOUND)
mark_as_advanced(ZeroMQ_INCLUDE_DIRS ZeroMQ_LIBRARIES ZeroMQ_VERSION
ZeroMQ_VERSION_MAJOR ZeroMQ_VERSION_MINOR ZeroMQ_VERSION_PATCH)
endif()

View File

@ -25,6 +25,12 @@ install(FILES
DESTINATION ${CMAKE_INSTALL_DIR}
)
install(FILES
"${CMAKE_SOURCE_DIR}/libzmq-pkg-config/FindZeroMQ.cmake"
COMPONENT devel
DESTINATION ${CMAKE_INSTALL_DIR}/libzmq-pkg-config
)
if (PROJECT_LIBRARIES OR PROJECT_STATIC_LIBRARIES)
install(
EXPORT "${TARGETS_EXPORT_NAME}"

View File

@ -12,8 +12,21 @@ include(CMakeFindDependencyMacro)
set(SLS_USE_HDF5 "@SLS_USE_HDF5@")
# Add optional dependencies here
find_package(ZeroMQ 4 QUIET)
# libzmq autotools install: fallback to pkg-config
if(NOT ZeroMQ_FOUND)
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/libzmq-pkg-config)
find_package(ZeroMQ 4 REQUIRED)
endif()
if(NOT ZeroMQ_FOUND)
message(FATAL_ERROR "ZeroMQ was NOT found!")
endif()
find_dependency(Threads)
# Add optional dependencies here
if (SLS_USE_HDF5)
find_dependency(HDF5)
endif ()

View File

@ -13,8 +13,9 @@ cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DSLS_USE_HDF5=OFF\
cmake --build . -- -j10
NCORES=$(getconf _NPROCESSORS_ONLN)
echo "Building using: ${NCORES} cores"
cmake --build . -- -j${NCORES}
cmake --build . --target install
CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2
CTEST_OUTPUT_ON_FAILURE=1 ctest -j 2

View File

@ -1,3 +1,3 @@
#Copy the GUI
mkdir $PREFIX/bin
cp build/bin/slsDetectorGui $PREFIX/bin/.
mkdir -p $PREFIX/bin
cp build/install/bin/slsDetectorGui $PREFIX/bin/.

View File

@ -1,6 +1,6 @@
mkdir $PREFIX/lib
mkdir $PREFIX/bin
mkdir -p $PREFIX/lib
mkdir -p $PREFIX/bin
mkdir -p $PREFIX/include/sls
# mkdir $PREFIX/include/slsDetectorPackage

View File

@ -59,6 +59,16 @@ outputs:
script: copy_lib.sh
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- libstdcxx-ng
- libgcc-ng
- zeromq
host:
- zeromq
run:
- libstdcxx-ng
- libgcc-ng
@ -78,6 +88,8 @@ outputs:
host:
- python
- {{ pin_subpackage('slsdetlib', exact=True) }}
run:
- libstdcxx-ng
@ -94,6 +106,13 @@ outputs:
- name: slsdetgui
script: copy_gui.sh
requirements:
build:
- {{ compiler('c') }}
- {{compiler('cxx')}}
- {{ pin_subpackage('slsdetlib', exact=True) }}
- qwt 6.*
run:
- {{ pin_subpackage('slsdetlib', exact=True) }}
- qwt 6.*

View File

@ -0,0 +1,27 @@
#From: https://github.com/zeromq/cppzmq/
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
find_package(PkgConfig)
pkg_check_modules(PC_LIBZMQ QUIET libzmq)
set(ZeroMQ_VERSION ${PC_LIBZMQ_VERSION})
find_library(ZeroMQ_LIBRARY NAMES libzmq.so libzmq.dylib libzmq.dll
PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS})
find_library(ZeroMQ_STATIC_LIBRARY NAMES libzmq-static.a libzmq.a libzmq.dll.a
PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS})
if(ZeroMQ_LIBRARY OR ZeroMQ_STATIC_LIBRARY)
set(ZeroMQ_FOUND ON)
endif()
if (TARGET libzmq)
# avoid errors defining targets twice
return()
endif()
add_library(libzmq SHARED IMPORTED)
set_property(TARGET libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS})
set_property(TARGET libzmq PROPERTY IMPORTED_LOCATION ${ZeroMQ_LIBRARY})
add_library(libzmq-static STATIC IMPORTED ${PC_LIBZMQ_INCLUDE_DIRS})
set_property(TARGET libzmq-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS})
set_property(TARGET libzmq-static PROPERTY IMPORTED_LOCATION ${ZeroMQ_STATIC_LIBRARY})

View File

@ -0,0 +1,80 @@
import subprocess
import os
import sys
from pathlib import Path
import shutil as sh
from argparse import ArgumentParser
class color:
HEADER = "\033[95m"
BLUE = "\033[94m"
CYAN = "\033[96m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
RED = "\033[91m"
ENDC = "\033[0m"
BOLD = "\033[1m"
UNDERLINE = "\033[4m"
MAGENTA = "\033[35m"
@staticmethod
def red(s):
return f"{color.RED}{s}{color.ENDC}"
@staticmethod
def green(s):
return f"{color.GREEN}{s}{color.ENDC}"
def add_to_path():
paths = [
"/opt/uClinux/bfin-uclinux/bin",
"/opt/nios2-gcc/bin",
"/opt/eldk-5.1/powerpc-4xx-softfloat/sysroots/i686-eldk-linux/usr/bin/ppc405-linux",
]
os.environ["PATH"] += os.pathsep + os.pathsep.join(paths)
def rc_to_string(rc):
if rc == 0:
return color.green("OK")
else:
return color.red("FAIL")
parser = ArgumentParser()
parser.add_argument('-t', '--tag', help = 'Tag added to server file name', default='developer')
parser.add_argument('-g', '--git', help='Add new servers to the git repo', action="store_true")
args = parser.parse_args()
servers = [
"eigerDetectorServer",
# "jungfrauDetectorServer",
# "mythen3DetectorServer",
# "gotthard2DetectorServer",
# "gotthardDetectorServer",
# "ctbDetectorServer",
# "moenchDetectorServer",
]
server_root = Path("../../slsDetectorServers/").resolve()
add_to_path()
for server in servers:
bin_name = f"{server}_{args.tag}"
path = server_root / server
print(f"{bin_name} - ", end="")
os.chdir(path)
try:
sh.rmtree(path/'bin')
except FileNotFoundError:
pass
p = subprocess.run(["make"], stdout=subprocess.DEVNULL)
print(rc_to_string(p.returncode))
if p.returncode == 0:
sh.move(f"bin/{server}", f"bin/{bin_name}")
if args.git:
print("Adding to git")
subprocess.run(['git', 'add', 'bin', '-f'])

View File

@ -2,11 +2,12 @@
Setup file for slsdet
Build upon the pybind11 example found here: https://github.com/pybind/python_example
"""
from setuptools import setup, Extension, find_packages
from setuptools.command.build_ext import build_ext
import sys
import setuptools
import os
import sys
sys.path.append('../libs/pybind11')
from setuptools import setup, find_packages
from pybind11.setup_helpers import Pybind11Extension, build_ext
__version__ = os.environ.get('GIT_DESCRIBE_TAG', 'developer')
@ -19,109 +20,29 @@ def get_conda_path():
return os.environ['CONDA_PREFIX']
# class get_pybind_include(object):
# """Helper class to determine the pybind11 include path
# The purpose of this class is to postpone importing pybind11
# until it is actually installed, so that the ``get_include()``
# method can be invoked. """
# def __init__(self, user=False):
# self.user = user
# def __str__(self):
# import pybind11
# return pybind11.get_include(self.user)
#TODO migrate to CMake build?
ext_modules = [
Extension(
Pybind11Extension(
'_slsdet',
['src/main.cpp',
'src/enums.cpp',
'src/detector.cpp',
'src/network.cpp'],
'src/network.cpp',
'src/pattern.cpp',
'src/scan.cpp',],
include_dirs=[
# Path to pybind11 headers
# get_pybind_include(),
# get_pybind_include(user=True),
os.path.join('../libs/pybind11/include'),
os.path.join(get_conda_path(), 'include'),
],
libraries=['SlsDetector', 'SlsReceiver', 'zmq'],
libraries=['SlsDetector', 'SlsSupport', 'SlsReceiver', 'zmq'],
library_dirs=[
os.path.join(get_conda_path(), 'lib'),
os.path.join(get_conda_path(), 'bin'),
],
language='c++'
),
]
# As of Python 3.6, CCompiler has a `has_flag` method.
# cf http://bugs.python.org/issue26689
def has_flag(compiler, flagname):
"""Return a boolean indicating whether a flag name is supported on
the specified compiler.
"""
import tempfile
with tempfile.NamedTemporaryFile('w', suffix='.cpp') as f:
f.write('int main (int argc, char **argv) { return 0; }')
try:
compiler.compile([f.name], extra_postargs=[flagname])
except setuptools.distutils.errors.CompileError:
return False
return True
def cpp_flag(compiler):
"""Return the -std=c++[11/14] compiler flag.
The c++14 is prefered over c++11 (when it is available).
"""
if has_flag(compiler, '-std=c++14'):
return '-std=c++14'
elif has_flag(compiler, '-std=c++11'):
return '-std=c++11'
else:
raise RuntimeError('Unsupported compiler -- at least C++11 support '
'is needed!')
class BuildExt(build_ext):
"""A custom build extension for adding compiler-specific options."""
c_opts = {
'msvc': ['/EHsc'],
'unix': [],
}
if sys.platform == 'darwin':
c_opts['unix'] += ['-stdlib=libc++', '-mmacosx-version-min=10.7']
def build_extensions(self):
ct = self.compiler.compiler_type
opts = self.c_opts.get(ct, [])
if ct == 'unix':
opts.append('-DVERSION_INFO="%s"' % self.distribution.get_version())
opts.append(cpp_flag(self.compiler))
if has_flag(self.compiler, '-fvisibility=hidden'):
opts.append('-fvisibility=hidden')
elif ct == 'msvc':
opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
for ext in self.extensions:
ext.extra_compile_args = opts
print('**************************************************')
print(ct)
print(opts)
print('**************************************************')
build_ext.build_extensions(self)
def get_shared_lib():
return [f for f in os.listdir('.') if '_slsdet' in f]
setup(
name='slsdet',
version=__version__,
@ -132,6 +53,6 @@ setup(
long_description='',
packages=find_packages(exclude=['contrib', 'docs', 'tests']),
ext_modules=ext_modules,
cmdclass={'build_ext': BuildExt},
cmdclass={"build_ext": build_ext},
zip_safe=False,
)

View File

@ -1132,6 +1132,10 @@ void init_det(py::module &m) {
(Result<std::array<ns, 3>>(Detector::*)(sls::Positions) const) &
Detector::getGateDelayForAllGates,
py::arg() = Positions{})
.def("getMaster",
(Result<bool>(Detector::*)(sls::Positions) const) &
Detector::getMaster,
py::arg() = Positions{})
.def("getNumberOfAnalogSamples",
(Result<int>(Detector::*)(sls::Positions) const) &
Detector::getNumberOfAnalogSamples,

View File

@ -91,7 +91,6 @@ target_include_directories(slsDetectorGui PUBLIC
target_link_libraries(slsDetectorGui PUBLIC
slsProjectOptions
slsProjectWarnings
slsDetectorStatic
${QT_QTCORE_LIBRARIES}
${QT_QTGUI_LIBRARIES}
@ -101,6 +100,9 @@ target_link_libraries(slsDetectorGui PUBLIC
Qt4::QtOpenGL
Qt4::QtSvg
expat
PRIVATE
slsProjectWarnings
)
set_target_properties(slsDetectorGui PROPERTIES
@ -111,7 +113,7 @@ if(SLS_LTO_AVAILABLE)
endif()
install(TARGETS slsDetectorGui
EXPORT "${TARGETS_EXPORT_NAME}"
# EXPORT "${TARGETS_EXPORT_NAME}" #do not export gui
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}

View File

@ -1395,7 +1395,7 @@ int Feb_Control_SetMaster(enum MASTERINDEX ind) {
int Feb_Control_SetQuad(int val) {
LOG(logINFO, ("Setting Quad to %d in Feb\n", val));
// only setting on the right feb if quad
return Feb_Control_SetTop(val == 0 ? TOP_HARDWARE : OW_TOP, 0, 1);
return Feb_Control_SetTop(val == 0 ? TOP_HARDWARE : OW_BOTTOM, 0, 1);
}
int Feb_Control_SetReadNLines(int value) {

View File

@ -0,0 +1,2 @@
top 1
master 1

View File

@ -0,0 +1,33 @@
#onchip dacs chip index value (max 0x3ff)
vchip_comp_fe -1 0x137
vchip_opa_1st -1 0x000
vchip_opa_fd -1 0x134
vchip_comp_adc -1 0x3FF
vchip_ref_comp_fe -1 0x180
vchip_cs -1 0x0D0
#dacs value (max 4096)
vref_h_adc 2116
vb_comp_fe 0
vb_comp_adc 0
vcom_cds 705
vref_rstore 150
vb_opa_1st 0
vref_comp_fe 0
vcom_adc1 705
vref_prech 869
vref_l_adc 700
vref_cds 700
vb_cs 2799
vb_opa_fd 0
vcom_adc2 704
#configure adc chip index adc index value(max 0x7F)
confadc -1 -1 0x22
#vetoreference gain index value(max 4095)
vetoref 1 0

View File

@ -0,0 +1,23 @@
#masterflags (no_master, is_master, is_slave)
masterflags no_master
#master default delay
masterdefaultdelay 70
#patternphase
patternphase 0
#adcphase
adcphase 0
#slave pattern phase
slavepatternphase 0
#slave adc phase
slaveadcphase 0
#rst to sw1 delay
rsttosw1delay 2
#start acquisition delay
startacqdelay 1

View File

@ -1396,11 +1396,8 @@ int setClockDivider(enum CLKINDEX ind, int val) {
setPhase(ADC_CLK, adcPhase, 0);
LOG(logINFO, ("\tSet ADC Phase Reg to %d\n", adcPhase));
// only implemented in the new boards now
if (!isHardwareVersion2()) {
setPhase(DBIT_CLK, dbitPhase, 0);
LOG(logINFO, ("\tSet DBIT Phase Reg to %d\n", dbitPhase));
}
setPhase(DBIT_CLK, dbitPhase, 0);
LOG(logINFO, ("\tSet DBIT Phase Reg to %d\n", dbitPhase));
return OK;
}

View File

@ -3,7 +3,7 @@
#include "sls/sls_detector_defs.h"
#define MIN_REQRD_VRSN_T_RD_API 0x171220
#define REQRD_FRMWRE_VRSN_BOARD2 0x200724 // 1.0 pcb
#define REQRD_FRMWRE_VRSN_BOARD2 0x210218 // 1.0 pcb
#define REQRD_FRMWRE_VRSN 0x200721 // 2.0 pcb
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
@ -113,8 +113,8 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
#define ADC_OFST_FULL_SPEED_VAL (0x10) // 2.0 pcb
#define ADC_OFST_HALF_SPEED_VAL (0x08) // 2.0 pcb
#define ADC_OFST_QUARTER_SPEED_VAL (0x04) // 2.0 pcb
#define ADC_OFST_HALF_SPEED_BOARD2_VAL (0x13) // 1.0 pcb (2 resistor network)
#define ADC_OFST_QUARTER_SPEED_BOARD2_VAL (0x0b) // 1.0 pcb (2 resistor network)
#define ADC_OFST_HALF_SPEED_BOARD2_VAL (0x10) // 1.0 pcb (2 resistor network)
#define ADC_OFST_QUARTER_SPEED_BOARD2_VAL (0x08) // 1.0 pcb (2 resistor network)
#define ADC_PORT_INVERT_VAL (0x5A5A5A5A)
#define ADC_PORT_INVERT_BOARD2_VAL (0x453b2a9c)
@ -140,8 +140,8 @@ enum CLKINDEX { RUN_CLK, ADC_CLK, DBIT_CLK, NUM_CLOCKS };
#define ADC_PHASE_FULL_SPEED (150) // 2.0 pcb
#define ADC_PHASE_HALF_SPEED (200) // 2.0 pcb
#define ADC_PHASE_QUARTER_SPEED (200) // 2.0 pcb
#define ADC_PHASE_HALF_SPEED_BOARD2 (75) // 1.0 pcb (2 resistor network)
#define ADC_PHASE_QUARTER_SPEED_BOARD2 (75) // 1.0 pcb (2 resistor network)
#define ADC_PHASE_HALF_SPEED_BOARD2 (110) // 1.0 pcb (2 resistor network)
#define ADC_PHASE_QUARTER_SPEED_BOARD2 (220) // 1.0 pcb (2 resistor network)
#define DBIT_PHASE_FULL_SPEED (85) // 2.0 pcb
#define DBIT_PHASE_HALF_SPEED (150) // 2.0 pcb

View File

@ -0,0 +1,288 @@
patword 0x0000 0x0008599f0418503a
patword 0x0001 0x0008599f0418503a
patword 0x0002 0x000859960418503a
patword 0x0003 0x000859960418503a
patword 0x0004 0x000859960418503a
patword 0x0005 0x000859960418503a
patword 0x0006 0x000859960418503a
patword 0x0007 0x000859960418503a
patword 0x0008 0x000859960418503a
patword 0x0009 0x000859960418503a
patword 0x000a 0x000859960418503a
patword 0x000b 0x000859960418503a
patword 0x000c 0x000859960418503a
patword 0x000d 0x000859960418503a
patword 0x000e 0x000859960418503a
patword 0x000f 0x000859960418503a
patword 0x0010 0x000859960418503a
patword 0x0011 0x000859960418503a
patword 0x0012 0x000859960418503a
patword 0x0013 0x000859960418503a
patword 0x0014 0x000859960418503a
patword 0x0015 0x000859960418503a
patword 0x0016 0x000819960418501a
patword 0x0017 0x000819960418501a
patword 0x0018 0x000819960418501a
patword 0x0019 0x000819960418501a
patword 0x001a 0x000819960418501a
patword 0x001b 0x000819960418501a
patword 0x001c 0x000819960418501a
patword 0x001d 0x000819960418501a
patword 0x001e 0x000819960418501a
patword 0x001f 0x000819960418501a
patword 0x0020 0x000819960418501a
patword 0x0021 0x000819960418501a
patword 0x0022 0x000819960418501a
patword 0x0023 0x000819960418501a
patword 0x0024 0x000819960418501a
patword 0x0025 0x000819960418501a
patword 0x0026 0x000819960418501a
patword 0x0027 0x000819960418501a
patword 0x0028 0x000819960418501a
patword 0x0029 0x000819960418501a
patword 0x002a 0x000819960418501a
patword 0x002b 0x000819960418501a
patword 0x002c 0x000819960418501a
patword 0x002d 0x000819960418501a
patword 0x002e 0x000819960418501a
patword 0x002f 0x000819960418501a
patword 0x0030 0x000819960008501a
patword 0x0031 0x000819960008501a
patword 0x0032 0x000819960008501a
patword 0x0033 0x000819960008501a
patword 0x0034 0x000819960008501a
patword 0x0035 0x000819960008501a
patword 0x0036 0x000819960008501a
patword 0x0037 0x000819960008501a
patword 0x0038 0x000819960008501a
patword 0x0039 0x000819960008501a
patword 0x003a 0x000819960008501a
patword 0x003b 0x000819960008501a
patword 0x003c 0x000819960008501a
patword 0x003d 0x000819960008501a
patword 0x003e 0x000819960008501a
patword 0x003f 0x000819960008501a
patword 0x0040 0x000819960008501a
patword 0x0041 0x000819960008501a
patword 0x0042 0x000819960008501a
patword 0x0043 0x000819960008501a
patword 0x0044 0x0008199f0008501a
patword 0x0045 0x0008199f0008501a
patword 0x0046 0x0008199f0008501a
patword 0x0047 0x0008199f0008501a
patword 0x0048 0x0008199f0008501a
patword 0x0049 0x0008199f0008501a
patword 0x004a 0x0008199f0008501a
patword 0x004b 0x0008199f0008501a
patword 0x004c 0x0008199f0008501a
patword 0x004d 0x0008199f0008501a
patword 0x004e 0x0008199f0008501a
patword 0x004f 0x0008199f0008501a
patword 0x0050 0x0008199f0008501a
patword 0x0051 0x0008199f0008501a
patword 0x0052 0x0008199f0008501a
patword 0x0053 0x0008199f0008501a
patword 0x0054 0x0008199f0008501a
patword 0x0055 0x0008199f0008501a
patword 0x0056 0x0008199f0008501a
patword 0x0057 0x0008199f0008501a
patword 0x0058 0x0008599f0008503a
patword 0x0059 0x0008599f0008503a
patword 0x005a 0x000c599f000850ba
patword 0x005b 0x000c599f000850ba
patword 0x005c 0x000c599f000850ba
patword 0x005d 0x000c599f000850ba
patword 0x005e 0x000c599f000850ba
patword 0x005f 0x000c599f000850ba
patword 0x0060 0x000c599f000850ba
patword 0x0061 0x000c599f000850ba
patword 0x0062 0x000c599f000850ba
patword 0x0063 0x000c599f000850ba
patword 0x0064 0x000c599f000850ba
patword 0x0065 0x000c599f000850ba
patword 0x0066 0x000c599f000850ba
patword 0x0067 0x000c599f000850ba
patword 0x0068 0x000c599f000850ba
patword 0x0069 0x000c599f000850ba
patword 0x006a 0x000c599f000850ba
patword 0x006b 0x000c599f000850ba
patword 0x006c 0x000c599f000850ba
patword 0x006d 0x000c599f000850ba
patword 0x006e 0x000c799f010858ba
patword 0x006f 0x000c799f010858ba
patword 0x0070 0x000c599f000850ba
patword 0x0071 0x000c599f000850ba
patword 0x0072 0x000c599f000850ba
patword 0x0073 0x000c599f000850ba
patword 0x0074 0x000c599f000850ba
patword 0x0075 0x000c599f000850ba
patword 0x0076 0x000c599f000850ba
patword 0x0077 0x000c599f000850ba
patword 0x0078 0x000c599f000850ba
patword 0x0079 0x000c599f000850ba
patword 0x007a 0x000c599f000850ba
patword 0x007b 0x000c599f000850ba
patword 0x007c 0x000c599f000850ba
patword 0x007d 0x000c599f000850ba
patword 0x007e 0x000c599f000850ba
patword 0x007f 0x000c599f000850ba
patword 0x0080 0x000c599f000850ba
patword 0x0081 0x000c599f000850ba
patword 0x0082 0x000c599f000850ba
patword 0x0083 0x000c599f000850ba
patword 0x0084 0x000c599f000850ba
patword 0x0085 0x000c599f000850ba
patword 0x0086 0x000c599f400850ba
patword 0x0087 0x000c599f400850ba
patword 0x0088 0x000c599f600850ba
patword 0x0089 0x000c599f400850ba
patword 0x008a 0x000c599f400850ba
patword 0x008b 0x000c599f400850ba
patword 0x008c 0x840c599f682e50ba
patword 0x008d 0x840c599f482850ba
patword 0x008e 0x840c599f000e50ba
patword 0x008f 0x840c599f000850ba
patword 0x0090 0x840c599f000e50ba
patword 0x0091 0x840c599f000850ba
patword 0x0092 0x840c599f000e50ba
patword 0x0093 0x840c599f000850ba
patword 0x0094 0x840c599f000e50ba
patword 0x0095 0x840c599f000850ba
patword 0x0096 0x840c599f000e50ba
patword 0x0097 0x840c599f000850ba
patword 0x0098 0x840c599f000e50ba
patword 0x0099 0x840c599f000850ba
patword 0x009a 0x840c599f000e50ba
patword 0x009b 0x840c599f000850ba
patword 0x009c 0x840c599f000e50ba
patword 0x009d 0x840c599f000850ba
patword 0x009e 0x840c599f000e50ba
patword 0x009f 0x840c599f000850ba
patword 0x00a0 0x840c599f000e50ba
patword 0x00a1 0x840c599f000850ba
patword 0x00a2 0x840c599f000e50ba
patword 0x00a3 0x840c599f000850ba
patword 0x00a4 0x840c599f000e50ba
patword 0x00a5 0x840c599f000850ba
patword 0x00a6 0x840c599f200e50ba
patword 0x00a7 0x840c599f000850ba
patword 0x00a8 0x840c599f000e50ba
patword 0x00a9 0x840c599f000850ba
patword 0x00aa 0x840c599f000e50ba
patword 0x00ab 0x840c599f000850ba
patword 0x00ac 0x840c599f000e50ba
patword 0x00ad 0x840c599f000850ba
patword 0x00ae 0x840c599f000e50ba
patword 0x00af 0x840c599f000850ba
patword 0x00b0 0x840c599f000e50ba
patword 0x00b1 0x840c599f000850ba
patword 0x00b2 0x840c599f000e50ba
patword 0x00b3 0x840c599f000850ba
patword 0x00b4 0x840c599f000e50ba
patword 0x00b5 0x840c599f000850ba
patword 0x00b6 0x840c599f000e50ba
patword 0x00b7 0x840c599f000850ba
patword 0x00b8 0x840c599f000e50ba
patword 0x00b9 0x840c599f000850ba
patword 0x00ba 0x840c599f000e50ba
patword 0x00bb 0x840c599f000850ba
patword 0x00bc 0x840c599f000e50ba
patword 0x00bd 0x840c599f000850ba
patword 0x00be 0x840c599f282e50ba
patword 0x00bf 0x840c599f082850ba
patword 0x00c0 0x840c599f000e50ba
patword 0x00c1 0x840c599f000850ba
patword 0x00c2 0x840c599f000e50ba
patword 0x00c3 0x840c599f000850ba
patword 0x00c4 0x840c599f000e50ba
patword 0x00c5 0x840c599f000850ba
patword 0x00c6 0x840c599f000e50ba
patword 0x00c7 0x840c599f000850ba
patword 0x00c8 0x840c599f000e50ba
patword 0x00c9 0x840c599f000850ba
patword 0x00ca 0x840c599f000e50ba
patword 0x00cb 0x840c599f000850ba
patword 0x00cc 0x840c599f000e50ba
patword 0x00cd 0x840c599f000850ba
patword 0x00ce 0x840c599f000e50ba
patword 0x00cf 0x840c599f000850ba
patword 0x00d0 0x840c599f000e50ba
patword 0x00d1 0x840c599f000850ba
patword 0x00d2 0x840c599f000e50ba
patword 0x00d3 0x840c599f000850ba
patword 0x00d4 0x840c599f000e50ba
patword 0x00d5 0x840c599f000850ba
patword 0x00d6 0x840c599f000e50ba
patword 0x00d7 0x840c599f000850ba
patword 0x00d8 0x840c599f200e50ba
patword 0x00d9 0x840c599f000850ba
patword 0x00da 0x840c599f000e50ba
patword 0x00db 0x840c599f000850ba
patword 0x00dc 0x840c599f000e50ba
patword 0x00dd 0x840c599f000850ba
patword 0x00de 0x840c599f000e50ba
patword 0x00df 0x840c599f000850ba
patword 0x00e0 0x840c599f000e50ba
patword 0x00e1 0x840c599f000850ba
patword 0x00e2 0x840c599f000e50ba
patword 0x00e3 0x840c599f000850ba
patword 0x00e4 0x840c599f000e50ba
patword 0x00e5 0x840c599f000850ba
patword 0x00e6 0x840c599f000e50ba
patword 0x00e7 0x840c599f000850ba
patword 0x00e8 0x840c599f000e50ba
patword 0x00e9 0x840c599f000850ba
patword 0x00ea 0x840c599f000e50ba
patword 0x00eb 0x840c599f000850ba
patword 0x00ec 0x840c599f000e50ba
patword 0x00ed 0x840c599f000850ba
patword 0x00ee 0x840c599f000e50ba
patword 0x00ef 0x840c599f000850ba
patword 0x00f0 0x040c599f000850ba
patword 0x00f1 0x040c599f000850ba
patword 0x00f2 0x000c599f000850ba
patword 0x00f3 0x000c599f000850ba
patword 0x00f4 0x0008599f200e503a
patword 0x00f5 0x0008599f0008503a
patword 0x00f6 0x0008599f200e503a
patword 0x00f7 0x0008599f0008503a
patword 0x00f8 0x0008599f0008503a
patword 0x00f9 0x0008599f0008503a
patword 0x00fa 0x0008599f0008503a
patword 0x00fb 0x0008599f0008503a
patword 0x00fc 0x0008599f0008503a
patword 0x00fd 0x0008599f0008503a
patword 0x00fe 0x0008599f0008503a
patword 0x00ff 0x0008599f0008503a
patword 0x0100 0x0008599f0008503a
patword 0x0101 0x0008599f0008503a
patword 0x0102 0x0008599f0008503a
patword 0x0103 0x0008599f0008503a
patword 0x0104 0x0008599f0008503a
patword 0x0105 0x0008599f0008503a
patword 0x0106 0x0008599f0008503a
patword 0x0107 0x0008599f0008503a
patword 0x0108 0x0008599f0008503a
patword 0x0109 0x0008599f0008503a
patword 0x010a 0x0008599f0008503a
patword 0x010b 0x0008599f0008503a
patword 0x010c 0x0008599f0008503a
patword 0x010d 0x0008599f0008503a
patword 0x010e 0x0008599f0008503a
patword 0x010f 0x0008599f0008503a
patword 0x0110 0x0008599f0008503a
patword 0x0111 0x0008599f0008503a
patioctrl 0x8f0effff6dbffdbf
patlimits 0x0000 0x0110
patloop0 0x00be 0x00ef
patnloop0 199
patloop1 0x0400 0x0400
patnloop1 0
patloop2 0x0400 0x0400
patnloop2 0
patwait0 0x002e
patwaittime0 800
patwait1 0x0400
patwaittime1 0
patwait2 0x0400
patwaittime2 0

View File

@ -0,0 +1,256 @@
patword 0x0000 0x0000000000000000
patword 0x0001 0x0000000000000000
patword 0x0002 0x0000000000000000
patword 0x0003 0x0000000000000000
patword 0x0004 0x0000000000000000
patword 0x0005 0x0000000000000000
patword 0x0006 0x0000000000c00000
patword 0x0007 0x0000000000c00000
patword 0x0008 0x0000000000c00000
patword 0x0009 0x0000000000c00000
patword 0x000a 0x0000000000c00000
patword 0x000b 0x0000000000c00000
patword 0x000c 0x0000000000000000
patword 0x000d 0x0000000000000000
patword 0x000e 0x0000000000000000
patword 0x000f 0x0000000000000000
patword 0x0010 0x0000000000000000
patword 0x0011 0x0000000000000000
patword 0x0012 0x0000000000200000
patword 0x0013 0x0000000000200000
patword 0x0014 0x0000000000e00000
patword 0x0015 0x0000000000e00000
patword 0x0016 0x0000000000e00000
patword 0x0017 0x0000000000e00000
patword 0x0018 0x0000000000e00000
patword 0x0019 0x0000000000e00000
patword 0x001a 0x0000000000e00000
patword 0x001b 0x0000000000e00000
patword 0x001c 0x0000000000200000
patword 0x001d 0x0000000000200000
patword 0x001e 0x0000000000200000
patword 0x001f 0x0000000000200000
patword 0x0020 0x0000000000200000
patword 0x0021 0x0000000000200000
patword 0x0022 0x0000000000200000
patword 0x0023 0x0000000000200000
patword 0x0024 0x0000000000200000
patword 0x0025 0x0000000000200000
patword 0x0026 0x0000000000200000
patword 0x0027 0x0000000000200000
patword 0x0028 0x0000000000200000
patword 0x0029 0x0000000001200000
patword 0x002a 0x0000000000200000
patword 0x002b 0x0000000000200000
patword 0x002c 0x0000000000200000
patword 0x002d 0x0000000000200000
patword 0x002e 0x0000000000200000
patword 0x002f 0x0000000000200000
patword 0x0030 0x0000000000200000
patword 0x0031 0x0000000000200000
patword 0x0032 0x0000000001200000
patword 0x0033 0x0000000000200000
patword 0x0034 0x0000000000200000
patword 0x0035 0x0000000000200000
patword 0x0036 0x0000000000200000
patword 0x0037 0x0000000000200000
patword 0x0038 0x0000000000200000
patword 0x0039 0x0000000000200000
patword 0x003a 0x0000000000200000
patword 0x003b 0x0000000001200000
patword 0x003c 0x0000000000200000
patword 0x003d 0x0000000000200000
patword 0x003e 0x0000000000200000
patword 0x003f 0x0000000000200000
patword 0x0040 0x0000000000200000
patword 0x0041 0x0000000000200000
patword 0x0042 0x0000000000200000
patword 0x0043 0x0000000000200000
patword 0x0044 0x0000000001200000
patword 0x0045 0x0000000000200000
patword 0x0046 0x0000000000200000
patword 0x0047 0x0000000000200000
patword 0x0048 0x0000000000200000
patword 0x0049 0x0000000000200000
patword 0x004a 0x0000000000200000
patword 0x004b 0x0000000000200000
patword 0x004c 0x0000000000200000
patword 0x004d 0x0000000001200000
patword 0x004e 0x0000000000200000
patword 0x004f 0x0000000000200000
patword 0x0050 0x0000000000200000
patword 0x0051 0x0000000000200000
patword 0x0052 0x0000000000200000
patword 0x0053 0x0000000000200000
patword 0x0054 0x0000000000200000
patword 0x0055 0x0000000000200000
patword 0x0056 0x0000000001200000
patword 0x0057 0x0000000000200000
patword 0x0058 0x0000000000200000
patword 0x0059 0x0000000000200000
patword 0x005a 0x0000000000280000
patword 0x005b 0x0000000000280000
patword 0x005c 0x0000000000280000
patword 0x005d 0x0000000000280000
patword 0x005e 0x0000000000280000
patword 0x005f 0x0000000001280000
patword 0x0060 0x0000000000280000
patword 0x0061 0x0000000000200000
patword 0x0062 0x0000000000200000
patword 0x0063 0x0000000000200000
patword 0x0064 0x0000000000200000
patword 0x0065 0x0000000000200000
patword 0x0066 0x0000000000200000
patword 0x0067 0x0000000000200000
patword 0x0068 0x0000000001200000
patword 0x0069 0x0000000000200000
patword 0x006a 0x0000000000200000
patword 0x006b 0x0000000000200000
patword 0x006c 0x0000000000200000
patword 0x006d 0x0000000000200000
patword 0x006e 0x0000000000200000
patword 0x006f 0x0000000000200000
patword 0x0070 0x0000000000200000
patword 0x0071 0x0000000001200000
patword 0x0072 0x0000000000200000
patword 0x0073 0x0000000000200000
patword 0x0074 0x0000000000200000
patword 0x0075 0x0000000000200000
patword 0x0076 0x0000000000200000
patword 0x0077 0x0000000000200000
patword 0x0078 0x0000000000200000
patword 0x0079 0x0000000000200000
patword 0x007a 0x0000000001200000
patword 0x007b 0x0000000000200000
patword 0x007c 0x0000000000200000
patword 0x007d 0x0000000000200000
patword 0x007e 0x0000000000280000
patword 0x007f 0x0000000000280000
patword 0x0080 0x0000000000280000
patword 0x0081 0x0000000000280000
patword 0x0082 0x0000000000280000
patword 0x0083 0x0000000001280000
patword 0x0084 0x0000000000280000
patword 0x0085 0x0000000000200000
patword 0x0086 0x0000000000200000
patword 0x0087 0x0000000000200000
patword 0x0088 0x0000000000200000
patword 0x0089 0x0000000000200000
patword 0x008a 0x0000000000200000
patword 0x008b 0x0000000000200000
patword 0x008c 0x0000000001200000
patword 0x008d 0x0000000000200000
patword 0x008e 0x0000000000200000
patword 0x008f 0x0000000000200000
patword 0x0090 0x0000000000200000
patword 0x0091 0x0000000000200000
patword 0x0092 0x0000000000200000
patword 0x0093 0x0000000000200000
patword 0x0094 0x0000000000200000
patword 0x0095 0x0000000001200000
patword 0x0096 0x0000000000200000
patword 0x0097 0x0000000000200000
patword 0x0098 0x0000000000200000
patword 0x0099 0x0000000000200000
patword 0x009a 0x0000000000200000
patword 0x009b 0x0000000000200000
patword 0x009c 0x0000000000200000
patword 0x009d 0x0000000000200000
patword 0x009e 0x0000000001200000
patword 0x009f 0x0000000000200000
patword 0x00a0 0x0000000000200000
patword 0x00a1 0x0000000000200000
patword 0x00a2 0x0000000000200000
patword 0x00a3 0x0000000000200000
patword 0x00a4 0x0000000000200000
patword 0x00a5 0x0000000000200000
patword 0x00a6 0x0000000000200000
patword 0x00a7 0x0000000001200000
patword 0x00a8 0x0000000000200000
patword 0x00a9 0x0000000000200000
patword 0x00aa 0x0000000000200000
patword 0x00ab 0x0000000000200000
patword 0x00ac 0x0000000000200000
patword 0x00ad 0x0000000000200000
patword 0x00ae 0x0000000000200000
patword 0x00af 0x0000000000200000
patword 0x00b0 0x0000000001200000
patword 0x00b1 0x0000000000200000
patword 0x00b2 0x0000000000200000
patword 0x00b3 0x0000000000200000
patword 0x00b4 0x0000000000200000
patword 0x00b5 0x0000000000200000
patword 0x00b6 0x0000000000200000
patword 0x00b7 0x0000000000200000
patword 0x00b8 0x0000000000200000
patword 0x00b9 0x0000000001200000
patword 0x00ba 0x0000000000200000
patword 0x00bb 0x0000000000200000
patword 0x00bc 0x0000000000200000
patword 0x00bd 0x0000000000200000
patword 0x00be 0x0000000000200000
patword 0x00bf 0x0000000000200000
patword 0x00c0 0x0000000000200000
patword 0x00c1 0x0000000000200000
patword 0x00c2 0x0000000001200000
patword 0x00c3 0x0000000000200000
patword 0x00c4 0x0000000000200000
patword 0x00c5 0x0000000000200000
patword 0x00c6 0x0000000000300000
patword 0x00c7 0x0000000000300000
patword 0x00c8 0x0000000000300000
patword 0x00c9 0x0000000000300000
patword 0x00ca 0x0000000000300000
patword 0x00cb 0x0000000000200000
patword 0x00cc 0x0000000000200000
patword 0x00cd 0x0000000000200000
patword 0x00ce 0x0000000000200000
patword 0x00cf 0x0000000000200000
patword 0x00d0 0x0000000000200000
patword 0x00d1 0x0000000000200000
patword 0x00d2 0x0000000000000000
patword 0x00d3 0x0000000000000000
patword 0x00d4 0x0000000000000000
patword 0x00d5 0x0000000000000000
patword 0x00d6 0x0000000000000000
patword 0x00d7 0x0000000000000000
patword 0x00d8 0x0000000000000000
patword 0x00d9 0x0000000000000000
patword 0x00da 0x0000000000c00000
patword 0x00db 0x0000000000c00000
patword 0x00dc 0x0000000000c00000
patword 0x00dd 0x0000000000c00000
patword 0x00de 0x0000000000c00000
patword 0x00df 0x0000000000c00000
patword 0x00e0 0x0000000000c00000
patword 0x00e1 0x0000000000c00000
patword 0x00e2 0x0000000000c00000
patword 0x00e3 0x0000000000c00000
patword 0x00e4 0x0000000000000000
patword 0x00e5 0x0000000000000000
patword 0x00e6 0x0000000000000000
patword 0x00e7 0x0000000000000000
patword 0x00e8 0x0000000000000000
patword 0x00e9 0x0000000000000000
patword 0x00ea 0x0000000000000000
patword 0x00eb 0x0000000000000000
patword 0x00ec 0x0000000000000000
patword 0x00ed 0x0000000000000000
patword 0x00ee 0x0000000000000000
patword 0x00ef 0x0000000000000000
patword 0x00f0 0x0000000000000000
patword 0x00f1 0x0000000000000000
patword 0x00f2 0x0000000000000000
patlimits 0x0000 0x00f2
patloop0 0x0400 0x0400
patnloop0 0
patloop1 0x0400 0x0400
patnloop1 0
patloop2 0x0400 0x0400
patnloop2 0
patwait0 0x0400
patwaittime0 0
patwait1 0x0400
patwaittime1 0
patwait2 0x0400
patwaittime2 0

View File

@ -1522,8 +1522,16 @@ int setHighVoltage(int val) {
return highvoltage;
}
int isMaster(){
return !(bus_r(0x18) >> 31);
}
/* parameters - timing */
void setTiming(enum timingMode arg) {
if (!isMaster() && arg == AUTO_TIMING)
arg = TRIGGER_EXPOSURE;
uint32_t addr = CONFIG_REG;
switch (arg) {
case AUTO_TIMING:

View File

@ -1,7 +1,7 @@
#pragma once
#include "sls/sls_detector_defs.h"
#define REQRD_FRMWRE_VRSN (0x200925)
#define REQRD_FRMWRE_VRSN (0x210201)
#define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020"
#define ID_FILE "detid_mythen3.txt"

View File

@ -352,6 +352,7 @@ void setTiming(enum timingMode arg);
enum timingMode getTiming();
#ifdef MYTHEN3D
void setInitialExtSignals();
int isMaster();
#endif
#if defined(GOTTHARDD) || defined(MYTHEN3D)
void setExtSignal(int signalIndex, enum externalSignalFlag mode);

View File

@ -245,4 +245,5 @@ int set_default_dacs(int);
int is_virtual(int);
int get_pattern(int);
int load_default_pattern(int);
int get_all_threshold_energy(int);
int get_all_threshold_energy(int);
int get_master(int);

View File

@ -368,6 +368,7 @@ void function_table() {
flist[F_GET_PATTERN] = &get_pattern;
flist[F_LOAD_DEFAULT_PATTERN] = &load_default_pattern;
flist[F_GET_ALL_THRESHOLD_ENERGY] = &get_all_threshold_energy;
flist[F_GET_MASTER] = &get_master;
// check
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
@ -638,7 +639,9 @@ int set_timing_mode(int file_des) {
}
// get
retval = getTiming();
#ifndef MYTHEN3D
validate((int)arg, (int)retval, "set timing mode", DEC);
#endif
LOG(logDEBUG1, ("Timing Mode: %d\n", retval));
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
@ -8365,3 +8368,18 @@ int get_all_threshold_energy(int file_des) {
#endif
return Server_SendResult(file_des, INT32, retvals, sizeof(retvals));
}
int get_master(int file_des){
ret = OK;
memset(mess, 0, sizeof(mess));
int retval = -1;
LOG(logDEBUG1, ("Getting master\n"));
#ifndef MYTHEN3D
functionNotImplemented();
#else
retval = isMaster();
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}

View File

@ -31,6 +31,7 @@ set(PUBLICHEADERS
include/sls/detectorData.h
include/sls/Detector.h
include/sls/Result.h
include/sls/Pattern.h
)
#Shared library

View File

@ -1305,6 +1305,9 @@ class Detector {
/** [Mythen3] gate delay for all gates in auto or trigger timing mode
* (internal gating). Gate index: 0-2, -1 for all */
Result<std::array<ns, 3>> getGateDelayForAllGates(Positions pos = {}) const;
Result<bool> getMaster(Positions pos = {}) const;
///@{
/** @name CTB / Moench Specific */

View File

@ -54,7 +54,7 @@ bool CmdProxy::ReplaceIfDepreciated(std::string &command) {
if (d_it != depreciated_functions.end()) {
LOG(logWARNING)
<< command
<< " is depreciated and will be removed. Please migrate to: "
<< " is deprecated and will be removed. Please migrate to: "
<< d_it->second;
// insert old command into arguments (for dacs)
if (d_it->second == "dac") {

View File

@ -674,7 +674,23 @@ void Detector::startReceiver() { pimpl->Parallel(&Module::startReceiver, {}); }
void Detector::stopReceiver() { pimpl->Parallel(&Module::stopReceiver, {}); }
void Detector::startDetector() {
pimpl->Parallel(&Module::startAcquisition, {});
auto detector_type = getDetectorType().squash();
if (detector_type == defs::MYTHEN3 && size() > 1){
auto is_master = getMaster();
std::vector<int> master;
std::vector<int> slaves;
for(int i=0; i<size(); ++i){
if (is_master[i])
master.push_back(i);
else
slaves.push_back(i);
}
pimpl->Parallel(&Module::startAcquisition, slaves);
pimpl->Parallel(&Module::startAcquisition, master);
}else{
pimpl->Parallel(&Module::startAcquisition, {});
}
}
void Detector::startDetectorReadout() {
@ -717,6 +733,9 @@ Result<defs::scanParameters> Detector::getScan(Positions pos) const {
}
void Detector::setScan(const defs::scanParameters t) {
if(getDetectorType().squash() == defs::MYTHEN3 && size()>1 && t.enable != 0){
throw DetectorError("Scan is only allowed for single module Mythen 3 because of synchronization");
}
pimpl->Parallel(&Module::setScan, {}, t);
}
@ -1592,6 +1611,11 @@ Detector::getGateDelayForAllGates(Positions pos) const {
return pimpl->Parallel(&Module::getGateDelayForAllGates, pos);
}
Result<bool> Detector::getMaster(Positions pos) const{
return pimpl->Parallel(&Module::isMaster, pos);
}
// CTB/ Moench Specific
Result<int> Detector::getNumberOfAnalogSamples(Positions pos) const {

View File

@ -1056,11 +1056,15 @@ void DetectorImpl::registerDataCallback(void (*userCallback)(detectorData *,
}
int DetectorImpl::acquire() {
// ensure acquire isnt started multiple times by same client
if (!isAcquireReady()) {
return FAIL;
}
// We need this to handle Mythen3 synchronization
auto detector_type = Parallel(&Module::getDetectorType, {}).squash();
try {
struct timespec begin, end;
clock_gettime(CLOCK_REALTIME, &begin);
@ -1088,7 +1092,25 @@ int DetectorImpl::acquire() {
// start and read all
try {
Parallel(&Module::startAndReadAll, {});
if(detector_type == defs::MYTHEN3 && detectors.size() > 1){
//Multi module mythen
std::vector<int> master;
std::vector<int> slaves;
auto is_master = Parallel(&Module::isMaster, {});
slaves.reserve(detectors.size()-1); //check this one!!
for (size_t i = 0; i<detectors.size(); ++i){
if(is_master[i])
master.push_back(i);
else
slaves.push_back(i);
}
Parallel(&Module::startAcquisition, slaves);
Parallel(&Module::startAndReadAll, master);
}else{
//Normal acquire
Parallel(&Module::startAndReadAll, {});
}
} catch (...) {
if (receiver)
Parallel(&Module::stopReceiver, {});

View File

@ -317,9 +317,9 @@ void Module::setAllThresholdEnergy(std::array<int, 3> e_eV,
myMod.dacs[M_VTRIM] = sum / counters.size();
// copy vth1, vth2 and vth3 from the correct threshold mods
myMod.dacs[VTH1] = myMods[0].dacs[VTH1];
myMod.dacs[VTH2] = myMods[1].dacs[VTH2];
myMod.dacs[VTH3] = myMods[2].dacs[VTH3];
myMod.dacs[M_VTH1] = myMods[0].dacs[M_VTH1];
myMod.dacs[M_VTH2] = myMods[1].dacs[M_VTH2];
myMod.dacs[M_VTH3] = myMods[2].dacs[M_VTH3];
// check if dacs are different
for (size_t j = 0; j < 16; ++j) {
@ -351,6 +351,38 @@ void Module::setAllThresholdEnergy(std::array<int, 3> e_eV,
myMod.reg = isettings;
std::copy(e_eV.begin(), e_eV.end(), myMod.eV);
LOG(logDEBUG) << "ev:" << ToString(myMod.eV);
//check for trimbits that are out of range
bool out_of_range = false;
for(int i = 0; i!=myMod.nchan; ++i){
if (myMod.chanregs[i]<0){
myMod.chanregs[i] = 0;
out_of_range = true;
}else if(myMod.chanregs[i]>63){
myMod.chanregs[i]=63;
out_of_range = true;
}
}
if (out_of_range){
LOG(logWARNING) << "Some trimbits were out of range after interpolation, these have been replaced with 0 or 63.";
}
//check dacs
out_of_range = false;
for (auto dac : {M_VTRIM,M_VTH1,M_VTH2, M_VTH3}){
if (myMod.dacs[dac] < 600){
myMod.dacs[dac] = 600;
out_of_range = true;
}else if(myMod.dacs[dac] > 2400){
myMod.dacs[dac] = 2400;
out_of_range = true;
}
}
if (out_of_range){
LOG(logWARNING) << "Some dacs were out of range after interpolation, these have been replaced with 600 or 2400.";
}
setModule(myMod, trimbits);
if (getSettings() != isettings) {
throw RuntimeError("setThresholdEnergyAndSettings: Could not set "
@ -1962,6 +1994,10 @@ std::array<time::ns, 3> Module::getGateDelayForAllGates() const {
return sendToDetector<std::array<time::ns, 3>>(F_GET_GATE_DELAY_ALL_GATES);
}
bool Module::isMaster() const{
return sendToDetector<int>(F_GET_MASTER);
}
// CTB / Moench Specific
int Module::getNumberOfAnalogSamples() const {
return sendToDetector<int>(F_GET_NUM_ANALOG_SAMPLES);

View File

@ -425,6 +425,7 @@ class Module : public virtual slsDetectorDefs {
int64_t getGateDelay(int gateIndex) const;
void setGateDelay(int gateIndex, int64_t value);
std::array<time::ns, 3> getGateDelayForAllGates() const;
bool isMaster() const;
/**************************************************
* *

View File

@ -10,7 +10,6 @@ set(SOURCES
src/ZmqSocket.cpp
src/UdpRxSocket.cpp
src/sls_detector_exceptions.cpp
# src/sls_detector_defs.cpp
)
# Header files to install as a part of the library
@ -57,14 +56,12 @@ target_include_directories(slsSupportObject
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE
${ZeroMQ_INCLUDE_DIRS}
)
target_link_libraries(slsSupportObject
PUBLIC
slsProjectOptions
${ZeroMQ_LIBRARIES}
libzmq
rapidjson
PRIVATE
slsProjectWarnings
@ -76,7 +73,6 @@ endif(SLS_USE_TESTS)
# Add shared library version of the support lib
add_library(slsSupportShared SHARED $<TARGET_OBJECTS:slsSupportObject>)
target_link_libraries(slsSupportShared PUBLIC slsSupportObject)
set_target_properties(slsSupportShared PROPERTIES
@ -108,3 +104,4 @@ install(TARGETS slsSupportShared slsSupportStatic slsSupportObject
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/sls
)

View File

@ -220,6 +220,7 @@ enum detFuncs {
F_GET_PATTERN,
F_LOAD_DEFAULT_PATTERN,
F_GET_ALL_THRESHOLD_ENERGY,
F_GET_MASTER,
NUM_DET_FUNCTIONS,
RECEIVER_ENUM_START = 256, /**< detector function should not exceed this
@ -546,6 +547,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
case F_GET_PATTERN: return "F_GET_PATTERN";
case F_LOAD_DEFAULT_PATTERN: return "F_LOAD_DEFAULT_PATTERN";
case F_GET_ALL_THRESHOLD_ENERGY: return "F_GET_ALL_THRESHOLD_ENERGY";
case F_GET_MASTER: return "F_GET_MASTER";
case NUM_DET_FUNCTIONS: return "NUM_DET_FUNCTIONS";
case RECEIVER_ENUM_START: return "RECEIVER_ENUM_START";

View File

@ -1,12 +1,12 @@
/** API versions */
#define GITBRANCH "developer"
#define APILIB 0x201119
#define APIRECEIVER 0x201119
#define APIGUI 0x201119
#define APICTB 0x201214
#define APIGOTTHARD 0x201214
#define APIGOTTHARD2 0x201214
#define APIJUNGFRAU 0x201214
#define APIMOENCH 0x201214
#define APIEIGER 0x201214
#define APIMYTHEN3 0x201214
#define GITBRANCH "5.1.0.rc2"
#define APICTB 0x210225
#define APIGOTTHARD 0x210225
#define APIGOTTHARD2 0x210225
#define APIJUNGFRAU 0x210225
#define APIMOENCH 0x210225
#define APIEIGER 0x210225
#define APIMYTHEN3 0x210225
#define APILIB 0x210225
#define APIRECEIVER 0x210225
#define APIGUI 0x210225

View File

@ -18,22 +18,24 @@ set_target_properties(testserver PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
add_executable(tests ${SLS_TEST_SOURCES})
target_link_libraries(tests
slsProjectOptions
slsProjectWarnings
slsSupportShared
pthread
rt
target_link_libraries(tests
PUBLIC
slsProjectOptions
slsSupportShared
pthread
rt
PRIVATE
slsProjectWarnings
)
if (SLS_USE_TEXTCLIENT)
target_link_libraries(tests
target_link_libraries(tests PUBLIC
slsDetectorShared
)
endif (SLS_USE_TEXTCLIENT)
if (SLS_USE_RECEIVER)
target_link_libraries(tests
target_link_libraries(tests PUBLIC
slsReceiverShared
)
endif (SLS_USE_RECEIVER)