#pragma once #include #include #include namespace veye { namespace imx287m { class i2c { public: i2c(const std::string &name = "/dev/i2c-2", const int address = 0x3b); ~i2c(); public: /*! * \brief open - open i2c device with `name` passed to constructor * \return - true on success or if already open, false otherwise */ bool open(); std::optional read(uint16_t reg); bool write(uint16_t reg, const uint32_t value); private: int m_fd{-1}; std::string m_name; int m_address{-1}; }; /*! * \brief i2c_read - read device registers using i2c * \param fd - device file descriptor * \param i2c_addr - i2c adderr * \param reg - register * \param value - value to set * \return non-empty register value on success, empty value on failure */ std::optional i2c_read(int fd, uint8_t i2c_addr, uint16_t reg); bool i2c_write(int fd, uint16_t reg, const uint32_t value); } // namespace imx287m } // namespace veye