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.

108 lines
2.3 KiB

#ifndef _I2C_H_
#define _I2C_H_
#include <memory>
namespace serial
{
enum i2c_id
{
i2c_ch0,
i2c_ch1
};
//
// Base template class
//
template<i2c_id id>
class I2C
{
public:
I2C(const uint8_t& mode); // Mode : Master or Slave
uint8_t readByte(const uint8_t& address, const uint8_t& reg);
uint16_t readWord(const uint8_t& address, const uint8_t& reg);
uint8_t writeByte(const uint8_t& address, const uint8_t& data);
uint8_t writeWord(const uint8_t& address, const uint8_t& reg, const uint16_t& data);
void writeBuffer(const uint8_t& address, const uint8_t* buff, const uint8_t& len);
private:
};
//
// Template for channel 0
//
template<>
class I2C <i2c_ch0>
{
public:
I2C(const uint8_t& mode)
{
}
uint8_t readByte(const uint8_t& address, const uint8_t& reg)
{
return pImpL.readByte(address, reg);
}
uint16_t readWord(const uint8_t& address, const uint8_t& reg)
{
return pImpL.readWord(address,reg);
}
uint8_t writeByte(const uint8_t& address, const uint8_t& data)
{
return pImpL.writeByte(address, data);
}
uint8_t writeWord(const uint8_t& address, const uint8_t& reg, const uint16_t& data)
{
return pImpL.writeWord(address, reg, data);
}
void writeBuffer(const uint8_t& address, const uint8_t* buff, const uint8_t& len);
{
pImpL.writeBuffer(address, buff, len);
}
private:
class i2c_ch0_pImpL;
std::unique_ptr<i2c_ch0_pImpL> pImpL;
};
//
// Template for channel 1
//
template<>
class I2C <i2c_ch1>
{
public:
I2C(const uint8_t& mode)
{
}
uint8_t readByte(const uint8_t& address, const uint8_t& reg)
{
return pImpL.readByte(address, reg);
}
uint16_t readWord(const uint8_t& address, const uint8_t& reg)
{
return pImpL.readWord(address,reg);
}
uint8_t writeByte(const uint8_t& address, const uint8_t& data)
{
return pImpL.writeByte(address, data);
}
uint8_t writeWord(const uint8_t& address, const uint8_t& reg, const uint16_t& data)
{
return pImpL.writeWord(address, reg, data);
}
void writeBuffer(const uint8_t& address, const uint8_t* buff, const uint8_t& len)
{
pImpL.writeBuffer(address, buff, len);
}
private:
class i2c_ch1_pImpL;
std::unique_ptr<i2c_ch1_pImpL> pImpL;
};
}// Namespace serial
#endif // _I2C_H_