DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
I2CSlave.cpp
Go to the documentation of this file.
1
14#include "timing/I2CSlave.hpp"
15
16#include "ers/ers.hpp"
19#include "timing/toolbox.hpp"
20
21#include <boost/lexical_cast.hpp>
22#include <boost/range/adaptor/map.hpp>
23#include <boost/range/algorithm/copy.hpp>
24#include <boost/unordered/unordered_map.hpp>
25
26#include <string>
27#include <vector>
28
29namespace dunedaq {
30namespace timing {
31
32//-----------------------------------------------------------------------------
33I2CSlave::I2CSlave(const I2CMasterNode* i2c_master, uint8_t i2c_device_address) // NOLINT(build/unsigned)
34 : m_i2c_master(i2c_master)
35 , m_i2c_device_address(i2c_device_address)
36{}
37//-----------------------------------------------------------------------------
38
39//-----------------------------------------------------------------------------
41//-----------------------------------------------------------------------------
42
43// comodity functions
44//-----------------------------------------------------------------------------
45uint8_t // NOLINT(build/unsigned)
46I2CSlave::read_i2c(uint32_t i2c_device_address, uint32_t i2c_reg_address) const // NOLINT(build/unsigned)
47{
48 return m_i2c_master->read_i2c(i2c_device_address, i2c_reg_address);
49}
50//-----------------------------------------------------------------------------
51
52//-----------------------------------------------------------------------------
53uint8_t // NOLINT(build/unsigned)
54I2CSlave::read_i2c(uint32_t i2c_reg_address) const // NOLINT(build/unsigned)
55{
56 return m_i2c_master->read_i2c(m_i2c_device_address, i2c_reg_address);
57}
58//-----------------------------------------------------------------------------
59
60//-----------------------------------------------------------------------------
61uint8_t // NOLINT(build/unsigned)
62I2CSlave::read_i2c_atomic(uint32_t i2c_device_address, uint32_t i2c_reg_address) const // NOLINT(build/unsigned)
63{
64 return m_i2c_master->read_i2c(i2c_device_address, i2c_reg_address, true);
65}
66//-----------------------------------------------------------------------------
67
68//-----------------------------------------------------------------------------
69uint8_t // NOLINT(build/unsigned)
70I2CSlave::read_i2c_atomic(uint32_t i2c_reg_address) const // NOLINT(build/unsigned)
71{
72 return m_i2c_master->read_i2c(m_i2c_device_address, i2c_reg_address, true);
73}
74//-----------------------------------------------------------------------------
75
76//-----------------------------------------------------------------------------
77void
78I2CSlave::write_i2c(uint32_t i2c_device_address, // NOLINT(build/unsigned)
79 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
80 uint8_t data, // NOLINT(build/unsigned)
81 bool send_stop) const
82{
83 m_i2c_master->write_i2c(i2c_device_address, i2c_reg_address, data, send_stop);
84}
85//-----------------------------------------------------------------------------
86
87//-----------------------------------------------------------------------------
88void
89I2CSlave::write_i2c(uint32_t i2c_reg_address, uint8_t data, bool send_stop) const // NOLINT(build/unsigned)
90{
91 m_i2c_master->write_i2c(m_i2c_device_address, i2c_reg_address, data, send_stop);
92}
93//-----------------------------------------------------------------------------
94
95//-----------------------------------------------------------------------------
96std::vector<uint8_t> // NOLINT(build/unsigned)
97I2CSlave::read_i2cArray(uint32_t i2c_device_address, // NOLINT(build/unsigned)
98 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
99 uint32_t number_of_words) const // NOLINT(build/unsigned)
100{
101 return m_i2c_master->read_i2cArray(i2c_device_address, i2c_reg_address, number_of_words);
102}
103//-----------------------------------------------------------------------------
104
105//-----------------------------------------------------------------------------
106std::vector<uint8_t> // NOLINT(build/unsigned)
107I2CSlave::read_i2cArray(uint32_t i2c_reg_address, uint32_t number_of_words) const // NOLINT(build/unsigned)
108{
109 return m_i2c_master->read_i2cArray(m_i2c_device_address, i2c_reg_address, number_of_words);
110}
111//-----------------------------------------------------------------------------
112
113//-----------------------------------------------------------------------------
114std::vector<uint8_t> // NOLINT(build/unsigned)
115I2CSlave::read_i2cArray_atomic(uint32_t i2c_device_address, // NOLINT(build/unsigned)
116 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
117 uint32_t number_of_words) const // NOLINT(build/unsigned)
118{
119 return m_i2c_master->read_i2cArray(i2c_device_address, i2c_reg_address, number_of_words, true);
120}
121//-----------------------------------------------------------------------------
122
123//-----------------------------------------------------------------------------
124std::vector<uint8_t> // NOLINT(build/unsigned)
125I2CSlave::read_i2cArray_atomic(uint32_t i2c_reg_address, uint32_t number_of_words) const // NOLINT(build/unsigned)
126{
127 return m_i2c_master->read_i2cArray(m_i2c_device_address, i2c_reg_address, number_of_words, true);
128}
129//-----------------------------------------------------------------------------
130
131//-----------------------------------------------------------------------------
132void
133I2CSlave::write_i2cArray(uint32_t i2c_device_address, // NOLINT(build/unsigned)
134 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
135 std::vector<uint8_t> data, // NOLINT(build/unsigned)
136 bool send_stop) const
137{
138 m_i2c_master->write_i2cArray(i2c_device_address, i2c_reg_address, data, send_stop);
139}
140//-----------------------------------------------------------------------------
141
142//-----------------------------------------------------------------------------
143void
144I2CSlave::write_i2cArray(uint32_t i2c_reg_address, // NOLINT(build/unsigned)
145 std::vector<uint8_t> data, // NOLINT(build/unsigned)
146 bool send_stop) const
147{
148 m_i2c_master->write_i2cArray(m_i2c_device_address, i2c_reg_address, data, send_stop);
149}
150//-----------------------------------------------------------------------------
151
152// comodity functions
153//-----------------------------------------------------------------------------
154std::vector<uint8_t> // NOLINT(build/unsigned)
155I2CSlave::read_i2cPrimitive(uint32_t number_of_bytes) const // NOLINT(build/unsigned)
156{
157 return m_i2c_master->read_i2cPrimitive(m_i2c_device_address, number_of_bytes);
158}
159//-----------------------------------------------------------------------------
160
161//-----------------------------------------------------------------------------
162void
163I2CSlave::write_i2cPrimitive(const std::vector<uint8_t>& data, bool send_stop) const // NOLINT(build/unsigned)
164{
165 m_i2c_master->write_i2cPrimitive(m_i2c_device_address, data, send_stop);
166}
167//-----------------------------------------------------------------------------
168
169//-----------------------------------------------------------------------------
170bool
172{
174}
175//-----------------------------------------------------------------------------
176
177//-----------------------------------------------------------------------------
178std::string
180{
181 return m_i2c_master->getId();
182}
183//-----------------------------------------------------------------------------
184
185} // namespace timing
186} // namespace dunedaq
virtual void write_i2c(uint8_t i2c_device_address, uint32_t i2c_reg_address, uint8_t data, bool send_stop=true) const
virtual void write_i2cArray(uint8_t i2c_device_address, uint32_t i2c_reg_address, std::vector< uint8_t > data, bool send_stop=true) const
bool ping(uint8_t i2c_device_address) const
const I2CMasterNode * m_i2c_master
Definition I2CSlave.hpp:92
void write_i2cArray(uint32_t i2c_device_address, uint32_t i2c_reg_address, std::vector< uint8_t > data, bool send_stop=true) const
Definition I2CSlave.cpp:133
uint8_t read_i2c(uint32_t i2c_device_address, uint32_t i2c_reg_address) const
comodity functions
Definition I2CSlave.cpp:46
uint8_t read_i2c_atomic(uint32_t i2c_device_address, uint32_t i2c_reg_address) const
Definition I2CSlave.cpp:62
std::vector< uint8_t > read_i2cPrimitive(uint32_t number_of_bytes) const
Definition I2CSlave.cpp:155
std::vector< uint8_t > read_i2cArray(uint32_t i2c_device_address, uint32_t i2c_reg_address, uint32_t number_of_words) const
Definition I2CSlave.cpp:97
void write_i2cPrimitive(const std::vector< uint8_t > &data, bool send_stop=true) const
Definition I2CSlave.cpp:163
std::string get_master_id() const
Definition I2CSlave.cpp:179
void write_i2c(uint32_t i2c_device_address, uint32_t i2c_reg_address, uint8_t data, bool send_stop=true) const
Definition I2CSlave.cpp:78
std::vector< uint8_t > read_i2cArray_atomic(uint32_t i2c_reg_address, uint32_t number_of_words) const
Definition I2CSlave.cpp:125
I2CSlave(const I2CMasterNode *i2c_master, uint8_t i2c_device_address)
Definition I2CSlave.cpp:33
The DUNE-DAQ namespace.
Definition DataStore.hpp:57