From 0c3387a05aa2fd89bd3411a3cc80e58fbdfc89d7 Mon Sep 17 00:00:00 2001 From: Andrej Babic Date: Fri, 17 Apr 2020 19:14:02 +0200 Subject: [PATCH] Add sf_udprecv test program --- sf-buffer/CMakeLists.txt | 13 ++++++++ sf-buffer/src/sf_udprecv.cpp | 64 ++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 sf-buffer/src/sf_udprecv.cpp diff --git a/sf-buffer/CMakeLists.txt b/sf-buffer/CMakeLists.txt index 43c5165..5dac5c4 100644 --- a/sf-buffer/CMakeLists.txt +++ b/sf-buffer/CMakeLists.txt @@ -14,5 +14,18 @@ target_link_libraries(sf-buffer boost_system pthread) +add_executable(sf-udprecv src/sf_udprecv.cpp) + +target_link_libraries(sf-udprecv + core-buffer + core-writer + external + zmq + hdf5 + hdf5_hl + hdf5_cpp + boost_system + pthread) + enable_testing() add_subdirectory(test/) \ No newline at end of file diff --git a/sf-buffer/src/sf_udprecv.cpp b/sf-buffer/src/sf_udprecv.cpp new file mode 100644 index 0000000..d5aa00d --- /dev/null +++ b/sf-buffer/src/sf_udprecv.cpp @@ -0,0 +1,64 @@ +#include +#include +#include +#include "jungfrau.hpp" + + +using namespace std; + +int main (int argc, char *argv[]) { + if (argc != 4) { + cout << endl; + cout << "Usage: sf_buffer [device_name] [udp_port] [root_folder]"; + cout << endl; + cout << "\tdevice_name: Name to write to disk."; + cout << "\tudp_port: UDP port to connect to." << endl; + cout << "\troot_folder: FS root folder." << endl; + cout << endl; + + exit(-1); + } + + string device_name = string(argv[1]); + int udp_port = atoi(argv[2]); + string root_folder = string(argv[3]); + + UdpReceiver receiver; + receiver.bind(udp_port); + + jungfrau_packet recv_buffer; + + uint64_t current_pulse_id = 0; + uint64_t n_recv_packets = 0; + uint64_t n_missing_packets = 0; + uint16_t loop_counter = 0; + + while (true) { + if (receiver.receive(&recv_buffer, sizeof(jungfrau_packet))) { + + loop_counter++; + + if (recv_buffer.bunchid != current_pulse_id) { + if (current_pulse_id != 0) { + n_missing_packets += (128-n_recv_packets); + } + n_recv_packets = 0; + current_pulse_id = recv_buffer.bunchid; + } + + n_recv_packets++; + + if (loop_counter == 1000) { + + using namespace date; + using namespace chrono; + + cout << system_clock::now(); + cout << " miss " << n_missing_packets; + cout << endl; + + loop_counter = 0; + } + } + } +}