Skip to content
Tags give the ability to mark specific points in history as being important
  • 03.14.00
    New MINOR release 03.14.00
    Changes since 03.13.01:
    NOTE: Breaking API change for backends:
    - feat!(exceptions): keep and report original message.
      Backends now need to override setExceptionImpl() instead of
      setException() and make use of setOpenedAndClearException()
      as well as checkActiveException().
    Other (non-breaking) changes:
    - fix: rethrow old exceptions by math plugin after recovery
    - feat: obtain minimum data type from DataDescriptor
    - feat: convenience functions for string accessors
    - fix(UnifiedBackendTest): multiple runtime error cases
    - feat(UnifiedBackendTest): improve reporting to help debugging
    - fix(tests): wrong boost test include (includede vs. dyn_link)
    - fix: remove outdated comment
  • 03.13.01
    New PATCH release 03.13.01
    Changes since 03.13.00:
    - hotfix: rethrow old exceptions by math plugin after recovery
  • 03.13.00
    New MINOR release 03.13.00
    Changes since 03.12.00:
    fix(xdma): event files opened in the wrong place
    - push type accessors can be requested before opening the device
    - no event file is opened if no push type accessors exist
  • 03.12.00
    New MINOR release 03.12.00
    Changes since 03.11.00:
    - fix: Drop explicit dependency to glib-2.0
    - chore: move testUnifiedTypeChangingDecorator from CSA
    - fix: solve asan test issues
    - fix: header include syntax
    - docs:  MappedStruct use is discouraged
    - style: code formatting
    - feat(MappedImage): add floating point formats
    - refactor: move MappedImage from ControlSystemAdapter here
    - refactor: move TypeChangingDecorator from ControlSystemAdapter here
    - fix: tsan issues (#367)
    - fix: code formatting (#365)
    - fix: access back() of empty string
    - refactor: Use std::make_exception_ptr() (#361)
    - fix: docu for interrupts in map files
  • 03.11.00
    New MINOR release 03.11.00
    Changes since 03.10.00:
    - feat: LMAP bitRange plugin
    - feat: writeIfDifferent accounts for DataValidity
    - feat: put DataValidity in iostream
    - fix: lmap push pars (#11910)
    - fix: compiler warning
  • 03.10.00
    New MINOR release 03.10.00
    Changes since 03.09.00:
    - feat(BREAKING): Changed interruptID to vector, and primay interrupt to uint32_t
    - feat: detect broken background process in testSharedDummyBackendUnified
    - docs: clarify documentation of math plugin
    - fix: lmap math plugin with push parameter shutdown (#11506)
    - fix: map file interrupts syntax
    - fix: remove async write accessor
    - fix: remove interruptController from startInterruptHandlingThread
    - fix: throw logic error already when unsupported map file is loaded
    - fix: compiler warnings about unused variables
    - fix: missing BOOST_TEST_DYN_LINK in some tests
    - chore: remove interruptController from SharedDummyBackend internal interface
    - chore: use exprtk by imported target
  • 03.09.00
    New MINOR release 03.09.00
    Changes since 03.08.00:
    * use lib install dir defined by GNUInstallDirs
        this should fix library search problems on Tumbleweed
    * remove testVirtualFunctionEmplateCompilerFlags
    * chore: modernize cmake (#329)
        imported targets
        fix find_package / add_dependency arg order
        handle rpath according to discussion
          i.e. rpath of non-system install location is added for implicit dependencies
        remove explicit definitions for downstream projects
        remove enable-new-dtags, it was used for selecting right rpath variant
        (runpath instead of older rpath) but rpath/runpath is now handled via cmake
        proper cmake Module path
          this is required e.g. for resolution of implicit dependencies
        remove fusion compiler flags
          no longer required since c++11
  • 03.08.00
    New MINOR release 03.08.00
    Changes since 03.07.01:
    !!! API breaking change in NumericAddress !!!
      - Change BAR to  BAR() in the calling code!
    - Fix warnigns from Doxygen for unsupported tags (#330)
      -- Just escape the strings as pre-formatted
    - cmake: small fixes (#326)
      -- fix problems which cause errors with new cmake concept
    - refactor ExceptionDummyBackend (#328)
      -- introduce in the BackendFactory
      -- remove backend registerer (removes stray printout)
      -- put non-template code into .cc file
    - Wip/11220 fix asan issues (#327)
      -- fix buffer overflow in NumericAddressedBackendRegisterAccessor
      -- Fix implicit memory leaks in LNM plugin mechanism.
         The LNM plugin was holding a shared pointer to itself.
         * Clear list of plugins in RegisterInfo instances held by plugins.
         * Refactoring reduces code duplication and cleans up responsibilities:
           ** Plugin base class does interaction with the catalogue.
            ** Plugin implementation only modifies the info.
    - fix g++-12 compiler warnings (#324)
    - Wip/10307 formal code cleaning ii a (#321)
      -- fix all linter warnings in the library
         * UIO and XDMA backend are exempt because I cannot test them
         * Tests not done yet
    - replace sdm with CDD in the tests and examples. (#322)
    - Fix MathPlugin DataInvalidity flag propagation  (#318)
    - Use CMake to check and set -D_FILE_OFFSET_BITS (#319)
      -- Needed on 32 bit systems
    - Use getwuid/geteuid instead of getlogin() (#314)
      -- getlogin() sometimes seems to have issues to properly retrieve the username
    - lmap: Enable vector operations on math plugin (#316)
    - Enable 64bit io for pcie backend (#315)
      -- The bar offsets start at bit 60 upwards, passing down the offsets
         through off_t requires the 64bit variants of file functions to end up in kernel correctly
    - Don't use 'included' boost test library. (#317)
      -- The boost test library is linked. Using the included version leads to
         a violation of the one definition rule and causes double free corruptions.
    - document dynload usage in packaging scripts
    - call BOOST_CHECK only in main thread (#311)
      -- BOOST.Test is not thread-safe, e.g. BOOST_CHECK macro cannot be called
         concurrently from threads. So we buffer the check results in the main
    - Add wireshark dissector for rebot (#308)
    - Add forcePollingRead plugin to doxygen (#307)
    - lmap: Allow CDATA for parameters (#306)
      - This simplifies writing formulas containing lots of <, > and & which
        then don't need XML escaping
    - avoid object slicing in ReadAnyGroup (#301)
      -- In ApplicationCore we frequently pass derived objects of the
         TransferElementAbstractor class with additional data members to the
         ReadAnyGroup constructor. The std::initializer_list uses copy sematics,
         hence the objects were sliced (i.e. copied into base class instances
         which lack the additional data members). By using an
         std::initialiser_list of std::reference_wrapper, only references are
         copied and slicing is avoided at that point.
      -- Note that this change mainly avoids the linter warning. The slicing at
         that place was harmless, since the additional data members are not
         accessed by base class functionality.
  • 03.07.01
    New PATCH release 03.07.01
    - bugfix for parsing uint64 values
      was failing due to incorrect range check
  • 03.07.00
    b542cfe1 · increase minor version ·
    New MINOR release 03.07.00
    Changes since 03.06.00:
    - fix missing includes
      -- was failing on gcc12 Tumbleweed and  gcc 11 (on Ubuntu 22.04)
    - project-template: make config_generator_project future proof
    - BackendFactory: deprecate old register function signature
    - Wip/8141: Add convenience functions for accessor read/write (#283)
  • 03.06.00
    New MINOR release 03.06.00
    Changes since 03.05.00:
    - Introduce UIO backend
    - Fix runtime_error escaping readAny before postRead
    - Fix ambiguity for read/write on 32bit platforms (#296)
    - Refactor testAsyncRead slightly (fixes linter warnings etc.)
  • 03.05.00
    bf5e82c2 · increase minor version ·
    New MINOR release 03.05.00
    Changes since 03.04.00:
    - lmap: allow using hex integers
    - fix double buffering lmap plugin
    - fix typos, formatting and linter warnings
    - fix lmap type hint plugin test in combination with math plugin
    - fix force read only math plugin
    - fix potential memory leak in numeric address backend (#9542)
    - replace abi::__cxa_demangle by boost::core::demangle
    * commit bf5e82c2ae2890dde1c6375a5b341d5db0172b50
    |     increase minor version
    * commit 13d034e40fba88c9a153544eaa648279238a129d
    |     replace abi::__cxa_demangle by boost::core::demangle
    * commit 14d6a08fb1a17314ee209350c6b250fad871c216
    |     fix typos, formatting and linter warnings
    * commit 7960d10aac9a69cdbf74783009f2ca300ba4ff1e
    |     extend lmap type hint plugin test for combination with math plugin
    |     This is failing right now due to a real bug to be found.
    * commit f1d0650977bb373bd0cbcda80f95f3b10a298d9f
    |     Wip/9799 double buffer tests ext (#290)
    |     * test race condition: slow reader
    |     also: deactivate raw access mode
    |     * fix testSlowReader and add error testing to testUnified
    |     * add failing testConcurrentRead
    |     it exposes the race condition currently not handled correctly in DoubleBufferPlugin
    |     * fix of concurrent read
    |     by simple atomic readerCount
    |     the full concept of sharedmem readerCount can later still be added in,
    |     by exchanging the counter object created in DoubleBufferPlugin constr
    |     * fix for removing AccessMode=raw
    |     add setter in DataDescriptor for removing raw type
    |     * improve safety and usability of double buffer plugin
    |     - make sure control and status registers have length 1
    |     - add support for targetdevice="this"
    |     - add optional "daqNumber" parameter
    |     * add use case of Klaus as test case
    |     - access to extracted channels
    |     - also check usage of "this"
    |     - also check usage of 'daqNumber'
    |     * extend tests for 2D extracted channels
    |     currently failing
    |     * fix for extracted channels with double buffering
    |     - also add checks for matching shapes of buffer0, buffer1
    |     - fixes for tests
    |     - testExtractedChannls1 now succeeding
    |     - testExtractedChannels2 still failing
    |     * make _readerCount shared between instances of Double buffer plugin
    |     since there can be several instances of the plugin pointing to the same double buffered region
    |     * refactoring: make DoubleBufferAccessorDecorator and DoubleBufferPlugin
    |     friends and keep a reference instead of copying all the state. They are tightly tied anyway
    |     * take over the offset and numWords of this double buffered register
    |     as defined in logical name mapping, also for second buffer
    |     So then <targetStartIndex> and <numberOfElements> should make sense.
    |     * ugly prelim fix for wordoffset
    |     which is required in decorateAccessor for doubleBuffering
    |     * refactor saved state for decorateAccessor
    |     changes API for plugins
    |     * update documentation
    |     * add transfergroup testing
    |     (still failing)
    |     also, test another xlmap - direct double buffering on lowest level, and for that introduce new DAQ region
    |     * fix case when combining TransferGroup and double buffer plugin
    |     * remove redirectedChannel + doubleBuffer plugin
    |     since it is not helpful and will cause trouble with TransferGroup
    |     * add double buffering test on hardware
    |     see #10522
    |     * some docu for testingDoubleBufferHw
    |     * introduce parameter testUSleep
    |     for testing double buffering handshake.
    |     will probably remove later again, after data corruption problems understood
    |     * fix race condition in handshake
    |     it could have happened that one reader enables double buffering just while another one is starting to read.
    |     this possibility is now excluded by a mutex in ReaderCount.
    |     * review items
    * commit 4d4151f4269c4c1dca2e724b2a2b0c9368c4efa0
    |     Wip/9551 force read only math plugin (#289)
    |     * add failing test
    |     math plugin and forceReadOnly plugin do not harmonize
    |     see issue #9551
    |     Reason for failure:
    |     - proper register catalogue is only constructed in getRegisterCatalogue().
    |     - There plugins are processed in the end
    |     - but already before, register info from target register is copied as a basis for the new lmap regInfo
    |     - the wrong copy (not having included effects of target Register plugins) is never fixed
    |     * bugfix for #9551
    |     process plugins also when fetching target_info first time
    |     * review items
    * commit 8aea0719ea9e43be0a571084c21d5775d3fe335f
    |     Wip/9439 lmap parse hex int (#288)
    |     * first bugfix implementation
    |     - based on std::stol
    |     - includes tests
    |     * also use better parsing in other places
    |     where string values are converted to some value of type T
    |     * extend test to check for duplicate register name
    |     see issue #9054
    |     test already passes with no further modification
    |     Co-authored-by: Martin Killenberg <>
    * commit 7c913c46f7837a0055b550f7ecdd32a034279034
    |     fix include order (was breaking coding style) (#291)
    * commit 26442e637f71bd3f8f8136663b8cb1d4e38c2881
    |     Wip/9542 numeric address backend shared ploop (#286)
    |     * make test sensitive to the issue
    |       turn back on check in testVerifyMemoryDeleted that was disabled
    |     * new solution: remove whole TransferGroup
    |       on unsubscribe, if the _usageCount says that no more accessors of the transfergroup are needed.
    |       Then, the accessors' shared pointer to the backend, from the accessors in the transfergroup,
    |       are also implicityly removed,  hich breaks the sh-ptr loop.
    |     * add concept overview
    |     Co-authored-by: Dietrich Rothe <>
    * commit 892bdf707411b939323587247f59c1c78d51bc91
    | Merge: 64b0c755 c97fcf2d
    |     Merge pull request #287 from ChimeraTK/update-project-template
    |     set IMAGE_PATH
    * commit c97fcf2d54e0495ad4083650f62d6a57b1247022
    | Merge: 64b0c755 f70a0bf4
    |     Merge remote-tracking branch 'project-template/master' into update-project-template
    * commit f70a0bf44a17d8c42340b35e5a0b1629c02cf9ee
    set IMAGE_PATH
    in order to allow that documentation includes images
  • 03.04.00
    New MINOR release 03.04.00
    Changes since 03.03.00:
    - Fix build on macOS (#282)
        * Avoid redeclaring std::hash and std::less.
        These duplicate declarations (in addition to the ones in the standard
        library) caused problems when compiling on macOS.
        * Do not build testPcieErrorHandling when PCIe backend is not available.
        * Use correct data type when calling NumericAddressedBackend::read.
        There are two versions of NumericAddressedBackend::read, and neither of
        them expects values of type size_t for the first two arguments, so
        calling it with such values results in an ambiguity which version should
        be used.
        By making sure that we call it with arguments of type uint64_t, we can
        resolve this ambiguity.
    - Minor Improvements for new compiler and API versions (#280)
        * Include stdexcept for std::out_of_range
        with newer standard library or gcc this is not defined otherwise
        * Drop hidden const cast
        This causes issues with newer libxml++ versions and this fix seems to
        work with libxml++2.6 as well
        Fixes #278
    - change Utilities class into namespace
  • 03.03.00
    New MINOR release 03.03.00
    Changes since 03.02.03:
    Formal code cleaning
    - enable coding style checker as test
    - address linter warnings, manual formatting etc. (#9490, partial only)
    - remove long deprecated compatibility layers (#9490)
    - fix header comment (#9490)
    - correct code formatting (#9490)
    Bug fixes:
    - fix wrong type information for unsigned int
        The number of digits reported for signed and unsigned integers was
        partially equal, which is wrong due to the additional sign character.
        This introduces a slight behaviour change, which likely will not be
        observed in real applications. ApplicationCore bases its type guessing
        on this information but already uses the correct thresholds.
    - add default constructor to VoidRegisterAccessor (#270)
  • 03.02.03
    a4c2aaab · increase patch level ·
    New PATCH release 03.02.03
    Changes since 03.02.02:
    - fix typo in stringified type name
    - fix userTypeToNumeric throwing exception
  • 03.02.02
    059e8f3c · increase patch level ·
    New PATCH release 03.02.02
    Changes since 03.02.01:
    - Subdevice: wait for handshake after write (cf. #9959)
    - fix Boolean/string conversions (both directions)
    - fix LNM math plugin push parameters in device recovery (cf. #9961)
  • 03.02.01
    f5b24d7a · fix warnings ·
    New PATCH release 03.02.01
    Changes since 03.02.00:
    - fix warnings
    - fix potential thread safety issue (interruptDispatcher map in NumericAddressedBackend)
    - fix driver version reported by pcie backend
  • 03.02.00
    c21cf87a · increase minor version ·
    New MINOR release 03.02.00
     *   support for ASCII registers in numeric addressed backends
     *   fix result of DataConsistencyGroup::update
         also for MatchingMode::none, update method must return false if given TransferElement is not member
         of the group.
         Used e.g. in DoocsAdapter, for slowly updating process variables which
         are have a macropulse source.
    *    Prepare DoubleBufferPlugin which handles double buffering of read transfers.
         implement DoubleBufferPlugin and DoubleBufferAccessorDecorator
         implement tests by using ChimeraTK::UnifiedBackendTest
         Resolves github ticket 30 and 184 and Redmine ticket 7983
  • 03.01.00
    New MINOR release 03.01.00
    Changes since 03.00.00:
    - xdma: Reduce mmapSize to actual available space (#254)
  • 03.00.00
    New MAJOR release 03.00.00
    Changes since 02.08.00:
    - ReadAnyGroup: Fixed thread leak caused by not suppressing boost::thread_terminate when peeking the read queue. (#253)
    - ReadAnyGroup: Catch runtime_errors while peeking for DiscardValueExceptions (#251)
    - xdma: _intfFromBar(): return reference, not pointer (#250)
    - Wip/9621 math only write with all params (#247)
      -- The math plugin only writes the target accessor once all parameters and the accessor itself have been written at least once after opening the device.
    - fix ReadAnyGroup::readAnyNonBlocking handling DiscardValueExceptions … (#249)
      -- The preRead/postRead calls were not properly matched before, resulting in subtle bugs (deadlocks) when combining with BidirectionalProcessArrays in ApplicatioCore's testable mode.
         (requires cppext 01.04.00)
    - Implement new multiplexed syntax (#245)
      -- Initial version of parsing the new Multiplexed area syntax
      --  Unify register creation for multiplexed registers
      --  Update MultiplexedDataAccessorTest for new syntax
      --  Make the tests parametrized to work on files with old and new syntax for multiplexed areas
      -- Add simple test for individual channel names
      -- Add missing map file and dmap file sanity check
      -- Rename function and add description
      -- Remove full BAM map files
      -- Merge newMuxedDataAcessor with newSequences
      --- check the parsed registers in testMapFileNewStyleMuxed
      -- Add note to test files regarding alignment
    - make VersionNumber trivially copyable (#248)
      Does not change any existing behaviour, since the copy constructor was actually already trivial. Now, VersionNumber can be e.g. used in an std::atomic.
    - Extended the TransferElement specification with behaviour for ChimeraTK::Void
      -- Also added ChimeraTK::Boolean as data type
    - Remove RegisterAccessor
    - fixes for boolean and void (#244)
    - Wip/9608 math plugin write on open (#243)
      -- MathPlugin parameter read loop: first wait for data, then write
      -- MathPlugin: Only write parameter changes after the register itself has been written.
         * Factored parameter read loop into separate function
         * Introduced _mainValueWrittenAfterOpen
         * Lock is acquited in preWrite() and only released in postWrite()
           to protect the writeTransfer from write operations in the thread.
         Resolves redmine ticket 9608
    - Wip/tsan asan bugs (#240)
      -- fixed template bug in unified test (made clang compiles fails)
      -- resolved race confition issue in testLMapBackendUnified
      -- BackendRegisterCatalogue base has virtual destructor to avoid compiler warnings
      -- avoid complier warning about ignored return value
    - SharedDummyBackend remote interrupt trigger (#236)
      -- implement semaphore-based triggering concept
      -- introduce interrupt dispatcher thread
      -- increase safety for InterruptDispatcherInterface
         * instantiation with unique_ptr - it is not indented to be handed out
         * make sure dispatcher thread is stopped first in destructor
      -- reduce locking time for global interprocess mutex
      -- improve clean-up/reinit of SHM
      -- do not remove global mutex while it is locked
      -- Although it works on linux, behavior is certainly implemenation-specific or even undefined.
      --  cleanup Semaphore array by comparison with PidSet
      --  Fix shared test to include async variables
      -- Use an explicit remotely triggered interrupt
      -- Fix typos
      -- Avoid copying shared pointer while iterating
      -- use scoped enum
    - Wip/bug readable writeable plugins (#237)
      -- Added unified test to check isReadable() and isWriteable()
      -- Fixed implementation in math plugin
      -- fixed catalogue entries for SubDeviceBackend 2reg/3reg
    - Fix transfer group invalid merge (#235)
      --  When adding a TransferElement to a TransferGroup using a temporary
          TransferElementAbstractor, in some rare cases it could happen that the
          transfer group assumed that this temporary accessor was already being
          taken care of and the original accessor only swapped in random data
    - Multipexed 2D registers now working with IEEE754 data type.
      -- fixed catalogue info for IEEE754 in muxed accessors
      -- NumericAddressedBackendMuxedRegisterAccessor is now templated on the converter type.
      -- introduced muxed IEEE to numeric addressed unified test
    - Refurbish catalogue API (#7425) (#227)
      -- This requires all backends to be updated (backends based on NumericAddressedBackend are usually fine).
         Also applications which are obtaining the catalogue have to be adapted for the slightly different API in some cases.
    - Wip/9048 bug get as cooked (#226)
      -- unified test is doing raw read and write tests, incl. getAsCooked() and setAsCooked,
         which triggers the wanted exception descibed in redmine ticket 9048
         !! Interface change in descriptors for unified backend test !!
         * getRemoteValue() and generateValue() need argument 'bool raw = false' for accessors with capability 'enableRawTransferTest'
      -- NDRegisterAccessorDecorators now can do getAsCooked() and setAsCooked(). Solves #9048
    - use weak_ptr for global ShareDummyBackend instance map
    - testDummyBackend uses the factory to create different instances
    - No more crtp (#224)
      Get rid of instance map in dummy backends.
      -- Solves cleanup issue in shared dummy backend tests.
      -- Gets rid of unnecessary CRTP. DummyBackendBase is no longer a template class.
      -- Functionality is already covered by the BackendFactory. No functional change.
    - implement dummy interrupt x y (#223)
      -- Add DummInterruptAccessor DUMMY_INTERRUPT_X_Y
    - Wip/9048 bug lmap and subdevice (#222)
      Started to extend UnifiedBackendTest with  tests for access mode raw.