Hello every0x01,
I am trying to do 3 interfaces where,
A Controller interface extends Writeable and Readable interfaces and class I2CCommController implements Controller interface.
But I can't get my code compiled
Code:
class Writeable
{
public:
virtual ~Writeable() {}
virtual bool writeByte(uint8_t byte) = 0;
virtual uint8_t writeBytes(uint8_t* bytes, uint8_t offset, uint8_t length) = 0;
virtual uint8_t writeBytes(uint8_t* bytes, uint8_t length) = 0;
virtual uint8_t write(const char* string) = 0;
virtual uint8_t write(int value) = 0;
virtual uint8_t getAvailableForWrite() = 0;
};
Code:
class Readable
{
public:
virtual ~Readable() {}
virtual bool readByte(uint8_t* byte) = 0;
virtual uint8_t readBytes(uint8_t* buffer, uint8_t length) = 0;
virtual uint8_t getAvailable() = 0;
};
Code:
class Controller : public Readable, public Writeable
{
public:
virtual ~Controller(){}
virtual uint8_t open() = 0; // Open I2C communication I/O Stream
virtual void close() = 0; // Close I2C communication I/O Stream
virtual bool isOpened() = 0;
//virtual Readable getReceiver() = 0;
//virtual Writeable getWritter() = 0;
};
Problem is caused in a class I2CCommController which implements Controller interface
Code:
class I2CCommController : public Controller
{
private:
uint16_t clockFrequency;
uint8_t address;
bool isOpen;
volatile uint8_t status;
volatile uint8_t slaveRW;
volatile uint8_t sendStopBit; // should the transaction end with a stop
volatile uint8_t inRepStart; // in the middle of a repeated start
char controllerState;
CircularQueue rxQueue;
CircularQueue txQueue;
static I2CCommController* i2cControllerPtr;
public:
I2CCommController(int _clockFrequency, uint8_t _address);
I2CCommController();
void setFrequency(uint16_t _clockFrequency);
uint16_t getFrequency();
void setAddress(uint8_t _address);
uint8_t getAddress();
void start();
void stop();
// Methods for Output Stream
bool writeByte(uint8_t byte);
uint8_t writeBytes(uint8_t* bytes, uint8_t length);
uint8_t writeBytes(uint8_t* bytes, uint8_t length, const bool sendStop);
uint8_t writeBytes(uint8_t* bytes, uint8_t offset, uint8_t length);
uint8_t write(int value);
uint8_t write(const char* string);
uint8_t getAvailableForWrite();
// Methods for Input Stream
bool readByte(uint8_t* byte);
uint8_t readBytes(uint8_t* buffer, uint8_t length);
uint8_t readBytes(uint8_t* buffer, uint8_t length, const bool sendStop);
uint8_t getAvailable();
// Methods for I/O Stream Control
uint8_t open(); // Open I2C communication I/O Stream
void close(); // Close I2C communication I/O Stream
bool isOpened();
//Readable getReceiver();
//Writeable getWritter();
friend void TWI_vect(void);
inline void interruptTWIHandler(voi
Writing without inheriting from Controller, and it compiles.
Code:
class I2CCommController
How is proper interface inheritance implemented in C++?