My Project  v0.0.16
I2CMasterNode.hpp
Go to the documentation of this file.
1 
8 #ifndef MP7_OPENCORESI2CMASTERNODE
9 #define MP7_OPENCORESI2CMASTERNODE
10 
11 // uHal Headers
12 #include "uhal/DerivedNode.hpp"
13 
14 namespace mp7 {
15 //TODO: Add a opencores namespace?
16 namespace opencores {
17 
18 class I2CSlave;
19 
31 class I2CBaseNode : public uhal::Node {
33 public:
34  I2CBaseNode(const uhal::Node& aNode);
35 // I2CBaseNode(const I2CBaseNode& aOther);
36  virtual ~I2CBaseNode();
37 
39  virtual uint8_t getI2CClockPrescale() const {
40  return mClockPrescale;
41  }
42 
43  virtual std::vector<std::string> getSlaves() const;
44  virtual uint8_t getSlaveAddress( const std::string& name ) const;
46  virtual uint8_t readI2C(uint8_t aSlaveAddress, uint32_t i2cAddress) const;
47  virtual void writeI2C(uint8_t aSlaveAddress, uint32_t i2cAddress, uint32_t data) const;
48 
49 protected:
50  // low level i2c functions
51  std::vector<uint8_t> virtual readBlockI2C(uint8_t aSlaveAddress, uint32_t numBytes) const;
52  void virtual writeBlockI2C(uint8_t aSlaveAddress, const std::vector<uint8_t>& data) const;
53 
55  boost::unordered_map<std::string,uint8_t> mSlavesAddresses;
56 
57 private:
59  void constructor();
60 
61  // low level i2c functions
62  void reset() const;
63  void waitUntilFinished(bool requireAcknowledgement = true,
64  bool requireBusIdleAtEnd = false) const;
65 
67  static const std::string mPreHi;
68  static const std::string mPreLo;
69  static const std::string mCtrl;
70  static const std::string mTx;
71  static const std::string mRx;
72  static const std::string mCmd;
73  static const std::string mStatus;
74 
76  uint16_t mClockPrescale;
77 
78  friend class I2CSlave;
79 };
80 
81 
93 class I2CSlave : boost::noncopyable {
94 protected:
95  // Private constructor, accessible to I2CMaster
96  I2CSlave(const I2CBaseNode* aMaster, uint8_t aSlaveAddress);
97 public:
98 
99  virtual ~I2CSlave();
100 
102 
103  uint8_t getI2CAddress() const {
104  return mAddress;
105  }
106 
108  uint8_t readI2C(uint32_t i2cAddress) const;
109  void writeI2C(uint32_t i2cAddress, uint32_t data) const;
110 
111 private:
113 
114  // slave address
115  uint8_t mAddress;
116 
117  friend class I2CMasterNode;
118 };
119 
125 class I2CMasterNode : public I2CBaseNode {
126 public:
127  I2CMasterNode(const uhal::Node& aNode );
128  I2CMasterNode(const I2CMasterNode& aOther );
129  virtual ~I2CMasterNode();
130 
131  virtual const I2CSlave& getSlave( const std::string& name ) const;
132 
133 private:
134  void constructor();
136  boost::unordered_map<std::string,I2CSlave*> mSlaves;
137 
138 };
139 
140 
141 } // namespace opencores
142 } // namespace mp7
143 
144 #endif /* MP7_OPENCORESI2CMASTERNODE */
145 
void constructor()
Definition: I2CMasterNode.cpp:44
-test-ipbusaccess
Definition: AlignmentNode.hpp:15
uint8_t mAddress
Definition: I2CMasterNode.hpp:115
boost::unordered_map<std::string,uint8_t> mSlavesAddresses
Slaves.
Definition: I2CMasterNode.hpp:55
static const std::string mCtrl
Definition: I2CMasterNode.hpp:69
virtual uint8_t getI2CClockPrescale() const
Definition: I2CMasterNode.hpp:39
virtual void writeI2C(uint8_t aSlaveAddress, uint32_t i2cAddress, uint32_t data) const
Definition: I2CMasterNode.cpp:94
uint16_t mClockPrescale
clock prescale factor
Definition: I2CMasterNode.hpp:76
virtual ~I2CBaseNode()
Definition: I2CMasterNode.cpp:63
static const std::string mPreHi
IPBus register names for i2c bus.
Definition: I2CMasterNode.hpp:67
virtual uint8_t readI2C(uint8_t aSlaveAddress, uint32_t i2cAddress) const
commodity functions
Definition: I2CMasterNode.cpp:86
virtual void writeBlockI2C(uint8_t aSlaveAddress, const std::vector<uint8_t>& data) const
Definition: I2CMasterNode.cpp:101
static const std::string mStatus
Definition: I2CMasterNode.hpp:73
I2CBaseNode(const uhal::Node& aNode)
Definition: I2CMasterNode.cpp:34
virtual std::vector<uint8_t> readBlockI2C(uint8_t aSlaveAddress, uint32_t numBytes) const
Definition: I2CMasterNode.cpp:155
friend class I2CSlave
Definition: I2CMasterNode.hpp:78
boost::unordered_map<std::string,I2CSlave*> mSlaves
Slaves.
Definition: I2CMasterNode.hpp:136
void reset() const
Definition: I2CMasterNode.cpp:212
void waitUntilFinished(bool requireAcknowledgement = true, bool requireBusIdleAtEnd = false) const
Definition: I2CMasterNode.cpp:238
static const std::string mRx
Definition: I2CMasterNode.hpp:71
uint8_t getI2CAddress() const
Definition: I2CMasterNode.hpp:103
static const std::string mCmd
Definition: I2CMasterNode.hpp:72
virtual uint8_t getSlaveAddress( const std::string& name ) const
Definition: I2CMasterNode.cpp:76
dictionary data
Definition: test-datavalid.py:31
static const std::string mPreLo
Definition: I2CMasterNode.hpp:68
virtual std::vector<std::string> getSlaves() const
Definition: I2CMasterNode.cpp:67
static const std::string mTx
Definition: I2CMasterNode.hpp:70
name
Definition: setup.py:8
const I2CBaseNode* mMaster
Definition: I2CMasterNode.hpp:112