Merge branch 'raspi-support' of ssh://git.intern.spaceteamaachen.de:22222/ALPAKA/sta-core into raspi-support

This commit is contained in:
dario
2023-08-20 17:39:17 +02:00
5 changed files with 46 additions and 20 deletions

View File

@@ -12,16 +12,14 @@ namespace sta
void Interface::acquire()
{
if (mutex_ != nullptr)
mutex_->acquire();
acquired_ = true;
mutex_->acquire();
acquired_ = true;
}
void Interface::release()
{
if (mutex_ != nullptr)
acquired_ = false;
mutex_->release();
mutex_->release();
acquired_ = false;
}
bool Interface::isAcquired()

View File

@@ -3,6 +3,7 @@
#ifdef STA_PLATFORM_RASPI
#include <sta/debug/assert.hpp>
#include <sta/debug/debug.hpp>
#include <cstdlib>
#include <string.h>
@@ -11,6 +12,7 @@
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
@@ -41,46 +43,67 @@ namespace sta
{
STA_ASSERT(open_);
write(i2cfd_, &value, 1);
selectAddress();
ssize_t n_out = write(i2cfd_, &value, 1);
STA_ASSERT(n_out == 1);
}
void RaspiI2C::transfer16(uint16_t value)
{
STA_ASSERT(open_);
write(i2cfd_, &value, 2);
selectAddress();
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);
selectAddress();
ssize_t n_out = write(i2cfd_, buffer, size);
STA_ASSERT(n_out == size);
}
void RaspiI2C::receive(uint8_t * buffer, size_t size)
{
STA_ASSERT(open_);
if (read(i2cfd_, buffer, size) <= 0)
{
printf("Error while reading i2c bus.");
}
selectAddress();
ssize_t n_in = read(i2cfd_, buffer, size);
STA_ASSERT(n_in >= 0);
}
void RaspiI2C::fill(uint8_t value, size_t count)
{
STA_ASSERT(open_);
selectAddress();
// Initialize a buffer of size count and fill it with the value.
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;
}
void RaspiI2C::selectAddress()
{
// Select the slave with the given address.
int rslt = ioctl(i2cfd_, I2C_SLAVE, address_);
STA_ASSERT(rslt != -1);
}
void RaspiI2C::acquire()
{
I2C::acquire();
@@ -99,16 +122,19 @@ namespace sta
{
if (!persistent_open_ && open_) {
close(i2cfd_);
open_ = false;
}
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 }
{
}
} // namespace sta
#endif // STA_PLATFORM_RASPI