Files
lishanpi/drv/i2c/i2c_driver.h
T

50 lines
997 B
C++
Raw Normal View History

2026-04-26 16:24:42 +08:00
#ifndef __I2C_DRIVER_H__
#define __I2C_DRIVER_H__
#include <cstdint>
#include "bus_core.h"
enum class I2cPort : uint8_t {
_0 = 0,
_1, _2,
MAX
};
struct I2cConfig {
uint32_t speed_hz = 100000;
};
class I2cDevice {
public:
explicit I2cDevice(uint16_t dev_addr);
RetCode init();
uint16_t addr() const { return dev_addr_; }
private:
friend class I2cBus;
uint16_t dev_addr_;
};
class I2cBus {
public:
explicit I2cBus(I2cPort port);
~I2cBus();
I2cBus(const I2cBus &) = delete;
I2cBus &operator=(const I2cBus &) = delete;
RetCode init(const I2cConfig &config);
RetCode deinit();
RetCode master_write(I2cDevice &dev, const uint8_t *data, uint32_t len);
RetCode master_read(I2cDevice &dev, uint8_t *data, uint32_t len);
RetCode master_write_read(I2cDevice &dev, const uint8_t *wdata, uint32_t wlen, uint8_t *rdata, uint32_t rlen);
private:
I2cPort port_;
I2cConfig config_;
bool initialized_ = false;
};
#endif