DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
I2CExpanderNode.cpp
Go to the documentation of this file.
1
10
11// PDT headers
12#include "ers/ers.hpp"
13#include "timing/toolbox.hpp"
14
15// #include <boost/tuple/tuple.hpp>
16
17#include <vector>
18// #include <fstream>
19// #include <sstream>
20
21namespace dunedaq {
22namespace timing {
23
24//-----------------------------------------------------------------------------
25I2CExpanderSlave::I2CExpanderSlave(const I2CMasterNode* i2c_master, uint8_t address) // NOLINT(build/unsigned)
26 : I2CSlave(i2c_master, address)
27{}
28//-----------------------------------------------------------------------------
29
30//-----------------------------------------------------------------------------
31I2CExpanderSlave::~I2CExpanderSlave() {}
32//-----------------------------------------------------------------------------
33
34//-----------------------------------------------------------------------------
35void
36I2CExpanderSlave::ensure_valid_bank_id(uint8_t bank_id) const // NOLINT(build/unsigned)
37{
38 if (bank_id == 0 || bank_id == 1)
39 return;
40
41 throw SFPExpanderBankIDError(ERS_HERE, std::to_string(bank_id));
42}
43//-----------------------------------------------------------------------------
44
45//-----------------------------------------------------------------------------
46void
47I2CExpanderSlave::set_inversion(uint8_t bank_id, uint32_t inversion_mask) const // NOLINT(build/unsigned)
48{
49
50 this->ensure_valid_bank_id(bank_id);
51 this->write_i2c(0x4 + bank_id, inversion_mask);
52}
53//-----------------------------------------------------------------------------
54
55//-----------------------------------------------------------------------------
56void
57I2CExpanderSlave::set_io(uint8_t bank_id, uint32_t io_mask) const // NOLINT(build/unsigned)
58{
59
60 this->ensure_valid_bank_id(bank_id);
61 this->write_i2c(0x6 + bank_id, io_mask);
62}
63//-----------------------------------------------------------------------------
64
65//-----------------------------------------------------------------------------
66void
67I2CExpanderSlave::set_outputs(uint8_t bank_id, uint32_t output_values) const // NOLINT(build/unsigned)
68{
69
70 this->ensure_valid_bank_id(bank_id);
71 this->write_i2c(0x2 + bank_id, output_values);
72}
73//-----------------------------------------------------------------------------
74
75//-----------------------------------------------------------------------------
76uint32_t // NOLINT(build/unsigned)
77I2CExpanderSlave::read_inputs(uint8_t bank_id) const // NOLINT(build/unsigned)
78{
79
80 this->ensure_valid_bank_id(bank_id);
81 return this->read_i2c(0x0 + bank_id);
82}
83//-----------------------------------------------------------------------------
84
85//-----------------------------------------------------------------------------
86uint8_t // NOLINT(build/unsigned)
87I2CExpanderSlave::read_outputs_config(uint8_t bank_id) const { // NOLINT(build/unsigned)
88
89 this->ensure_valid_bank_id(bank_id);
90 return this->read_i2c(0x2 + bank_id);
91
92}
93//-----------------------------------------------------------------------------
94
95//-----------------------------------------------------------------------------
96std::vector<uint32_t> // NOLINT(build/unsigned)
97I2CExpanderSlave::debug() const
98{
99
100 std::vector<uint32_t> values(8); // NOLINT(build/unsigned)
101
102 for (size_t a(0); a < 8; ++a) {
103 values[a] = this->read_i2c(a);
104 }
105 return values;
106}
107//-----------------------------------------------------------------------------
108
109} // namespace timing
110} // namespace dunedaq
#define ERS_HERE
OpenCode I2C interface to a ipbus node.
Class to provide OpenCode I2C interface to a ipbus node.
Including Qt Headers.