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 <vector>
5#include <cstdint>
6
7#include <boost/endian/arithmetic.hpp>
8#include <boost/asio.hpp>
9
10#include "logging/Logging.hpp"
11
12namespace dunedaq {
13
14
17 AMCProtocolIssue,
18 prefix << "AMCProtocolResponse: " << text,
19 ((std::string)prefix)((std::string)text)
20);
21
24 AMCResponseErr,
25 prefix << "Received Error packet:" << "\n" << "Error code:" << code << "\nMessage: " << text,
26 ((std::string)prefix)((uint16_t)code)((std::string)text)
27);
28
31 AMCUnknownOpCode,
32 prefix << "Unknown opcode recived: " << opcode,
33 ((std::string)prefix)((uint16_t)opcode)
34);
35
36namespace tdemodules {
37
39 public:
40 enum TFTPOpCode : uint16_t {
41 RRQ = 1,
42 WRQ = 2,
43 DAT = 3,
44 ACK = 4,
45 ERR = 5,
46 };
47
48
49 #pragma pack(push, 1)
51 boost::endian::big_uint16_t opcode;
52 boost::endian::big_uint16_t block;
53 };
54
56 boost::endian::big_uint16_t opcode;
57 boost::endian::big_uint16_t error_code;
58 };
59
61 boost::endian::big_uint16_t opcode;
62 boost::endian::big_uint16_t block;
63 };
64 #pragma pack(pop)
65
66
67
68 AMCProtocolClient(const std::string& server_ip, uint16_t port);
69
70 std::vector<uint8_t> send_request(TFTPOpCode opcode, const std::vector<uint8_t>& payload);
71
72 std::vector<uint8_t> send_rrq(const std::vector<uint8_t>& payload) {
73 return send_request(RRQ, payload);
74 }
75
76 std::vector<uint8_t> send_wrq(const std::vector<uint8_t>& payload) {
77 return send_request(WRQ, payload);
78 }
79
80 private:
81
82 std::string m_host;
83 uint16_t m_port;
84 uint16_t m_timeout;
85
86 const std::string m_log_prefix = "AMC with ip:" + m_host + " and port: " + std::to_string(m_port) + " | ";
87
88 boost::asio::io_context m_io_context;
89 boost::asio::ip::udp::socket m_socket;
90 boost::asio::ip::udp::endpoint m_server_endpoint;
91
92 };
93
94} // namespace tdemodules
95} // namespace dunedaq
96
97#endif // __DUNEDAQ_TDEMODULES_INCLUDE_AMCPROTOCOLCLIENT_HPP___
#define ERS_DECLARE_ISSUE(namespace_name, class_name, message, attributes)
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
Including Qt Headers.