You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
3.5 KiB
167 lines
3.5 KiB
#include "ii2c.hpp"
|
|
#include <memory>
|
|
#include <iostream>
|
|
//
|
|
// implementation
|
|
//
|
|
|
|
/**
|
|
* dummy implementation version
|
|
*/
|
|
class I2C::I2C_impl
|
|
{
|
|
public:
|
|
I2C_impl()
|
|
{
|
|
std::cout << "dummy I2C Ctor" << std::endl;
|
|
}
|
|
uint8_t readByte(const uint8_t& address,
|
|
const uint8_t& reg)
|
|
{
|
|
std::cout << "dummy I2C readByte()" << std::endl;
|
|
std::cout << "\taddress: " << static_cast<int>(address) << std::endl;
|
|
std::cout << "\treg : " << static_cast<int>(reg) << std::endl;
|
|
std::cout << "\treturning 0" << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void writeByte(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
const uint8_t& byte)
|
|
{
|
|
std::cout << "dummy I2C writeByte()" << std::endl;
|
|
std::cout << "\taddress: " << static_cast<int>(address) << std::endl;
|
|
std::cout << "\treg : " << static_cast<int>(reg) << std::endl;
|
|
std::cout << "\tbyte : " << static_cast<int>(byte) << std::endl;
|
|
}
|
|
|
|
|
|
uint16_t readWord(const uint8_t& address,
|
|
const uint8_t& reg)
|
|
{
|
|
std::cout << "dummy I2C readWord()" << std::endl;
|
|
std::cout << "\taddress: " << static_cast<int>(address) << std::endl;
|
|
std::cout << "\treg : " << static_cast<int>(reg) << std::endl;
|
|
std::cout << "\treturning 0" << std::endl;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void writeWord(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
const uint16_t& word)
|
|
{
|
|
std::cout << "dummy I2C writeWord()" << std::endl;
|
|
std::cout << "\taddress: " << static_cast<int>(address) << std::endl;
|
|
std::cout << "\treg : " << static_cast<int>(reg) << std::endl;
|
|
std::cout << "\tword : " << static_cast<int>(word) << std::endl;
|
|
}
|
|
|
|
void readBuffer(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
uint8_t data[],
|
|
uint8_t len)
|
|
{
|
|
uint8_t i = 0;
|
|
|
|
std::cout << "dummy I2C readBuffer()" << std::endl;
|
|
std::cout << "\taddress: " << static_cast<int>(address) << std::endl;
|
|
std::cout << "\treg : " << static_cast<int>(reg) << std::endl;
|
|
std::cout << "\tfilling array..." << std::endl;
|
|
for(i = 0; i < len; i++) {
|
|
data[i] = i;
|
|
}
|
|
std::cout << "\t...done!" << std::endl;
|
|
}
|
|
|
|
void writeBuffer(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
const uint8_t data[],
|
|
uint8_t len)
|
|
{
|
|
uint8_t i = 0;
|
|
|
|
std::cout << "dummy I2C writeBuffer()" << std::endl;
|
|
std::cout << "\taddress: " << static_cast<int>(address) << std::endl;
|
|
std::cout << "\treg : " << static_cast<int>(reg) << std::endl;
|
|
std::cout << "\twriting array..." << std::endl;
|
|
for(i = 0; i < len; i++) {
|
|
std::cout << "\t" << static_cast<int>(data[i]) << std::endl;
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
//
|
|
// information relay
|
|
//
|
|
|
|
I2C::I2C() :
|
|
impl{std::make_unique<I2C_impl>()}
|
|
{
|
|
|
|
}
|
|
|
|
I2C::~I2C()
|
|
{
|
|
|
|
}
|
|
|
|
uint8_t I2C::readByte(const uint8_t& address,
|
|
const uint8_t& reg)
|
|
{
|
|
return impl->readByte(address,
|
|
reg);
|
|
}
|
|
|
|
void I2C::writeByte(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
const uint8_t& word)
|
|
{
|
|
impl->writeByte(address,
|
|
reg,
|
|
word);
|
|
}
|
|
|
|
|
|
uint16_t I2C::readWord(const uint8_t& address,
|
|
const uint8_t& reg)
|
|
|
|
{
|
|
return impl->readWord(address,
|
|
reg);
|
|
}
|
|
|
|
void I2C::writeWord(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
const uint16_t& word)
|
|
{
|
|
impl->writeWord(address,
|
|
reg,
|
|
word);
|
|
}
|
|
|
|
void I2C::readBuffer(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
uint8_t data[],
|
|
uint8_t len)
|
|
{
|
|
impl->readBuffer(address,
|
|
reg,
|
|
data,
|
|
len);
|
|
}
|
|
|
|
void I2C::writeBuffer(const uint8_t& address,
|
|
const uint8_t& reg,
|
|
const uint8_t data[],
|
|
uint8_t len)
|
|
{
|
|
impl->writeBuffer(address,
|
|
reg,
|
|
data,
|
|
len);
|
|
}
|