DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
I2CSlave.hpp
Go to the documentation of this file.
1
21#ifndef TIMING_INCLUDE_TIMING_I2CSLAVE_HPP_
22#define TIMING_INCLUDE_TIMING_I2CSLAVE_HPP_
23
24#include "TimingIssues.hpp"
25
26#include "ers/Issue.hpp"
27
28// uHal Headers
29#include "uhal/DerivedNode.hpp"
30
31#include <boost/core/noncopyable.hpp>
32
33#include <string>
34#include <vector>
35
36namespace dunedaq {
37namespace timing {
38
39class I2CMasterNode;
40
41class I2CSlave : boost::noncopyable
42{
43
44public:
45 virtual ~I2CSlave();
46
47 uint8_t get_i2c_address() const { return m_i2c_device_address; } // NOLINT(build/unsigned)
48
50 uint8_t read_i2c(uint32_t i2c_device_address, uint32_t i2c_reg_address) const; // NOLINT(build/unsigned)
51 uint8_t read_i2c(uint32_t i2c_reg_address) const; // NOLINT(build/unsigned)
52
53 uint8_t read_i2c_atomic(uint32_t i2c_device_address, uint32_t i2c_reg_address) const; // NOLINT(build/unsigned)
54 uint8_t read_i2c_atomic(uint32_t i2c_reg_address) const; // NOLINT(build/unsigned)
55
56 void write_i2c(uint32_t i2c_device_address, // NOLINT(build/unsigned)
57 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
58 uint8_t data, // NOLINT(build/unsigned)
59 bool send_stop = true) const;
60 void write_i2c(uint32_t i2c_reg_address, uint8_t data, bool send_stop = true) const; // NOLINT(build/unsigned)
61
62 std::vector<uint8_t> read_i2cArray(uint32_t i2c_device_address, // NOLINT(build/unsigned)
63 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
64 uint32_t number_of_words) const; // NOLINT(build/unsigned)
65 std::vector<uint8_t> read_i2cArray(uint32_t i2c_reg_address, // NOLINT(build/unsigned)
66 uint32_t number_of_words) const; // NOLINT(build/unsigned)
67 std::vector<uint8_t> read_i2cArray_atomic(uint32_t i2c_reg_address, // NOLINT(build/unsigned)
68 uint32_t number_of_words) const; // NOLINT(build/unsigned)
69 std::vector<uint8_t> read_i2cArray_atomic(uint32_t i2c_device_address, // NOLINT(build/unsigned)
70 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
71 uint32_t number_of_words) const; // NOLINT(build/unsigned)
72 void write_i2cArray(uint32_t i2c_device_address, // NOLINT(build/unsigned)
73 uint32_t i2c_reg_address, // NOLINT(build/unsigned)
74 std::vector<uint8_t> data, // NOLINT(build/unsigned)
75 bool send_stop = true) const;
76 void write_i2cArray(uint32_t i2c_reg_address, // NOLINT(build/unsigned)
77 std::vector<uint8_t> data, // NOLINT(build/unsigned)
78 bool send_stop = true) const;
79
80 std::vector<uint8_t> read_i2cPrimitive(uint32_t number_of_bytes) const; // NOLINT(build/unsigned)
81 void write_i2cPrimitive(const std::vector<uint8_t>& data, bool send_stop = true) const; // NOLINT(build/unsigned)
82
83 bool ping() const;
84
85 std::string get_master_id() const;
86
87protected:
88 // Private constructor, accessible to I2CMaster
89 I2CSlave(const I2CMasterNode* i2c_master, uint8_t i2c_device_address); // NOLINT(build/unsigned)
90
91private:
93
94 // slave address
95 uint8_t m_i2c_device_address; // NOLINT(build/unsigned)
96
97 friend class I2CMasterNode;
98};
99
100} // namespace timing
101} // namespace dunedaq
102
103#endif // TIMING_INCLUDE_TIMING_I2CSLAVE_HPP_
OpenCode I2C interface to a ipbus node.
uint8_t get_i2c_address() const
Definition I2CSlave.hpp:47
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