SLS Detector Package Minor Release 7.0.0.rc1 released on xx.11.2021
===================================================================

This document describes the differences between v7.0.0.rc1 and v6.1.2   



    CONTENTS
    --------
    1.          New, Changed or Resolved Features
        1.1.    Compilation
        1.2.    Callback
        1.3.    Python
        1.4.    Client
        1.5.    Detector Server
        1.6.    Simulator
        1.7.    Receiver
    2.          On-board Detector Server Compatibility
    3.          Firmware Requirements
    4.          Kernel Requirements
    5.          Download, Documentation & Support



@Erik:- adding LTO to test and disable them for Debug builds?
@Erik:- support external build of python lib, 



1. New or Changed Features
==========================


1.1. Compilation
----------------


    General:


    *   Custom location to find ZeroMQ
        Option to provide a custom location to look for ZeroMQ, if not found 
        using FindZeroMQ.cmake
        
        For example, to use the system installed zmq:
        Using cmake: -DZeroMQ_HINT=/usr/lib64 
        Using cmk.sh script: -q /usr/lib64


    *   Support external build 
        Assuming already installed version of the slsDetectorPacakge exists, 
        external build of python bindings, gui, ctbgui and moench has been added.


    *   Catch updated to latest 2.x version due to build failure in fedora
    


    Gui:


    *   Qt5 and in-built compressed Qwt 6.1.5
        Ported from Qt4 to Qt5. Minimum requirement: Qt 5.9
        Compressed Qwt 6.1.5 added into the package in libs. It is unpacked and built
        as a static library.This allows us to remove qwt as an external dependency
        and reduces the risk of picking up the wrong version.


    Python:


    *   Install python extension
        Option to copy the python extension (slsdet folder and _slsdet-..so)
        to CMAKE_INSTALL_PREFIX/python using
        -DSLS_INSTALL_PYTHONEXT


    *   Pybind11 (v2.10.0)
        Pybind11 is removed as a submodule and instead built into package to
        simplify for users. Now, there is no more need to clone with the '--recursive'
        argument or to update submodule when switching to this package version 
        and above.


    *   Conda packages
        Removed conda packages for python 3.6 and 3.7. Added for python 3.11.



