DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
i2c.cpp
Go to the documentation of this file.
1
10#include "timing/I2CSlave.hpp"
12// #include "timing/MiniPODMasterNode.hpp"
13#include "timing/DACNode.hpp"
15#include "timing/SI534xNode.hpp"
16
17#include <pybind11/pybind11.h>
18#include <pybind11/stl.h>
19
20#include <vector>
21
22namespace py = pybind11;
23
24namespace dunedaq {
25namespace timing {
26namespace python {
27
28void
29register_i2c(py::module& m)
30{
31 // .def("hardReset", (void ( mp7::CtrlNode::*) (double)) 0, mp7_CTRLNODE_hardReset_overloads())
32
33 // Wrap timing::I2CMasterNode
34 py::class_<timing::I2CMasterNode, uhal::Node>(m, "I2CMasterNode")
35 .def(py::init<const uhal::Node&>())
36 .def("get_i2c_clock_prescale", &timing::I2CMasterNode::get_i2c_clock_prescale)
37 .def("read_i2c", &timing::I2CMasterNode::read_i2c)
38 .def("write_i2c",
40 py::arg("i2c_device_address"),
41 py::arg("i2c_reg_address"),
42 py::arg("data"),
43 py::arg("send_stop") = true)
44 .def("read_i2cArray", &timing::I2CMasterNode::read_i2cArray)
45 .def("write_i2cArray",
47 py::arg("i2c_device_address"),
48 py::arg("i2c_reg_address"),
49 py::arg("data"),
50 py::arg("send_stop") = true)
51 .def("read_i2cPrimitive", &timing::I2CMasterNode::read_i2cPrimitive)
52 .def("write_i2cPrimitive",
54 py::arg("i2c_device_address"),
55 py::arg("data"),
56 py::arg("send_stop") = true)
57 .def("get_slaves", &timing::I2CMasterNode::get_slaves)
58 .def("get_slave", &timing::I2CMasterNode::get_slave, py::return_value_policy::reference_internal)
59 .def("get_slave_address", &timing::I2CMasterNode::get_slave_address)
60 .def("ping", &timing::I2CMasterNode::ping)
61 .def("scan", &timing::I2CMasterNode::scan)
62 .def("reset", &timing::I2CMasterNode::reset);
63
64 // Wrap timing::I2CSlave
65 py::class_<timing::I2CSlave>(m, "I2CSlave")
66 .def("get_i2c_address", &timing::I2CSlave::get_i2c_address)
67 .def<uint8_t (timing::I2CSlave::*)(uint32_t) const>("read_i2c", // NOLINT(build/unsigned)
69 .def<uint8_t (timing::I2CSlave::*)(uint32_t, uint32_t) const>("read_i2c", // NOLINT(build/unsigned)
71 .def<void (timing::I2CSlave::*)(uint32_t, uint8_t, bool) const>("write_i2c", // NOLINT(build/unsigned)
73 py::arg("i2c_reg_address"),
74 py::arg("data"),
75 py::arg("send_stop") = true)
76 .def<void (timing::I2CSlave::*)(uint32_t, uint32_t, uint8_t, bool) const>("write_i2c", // NOLINT(build/unsigned)
78 py::arg("i2c_device_address"),
79 py::arg("i2c_reg_address"),
80 py::arg("data"),
81 py::arg("send_stop") = true)
82 .def<std::vector<uint8_t> (timing::I2CSlave::*)(uint32_t, uint32_t) const>( // NOLINT(build/unsigned)
83 "read_i2cArray",
85 .def<std::vector<uint8_t> (timing::I2CSlave::*)(uint32_t, uint32_t, uint32_t) const>( // NOLINT(build/unsigned)
86 "read_i2cArray",
88 .def<void (timing::I2CSlave::*)(uint32_t, std::vector<uint8_t>, bool) const>( // NOLINT(build/unsigned)
89 "write_i2cArray",
91 py::arg("i2c_reg_address"),
92 py::arg("data"),
93 py::arg("send_stop") = true)
94 .def<void (timing::I2CSlave::*)(uint32_t, uint32_t, std::vector<uint8_t>, bool) const>( // NOLINT(build/unsigned)
95 "write_i2cArray",
97 py::arg("i2c_device_address"),
98 py::arg("i2c_reg_address"),
99 py::arg("data"),
100 py::arg("send_stop") = true)
101 .def("read_i2cPrimitive", &timing::I2CSlave::read_i2cPrimitive)
102 .def("write_i2cPrimitive", &timing::I2CSlave::write_i2cPrimitive, py::arg("data"), py::arg("send_stop") = true)
103 .def("ping", &timing::I2CSlave::ping);
104
105 // Wrap SIChipSlave
106 py::class_<timing::SIChipSlave, timing::I2CSlave>(m, "SIChipSlave")
107 .def(py::init<const timing::I2CMasterNode*, uint8_t>()) // NOLINT(build/unsigned)
108 .def("read_page", &timing::SIChipSlave::read_page)
109 .def("switch_page", &timing::SIChipSlave::switch_page)
110 .def("read_device_version", &timing::SIChipSlave::read_device_version)
111 .def("read_clock_register", &timing::SIChipSlave::read_clock_register)
112 .def("write_clock_register", &timing::SIChipSlave::write_clock_register);
113
114 // Wrap SI534xSlave
115 py::class_<timing::SI534xSlave, timing::SIChipSlave>(m, "SI534xSlave")
116 .def(py::init<const timing::I2CMasterNode*, uint8_t>()) // NOLINT(build/unsigned)
117 .def("configure", &timing::SI534xSlave::configure)
118 .def("read_config_id", &timing::SI534xSlave::read_config_id)
119 // .def("registers", &timing::SI534xSlave::registers)
120 ;
121
122 // Wrap SI534xNode
123 py::class_<timing::SI534xNode, timing::SI534xSlave, timing::I2CMasterNode>(m, "SI534xNode")
124 .def(py::init<const uhal::Node&>());
125
126 // Wrap I2CExpanderSlave
127 py::class_<timing::I2CExpanderSlave, timing::I2CSlave>(m, "I2CExpanderSlave")
128 .def(py::init<const timing::I2CMasterNode*, uint8_t>()) // NOLINT(build/unsigned)
129 .def("set_io", &timing::I2CExpanderSlave::set_io)
130 .def("set_inversion", &timing::I2CExpanderSlave::set_inversion)
131 .def("set_outputs", &timing::I2CExpanderSlave::set_outputs)
132 .def("read_inputs", &timing::I2CExpanderSlave::read_inputs)
133 .def("debug", &timing::I2CExpanderSlave::debug);
134
135// // Wrap I2CExpanderNode
136// py::class_<timing::I2CExpanderNode, timing::I2CExpanderSlave, timing::I2CMasterNode>(m, "I2CExpanderNode")
137// .def(py::init<const uhal::Node&>());
138
139 // Wrap DACSlave
140 py::class_<timing::DACSlave, timing::I2CSlave>(m, "DACSlave")
141 .def(py::init<const timing::I2CMasterNode*, uint8_t>()) // NOLINT(build/unsigned)
142 .def("set_interal_ref", &timing::DACSlave::set_interal_ref)
143 .def("set_dac", &timing::DACSlave::set_dac);
144
145 // Wrap DACNode
146 py::class_<timing::DACNode, timing::DACSlave, timing::I2CMasterNode>(m, "DACNode").def(py::init<const uhal::Node&>());
147} // NOLINT(readability/fn_size)
148
149} // namespace python
150} // namespace timing
151} // namespace dunedaq
void set_interal_ref(bool internal_ref) const
Use DAC internal reference.
Definition DACNode.cpp:25
void set_dac(uint8_t channel, uint32_t code) const
Configure DAC channel.
Definition DACNode.cpp:33
virtual uint16_t get_i2c_clock_prescale() const
virtual void write_i2c(uint8_t i2c_device_address, uint32_t i2c_reg_address, uint8_t data, bool send_stop=true) const
std::vector< uint8_t > scan() const
virtual void write_i2cPrimitive(uint8_t i2c_device_address, const std::vector< uint8_t > &data, bool send_stop=true) const
virtual std::vector< uint8_t > read_i2cArray(uint8_t i2c_device_address, uint32_t i2c_reg_address, uint32_t number_of_words) const
virtual uint8_t get_slave_address(const std::string &name) const
virtual std::vector< uint8_t > read_i2cPrimitive(uint8_t i2c_device_address, uint32_t number_of_bytes) const
virtual uint8_t read_i2c(uint8_t i2c_device_address, uint32_t i2c_reg_address) const
commodity functions
virtual std::vector< std::string > get_slaves() 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
virtual const I2CSlave & get_slave(const std::string &name) const
bool ping(uint8_t i2c_device_address) const
uint8_t get_i2c_address() const
Definition I2CSlave.hpp:47
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:99
uint8_t read_i2c(uint32_t i2c_device_address, uint32_t i2c_reg_address) const
comodity functions
Definition I2CSlave.cpp:46
std::vector< uint8_t > read_i2cPrimitive(uint32_t number_of_bytes) const
Definition I2CSlave.cpp:121
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:81
void write_i2cPrimitive(const std::vector< uint8_t > &data, bool send_stop=true) const
Definition I2CSlave.cpp:129
void write_i2c(uint32_t i2c_device_address, uint32_t i2c_reg_address, uint8_t data, bool send_stop=true) const
Definition I2CSlave.cpp:62
void switch_page(uint8_t page) const
{ function_description }
void write_clock_register(uint16_t address, uint8_t data) const
Writes a clock register.
uint8_t read_page() const
Reads the current page.
uint8_t read_clock_register(uint16_t address) const
Reads a clock register.
uint32_t read_device_version() const
Reads a device version.
void register_i2c(py::module &m)
Definition i2c.cpp:29
Including Qt Headers.