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)
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)
const;
68 uint32_t i2c_reg_address,
69 std::vector<uint8_t> data,
70 bool send_stop =
true)
const;
73 uint32_t number_of_bytes)
const;
75 const std::vector<uint8_t>& data,
76 bool send_stop =
true)
const;
78 bool ping(uint8_t i2c_device_address)
const;
80 std::vector<uint8_t>
scan()
const;
84 std::vector<uint8_t>
virtual read_block_i2c(uint8_t i2c_device_address,
85 uint32_t number_of_bytes)
const;
87 const std::vector<uint8_t>& data,
88 bool send_stop =
true)
const;
101 void wait_until_finished(
bool require_acknowledgement =
true,
bool require_bus_idle_at_end =
false)
const;
129 std::unordered_map<std::string, I2CSlave*>
Class to provide OpenCode I2C interface to a ipbus node.
virtual std::vector< uint8_t > read_block_i2c(uint8_t i2c_device_address, uint32_t number_of_bytes) const
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
static const std::string kPreHiNode
IPBus register names for i2c bus.
virtual std::vector< uint8_t > read_i2cArray(uint8_t i2c_device_address, uint32_t i2c_reg_address, uint32_t number_of_words) const
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 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
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
bool ping(uint8_t i2c_device_address) const
static const std::string kRxNode
static const uint8_t kInterruptAck