DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
daphnemodules
src
DaphneV2Interface.hpp
Go to the documentation of this file.
1
11
12
#ifndef DAPHNEMODULES_SRC_DAPHNEV2INTERFACE_HPP_
13
#define DAPHNEMODULES_SRC_DAPHNEV2INTERFACE_HPP_
14
15
#include <arpa/inet.h>
16
#include <cstring>
17
#include <functional>
18
#include <memory>
19
#include <mutex>
20
#include <netinet/in.h>
21
#include <sys/socket.h>
22
#include <unistd.h>
23
#include <vector>
24
25
#include "
logging/Logging.hpp
"
// NOTE: if ISSUES ARE DECLARED BEFORE include logging/Logging.hpp, TLOG_DEBUG<<issue wont work.
26
#include <
ers/ers.hpp
>
27
28
#include "
daphnemodules/CommonIssues.hpp
"
29
30
namespace
dunedaq
{
31
32
ERS_DECLARE_ISSUE
(
daphnemodules
, SocketCreationError,
"Failed to create a socket"
,
ERS_EMPTY
)
33
34
ERS_DECLARE_ISSUE
(
daphnemodules
,
35
FailedPing,
36
"Failed to ping daphne board at "
<< ip <<
':'
<< port,
37
((
std
::
string
)ip)((
int
)port))
38
39
ERS_DECLARE_ISSUE
(
daphnemodules
,
FailedSocketInteraction
,
"Failed to call "
<< command, ((
std
::
string
)command))
40
41
ERS_DECLARE_ISSUE
(
daphnemodules
,
42
CommandTimeout,
43
"Command "
<< command <<
" timed out after "
<< timeout_us <<
" microseconds"
,
44
((
std
::
string
)command)((
unsigned
int
)timeout_us))
45
46
ERS_DECLARE_ISSUE
(
daphnemodules
,
47
SocketTimeout,
48
"Socket timed out after "
<< timeout_us <<
" microseconds"
,
49
((
unsigned
int
)timeout_us))
50
51
}
// dunedaq namespace
52
53
namespace
dunedaq
::
daphnemodules
{
54
55
struct
command_result
56
{
57
std::string
command
;
58
std::string
result
;
59
};
60
61
class
DaphneV2Interface
62
{
63
64
public
:
65
DaphneV2Interface
(
const
char
* ipaddr,
int
port, std::chrono::milliseconds timeout = std::chrono::milliseconds(500));
66
67
~DaphneV2Interface
()
68
{
69
if
(
m_connection_id
> 0)
70
close
();
71
}
72
73
DaphneV2Interface
(
const
DaphneV2Interface
&) =
delete
;
74
DaphneV2Interface
&
operator=
(
const
DaphneV2Interface
&) =
delete
;
75
DaphneV2Interface
(
DaphneV2Interface
&&) =
delete
;
76
DaphneV2Interface
&
operator=
(
DaphneV2Interface
&&) =
delete
;
77
78
std::vector<uint64_t>
read_register
(uint64_t addr, uint8_t
size
)
const
{
return
read
(0x00, addr,
size
); }
79
void
write_register
(uint64_t addr, std::vector<uint64_t>&& data)
const
{
write
(0x01, addr, std::move(data)); }
80
81
std::vector<uint64_t>
read_buffer
(uint64_t addr, uint8_t
size
)
const
{
return
read
(0x08, addr,
size
); }
82
void
write_buffer
(uint64_t addr, std::vector<uint64_t>&& data)
const
{
write
(0x09, addr, std::move(data)); }
83
84
bool
validate_connection()
const
;
85
86
command_result
send_command(std::string cmd)
const
;
87
88
// this will throw if it fails
89
command_result
send_command_retry(std::string cmd,
size_t
retry = std::numeric_limits<size_t>::max())
const
;
90
91
// this will try until success but it won't thrwo if can retry become false
92
command_result
send_command_interruptible(std::string cmd, std::function<
bool
()> can_retry)
const
;
93
94
protected
:
95
void
close();
96
97
void
write(uint8_t command_id, uint64_t addr, std::vector<uint64_t>&& data)
const
;
98
std::vector<uint64_t> read(uint8_t command_id, uint64_t addr, uint8_t
size
)
const
;
99
100
private
:
101
std::string
m_ip
;
102
int
m_connection_id
= -1;
103
sockaddr_in
m_target
;
104
std::chrono::milliseconds
m_timeout
{ 5 };
105
mutable
std::mutex
m_access_mutex
;
106
mutable
std::mutex
m_command_mutex
;
107
};
108
109
}
// namespce dunedaq::daphnemodules
110
111
#endif
// DAPHNEMODULES_SRC_DAPHNEV2INTERFACE_HPP_
ERS_EMPTY
#define ERS_EMPTY
Definition
IssueDeclarationMacro.hpp:23
dunedaq::daphnemodules::DaphneV2Interface::write_register
void write_register(uint64_t addr, std::vector< uint64_t > &&data) const
Definition
DaphneV2Interface.hpp:79
dunedaq::daphnemodules::DaphneV2Interface::m_access_mutex
std::mutex m_access_mutex
Definition
DaphneV2Interface.hpp:105
dunedaq::daphnemodules::DaphneV2Interface::DaphneV2Interface
DaphneV2Interface(DaphneV2Interface &&)=delete
dunedaq::daphnemodules::DaphneV2Interface::~DaphneV2Interface
~DaphneV2Interface()
Definition
DaphneV2Interface.hpp:67
dunedaq::daphnemodules::DaphneV2Interface::write
void write(uint8_t command_id, uint64_t addr, std::vector< uint64_t > &&data) const
Definition
DaphneV2Interface.cpp:230
dunedaq::daphnemodules::DaphneV2Interface::operator=
DaphneV2Interface & operator=(DaphneV2Interface &&)=delete
dunedaq::daphnemodules::DaphneV2Interface::m_ip
std::string m_ip
Definition
DaphneV2Interface.hpp:101
dunedaq::daphnemodules::DaphneV2Interface::close
void close()
Definition
DaphneV2Interface.cpp:37
dunedaq::daphnemodules::DaphneV2Interface::read_buffer
std::vector< uint64_t > read_buffer(uint64_t addr, uint8_t size) const
Definition
DaphneV2Interface.hpp:81
dunedaq::daphnemodules::DaphneV2Interface::m_connection_id
int m_connection_id
Definition
DaphneV2Interface.hpp:102
dunedaq::daphnemodules::DaphneV2Interface::read
std::vector< uint64_t > read(uint8_t command_id, uint64_t addr, uint8_t size) const
Definition
DaphneV2Interface.cpp:163
dunedaq::daphnemodules::DaphneV2Interface::write_buffer
void write_buffer(uint64_t addr, std::vector< uint64_t > &&data) const
Definition
DaphneV2Interface.hpp:82
dunedaq::daphnemodules::DaphneV2Interface::DaphneV2Interface
DaphneV2Interface(const DaphneV2Interface &)=delete
dunedaq::daphnemodules::DaphneV2Interface::m_command_mutex
std::mutex m_command_mutex
Definition
DaphneV2Interface.hpp:106
dunedaq::daphnemodules::DaphneV2Interface::DaphneV2Interface
DaphneV2Interface(const char *ipaddr, int port, std::chrono::milliseconds timeout=std::chrono::milliseconds(500))
Definition
DaphneV2Interface.cpp:15
dunedaq::daphnemodules::DaphneV2Interface::read_register
std::vector< uint64_t > read_register(uint64_t addr, uint8_t size) const
Definition
DaphneV2Interface.hpp:78
dunedaq::daphnemodules::DaphneV2Interface::operator=
DaphneV2Interface & operator=(const DaphneV2Interface &)=delete
dunedaq::daphnemodules::DaphneV2Interface::m_timeout
std::chrono::milliseconds m_timeout
Definition
DaphneV2Interface.hpp:104
dunedaq::daphnemodules::DaphneV2Interface::m_target
sockaddr_in m_target
Definition
DaphneV2Interface.hpp:103
CommonIssues.hpp
ers.hpp
Logging.hpp
dunedaq::daphnemodules
Definition
DaphneV2Interface.hpp:53
dunedaq
The DUNE-DAQ namespace.
Definition
cib_utilities.cpp:5
dunedaq::FailedSocketInteraction
FailedSocketInteraction
Definition
DaphneV2Interface.hpp:39
dunedaq::ERS_DECLARE_ISSUE
ERS_DECLARE_ISSUE(cibmodules, CIBCommunicationError, " CIB Hardware Communication Error: "<< descriptor,((std::string) descriptor)) ERS_DECLARE_ISSUE(cibmodules
dunedaq::size
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Definition
FelixIssues.hpp:30
std
Definition
SchemaUtils.hpp:118
dunedaq::daphnemodules::command_result
Definition
DaphneV2Interface.hpp:56
dunedaq::daphnemodules::command_result::result
std::string result
Definition
DaphneV2Interface.hpp:58
dunedaq::daphnemodules::command_result::command
std::string command
Definition
DaphneV2Interface.hpp:57
Generated on
for DUNE-DAQ by
1.18.0