changed detector header version to detector specific field names and incremented version number, also for zmq (#574)

This commit is contained in:
Dhanya Thattil 2022-11-17 15:24:12 +01:00 committed by GitHub
parent f108ec82ea
commit 4bb1a612f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 206 additions and 100 deletions

View File

@ -125,6 +125,8 @@ This document describes the differences between v7.0.0 and v6.x.x
- fixed error messages of readregister inconsistent values
- setmodule and read frame was returning fail without setting error messages (leading to broken tcp connection due to no error message) )
- gui nios temperature added
- detector header change (bunchid, reserved, debug, roundRnumber) ->detSpec1 - 4
2. Resolved Issues
==================

View File

@ -55,6 +55,9 @@ set(SPHINX_SOURCE_FILES
src/troubleshooting.rst
src/receivers.rst
src/slsreceiver.rst
src/udpheader.rst
src/udpconfig.rst
src/udpdetspec.rst
)
foreach(filename ${SPHINX_SOURCE_FILES})

View File

@ -66,6 +66,15 @@ Welcome to slsDetectorPackage's documentation!
virtualserver
serverdefaults
.. toctree::
:caption: Detector UDP Header
:maxdepth: 2
udpheader
udpconfig
udpdetspec
.. toctree::
:caption: Receiver
:maxdepth: 2

View File

@ -4,41 +4,8 @@ Receivers
Receiver processes can be run on same or different machines as the client, receives the data from the detector (via UDP packets).
When using the slsReceiver/ slsMultiReceiver, they can be further configured by the client control software (via TCP/IP) to set file name, file path, progress of acquisition etc.
Detector UDP Header
---------------------
| The UDP data format for the packets consist of a common header for all detectors, followed by the data for that one packet.
**The SLS Detector Header**
.. table:: <-------------------------------- 8 bytes -------------------------------->
:align: center
:widths: 30,30,30,30
+--------------------------------------------------------------------+
|frameNumber |
+---------------------------------+----------------------------------+
|expLength |packetNumber |
+---------------------------------+----------------------------------+
|bunchId |
+--------------------------------------------------------------------+
|timestamp |
+----------------+----------------+----------------+-----------------+
|modId |row |column |reserved |
+----------------+----------------+----------------+--------+--------+
|debug |roundRNumber |detType |version |
+---------------------------------+----------------+--------+--------+
UDP configuration in Config file
----------------------------------
#. UDP source port is hardcoded in detector server, starting at 32410.
#. **udp_dstport** : UDP destination port number. Port in receiver pc to listen to packets from the detector.
#. **udp_dstip** : IP address of UDP destination interface. IP address of interface in receiver pc to listen to packets from detector. If **auto** is used (only when using slsReceiver/ slsMultiReceiver), the IP of **rx_hostname** is picked up.
#. **udp_dstmac** : Mac address of UDP destination interface. MAC address of interface in receiver pc to list to packets from detector. Only required when using custom receiver, else slsReceiver/slsMultiReceiver picks it up from **udp_dstip**.
#. **udp_srcip** : IP address of UDP source interface. IP address of detector UDP interface to send packets from. Do not use for Eiger 1Gb interface (uses its hardware IP). For others, must be in the same subnet as **udp_dstip**.
#. **udp_srcmac** : MAC address of UDP source interface. MAC address of detector UDP interface to send packets from. Do not use for Eiger (uses hardware mac). For others, it is not necessary, but can help for switch and debugging to put unique values for each module.
To know more about detector receiver configuration, please check out :ref:`detector udp header and udp commands in the config file <detector udp header>`
Custom Receiver
----------------

View File

@ -1,5 +1,14 @@
Detector Servers
=================
Getting Started
===============
Detector Servers include:
* Control server [default port: 1952]
* Almost all client communication.
* Stop server [default port: 1953]
* Client requests for detector status, stop acquisition, temperature, advanced read/write registers.
When using a blocking acquire command (sls_detector_acquire or Detector::acquire), the control server is blocked until end of acquisition. However, stop server commands could be used in parallel.
Location
---------
@ -24,17 +33,6 @@ Arguments
-s, --stopserver : Stop server. Do not use as it is created by control server
Basics
------------
Detector Servers include:
* Control server [default port: 1952]
* Almost all client communication.
* Stop server [default port: 1953]
* Client requests for detector status, stop acquisition, temperature, advanced read/write registers.
When using a blocking acquire command (sls_detector_acquire or Detector::acquire), the control server is blocked until end of acquisition. However, stop server commands could be used in parallel.
.. _Automatic start servers:
Automatic start

View File

