diff --git a/RELEASE.txt b/RELEASE.txt index 1911108dd..724162c55 100644 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -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 ================== diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 7f3fa8c04..92c682694 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -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}) diff --git a/docs/src/index.rst b/docs/src/index.rst index 65a3d6d8b..d19592e4d 100644 --- a/docs/src/index.rst +++ b/docs/src/index.rst @@ -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 diff --git a/docs/src/receivers.rst b/docs/src/receivers.rst index b7e8e45bf..29937cf84 100644 --- a/docs/src/receivers.rst +++ b/docs/src/receivers.rst @@ -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 ` Custom Receiver ---------------- diff --git a/docs/src/servers.rst b/docs/src/servers.rst index 0e55bd2c0..bcf94c156 100644 --- a/docs/src/servers.rst +++ b/docs/src/servers.rst @@ -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 diff --git a/docs/src/serverupgrade.rst b/docs/src/serverupgrade.rst index d7e7a3510..c6fe1675a 100644 --- a/docs/src/serverupgrade.rst +++ b/docs/src/serverupgrade.rst @@ -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. \ No newline at end of file diff --git a/docs/src/udpconfig.rst b/docs/src/udpconfig.rst new file mode 100644 index 000000000..457d1f381 --- /dev/null +++ b/docs/src/udpconfig.rst @@ -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**. + diff --git a/docs/src/udpdetspec.rst b/docs/src/udpdetspec.rst new file mode 100644 index 000000000..df542242b --- /dev/null +++ b/docs/src/udpdetspec.rst @@ -0,0 +1,19 @@ +Detector Specific Fields +======================== + +Eiger +----- + +.. table:: + + +----------+------------------------------+ + | detSpec1 | 0x0 | + +----------+------------------------------+ + | detSpec2 | 0x0 | + +----------+------------------------------+ + | detSpec3 | e14a | + +----------+------------------------------+ + | detSpec4 | Round Robin Interface Number | + +----------+------------------------------+ + + diff --git a/docs/src/udpheader.rst b/docs/src/udpheader.rst new file mode 100644 index 000000000..15d0b0a34 --- /dev/null +++ b/docs/src/udpheader.rst @@ -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| + +-------------------------------+---------------+-------+-------+ + diff --git a/docs/src/virtualserver.rst b/docs/src/virtualserver.rst index 5ee5c4026..66d66ab74 100644 --- a/docs/src/virtualserver.rst +++ b/docs/src/virtualserver.rst @@ -1,6 +1,6 @@ .. _Virtual Detector Servers: -Detector Simulators -=================== +Simulators +=========== Compilation ----------- diff --git a/docs/static/extra.css b/docs/static/extra.css index 62e8dbd68..c621c7b64 100644 --- a/docs/static/extra.css +++ b/docs/static/extra.css @@ -1,4 +1,4 @@ /* override table no-wrap */ .wy-table-responsive table td, .wy-table-responsive table th { white-space: normal; -} \ No newline at end of file +} diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index e02ebbe75..2ad48ce92 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -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(flipRows); diff --git a/slsReceiverSoftware/src/Listener.cpp b/slsReceiverSoftware/src/Listener.cpp index 775af6c63..1c970e21e 100644 --- a/slsReceiverSoftware/src/Listener.cpp +++ b/slsReceiverSoftware/src/Listener.cpp @@ -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 = diff --git a/slsReceiverSoftware/src/MultiReceiverApp.cpp b/slsReceiverSoftware/src/MultiReceiverApp.cpp index cb91eb738..e1cf19832 100644 --- a/slsReceiverSoftware/src/MultiReceiverApp.cpp +++ b/slsReceiverSoftware/src/MultiReceiverApp.cpp @@ -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(dataPointer), modifiedImageSize); diff --git a/slsSupportLib/include/sls/ZmqSocket.h b/slsSupportLib/include/sls/ZmqSocket.h index 9bf3afdbf..77cd54f9a 100644 --- a/slsSupportLib/include/sls/ZmqSocket.h +++ b/slsSupportLib/include/sls/ZmqSocket.h @@ -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 */ diff --git a/slsSupportLib/include/sls/sls_detector_defs.h b/slsSupportLib/include/sls/sls_detector_defs.h index df2fc3d8f..99b31ba13 100644 --- a/slsSupportLib/include/sls/sls_detector_defs.h +++ b/slsSupportLib/include/sls/sls_detector_defs.h @@ -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; diff --git a/slsSupportLib/src/ZmqSocket.cpp b/slsSupportLib/src/ZmqSocket.cpp index 4082f43f0..2711a2b3e 100644 --- a/slsSupportLib/src/ZmqSocket.cpp +++ b/slsSupportLib/src/ZmqSocket.cpp @@ -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(header.detType) << ", \"version\":" << static_cast(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();