Files
Jungfraujoch/tools/jfjoch_udp_simulator.cpp
Filip Leonarski 1757d42182 Initial commit
Signed-off-by: Filip Leonarski <filip.leonarski@psi.ch>
2023-04-06 11:17:59 +02:00

56 lines
1.6 KiB
C++

// Copyright (2019-2022) Paul Scherrer Institute
// SPDX-License-Identifier: GPL-3.0-or-later
#include "UDPSimulator.h"
#include <chrono>
#include <fstream>
#include "../common/Logger.h"
#include "../common/Definitions.h"
int main(int argc, char **argv) {
Logger logger("jfjoch_udp_simulator");
if ((argc < 2) || (argc > 5)) {
logger.Error("Usage ./jfjoch_udp_simulator <IPv4 address> {<# of frames> <# of modules> <content file>}");
exit(EXIT_FAILURE);
}
const std::string ipv4_addr(argv[1]);
logger.Info("IPv4 to send: {}", ipv4_addr);
uint64_t nframes = 1;
if (argc == 3)
nframes = std::strtol(argv[2], nullptr, 10);
logger.Info("Frames to send: {}", nframes);
const std::vector<uint16_t> image(RAW_MODULE_SIZE, 0);
if (argc == 4) {
std::fstream file(argv[3], std::fstream::in | std::fstream::binary);
if (file.is_open())
file.read((char *) image.data(), RAW_MODULE_SIZE * sizeof(uint16_t));
else {
logger.Error("Cannot open file {}", argv[4]);
exit(EXIT_FAILURE);
}
logger.Info("Loaded file {}", argv[4]);
}
logger.Info("Starting...");
auto start_time = std::chrono::system_clock::now();
UDPSimulator simulator(image);
for (int i = 0 ; i < nframes; i++)
simulator.SendImage(ipv4_addr, i + 1, 0);
auto end_time = std::chrono::system_clock::now();
logger.Info(" ... done");
auto elapsed = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
logger.Info("Performance {:.0f} Hz", static_cast<double>(nframes*1000*1000)/static_cast<double>(elapsed.count()));
}