diff options
Diffstat (limited to 'mpm/lib/i2c')
-rw-r--r-- | mpm/lib/i2c/i2c_regs_iface.cpp | 75 | ||||
-rw-r--r-- | mpm/lib/i2c/i2cdev_iface.cpp | 78 |
2 files changed, 58 insertions, 95 deletions
diff --git a/mpm/lib/i2c/i2c_regs_iface.cpp b/mpm/lib/i2c/i2c_regs_iface.cpp index c476cf636..575e19d26 100644 --- a/mpm/lib/i2c/i2c_regs_iface.cpp +++ b/mpm/lib/i2c/i2c_regs_iface.cpp @@ -4,10 +4,10 @@ // SPDX-License-Identifier: GPL-3.0-or-later // -#include <mpm/types/regs_iface.hpp> +#include <mpm/exception.hpp> #include <mpm/i2c/i2c_iface.hpp> #include <mpm/i2c/i2c_regs_iface.hpp> -#include <mpm/exception.hpp> +#include <mpm/types/regs_iface.hpp> using mpm::types::regs_iface; @@ -18,26 +18,21 @@ using mpm::types::regs_iface; class i2c_regs_iface_impl : public regs_iface { public: - - i2c_regs_iface_impl( - mpm::i2c::i2c_iface::sptr i2c_iface, - const size_t reg_addr_size - ) : _i2c_iface(i2c_iface), - _reg_addr_size(reg_addr_size) + i2c_regs_iface_impl(mpm::i2c::i2c_iface::sptr i2c_iface, const size_t reg_addr_size) + : _i2c_iface(i2c_iface), _reg_addr_size(reg_addr_size) { if (reg_addr_size > 4) { throw mpm::runtime_error("reg_addr_size too largs for i2c_regs_iface"); } } - uint8_t peek8( - const uint32_t addr - ) { + uint8_t peek8(const uint32_t addr) + { uint8_t rx[1]; uint8_t tx[5]; int i = 0; for (; i < _reg_addr_size; i++) { - tx[i] = 0xff & (addr >> 8*(_reg_addr_size-i-1)); + tx[i] = 0xff & (addr >> 8 * (_reg_addr_size - i - 1)); } int err = _i2c_iface->transfer(tx, _reg_addr_size, rx, 1); @@ -48,14 +43,12 @@ public: return rx[0]; } - void poke8( - const uint32_t addr, - const uint8_t data - ) { + void poke8(const uint32_t addr, const uint8_t data) + { uint8_t tx[5]; int i = 0; for (; i < _reg_addr_size; i++) { - tx[i] = 0xff & (addr >> 8*(_reg_addr_size-i-1)); + tx[i] = 0xff & (addr >> 8 * (_reg_addr_size - i - 1)); } tx[i] = data; @@ -65,14 +58,13 @@ public: } } - uint16_t peek16( - const uint32_t addr - ) { + uint16_t peek16(const uint32_t addr) + { uint8_t rx[2]; uint8_t tx[5]; int i = 0; for (; i < _reg_addr_size; i++) { - tx[i] = 0xff & (addr >> 8*(_reg_addr_size-i-1)); + tx[i] = 0xff & (addr >> 8 * (_reg_addr_size - i - 1)); } int err = _i2c_iface->transfer(tx, _reg_addr_size, rx, 2); @@ -81,21 +73,19 @@ public: } uint16_t data = rx[0]; - data = (data << 8) | rx[1]; + data = (data << 8) | rx[1]; return data; } - void poke16( - const uint32_t addr, - const uint16_t data - ) { + void poke16(const uint32_t addr, const uint16_t data) + { uint8_t tx[6]; int i = 0; for (; i < _reg_addr_size; i++) { - tx[i] = 0xff & (addr >> 8*(_reg_addr_size-i-1)); + tx[i] = 0xff & (addr >> 8 * (_reg_addr_size - i - 1)); } - tx[i] = (data >> 8) & 0xff; - tx[i+1] = data & 0xff; + tx[i] = (data >> 8) & 0xff; + tx[i + 1] = data & 0xff; int err = _i2c_iface->transfer(tx, _reg_addr_size + 2, NULL, 0); if (err) { @@ -110,27 +100,18 @@ private: }; regs_iface::sptr mpm::i2c::make_i2c_regs_iface( - mpm::i2c::i2c_iface::sptr i2c_iface, - const size_t reg_addr_size -) { - return std::make_shared<i2c_regs_iface_impl>( - i2c_iface, - reg_addr_size - ); + mpm::i2c::i2c_iface::sptr i2c_iface, const size_t reg_addr_size) +{ + return std::make_shared<i2c_regs_iface_impl>(i2c_iface, reg_addr_size); } -mpm::types::regs_iface::sptr mpm::i2c::make_i2cdev_regs_iface( - const std::string &bus, +mpm::types::regs_iface::sptr mpm::i2c::make_i2cdev_regs_iface(const std::string& bus, const uint16_t addr, const bool ten_bit_addr, const int timeout_ms, - const size_t reg_addr_size -) { - auto i2c_iface_sptr = mpm::i2c::i2c_iface::make_i2cdev( - bus, addr, ten_bit_addr, timeout_ms - ); - return std::make_shared<i2c_regs_iface_impl>( - i2c_iface_sptr, - reg_addr_size - ); + const size_t reg_addr_size) +{ + auto i2c_iface_sptr = + mpm::i2c::i2c_iface::make_i2cdev(bus, addr, ten_bit_addr, timeout_ms); + return std::make_shared<i2c_regs_iface_impl>(i2c_iface_sptr, reg_addr_size); } diff --git a/mpm/lib/i2c/i2cdev_iface.cpp b/mpm/lib/i2c/i2cdev_iface.cpp index 5b59e06f8..b346597a8 100644 --- a/mpm/lib/i2c/i2cdev_iface.cpp +++ b/mpm/lib/i2c/i2cdev_iface.cpp @@ -5,15 +5,12 @@ // -#include <mpm/i2c/i2c_iface.hpp> -#include <mpm/exception.hpp> - #include "i2cdev.h" - #include <fcntl.h> -#include <linux/i2c.h> #include <linux/i2c-dev.h> - +#include <linux/i2c.h> +#include <mpm/exception.hpp> +#include <mpm/i2c/i2c_iface.hpp> #include <boost/format.hpp> #include <iostream> @@ -25,17 +22,15 @@ using namespace mpm::i2c; class i2cdev_iface_impl : public i2c_iface { public: - - i2cdev_iface_impl( - const std::string &device, - const uint16_t addr, - const bool ten_bit_addr, - const unsigned int timeout_ms, - const bool do_open = false - ) : _device(device), - _addr(addr), - _ten_bit_addr(ten_bit_addr), - _timeout_ms(timeout_ms) + i2cdev_iface_impl(const std::string& device, + const uint16_t addr, + const bool ten_bit_addr, + const unsigned int timeout_ms, + const bool do_open = false) + : _device(device) + , _addr(addr) + , _ten_bit_addr(ten_bit_addr) + , _timeout_ms(timeout_ms) { if (do_open) _open(); @@ -49,13 +44,12 @@ public: close(_fd); } - int transfer(uint8_t *tx, size_t tx_len, uint8_t *rx, size_t rx_len, bool do_close) + int transfer(uint8_t* tx, size_t tx_len, uint8_t* rx, size_t rx_len, bool do_close) { if (_fd < 0) _open(); - int ret = i2cdev_transfer(_fd, _addr, _ten_bit_addr, - tx, tx_len, rx, rx_len); + int ret = i2cdev_transfer(_fd, _addr, _ten_bit_addr, tx, tx_len, rx, rx_len); if (do_close) { close(_fd); @@ -63,27 +57,25 @@ public: } if (ret) { - throw mpm::runtime_error(str( - boost::format("I2C Transaction failed!") - )); + throw mpm::runtime_error(str(boost::format("I2C Transaction failed!"))); } return ret; } - int transfer(std::vector<uint8_t> *tx, std::vector<uint8_t> *rx, bool do_close) + int transfer(std::vector<uint8_t>* tx, std::vector<uint8_t>* rx, bool do_close) { uint8_t *tx_data = NULL, *rx_data = NULL; size_t tx_len = 0, rx_len = 0; if (tx) { tx_data = tx->data(); - tx_len = tx->size(); + tx_len = tx->size(); } if (rx) { rx_data = rx->data(); - rx_len = rx->size(); + rx_len = rx->size(); } int ret = transfer(tx_data, tx_len, rx_data, rx_len, do_close); @@ -97,22 +89,16 @@ private: const bool _ten_bit_addr; const unsigned int _timeout_ms; - int _open(void) { - if (i2cdev_open( - &_fd, - _device.c_str(), - _timeout_ms) < 0) - { - throw mpm::runtime_error(str( - boost::format("Could not initialize i2cdev device %s") - % _device)); + int _open(void) + { + if (i2cdev_open(&_fd, _device.c_str(), _timeout_ms) < 0) { + throw mpm::runtime_error( + str(boost::format("Could not initialize i2cdev device %s") % _device)); } - if (_fd < 0) - { - throw mpm::runtime_error(str( - boost::format("Could not open i2cdev device %s") - % _device)); + if (_fd < 0) { + throw mpm::runtime_error( + str(boost::format("Could not open i2cdev device %s") % _device)); } } }; @@ -120,14 +106,10 @@ private: /****************************************************************************** * Factory *****************************************************************************/ -i2c_iface::sptr i2c_iface::make_i2cdev( - const std::string &bus, +i2c_iface::sptr i2c_iface::make_i2cdev(const std::string& bus, const uint16_t addr, const bool ten_bit_addr, - const int timeout_ms -) { - return std::make_shared<i2cdev_iface_impl>( - bus, addr, ten_bit_addr, timeout_ms - ); + const int timeout_ms) +{ + return std::make_shared<i2cdev_iface_impl>(bus, addr, ten_bit_addr, timeout_ms); } - |