mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/sta-core.git
synced 2025-06-12 01:25:59 +00:00
Added changes for Raspi I2C
This commit is contained in:
parent
266cc46a09
commit
017c07a077
@ -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;
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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 }
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user