diff --git a/include/sta/bus/i2c/device.hpp b/include/sta/bus/i2c/device.hpp index 88485b3..71552fc 100644 --- a/include/sta/bus/i2c/device.hpp +++ b/include/sta/bus/i2c/device.hpp @@ -18,7 +18,7 @@ namespace sta * @param intf %I2C hardware interface * @param csPin The peripheral's address. */ - I2CDevice(I2C * intf, int address, bool master=false, bool blocking=true); + I2CDevice(I2C * intf, int address, bool master=true, bool blocking=true); protected: void select() override; diff --git a/include/sta/bus/interface.hpp b/include/sta/bus/interface.hpp index a26151a..f5bbd9b 100644 --- a/include/sta/bus/interface.hpp +++ b/include/sta/bus/interface.hpp @@ -78,7 +78,7 @@ namespace sta bool isAquired(); private: Mutex * mutex_; - bool aquired_ = false; + bool acquired_ = false; }; } // namespace sta diff --git a/include/sta/devices/raspi/bus/i2c.hpp b/include/sta/devices/raspi/bus/i2c.hpp index d2573ac..b16449c 100644 --- a/include/sta/devices/raspi/bus/i2c.hpp +++ b/include/sta/devices/raspi/bus/i2c.hpp @@ -42,7 +42,8 @@ namespace sta class RaspiI2CDevice : public I2CDevice { - RaspiI2CDevice(RaspiI2C * intf, uint16_t address_10bit, Mutex* mutex=nullptr, bool master=false, bool blocking=true); + public: + RaspiI2CDevice(RaspiI2C * intf, uint16_t address_10bit, bool master=true, bool blocking=true); }; } // namespace sta diff --git a/src/bus/interface.cpp b/src/bus/interface.cpp index 627e863..d32292d 100644 --- a/src/bus/interface.cpp +++ b/src/bus/interface.cpp @@ -12,18 +12,18 @@ namespace sta void Interface::acquire() { - if (mutex_ != nullptr) - mutex_->acquire(); + mutex_->acquire(); + acquired_ = true; } void Interface::release() { - if (mutex_ != nullptr) - mutex_->release(); + mutex_->release(); + acquired_ = false; } bool Interface::isAquired() { - return aquired_; + return acquired_; } } // namespace sta diff --git a/src/devices/raspi/bus/i2c.cpp b/src/devices/raspi/bus/i2c.cpp index be270c6..689d7df 100644 --- a/src/devices/raspi/bus/i2c.cpp +++ b/src/devices/raspi/bus/i2c.cpp @@ -3,6 +3,7 @@ #ifdef STA_PLATFORM_RASPI #include +#include #include #include @@ -11,6 +12,7 @@ #include #include #include +#include #include @@ -41,21 +43,33 @@ namespace sta { STA_ASSERT(open_); - write(i2cfd_, &value, 1); + ssize_t n_out = write(i2cfd_, &value, 1); + + if (n_out < 0) + { + STA_DEBUG_PRINT("Transfer of single byte failed: "); + STA_DEBUG_PRINTLN(strerror(errno)); + } + + STA_ASSERT(n_out == 1); } void RaspiI2C::transfer16(uint16_t value) { STA_ASSERT(open_); - write(i2cfd_, &value, 2); + ssize_t n_out = write(i2cfd_, &value, 2); + + STA_ASSERT(n_out == 2); } void RaspiI2C::transfer(const uint8_t * buffer, size_t size) { STA_ASSERT(open_); - write(i2cfd_, buffer, size); + ssize_t n_out = write(i2cfd_, buffer, size); + + STA_ASSERT(n_out == size); } void RaspiI2C::transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size) @@ -83,7 +97,9 @@ namespace sta uint8_t *buffer = new uint8_t[count]; memset(buffer, value, count); - write(i2cfd_, buffer, count); + ssize_t n_out = write(i2cfd_, buffer, count); + + STA_ASSERT(n_out == count); delete [] buffer; } @@ -100,6 +116,8 @@ namespace sta open_ = true; STA_ASSERT(i2cfd_ >= 0); + + STA_DEBUG_PRINTLN("Successfully opened file"); } void RaspiI2C::release() @@ -111,8 +129,8 @@ namespace sta I2C::release(); } - RaspiI2CDevice::RaspiI2CDevice(RaspiI2C * intf, uint16_t address_10bit, Mutex* mutex, bool master, bool blocking) - : I2CDevice { intf, address_10bit } + RaspiI2CDevice::RaspiI2CDevice(RaspiI2C * intf, uint16_t address_10bit, bool master, bool blocking) + : I2CDevice { intf, address_10bit, master, blocking } { }