@ -1,6 +1,6 @@
.. _Detector Server Upgrade:
Detector Server Upgrade
=======================
Upgrade
========
**Location:** slsDetectorPackage/serverBin/ folder for every release.
@ -14,7 +14,7 @@ Detector Server Upgrade
Eiger requires a manual reboot. Or killall the servers and restart the new linked one. If you are in the process of updating firmware, then don't reboot yet.
From 6.1.1 and above (no tftp required)
6.1.1+ (no tftp required)
---------------------------------------
#. Program from console
@ -60,7 +60,7 @@ Troubleshooting with tftp
#. text file busy: You are trying to copy the same server.
Older than 5.0.0
-----------------
< 5.0.0
--------
Please contact us.

33
docs/src/udpconfig.rst Normal file
View File

@ -0,0 +1,33 @@
.. _detector udp header:
Config file
============
Commands to configure the UDP in the config file:
Source Port
-----------
Hardcoded in detector server, starting at 32410.
udp_srcip - Source IP
---------------------
IP address of detector UDP interface to send packets from. Do not use for Eiger 1Gb interface (uses its hardware IP). For others, must be in the same subnet as **udp_dstip**.
udp_srcmac - Source MAC
-----------------------
MAC address of detector UDP interface to send packets from. Do not use for Eiger (uses hardware mac). For others, it is not necessary, but can help for switch and debugging to put unique values for each module.
udp_dstport - Desintation Port
-------------------------------
Port in receiver pc to listen to packets from the detector.
udp_dstip - Destination IP
--------------------------
IP address of interface in receiver pc to listen to packets from detector. If **auto** is used (only when using slsReceiver/ slsMultiReceiver), the IP of **rx_hostname** is picked up.
udp_dstmac - Destination MAC
----------------------------
MAC address of interface in receiver pc to list to packets from detector. Only required when using custom receiver, else slsReceiver/slsMultiReceiver picks it up from **udp_dstip**.

19
docs/src/udpdetspec.rst Normal file
View File

@ -0,0 +1,19 @@
Detector Specific Fields
========================
Eiger
-----
.. table::
+----------+------------------------------+
| detSpec1 | 0x0 |
+----------+------------------------------+
| detSpec2 | 0x0 |
+----------+------------------------------+
| detSpec3 | e14a |
+----------+------------------------------+
| detSpec4 | Round Robin Interface Number |
+----------+------------------------------+

75
docs/src/udpheader.rst Normal file
View File

@ -0,0 +1,75 @@
.. _detector udp header:
Format
=======
The UDP data format for the packets consist of a common header for all detectors, followed by the data for that one packet.
Current Version
---------------------------
**v3.0 (slsDetectorPackage v7.0.0+)**
.. table:: <---------------------------------------------------- 8 bytes ---------------------------------------------------->
:align: center
:widths: 30,30,30,15,15
+---------------------------------------------------------------+
| frameNumber |
+-------------------------------+-------------------------------+
| expLength | packetNumber |
+-------------------------------+-------------------------------+
| **detSpec1** |
+---------------------------------------------------------------+
| timestamp |
+---------------+---------------+---------------+---------------+
| modId | row | column | **detSpec2** |
+---------------+---------------+---------------+-------+-------+
| **detSpec3** | **detSpec4** |detType|version|
+-------------------------------+---------------+-------+-------+
Previous Versions
-----------------
**v2.0 (Package v4.0.0 - 6.x.x)**
.. table:: <---------------------------------------------------- 8 bytes ---------------------------------------------------->
:align: center
:widths: 30,30,30,15,15
+---------------------------------------------------------------+
| frameNumber |
+-------------------------------+-------------------------------+
| expLength | packetNumber |
+-------------------------------+-------------------------------+
| bunchid |
+---------------------------------------------------------------+
| timestamp |
+---------------+---------------+---------------+---------------+
| modId | **row** | **column** | **reserved** |
+---------------+---------------+---------------+-------+-------+
| debug | roundRNumber |detType|version|
+-------------------------------+---------------+-------+-------+
**v1.0 (Package v3.0.0 - 3.1.5)**
.. table:: <---------------------------------------------------- 8 bytes ---------------------------------------------------->
:align: center
:widths: 30,30,30,15,15
+---------------------------------------------------------------+
| frameNumber |
+-------------------------------+-------------------------------+
| expLength | packetNumber |
+-------------------------------+-------------------------------+
| bunchid |
+---------------------------------------------------------------+
| timestamp |
+---------------+---------------+---------------+---------------+
| modId | xCoord | yCoord | zCoord |
+---------------+---------------+---------------+-------+-------+
| debug | roundRNumber |detType|version|
+-------------------------------+---------------+-------+-------+

View File

@ -1,6 +1,6 @@
.. _Virtual Detector Servers:
Detector Simulators
===================
Simulators
===========
Compilation
-----------

View File

