mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/sta-core.git
synced 2025-06-13 01:55:59 +00:00
73 lines
1.9 KiB
C++
73 lines
1.9 KiB
C++
#include <sta/devices/arduino/bus/i2c.hpp>
|
|
|
|
#ifdef STA_PLATFORM_ARDUINO
|
|
|
|
#include <sta/devices/arduino/hal.hpp>
|
|
|
|
|
|
namespace sta
|
|
{
|
|
#ifdef STA_PLATFORM_ARDUINO_DEVICE_ESP32
|
|
ArduinoI2C::ArduinoI2C(Mutex * mutex /* = nullptr */, uint8_t sda /* = STA_ESP32_SDA_DEFAULT_PIN */, uint8_t scl /*= STA_ESP32_SCL_DEFAULT_PIN */, uint32_t frequency /* = 0U */)
|
|
: I2C{mutex}
|
|
{
|
|
Wire.begin(sda, scl, frequency);
|
|
}
|
|
#else
|
|
ArduinoI2C::ArduinoI2C(Mutex * mutex /* = nullptr */)
|
|
: I2C{mutex}
|
|
{
|
|
Wire.begin();
|
|
}
|
|
#endif // STA_PLATFORM_ARDUINO_DEVICE_ESP32
|
|
|
|
void ArduinoI2C::transfer(uint8_t value)
|
|
{
|
|
Wire.beginTransmission((uint8_t)address_);
|
|
Wire.write(value);
|
|
Wire.endTransmission(true);
|
|
}
|
|
|
|
void ArduinoI2C::transfer16(uint16_t value)
|
|
{
|
|
Wire.beginTransmission((uint8_t)address_);
|
|
Wire.write(value);
|
|
Wire.endTransmission(true);
|
|
}
|
|
|
|
void ArduinoI2C::transfer(const uint8_t * buffer, size_t size)
|
|
{
|
|
Wire.beginTransmission((uint8_t)address_);
|
|
Wire.write(buffer, size);
|
|
Wire.endTransmission();
|
|
}
|
|
|
|
void ArduinoI2C::receive(uint8_t * buffer, size_t size)
|
|
{
|
|
size_t count = Wire.requestFrom((uint8_t)address_, (uint8_t)size, true);
|
|
|
|
for (size_t i = 0; i < min(size, count); ++i)
|
|
{
|
|
buffer[i] = Wire.read();
|
|
}
|
|
}
|
|
|
|
void ArduinoI2C::fill(uint8_t value, size_t count)
|
|
{
|
|
// Initialize a buffer of size count and fill it with the value.
|
|
uint8_t buffer[count];
|
|
memset(buffer, value, count);
|
|
|
|
Wire.beginTransmission((uint8_t)address_);
|
|
Wire.write(buffer, count);
|
|
Wire.endTransmission();
|
|
}
|
|
|
|
ArduinoI2CDevice::ArduinoI2CDevice(I2C * intf, uint8_t address, bool master /* = true */, bool blocking /* = true */)
|
|
: I2CDevice{intf, address, master, blocking}
|
|
{
|
|
|
|
}
|
|
} // namespace sta
|
|
|
|
#endif // STA_PLATFORM_ARDUINO
|