DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
AMCProtocolClient.hpp
Go to the documentation of this file.
1#ifndef __DUNEDAQ_TDEMODULES_INCLUDE_AMCPROTOCOLCLIENT_HPP___
2#define __DUNEDAQ_TDEMODULES_INCLUDE_AMCPROTOCOLCLIENT_HPP___
3
4#include <cstdint>
5#include <vector>
6
7#include <boost/asio.hpp>
8#include <boost/endian/arithmetic.hpp>
9
10#include "logging/Logging.hpp"
11
12namespace dunedaq {
13
15 AMCProtocolIssue,
16 prefix << "AMCProtocolResponse: " << text,
17 ((std::string)prefix)((std::string)text));
18
20 AMCResponseErr,
21 prefix << "Received Error packet:" << "\n"
22 << "Error code:" << code << "\nMessage: " << text,
23 ((std::string)prefix)((uint16_t)code)((std::string)text));
24
26 AMCUnknownOpCode,
27 prefix << "Unknown opcode recived: " << opcode,
28 ((std::string)prefix)((uint16_t)opcode));
29
30namespace tdemodules {
31
33{
34public:
35 enum TFTPOpCode : uint16_t
36 {
37 RRQ = 1,
38 WRQ = 2,
39 DAT = 3,
40 ACK = 4,
41 ERR = 5,
42 };
43
44#pragma pack(push, 1)
46 {
47 boost::endian::big_uint16_t opcode;
48 boost::endian::big_uint16_t block;
49 };
50
52 {
53 boost::endian::big_uint16_t opcode;
54 boost::endian::big_uint16_t error_code;
55 };
56
58 {
59 boost::endian::big_uint16_t opcode;
60 boost::endian::big_uint16_t block;
61 };
62#pragma pack(pop)
63
64 AMCProtocolClient(const std::string& server_ip, uint16_t port);
65
66 std::vector<uint8_t> send_request(TFTPOpCode opcode, const std::vector<uint8_t>& payload);
67
68 std::vector<uint8_t> send_rrq(const std::vector<uint8_t>& payload) { return send_request(RRQ, payload); }
69
70 std::vector<uint8_t> send_wrq(const std::vector<uint8_t>& payload) { return send_request(WRQ, payload); }
71
72private:
73 std::string m_host;
74 uint16_t m_port;
75 uint16_t m_timeout;
76
77 const std::string m_log_prefix = "AMC with ip:" + m_host + " and port: " + std::to_string(m_port) + " | ";
78
79 boost::asio::io_context m_io_context;
80 boost::asio::ip::udp::socket m_socket;
81 boost::asio::ip::udp::endpoint m_server_endpoint;
82};
83
84} // namespace tdemodules
85} // namespace dunedaq
86
87#endif // __DUNEDAQ_TDEMODULES_INCLUDE_AMCPROTOCOLCLIENT_HPP___
std::vector< uint8_t > send_wrq(const std::vector< uint8_t > &payload)
AMCProtocolClient(const std::string &server_ip, uint16_t port)
std::vector< uint8_t > send_request(TFTPOpCode opcode, const std::vector< uint8_t > &payload)
boost::asio::ip::udp::endpoint m_server_endpoint
std::vector< uint8_t > send_rrq(const std::vector< uint8_t > &payload)
boost::asio::ip::udp::socket m_socket
The DUNE-DAQ namespace.
ERS_DECLARE_ISSUE(cibmodules, CIBCommunicationError, " CIB Hardware Communication Error: "<< descriptor,((std::string) descriptor)) ERS_DECLARE_ISSUE(cibmodules