Added changes for Raspi I2C

This commit is contained in:
Dario 2023-08-14 21:04:23 +01:00
parent 266cc46a09
commit 017c07a077
5 changed files with 33 additions and 14 deletions

View File

@ -18,7 +18,7 @@ namespace sta
* @param intf %I2C hardware interface * @param intf %I2C hardware interface
* @param csPin The peripheral's address. * @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: protected:
void select() override; void select() override;

View File

@ -78,7 +78,7 @@ namespace sta
bool isAquired(); bool isAquired();
private: private:
Mutex * mutex_; Mutex * mutex_;
bool aquired_ = false; bool acquired_ = false;
}; };
} // namespace sta } // namespace sta

View File

@ -42,7 +42,8 @@ namespace sta
class RaspiI2CDevice : public I2CDevice 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 } // namespace sta

View File

@ -12,18 +12,18 @@ namespace sta
void Interface::acquire() void Interface::acquire()
{ {
if (mutex_ != nullptr) mutex_->acquire();
mutex_->acquire(); acquired_ = true;
} }
void Interface::release() void Interface::release()
{ {
if (mutex_ != nullptr) mutex_->release();
mutex_->release(); acquired_ = false;
} }
bool Interface::isAquired() bool Interface::isAquired()
{ {
return aquired_; return acquired_;
} }
} // namespace sta } // namespace sta

View File

@ -3,6 +3,7 @@
#ifdef STA_PLATFORM_RASPI #ifdef STA_PLATFORM_RASPI
#include <sta/debug/assert.hpp> #include <sta/debug/assert.hpp>
#include <sta/debug/debug.hpp>
#include <cstdlib> #include <cstdlib>
#include <string.h> #include <string.h>
@ -11,6 +12,7 @@
#include <linux/i2c-dev.h> #include <linux/i2c-dev.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <fcntl.h> #include <fcntl.h>
#include <errno.h>
#include <unistd.h> #include <unistd.h>
@ -41,21 +43,33 @@ namespace sta
{ {
STA_ASSERT(open_); 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) void RaspiI2C::transfer16(uint16_t value)
{ {
STA_ASSERT(open_); 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) void RaspiI2C::transfer(const uint8_t * buffer, size_t size)
{ {
STA_ASSERT(open_); 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) 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]; uint8_t *buffer = new uint8_t[count];
memset(buffer, value, count); memset(buffer, value, count);
write(i2cfd_, buffer, count); ssize_t n_out = write(i2cfd_, buffer, count);
STA_ASSERT(n_out == count);
delete [] buffer; delete [] buffer;
} }
@ -100,6 +116,8 @@ namespace sta
open_ = true; open_ = true;
STA_ASSERT(i2cfd_ >= 0); STA_ASSERT(i2cfd_ >= 0);
STA_DEBUG_PRINTLN("Successfully opened file");
} }
void RaspiI2C::release() void RaspiI2C::release()
@ -111,8 +129,8 @@ namespace sta
I2C::release(); I2C::release();
} }
RaspiI2CDevice::RaspiI2CDevice(RaspiI2C * intf, uint16_t address_10bit, Mutex* mutex, bool master, bool blocking) RaspiI2CDevice::RaspiI2CDevice(RaspiI2C * intf, uint16_t address_10bit, bool master, bool blocking)
: I2CDevice { intf, address_10bit } : I2CDevice { intf, address_10bit, master, blocking }
{ {
} }