eiger_packet definitions and initial related changes

This commit is contained in:
2021-01-27 16:47:49 +00:00
parent dd52eea55b
commit 11cb0eb3ce
13 changed files with 130 additions and 15 deletions
+3
View File
@@ -0,0 +1,3 @@
[submodule "slsDetectorPackage"]
path = slsDetectorPackage
url = https://github.com/slsdetectorgroup/slsDetectorPackage.git
+38
View File
@@ -0,0 +1,38 @@
#ifndef EIGER_H
#define EIGER_H
#include <cstdint>
#define EIGER_N_MODULES 1
#define EIGER_BYTES_PER_PACKET 1072
#define EIGER_DATA_BYTES_PER_PACKET 1024
#define EIGER_N_PACKETS_PER_FRAME 128
#define EIGER_DATA_BYTES_PER_FRAME 131072
// 48 bytes + 8192 bytes = 8240 bytes
#pragma pack(push)
#pragma pack(2)
struct eiger_packet {
uint64_t framenum;
uint32_t exptime;
uint32_t packetnum;
double bunchid;
uint64_t timestamp;
uint16_t moduleID;
uint16_t xCoord;
uint16_t yCoord;
uint16_t zCoord;
uint32_t debug;
uint16_t roundRobin;
uint8_t detectortype;
uint8_t headerVersion;
char data[EIGER_DATA_BYTES_PER_PACKET];
};
#pragma pack(pop)
#endif
+2 -2
View File
@@ -2,7 +2,7 @@
#define SF_DAQ_BUFFER_FORMATS_HPP
#include "buffer_config.hpp"
#include "jungfrau.hpp"
#include "eiger.hpp"
#pragma pack(push)
#pragma pack(1)
@@ -27,7 +27,7 @@ struct ImageMetadata {
#pragma pack(pop)
struct ModuleFrameBuffer {
ModuleFrame module[JUNGFRAU_N_MODULES];
ModuleFrame module[EIGER_N_MODULES];
};
#pragma pack(push)
+2 -1
View File
@@ -6,6 +6,7 @@
#include "RamBuffer.hpp"
#include "buffer_config.hpp"
using namespace std;
using namespace buffer_config;
@@ -100,7 +101,7 @@ char* RamBuffer::read_image(const uint64_t pulse_id,
ModuleFrame *frame_meta = src_meta + i_module;
auto is_good_frame =
frame_meta->n_recv_packets == JF_N_PACKETS_PER_FRAME;
frame_meta->n_recv_packets == EIGER_N_PACKETS_PER_FRAME;
if (!is_good_frame) {
is_good_image = false;
+2 -2
View File
@@ -13,7 +13,7 @@ TEST(RamBuffer, simple_store)
frame_meta.pulse_id = 123523;
frame_meta.daq_rec = 1234;
frame_meta.frame_index = 12342300;
frame_meta.n_recv_packets = JF_N_PACKETS_PER_FRAME;
frame_meta.n_recv_packets = EIGER_N_PACKETS_PER_FRAME;
auto frame_buffer = make_unique<uint16_t[]>(MODULE_N_PIXELS);
@@ -25,7 +25,7 @@ TEST(RamBuffer, simple_store)
for (int i_module=0; i_module<n_modules; i_module++) {
frame_meta.module_id = i_module;
buffer.write_frame(&frame_meta, (char *) (frame_buffer.get()));
buffer.write_frame(frame_meta, (char *) (frame_buffer.get()));
}
ImageMetadata image_meta;
+8
View File
@@ -0,0 +1,8 @@
hostname localhost:2050+
0:udp_dstport 50100
0:udp_dstport2 50101
0:udp_dstip 127.0.0.1
0:udp_dstmac 90:1b:0e:19:1c:ae
0:udp_srcip 129.129.130.177
0:udp_srcmac 90:1b:0e:19:1c:ae
+5
View File
@@ -0,0 +1,5 @@
{
"detector_name": "Eiger",
"n_modules": 1,
"start_udp_port": 50100
}
+30
View File
@@ -0,0 +1,30 @@
#!/bin/bash
# usage ./start_eiger_detector.sh Eiger 1
if [ $# -lt 1 ]
then
echo "Usage : $0 DETECTOR_NAME <number_of_cycles>"
echo " DETECTOR_NAME: Eiger..."
echo " number_of_cycles : optional, default 100"
exit
fi
SLS_DET_PACKAGE_PATH='/home/hax_l/software/sf_daq_buffer/slsDetectorPackage/build/bin/'
DETECTOR=$1
n_cycles=10
if [ $# == 2 ]
then
n_cycles=$2
fi
${SLS_DET_PACKAGE_PATH}sls_detector_put timing trigger
${SLS_DET_PACKAGE_PATH}sls_detector_put triggers ${n_cycles}
${SLS_DET_PACKAGE_PATH}sls_detector_put exptime 0.000005
${SLS_DET_PACKAGE_PATH}sls_detector_put frames 1
${SLS_DET_PACKAGE_PATH}sls_detector_put dr 16
#sls_detector_put ${D}-clearbit to 0x5d 0 # normal mode, not highG0
${SLS_DET_PACKAGE_PATH}sls_detector_put start
echo "Now start trigger"
+22
View File
@@ -0,0 +1,22 @@
#!/bin/bash
# usage ./start_eiger_detector.sh Eiger 1
if [ $# -lt 1 ]
then
echo "Usage : $0 <port>"
echo " DETECTOR_NAME: Eiger"
echo " tcp port : optional, default 2000"
exit
fi
SLS_DET_PACKAGE_PATH='/home/hax_l/software/sf_daq_buffer/slsDetectorPackage/build/bin/'
port=2000
if [ $# == 2 ]
then
port=$1
fi
echo "Starting the server..."
${SLS_DET_PACKAGE_PATH}eigerDetectorServerMaster_virtual -p port
+1 -1
View File
@@ -11,7 +11,7 @@ class FrameUdpReceiver {
PacketUdpReceiver udp_receiver_;
jungfrau_packet packet_buffer_[buffer_config::BUFFER_UDP_N_RECV_MSG];
eiger_packet packet_buffer_[buffer_config::BUFFER_UDP_N_RECV_MSG];
iovec recv_buff_ptr_[buffer_config::BUFFER_UDP_N_RECV_MSG];
mmsghdr msgs_[buffer_config::BUFFER_UDP_N_RECV_MSG];
sockaddr_in sock_from_[buffer_config::BUFFER_UDP_N_RECV_MSG];
+2 -2
View File
@@ -25,8 +25,8 @@ void FrameStats::reset_counters()
void FrameStats::record_stats(const ModuleFrame &meta)
{
if (meta.n_recv_packets < JF_N_PACKETS_PER_FRAME) {
n_missed_packets_ += JF_N_PACKETS_PER_FRAME - meta.n_recv_packets;
if (meta.n_recv_packets < EIGER_N_PACKETS_PER_FRAME) {
n_missed_packets_ += EIGER_N_PACKETS_PER_FRAME - meta.n_recv_packets;
n_corrupted_frames_++;
}
+14 -7
View File
@@ -1,6 +1,9 @@
#include <cstring>
#include <jungfrau.hpp>
// #include <jungfrau.hpp>
#include <eiger.hpp>
#include "FrameUdpReceiver.hpp"
#include <ostream>
#include <iostream>
using namespace std;
using namespace buffer_config;
@@ -14,7 +17,7 @@ FrameUdpReceiver::FrameUdpReceiver(
for (int i = 0; i < BUFFER_UDP_N_RECV_MSG; i++) {
recv_buff_ptr_[i].iov_base = (void*) &(packet_buffer_[i]);
recv_buff_ptr_[i].iov_len = sizeof(jungfrau_packet);
recv_buff_ptr_[i].iov_len = sizeof(eiger_packet);
msgs_[i].msg_hdr.msg_iov = &recv_buff_ptr_[i];
msgs_[i].msg_hdr.msg_iovlen = 1;
@@ -40,11 +43,11 @@ inline void FrameUdpReceiver::copy_packet_to_buffers(
ModuleFrame& metadata, char* frame_buffer, const int i_packet)
{
size_t frame_buffer_offset =
JUNGFRAU_DATA_BYTES_PER_PACKET * packet_buffer_[i_packet].packetnum;
EIGER_DATA_BYTES_PER_PACKET * packet_buffer_[i_packet].packetnum;
memcpy(
(void*) (frame_buffer + frame_buffer_offset),
packet_buffer_[i_packet].data,
JUNGFRAU_DATA_BYTES_PER_PACKET);
EIGER_DATA_BYTES_PER_PACKET);
metadata.n_recv_packets++;
}
@@ -73,10 +76,10 @@ inline uint64_t FrameUdpReceiver::process_packets(
}
copy_packet_to_buffers(metadata, frame_buffer, i_packet);
// Last frame packet received. Frame finished.
if (packet_buffer_[i_packet].packetnum ==
JF_N_PACKETS_PER_FRAME - 1)
EIGER_N_PACKETS_PER_FRAME - 1)
{
// Buffer is loaded only if this is not the last message.
if (i_packet+1 != packet_buffer_n_packets_) {
@@ -86,6 +89,10 @@ inline uint64_t FrameUdpReceiver::process_packets(
// If i_packet is the last packet the buffer is empty.
} else {
cout << "[FrameUdpReceiver::process_packets] Received final packet of frame: ";
cout << packet_buffer_[i_packet].framenum;
cout << endl;
packet_buffer_loaded_ = false;
packet_buffer_offset_ = 0;
}
@@ -106,7 +113,7 @@ uint64_t FrameUdpReceiver::get_frame_from_udp(
// Reset the metadata and frame buffer for the next frame.
metadata.pulse_id = 0;
metadata.n_recv_packets = 0;
memset(frame_buffer, 0, JUNGFRAU_DATA_BYTES_PER_FRAME);
memset(frame_buffer, 0, EIGER_DATA_BYTES_PER_FRAME);
// Happens when last packet from previous frame was missed.
if (packet_buffer_loaded_) {
Submodule slsDetectorPackage added at 64de9f3ad0