#ifndef _I2C_H_ #define _I2C_H_ #include namespace serial { enum i2c_id { i2c_ch0, i2c_ch1 }; // // Base template class // template 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 { 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 pImpL; }; // // Template for channel 1 // template<> class I2C { 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 pImpL; }; }// Namespace serial #endif // _I2C_H_