1.2. Callback
-------------


    *   Datatype of Metadata [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
        Datatype changed from char* to sls_receiver_header.


    *   Datatype of Size [registerCallBackRawDataReady, registerCallBackRawDataModifyReady]
        Datatype changed from uint32_t to size_t


    *   Datatype of file name and file path [registerCallBackStartAcquisition]
        Datatype changed from string to const string reference.


    *   Incorrect image size [registerCallBackStartAcquisition]
        Fixed. It used to give +120 bytes.


    *   [Gotthard2] 25um Image reconstruction for 2 modules
        First module (master) interleaves with second modules(slave). First channel
        of master is first channel of detector. 

        Requires firmware update to reverse channels of slaves.



1.3. Python
-----------


    *   Defines in sls_detector_defs
        sls_detetor_defs parsed and #defines extracted into defines.py
        For exmaple, one can use slsdet.LOCALHOST_IP


    *   Python sub-microsecond resolution
        Reading back sub-microsecond exposure times from the Python API fixed by 
        addig Python datetime supports only micro seconds as lowest unit. 
        
        This is fixed by introducing a new C++ type (DurationWrapper), which 
        holds number of nanoseconds as a uint64_t (only in python bindings) and 
        custom typecaster to convert to and from std::chrono::nanoseconds.

        A get using API now returns in DurationWrapper, instead of datetime.
        Refer exptime help for examples.


1.4. Client
-----------


    Breaking API:


    *   Versioning
        The client, receiver and detector servers now have semantic Versioning
        along with the date and are managed with the Version class.

        --version argument to the executable gives the complete versioning with date.

        Using the client to get versions gives only the semantic version. An older
        server will still give date. Hence, the return type is a string, breaking API.

        Compatibility checks at hostname or rx_hostname command will only be for
        backwards compatibility (ie. it only checks for the major version number).
        If its an old server, then its expected to have the exact same date (as
        before)

        Setting intitialchecks to 0 also bypasses the receiver compatibility check.


    *   Detector Specific fields
        bunchid ->detSpec1
        reserved->detSpec2
        debug->detSpec3
        roundRnumber->detSpec4

        Header version number stays the same in the UDP header as there is no
        difference in the format from the detector. Only the structure memeber names
        have changed in sls_detector_defs.h

        Further details about each detector specific field can be found at:
        https://slsdetectorgroup.github.io/devdoc/udpdetspec.html


    *   Namespace sls
        All files in slsSupportLib and tests have now been moved to sls namespace 
        including macros. Using the LOG, for example, will require the sls qualifier.


    *   [Eiger] Number of UDP interfaces
        Command line: numinterfaces, API: getNumberofUDPInterfaces
        This command now reflects the actual number of udp interfaces for Eiger,
        which is 2.


    *   [Eiger][Jungfrau] Row column
        [Jungfrau] Fixed row column indexing for multi module 2 interfaces

        [Eiger] The row indicies were switched across the Y axis for the callback
        only for Eiger. This is now changed and kept similar to the other detectors.
        The row indices would be in the order of the half modules in the hostname 
        command. Therefore, to keep the image from callback, invert the hostname
        order in the config file.


    *   Deprecated CopyDetectorServer 
        Command line: copydetectorserver, API: copydetectorserver
        Removed. Use updatedetectorserver


    *   [Eiger][Jugfrau][Mythen3] Deprecated specific transmission delay commands
        txndelay_frame -> txdelay_frame
        txndelay_left -> txdelay_left
        txndelay_right -> txdelay_right


    *   [Eiger] Datastream only for 10GbE
        Command line: datastream, API: getDataStream/ setDataStream

        This command to enable/ disable data stream from left or right port
        is now allowed only for 10GbE. Previously, it incorrectly allowed to do so.


    *   [Eiger][Jungfrau][Moench][Ctb] Stop command effect on next frame number
        Stopping acquisition sometimes results in different next frame numbers
        for different moduels. Hence, after a stop, if the next frame numbers are
        different, they are all set to their maximum value + 1.


    *   Missing packets
        Command line: rx_missingpackets, API: getNumMissingPackets
        This now returns a signed 64 bit instead of unsigned. The negative polarity
        depicts extra packets instead of missing packets and also takes care of
        disabled ports.


    *   Frames caught and frame index
        Command line rx_framescaught, rx_frameindex, API: getFramesCaught/ getRxCurrentFrameIndex
        They now return a vector for each port when there are 2 udp interfaces
        in the receiver.


    *   [Gotthard][Gotthard2] Num modules
        Only 2 modules allowed maximum in a detector shared memory.


    *   [Moench][Ctb][Mythen3] Deprecated commands
        Patloopx, patnloopx, patwaitx, patwaittimex
        Please use instead patloop, patnloop, patwait and patwaittime commands
        with the level as an argument. 

        Old commands work with warning, but the server expects the new ones
        such as a default pattern file to be loaded at startup for Moench.

        Renamed patternParameters struct member from 'loop' to 'startloop' and 
        'stoploop'.


    *   [Mythen3] Clock Divider 4 and 5
        Cannot be set anymore. Only read back.



    New commands:


    *   [Eiger][Gotthard][Gotthard2][Mythen3][Jungfrau] Master
        
        Setting up from client:
        [Eiger][Gotthard2][Jungfrau] 
        Command line: master, API: getMaster/ setMaster
        All of them can get master mode from the client.
        
        This can also be set up on the detector server. Please refer to notes
        on that section.


    *   [Eiger] Top
        Command line: top, API: getTop/ setTop
        Sets the half module to top or bottom from the client.

        This can also be set up on the detector server. Please refer to notes
        on that section.


    *   [Mythen3][Eiger] Save settings file
        Command line: trimbits (sls_detector_get), API: saveTrimbits
        Added


    *   [Gotthard2] Parallel readout added
        Command line: parallel, API: getParallelMode/ setParallelMode
        Default for Gotthard2 is parallel. Non parallel mode only works in 
        continuous mode.


    *   [Jungfrau] Software trigger added
        Command line: trigger, API: sendSoftwareTrigger
        Send software trigger instead of harware trigger.


    *   [Eiger][Jungfrau] Blocking trigger
        Commandline: blockingtrigger, API: sendSoftwareTrigger with argument true
        Sends software trigger signal to detector and blocks until the frames
        are sent out for that trigger.


    *   [Jungfrau] Sync
        Command line: sync, API: getSynchronization/ setSynchronization
        Enables or disables synchronization between modules


    *   [Gotthard2][Mythen3] Temperature readout
        Command line: temp_fpga, API: getTemperature with TEMPERATURE_FPGA enum
        Added


    *   [Gotthard2][Mythen3] Round robin added
        Command line: udp_dstlist, API: getDestinationUDPList/ setDestinationUDPList
        Command line: udp_numdst, API: getNumberofUDPDestinations
        One can set up to 32 (64 for Mythen3) entries in the destination list.


    *   [Jungfrau] Module Id
        Command line: moduleid, API: getModuleId
        16 bit value (ideally unique) that is streamed out in the udp header of 
        the detector. The on-board detector server picks it up from a file 
        (if it exists) called detid_jungfrau.txt.
    

    *   [Jungfrau][[Gotthard2][Myhten3][Gotthard][Ctb][Moench] Hardware version
        Command line: hardwareversion, API: getHardwareVersion
        Gets the board or hardware version. 
        For example, Jungfrau returns 1.0 or 2.0.
        It is also printed at on-board detector server start up.
        Also printed before starting FPGA programming.


    *   [Eiger][Jugfrau][Mythen3] Transmission Delay   
        Command line: tx_delay, API: getTransmissionDelay/ setTransmissionDelay
        Sets transmission delay for all modules in the detector using the step
        size provided. Sets up for every module:
            [Eiger] txdelay_left to (2 * mod_index * n_delay)
            [Eiger] txdelay_right to ((2 * mod_index + 1) * n_delay)
            [Eiger] txdelay_frame to (2 *num_modules * n_delay)
            [Jungfrau][Mythen3] txdelay_frame to (num_modules * n_delay)


    *   [Mythen3] Bad channels
        Command line: badchannels, API: getBadChannels/ setBadChannels
        Set bad channels from file with a list of channels, which will be masked
        out. Also does trimming. A detector level command will require the channel
        numbers accordingly. The file also extended to include commas, colons range)
        and removes duplicates. 


    *   [Moench][Ctb] Starting frame number
        Command line: nextframenumber, API: getNextFrameNumber/ setNextFrameNumber
        Added and default set up on detector server start up.


    *   [Ctb] DAC names
        Command line: daclist, API: getDacNames/ setDacNames
        Can set and get dac names in the dac list now.
    
    
    *   [Mythen3] Polarity, interpolation, pump probe, analog pulsing, digital pulsing
        Command line: polarity, interpolation, pumpprobe, apulse, dpulse
        API: getPolarity/ setPolarity, getInterpolation/ setInterpolation,
        getPumpProbe/ setPumpProbe, getAnalogPulsing/ setAnalogPulsing,
        getDigitalPulsing/ setDigitalPulsing
        
        Added these commands. 
       
        Enabling interpolation will also enable all counters and disable vth3.
        Disabling sets to previous counter mask and previous vth values.

        In pump probe mode, only vth2 enabled. Disabling sets vth2 to prevevious 
        value.

        Setting counter mask will check interpolation and pump probe mode
        requirements, else sets vthx dacs according to counter mask.

        Direct overwrite of any dac (including vthx) allowed using dac command
        (as before).



    New commands for Receiver only:


    *   Arping for 10GbE
        Command line: rx_arping API: getRxArping/ setRxArping
        Starts a thread in the receiver to arping the interface it is listening
        to in 10GbE mode every 60 s. 
        Changes NUM_RX_THREAD_IDS (sls_detector_defs.h) from 8 to 9.


    *   Receiver Region of Interest
        Command line: rx_roi, API: getRxROI/ setRxROI
        Command line: rx_clearroi, API: clearRxROI
        One can set an ROI in the receiver to write to file. 1D detectors can set
        xmin and xmax, whereas the 2D can also set ymin and ymax. -1 values signify
        no ROI. 
        
        This is not at network level and can only be used to reduce size of file.
        Virtual HDF5 files not created when this is enabled and also no link in
        master file. No file created if module not in ROI.

        There can only be one ROI per detector. Therefore, can be set only at 
        detector level, but can be retrieved at module level as well.

        The GUI still shows the entire image, but has a yellow border around the 
        ROI. Status bar displays a message when Rx ROI enabled.



    Additonal Features:


    *   Non-blocking start
        Allowing non-blocking start at modular level again.


    *   [Jungfrau][Moench][Ctb] Additional programming checks
        Also checks if the drive to write to is a special file or a normal
        file. If its a normal file, it throws asking to redo the command with a 
        '--please-delete' argument to delete the normal file and create the device
        drive and restart FPGA programming.

        More readable error message insetad of "programfpga not implemented for
        this detector'. This happens when 'hostname' command fails due to 
        server-firmware/client compatibility and the detector type becomes
        'GENERIC'. Fixed to suggest if 'hostname' executed properly. 


    *   Udp Source IP
        Command line: udp_srcip(2), API: getSourceUDPIP(2)/ setSourceUDPIP(2)
        One can also set this to 'auto' for 1 GbE data. It will set to IP of
        rx_hostname (as in udp_dstip)

    *   Incrementing default receiver tcp port
        Automatically incrementing the default receiver tcp port for every module
        when creating shared memory.


    
    Changes or Fixes:


    *   Free and config command fail
        Free and config command checked mismatch of size of shared memory before 
        freeing or loading new config. Fixed.


    *   sls_detector_help or sls_detector_get -h
        Should not create Detector object. Fixed.


    *   [Jungfrau] Storage cells in running receiver
        Allowing the possibility to set this when receiver in running state.


    *   [Eiger] Vtr
        Allow Vtrim to be interpolated for settings.


    *   [Mythen3] Incorrect gain caps when setting threshold energy
        Gain caps overwritten with settings enum. Fixed.


    *   [Mythen3] Non blocking start acquisition 
        Non-blocking start acquisition was sent out twice to the master. Fixed.


    *   [Mythen3] Threshold
        When settings trimbits or threshold, counter mask is set and hence,
        vthx dacs are set accordingly.

        setAllThresholdEnergy takes 3 values for each counter and if one of them
        is -1, the trimbits and setings for that counter is picked up from the 
        detector.


    *   [Moench][Ctb] Pattern levels
        Changed from 3 to 6.


    *   [Mythen3][Moench][Ctb] Default patwait and patloop addresses
        Set default wait and loop addresses to 0x1fff (max value) for all levels
        before loading pattern. Please use the pattern command instead of parameters.
        This ensures defaults are set up and is faster.


    *   [Moench] Patsetbit and patsetmask
        Command line: patsetbit API: getPatternBitMask/ setPatternBitMask
        Command line: patmask API: getPatternMask/ setPatternMask
        
        Exchanging the help and masks for patsetbit and patsetmask in the detector
        server, especially in loading settings.


    *   [Moench][Ctb] ADC Vpp
        Command line: adcvpp, API: getADCVpp/ setADCVpp
        Moved from SetDAC function into into its own. One can use mV values or
        option numbers as before.


    *   [Ctb] ADC command goes back to control server
        Slow ADCs, slow ADC temperature, get measured current and voltage values
        are requested via the control server again insetad of the stop server
        due to configuration and definitions in the control server.



1.5. Detector Server
--------------------


    Config file:

    *   [Eiger][Gotthard2][Gotthard] Master
        Using config file with 'master' with argument (master=1, slave=0)


    *   [Eiger] Top          
        Using config file with 'top' with argument (top=1, bottom=0)
    


    Command line arguments:

    *   They have precedence over config files. 


    *   [Eiger][Gotthard2 Virtual][Mythen3 Virtual][Gotthard Virtual] Master
        Using command line '--master = 1' or '-m = 1' with argument 
        (master = 1, slave = 0)


    *   [Eiger] Top
        Using command line '--top = 1' or '-t = 1' with argument (top=1, bottom=0)


    *   Ignore config file
        The config files can also be ignored by an argument from the command line, 
        '--ignore-config' or '-i'.
                      


    Fixes:


    *   [Jungfrau][Eiger] Clear UDP destination
        Command line: udp_cleardst, API: clearUDPDestinations
        Clearing udp destination also clears it in the FPGA now. 


    *   [Eiger] Incorrect next frame number
        Command line: nextframenumber, API: getNextFrameNumber/ setNextFrameNumber
        Get next frame number for 10g was connected to 1g registers and gave 
        incorrect values. Fixed.


    *   [Mythen3][Gotthard2] System clock change effects 
        When changing the system clock (clkdiv 2), time settings should also be 
        affected (exptime, period etc.). Fixed.

        [Gotthard2] System frequency should be same irrespective of timing source.
        Fixed.


    *   [Mythen3] Kernel version compatibility test
        Fix added to parse properly the kernel version with CET for corrected
        version compatibility test.


    *   [Mythen3] Server crash for setting vthrehsold
        Fixed.

    
    *   [Mythen3] Incorrect gaincaps
        Setting threshold energy was overwriting gaincaps with settings enum. Fixed.


    *   [Ctb][Moench] Hostname fail in update mode. 
        Fixed



    Changes:

    
    *   [Jungfrau] Temporary fix for stop in 6.1.1
        Temporary fix introduced in 6.1.1 for not being able to start after a
        stop command has been issued is removed. Reset core right after also has
        been removed. It has been fixed in firmware instead.


    *   [Gotthard2] Clock Divider defaults
        When chancing burst mode, clock dividers (2, 3 and 4) set to their 
        defaults according to burst mode.


    *   [Mythen3] DAC check for settings
        Verify DAC values for each setting has been temporarily switched off


    *   [Mythen3] DAC min and max values
        Vtrim minimum of 600 has been removed.
        The threshold dacs minimum is 200 and maximum is 2400.
        The other DACs minimum is 0 and maximum is 2800.
        When out of range, will not throw, just a warning.


    *   [Mythen3] Vicin Dac changed to 800      


    *   [Jungfrau][Moench][Ctb] PLL reset at server start up
        PLL reset now at server start up.


    *   [Moench] ADC9257 Vref
        ADC Vref voltage modified from 1.33V to 2V



    *   [Ctb] Allow all clock dividers for PLL
        Fixed. For example, 133 MHz would not really be set previously. Fixed by
        changing totaldiv from float to an integer.



    Additional Features:

    
    *   Stop server startup errors
        Stop servers now also check for errors at startup (including version
        compatibility) and like the control server, it will translate to the 
        client when connecting for the first time (hostname command).


    *   [Jungfrau][Moench][Ctb] Additional server update process
        Removes old server binary or target of linked file when updating
        detector server for blackfin detectors as there is less space on blackfin.

        Clearing up absolute and respawn path (removing double '/')

        Raise error if server name to be copied is the same as final soft link name.


    *   [Moench][Ctb] 1 GbE Non blocking acquisition
        Previously non blocking acquisition in 1 GbE would not send data.
        This feature added now.


    *   [Gotthard2] Adapted to new HDI version
        HDI module ID written to FPGA register



1.6. Simulator
--------------


    *   Command line arguments. Please refer to previous section on Detector Server.


    *   [Eiger] Only one executable
        Only one executable for an Eiger virtual server. Master and top mode
        can be provided via command line or config file to the detector server,
        as well as via the client. See in Other New Features for more details.

        One can start a module using:
            eigerDetectorServer_virtual # reads default config file (top master)
            eigerDetectorServer_virtual -i #ignores the config file (bottom slave)


    *   [Eiger][Junfrau][Gotthard2][Mythen3] Module Id
        Added into udp header


    *   Minimum Configuration
        One can setup with just:
            hostname localhost
            rx_hostname localhost
            udp_dstip auto


    *   [Mythen3] Packet size
        Fixed packet size calculation. Previously, sending only header with no data.



1.7. Receiver
-------------


    Breaking API:


    *   Namespace sls
        All the receiver source files have also been added to namespace sls.


    *   HDF5 and Binary writer version 
        Changed from 6.3 to 6.4


    *   Master file format to json
        The format has been changed from ASCII to json.


    *   Geometry metadata
        Added geometry (number of modules in each direction) to metadata in file.


    *   HDF5 Dataset name
        Changed to just "data" to simplify for user


    *   File write
        File write is disabled by default.



    Fixes:

    
    *   Refactored and fixed minor issues
        Including memory structure and udp sockets.
        Fixed progress also in discard partial packaets mode and deactivated ports. 
        Fixed 200% progress.
        Completely padded images now have detector type or version in metadata.
        Fixed getting stuck at stop receiver when using zmq
        Fixed clang compiler warnings


    *   Multiple files
        This bug was introduced in v6.0.0, where 1 file was created per frame 
        after the first file. Fixed by resetting the number of frames in 
        current file when creating a new one.


    *   [Eiger] Datastream command order
        The order of commands to set datastream from client mattered previously.
        Datastream had to be set before 10GbE enable. Order does not matter anymore.


    *   Udp destination MAC
        If it has been set before, changing udp_dstip will not update udp_dstmac.
        Fixed to always set it in detector even if it had a value before. 
        Udp_dstmac can still be used to overwrite again. This is useful when
        using a router for example.


    *   Stuck when using zmq
        More often in 6.1.1, gets stuck at stop receiver.


    *   [Mythen3] Incorrect number of packets calculated or tengiga not set up
        Runnig config second time (with tengiga=0, dr !=32, counters !=0x7) 
        calculated incorrect image size expected due to inconsistent copy of
        detector parameters. Fixed


    *   Storage cells in receiver
        Previously not updated in receiver. Fixed.


    *   Virtual HDF5 Parameter datasets
        Corner case bug when frames caught is not a multiple of frames per file.
        Not found in virtual image datasets. Fixed.



    Changes:


    *   Master file created at end of acquisition
        The file is now written at the end of acquisition. So if any metadata
        is changed during an acquisition, it will reflect the last value.


    *   File name prefix
        Slash '/' not allowed.



    Additional Features:


    *   [Gotthard2] 25um image reconstruction in virtual HDF5
        Virtual HDF5 reconstructs complete image by interleaving first module 
        (master) with second module (slave). First channel of master is first
        channel of detector.

        Requires firmware update to reverse channels of slaves.


    *   Memory size
        Increased an internal fifo header by 8 bytes to align memory allocated for 
        to receive images for efficiency.



1.8. Gui
--------
    
    *   [Jungfrau][Eiger] Gap pixels
        Enabled by default in the gui.


    *   High voltage moved from Developer tab to Settings tab.


    *   Gain plot zooming
        Zooming disabled. Instead, it automatically zooms in when you zoom in
        the main plot or if min and max of x and y axis set up in plot tab.


    *   [Mythen3] Inconsistent timing mode
        Timing mode of the slaves should be discarded before squashing. Fixed.

  
    *   [Mythen3][Gotthard2] Crashes
        Additional locking Added




2.  On-board Detector Server Compatibility
==========================================


    Eiger       7.0.0
    Jungfrau    7.0.0
    Mythen3     7.0.0
    Gotthard2   7.0.0
    Gotthard    7.0.0
    Moench      7.0.0
    Ctb         7.0.0
    

    On-board Detector Server Upgrade
    --------------------------------

    From v6.1.0 (without tftp):
        Using command 'updatedetectorserver'
    From 5.0.0 (with tftp):
        Using command 'copydetectorserver'

    Instructions available at
        https://slsdetectorgroup.github.io/devdoc/serverupgrade.html




3. Firmware Requirements
========================


    Eiger       17.02.2022 (v30)
    
    Jungfrau    04.11.2022 (v1.4, HW v1.0) 
                03.11.2022 (v2.4, HW v2.0)

    Mythen3     05.12.2022 (v1.4)

    Gotthard2   23.11.2022 (v0.3)

    Gotthard    08.02.2018 (50um and 25um Master)
                09.02.2018 (25 um Slave) 

    Moench      05.12.2022 (v0.3)

    Ctb         05.12.2022 (v1.1)


    Detector Upgrade
    ----------------

    The following can be upgraded remotely:

    Eiger      via bit files
    Jungfrau   via command <.pof>
    Mythen3    via command <.rbf>
    Gotthard2  via command <.rbf>
    Moench     via command <.pof>
    Ctb        via command <.pof>

    Gotthard cannot be upgraded remotely  

    Except Eiger, 
        upgrade 
            Using command 'programfpga' or

        udpate both server and firmware simultaneously
            Using command 'update'


    Instructions available at
        https://slsdetectorgroup.github.io/devdoc/firmware.html




4. Kernel Requirements
======================

    Blackfin 
    ========
    Latest version: Fri Oct 29 00:00:00 2021
    
    Older ones will work, but might have issues with programming firmware via
    the package.

    Nios
    ====
    Compatible version: Mon May 10 18:00:21 CEST 2021

    Kernel Upgrade
    ==============
    Eiger   via bit files
    Others  via command

    Commands: udpatekernel, kernelversion
    Instructions available at
        https://slsdetectorgroup.github.io/devdoc/commandline.html
        https://slsdetectorgroup.github.io/devdoc/detector.html
        https://slsdetectorgroup.github.io/devdoc/pydetector.html




5. Download, Documentation & Support
====================================

    Download
    --------
    
    The Source Code:
         https://github.com/slsdetectorgroup/slsDetectorPackage
            
    Documentation
    -------------
    
    Installation:
        https://slsdetectorgroup.github.io/devdoc/installation.html

    Quick Start Guide:
        https://slsdetectorgroup.github.io/devdoc/quick_start_guide.html
        
    Firmware Upgrade:
        https://slsdetectorgroup.github.io/devdoc/firmware.html

    Detector Server upgrade:
        https://slsdetectorgroup.github.io/devdoc/serverupgrade.html

    Detector Simulators:
        https://slsdetectorgroup.github.io/devdoc/virtualserver.html

    Consuming slsDetectorPackage:
        https://slsdetectorgroup.github.io/devdoc/consuming.html
        
    API Examples:
        https://github.com/slsdetectorgroup/api-examples

    Command Line Documentation:
        https://slsdetectorgroup.github.io/devdoc/commandline.html

    C++ API Documentation:
        https://slsdetectorgroup.github.io/devdoc/detector.html
       
    C++ API Example:
        https://slsdetectorgroup.github.io/devdoc/examples.html#
        
    Python API Documentation:
        https://slsdetectorgroup.github.io/devdoc/pygettingstarted.html

    Python API Example:
        https://slsdetectorgroup.github.io/devdoc/pyexamples.html

    Receivers (including custom receiver):
        https://slsdetectorgroup.github.io/devdoc/receivers.html
        https://slsdetectorgroup.github.io/devdoc/slsreceiver.html

    Detector UDP Header:
        https://slsdetectorgroup.github.io/devdoc/udpheader.html
        https://slsdetectorgroup.github.io/devdoc/udpdetspec.html

    TroubleShooting:
        https://slsdetectorgroup.github.io/devdoc/troubleshooting.html
        https://slsdetectorgroup.github.io/devdoc/troubleshooting.html#receiver-pc-tuning-options
        
    Further Documentation:
        https://www.psi.ch/en/detectors/documentation
        
    Info on Releases:
        https://www.psi.ch/en/detectors/software


    Support
    -------

        dhanya.thattil@psi.ch
        erik.frojdh@psi.ch

