21#ifndef TIMING_INCLUDE_TIMING_I2CMASTERNODE_HPP_
22#define TIMING_INCLUDE_TIMING_I2CMASTERNODE_HPP_
29#include "uhal/DerivedNode.hpp"
32#include <unordered_map>
51 virtual std::vector<std::string>
get_slaves()
const;
58 virtual uint8_t
read_i2c(uint8_t i2c_device_address, uint32_t i2c_reg_address,
bool atomic =
false)
const;
59 virtual void write_i2c(uint8_t i2c_device_address,
60 uint32_t i2c_reg_address,
62 bool send_stop =
true)
const;
64 virtual std::vector<uint8_t>
read_i2cArray(uint8_t i2c_device_address,
65 uint32_t i2c_reg_address,
66 uint32_t number_of_words,
67 bool atomic =
false)
const;
69 uint32_t i2c_reg_address,
70 std::vector<uint8_t> data,
71 bool send_stop =
true)
const;
74 uint32_t number_of_bytes)
const;
76 const std::vector<uint8_t>& data,
77 bool send_stop =
true)
const;
79 bool ping(uint8_t i2c_device_address)
const;
81 std::vector<uint8_t>
scan()
const;
85 std::vector<uint8_t>
virtual read_block_i2c(uint8_t i2c_device_address,
86 uint32_t number_of_bytes,
87 bool send_reset =
true)
const;
89 const std::vector<uint8_t>& data,
90 bool send_stop =
true)
const;
103 void wait_until_finished(
bool require_acknowledgement =
true,
bool require_bus_idle_at_end =
false)
const;
131 std::unordered_map<std::string, I2CSlave*>
Class to provide OpenCode I2C interface to a ipbus node.
std::unordered_map< std::string, uint8_t > m_i2c_device_addresses
Slaves.
static const std::string kCtrlNode
static const std::string kStatusNode
virtual uint16_t get_i2c_clock_prescale() const
void send_i2c_command_and_write_data(uint8_t command, uint8_t data) const
virtual void write_i2c(uint8_t i2c_device_address, uint32_t i2c_reg_address, uint8_t data, bool send_stop=true) const
static const uint8_t kStopCmd
std::vector< uint8_t > scan() const
I2CMasterNode(const uhal::Node &node)
virtual void write_i2cPrimitive(uint8_t i2c_device_address, const std::vector< uint8_t > &data, bool send_stop=true) const
static const std::string kCmdNode
virtual uint8_t read_i2c(uint8_t i2c_device_address, uint32_t i2c_reg_address, bool atomic=false) const
commodity functions
static const std::string kPreHiNode
IPBus register names for i2c bus.
uint16_t m_clock_prescale
clock prescale factor
static const uint8_t kStartCmd
static const uint8_t kInProgressBit
static const std::string kPreLoNode
static const uint8_t kAckCmd
static const uint8_t kArbitrationLostBit
virtual uint8_t get_slave_address(const std::string &name) const
uint8_t send_i2c_command_and_read_data(uint8_t command) const
std::unordered_map< std::string, I2CSlave * > m_i2c_devices
I2C slaves attached to this node.
virtual std::vector< uint8_t > read_i2cPrimitive(uint8_t i2c_device_address, uint32_t number_of_bytes) const
static const uint8_t kWriteToSlaveCmd
virtual std::vector< std::string > get_slaves() const
virtual std::vector< uint8_t > read_block_i2c(uint8_t i2c_device_address, uint32_t number_of_bytes, bool send_reset=true) const
static const std::string kTxNode
static const uint8_t kBusyBit
virtual void write_i2cArray(uint8_t i2c_device_address, uint32_t i2c_reg_address, std::vector< uint8_t > data, bool send_stop=true) const
static const uint8_t kInterruptBit
static const uint8_t kReceivedAckBit
virtual const I2CSlave & get_slave(const std::string &name) const
virtual void write_block_i2c(uint8_t i2c_device_address, const std::vector< uint8_t > &data, bool send_stop=true) const
void wait_until_finished(bool require_acknowledgement=true, bool require_bus_idle_at_end=false) const
static const uint8_t kReadFromSlaveCmd
virtual std::vector< uint8_t > read_i2cArray(uint8_t i2c_device_address, uint32_t i2c_reg_address, uint32_t number_of_words, bool atomic=false) const
bool ping(uint8_t i2c_device_address) const
static const std::string kRxNode
static const uint8_t kInterruptAck