@ -1,4 +1,4 @@
/* override table no-wrap */
.wy-table-responsive table td, .wy-table-responsive table th {
white-space: normal;
}
}

View File

@ -228,14 +228,14 @@ int DataStreamer::SendDataHeader(sls_detector_header header, uint32_t size,
zHeader.frameNumber = header.frameNumber;
zHeader.expLength = header.expLength;
zHeader.packetNumber = header.packetNumber;
zHeader.bunchId = header.bunchId;
zHeader.detSpec1 = header.detSpec1;
zHeader.timestamp = header.timestamp;
zHeader.modId = header.modId;
zHeader.row = header.row;
zHeader.column = header.column;
zHeader.reserved = header.reserved;
zHeader.debug = header.debug;
zHeader.roundRNumber = header.roundRNumber;
zHeader.detSpec2 = header.detSpec2;
zHeader.detSpec3 = header.detSpec3;
zHeader.detSpec4 = header.detSpec4;
zHeader.detType = header.detType;
zHeader.version = header.version;
zHeader.flipRows = static_cast<int>(flipRows);

View File

@ -482,7 +482,7 @@ void Listener::CopyPacket(char *dst, char *src, uint32_t dataSize,
sizeof(sls_detector_header));
} else {
dstHeader.detHeader.frameNumber = currentFrameIndex;
dstHeader.detHeader.bunchId = bnum;
dstHeader.detHeader.detSpec1 = bnum;
dstHeader.detHeader.row = row;
dstHeader.detHeader.column = column;
dstHeader.detHeader.detType =

View File

@ -78,18 +78,18 @@ void GetData(slsDetectorDefs::sls_receiver_header &header, char *dataPointer,
PRINT_IN_COLOR(
detectorHeader.modId ? detectorHeader.modId : detectorHeader.row,
"#### %d %d GetData: ####\n"
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %lu"
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tdetSpec1: %lu"
"\t\ttimestamp: %lu\t\tmodId: %u\t\t"
"row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u"
"\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u"
"row: %u\t\tcolumn: %u\t\tdetSpec2: %u\t\tdetSpec3: %u"
"\t\tdetSpec4: %u\t\tdetType: %u\t\tversion: %u"
//"\t\tpacketsMask:%s"
"\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n",
detectorHeader.column, detectorHeader.row,
(long unsigned int)detectorHeader.frameNumber, detectorHeader.expLength,
detectorHeader.packetNumber, (long unsigned int)detectorHeader.bunchId,
detectorHeader.packetNumber, (long unsigned int)detectorHeader.detSpec1,
(long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
detectorHeader.row, detectorHeader.column, detectorHeader.reserved,
detectorHeader.debug, detectorHeader.roundRNumber,
detectorHeader.row, detectorHeader.column, detectorHeader.detSpec2,
detectorHeader.detSpec3, detectorHeader.detSpec4,
detectorHeader.detType, detectorHeader.version,
// header->packetsMask.to_string().c_str(),
((uint8_t)(*((uint8_t *)(dataPointer)))), imageSize);
@ -108,20 +108,19 @@ void GetData(slsDetectorDefs::sls_receiver_header &header, char *dataPointer,
PRINT_IN_COLOR(
detectorHeader.modId ? detectorHeader.modId : detectorHeader.row,
"#### %d GetData: ####\n"
"frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: "
"%llu"
"\t\ttimestamp: %llu\t\tmodId: %u\t\t"
"row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u"
"\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u"
"#### %d %d GetData: ####\n"
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tdetSpec1: %lu"
"\t\ttimestamp: %lu\t\tmodId: %u\t\t"
"row: %u\t\tcolumn: %u\t\tdetSpec2: %u\t\tdetSpec3: %u"
"\t\tdetSpec4: %u\t\tdetType: %u\t\tversion: %u"
//"\t\tpacketsMask:%s"
"\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n",
detectorHeader.row, (long long unsigned int)detectorHeader.frameNumber,
detectorHeader.expLength, detectorHeader.packetNumber,
(long long unsigned int)detectorHeader.bunchId,
(long long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
detectorHeader.row, detectorHeader.column, detectorHeader.reserved,
detectorHeader.debug, detectorHeader.roundRNumber,
detectorHeader.column, detectorHeader.row,
(long unsigned int)detectorHeader.frameNumber, detectorHeader.expLength,
detectorHeader.packetNumber, (long unsigned int)detectorHeader.detSpec1,
(long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
detectorHeader.row, detectorHeader.column, detectorHeader.detSpec2,
detectorHeader.detSpec3, detectorHeader.detSpec4,
detectorHeader.detType, detectorHeader.version,
// header->packetsMask.to_string().c_str(),
*reinterpret_cast<uint8_t *>(dataPointer), modifiedImageSize);

View File

@ -60,14 +60,14 @@ struct zmqHeader {
uint64_t frameNumber{0};
uint32_t expLength{0};
uint32_t packetNumber{0};
uint64_t bunchId{0};
uint64_t detSpec1{0};
uint64_t timestamp{0};
uint16_t modId{0};
uint16_t row{0};
uint16_t column{0};
uint16_t reserved{0};
uint32_t debug{0};
uint16_t roundRNumber{0};
uint16_t detSpec2{0};
uint32_t detSpec3{0};
uint16_t detSpec4{0};
uint8_t detType{0};
uint8_t version{0};
/** if rows of image should be flipped */

View File

@ -45,8 +45,8 @@
#define MAX_UDP_DESTINATION 32
#define SLS_DETECTOR_HEADER_VERSION 0x2
#define SLS_DETECTOR_JSON_HEADER_VERSION 0x4
#define SLS_DETECTOR_HEADER_VERSION 0x3
#define SLS_DETECTOR_JSON_HEADER_VERSION 0x5
// ctb/ moench 1g udp (read from fifo)
#define UDP_PACKET_DATA_BYTES (1344)
@ -113,19 +113,20 @@ class slsDetectorDefs {
/**
@short structure for a Detector Packet or Image Header
Details at https://slsdetectorgroup.github.io/devdoc/udpheader.html
@li frameNumber is the frame number
@li expLength is the subframe number (32 bit eiger) or real time
exposure time in 100ns (others)
@li packetNumber is the packet number
@li bunchId is the bunch id from beamline
@li detSpec1 is detector specific field 1
@li timestamp is the time stamp with 10 MHz clock
@li modId is the unique module id (unique even for left, right, top,
bottom)
@li row is the row index in the complete detector system
@li column is the column index in the complete detector system
@li reserved is reserved
@li debug is for debugging purposes
@li roundRNumber is the round robin set number
@li detSpec2 is detector specific field 2
@li detSpec3 is detector specific field 3
@li detSpec4 is detector specific field 4
@li detType is the detector type see :: detectorType
@li version is the version number of this structure format
*/
@ -134,14 +135,14 @@ class slsDetectorDefs {
uint64_t frameNumber;
uint32_t expLength;
uint32_t packetNumber;
uint64_t bunchId;
uint64_t detSpec1;
uint64_t timestamp;
uint16_t modId;
uint16_t row;
uint16_t column;
uint16_t reserved;
uint32_t debug;
uint16_t roundRNumber;
uint16_t detSpec2;
uint32_t detSpec3;
uint16_t detSpec4;
uint8_t detType;
uint8_t version;
} sls_detector_header;

View File

@ -148,13 +148,13 @@ int ZmqSocket::SendHeader(int index, zmqHeader header) {
<< ", \"frameNumber\":" << header.frameNumber
<< ", \"expLength\":" << header.expLength
<< ", \"packetNumber\":" << header.packetNumber
<< ", \"bunchId\":" << header.bunchId
<< ", \"detSpec1\":" << header.detSpec1
<< ", \"timestamp\":" << header.timestamp
<< ", \"modId\":" << header.modId << ", \"row\":" << header.row
<< ", \"column\":" << header.column
<< ", \"reserved\":" << header.reserved
<< ", \"debug\":" << header.debug
<< ", \"roundRNumber\":" << header.roundRNumber
<< ", \"detSpec2\":" << header.detSpec2
<< ", \"detSpec3\":" << header.detSpec3
<< ", \"detSpec4\":" << header.detSpec4
<< ", \"detType\":" << static_cast<int>(header.detType)
<< ", \"version\":"
<< static_cast<int>(header.version)
@ -270,14 +270,14 @@ int ZmqSocket::ParseHeader(const int index, int length, char *buff,
zHeader.frameNumber = document["frameNumber"].GetUint64();
zHeader.expLength = document["expLength"].GetUint();
zHeader.packetNumber = document["packetNumber"].GetUint();
zHeader.bunchId = document["bunchId"].GetUint64();
zHeader.detSpec1 = document["detSpec1"].GetUint64();
zHeader.timestamp = document["timestamp"].GetUint64();
zHeader.modId = document["modId"].GetUint();
zHeader.row = document["row"].GetUint();
zHeader.column = document["column"].GetUint();
zHeader.reserved = document["reserved"].GetUint();
zHeader.debug = document["debug"].GetUint();
zHeader.roundRNumber = document["roundRNumber"].GetUint();
zHeader.detSpec2 = document["detSpec2"].GetUint();
zHeader.detSpec3 = document["detSpec3"].GetUint();
zHeader.detSpec4 = document["detSpec4"].GetUint();
zHeader.detType = document["detType"].GetUint();
zHeader.version = document["version"].GetUint();