/***************************************************************************
 *   Copyright (C) 2021 by Santiago González                               *
 *                                                                         *
 ***( see copyright.txt file at root folder )*******************************/

#pragma once

#include "mcutwi.h"
//#include "mcutypes.h"

class eMcu; 
//class McuPin; 

class AvrTwi : public McuTwi
{
    public:
        AvrTwi( eMcu* mcu, QString name ); 
        ~AvrTwi(); 

        virtual void setup() override; 
        virtual void initialize() override; 

        virtual void configureA( uint8_t newTWCR ) override; 
        virtual void configureB( uint8_t val ) override; 

        virtual void writeAddrReg( uint8_t newTWAR ) override; 
        virtual void writeStatus( uint8_t newTWSR ) override; 
        virtual void writeTwiReg( uint8_t newTWDR ) override; 

        virtual void writeByte() override; 

        virtual void I2Cstop() override; 

    protected:
        virtual void setTwiState( twiState_t state ) override; 
        uint8_t getStaus() { return *m_statReg &= 0b11111000;  }
        virtual void updateFreq() override; 

        uint8_t m_bitRate; 

        uint8_t*  m_TWCR; 
        //uint8_t*  m_TWSR; 

        regBits_t m_TWEN; 
        regBits_t m_TWWC; 
        regBits_t m_TWSTO; 
        regBits_t m_TWSTA; 
        regBits_t m_TWEA; 
        regBits_t m_TWINT; 

}; 
