xref: /openbmc/phosphor-power/tools/i2c/i2c.hpp (revision ab1327c3)
1*ab1327c3SLei YU #pragma once
2*ab1327c3SLei YU 
3*ab1327c3SLei YU #include "i2c_interface.hpp"
4*ab1327c3SLei YU 
5*ab1327c3SLei YU namespace i2c
6*ab1327c3SLei YU {
7*ab1327c3SLei YU 
8*ab1327c3SLei YU class I2CDevice : public I2CInterface
9*ab1327c3SLei YU {
10*ab1327c3SLei YU   private:
11*ab1327c3SLei YU     I2CDevice() = delete;
12*ab1327c3SLei YU 
13*ab1327c3SLei YU     explicit I2CDevice(uint8_t busId, uint8_t devAddr)
14*ab1327c3SLei YU     {
15*ab1327c3SLei YU         // TODO
16*ab1327c3SLei YU         (void)busId;
17*ab1327c3SLei YU         (void)devAddr;
18*ab1327c3SLei YU     }
19*ab1327c3SLei YU 
20*ab1327c3SLei YU   public:
21*ab1327c3SLei YU     virtual ~I2CDevice() = default;
22*ab1327c3SLei YU 
23*ab1327c3SLei YU     /** @copydoc I2CInterface::read(uint8_t&) */
24*ab1327c3SLei YU     void read(uint8_t& data) override;
25*ab1327c3SLei YU 
26*ab1327c3SLei YU     /** @copydoc I2CInterface::read(uint8_t,uint8_t&) */
27*ab1327c3SLei YU     void read(uint8_t addr, uint8_t& data) override;
28*ab1327c3SLei YU 
29*ab1327c3SLei YU     /** @copydoc I2CInterface::read(uint8_t,uint16_t&) */
30*ab1327c3SLei YU     void read(uint8_t addr, uint16_t& data) override;
31*ab1327c3SLei YU 
32*ab1327c3SLei YU     /** @copydoc I2CInterface::read(uint8_t,uint8_t&,uint8_t*) */
33*ab1327c3SLei YU     void read(uint8_t addr, uint8_t& size, uint8_t* data) override;
34*ab1327c3SLei YU 
35*ab1327c3SLei YU     /** @copydoc I2CInterface::write(uint8_t) */
36*ab1327c3SLei YU     void write(uint8_t data) override;
37*ab1327c3SLei YU 
38*ab1327c3SLei YU     /** @copydoc I2CInterface::write(uint8_t,uint8_t) */
39*ab1327c3SLei YU     void write(uint8_t addr, uint8_t data) override;
40*ab1327c3SLei YU 
41*ab1327c3SLei YU     /** @copydoc I2CInterface::write(uint8_t,uint16_t) */
42*ab1327c3SLei YU     void write(uint8_t addr, uint16_t data) override;
43*ab1327c3SLei YU 
44*ab1327c3SLei YU     /** @copydoc I2CInterface::write(uint8_t,uint8_t,const uint8_t*) */
45*ab1327c3SLei YU     void write(uint8_t addr, uint8_t size, const uint8_t* data) override;
46*ab1327c3SLei YU 
47*ab1327c3SLei YU     /** @brief Create an I2CInterface instance
48*ab1327c3SLei YU      *
49*ab1327c3SLei YU      * @param[in] busId - The i2c bus ID
50*ab1327c3SLei YU      * @param[in] devAddr - The device address of the i2c
51*ab1327c3SLei YU      *
52*ab1327c3SLei YU      * @return The unique_ptr holding the I2CInterface
53*ab1327c3SLei YU      */
54*ab1327c3SLei YU     static std::unique_ptr<I2CInterface> create(uint8_t busId, uint8_t devAddr);
55*ab1327c3SLei YU };
56*ab1327c3SLei YU 
57*ab1327c3SLei YU } // namespace i2c
58