#include "i2c.hpp"

namespace i2c
{

void I2CDevice::read(uint8_t& data)
{
    // TODO
    (void)data;
}

void I2CDevice::read(uint8_t addr, uint8_t& data)
{
    // TODO
    (void)addr;
    (void)data;
}

void I2CDevice::read(uint8_t addr, uint16_t& data)
{
    // TODO
    (void)addr;
    (void)data;
}

void I2CDevice::read(uint8_t addr, uint8_t& size, uint8_t* data)
{
    // TODO
    (void)addr;
    (void)size;
    (void)data;
}

void I2CDevice::write(uint8_t data)
{
    // TODO
    (void)data;
}

void I2CDevice::write(uint8_t addr, uint8_t data)
{
    // TODO
    (void)addr;
    (void)data;
}

void I2CDevice::write(uint8_t addr, uint16_t data)
{
    // TODO
    (void)addr;
    (void)data;
}

void I2CDevice::write(uint8_t addr, uint8_t size, const uint8_t* data)
{
    // TODO
    (void)addr;
    (void)size;
    (void)data;
}

std::unique_ptr<I2CInterface> I2CDevice::create(uint8_t busId, uint8_t devAddr)
{
    std::unique_ptr<I2CDevice> dev(new I2CDevice(busId, devAddr));
    return dev;
}

std::unique_ptr<I2CInterface> create(uint8_t busId, uint8_t devAddr)
{
    return I2CDevice::create(busId, devAddr);
}

} // namespace i2c
